Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/collections/AttributeWriter.java @ 1639:12235a2ace21
Add positional-conflict-awareness when merging Facets in attribute
of a collection. Apply "first come first serve"-rule.
flys-artifacts/trunk@2824 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Mon, 26 Sep 2011 13:17:55 +0000 |
parents | 1b5204203e18 |
children | f643ea084213 |
comparison
equal
deleted
inserted
replaced
1638:f45bbc80bd3d | 1639:12235a2ace21 |
---|---|
1 package de.intevation.flys.collections; | 1 package de.intevation.flys.collections; |
2 | 2 |
3 import java.util.ArrayList; | |
3 import java.util.List; | 4 import java.util.List; |
4 import java.util.Map; | 5 import java.util.Map; |
5 | 6 |
6 import org.apache.log4j.Logger; | 7 import org.apache.log4j.Logger; |
7 | 8 |
127 { | 128 { |
128 int num = newFacets.size(); | 129 int num = newFacets.size(); |
129 | 130 |
130 // Add all new Facets either in their old state or (if really | 131 // Add all new Facets either in their old state or (if really |
131 // new) as they are. | 132 // new) as they are. |
133 List<ManagedFacet> currentFacets = new ArrayList<ManagedFacet>(); | |
134 List<ManagedFacet> genuinelyNewFacets = new ArrayList<ManagedFacet>(); | |
132 for (int i = 0; i < num; i++) { | 135 for (int i = 0; i < num; i++) { |
133 ManagedFacet facet = (ManagedFacet) newFacets.get(i); | 136 ManagedFacet facet = (ManagedFacet) newFacets.get(i); |
134 | 137 |
135 ManagedFacet picked = pickFacet(facet, oldFacets); | 138 ManagedFacet picked = pickFacet(facet, oldFacets); |
136 Node node = picked.toXML(doc); | 139 if (facet.equals(picked)) { |
140 genuinelyNewFacets.add(picked); | |
141 } | |
142 else { | |
143 currentFacets.add(picked); | |
144 } | |
145 } | |
146 | |
147 // For each genuinely new Facet check positional conflicts. | |
148 for (ManagedFacet newMF: genuinelyNewFacets) { | |
149 boolean conflicts = true; | |
150 // Loop until all conflicts resolved. | |
151 while (conflicts) { | |
152 conflicts = false; | |
153 for (ManagedFacet oldMF: currentFacets) { | |
154 if (newMF.getPosition() == oldMF.getPosition()) { | |
155 conflicts = true; | |
156 logger.debug("Positional conflict while merging " + | |
157 "facets, pushing newest facet 1 up ("+newMF.getPosition()+")"); | |
158 newMF.setPosition(newMF.getPosition() + 1); | |
159 break; | |
160 } | |
161 } | |
162 } | |
163 currentFacets.add(newMF); | |
164 } | |
165 | |
166 // Now add all facets. | |
167 for (ManagedFacet oldMF: currentFacets) { | |
168 Node node = oldMF.toXML(doc); | |
137 if (node != null) { | 169 if (node != null) { |
138 output.appendChild(node); | 170 output.appendChild(node); |
139 } | 171 } |
140 } | 172 } |
141 } | 173 } |