Mercurial > dive4elements > gnv-client
comparison gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java @ 558:8032da9e8b70
Added further business logic for the MapViewer-Interface
gnv/trunk@654 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Tim Englich <tim.englich@intevation.de> |
---|---|
date | Mon, 01 Feb 2010 15:08:39 +0000 |
parents | b88e881e8e94 |
children | 3f39756e0c8a |
comparison
equal
deleted
inserted
replaced
415:9f4a0b990d27 | 558:8032da9e8b70 |
---|---|
8 import java.io.OutputStream; | 8 import java.io.OutputStream; |
9 import java.util.ArrayList; | 9 import java.util.ArrayList; |
10 import java.util.Collection; | 10 import java.util.Collection; |
11 import java.util.HashMap; | 11 import java.util.HashMap; |
12 import java.util.Iterator; | 12 import java.util.Iterator; |
13 import java.util.Map; | |
14 import java.util.List; | 13 import java.util.List; |
15 import java.util.Locale; | 14 import java.util.Locale; |
15 import java.util.Map; | |
16 | 16 |
17 import org.apache.log4j.Logger; | 17 import org.apache.log4j.Logger; |
18 | |
19 import org.restlet.Client; | 18 import org.restlet.Client; |
20 | 19 import org.restlet.data.ClientInfo; |
20 import org.restlet.data.Language; | |
21 import org.restlet.data.Method; | 21 import org.restlet.data.Method; |
22 import org.restlet.data.Preference; | |
22 import org.restlet.data.Protocol; | 23 import org.restlet.data.Protocol; |
23 import org.restlet.data.Request; | 24 import org.restlet.data.Request; |
24 import org.restlet.data.Response; | 25 import org.restlet.data.Response; |
25 import org.restlet.data.Preference; | |
26 import org.restlet.data.Language; | |
27 import org.restlet.data.ClientInfo; | |
28 | |
29 import org.restlet.representation.Representation; | 26 import org.restlet.representation.Representation; |
30 import org.restlet.representation.StringRepresentation; | 27 import org.restlet.representation.StringRepresentation; |
31 import org.w3c.dom.Document; | 28 import org.w3c.dom.Document; |
32 import org.w3c.dom.Element; | 29 import org.w3c.dom.Element; |
33 import org.w3c.dom.Node; | 30 import org.w3c.dom.Node; |
44 import de.intevation.gnv.artifactdatabase.objects.DefaultOutputMode; | 41 import de.intevation.gnv.artifactdatabase.objects.DefaultOutputMode; |
45 import de.intevation.gnv.artifactdatabase.objects.DefaultOutputParameter; | 42 import de.intevation.gnv.artifactdatabase.objects.DefaultOutputParameter; |
46 import de.intevation.gnv.artifactdatabase.objects.InputParameter; | 43 import de.intevation.gnv.artifactdatabase.objects.InputParameter; |
47 import de.intevation.gnv.artifactdatabase.objects.OutputMode; | 44 import de.intevation.gnv.artifactdatabase.objects.OutputMode; |
48 import de.intevation.gnv.artifactdatabase.objects.OutputParameter; | 45 import de.intevation.gnv.artifactdatabase.objects.OutputParameter; |
46 import de.intevation.gnv.artifactdatabase.objects.ParametrizedArtifactFactory; | |
47 import de.intevation.gnv.artifactdatabase.objects.ParametrizedArtifactObject; | |
48 import de.intevation.gnv.artifactdatabase.objects.map.Layer; | |
49 import de.intevation.gnv.artifactdatabase.objects.map.MapService; | 49 import de.intevation.gnv.artifactdatabase.objects.map.MapService; |
50 import de.intevation.gnv.propertiesreader.PropertiesReader; | 50 import de.intevation.gnv.propertiesreader.PropertiesReader; |
51 import de.intevation.gnv.propertiesreader.PropertiesReaderFactory; | 51 import de.intevation.gnv.propertiesreader.PropertiesReaderFactory; |
52 import de.intevation.gnv.util.XMLUtils; | 52 import de.intevation.gnv.util.XMLUtils; |
53 | 53 |
137 Node artifactFactoryNode = artifactFactories.item(i); | 137 Node artifactFactoryNode = artifactFactories.item(i); |
138 String name = xmlUtils.getStringXPath(artifactFactoryNode, | 138 String name = xmlUtils.getStringXPath(artifactFactoryNode, |
139 "@art:name"); | 139 "@art:name"); |
140 String description = xmlUtils.getStringXPath( | 140 String description = xmlUtils.getStringXPath( |
141 artifactFactoryNode, "@art:description"); | 141 artifactFactoryNode, "@art:description"); |
142 ArtifactFactory artifactFactory = new ArtifactFactory(name, | 142 |
143 description, server); | 143 NodeList parameterNodeList = xmlUtils.getNodeSetXPath( |
144 resultValues.add(artifactFactory); | 144 artifactFactoryNode, |
145 "art:parameter"); | |
146 | |
147 if (parameterNodeList != null && | |
148 parameterNodeList.getLength() > 0){ | |
149 Collection<String> parameters = | |
150 new ArrayList<String>(parameterNodeList.getLength()); | |
151 for (int j = 0; j < parameterNodeList.getLength(); j++){ | |
152 Element parameterNode = (Element)parameterNodeList.item(j); | |
153 parameters.add(parameterNode.getAttribute("id")); | |
154 } | |
155 ParametrizedArtifactObject pao = | |
156 new ParametrizedArtifactFactory(name, | |
157 description, | |
158 server); | |
159 pao.addParameters("parameter", parameters); | |
160 resultValues.add(pao); | |
161 }else{ | |
162 ArtifactObject artifactFactory = new ArtifactFactory(name, | |
163 description, | |
164 server); | |
165 resultValues.add(artifactFactory); | |
166 } | |
145 } | 167 } |
146 } | 168 } |
147 log.debug("Artifact Factories: " + resultValues.size()); | 169 log.debug("Artifact Factories: " + resultValues.size()); |
148 return resultValues; | 170 return resultValues; |
149 } | 171 } |
253 */ | 275 */ |
254 public ArtifactObject createNewArtifact(ArtifactObject artifactFactory) | 276 public ArtifactObject createNewArtifact(ArtifactObject artifactFactory) |
255 throws ArtifactDatabaseClientException { | 277 throws ArtifactDatabaseClientException { |
256 | 278 |
257 try { | 279 try { |
258 Document request = this.createCreateRequestBody(artifactFactory | 280 Document request = this.createCreateRequestBody(artifactFactory); |
259 .getId()); | |
260 Document result = doPostRequest(artifactFactory, request, "create"); | 281 Document result = doPostRequest(artifactFactory, request, "create"); |
261 return this.getArtifact(result); | 282 return this.getArtifact(result); |
262 } catch (IOException e) { | 283 } catch (IOException e) { |
263 log.error(e, e); | 284 log.error(e, e); |
264 throw new ArtifactDatabaseClientException(e); | 285 throw new ArtifactDatabaseClientException(e); |
271 String hash = xmlUtils.getStringXPath(document, "/art:result/art:hash/@value"); | 292 String hash = xmlUtils.getStringXPath(document, "/art:result/art:hash/@value"); |
272 log.info("NEW Artifact: " + uuid + " / " + hash); | 293 log.info("NEW Artifact: " + uuid + " / " + hash); |
273 return new Artifact(uuid, hash); | 294 return new Artifact(uuid, hash); |
274 } | 295 } |
275 | 296 |
276 private Document createCreateRequestBody(String artifactFactoryName) { | 297 private Document createCreateRequestBody(ArtifactObject artifactFactory) { |
277 Document document = new XMLUtils().newDocument(); | 298 Document document = new XMLUtils().newDocument(); |
278 Node rootNode = this.createRootNode(document); | 299 Node rootNode = this.createRootNode(document); |
279 Element typeNode = this.createArtifactElement(document, "type"); | 300 Element typeNode = this.createArtifactElement(document, "type"); |
280 typeNode.setAttribute("name", "create"); | 301 typeNode.setAttribute("name", "create"); |
281 rootNode.appendChild(typeNode); | 302 rootNode.appendChild(typeNode); |
282 | 303 |
283 Element factoyNode = this.createArtifactElement(document, "factory"); | 304 Element factoryNode = this.createArtifactElement(document, "factory"); |
284 factoyNode.setAttribute("name", artifactFactoryName); | 305 factoryNode.setAttribute("name", artifactFactory.getId()); |
285 rootNode.appendChild(factoyNode); | 306 rootNode.appendChild(factoryNode); |
286 | 307 |
308 if (artifactFactory instanceof ParametrizedArtifactObject){ | |
309 Map<String, Collection<String>> parameterMap = | |
310 ((ParametrizedArtifactObject)artifactFactory).getParameters(); | |
311 if (parameterMap != null && !parameterMap.isEmpty() ){ | |
312 Iterator<String> keyIt = parameterMap.keySet().iterator(); | |
313 while (keyIt.hasNext()){ | |
314 String key = keyIt.next(); | |
315 Iterator<String> valueIt = parameterMap.get(key).iterator(); | |
316 while (valueIt.hasNext()){ | |
317 String value = valueIt.next(); | |
318 Element parameterNode = | |
319 this.createArtifactElement(document, "parameter"); | |
320 parameterNode.setAttribute("name", key); | |
321 parameterNode.setAttribute("value", value); | |
322 factoryNode.appendChild(parameterNode); | |
323 } | |
324 } | |
325 } | |
326 } | |
287 return document; | 327 return document; |
288 } | 328 } |
289 | 329 |
290 private Element createRootNode(Document document) { | 330 private Element createRootNode(Document document) { |
291 Element rootNode = this.createArtifactElement(document, "action"); | 331 Element rootNode = this.createArtifactElement(document, "action"); |
761 } | 801 } |
762 | 802 |
763 /** | 803 /** |
764 * @see de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient#getArtifactFactoryMetaInformation(java.util.Collection, java.lang.String, java.lang.String) | 804 * @see de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient#getArtifactFactoryMetaInformation(java.util.Collection, java.lang.String, java.lang.String) |
765 */ | 805 */ |
766 public Collection<ArtifactFactory> getArtifactFactoryMetaInformation( | 806 public Collection<ArtifactObject> getArtifactFactoryMetaInformation( |
767 Collection<MapService> mapServices, | 807 Collection<MapService> mapServices, |
768 String geometry, | 808 String geometry, |
769 String srs) | 809 String srs) |
770 throws ArtifactDatabaseClientException { | 810 throws ArtifactDatabaseClientException { |
771 // TODO: Implement me | 811 log.debug("DefaultArtifactDatabaseClient.getArtifactFactories"); |
772 return null; | 812 Collection<ArtifactObject> resultValues = null; |
813 try { | |
814 this.initialize(); | |
815 Iterator<String> it = artifactDatabases.iterator(); | |
816 Document requestBody = this.createMetaDataRequestBody(mapServices, | |
817 geometry, | |
818 srs); | |
819 while (it.hasNext()) { | |
820 String server = it.next(); | |
821 String url = server + "/service/metadata/"; | |
822 log.debug(url); | |
823 | |
824 InputStream resultStream = this.doPostRequest(url, requestBody); | |
825 resultValues = this.parseMetaDataResult(resultStream, server); | |
826 } | |
827 } catch (IOException e) { | |
828 log.error(e,e); | |
829 } | |
830 return resultValues; | |
831 } | |
832 | |
833 private Collection<ArtifactObject> parseMetaDataResult( | |
834 InputStream inputStream, | |
835 String server) throws ArtifactDatabaseClientException{ | |
836 XMLUtils xmlUtils = new XMLUtils(); | |
837 Document document = xmlUtils.readDocument(inputStream); | |
838 this.check4ExceptionReport(document); | |
839 return this.getArtifactFactories(document, server); | |
840 } | |
841 | |
842 private Document createMetaDataRequestBody(Collection<MapService> mapServices, | |
843 String geometry, | |
844 String srs){ | |
845 log.debug("DefaultArtifactDatabaseClient.createMetaDataRequestBody"); | |
846 Document document = new XMLUtils().newDocument(); | |
847 Node rootNode = this.createArtifactElement(document, "GetMetaData"); | |
848 document.appendChild(rootNode); | |
849 | |
850 Element locationNode = this.createArtifactElement(document, "location"); | |
851 locationNode.setAttribute("srs", srs); | |
852 locationNode.appendChild(document.createTextNode(geometry)); | |
853 rootNode.appendChild(locationNode); | |
854 | |
855 Element mapServicesNode = this.createArtifactElement(document, | |
856 "mapservices"); | |
857 Iterator<MapService> it = mapServices.iterator(); | |
858 while (it.hasNext()){ | |
859 MapService mapService = it.next(); | |
860 Element mapServiceNode = this.createArtifactElement(document, | |
861 "mapservice"); | |
862 mapServiceNode.setAttribute("id", mapService.getID()); | |
863 mapServiceNode.setAttribute("type", mapService.getType()); | |
864 mapServiceNode.setAttribute("url", mapService.getURL()); | |
865 Iterator<Layer> layer = mapService.getLayer().iterator(); | |
866 while (layer.hasNext()){ | |
867 Layer tmpLayer = layer.next(); | |
868 Element layerNode = this.createArtifactElement(document, | |
869 "layer"); | |
870 layerNode.setAttribute("id", tmpLayer.getID()); | |
871 layerNode.setAttribute("name", tmpLayer.getName()); | |
872 layerNode.setAttribute("isgrouplayer", | |
873 ""+tmpLayer.isGroupLayer()); | |
874 layerNode.setAttribute("parentid", tmpLayer.parentID()); | |
875 mapServiceNode.appendChild(layerNode); | |
876 } | |
877 mapServicesNode.appendChild(mapServiceNode); | |
878 } | |
879 rootNode.appendChild(mapServicesNode); | |
880 return document; | |
773 } | 881 } |
774 } | 882 } |