Make CmsUserManager an API.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / runtime / StaticCms.java
index 5df9e31dd9297a785217f6cf226773f258abb1a3..76775fed8060f912bed6a725df629113fc8f211e 100644 (file)
@@ -2,58 +2,53 @@ package org.argeo.cms.runtime;
 
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.Dictionary;
 import java.util.concurrent.CompletableFuture;
 
+import org.argeo.api.acr.ContentRepository;
+import org.argeo.api.acr.spi.ProvidedRepository;
 import org.argeo.api.cms.CmsContext;
 import org.argeo.api.cms.CmsDeployment;
 import org.argeo.api.cms.CmsState;
-import org.argeo.cms.internal.osgi.DeployConfig;
+import org.argeo.api.cms.directory.CmsUserManager;
+import org.argeo.api.cms.transaction.SimpleTransactionManager;
+import org.argeo.api.cms.transaction.WorkControl;
+import org.argeo.api.cms.transaction.WorkTransaction;
+import org.argeo.api.register.Component;
+import org.argeo.api.register.ComponentRegister;
+import org.argeo.api.register.SimpleRegister;
+import org.argeo.api.uuid.UuidFactory;
+import org.argeo.cms.acr.CmsUuidFactory;
 import org.argeo.cms.internal.runtime.CmsContextImpl;
 import org.argeo.cms.internal.runtime.CmsDeploymentImpl;
 import org.argeo.cms.internal.runtime.CmsStateImpl;
 import org.argeo.cms.internal.runtime.CmsUserAdmin;
-import org.argeo.osgi.transaction.SimpleTransactionManager;
-import org.argeo.osgi.transaction.WorkControl;
-import org.argeo.osgi.transaction.WorkTransaction;
-import org.argeo.util.register.Component;
-import org.argeo.util.register.SimpleRegister;
+import org.argeo.cms.internal.runtime.CmsUserManagerImpl;
+import org.argeo.cms.internal.runtime.DeployedContentRepository;
 import org.osgi.service.useradmin.UserAdmin;
 
 /**
- * A CMS assembly which is programatically defined, as an alternative to OSGi
+ * A CMS assembly which is programmatically defined, as an alternative to OSGi
  * deployment. Useful for testing or AOT compilation.
  */
 public class StaticCms {
-       private static SimpleRegister register = new SimpleRegister();
+       private SimpleRegister register = new SimpleRegister();
 
        private CompletableFuture<Void> stopped = new CompletableFuture<Void>();
 
        public void start() {
+               // UID factory
+               CmsUuidFactory uuidFactory = new CmsUuidFactory();
+               Component<CmsUuidFactory> uuidFactoryC = new Component.Builder<>(uuidFactory) //
+                               .addType(UuidFactory.class) //
+                               .build(register);
+
                // CMS State
                CmsStateImpl cmsState = new CmsStateImpl();
                Component<CmsStateImpl> cmsStateC = new Component.Builder<>(cmsState) //
                                .addType(CmsState.class) //
                                .addActivation(cmsState::start) //
                                .addDeactivation(cmsState::stop) //
-                               .build(register);
-
-               // Deployment Configuration
-               DeployConfig deployConfig = new DeployConfig();
-               Component<DeployConfig> deployConfigC = new Component.Builder<>(deployConfig) //
-                               .addType(DeployConfig.class) //
-                               .addActivation(deployConfig::start) //
-                               .addDeactivation(deployConfig::stop) //
-                               .build(register);
-
-               // CMS Deployment
-               CmsDeploymentImpl cmsDeployment = new CmsDeploymentImpl();
-               Component<CmsDeploymentImpl> cmsDeploymentC = new Component.Builder<>(cmsDeployment) //
-                               .addType(CmsDeployment.class) //
-                               .addActivation(cmsDeployment::start) //
-                               .addDeactivation(cmsDeployment::stop) //
-                               .addDependency(cmsStateC.getType(CmsState.class), cmsDeployment::setCmsState, null) //
-                               .addDependency(deployConfigC.getType(DeployConfig.class), cmsDeployment::setDeployConfig, null) //
+                               .addDependency(uuidFactoryC.getType(UuidFactory.class), cmsState::setUuidFactory, null) //
                                .build(register);
 
                // Transaction manager
@@ -65,15 +60,50 @@ public class StaticCms {
 
                // User Admin
                CmsUserAdmin userAdmin = new CmsUserAdmin();
-
                Component<CmsUserAdmin> userAdminC = new Component.Builder<>(userAdmin) //
                                .addType(UserAdmin.class) //
+                               .addActivation(userAdmin::start) //
+                               .addDeactivation(userAdmin::stop) //
+                               .addDependency(cmsStateC.getType(CmsState.class), userAdmin::setCmsState, null) //
                                .addDependency(transactionManagerC.getType(WorkControl.class), userAdmin::setTransactionManager, null) //
                                .addDependency(transactionManagerC.getType(WorkTransaction.class), userAdmin::setUserTransaction, null) //
-                               .addDependency(deployConfigC.getType(DeployConfig.class), (d) -> {
-                                       for (Dictionary<String, Object> userDirectoryConfig : d.getUserDirectoryConfigs())
-                                               userAdmin.enableUserDirectory(userDirectoryConfig);
-                               }, 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) //
+                               .addActivation(userManager::start) //
+                               .addDeactivation(userManager::stop) //
+                               .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) //
+                               .addType(ProvidedRepository.class) //
+                               .addType(ContentRepository.class) //
+                               .addActivation(contentRepository::start) //
+                               .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 Deployment
+               CmsDeploymentImpl cmsDeployment = new CmsDeploymentImpl();
+               Component<CmsDeploymentImpl> cmsDeploymentC = new Component.Builder<>(cmsDeployment) //
+                               .addType(CmsDeployment.class) //
+                               .addActivation(cmsDeployment::start) //
+                               .addDeactivation(cmsDeployment::stop) //
+                               .addDependency(cmsStateC.getType(CmsState.class), cmsDeployment::setCmsState, null) //
+//                             .addDependency(deployConfigC.getType(DeployConfig.class), cmsDeployment::setDeployConfig, null) //
                                .build(register);
 
                // CMS Context
@@ -85,10 +115,29 @@ public class StaticCms {
                                .addDependency(cmsStateC.getType(CmsState.class), cmsContext::setCmsState, null) //
                                .addDependency(cmsDeploymentC.getType(CmsDeployment.class), cmsContext::setCmsDeployment, null) //
                                .addDependency(userAdminC.getType(UserAdmin.class), cmsContext::setUserAdmin, null) //
+                               .addDependency(uuidFactoryC.getType(UuidFactory.class), cmsContext::setUuidFactory, null) //
+//                             .addDependency(contentRepositoryC.getType(ProvidedRepository.class), cmsContext::setContentRepository,
+//                                             null) //
                                .build(register);
                assert cmsContextC.get() == cmsContext;
 
+               addComponents(register);
+
                register.activate();
+
+               postActivation(register);
+       }
+
+       protected void addComponents(ComponentRegister register) {
+
+       }
+
+       protected void postActivation(ComponentRegister register) {
+
+       }
+
+       public ComponentRegister getComponentRegister() {
+               return register;
        }
 
        public void stop() {