Introduce directory content provider
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / runtime / StaticCms.java
index e4087e13903ee00f707ea5ec159f9f5335c86b37..a44c5d4fdade72c495ed52e430ae033716ffbf1c 100644 (file)
@@ -3,6 +3,7 @@ package org.argeo.cms.runtime;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Dictionary;
+import java.util.HashMap;
 import java.util.concurrent.CompletableFuture;
 
 import org.argeo.api.acr.ContentRepository;
@@ -11,7 +12,9 @@ import org.argeo.api.cms.CmsContext;
 import org.argeo.api.cms.CmsDeployment;
 import org.argeo.api.cms.CmsState;
 import org.argeo.api.uuid.UuidFactory;
+import org.argeo.cms.CmsUserManager;
 import org.argeo.cms.acr.CmsUuidFactory;
+import org.argeo.cms.internal.auth.CmsUserManagerImpl;
 import org.argeo.cms.internal.osgi.DeployConfig;
 import org.argeo.cms.internal.runtime.CmsContextImpl;
 import org.argeo.cms.internal.runtime.CmsDeploymentImpl;
@@ -21,6 +24,7 @@ import org.argeo.cms.internal.runtime.DeployedContentRepository;
 import org.argeo.osgi.transaction.SimpleTransactionManager;
 import org.argeo.osgi.transaction.WorkControl;
 import org.argeo.osgi.transaction.WorkTransaction;
+import org.argeo.osgi.useradmin.UserDirectory;
 import org.argeo.util.register.Component;
 import org.argeo.util.register.SimpleRegister;
 import org.osgi.service.useradmin.UserAdmin;
@@ -77,7 +81,6 @@ public class StaticCms {
 
                // User Admin
                CmsUserAdmin userAdmin = new CmsUserAdmin();
-
                Component<CmsUserAdmin> userAdminC = new Component.Builder<>(userAdmin) //
                                .addType(UserAdmin.class) //
                                .addDependency(transactionManagerC.getType(WorkControl.class), userAdmin::setTransactionManager, null) //
@@ -88,6 +91,19 @@ public class StaticCms {
                                }, null) //
                                .build(register);
 
+               // User manager
+               CmsUserManagerImpl userManager = new CmsUserManagerImpl();
+               for (UserDirectory userDirectory : userAdmin.getUserDirectories()) {
+                       // FIXME deal with properties
+                       userManager.addUserDirectory(userDirectory, new HashMap<>());
+               }
+               Component<CmsUserManagerImpl> userManagerC = new Component.Builder<>(userManager) //
+                               .addType(CmsUserManager.class) //
+                               .addDependency(userAdminC.getType(UserAdmin.class), userManager::setUserAdmin, null) //
+                               .addDependency(transactionManagerC.getType(WorkTransaction.class), userManager::setUserTransaction,
+                                               null) //
+                               .build(register);
+
                // Content Repository
                DeployedContentRepository contentRepository = new DeployedContentRepository();
                Component<DeployedContentRepository> contentRepositoryC = new Component.Builder<>(contentRepository) //
@@ -97,6 +113,7 @@ public class StaticCms {
                                .addDeactivation(contentRepository::stop) //
                                .addDependency(cmsStateC.getType(CmsState.class), contentRepository::setCmsState, null) //
                                .addDependency(uuidFactoryC.getType(UuidFactory.class), contentRepository::setUuidFactory, null) //
+                               .addDependency(userManagerC.getType(CmsUserManager.class), contentRepository::setUserManager, null) //
                                .build(register);
 
                // CMS Context