Massive package refactoring
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / SingleUserContentRepository.java
index 0e3d1ad3fbf701b87b82f760548e2057de0342d4..8c87c5a938cd2613cc2b690edfd0a7c2ab695db1 100644 (file)
@@ -4,14 +4,17 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Locale;
 import java.util.Objects;
+import java.util.UUID;
 
 import javax.security.auth.Subject;
 import javax.security.auth.x500.X500Principal;
 
 import org.argeo.api.acr.ContentSession;
+import org.argeo.api.acr.ldap.LdapAttrs;
 import org.argeo.api.acr.spi.ProvidedRepository;
+import org.argeo.api.uuid.MacAddressUuidFactory;
+import org.argeo.api.uuid.UuidFactory;
 import org.argeo.cms.acr.fs.FsContentProvider;
-import org.argeo.util.naming.LdapAttrs;
 
 /**
  * A standalone {@link ProvidedRepository} with a single {@link Subject} (which
@@ -21,13 +24,15 @@ public class SingleUserContentRepository extends AbstractContentRepository {
        private final Subject subject;
        private final Locale locale;
 
+       private UUID uuid;
+
+       private UuidFactory uuidFactory = new MacAddressUuidFactory();
+
        // the single session
        private CmsContentSession contentSession;
 
        public SingleUserContentRepository(Subject subject) {
                this(subject, Locale.getDefault());
-
-               initRootContentProvider(null);
        }
 
        public SingleUserContentRepository(Subject subject, Locale locale) {
@@ -36,6 +41,9 @@ public class SingleUserContentRepository extends AbstractContentRepository {
 
                this.subject = subject;
                this.locale = locale;
+
+               // TODO use an UUID factory
+               this.uuid = UUID.randomUUID();
        }
 
        @Override
@@ -44,9 +52,10 @@ public class SingleUserContentRepository extends AbstractContentRepository {
                Objects.requireNonNull(locale);
 
                super.start();
+               initRootContentProvider(null);
                if (contentSession != null)
                        throw new IllegalStateException("Repository is already started, stop it first.");
-               contentSession = new CmsContentSession(this, subject, locale);
+               contentSession = new CmsContentSession(this, uuid, subject, locale, uuidFactory);
        }
 
        @Override
@@ -71,7 +80,7 @@ public class SingleUserContentRepository extends AbstractContentRepository {
 
        @Override
        protected CmsContentSession newSystemSession() {
-               return new CmsContentSession(this, subject, Locale.getDefault());
+               return new CmsContentSession(this, uuid, subject, Locale.getDefault(), uuidFactory);
        }
 
        public static void main(String... args) {
@@ -82,10 +91,10 @@ public class SingleUserContentRepository extends AbstractContentRepository {
                subject.getPrincipals().add(principal);
 
                SingleUserContentRepository contentRepository = new SingleUserContentRepository(subject);
+               contentRepository.start();
                FsContentProvider homeContentProvider = new FsContentProvider("/home", homePath);
                contentRepository.addProvider(homeContentProvider);
                Runtime.getRuntime().addShutdownHook(new Thread(() -> contentRepository.stop(), "Shutdown content repository"));
-               contentRepository.start();
 
                ContentSession contentSession = contentRepository.get();
                ContentUtils.traverse(contentSession.get("/"), (c, depth) -> ContentUtils.print(c, System.out, depth, false),