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 }

http://dive4elements.wald.intevation.org