# HG changeset patch # User Bjoern Ricks # Date 1346419490 0 # Node ID 72d2ec6a471efbc5d5a3a9f0544b5819c0acaa24 # Parent b5825159250ec413f998500a3e01fd38259e8148 Load the list of modules from the flys artifact server flys-client/trunk@5332 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r b5825159250e -r 72d2ec6a471e flys-client/ChangeLog --- 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 + + * 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 * src/main/java/de/intevation/flys/client/shared/model/DefaultModule.java, diff -r b5825159250e -r 72d2ec6a471e flys-client/src/main/java/de/intevation/flys/client/client/services/ModuleService.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 : diff -r b5825159250e -r 72d2ec6a471e flys-client/src/main/java/de/intevation/flys/client/server/ModuleServiceImpl.java --- 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 modules = new ArrayList(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 modules = new ArrayList(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); } }