X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.jcr%2Fsrc%2Forg%2Fargeo%2Fcms%2Fjcr%2Fgcr%2FJcrContent.java;h=ddef0078ef7264ca683fb45e333b602e2c6ea56d;hb=e5a22cdc7d0f4918f2740c626e1ab6384bd5ee44;hp=d319c5504e4f32f4ecbd7d1b2313a5f94f118d73;hpb=51efb630db7314b67654a03d1bd983b45aa2f1ed;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.jcr/src/org/argeo/cms/jcr/gcr/JcrContent.java b/org.argeo.cms.jcr/src/org/argeo/cms/jcr/gcr/JcrContent.java index d319c5504..ddef0078e 100644 --- a/org.argeo.cms.jcr/src/org/argeo/cms/jcr/gcr/JcrContent.java +++ b/org.argeo.cms.jcr/src/org/argeo/cms/jcr/gcr/JcrContent.java @@ -11,53 +11,57 @@ import javax.jcr.PropertyType; import javax.jcr.RepositoryException; import javax.jcr.Value; import javax.jcr.nodetype.NodeType; +import javax.xml.namespace.QName; import org.argeo.api.gcr.Content; -import org.argeo.api.gcr.ContentName; import org.argeo.api.gcr.spi.AbstractContent; +import org.argeo.api.gcr.spi.ProvidedSession; import org.argeo.jcr.Jcr; import org.argeo.jcr.JcrException; public class JcrContent extends AbstractContent { - private JcrContentProvider contentProvider; private Node jcrNode; - protected JcrContent(JcrContentProvider contentSession, Node node) { - this.contentProvider = contentSession; + private JcrContentProvider provider; + private ProvidedSession session; + + protected JcrContent(ProvidedSession session, JcrContentProvider provider, Node node) { + this.session = session; + this.provider = provider; this.jcrNode = node; } @Override - public String getName() { - return Jcr.getName(jcrNode); + public QName getName() { + return session.parsePrefixedName(Jcr.getName(jcrNode)); } @Override - public A get(String key, Class clss) { + public A get(QName key, Class clss) { if (isDefaultAttrTypeRequested(clss)) { - return (A) get(jcrNode, key); + return (A) get(jcrNode, key.toString()); } - return (A) Jcr.get(jcrNode, key); + return (A) Jcr.get(jcrNode, key.toString()); } @Override public Iterator iterator() { try { - return new JcrContentIterator(contentProvider, jcrNode.getNodes()); + return new JcrContentIterator(jcrNode.getNodes()); } catch (RepositoryException e) { throw new JcrException("Cannot list children of " + jcrNode, e); } } @Override - protected Iterable keys() { - return new Iterable() { + protected Iterable keys() { + return new Iterable() { @Override - public Iterator iterator() { + public Iterator iterator() { try { PropertyIterator propertyIterator = jcrNode.getProperties(); - return new JcrKeyIterator(contentProvider, propertyIterator); + return new JcrKeyIterator(provider, propertyIterator); } catch (RepositoryException e) { throw new JcrException("Cannot retrive properties from " + jcrNode, e); } @@ -95,14 +99,12 @@ public class JcrContent extends AbstractContent { } } - static class JcrContentIterator implements Iterator { - private final JcrContentProvider contentSession; + class JcrContentIterator implements Iterator { private final NodeIterator nodeIterator; // we keep track in order to be able to delete it private JcrContent current = null; - protected JcrContentIterator(JcrContentProvider contentSession, NodeIterator nodeIterator) { - this.contentSession = contentSession; + protected JcrContentIterator(NodeIterator nodeIterator) { this.nodeIterator = nodeIterator; } @@ -113,7 +115,7 @@ public class JcrContent extends AbstractContent { @Override public Content next() { - current = new JcrContent(contentSession, nodeIterator.nextNode()); + current = new JcrContent(session, provider, nodeIterator.nextNode()); return current; } @@ -128,14 +130,14 @@ public class JcrContent extends AbstractContent { @Override public Content getParent() { - return new JcrContent(contentProvider, Jcr.getParent(getJcrNode())); + return new JcrContent(session, provider, Jcr.getParent(getJcrNode())); } @Override - public Content add(String name, ContentName... classes) { + public Content add(QName name, QName... classes) { if (classes.length > 0) { - ContentName primaryType = classes[0]; - Node child = Jcr.addNode(getJcrNode(), name, primaryType.toString()); + QName primaryType = classes[0]; + Node child = Jcr.addNode(getJcrNode(), name.toString(), primaryType.toString()); for (int i = 1; i < classes.length; i++) { try { child.addMixin(classes[i].toString()); @@ -145,7 +147,7 @@ public class JcrContent extends AbstractContent { } } else { - Jcr.addNode(getJcrNode(), name, NodeType.NT_UNSTRUCTURED); + Jcr.addNode(getJcrNode(), name.toString(), NodeType.NT_UNSTRUCTURED); } return null; } @@ -156,8 +158,8 @@ public class JcrContent extends AbstractContent { } @Override - protected void removeAttr(String key) { - Property property = Jcr.getProperty(getJcrNode(), key); + protected void removeAttr(QName key) { + Property property = Jcr.getProperty(getJcrNode(), key.toString()); if (property != null) { try { property.remove(); @@ -168,7 +170,7 @@ public class JcrContent extends AbstractContent { } - static class JcrKeyIterator implements Iterator { + class JcrKeyIterator implements Iterator { private final JcrContentProvider contentSession; private final PropertyIterator propertyIterator; @@ -183,12 +185,12 @@ public class JcrContent extends AbstractContent { } @Override - public String next() { + public QName next() { Property property = null; try { property = propertyIterator.nextProperty(); // TODO map standard property names - return property.getName(); + return session.parsePrefixedName(property.getName()); } catch (RepositoryException e) { throw new JcrException("Cannot retrieve property " + property, null); }