Mercurial > dive4elements > river
changeset 4255:670e98f5a441
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.
author | Ingo Weinzierl <weinzierl.ingo@googlemail.com> |
---|---|
date | Thu, 25 Oct 2012 14:01:46 +0200 |
parents | 5ebaa0a62d2c |
children | 9a1a3406deb5 |
files | flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/ManagedFacet.java flys-artifacts/src/main/java/de/intevation/flys/exports/OutputHelper.java |
diffstat | 2 files changed, 40 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- 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 :
--- 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<Integer, ManagedFacet> themes; + protected List<ManagedFacet> themes; public ThemeList(Document output) { - themes = new HashMap<Integer, ManagedFacet>(); + themes = new ArrayList<ManagedFacet>(); 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() {