]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContent.java
Improve ACR.
[lgpl/argeo-commons.git] / jcr / org.argeo.cms.jcr / src / org / argeo / cms / jcr / acr / JcrContent.java
index 5dd37f15be00eb9b922f93b2b4781917dab816f0..116e45c7bf09fc0d546aeadc216a7239bcab4b9b 100644 (file)
@@ -28,10 +28,10 @@ import javax.xml.transform.stream.StreamSource;
 
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.NamespaceUtils;
-import org.argeo.api.acr.spi.AbstractContent;
 import org.argeo.api.acr.spi.ContentProvider;
 import org.argeo.api.acr.spi.ProvidedSession;
 import org.argeo.api.cms.CmsConstants;
+import org.argeo.cms.acr.AbstractContent;
 import org.argeo.cms.acr.ContentUtils;
 import org.argeo.jcr.Jcr;
 import org.argeo.jcr.JcrException;
@@ -180,6 +180,8 @@ public class JcrContent extends AbstractContent {
 
        @Override
        public Content getParent() {
+               if (Jcr.isRoot(getJcrNode())) // root
+                       return null;
                return new JcrContent(session, provider, jcrWorkspace, Jcr.getParentPath(getJcrNode()));
        }
 
@@ -220,9 +222,18 @@ public class JcrContent extends AbstractContent {
 
        }
 
+       boolean exists() {
+               try {
+                       return provider.getJcrSession(session, jcrWorkspace).itemExists(jcrPath);
+               } catch (RepositoryException e) {
+                       throw new JcrException("Cannot check whether " + jcrPath + " exists", e);
+               }
+       }
+
        /*
         * ADAPTERS
         */
+       @SuppressWarnings("unchecked")
        public <A> A adapt(Class<A> clss) {
                if (Source.class.isAssignableFrom(clss)) {
 //                     try {
@@ -246,6 +257,7 @@ public class JcrContent extends AbstractContent {
                        return super.adapt(clss);
        }
 
+       @SuppressWarnings("unchecked")
        @Override
        public <C extends Closeable> C open(Class<C> clss) throws IOException, IllegalArgumentException {
                if (InputStream.class.isAssignableFrom(clss)) {
@@ -271,6 +283,15 @@ public class JcrContent extends AbstractContent {
                return provider;
        }
 
+       @Override
+       public String getSessionLocalId() {
+               try {
+                       return getJcrNode().getIdentifier();
+               } catch (RepositoryException e) {
+                       throw new JcrException("Cannot get identifier for " + getJcrNode(), e);
+               }
+       }
+
        /*
         * STATIC UTLITIES
         */