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