package org.argeo.entity; import javax.jcr.Node; import javax.jcr.RepositoryException; /** JCR utilities around the entity concepts. */ public class EntityJcrUtils { /** * The name of a node which will be serialized as XML text, as per section 7.3.1 * of the JCR 2.0 specifications. */ private final static String JCR_XMLTEXT = "jcr:xmltext"; /** * The name of a property which will be serialized as XML text, as per section * 7.3.1 of the JCR 2.0 specifications. */ private final static String JCR_XMLCHARACTERS = "jcr:xmlcharacters"; /* * XML */ /** * Set both as a property and as a subnode which will be exported as an XML * element. */ // public static void setAttrAndElem(Node node, String name, String value) { // Jcr.set(node, name, value); // setElem(node, name, value); // } /** * Set as a subnode which will be exported as an XML element. */ public static String getXmlValue(Node node, String name) { try { if (!node.hasNode(name)) throw new IllegalArgumentException("No XML text named " + name); return node.getNode(name).getNode(JCR_XMLTEXT).getProperty(JCR_XMLCHARACTERS).getString(); } catch (RepositoryException e) { throw new IllegalStateException("Cannot get " + name + " as XML text", e); } } /** * Set as a subnode which will be exported as an XML element. */ public static void setXmlValue(Node node, String name, String value) { try { if (node.hasNode(name)) node.getNode(name).getNode(JCR_XMLTEXT).setProperty(JCR_XMLCHARACTERS, value); else node.addNode(name, EntityType.xmlvalue.qualified()).addNode(JCR_XMLTEXT, EntityType.xmltext.qualified()) .setProperty(JCR_XMLCHARACTERS, value); } catch (RepositoryException e) { throw new IllegalStateException("Cannot set " + name + " as XML text", e); } } }