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() {

http://dive4elements.wald.intevation.org