Mercurial > dive4elements > gnv-client
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 } |