diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java	Fri Sep 11 15:17:38 2009 +0000
@@ -0,0 +1,132 @@
+/**
+ *
+ */
+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;
+        }
+        
+    }
+    
+   
+}

http://dive4elements.wald.intevation.org