changeset 524:ba238f917b94

The theme list information stored in the attribute of a collection is read and added in form of Themes and ThemeLists to the Collection. flys-client/trunk@2003 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 25 May 2011 13:42:04 +0000 (2011-05-25)
parents 0785a8ba5e6d
children fc994da131f9
files flys-client/ChangeLog flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartThemePanel.java flys-client/src/main/java/de/intevation/flys/client/server/DescribeCollectionServiceImpl.java flys-client/src/main/java/de/intevation/flys/client/shared/model/Collection.java flys-client/src/main/java/de/intevation/flys/client/shared/model/DefaultCollection.java flys-client/src/main/java/de/intevation/flys/client/shared/model/DefaultTheme.java flys-client/src/main/java/de/intevation/flys/client/shared/model/FacetRecord.java flys-client/src/main/java/de/intevation/flys/client/shared/model/Theme.java flys-client/src/main/java/de/intevation/flys/client/shared/model/ThemeList.java
diffstat 9 files changed, 302 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/flys-client/ChangeLog	Wed May 25 11:34:34 2011 +0000
+++ b/flys-client/ChangeLog	Wed May 25 13:42:04 2011 +0000
@@ -1,3 +1,32 @@
+2011-05-25  Ingo Weinzierl <ingo@intevation.de>
+
+	* src/main/java/de/intevation/flys/client/server/DescribeCollectionServiceImpl.java:
+	  Parse the theme lists - contained in the attribute of the collection -
+	  and add those lists to the collection. The lists are retrievable using
+	  the method getThemeList(String outName).
+
+	* src/main/java/de/intevation/flys/client/shared/model/Theme.java,
+	  src/main/java/de/intevation/flys/client/shared/model/DefaultTheme.java:
+	  The interface and its default implementation of a theme. A theme
+	  represents a curve in a chart or a layer in a map. The default
+	  implementation knows about the facet, the position, the status and the
+	  artifact this theme belongs to.
+
+	* src/main/java/de/intevation/flys/client/shared/model/ThemeList.java:
+	  New. A ThemeList is a wrapper for themes and should provide some
+	  functions to process regularly used operations on a list of themes.
+
+	* src/main/java/de/intevation/flys/client/shared/model/DefaultCollection.java,
+	  src/main/java/de/intevation/flys/client/shared/model/Collection.java:
+	  Added a new constructor that takes a ThemeList as well and a method to
+	  retrieve a ThemeList based on the name of the output.
+
+	* src/main/java/de/intevation/flys/client/shared/model/FacetRecord.java:
+	  This record no longer stores facets but themes.
+
+	* src/main/java/de/intevation/flys/client/client/ui/chart/ChartThemePanel.java:
+	  Modified the process of adding new themes to the theme grid.
+
 2011-05-25  Ingo Weinzierl <ingo@intevation.de>
 
 	* src/main/java/de/intevation/flys/client/shared/model/FacetRecord.java:
--- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartThemePanel.java	Wed May 25 11:34:34 2011 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartThemePanel.java	Wed May 25 13:42:04 2011 +0000
@@ -17,6 +17,8 @@
 import de.intevation.flys.client.shared.model.Facet;
 import de.intevation.flys.client.shared.model.FacetRecord;
 import de.intevation.flys.client.shared.model.OutputMode;
+import de.intevation.flys.client.shared.model.Theme;
+import de.intevation.flys.client.shared.model.ThemeList;
 
 import de.intevation.flys.client.client.FLYSConstants;
 
@@ -119,10 +121,23 @@
     protected void updateGrid() {
         clearGrid();
 
-        List<Facet> facets = mode.getFacets();
+        ThemeList themeList = collection.getThemeList(mode.getName());
 
-        for (Facet facet: facets) {
-            list.addData(new FacetRecord(facet));
+        if (themeList == null) {
+            GWT.log("ERROR: No theme list.");
+            return;
+        }
+
+        int count = themeList.getThemeCount();
+
+        for (int i = 1; i <= count; i++) {
+            Theme theme = themeList.getThemeAt(i);
+
+            if (theme == null) {
+                continue;
+            }
+
+            list.addData(new FacetRecord(theme));
         }
     }
 
--- a/flys-client/src/main/java/de/intevation/flys/client/server/DescribeCollectionServiceImpl.java	Wed May 25 11:34:34 2011 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/server/DescribeCollectionServiceImpl.java	Wed May 25 13:42:04 2011 +0000
@@ -1,7 +1,9 @@
 package de.intevation.flys.client.server;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.xpath.XPathConstants;
 
@@ -27,9 +29,12 @@
 import de.intevation.flys.client.shared.model.DefaultCollectionItem;
 import de.intevation.flys.client.shared.model.DefaultFacet;
 import de.intevation.flys.client.shared.model.DefaultOutputMode;
+import de.intevation.flys.client.shared.model.DefaultTheme;
 import de.intevation.flys.client.shared.model.ExportMode;
 import de.intevation.flys.client.shared.model.Facet;
 import de.intevation.flys.client.shared.model.OutputMode;
+import de.intevation.flys.client.shared.model.Theme;
+import de.intevation.flys.client.shared.model.ThemeList;
 import de.intevation.flys.client.client.services.DescribeCollectionService;
 
 
@@ -72,6 +77,8 @@
                 throw new ServerException(ERROR_DESCRIBE_COLLECTION);
             }
 
+            System.out.println("Collection successfully parsed.");
+
             return c;
         }
         catch (ConnectionException ce) {
@@ -110,7 +117,17 @@
             return null;
         }
 
-        Collection c = new DefaultCollection(uuid);
+        Map<String, ThemeList> themeList = parseThemeLists(description);
+
+        Collection c = null;
+
+        if (themeList != null) {
+            c = new DefaultCollection(uuid, themeList);
+            //c = new DefaultCollection(uuid);
+        }
+        else {
+            c = new DefaultCollection(uuid);
+        }
 
         NodeList items = (NodeList) XMLUtils.xpath(
             description,
@@ -142,6 +159,92 @@
     }
 
 
+    protected Map<String, ThemeList> parseThemeLists(Document description) {
+        System.out.println("DescribeCollectionServiceImpl.parseThemeLists");
+
+        NodeList lists = (NodeList) XMLUtils.xpath(
+            description,
+            "/art:artifact-collection/art:attribute/art:outputs/art:output",
+            XPathConstants.NODESET,
+            ArtifactNamespaceContext.INSTANCE);
+
+        int num = lists != null ? lists.getLength() : 0;
+
+        Map<String, ThemeList> themeList = new HashMap<String, ThemeList>(num);
+
+        for (int i = 0; i < num; i++) {
+            Node node = lists.item(i);
+
+            String outName = XMLUtils.xpathString(
+                node, "@name", ArtifactNamespaceContext.INSTANCE);
+
+            ThemeList list = parseThemeList(node);
+
+            if (list != null) {
+                themeList.put(outName, list);
+            }
+        }
+
+        return themeList;
+    }
+
+
+    protected ThemeList parseThemeList(Node node) {
+        System.out.println("DescribeCollectionServiceImpl.parseThemeList");
+
+        NodeList themes = (NodeList) XMLUtils.xpath(
+            node,
+            "art:theme",
+            XPathConstants.NODESET,
+            ArtifactNamespaceContext.INSTANCE);
+
+        int num = themes != null ? themes.getLength() : 0;
+
+        List<Theme> themeList = new ArrayList<Theme>(num);
+
+        for (int i = 0; i < num; i++) {
+            Theme theme = parseTheme(themes.item(i));
+
+            if (theme != null) {
+                themeList.add(theme);
+            }
+        }
+
+        return new ThemeList(themeList);
+    }
+
+
+    protected Theme parseTheme(Node node) {
+        System.out.println("DescribeCollectionServiceImpl.parseTheme");
+
+        String strAct = XMLUtils.xpathString(
+            node, "@art:active", ArtifactNamespaceContext.INSTANCE);
+
+        String art = XMLUtils.xpathString(
+            node, "@art:artifact", ArtifactNamespaceContext.INSTANCE);
+
+        String fac = XMLUtils.xpathString(
+            node, "@art:facet", ArtifactNamespaceContext.INSTANCE);
+
+        String strPos = XMLUtils.xpathString(
+            node, "@art:pos", ArtifactNamespaceContext.INSTANCE);
+
+        if (strAct != null && art != null && fac != null && strPos != null) {
+            try {
+                int pos    = Integer.valueOf(strPos);
+                int active = Integer.valueOf(strAct);
+
+                return new DefaultTheme(pos, active > 0, art, fac);
+            }
+            catch (NumberFormatException nfe) {
+                nfe.printStackTrace();
+            }
+        }
+
+        return null;
+    }
+
+
     /**
      * This method extracts the CollectionItem from <i>node</i> with its output
      * modes. The output modes are parsed using the parseOutputModes() method.
--- a/flys-client/src/main/java/de/intevation/flys/client/shared/model/Collection.java	Wed May 25 11:34:34 2011 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/shared/model/Collection.java	Wed May 25 13:42:04 2011 +0000
@@ -27,5 +27,7 @@
     public CollectionItem getItem(int idx);
 
     public Map<String, OutputMode> getOutputModes();
+
+    public ThemeList getThemeList(String outName);
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/flys-client/src/main/java/de/intevation/flys/client/shared/model/DefaultCollection.java	Wed May 25 11:34:34 2011 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/shared/model/DefaultCollection.java	Wed May 25 13:42:04 2011 +0000
@@ -26,6 +26,8 @@
     /** The list of artifacts that are managed by this Collection.*/
     protected List<CollectionItem> items;
 
+    protected Map<String, ThemeList> themeLists;
+
 
     /**
      * Constructor without arguments is necessary for GWT.
@@ -40,8 +42,16 @@
      * @param uuid The UUID.
      */
     public DefaultCollection(String uuid) {
-        this.uuid  = uuid;
-        this.items = new ArrayList<CollectionItem>();
+        this.uuid       = uuid;
+        this.items      = new ArrayList<CollectionItem>();
+        this.themeLists = new HashMap<String, ThemeList>();
+    }
+
+
+    public DefaultCollection(String uuid, Map<String, ThemeList> themeLists) {
+        this(uuid);
+
+        this.themeLists = themeLists;
     }
 
 
@@ -132,5 +142,14 @@
 
         return modes;
     }
+
+
+    public ThemeList getThemeList(String outName) {
+        if (themeLists != null) {
+            return themeLists.get(outName);
+        }
+
+        return null;
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/shared/model/DefaultTheme.java	Wed May 25 13:42:04 2011 +0000
@@ -0,0 +1,49 @@
+package de.intevation.flys.client.shared.model;
+
+
+/**
+ * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
+ */
+public class DefaultTheme implements Theme {
+
+    protected int position;
+
+    protected boolean active;
+
+    protected String artifact;
+
+    protected String facet;
+
+
+    public DefaultTheme() {
+    }
+
+
+    public DefaultTheme(int pos, boolean active, String art, String facet) {
+        this.position = pos;
+        this.active   = active;
+        this.artifact = artifact;
+        this.facet    = facet;
+    }
+
+
+    public int getPosition() {
+        return position;
+    }
+
+
+    public boolean isActive() {
+        return active;
+    }
+
+
+    public String getArtifact() {
+        return artifact;
+    }
+
+
+    public String getFacet() {
+        return facet;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/flys-client/src/main/java/de/intevation/flys/client/shared/model/FacetRecord.java	Wed May 25 11:34:34 2011 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/shared/model/FacetRecord.java	Wed May 25 13:42:04 2011 +0000
@@ -12,19 +12,19 @@
 
     protected boolean active;
 
-    protected Facet   facet;
+    protected Theme   theme;
 
 
-    public FacetRecord(Facet facet) {
-        this.facet = facet;
+    public FacetRecord(Theme theme) {
+        this.theme = theme;
 
-        setActive(true);
-        setName(facet.getName());
+        setActive(theme.isActive());
+        setName(theme.getFacet());
     }
 
 
-    public Facet getFacet() {
-        return facet;
+    public Theme getTheme() {
+        return theme;
     }
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/shared/model/Theme.java	Wed May 25 13:42:04 2011 +0000
@@ -0,0 +1,19 @@
+package de.intevation.flys.client.shared.model;
+
+import java.io.Serializable;
+
+
+/**
+ * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
+ */
+public interface Theme extends Serializable {
+
+    int getPosition();
+
+    boolean isActive();
+
+    String getArtifact();
+
+    String getFacet();
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/shared/model/ThemeList.java	Wed May 25 13:42:04 2011 +0000
@@ -0,0 +1,53 @@
+package de.intevation.flys.client.shared.model;
+
+import java.io.Serializable;
+
+import java.util.List;
+
+
+/**
+ * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
+ */
+public class ThemeList implements Serializable {
+
+    public List<Theme> themes;
+
+
+    public ThemeList() {
+    }
+
+
+    public ThemeList(List<Theme> themes) {
+        this.themes = themes;
+    }
+
+
+    public List<Theme> getThemes() {
+        return themes;
+    }
+
+
+    public int getThemeCount() {
+        return themes.size();
+    }
+
+
+    /**
+     * Returns a theme at a specific position. <b>NOTE: Themes start at position
+     * 1. So, take care in loops, that might start at index 0!</b>
+     *
+     * @param pos The position of the desired theme.
+     *
+     * @return a theme.
+     */
+    public Theme getThemeAt(int pos) {
+        for (Theme theme: themes) {
+            if (theme.getPosition() == pos) {
+                return theme;
+            }
+        }
+
+        return null;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org