comparison 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
comparison
equal deleted inserted replaced
1:3481f68e6d2a 2:5e94403971af
1 /**
2 *
3 */
4 package de.intevation.gnv.artifactdatabase.client;
5
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.io.StringWriter;
9 import java.util.ArrayList;
10 import java.util.Collection;
11 import java.util.HashMap;
12 import java.util.Iterator;
13 import java.util.Map;
14
15 import javax.xml.parsers.DocumentBuilder;
16 import javax.xml.parsers.DocumentBuilderFactory;
17 import javax.xml.parsers.ParserConfigurationException;
18 import javax.xml.transform.Transformer;
19 import javax.xml.transform.TransformerConfigurationException;
20 import javax.xml.transform.TransformerException;
21 import javax.xml.transform.TransformerFactory;
22 import javax.xml.transform.TransformerFactoryConfigurationError;
23 import javax.xml.transform.dom.DOMSource;
24 import javax.xml.transform.stream.StreamResult;
25
26 import org.apache.log4j.Logger;
27 import org.restlet.Client;
28 import org.restlet.data.Method;
29 import org.restlet.data.Protocol;
30 import org.restlet.data.Request;
31 import org.restlet.data.Response;
32 import org.restlet.representation.Representation;
33 import org.w3c.dom.Document;
34 import org.w3c.dom.Node;
35 import org.w3c.dom.NodeList;
36 import org.xml.sax.SAXException;
37
38 import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseClientException;
39 import de.intevation.gnv.artifactdatabase.objects.ArtifactFactory;
40 import de.intevation.gnv.artifactdatabase.objects.ArtifactObject;
41 import de.intevation.gnv.util.XMLUtils;
42
43 /**
44 * @author Tim Englich <tim.englich@intevation.de>
45 *
46 */
47 public class DefaultArtifactDatabaseClient implements ArtifactDatabaseClient {
48 /**
49 * the logger, used to log exceptions and additonaly information
50 */
51 private static Logger log = Logger.getLogger(DefaultArtifactDatabaseClient.class);
52
53 // TODO Container for ArtifactDatabases should be used.
54 private static Map<String, String> artifactDatabases = null;
55
56 private static boolean initialized = false;
57
58 /**
59 * Constructor
60 */
61 public DefaultArtifactDatabaseClient() {
62 super();
63 }
64
65 /**
66 * @see de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient#getArtifactFactories()
67 */
68 public Collection<ArtifactObject> getArtifactFactories() throws ArtifactDatabaseClientException {
69 Collection<ArtifactObject> resultValues = null;
70 if (!initialized){
71 this.initialize();
72 }
73 try {
74 XMLUtils xmlUtils = new XMLUtils();
75 log.debug("DefaultArtifactDatabaseClient.getArtifactFactories");
76 Iterator<String> it = artifactDatabases.values().iterator();
77 while (it.hasNext()){
78 String server = it.next();
79 String url = server+ "/factories";
80 InputStream inputStream = this.doGetRequest(url);
81 Document document = xmlUtils.readDocument(inputStream);
82 log.debug(xmlUtils.writeDocument2String(document));
83 if (resultValues == null){
84 resultValues = this.getArtifactFactories(document,server);
85 }else{
86 resultValues.addAll(this.getArtifactFactories(document,server));
87 }
88 }
89 } catch (IOException e) {
90 log.error(e,e);
91 }
92 return resultValues;
93 }
94
95 private Collection<ArtifactObject> getArtifactFactories(Document document, String server){
96 XMLUtils xmlUtils = new XMLUtils();
97 NodeList artifactFactories = xmlUtils.getNodeSetXPath(document, "/result/factories/factory");
98 Collection<ArtifactObject> resultValues = new ArrayList<ArtifactObject>(artifactFactories.getLength());
99 if (artifactFactories != null){
100 for (int i = 0; i < artifactFactories.getLength(); i++){
101 Node artifactFactoryNode = artifactFactories.item(i);
102 String name = xmlUtils.getStringXPath(artifactFactoryNode, "@name");
103 String description = xmlUtils.getStringXPath(artifactFactoryNode, "@description");
104 ArtifactFactory artifactFactory = new ArtifactFactory(name, description, server);
105 resultValues.add(artifactFactory);
106 }
107 }
108 return resultValues;
109 }
110
111 /**
112 * @throws IOException
113 */
114 private InputStream doGetRequest(String requestUrl) throws IOException {
115 Client client = new Client(Protocol.HTTP);
116 Request request = new Request(Method.GET, requestUrl);
117 Response response = client.handle(request);
118 Representation output = response.getEntity();
119 return output.getStream();
120 }
121
122 private synchronized void initialize(){
123 if (!initialized){
124 this.artifactDatabases = new HashMap<String, String>();
125 this.artifactDatabases.put("test", "http://localhost:8181"); // TODO Read from Config
126 initialized = true;
127 }
128
129 }
130
131
132 }

http://dive4elements.wald.intevation.org