tom@8858: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde tom@8858: * Software engineering by Intevation GmbH tom@8858: * tom@8858: * This file is Free Software under the GNU AGPL (>=v3) tom@8858: * and comes with ABSOLUTELY NO WARRANTY! Check out the tom@8858: * documentation coming with Dive4Elements River for details. tom@8858: */ tom@8858: christian@6475: package org.dive4elements.river.client.server; christian@6475: christian@6475: import java.util.HashMap; christian@6475: import java.util.Map; christian@6475: christian@6475: import javax.xml.xpath.XPathConstants; christian@6475: christian@6475: import org.apache.log4j.Logger; christian@6475: import org.dive4elements.artifacts.common.ArtifactNamespaceContext; christian@6475: import org.dive4elements.artifacts.common.utils.XMLUtils; christian@6475: import org.dive4elements.artifacts.httpclient.http.HttpClient; christian@6475: import org.dive4elements.artifacts.httpclient.http.HttpClientImpl; christian@6475: import org.dive4elements.river.client.client.services.ServerInfoService; christian@6475: import org.w3c.dom.Document; christian@6475: import org.w3c.dom.Element; christian@6475: import org.w3c.dom.NodeList; christian@6475: christian@6475: public class ServerInfoServiceImpl extends RemoteServiceServlet implements christian@6475: ServerInfoService { christian@6475: christian@6475: // This works only because currently there is only one info transmitted christian@6475: private static final String XPATH_INFO = "/art:server/art:info"; christian@6475: teichmann@8203: private final Logger log = Logger.getLogger(ServerInfoServiceImpl.class); christian@6475: christian@6475: @Override christian@6475: public Map getConfig(String locale) { christian@6475: Map infoMap = new HashMap(); christian@6475: String url = getServletContext().getInitParameter("server-url"); christian@6475: christian@6475: Document doc = XMLUtils.newDocument(); christian@6475: christian@6475: XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator( christian@6475: doc, christian@6475: ArtifactNamespaceContext.NAMESPACE_URI, christian@6475: ArtifactNamespaceContext.NAMESPACE_PREFIX); christian@6475: christian@6475: doc.appendChild(ec.create("action")); christian@6475: christian@6475: HttpClient client = new HttpClientImpl(url, locale); christian@6475: christian@6475: try { christian@6475: Document res = client.callService(url, "server-info", doc); christian@6475: christian@6475: NodeList info = (NodeList) XMLUtils.xpath(res, christian@6475: XPATH_INFO, christian@6475: XPathConstants.NODESET, christian@6475: ArtifactNamespaceContext.INSTANCE); christian@6475: christian@6475: for (int n = 0; n < info.getLength(); n++) { christian@6475: Element el = (Element)info.item(n); christian@6475: String key = el.getAttributeNS( christian@6475: ArtifactNamespaceContext.NAMESPACE_URI, "key"); christian@6475: String val = el.getAttributeNS( christian@6475: ArtifactNamespaceContext.NAMESPACE_URI, "value"); christian@6475: infoMap.put(key, val); christian@6475: teichmann@8203: log.debug("ServerInfoServiceImpl: " + key + "=" + val); christian@6475: } christian@6475: } christian@6475: catch (Exception ex) { teichmann@8203: log.error(ex, ex); christian@6475: } christian@6475: christian@6475: return infoMap; christian@6475: } christian@6475: christian@6475: christian@6475: }