comparison artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactDatabaseImpl.java @ 189:fbaeb5931d10

Implemented addCollectionArtifact() and listCollectionArtifacts() of the artifact database. artifacts/trunk@1419 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Mon, 07 Mar 2011 16:30:45 +0000
parents 9b8923043a38
children 7acf4a325bfe
comparison
equal deleted inserted replaced
188:946e2245a6c0 189:fbaeb5931d10
18 import de.intevation.artifacts.ArtifactFactory; 18 import de.intevation.artifacts.ArtifactFactory;
19 import de.intevation.artifacts.ArtifactNamespaceContext; 19 import de.intevation.artifacts.ArtifactNamespaceContext;
20 import de.intevation.artifacts.ArtifactSerializer; 20 import de.intevation.artifacts.ArtifactSerializer;
21 import de.intevation.artifacts.CallContext; 21 import de.intevation.artifacts.CallContext;
22 import de.intevation.artifacts.CallMeta; 22 import de.intevation.artifacts.CallMeta;
23 import de.intevation.artifacts.CollectionItem;
23 import de.intevation.artifacts.Service; 24 import de.intevation.artifacts.Service;
24 import de.intevation.artifacts.ServiceFactory; 25 import de.intevation.artifacts.ServiceFactory;
25 import de.intevation.artifacts.User; 26 import de.intevation.artifacts.User;
26 import de.intevation.artifacts.UserFactory; 27 import de.intevation.artifacts.UserFactory;
27 28
210 * XPath to figure out the name of a collection described in the incoming 211 * XPath to figure out the name of a collection described in the incoming
211 * document. 212 * document.
212 */ 213 */
213 public static final String XPATH_COLLECTION_NAME = 214 public static final String XPATH_COLLECTION_NAME =
214 "/art:action/art:type/art:collection/@name"; 215 "/art:action/art:type/art:collection/@name";
216
217 /**
218 * XPath to figure out the attributes for an artifact that is put into a
219 * collection.
220 */
221 public static final String XPATH_COLLECTION_ITEM_ATTRIBUTE =
222 "/art:action/art:type/art:artifact/art:attribute";
215 223
216 224
217 /** 225 /**
218 * Inner class that implements the call context handed 226 * Inner class that implements the call context handed
219 * to the methods calls describe(), feed(), etc. of the artifact. 227 * to the methods calls describe(), feed(), etc. of the artifact.
1240 Document attribute, CallMeta callMeta) 1248 Document attribute, CallMeta callMeta)
1241 throws ArtifactDatabaseException { 1249 throws ArtifactDatabaseException {
1242 throw new ArtifactDatabaseException("Not implemented, yet!"); 1250 throw new ArtifactDatabaseException("Not implemented, yet!");
1243 } 1251 }
1244 1252
1245 public Document addCollectionArtifact(String collectionId, String artifactId, 1253 public Document addCollectionArtifact(
1246 CallMeta callMeta) throws ArtifactDatabaseException 1254 String collectionId,
1255 String artifactId,
1256 Document input,
1257 CallMeta callMeta)
1258 throws ArtifactDatabaseException
1247 { 1259 {
1248 logger.debug( 1260 logger.debug(
1249 "Add artifact '" + artifactId + "' collection '" +collectionId+"'"); 1261 "Add artifact '" + artifactId + "' collection '" +collectionId+"'");
1262
1263 Document attr = XMLUtils.newDocument();
1264
1265 Node attrNode = (Node) XMLUtils.xpath(
1266 input,
1267 XPATH_COLLECTION_ITEM_ATTRIBUTE,
1268 XPathConstants.NODE,
1269 ArtifactNamespaceContext.INSTANCE);
1270
1271 if (attrNode != null) {
1272 attr.appendChild(attr.importNode(attrNode, true));
1273 }
1250 1274
1251 boolean success = backend.addCollectionArtifact( 1275 boolean success = backend.addCollectionArtifact(
1252 collectionId, 1276 collectionId,
1253 artifactId, 1277 artifactId,
1254 null); // XXX: Needed to be extracted from input 1278 attr);
1255 1279
1256 Document result = XMLUtils.newDocument(); 1280 Document result = XMLUtils.newDocument();
1257 1281
1258 XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator( 1282 XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator(
1259 result, 1283 result,
1272 CallMeta callMeta) throws ArtifactDatabaseException { 1296 CallMeta callMeta) throws ArtifactDatabaseException {
1273 throw new ArtifactDatabaseException("Not implemented, yet!"); 1297 throw new ArtifactDatabaseException("Not implemented, yet!");
1274 } 1298 }
1275 1299
1276 public Document listCollectionArtifacts(String collectionId, 1300 public Document listCollectionArtifacts(String collectionId,
1277 CallMeta callMeta) throws ArtifactDatabaseException { 1301 CallMeta callMeta) throws ArtifactDatabaseException
1278 throw new ArtifactDatabaseException("Not implemented, yet!"); 1302 {
1303 CollectionItem[] items = backend.listCollectionArtifacts(collectionId);
1304
1305 Document result = XMLUtils.newDocument();
1306
1307 XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator(
1308 result,
1309 ArtifactNamespaceContext.NAMESPACE_URI,
1310 ArtifactNamespaceContext.NAMESPACE_PREFIX);
1311
1312 Element root = ec.create("result");
1313 Element ac = ec.create("artifact-collection");
1314 ec.addAttr(ac, "uuid", collectionId, true);
1315
1316 for (CollectionItem item: items) {
1317 Element i = ec.create("collection-item");
1318 Element attr = ec.create("attribute");
1319 ec.addAttr(i, "uuid", item.getArtifactIdentifier(), true);
1320
1321 Document attribute = item.getAttribute();
1322 if (attribute != null) {
1323 Node firstChild = attribute.getFirstChild();
1324 attr.appendChild(result.importNode(firstChild, true));
1325 }
1326 else {
1327 logger.debug("No attributes for the collection item!");
1328 }
1329
1330 i.appendChild(attr);
1331 ac.appendChild(i);
1332 }
1333
1334 root.appendChild(ac);
1335 result.appendChild(root);
1336
1337 return result;
1279 } 1338 }
1280 1339
1281 public DeferredOutput outCollection(String collectionId, 1340 public DeferredOutput outCollection(String collectionId,
1282 Document format, CallMeta callMeta) 1341 Document format, CallMeta callMeta)
1283 throws ArtifactDatabaseException{ 1342 throws ArtifactDatabaseException{

http://dive4elements.wald.intevation.org