X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fruntime%2FStaticCms.java;h=0034e3f7b1a0ef60930a9316d3257931f32d1afe;hb=54df376a9c2dd458a82eaa09bfbb718fe699dd0d;hp=5df9e31dd9297a785217f6cf226773f258abb1a3;hpb=254549b06c6ff14e82d97e8a9fd16946685554d6;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/runtime/StaticCms.java b/org.argeo.cms/src/org/argeo/cms/runtime/StaticCms.java index 5df9e31dd..0034e3f7b 100644 --- a/org.argeo.cms/src/org/argeo/cms/runtime/StaticCms.java +++ b/org.argeo.cms/src/org/argeo/cms/runtime/StaticCms.java @@ -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.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.CmsUserManager; +import org.argeo.cms.acr.CmsUuidFactory; +import org.argeo.cms.internal.auth.CmsUserManagerImpl; 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.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 stopped = new CompletableFuture(); public void start() { + // UID factory + CmsUuidFactory uuidFactory = new CmsUuidFactory(); + Component uuidFactoryC = new Component.Builder<>(uuidFactory) // + .addType(UuidFactory.class) // + .build(register); + // CMS State CmsStateImpl cmsState = new CmsStateImpl(); Component cmsStateC = new Component.Builder<>(cmsState) // .addType(CmsState.class) // .addActivation(cmsState::start) // .addDeactivation(cmsState::stop) // - .build(register); - - // Deployment Configuration - DeployConfig deployConfig = new DeployConfig(); - Component deployConfigC = new Component.Builder<>(deployConfig) // - .addType(DeployConfig.class) // - .addActivation(deployConfig::start) // - .addDeactivation(deployConfig::stop) // - .build(register); - - // CMS Deployment - CmsDeploymentImpl cmsDeployment = new CmsDeploymentImpl(); - Component 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 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 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 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 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 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() {