Mercurial > dive4elements > gnv-client
diff gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java @ 13:2535158e2687
Chartoutput Added to the View
gnv/trunk@95 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Tim Englich <tim.englich@intevation.de> |
---|---|
date | Wed, 16 Sep 2009 12:41:27 +0000 |
parents | 4ebe57b170d3 |
children | 1557bea6cb55 |
line wrap: on
line diff
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java Wed Sep 16 07:44:26 2009 +0000 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java Wed Sep 16 12:41:27 2009 +0000 @@ -5,6 +5,7 @@ import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -112,10 +113,14 @@ * @throws IOException */ private Document doGetRequest(String requestUrl) throws IOException { + return this.doGetRequest(requestUrl, null); + } + /** + * @throws IOException + */ + private Document doGetRequest(String requestUrl, Document requestBody) throws IOException { XMLUtils xmlUtils = new XMLUtils(); - Client client = new Client(Protocol.HTTP); - Response response = client.get(requestUrl); - Representation output = response.getEntity(); + Representation output = doGetRequestInternal(requestUrl, requestBody); Document document = xmlUtils.readDocument(output.getStream()); log.debug(xmlUtils.writeDocument2String(document)); return document; @@ -124,6 +129,39 @@ /** * @throws IOException */ + private void doGetRequest(OutputStream outputStream, String requestUrl, Document requestBody) throws IOException { + Representation output = doGetRequestInternal(requestUrl, requestBody); + InputStream inputStream = output.getStream(); + + byte[] buffer = new byte[4096]; + while (inputStream.read(buffer) > 0){ + outputStream.write(buffer); + } + + } + + /** + * @param requestUrl + * @param requestBody + * @return + */ + private Representation doGetRequestInternal(String requestUrl, + Document requestBody) { + Client client = new Client(Protocol.HTTP); + Request request = new Request(Method.GET, requestUrl); + if (requestBody != null){ + String documentBody = new XMLUtils().writeDocument2String(requestBody); + Representation representation = new StringRepresentation(documentBody); + request.setEntity(representation); + } + Response response = client.handle(request); + Representation output = response.getEntity(); + return output; + } + + /** + * @throws IOException + */ private InputStream doPostRequest(String requestUrl, Document requestBody) throws IOException { Client client = new Client(Protocol.HTTP); Request request = new Request(Method.POST, requestUrl); @@ -314,11 +352,9 @@ try { // 1 Feed - Document feedDocument = this.createFeedRequestBody(currentArtifact, inputParameter); + this.doFeed(artifactFactory, currentArtifact, inputParameter); + // 2 Advance String url = this.getArtifactUrl(artifactFactory, currentArtifact); - InputStream feedResult = this.doPostRequest(url, feedDocument); - // TODO feedResult auswerten und ggf. Fehler werfen. - // 2 Advance Document advanceDocument = this.createAdvanceRequestBody(currentArtifact, target); log.debug(new XMLUtils().writeDocument2String(advanceDocument)); InputStream advanceResult = this.doPostRequest(url, advanceDocument); @@ -348,8 +384,20 @@ hashNode.setAttribute("value", currentArtifact.getHash()); rootNode.appendChild(hashNode); - Element dataNode = this.createArtifactElement(document, "data"); + Node dataNode = this.createParameterNodes(inputParameter, document, "data"); rootNode.appendChild(dataNode); + + return document; + } + + /** + * @param inputParameter + * @param document + * @param rootNode + */ + private Node createParameterNodes(Collection<InputParameter> inputParameter, Document document, String nodeName) { + Element dataNode = this.createArtifactElement(document, nodeName); + if (inputParameter != null){ Iterator<InputParameter> it = inputParameter.iterator(); while(it.hasNext()){ @@ -367,9 +415,7 @@ } } } - - - return document; + return dataNode; } private Document createAdvanceRequestBody(ArtifactObject currentArtifact, String target){ @@ -392,4 +438,80 @@ rootNode.appendChild(targetNode); return document; } + + /** + * @see de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient#doOutput(de.intevation.gnv.artifactdatabase.objects.ArtifactObject, de.intevation.gnv.artifactdatabase.objects.ArtifactObject, java.io.OutputStream, java.lang.String, java.lang.String, java.util.Collection) + */ + public void doOutput(ArtifactObject artifactFactory, + ArtifactObject currentArtifact, OutputStream stream, + String targetName, String mimeType, + Collection<InputParameter> inputParameter) + throws ArtifactDatabaseClientException { + try { + XMLUtils xmlUtils = new XMLUtils(); + Document requestBody = this.createOutRequestBody(currentArtifact, targetName, mimeType, inputParameter); + log.debug(xmlUtils.writeDocument2String(requestBody)); + + String requestUrl = this.getArtifactUrl(artifactFactory, currentArtifact)+"/"+targetName; + InputStream is = this.doPostRequest( requestUrl, requestBody); + + byte[] b = new byte[4096]; + int i = -1 ; + while ((i = is.read(b)) > 0) + { + stream.write(b, 0, i); + } + } catch (IOException e) { + log.error(e,e); + throw new ArtifactDatabaseClientException(e); + } + } + + private Document createOutRequestBody(ArtifactObject currentArtifact, String target, String mimeType, Collection<InputParameter> inputParameter){ + Document document = new XMLUtils().newDocument(); + Node rootNode = this.createRootNode(document); + + Element typeNode = this.createArtifactElement(document, "type"); + typeNode.setAttribute("name", "out"); + rootNode.appendChild(typeNode); + + Element uuidNode = this.createArtifactElement(document, "uuid"); + uuidNode.setAttribute("value", currentArtifact.getId()); + rootNode.appendChild(uuidNode); + + Element hashNode = this.createArtifactElement(document, "hash"); + hashNode.setAttribute("value", currentArtifact.getHash()); + rootNode.appendChild(hashNode); + + Element outNode = this.createArtifactElement(document, "out"); + outNode.setAttribute("name", target); + rootNode.appendChild(outNode); + + Element mimeTypeNode = this.createArtifactElement(document, "out"); + mimeTypeNode.setAttribute("value", mimeType); + outNode.appendChild(mimeTypeNode); + + Node parameterNode = this.createParameterNodes(inputParameter, document, "params"); + outNode.appendChild(parameterNode); + + return document; } + + /** + * @see de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient#doFeed(de.intevation.gnv.artifactdatabase.objects.ArtifactObject, de.intevation.gnv.artifactdatabase.objects.ArtifactObject, java.util.Collection) + */ + public void doFeed(ArtifactObject artifactFactory, + ArtifactObject currentArtifact, + Collection<InputParameter> inputParameter) + throws ArtifactDatabaseClientException { + + try { + Document feedDocument = this.createFeedRequestBody(currentArtifact, inputParameter); + String url = this.getArtifactUrl(artifactFactory, currentArtifact); + InputStream feedResult = this.doPostRequest(url, feedDocument); + // TODO feedResult auswerten und ggf. Fehler werfen. + } catch (IOException e) { + log.error(e,e); + } + } +}