ingo@14: package de.intevation.flys.client.server; ingo@14: ingo@14: import org.w3c.dom.Document; ingo@14: ingo@16: import de.intevation.artifacts.common.utils.XMLUtils; ingo@16: import de.intevation.artifacts.common.ArtifactNamespaceContext; ingo@16: ingo@14: import de.intevation.artifacts.httpclient.utils.ArtifactCreator; ingo@14: ingo@14: import de.intevation.flys.client.shared.model.Artifact; ingo@14: import de.intevation.flys.client.shared.model.DefaultArtifact; ingo@227: import de.intevation.flys.client.shared.model.WINFOArtifact; ingo@14: ingo@14: ingo@14: /** ingo@14: * An implementation of an {@link ArtifactCreator}. This class uses the document ingo@14: * that is returned by the artifact server to parse important information (like ingo@14: * uuid, hash) and returns a new {@link Artifact} instance. ingo@14: * ingo@14: * @author Ingo Weinzierl ingo@14: */ ingo@14: public class FLYSArtifactCreator implements ArtifactCreator { ingo@14: ingo@16: /** The XPath to the artifact's uuid.*/ ingo@16: public static final String XPATH_UUID = "/art:result/art:uuid/@art:value"; ingo@16: ingo@16: /** The XPath to the artifact's hash value.*/ ingo@16: public static final String XPATH_HASH = "/art:result/art:hash/@art:value"; ingo@16: ingo@227: /** The XPath to the artifact's name value.*/ ingo@227: public static final String XPATH_NAME = "/art:result/art:name/@art:value"; ingo@227: ingo@16: ingo@14: /** ingo@14: * Creates a new instance of an {@link ArtifactCreator}. ingo@14: */ ingo@14: public FLYSArtifactCreator() { ingo@14: } ingo@14: ingo@14: ingo@14: /** ingo@14: * This concreate implementation returns an instance of {@link Artifact} ingo@14: * that is used in the FLYS GWT Client code. ingo@14: * ingo@14: * @param doc A document that describes the artifact that has been created ingo@14: * in the artifact server. ingo@14: * ingo@14: * @return an instance if {@link Artifact}. ingo@14: */ ingo@14: public Object create(Document doc) { ingo@16: Artifact artifact = extractArtifact(doc); ingo@16: artifact.setArtifactDescription( ingo@16: ArtifactDescriptionFactory.createArtifactDescription(doc)); ingo@16: ingo@16: return artifact; ingo@16: } ingo@16: ingo@16: ingo@16: /** ingo@16: * This method extracts the UUID und HASH information of the returned ingo@16: * artifact document. ingo@16: * ingo@16: * @param doc The result of the CREATE operation. ingo@16: * ingo@16: * @return an instance of an {@link Artifact}. ingo@16: */ ingo@16: protected Artifact extractArtifact(Document doc) { ingo@16: System.out.println("FLYSArtifactCreator - extractArtifact()"); ingo@16: ingo@16: String uuid = XMLUtils.xpathString( ingo@16: doc, XPATH_UUID, ArtifactNamespaceContext.INSTANCE); ingo@16: ingo@16: String hash = XMLUtils.xpathString( ingo@16: doc, XPATH_HASH, ArtifactNamespaceContext.INSTANCE); ingo@16: ingo@227: String name = XMLUtils.xpathString( ingo@227: doc, XPATH_NAME, ArtifactNamespaceContext.INSTANCE); ingo@227: ingo@16: System.out.println("NEW Artifact UUID: " + uuid); ingo@16: System.out.println("NEW Artifact HASH: " + hash); ingo@227: System.out.println("NEW Artifact NAME: " + name); ingo@227: ingo@227: if (name == null) { ingo@227: return new DefaultArtifact(uuid, hash); ingo@227: } ingo@227: ingo@227: name = name.trim(); ingo@227: ingo@227: if (name.length() > 0 && name.equals("winfo")) { ingo@227: System.out.println("+++++ NEW WINFO ARTIFACT."); ingo@227: return new WINFOArtifact(uuid, hash); ingo@227: } ingo@16: ingo@16: return new DefaultArtifact(uuid, hash); ingo@14: } ingo@14: } ingo@14: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :