# HG changeset patch # User Ingo Weinzierl # Date 1297941542 0 # Node ID 2fdfa20cfa63eddfd8ed8d8695198b3c70415aaf # Parent c9ac6642973c81452b0fa38f36d8deb3e1ac5e44 Added an interface that is used to create instances of artifacts depending on the framework that includes this lib. The create() method of the HttpClient makes use of this interface. http-client/trunk@1325 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r c9ac6642973c -r 2fdfa20cfa63 ChangeLog --- a/ChangeLog Thu Feb 17 10:51:37 2011 +0000 +++ b/ChangeLog Thu Feb 17 11:19:02 2011 +0000 @@ -1,3 +1,18 @@ +2011-02-17 Ingo Weinzierl + + * src/main/java/de/intevation/artifacts/httpclient/utils/ArtifactCreator.java: + New. An interface that describes a single method create(Document). It is + used to create new instances of artifacts which implementation depend on + the framework that includes this library. + + * src/main/java/de/intevation/artifacts/httpclient/http/HttpClientImpl.java, + src/main/java/de/intevation/artifacts/httpclient/http/HttpClient.java: The + create() became a new parameter ArtifactCreator and returns artifact + instances created by this class. + + * src/main/java/de/intevation/artifacts/httpclient/ConsoleClient.java: + Adapted the method call of HttpClient.create(). + 2011-02-17 Ingo Weinzierl * src/main/java/de/intevation/artifacts/httpclient/http/GNVClientImpl.java, diff -r c9ac6642973c -r 2fdfa20cfa63 src/main/java/de/intevation/artifacts/httpclient/ConsoleClient.java --- a/src/main/java/de/intevation/artifacts/httpclient/ConsoleClient.java Thu Feb 17 10:51:37 2011 +0000 +++ b/src/main/java/de/intevation/artifacts/httpclient/ConsoleClient.java Thu Feb 17 11:19:02 2011 +0000 @@ -132,7 +132,7 @@ try { Document create = ArtifactProtocolUtils.createCreateDocument( (String) conf.getArtifactSettings("fis")); - Artifact artifact = client.create(create); + Artifact artifact = (Artifact) client.create(create, null); Map attr = new HashMap(); String product = (String) conf.getArtifactSettings("product"); diff -r c9ac6642973c -r 2fdfa20cfa63 src/main/java/de/intevation/artifacts/httpclient/http/HttpClient.java --- a/src/main/java/de/intevation/artifacts/httpclient/http/HttpClient.java Thu Feb 17 10:51:37 2011 +0000 +++ b/src/main/java/de/intevation/artifacts/httpclient/http/HttpClient.java Thu Feb 17 11:19:02 2011 +0000 @@ -15,6 +15,7 @@ import de.intevation.artifacts.httpclient.http.response.ResponseHandler; import de.intevation.artifacts.httpclient.objects.Artifact; import de.intevation.artifacts.httpclient.objects.ArtifactFactory; +import de.intevation.artifacts.httpclient.utils.ArtifactCreator; /** * @author Ingo Weinzierl @@ -24,7 +25,7 @@ ArtifactFactory[] getArtifactFactories() throws ConnectionException; - Artifact create(Document createDocument) + Object create(Document createDocument, ArtifactCreator creator) throws ConnectionException; Object describe( diff -r c9ac6642973c -r 2fdfa20cfa63 src/main/java/de/intevation/artifacts/httpclient/http/HttpClientImpl.java --- a/src/main/java/de/intevation/artifacts/httpclient/http/HttpClientImpl.java Thu Feb 17 10:51:37 2011 +0000 +++ b/src/main/java/de/intevation/artifacts/httpclient/http/HttpClientImpl.java Thu Feb 17 11:19:02 2011 +0000 @@ -32,7 +32,8 @@ import de.intevation.artifacts.httpclient.objects.Artifact; import de.intevation.artifacts.httpclient.objects.ArtifactFactory; import de.intevation.artifacts.httpclient.utils.ArtifactProtocolUtils; -import de.intevation.artifacts.httpclient.utils.XMLUtils; +import de.intevation.artifacts.httpclient.utils.ArtifactCreator; + /** * @author Ingo Weinzierl @@ -68,15 +69,30 @@ } + /** + * This method creates a new artifact in the artifact server and returns + * this artifact. The new artifact is created using creator. If no + * {@link ArtifactCreator} is given (null), an {@link Artifact} is returned. + * + * @param doc The CREATE document. + * @param creator The {@link ArtifactCreator} that is used to extract the + * new artifact from response document of the server. + * + * @return the new artifact. + */ @Override - public Artifact create(Document doc) throws ConnectionException { + public Object create(Document doc, ArtifactCreator creator) + throws ConnectionException + { ResponseHandler handler = new DocumentResponseHandler(); try { String url = serverUrl + "/create"; Document result = (Document) handler.handle(doPost(url, doc)); - return ArtifactProtocolUtils.extractArtifact(result); + return creator == null + ? ArtifactProtocolUtils.extractArtifact(result) + : creator.create(result); } catch (IOException ioe) { throw new ConnectionException( diff -r c9ac6642973c -r 2fdfa20cfa63 src/main/java/de/intevation/artifacts/httpclient/utils/ArtifactCreator.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/de/intevation/artifacts/httpclient/utils/ArtifactCreator.java Thu Feb 17 11:19:02 2011 +0000 @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2011 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ +package de.intevation.artifacts.httpclient.utils; + +import org.w3c.dom.Document; + + +/** + * This interface is used to create new implementation dependend instances of an + * Artifact. + * + * @author Ingo Weinzierl + */ +public interface ArtifactCreator { + + /** + * This method should return a new Artifact object. + * + * @param doc A document that describes the artifact. + * + * @return an implementation dependend instance of an Artifact. + */ + public Object create(Document doc); +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: