changeset 3529:72d2ec6a471e

Load the list of modules from the flys artifact server flys-client/trunk@5332 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Bjoern Ricks <bjoern.ricks@intevation.de>
date Fri, 31 Aug 2012 13:24:50 +0000
parents b5825159250e
children 8c9c202292fe
files flys-client/ChangeLog flys-client/src/main/java/de/intevation/flys/client/client/services/ModuleService.java flys-client/src/main/java/de/intevation/flys/client/server/ModuleServiceImpl.java
diffstat 3 files changed, 79 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/flys-client/ChangeLog	Fri Aug 31 13:21:26 2012 +0000
+++ b/flys-client/ChangeLog	Fri Aug 31 13:24:50 2012 +0000
@@ -1,3 +1,10 @@
+2012-08-31	Björn Ricks	<bjoern.ricks@intevation.de>
+
+	* src/main/java/de/intevation/flys/client/server/ModuleServiceImpl.java,
+	  src/main/java/de/intevation/flys/client/client/services/ModuleService.java:
+	  Load the list of modules from the flys artifact server. Also respect the
+	  selected attribute of a module.
+
 2012-08-31	Björn Ricks	<bjoern.ricks@intevation.de>
 
 	* src/main/java/de/intevation/flys/client/shared/model/DefaultModule.java,
--- a/flys-client/src/main/java/de/intevation/flys/client/client/services/ModuleService.java	Fri Aug 31 13:21:26 2012 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/services/ModuleService.java	Fri Aug 31 13:24:50 2012 +0000
@@ -3,6 +3,7 @@
 import com.google.gwt.user.client.rpc.RemoteService;
 import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
 
+import de.intevation.flys.client.shared.exceptions.ServerException;
 import de.intevation.flys.client.shared.model.Module;
 
 @RemoteServiceRelativePath("modules")
@@ -15,7 +16,7 @@
      * @return a String array of all available modules
      *
      */
-    public Module[] list(String locale);
+    public Module[] list(String locale) throws ServerException;
 }
 
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 tw=80 :
--- a/flys-client/src/main/java/de/intevation/flys/client/server/ModuleServiceImpl.java	Fri Aug 31 13:21:26 2012 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/server/ModuleServiceImpl.java	Fri Aug 31 13:24:50 2012 +0000
@@ -3,11 +3,24 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.xml.xpath.XPathConstants;
+
 import org.apache.log4j.Logger;
 
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import de.intevation.artifacts.common.ArtifactNamespaceContext;
+import de.intevation.artifacts.common.utils.XMLUtils;
+import de.intevation.artifacts.httpclient.exceptions.ConnectionException;
+import de.intevation.artifacts.httpclient.http.HttpClient;
+import de.intevation.artifacts.httpclient.http.HttpClientImpl;
+
 import de.intevation.flys.client.client.FLYSConstants;
 import de.intevation.flys.client.client.services.ModuleService;
 import de.intevation.flys.client.server.auth.User;
+import de.intevation.flys.client.shared.exceptions.ServerException;
 import de.intevation.flys.client.shared.model.DefaultModule;
 import de.intevation.flys.client.shared.model.Module;
 
@@ -18,41 +31,71 @@
     private static final Logger logger =
         Logger.getLogger(ModuleServiceImpl.class);
 
-    /** Constant value for the WINFO plugin.*/
-    public static final String FIELD_PLUGIN_WINFO = "winfo";
-
-    /** Constant value for the MINFO plugin.*/
-    public static final String FIELD_PLUGIN_MINFO = "minfo";
+    public static final String XPATH_MODULES = "/art:modules/art:module";
 
-    /** Constant value for the MAP plugin.*/
-    public static final String FIELD_PLUGIN_MAP   = "new_map";
-
-    /** Constant value for the CHART plugin.*/
-    public static final String FIELD_PLUGIN_CHART = "new_chart";
-
-    /** Constant value for the FIX plugin.*/
-    public static final String FIELD_PLUGIN_FIX   = "fixanalysis";
+    public static final String ERROR_NO_MODULES_FOUND =
+        "error_no_module_found";
 
     @Override
-    public Module[] list(String locale) {
+    public Module[] list(String locale) throws ServerException {
         User user = this.getUser();
 
-        //TODO load modules from artifactserver
-        Module[] available = {
-            new DefaultModule(FIELD_PLUGIN_WINFO, "WINFO"),
-            new DefaultModule(FIELD_PLUGIN_MINFO, "MINFO"),
-            new DefaultModule(FIELD_PLUGIN_CHART, "Neues Diargamm"),
-            new DefaultModule(FIELD_PLUGIN_FIX,   "Fixierungsanalyse"),
-            new DefaultModule(FIELD_PLUGIN_MAP,   "Neue Karte"),
-        };
+        logger.info("ModuleService.list");
 
-        List<Module> modules = new ArrayList<Module>(available.length);
-        for(Module module : available) {
-            if (user == null || user.canUseFeature("module:" + module.getName())) {
-                modules.add(module);
+        String url = getServletContext().getInitParameter("server-url");
+
+        // create dummy xml
+        Document doc = XMLUtils.newDocument();
+
+        XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator(
+            doc,
+            ArtifactNamespaceContext.NAMESPACE_URI,
+            ArtifactNamespaceContext.NAMESPACE_PREFIX);
+
+        Element dummy = ec.create("modules");
+        doc.appendChild(dummy);
+
+        HttpClient client = new HttpClientImpl(url, locale);
+        try {
+            Document result = client.callService(url, "modules", doc);
+
+            NodeList list = (NodeList) XMLUtils.xpath(
+                result,
+                XPATH_MODULES,
+                XPathConstants.NODESET,
+                ArtifactNamespaceContext.INSTANCE);
+
+            if (list == null) {
+                logger.warn("No modules found.");
+
+                throw new ServerException(ERROR_NO_MODULES_FOUND);
             }
+
+            int num = list.getLength();
+
+            List<Module> modules = new ArrayList<Module>(list.getLength());
+            for(int i =0; i < num; i++) {
+                Element em = (Element)list.item(i);
+                String name = em.getAttributeNS(
+                        ArtifactNamespaceContext.NAMESPACE_URI, "name");
+                String localname = em.getAttributeNS(
+                        ArtifactNamespaceContext.NAMESPACE_URI, "localname");
+                String strselected = em.getAttributeNS(
+                        ArtifactNamespaceContext.NAMESPACE_URI, "selected");
+                boolean selected = strselected == null ? false :
+                        strselected.equalsIgnoreCase("true");
+                logger.debug("Found module " + name + " " + localname);
+                if (user == null || user.canUseFeature("module:" + name)) {
+                    modules.add(new DefaultModule(name, localname, selected));
+                }
+            }
+            return modules.toArray(new Module[modules.size()]);
         }
-        return modules.toArray(new Module[modules.size()]);
+        catch (ConnectionException ce) {
+            logger.error(ce, ce);
+        }
+
+        throw new ServerException(ERROR_NO_MODULES_FOUND);
     }
 }
 

http://dive4elements.wald.intevation.org