Remove session run dir API for the time being.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / CmsContentSession.java
index 13494dd0a8588825b23c386fa926471bbe5543dc..17a03fdc501bf9d138998f597c4e1663f0c330f5 100644 (file)
@@ -12,7 +12,7 @@ import javax.security.auth.Subject;
 
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.ContentSession;
-import org.argeo.api.acr.CrName;
+import org.argeo.api.acr.DName;
 import org.argeo.api.acr.spi.ContentProvider;
 import org.argeo.api.acr.spi.ProvidedContent;
 import org.argeo.api.acr.spi.ProvidedRepository;
@@ -61,6 +61,8 @@ class CmsContentSession implements ProvidedSession {
 
        @Override
        public Content get(String path) {
+               if (!path.startsWith(ContentUtils.ROOT_SLASH))
+                       throw new IllegalArgumentException(path + " is not an absolute path");
                ContentProvider contentProvider = contentRepository.getMountManager().findContentProvider(path);
                String mountPath = contentProvider.getMountPath();
                String relativePath = extractRelativePath(mountPath, path);
@@ -70,6 +72,8 @@ class CmsContentSession implements ProvidedSession {
 
        @Override
        public boolean exists(String path) {
+               if (!path.startsWith(ContentUtils.ROOT_SLASH))
+                       throw new IllegalArgumentException(path + " is not an absolute path");
                ContentProvider contentProvider = contentRepository.getMountManager().findContentProvider(path);
                String mountPath = contentProvider.getMountPath();
                String relativePath = extractRelativePath(mountPath, path);
@@ -114,36 +118,24 @@ class CmsContentSession implements ProvidedSession {
        }
 
        /*
-        * NAMESPACE CONTEXT
+        * EDITION
         */
-
-//     @Override
-//     public String getNamespaceURI(String prefix) {
-//             return RuntimeNamespaceContext.getNamespaceContext().getNamespaceURI(prefix);
-////           return NamespaceUtils.getNamespaceURI((p) -> contentRepository.getTypesManager().getPrefixes().get(p), prefix);
-//     }
-//
-//     @Override
-//     public Iterator<String> getPrefixes(String namespaceURI) {
-//             return RuntimeNamespaceContext.getNamespaceContext().getPrefixes(namespaceURI);
-////           return NamespaceUtils.getPrefixes((ns) -> contentRepository.getTypesManager().getPrefixes().entrySet().stream()
-////                           .filter(e -> e.getValue().equals(ns)).map(Map.Entry::getKey).collect(Collectors.toUnmodifiableSet()),
-////                           namespaceURI);
-//     }
-
        @Override
        public CompletionStage<ContentSession> edit(Consumer<ContentSession> work) {
                edition = CompletableFuture.supplyAsync(() -> {
                        work.accept(this);
                        return this;
                }).thenApply((s) -> {
-                       // TODO optimise
-                       for (ContentProvider provider : modifiedProviders) {
-                               if (provider instanceof DomContentProvider) {
-                                       ((DomContentProvider) provider).persist(s);
+                       synchronized (CmsContentSession.this) {
+                               // TODO optimise
+                               for (ContentProvider provider : modifiedProviders) {
+                                       if (provider instanceof DomContentProvider) {
+                                               ((DomContentProvider) provider).persist(s);
+                                       }
                                }
+                               modifiedProviders.clear();
+                               return s;
                        }
-                       return s;
                });
                return edition.minimalCompletionStage();
        }
@@ -154,7 +146,7 @@ class CmsContentSession implements ProvidedSession {
        }
 
        @Override
-       public void notifyModification(ProvidedContent content) {
+       public synchronized void notifyModification(ProvidedContent content) {
                ContentProvider contentProvider = content.getProvider();
                modifiedProviders.add(contentProvider);
        }
@@ -164,7 +156,7 @@ class CmsContentSession implements ProvidedSession {
                return uuid;
        }
 
-       @Override
+//     @Override
        public Content getSessionRunDir() {
                if (sessionRunDir == null) {
                        String runDirPath = CmsContentRepository.RUN_BASE + '/' + uuid.toString();
@@ -173,30 +165,9 @@ class CmsContentSession implements ProvidedSession {
                        else {
                                Content runDir = get(CmsContentRepository.RUN_BASE);
                                // TODO deal with no run dir available?
-                               sessionRunDir = runDir.add(uuid.toString(), CrName.collection.qName());
+                               sessionRunDir = runDir.add(uuid.toString(), DName.collection.qName());
                        }
                }
                return sessionRunDir;
        }
-
-//             @Override
-//             public String findNamespace(String prefix) {
-//                     return prefixes.get(prefix);
-//             }
-//
-//             @Override
-//             public Set<String> findPrefixes(String namespaceURI) {
-//                     Set<String> res = prefixes.entrySet().stream().filter(e -> e.getValue().equals(namespaceURI))
-//                                     .map(Map.Entry::getKey).collect(Collectors.toUnmodifiableSet());
-//
-//                     return res;
-//             }
-//
-//             @Override
-//             public String findPrefix(String namespaceURI) {
-//                     if (CrName.CR_NAMESPACE_URI.equals(namespaceURI) && prefixes.containsKey(CrName.CR_DEFAULT_PREFIX))
-//                             return CrName.CR_DEFAULT_PREFIX;
-//                     return ProvidedSession.super.findPrefix(namespaceURI);
-//             }
-
 }
\ No newline at end of file