Mercurial > dive4elements > gnv-client
view gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java @ 2:5e94403971af
infrastructur for Communicationg with the ArtifactDatabase added.
gnv/trunk@71 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Tim Englich <tim.englich@intevation.de> |
---|---|
date | Fri, 11 Sep 2009 15:17:38 +0000 |
parents | |
children | fe6a64545552 |
line wrap: on
line source
/** * */ package de.intevation.gnv.artifactdatabase.client; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.log4j.Logger; import org.restlet.Client; import org.restlet.data.Method; import org.restlet.data.Protocol; import org.restlet.data.Request; import org.restlet.data.Response; import org.restlet.representation.Representation; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseClientException; import de.intevation.gnv.artifactdatabase.objects.ArtifactFactory; import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; import de.intevation.gnv.util.XMLUtils; /** * @author Tim Englich <tim.englich@intevation.de> * */ public class DefaultArtifactDatabaseClient implements ArtifactDatabaseClient { /** * the logger, used to log exceptions and additonaly information */ private static Logger log = Logger.getLogger(DefaultArtifactDatabaseClient.class); // TODO Container for ArtifactDatabases should be used. private static Map<String, String> artifactDatabases = null; private static boolean initialized = false; /** * Constructor */ public DefaultArtifactDatabaseClient() { super(); } /** * @see de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient#getArtifactFactories() */ public Collection<ArtifactObject> getArtifactFactories() throws ArtifactDatabaseClientException { Collection<ArtifactObject> resultValues = null; if (!initialized){ this.initialize(); } try { XMLUtils xmlUtils = new XMLUtils(); log.debug("DefaultArtifactDatabaseClient.getArtifactFactories"); Iterator<String> it = artifactDatabases.values().iterator(); while (it.hasNext()){ String server = it.next(); String url = server+ "/factories"; InputStream inputStream = this.doGetRequest(url); Document document = xmlUtils.readDocument(inputStream); log.debug(xmlUtils.writeDocument2String(document)); if (resultValues == null){ resultValues = this.getArtifactFactories(document,server); }else{ resultValues.addAll(this.getArtifactFactories(document,server)); } } } catch (IOException e) { log.error(e,e); } return resultValues; } private Collection<ArtifactObject> getArtifactFactories(Document document, String server){ XMLUtils xmlUtils = new XMLUtils(); NodeList artifactFactories = xmlUtils.getNodeSetXPath(document, "/result/factories/factory"); Collection<ArtifactObject> resultValues = new ArrayList<ArtifactObject>(artifactFactories.getLength()); if (artifactFactories != null){ for (int i = 0; i < artifactFactories.getLength(); i++){ Node artifactFactoryNode = artifactFactories.item(i); String name = xmlUtils.getStringXPath(artifactFactoryNode, "@name"); String description = xmlUtils.getStringXPath(artifactFactoryNode, "@description"); ArtifactFactory artifactFactory = new ArtifactFactory(name, description, server); resultValues.add(artifactFactory); } } return resultValues; } /** * @throws IOException */ private InputStream doGetRequest(String requestUrl) throws IOException { Client client = new Client(Protocol.HTTP); Request request = new Request(Method.GET, requestUrl); Response response = client.handle(request); Representation output = response.getEntity(); return output.getStream(); } private synchronized void initialize(){ if (!initialized){ this.artifactDatabases = new HashMap<String, String>(); this.artifactDatabases.put("test", "http://localhost:8181"); // TODO Read from Config initialized = true; } } }