Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java @ 293:3419b1c8ca28
Removed the Backend reference from FLYSArtifactCollection.
flys-artifacts/trunk@1629 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 30 Mar 2011 16:00:51 +0000 |
parents | d03b8bbeb853 |
children | 8d0932c2c2ef |
comparison
equal
deleted
inserted
replaced
292:f44b11cc23b6 | 293:3419b1c8ca28 |
---|---|
7 import org.apache.log4j.Logger; | 7 import org.apache.log4j.Logger; |
8 | 8 |
9 import org.w3c.dom.Document; | 9 import org.w3c.dom.Document; |
10 import org.w3c.dom.Element; | 10 import org.w3c.dom.Element; |
11 import org.w3c.dom.Node; | 11 import org.w3c.dom.Node; |
12 import org.w3c.dom.NodeList; | |
12 | 13 |
13 import de.intevation.artifacts.Artifact; | 14 import de.intevation.artifacts.ArtifactDatabase; |
15 import de.intevation.artifacts.ArtifactDatabaseException; | |
14 import de.intevation.artifacts.ArtifactNamespaceContext; | 16 import de.intevation.artifacts.ArtifactNamespaceContext; |
15 import de.intevation.artifacts.CallContext; | 17 import de.intevation.artifacts.CallContext; |
16 import de.intevation.artifacts.CollectionItem; | 18 import de.intevation.artifacts.CallMeta; |
17 | 19 |
18 import de.intevation.artifacts.common.utils.XMLUtils; | 20 import de.intevation.artifacts.common.utils.XMLUtils; |
19 | 21 |
20 import de.intevation.artifactdatabase.DefaultArtifactCollection; | 22 import de.intevation.artifactdatabase.DefaultArtifactCollection; |
21 import de.intevation.artifactdatabase.Backend; | |
22 import de.intevation.artifactdatabase.Backend.PersistentArtifact; | |
23 | 23 |
24 | 24 |
25 /** | 25 /** |
26 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> | 26 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> |
27 */ | 27 */ |
32 | 32 |
33 | 33 |
34 /** Constant XPath that points to the outputmodes of an artifact.*/ | 34 /** Constant XPath that points to the outputmodes of an artifact.*/ |
35 public static final String XPATH_ARTIFACT_OUTPUTMODES = | 35 public static final String XPATH_ARTIFACT_OUTPUTMODES = |
36 "/art:result/art:outputmodes"; | 36 "/art:result/art:outputmodes"; |
37 | |
38 public static final String XPATH_COLLECTION_ITEMS = | |
39 "/art:result/art:artifact-collection/art:collection-item"; | |
37 | 40 |
38 | 41 |
39 @Override | 42 @Override |
40 public Document describe(CallContext context) { | 43 public Document describe(CallContext context) { |
41 log.debug("FLYSArtifactCollection.describe: " + identifier); | 44 log.debug("FLYSArtifactCollection.describe: " + identifier); |
66 if (attribute != null) { | 69 if (attribute != null) { |
67 Node child = attribute.getFirstChild(); | 70 Node child = attribute.getFirstChild(); |
68 collection.appendChild(doc.importNode(child, true)); | 71 collection.appendChild(doc.importNode(child, true)); |
69 } | 72 } |
70 | 73 |
71 Backend backend = Backend.getInstance(); | 74 try { |
72 CollectionItem[] items = backend.listCollectionArtifacts(identifier()); | 75 ArtifactDatabase db = context.getDatabase(); |
76 CallMeta meta = context.getMeta(); | |
73 | 77 |
74 for (CollectionItem item: items) { | 78 Document itemList = db.listCollectionArtifacts(identifier(), meta); |
75 artifacts.appendChild( | 79 NodeList items = (NodeList) XMLUtils.xpath( |
76 buildArtifactNode(item, backend, context, ec)); | 80 itemList, |
81 XPATH_COLLECTION_ITEMS, | |
82 XPathConstants.NODESET, | |
83 ArtifactNamespaceContext.INSTANCE); | |
84 | |
85 if (items == null || items.getLength() == 0) { | |
86 log.debug("No collection items found."); | |
87 return doc; | |
88 } | |
89 | |
90 int num = items.getLength(); | |
91 | |
92 for (int i = 0; i < num; i++) { | |
93 String uuid = XMLUtils.xpathString( | |
94 items.item(i), | |
95 "@art:uuid", | |
96 ArtifactNamespaceContext.INSTANCE); | |
97 | |
98 try { | |
99 artifacts.appendChild( | |
100 buildArtifactNode(db, uuid, context, ec)); | |
101 } | |
102 catch (ArtifactDatabaseException dbe) { | |
103 log.warn(dbe, dbe); | |
104 } | |
105 } | |
106 } | |
107 catch (ArtifactDatabaseException ade) { | |
108 log.error(ade, ade); | |
77 } | 109 } |
78 | 110 |
79 return doc; | 111 return doc; |
80 } | 112 } |
81 | 113 |
82 | 114 |
83 protected Element buildArtifactNode( | 115 protected Element buildArtifactNode( |
84 CollectionItem item, | 116 ArtifactDatabase database, |
85 Backend backend, | 117 String uuid, |
86 CallContext context, | 118 CallContext context, |
87 XMLUtils.ElementCreator ec) | 119 XMLUtils.ElementCreator ec) |
120 throws ArtifactDatabaseException | |
88 { | 121 { |
89 String uuid = item.getArtifactIdentifier(); | 122 log.debug("Append artifact '" + uuid + "' to collection description"); |
90 | 123 |
91 log.debug("Append artifact '"+ uuid +"' to collection description"); | 124 // XXX I am not sure if it works well every time with an empty document |
125 // in the describe operation of an artifact. | |
126 Document description = database.describe(uuid, null, context.getMeta()); | |
92 | 127 |
93 PersistentArtifact pArtifact = backend.getArtifact(uuid); | 128 de.intevation.flys.artifacts.XMLDebug.out(description); |
94 Artifact artifact = pArtifact.getArtifact(); | 129 |
130 String hash = "MYHASH"; | |
131 // TODO | |
95 | 132 |
96 Element ci = ec.create("artifact"); | 133 Element ci = ec.create("artifact"); |
97 ec.addAttr(ci, "uuid", uuid, true); | 134 ec.addAttr(ci, "uuid", uuid, true); |
98 ec.addAttr(ci, "hash", artifact.hash(), true); | 135 ec.addAttr(ci, "hash", hash, true); |
99 | 136 |
100 // XXX I am not sure if it works well every time with an empty document | 137 Node outputModes = (Node) XMLUtils.xpath( |
101 // in the describe operation of an artifact. | |
102 Document description = artifact.describe(null, context); | |
103 Node outputModes = (Node) XMLUtils.xpath( | |
104 description, | 138 description, |
105 XPATH_ARTIFACT_OUTPUTMODES, | 139 XPATH_ARTIFACT_OUTPUTMODES, |
106 XPathConstants.NODE, | 140 XPathConstants.NODE, |
107 ArtifactNamespaceContext.INSTANCE); | 141 ArtifactNamespaceContext.INSTANCE); |
108 | 142 |