# HG changeset patch # User Ingo Weinzierl # Date 1351166506 -7200 # Node ID 670e98f5a44114cb2a6b3bf319a50e781c62d613 # Parent 5ebaa0a62d2c49dbe19e74df76d2a2bd067bfb9e Fixed leak while merging facets. The ThemeList that is used by OutputHelper to sort the Facets for an Output now uses a list to store the ManagedFacets. The correct order is made up by sorting the List using Collections.sort() function of the Java JDK. Therfore, the ManagedFacet class implements the Comparable interface. The return value of its compareTo(other) method depends on the value of the 'position' field. diff -r 5ebaa0a62d2c -r 670e98f5a441 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/ManagedFacet.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/ManagedFacet.java Thu Oct 25 13:42:21 2012 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/ManagedFacet.java Thu Oct 25 14:01:46 2012 +0200 @@ -4,19 +4,17 @@ import org.w3c.dom.Element; import org.w3c.dom.Node; -import de.intevation.artifacts.ArtifactNamespaceContext; - -import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; - import de.intevation.artifactdatabase.state.DefaultFacet; import de.intevation.artifactdatabase.state.Facet; +import de.intevation.artifacts.ArtifactNamespaceContext; +import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; /** * Facet with user-supplied theme-control-information (pos in list, * active/disabled etc) attached. */ -public class ManagedFacet extends DefaultFacet { +public class ManagedFacet extends DefaultFacet implements Comparable { /** The uuid of the owner artifact. */ protected String uuid; @@ -30,28 +28,19 @@ /** A property that determines if this facet is visible or not. */ protected int visible; - public ManagedFacet() { } - public ManagedFacet( - String name, - int index, - String desc, - String uuid, - int pos, - int active, - int visible) - { + public ManagedFacet(String name, int index, String desc, String uuid, + int pos, int active, int visible) { super(index, name, desc); - this.uuid = uuid; + this.uuid = uuid; this.position = pos; - this.active = active; - this.visible = visible; + this.active = active; + this.visible = visible; } - /** * Sets position (will be merged to position in ThemeList). */ @@ -59,44 +48,37 @@ this.position = pos; } - public int getPosition() { return position; } - public void setActive(int active) { this.active = active; } - public int getActive() { return active; } - public void setVisible(int visible) { this.visible = visible; } - public int getVisible() { return visible; } - /** * Get uuid of related artifact. + * * @return uuid of related artifact. */ public String getArtifact() { return uuid; } - public Node toXML(Document doc) { - ElementCreator ec = new ElementCreator( - doc, + ElementCreator ec = new ElementCreator(doc, ArtifactNamespaceContext.NAMESPACE_URI, ArtifactNamespaceContext.NAMESPACE_PREFIX); @@ -113,17 +95,36 @@ } public void set(ManagedFacet other) { - uuid = other.uuid; + uuid = other.uuid; position = other.position; - active = other.active; + active = other.active; } @Override public Facet deepCopy() { ManagedFacet copy = new ManagedFacet(); - copy.set((DefaultFacet)this); - copy.set((ManagedFacet)this); + copy.set((DefaultFacet) this); + copy.set((ManagedFacet) this); return copy; } + + @Override + public int compareTo(Object o) { + if (!(o instanceof ManagedFacet)) { + return -1; + } + + ManagedFacet other = (ManagedFacet) o; + + if (position < other.position) { + return -1; + } + else if (position > other.position) { + return 1; + } + else { + return 0; + } + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 5ebaa0a62d2c -r 670e98f5a441 flys-artifacts/src/main/java/de/intevation/flys/exports/OutputHelper.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/OutputHelper.java Thu Oct 25 13:42:21 2012 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/OutputHelper.java Thu Oct 25 14:01:46 2012 +0200 @@ -2,6 +2,7 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -470,10 +471,10 @@ */ private static class ThemeList { private Logger logger = Logger.getLogger(ThemeList.class); - protected Map themes; + protected List themes; public ThemeList(Document output) { - themes = new HashMap(); + themes = new ArrayList(); parse(output); } @@ -496,12 +497,14 @@ Element theme = (Element) themeList.item(i); ManagedDomFacet facet = new ManagedDomFacet(theme); - themes.put(Integer.valueOf(facet.getPosition()-1), facet); + themes.add(facet); } + + Collections.sort(themes); } public ManagedFacet get(int idx) { - return themes.get(Integer.valueOf(idx)); + return themes.get(idx); } public int size() {