[Dive4elements-commits] [PATCH 1 of 2] Fixed leak while merging facets

Wald Commits scm-commit at wald.intevation.org
Thu Oct 25 14:02:53 CEST 2012


# HG changeset patch
# User Ingo Weinzierl <weinzierl.ingo at googlemail.com>
# 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<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() {


More information about the Dive4elements-commits mailing list