]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/JcrMetadataWriter.java
98e0183a0a87e7e0f3da65d08b64f8639bb4f53c
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.jcr / src / main / java / org / argeo / slc / jcr / JcrMetadataWriter.java
1 package org.argeo.slc.jcr;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import javax.jcr.Node;
7 import javax.jcr.RepositoryException;
8
9 import org.apache.commons.logging.Log;
10 import org.apache.commons.logging.LogFactory;
11 import org.argeo.jcr.JcrUtils;
12 import org.argeo.slc.SlcException;
13
14 /**
15 * Writes arbitrary metadata into a child node of a given node (or the node
16 * itself if metadata node name is set to null)
17 */
18 public class JcrMetadataWriter implements Runnable {
19 private final static Log log = LogFactory.getLog(JcrMetadataWriter.class);
20
21 private Node baseNode;
22 private String metadataNodeName = SlcNames.SLC_METADATA;
23
24 private Map<String, String> metadata = new HashMap<String, String>();
25
26 public void run() {
27 try {
28 Node metadataNode;
29 if (metadataNodeName != null)
30 metadataNode = baseNode.hasNode(metadataNodeName) ? baseNode
31 .getNode(metadataNodeName) : baseNode
32 .addNode(metadataNodeName);
33 else
34 metadataNode = baseNode;
35
36 for (String key : metadata.keySet())
37 metadataNode.setProperty(key, metadata.get(key));
38
39 baseNode.getSession().save();
40
41 if (log.isDebugEnabled())
42 log.debug("Wrote " + metadata.size() + " metadata entries to "
43 + metadataNode);
44 } catch (RepositoryException e) {
45 throw new SlcException("Cannot write metadata to " + baseNode, e);
46 } finally {
47 JcrUtils.discardUnderlyingSessionQuietly(baseNode);
48 }
49
50 }
51
52 public void setBaseNode(Node baseNode) {
53 this.baseNode = baseNode;
54 }
55
56 public void setMetadataNodeName(String metadataNodeName) {
57 this.metadataNodeName = metadataNodeName;
58 }
59
60 public void setMetadata(Map<String, String> metadata) {
61 this.metadata = metadata;
62 }
63
64 }