Mercurial > dive4elements > gnv-client
diff 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 |
line wrap: on
line diff
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java Wed Jan 27 14:26:30 2010 +0000 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java Mon Feb 01 15:08:39 2010 +0000 @@ -10,22 +10,19 @@ import java.util.Collection; import java.util.HashMap; import java.util.Iterator; -import java.util.Map; import java.util.List; import java.util.Locale; +import java.util.Map; import org.apache.log4j.Logger; - import org.restlet.Client; - +import org.restlet.data.ClientInfo; +import org.restlet.data.Language; import org.restlet.data.Method; +import org.restlet.data.Preference; import org.restlet.data.Protocol; import org.restlet.data.Request; import org.restlet.data.Response; -import org.restlet.data.Preference; -import org.restlet.data.Language; -import org.restlet.data.ClientInfo; - import org.restlet.representation.Representation; import org.restlet.representation.StringRepresentation; import org.w3c.dom.Document; @@ -46,6 +43,9 @@ import de.intevation.gnv.artifactdatabase.objects.InputParameter; import de.intevation.gnv.artifactdatabase.objects.OutputMode; import de.intevation.gnv.artifactdatabase.objects.OutputParameter; +import de.intevation.gnv.artifactdatabase.objects.ParametrizedArtifactFactory; +import de.intevation.gnv.artifactdatabase.objects.ParametrizedArtifactObject; +import de.intevation.gnv.artifactdatabase.objects.map.Layer; import de.intevation.gnv.artifactdatabase.objects.map.MapService; import de.intevation.gnv.propertiesreader.PropertiesReader; import de.intevation.gnv.propertiesreader.PropertiesReaderFactory; @@ -139,9 +139,31 @@ "@art:name"); String description = xmlUtils.getStringXPath( artifactFactoryNode, "@art:description"); - ArtifactFactory artifactFactory = new ArtifactFactory(name, - description, server); - resultValues.add(artifactFactory); + + NodeList parameterNodeList = xmlUtils.getNodeSetXPath( + artifactFactoryNode, + "art:parameter"); + + if (parameterNodeList != null && + parameterNodeList.getLength() > 0){ + Collection<String> parameters = + new ArrayList<String>(parameterNodeList.getLength()); + for (int j = 0; j < parameterNodeList.getLength(); j++){ + Element parameterNode = (Element)parameterNodeList.item(j); + parameters.add(parameterNode.getAttribute("id")); + } + ParametrizedArtifactObject pao = + new ParametrizedArtifactFactory(name, + description, + server); + pao.addParameters("parameter", parameters); + resultValues.add(pao); + }else{ + ArtifactObject artifactFactory = new ArtifactFactory(name, + description, + server); + resultValues.add(artifactFactory); + } } } log.debug("Artifact Factories: " + resultValues.size()); @@ -255,8 +277,7 @@ throws ArtifactDatabaseClientException { try { - Document request = this.createCreateRequestBody(artifactFactory - .getId()); + Document request = this.createCreateRequestBody(artifactFactory); Document result = doPostRequest(artifactFactory, request, "create"); return this.getArtifact(result); } catch (IOException e) { @@ -273,17 +294,36 @@ return new Artifact(uuid, hash); } - private Document createCreateRequestBody(String artifactFactoryName) { + private Document createCreateRequestBody(ArtifactObject artifactFactory) { Document document = new XMLUtils().newDocument(); Node rootNode = this.createRootNode(document); Element typeNode = this.createArtifactElement(document, "type"); typeNode.setAttribute("name", "create"); rootNode.appendChild(typeNode); - Element factoyNode = this.createArtifactElement(document, "factory"); - factoyNode.setAttribute("name", artifactFactoryName); - rootNode.appendChild(factoyNode); - + Element factoryNode = this.createArtifactElement(document, "factory"); + factoryNode.setAttribute("name", artifactFactory.getId()); + rootNode.appendChild(factoryNode); + + if (artifactFactory instanceof ParametrizedArtifactObject){ + Map<String, Collection<String>> parameterMap = + ((ParametrizedArtifactObject)artifactFactory).getParameters(); + if (parameterMap != null && !parameterMap.isEmpty() ){ + Iterator<String> keyIt = parameterMap.keySet().iterator(); + while (keyIt.hasNext()){ + String key = keyIt.next(); + Iterator<String> valueIt = parameterMap.get(key).iterator(); + while (valueIt.hasNext()){ + String value = valueIt.next(); + Element parameterNode = + this.createArtifactElement(document, "parameter"); + parameterNode.setAttribute("name", key); + parameterNode.setAttribute("value", value); + factoryNode.appendChild(parameterNode); + } + } + } + } return document; } @@ -763,12 +803,80 @@ /** * @see de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient#getArtifactFactoryMetaInformation(java.util.Collection, java.lang.String, java.lang.String) */ - public Collection<ArtifactFactory> getArtifactFactoryMetaInformation( + public Collection<ArtifactObject> getArtifactFactoryMetaInformation( Collection<MapService> mapServices, String geometry, String srs) throws ArtifactDatabaseClientException { - // TODO: Implement me - return null; + log.debug("DefaultArtifactDatabaseClient.getArtifactFactories"); + Collection<ArtifactObject> resultValues = null; + try { + this.initialize(); + Iterator<String> it = artifactDatabases.iterator(); + Document requestBody = this.createMetaDataRequestBody(mapServices, + geometry, + srs); + while (it.hasNext()) { + String server = it.next(); + String url = server + "/service/metadata/"; + log.debug(url); + + InputStream resultStream = this.doPostRequest(url, requestBody); + resultValues = this.parseMetaDataResult(resultStream, server); + } + } catch (IOException e) { + log.error(e,e); + } + return resultValues; + } + + private Collection<ArtifactObject> parseMetaDataResult( + InputStream inputStream, + String server) throws ArtifactDatabaseClientException{ + XMLUtils xmlUtils = new XMLUtils(); + Document document = xmlUtils.readDocument(inputStream); + this.check4ExceptionReport(document); + return this.getArtifactFactories(document, server); + } + + private Document createMetaDataRequestBody(Collection<MapService> mapServices, + String geometry, + String srs){ + log.debug("DefaultArtifactDatabaseClient.createMetaDataRequestBody"); + Document document = new XMLUtils().newDocument(); + Node rootNode = this.createArtifactElement(document, "GetMetaData"); + document.appendChild(rootNode); + + Element locationNode = this.createArtifactElement(document, "location"); + locationNode.setAttribute("srs", srs); + locationNode.appendChild(document.createTextNode(geometry)); + rootNode.appendChild(locationNode); + + Element mapServicesNode = this.createArtifactElement(document, + "mapservices"); + Iterator<MapService> it = mapServices.iterator(); + while (it.hasNext()){ + MapService mapService = it.next(); + Element mapServiceNode = this.createArtifactElement(document, + "mapservice"); + mapServiceNode.setAttribute("id", mapService.getID()); + mapServiceNode.setAttribute("type", mapService.getType()); + mapServiceNode.setAttribute("url", mapService.getURL()); + Iterator<Layer> layer = mapService.getLayer().iterator(); + while (layer.hasNext()){ + Layer tmpLayer = layer.next(); + Element layerNode = this.createArtifactElement(document, + "layer"); + layerNode.setAttribute("id", tmpLayer.getID()); + layerNode.setAttribute("name", tmpLayer.getName()); + layerNode.setAttribute("isgrouplayer", + ""+tmpLayer.isGroupLayer()); + layerNode.setAttribute("parentid", tmpLayer.parentID()); + mapServiceNode.appendChild(layerNode); + } + mapServicesNode.appendChild(mapServiceNode); + } + rootNode.appendChild(mapServicesNode); + return document; } }