X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2FSingleUserContentRepository.java;h=8c87c5a938cd2613cc2b690edfd0a7c2ab695db1;hb=54df376a9c2dd458a82eaa09bfbb718fe699dd0d;hp=c44200243d83847d94d56be513330d719b4fa75b;hpb=eb4cc3db3bf141c229f0f7ff929daff108bee6d2;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/acr/SingleUserContentRepository.java b/org.argeo.cms/src/org/argeo/cms/acr/SingleUserContentRepository.java index c44200243..8c87c5a93 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/SingleUserContentRepository.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/SingleUserContentRepository.java @@ -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); + + } }