Mercurial > dive4elements > river
diff flys-client/src/main/java/de/intevation/flys/client/server/GCServiceImpl.java @ 1417:42d6cf6e10b7
Moved code to parse WMS Capabilities to an own class 'CapabilitiesParser' and added code to parse SRS definitions.
flys-client/trunk@3325 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Mon, 28 Nov 2011 15:55:26 +0000 |
parents | 16f19f12a962 |
children |
line wrap: on
line diff
--- a/flys-client/src/main/java/de/intevation/flys/client/server/GCServiceImpl.java Wed Nov 23 09:45:22 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/GCServiceImpl.java Mon Nov 28 15:55:26 2011 +0000 @@ -1,29 +1,11 @@ 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 java.util.ArrayList; -import java.util.List; - -import javax.xml.xpath.XPathConstants; - import com.google.gwt.user.server.rpc.RemoteServiceServlet; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - 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.shared.model.ContactInformation; -import de.intevation.flys.client.shared.model.WMSLayer; import de.intevation.flys.client.client.services.GCService; @@ -34,62 +16,7 @@ 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_WMS_CAPS = - "/WMS_Capabilities"; - - public static final String XPATH_WMT_CAPS = - "/WMT_MS_Capabilities"; - - public static final String XPATH_TITLE = - "Service/Title/text()"; - - public static final String XPATH_ONLINE_RESOURCE = - "Service/OnlineResource/@href"; - - public static final String XPATH_CONTACT_INFORMATION = - "Service/ContactInformation"; - - public static final String XPATH_CI_PERSON = - "ContactPersonPrimary/ContactPerson/text()"; - - public static final String XPATH_CI_ORGANIZATION = - "ContactPersonPrimary/ContactOrganization/text()"; - - public static final String XPATH_CI_ADDRESS = - "ContactAddress/Address/text()"; - - public static final String XPATH_CI_CITY = - "ContactAddress/City/text()"; - - public static final String XPATH_CI_POSTCODE = - "ContactAddress/PostCode/text()"; - - public static final String XPATH_CI_PHONE = - "ContactVoiceTelephone/text()"; - - public static final String XPATH_CI_EMAIL = - "ContactElectronicMailAddress/text()"; - - public static final String XPATH_FEES = - "Service/Fees/text()"; - - public static final String XPATH_ACCESS_CONSTRAINTS = - "Service/AccessConstraints/text()"; - - public static final String XPATH_LAYERS = - "Capability/Layer"; - - - private Logger logger = Logger.getLogger(GCServiceImpl.class); + private static Logger logger = Logger.getLogger(GCServiceImpl.class); public Capabilities query(String path) @@ -97,209 +24,7 @@ { 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); - } - - Node capabilities = getCapabilitiesNode(doc); - - String title = (String) XMLUtils.xpath( - capabilities, - XPATH_TITLE, - XPathConstants.STRING); - - String onlineResource = (String) XMLUtils.xpath( - capabilities, - XPATH_ONLINE_RESOURCE, - XPathConstants.STRING); - - String fees = (String) XMLUtils.xpath( - capabilities, - XPATH_FEES, - XPathConstants.STRING); - - String accessConstraints = (String) XMLUtils.xpath( - capabilities, - XPATH_ACCESS_CONSTRAINTS, - XPathConstants.STRING); - - Node contactInformation = (Node) XMLUtils.xpath( - capabilities, - XPATH_CONTACT_INFORMATION, - XPathConstants.NODE); - - ContactInformation ci = parseContactInformation(contactInformation); - - logger.debug("Found fees: " + fees); - logger.debug("Found access constraints: " + accessConstraints); - - NodeList layerNodes = (NodeList) XMLUtils.xpath( - capabilities, - XPATH_LAYERS, - XPathConstants.NODESET); - - List<WMSLayer> layers = parseLayers(layerNodes, onlineResource); - - return new Capabilities( - title, - onlineResource, - ci, - fees, - accessConstraints, - layers); - } - - - protected Node getCapabilitiesNode(Document doc) - throws ServerException { - Node capabilities = (Node) XMLUtils.xpath( - doc, - XPATH_WMS_CAPS, - XPathConstants.NODE); - - if (capabilities == null) { - logger.info("No '/WMS_Capabilities' node found."); - logger.info("Try to find a '/WMT_MS_Capabilities' node."); - - capabilities = (Node) XMLUtils.xpath( - doc, - XPATH_WMT_CAPS, - XPathConstants.NODE); - } - - if (capabilities == null) { - throw new ServerException(ERR_GC_DOC_NOT_VALID); - } - - return capabilities; - } - - - protected ContactInformation parseContactInformation(Node node) { - String person = (String) XMLUtils.xpath( - node, - XPATH_CI_PERSON, - XPathConstants.STRING); - - String organization = (String) XMLUtils.xpath( - node, - XPATH_CI_ORGANIZATION, - XPathConstants.STRING); - - String address = (String) XMLUtils.xpath( - node, - XPATH_CI_ADDRESS, - XPathConstants.STRING); - - String postcode = (String) XMLUtils.xpath( - node, - XPATH_CI_POSTCODE, - XPathConstants.STRING); - - String city = (String) XMLUtils.xpath( - node, - XPATH_CI_CITY, - XPathConstants.STRING); - - String phone = (String) XMLUtils.xpath( - node, - XPATH_CI_PHONE, - XPathConstants.STRING); - - String email = (String) XMLUtils.xpath( - node, - XPATH_CI_EMAIL, - XPathConstants.STRING); - - ContactInformation ci = new ContactInformation(); - ci.setPerson(person); - ci.setOrganization(organization); - ci.setAddress(address); - ci.setPostcode(postcode); - ci.setCity(city); - ci.setPhone(phone); - ci.setEmail(email); - - return ci; - } - - - /** - * @param layersNode - * @param onlineResource - * - * @return - */ - protected List<WMSLayer> parseLayers( - NodeList layersNode, - String onlineResource - ) { - int len = layersNode != null ? layersNode.getLength() : 0; - - logger.debug("Node has " + len + " layers."); - - List<WMSLayer> layers = new ArrayList<WMSLayer>(len); - - for (int i = 0; i < len; i++) { - layers.add(parseLayer(layersNode.item(i), onlineResource)); - } - - return layers; - } - - - protected WMSLayer parseLayer(Node layerNode, String onlineResource) { - String title = (String) XMLUtils.xpath( - layerNode, - "Title/text()", - XPathConstants.STRING); - - String name = (String) XMLUtils.xpath( - layerNode, - "Name/text()", - XPathConstants.STRING); - - logger.debug("Found layers: " + title + "(" + name + ")"); - - NodeList layersNodes = (NodeList) XMLUtils.xpath( - layerNode, - "Layer", - XPathConstants.NODESET); - - List<WMSLayer> layers = parseLayers(layersNodes, onlineResource); - - return new WMSLayer(onlineResource, title, name, layers); + return CapabilitiesParser.getCapabilities(path); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :