Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java @ 147:76cc1a66a05f
Implemented a FLYSArtifactCollection that will be used in this application now.
flys-artifacts/trunk@1565 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Thu, 24 Mar 2011 18:47:07 +0000 |
parents | |
children | 2649ada6b053 |
comparison
equal
deleted
inserted
replaced
146:e8dfe6ba2000 | 147:76cc1a66a05f |
---|---|
1 package de.intevation.flys.collections; | |
2 | |
3 import java.util.Date; | |
4 | |
5 import javax.xml.xpath.XPathConstants; | |
6 | |
7 import org.apache.log4j.Logger; | |
8 | |
9 import org.w3c.dom.Document; | |
10 import org.w3c.dom.Element; | |
11 import org.w3c.dom.Node; | |
12 | |
13 import de.intevation.artifacts.Artifact; | |
14 import de.intevation.artifacts.ArtifactNamespaceContext; | |
15 import de.intevation.artifacts.CallContext; | |
16 import de.intevation.artifacts.CollectionItem; | |
17 | |
18 import de.intevation.artifacts.common.utils.XMLUtils; | |
19 | |
20 import de.intevation.artifactdatabase.DefaultArtifactCollection; | |
21 import de.intevation.artifactdatabase.Backend; | |
22 import de.intevation.artifactdatabase.Backend.PersistentArtifact; | |
23 | |
24 | |
25 /** | |
26 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> | |
27 */ | |
28 public class FLYSArtifactCollection extends DefaultArtifactCollection { | |
29 | |
30 /** The logger used in this class.*/ | |
31 private static Logger log = Logger.getLogger(FLYSArtifactCollection.class); | |
32 | |
33 | |
34 /** Constant XPath that points to the outputmodes of an artifact.*/ | |
35 public static final String XPATH_ARTIFACT_OUTPUTMODES = | |
36 "/art:result/art:outputmodes"; | |
37 | |
38 | |
39 @Override | |
40 public Document describe(CallContext context) { | |
41 log.debug("FLYSArtifactCollection.describe: " + identifier); | |
42 | |
43 Document doc = XMLUtils.newDocument(); | |
44 | |
45 XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator( | |
46 doc, | |
47 ArtifactNamespaceContext.NAMESPACE_URI, | |
48 ArtifactNamespaceContext.NAMESPACE_PREFIX); | |
49 | |
50 Date creationTime = getCreationTime(); | |
51 String creation = creationTime != null | |
52 ? Long.toString(creationTime.getTime()) | |
53 : ""; | |
54 | |
55 Element collection = ec.create("artifact-collection"); | |
56 Element artifacts = ec.create("artifacts"); | |
57 | |
58 ec.addAttr(collection, "name", getName(), true); | |
59 ec.addAttr(collection, "uuid", identifier(), true); | |
60 ec.addAttr(collection, "creation", creation, true); | |
61 | |
62 collection.appendChild(artifacts); | |
63 doc.appendChild(collection); | |
64 | |
65 Document attribute = getAttribute(); | |
66 if (attribute != null) { | |
67 Node child = attribute.getFirstChild(); | |
68 collection.appendChild(doc.importNode(child, true)); | |
69 } | |
70 | |
71 Backend backend = Backend.getInstance(); | |
72 CollectionItem[] items = backend.listCollectionArtifacts(identifier()); | |
73 | |
74 for (CollectionItem item: items) { | |
75 artifacts.appendChild( | |
76 buildArtifactNode(item, backend, context, ec)); | |
77 } | |
78 | |
79 return doc; | |
80 } | |
81 | |
82 | |
83 protected Element buildArtifactNode( | |
84 CollectionItem item, | |
85 Backend backend, | |
86 CallContext context, | |
87 XMLUtils.ElementCreator ec) | |
88 { | |
89 String uuid = item.getArtifactIdentifier(); | |
90 | |
91 log.debug("Append artifact '"+ uuid +"' to collection description"); | |
92 | |
93 Element ci = ec.create("artifact"); | |
94 ec.addAttr(ci, "uuid", uuid); | |
95 | |
96 PersistentArtifact pArtifact = backend.getArtifact(uuid); | |
97 Artifact artifact = pArtifact.getArtifact(); | |
98 | |
99 // XXX I am not sure if it works well every time with an empty document | |
100 // in the describe operation of an artifact. | |
101 Document description = artifact.describe(null, context); | |
102 Node outputModes = (Node) XMLUtils.xpath( | |
103 description, | |
104 XPATH_ARTIFACT_OUTPUTMODES, | |
105 XPathConstants.NODE, | |
106 ArtifactNamespaceContext.INSTANCE); | |
107 | |
108 if (outputModes != null) { | |
109 Document doc = ci.getOwnerDocument(); | |
110 ci.appendChild(doc.importNode(outputModes, true)); | |
111 } | |
112 | |
113 return ci; | |
114 } | |
115 } | |
116 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |