Introduce UUID identified and openForEdit/freeze cycle
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / CmsContentSession.java
index 8d475fd204853737eae48b94629c04fcdf858ea2..be4ffea746bf1b32a1fc2cc18aa6c116b300d468 100644 (file)
@@ -26,10 +26,11 @@ import org.argeo.api.acr.spi.ProvidedContent;
 import org.argeo.api.acr.spi.ProvidedRepository;
 import org.argeo.api.acr.spi.ProvidedSession;
 import org.argeo.api.uuid.UuidFactory;
+import org.argeo.api.uuid.UuidIdentified;
 import org.argeo.cms.CurrentUser;
 
 /** Implements {@link ProvidedSession}. */
-class CmsContentSession implements ProvidedSession {
+class CmsContentSession implements ProvidedSession, UuidIdentified {
        final private AbstractContentRepository contentRepository;
 
        private final UUID uuid;
@@ -73,7 +74,7 @@ class CmsContentSession implements ProvidedSession {
                        throw new IllegalArgumentException(path + " is not an absolute path");
                ContentProvider contentProvider = contentRepository.getMountManager().findContentProvider(path);
                String mountPath = contentProvider.getMountPath();
-               String relativePath = extractRelativePath(mountPath, path);
+               String relativePath = ContentUtils.relativize(mountPath, path);
                ProvidedContent content = contentProvider.get(CmsContentSession.this, relativePath);
                return content;
        }
@@ -84,17 +85,10 @@ class CmsContentSession implements ProvidedSession {
                        throw new IllegalArgumentException(path + " is not an absolute path");
                ContentProvider contentProvider = contentRepository.getMountManager().findContentProvider(path);
                String mountPath = contentProvider.getMountPath();
-               String relativePath = extractRelativePath(mountPath, path);
+               String relativePath = ContentUtils.relativize(mountPath, path);
                return contentProvider.exists(this, relativePath);
        }
 
-       private String extractRelativePath(String mountPath, String path) {
-               String relativePath = path.substring(mountPath.length());
-               if (relativePath.length() > 0 && relativePath.charAt(0) == '/')
-                       relativePath = relativePath.substring(1);
-               return relativePath;
-       }
-
        @Override
        public Subject getSubject() {
                return subject;
@@ -161,7 +155,7 @@ class CmsContentSession implements ProvidedSession {
        }
 
        @Override
-       public UUID getUuid() {
+       public UUID uuid() {
                return uuid;
        }
 
@@ -180,11 +174,18 @@ class CmsContentSession implements ProvidedSession {
                return sessionRunDir;
        }
 
+       /*
+        * OBJECT METHODS
+        */
+
        @Override
        public boolean equals(Object o) {
-               if (o instanceof CmsContentSession session)
-                       return uuid.equals(session.uuid);
-               return false;
+               return UuidIdentified.equals(this, o);
+       }
+
+       @Override
+       public int hashCode() {
+               return UuidIdentified.hashCode(this);
        }
 
        @Override