X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fruntime%2FStaticCms.java;h=e4087e13903ee00f707ea5ec159f9f5335c86b37;hb=da9d144b6b241e1526a3bd255dff905a7969a5bc;hp=5ffff1d0e3a1757d2e6a36b5b28fe4aa8baedad4;hpb=b843d903237a2a4192c40d8c933e71137284050b;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 5ffff1d0e..e4087e139 100644 --- a/org.argeo.cms/src/org/argeo/cms/runtime/StaticCms.java +++ b/org.argeo.cms/src/org/argeo/cms/runtime/StaticCms.java @@ -1,21 +1,28 @@ 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.api.uuid.UuidFactory; +import org.argeo.cms.acr.CmsUuidFactory; import org.argeo.cms.internal.osgi.DeployConfig; 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.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.util.register.Component; -import org.argeo.util.register.ComponentRegister; -import org.argeo.util.register.StaticRegister; +import org.argeo.util.register.SimpleRegister; import org.osgi.service.useradmin.UserAdmin; /** @@ -23,9 +30,16 @@ import org.osgi.service.useradmin.UserAdmin; * deployment. Useful for testing or AOT compilation. */ public class StaticCms { + private static SimpleRegister register = new SimpleRegister(); + + private CompletableFuture stopped = new CompletableFuture(); public void start() { - ComponentRegister register = StaticRegister.getInstance(); + // UID factory + CmsUuidFactory uuidFactory = new CmsUuidFactory(); + Component uuidFactoryC = new Component.Builder<>(uuidFactory) // + .addType(UuidFactory.class) // + .build(register); // CMS State CmsStateImpl cmsState = new CmsStateImpl(); @@ -33,6 +47,7 @@ public class StaticCms { .addType(CmsState.class) // .addActivation(cmsState::start) // .addDeactivation(cmsState::stop) // + .addDependency(uuidFactoryC.getType(UuidFactory.class), cmsState::setUuidFactory, null) // .build(register); // Deployment Configuration @@ -73,6 +88,17 @@ public class StaticCms { }, 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) // + .build(register); + // CMS Context CmsContextImpl cmsContext = new CmsContextImpl(); Component cmsContextC = new Component.Builder<>(cmsContext) // @@ -82,22 +108,39 @@ 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.getInstance() == cmsContext; + assert cmsContextC.get() == cmsContext; register.activate(); } public void stop() { - if (StaticRegister.getInstance().isActive()) - StaticRegister.getInstance().deactivate(); + if (register.isActive()) { + register.deactivate(); + } + register.clear(); + stopped.complete(null); + } + + public void waitForStop() { + stopped.join(); } public static void main(String[] args) { + if (args.length == 0) { + System.err.println("Usage: "); + System.exit(1); + } + Path instancePath = Paths.get(args[0]); + System.setProperty("osgi.instance.area", instancePath.toUri().toString()); + StaticCms staticCms = new StaticCms(); Runtime.getRuntime().addShutdownHook(new Thread(() -> staticCms.stop(), "Static CMS Shutdown")); staticCms.start(); - + staticCms.waitForStop(); } }