Introduce do as admin
authorMathieu <mbaudier@argeo.org>
Mon, 14 Nov 2022 06:29:01 +0000 (07:29 +0100)
committerMathieu <mbaudier@argeo.org>
Mon, 14 Nov 2022 06:29:01 +0000 (07:29 +0100)
org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentProvider.java
org.argeo.cms.jcr/src/org/argeo/jcr/JcrUtils.java

index eaa27b7fc631d806fde1f1590c0eca142f786cd7..38bcd569212e6b7d371591f01b5b325d1decdf33 100644 (file)
@@ -6,6 +6,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Objects;
+import java.util.function.Function;
 
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
@@ -89,11 +90,24 @@ public class JcrContentProvider implements ContentProvider, NamespaceContext {
                return mountPath;
        }
 
+       public synchronized <T> T doInAdminSession(Function<Session, T> toDo) {
+               try {
+                       return toDo.apply(adminSession);
+               } finally {
+                       try {
+                               if (adminSession.hasPendingChanges())
+                                       adminSession.save();
+                       } catch (RepositoryException e) {
+                               throw new JcrException("Cannot save admin session", e);
+                       }
+               }
+       }
+
        /*
         * NAMESPACE CONTEXT
         */
        @Override
-       public String getNamespaceURI(String prefix) {
+       public synchronized String getNamespaceURI(String prefix) {
                try {
                        return adminSession.getNamespaceURI(prefix);
                } catch (RepositoryException e) {
@@ -102,7 +116,7 @@ public class JcrContentProvider implements ContentProvider, NamespaceContext {
        }
 
        @Override
-       public String getPrefix(String namespaceURI) {
+       public synchronized String getPrefix(String namespaceURI) {
                try {
                        return adminSession.getNamespacePrefix(namespaceURI);
                } catch (RepositoryException e) {
@@ -111,7 +125,7 @@ public class JcrContentProvider implements ContentProvider, NamespaceContext {
        }
 
        @Override
-       public Iterator<String> getPrefixes(String namespaceURI) {
+       public synchronized Iterator<String> getPrefixes(String namespaceURI) {
                try {
                        return Arrays.asList(adminSession.getNamespacePrefix(namespaceURI)).iterator();
                } catch (RepositoryException e) {
index 1f1fa11217d01e76a5bbf96d4652de4c5459c5b6..7f157cde661064941f69e5874dc39d484ff79a27 100644 (file)
@@ -1151,7 +1151,7 @@ public class JcrUtils {
 //                             } catch (InterruptedException e1) {
 //                                     // ignore
 //                             }
-                               
+
                                workspaceSession = repository.login(credentials, workspaceName);
                        }
                        return workspaceSession;
@@ -1382,7 +1382,7 @@ public class JcrUtils {
 
        /**
         * Convenience method for adding a single privilege to a principal (user or
-        * role), typically jcr:all
+        * role), typically jcr:all. Session is saved.
         */
        public synchronized static void addPrivilege(Session session, String path, String principal, String privilege)
                        throws RepositoryException {