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

http://dive4elements.wald.intevation.org