ingo@1408: package de.intevation.flys.client.server; ingo@1408: ingo@1408: import java.io.InputStream; ingo@1408: import java.io.IOException; ingo@1408: import java.net.MalformedURLException; ingo@1408: import java.net.URL; ingo@1408: import java.net.URLConnection; ingo@1408: ingo@1408: import javax.xml.xpath.XPathConstants; ingo@1408: ingo@1408: import com.google.gwt.user.server.rpc.RemoteServiceServlet; ingo@1408: ingo@1408: import org.w3c.dom.Document; ingo@1408: ingo@1408: import org.apache.log4j.Logger; ingo@1408: ingo@1408: import de.intevation.artifacts.common.utils.XMLUtils; ingo@1408: ingo@1408: import de.intevation.flys.client.shared.exceptions.ServerException; ingo@1408: import de.intevation.flys.client.shared.model.Capabilities; ingo@1408: import de.intevation.flys.client.client.services.GCService; ingo@1408: ingo@1408: ingo@1408: /** ingo@1408: * @author Ingo Weinzierl ingo@1408: */ ingo@1408: public class GCServiceImpl ingo@1408: extends RemoteServiceServlet ingo@1408: implements GCService ingo@1408: { ingo@1408: public static final String ERR_GC_REQUEST_FAILED = ingo@1408: "error_gc_req_failed"; ingo@1408: ingo@1408: public static final String ERR_GC_DOC_NOT_VALID = ingo@1408: "error_gc_doc_not_valid"; ingo@1408: ingo@1408: public static final String ERR_MALFORMED_URL = ingo@1408: "error_malformed_url"; ingo@1408: ingo@1408: public static final String XPATH_FEES = ingo@1408: "/WMS_Capabilities/Service/Fees/text()"; ingo@1408: ingo@1408: public static final String XPATH_ACCESS_CONSTRAINTS = ingo@1408: "/WMS_Capabilities/Service/AccessConstraints/text()"; ingo@1408: ingo@1408: ingo@1408: private Logger logger = Logger.getLogger(GCServiceImpl.class); ingo@1408: ingo@1408: ingo@1408: public Capabilities query(String path) ingo@1408: throws ServerException ingo@1408: { ingo@1408: logger.info("GCServiceImpl.query"); ingo@1408: ingo@1408: try { ingo@1408: URL url = new URL(path); ingo@1408: ingo@1408: logger.debug("Open connection to url: " + path); ingo@1408: ingo@1408: URLConnection conn = url.openConnection(); ingo@1408: conn.connect(); ingo@1408: ingo@1408: InputStream is = conn.getInputStream(); ingo@1408: ingo@1408: return parseCapabilitiesResponse(is); ingo@1408: } ingo@1408: catch (MalformedURLException mue) { ingo@1408: logger.warn(mue, mue); ingo@1408: throw new ServerException(ERR_MALFORMED_URL); ingo@1408: } ingo@1408: catch (IOException ioe) { ingo@1408: logger.warn(ioe, ioe); ingo@1408: } ingo@1408: ingo@1408: throw new ServerException(ERR_GC_REQUEST_FAILED); ingo@1408: } ingo@1408: ingo@1408: ingo@1408: protected Capabilities parseCapabilitiesResponse(InputStream is) ingo@1408: throws ServerException ingo@1408: { ingo@1408: logger.debug("GCServiceImpl.parseCapabilitiesResponse"); ingo@1408: ingo@1408: Document doc = XMLUtils.parseDocument(is, false); ingo@1408: ingo@1408: if (doc == null) { ingo@1408: throw new ServerException(ERR_GC_DOC_NOT_VALID); ingo@1408: } ingo@1408: ingo@1408: String fees = (String) XMLUtils.xpath( ingo@1408: doc, ingo@1408: XPATH_FEES, ingo@1408: XPathConstants.STRING); ingo@1408: ingo@1408: String accessConstraints = (String) XMLUtils.xpath( ingo@1408: doc, ingo@1408: XPATH_ACCESS_CONSTRAINTS, ingo@1408: XPathConstants.STRING); ingo@1408: ingo@1408: logger.debug("Found fees: " + fees); ingo@1408: logger.debug("Found access constraints: " + accessConstraints); ingo@1408: ingo@1408: // TODO PARSE LAYERS ingo@1408: ingo@1408: return new Capabilities(fees, accessConstraints, null); ingo@1408: } ingo@1408: } ingo@1408: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :