Massive package refactoring
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / SingleUserContentRepository.java
index c44200243d83847d94d56be513330d719b4fa75b..8c87c5a938cd2613cc2b690edfd0a7c2ab695db1 100644 (file)
@@ -1,12 +1,20 @@
 package org.argeo.cms.acr;
 
+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;
 
 /**
  * A standalone {@link ProvidedRepository} with a single {@link Subject} (which
@@ -16,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) {
@@ -31,6 +41,9 @@ public class SingleUserContentRepository extends AbstractContentRepository {
 
                this.subject = subject;
                this.locale = locale;
+
+               // TODO use an UUID factory
+               this.uuid = UUID.randomUUID();
        }
 
        @Override
@@ -39,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
@@ -66,7 +80,25 @@ 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) {
+               Path homePath = Paths.get(System.getProperty("user.home"));
+               String username = System.getProperty("user.name");
+               X500Principal principal = new X500Principal(LdapAttrs.uid + "=" + username + ",dc=localhost");
+               Subject subject = new Subject();
+               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"));
+
+               ContentSession contentSession = contentRepository.get();
+               ContentUtils.traverse(contentSession.get("/"), (c, depth) -> ContentUtils.print(c, System.out, depth, false),
+                               2);
+
+       }
 }