Mercurial > dive4elements > river
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 :