diff flys-client/src/main/java/de/intevation/flys/client/server/GCServiceImpl.java @ 1408:5b5a20e4c4e5

Added a service that loads the Capabilities of a specified WMS - display those information in the ExternalWMSWindow. flys-client/trunk@3295 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Mon, 21 Nov 2011 12:00:48 +0000
parents
children ec6e4dad1279
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/server/GCServiceImpl.java	Mon Nov 21 12:00:48 2011 +0000
@@ -0,0 +1,108 @@
+package de.intevation.flys.client.server;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import javax.xml.xpath.XPathConstants;
+
+import com.google.gwt.user.server.rpc.RemoteServiceServlet;
+
+import org.w3c.dom.Document;
+
+import org.apache.log4j.Logger;
+
+import de.intevation.artifacts.common.utils.XMLUtils;
+
+import de.intevation.flys.client.shared.exceptions.ServerException;
+import de.intevation.flys.client.shared.model.Capabilities;
+import de.intevation.flys.client.client.services.GCService;
+
+
+/**
+ * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
+ */
+public class GCServiceImpl
+extends      RemoteServiceServlet
+implements   GCService
+{
+    public static final String ERR_GC_REQUEST_FAILED =
+        "error_gc_req_failed";
+
+    public static final String ERR_GC_DOC_NOT_VALID =
+        "error_gc_doc_not_valid";
+
+    public static final String ERR_MALFORMED_URL =
+        "error_malformed_url";
+
+    public static final String XPATH_FEES =
+        "/WMS_Capabilities/Service/Fees/text()";
+
+    public static final String XPATH_ACCESS_CONSTRAINTS =
+        "/WMS_Capabilities/Service/AccessConstraints/text()";
+
+
+    private Logger logger = Logger.getLogger(GCServiceImpl.class);
+
+
+    public Capabilities query(String path)
+    throws ServerException
+    {
+        logger.info("GCServiceImpl.query");
+
+        try {
+            URL url = new URL(path);
+
+            logger.debug("Open connection to url: " + path);
+
+            URLConnection conn = url.openConnection();
+            conn.connect();
+
+            InputStream is = conn.getInputStream();
+
+            return parseCapabilitiesResponse(is);
+        }
+        catch (MalformedURLException mue) {
+            logger.warn(mue, mue);
+            throw new ServerException(ERR_MALFORMED_URL);
+        }
+        catch (IOException ioe) {
+            logger.warn(ioe, ioe);
+        }
+
+        throw new ServerException(ERR_GC_REQUEST_FAILED);
+    }
+
+
+    protected Capabilities parseCapabilitiesResponse(InputStream is)
+    throws ServerException
+    {
+        logger.debug("GCServiceImpl.parseCapabilitiesResponse");
+
+        Document doc = XMLUtils.parseDocument(is, false);
+
+        if (doc == null) {
+            throw new ServerException(ERR_GC_DOC_NOT_VALID);
+        }
+
+        String fees = (String) XMLUtils.xpath(
+            doc,
+            XPATH_FEES,
+            XPathConstants.STRING);
+
+        String accessConstraints = (String) XMLUtils.xpath(
+            doc,
+            XPATH_ACCESS_CONSTRAINTS,
+            XPathConstants.STRING);
+
+        logger.debug("Found fees: " + fees);
+        logger.debug("Found access constraints: " + accessConstraints);
+
+        // TODO PARSE LAYERS
+
+        return new Capabilities(fees, accessConstraints, null);
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org