1 package org
.argeo
.cms
.runtime
;
3 import java
.util
.Dictionary
;
5 import org
.argeo
.api
.cms
.CmsContext
;
6 import org
.argeo
.api
.cms
.CmsDeployment
;
7 import org
.argeo
.api
.cms
.CmsState
;
8 import org
.argeo
.cms
.internal
.osgi
.DeployConfig
;
9 import org
.argeo
.cms
.internal
.runtime
.CmsContextImpl
;
10 import org
.argeo
.cms
.internal
.runtime
.CmsDeploymentImpl
;
11 import org
.argeo
.cms
.internal
.runtime
.CmsStateImpl
;
12 import org
.argeo
.cms
.internal
.runtime
.CmsUserAdmin
;
13 import org
.argeo
.osgi
.transaction
.SimpleTransactionManager
;
14 import org
.argeo
.osgi
.transaction
.WorkControl
;
15 import org
.argeo
.osgi
.transaction
.WorkTransaction
;
16 import org
.argeo
.util
.register
.Component
;
17 import org
.argeo
.util
.register
.ComponentRegister
;
18 import org
.argeo
.util
.register
.StaticRegister
;
19 import org
.osgi
.service
.useradmin
.UserAdmin
;
22 * A CMS assembly which is programatically defined, as an alternative to OSGi
23 * deployment. Useful for testing or AOT compilation.
25 public class StaticCms
{
28 ComponentRegister register
= StaticRegister
.getInstance();
31 CmsStateImpl cmsState
= new CmsStateImpl();
32 Component
<CmsStateImpl
> cmsStateC
= new Component
.Builder
<>(cmsState
) //
33 .addType(CmsState
.class) //
34 .addActivation(cmsState
::start
) //
35 .addDeactivation(cmsState
::stop
) //
38 // Deployment Configuration
39 DeployConfig deployConfig
= new DeployConfig();
40 Component
<DeployConfig
> deployConfigC
= new Component
.Builder
<>(deployConfig
) //
41 .addType(DeployConfig
.class) //
42 .addActivation(deployConfig
::start
) //
43 .addDeactivation(deployConfig
::stop
) //
47 CmsDeploymentImpl cmsDeployment
= new CmsDeploymentImpl();
48 Component
<CmsDeploymentImpl
> cmsDeploymentC
= new Component
.Builder
<>(cmsDeployment
) //
49 .addType(CmsDeployment
.class) //
50 .addActivation(cmsDeployment
::start
) //
51 .addDeactivation(cmsDeployment
::stop
) //
52 .addDependency(cmsStateC
.getType(CmsState
.class), cmsDeployment
::setCmsState
, null) //
53 .addDependency(deployConfigC
.getType(DeployConfig
.class), cmsDeployment
::setDeployConfig
, null) //
56 // Transaction manager
57 SimpleTransactionManager transactionManager
= new SimpleTransactionManager();
58 Component
<SimpleTransactionManager
> transactionManagerC
= new Component
.Builder
<>(transactionManager
) //
59 .addType(WorkControl
.class) //
60 .addType(WorkTransaction
.class) //
64 CmsUserAdmin userAdmin
= new CmsUserAdmin();
66 Component
<CmsUserAdmin
> userAdminC
= new Component
.Builder
<>(userAdmin
) //
67 .addType(UserAdmin
.class) //
68 .addDependency(transactionManagerC
.getType(WorkControl
.class), userAdmin
::setTransactionManager
, null) //
69 .addDependency(transactionManagerC
.getType(WorkTransaction
.class), userAdmin
::setUserTransaction
, null) //
70 .addDependency(deployConfigC
.getType(DeployConfig
.class), (d
) -> {
71 for (Dictionary
<String
, Object
> userDirectoryConfig
: d
.getUserDirectoryConfigs())
72 userAdmin
.enableUserDirectory(userDirectoryConfig
);
77 CmsContextImpl cmsContext
= new CmsContextImpl();
78 Component
<CmsContextImpl
> cmsContextC
= new Component
.Builder
<>(cmsContext
) //
79 .addType(CmsContext
.class) //
80 .addActivation(cmsContext
::start
) //
81 .addDeactivation(cmsContext
::stop
) //
82 .addDependency(cmsStateC
.getType(CmsState
.class), cmsContext
::setCmsState
, null) //
83 .addDependency(cmsDeploymentC
.getType(CmsDeployment
.class), cmsContext
::setCmsDeployment
, null) //
84 .addDependency(userAdminC
.getType(UserAdmin
.class), cmsContext
::setUserAdmin
, null) //
86 assert cmsContextC
.getInstance() == cmsContext
;
92 if (StaticRegister
.getInstance().isActive())
93 StaticRegister
.getInstance().deactivate();
96 public static void main(String
[] args
) {
97 StaticCms staticCms
= new StaticCms();
98 Runtime
.getRuntime().addShutdownHook(new Thread(() -> staticCms
.stop(), "Static CMS Shutdown"));