1 package org
.argeo
.cms
.swt
.rap
.cli
;
3 import java
.io
.IOException
;
4 import java
.lang
.management
.ManagementFactory
;
5 import java
.nio
.file
.Path
;
6 import java
.nio
.file
.Paths
;
9 import org
.apache
.commons
.cli
.CommandLine
;
10 import org
.apache
.commons
.cli
.Option
;
11 import org
.apache
.commons
.cli
.Options
;
12 import org
.argeo
.api
.acr
.spi
.ProvidedRepository
;
13 import org
.argeo
.api
.cli
.CommandsCli
;
14 import org
.argeo
.api
.cli
.DescribedCommand
;
15 import org
.argeo
.api
.cms
.CmsApp
;
16 import org
.argeo
.api
.cms
.CmsContext
;
17 import org
.argeo
.api
.cms
.CmsState
;
18 import org
.argeo
.cms
.jetty
.CmsJettyServer
;
19 import org
.argeo
.cms
.runtime
.StaticCms
;
20 import org
.argeo
.cms
.swt
.app
.CmsUserApp
;
21 import org
.argeo
.cms
.web
.CmsWebApp
;
22 import org
.argeo
.util
.register
.Component
;
23 import org
.argeo
.util
.register
.ComponentRegister
;
24 import org
.eclipse
.rap
.rwt
.application
.ApplicationConfiguration
;
26 public class CmsRapCli
extends CommandsCli
{
28 public CmsRapCli(String commandName
) {
30 addCommand("user", new Launch());
34 public String
getDescription() {
35 return "Argeo CMS utilities.";
38 public static void main(String
[] args
) {
39 mainImpl(new CmsRapCli("web"), args
);
42 static class Launch
implements DescribedCommand
<String
> {
43 private Option dataOption
;
44 private Option uiOption
;
47 public Options
getOptions() {
48 Options options
= new Options();
49 dataOption
= Option
.builder().longOpt("data").hasArg().required()
50 .desc("path to the writable data area (mandatory)").build();
51 uiOption
= Option
.builder().longOpt("ui").desc("open a user interface").build();
52 options
.addOption(dataOption
);
53 options
.addOption(uiOption
);
58 public String
apply(List
<String
> args
) {
59 CommandLine cl
= toCommandLine(args
);
60 String dataPath
= cl
.getOptionValue(dataOption
);
61 boolean ui
= cl
.hasOption(uiOption
);
63 Path instancePath
= Paths
.get(dataPath
);
64 System
.setProperty("osgi.instance.area", instancePath
.toUri().toString());
65 System
.setProperty("argeo.http.port", "0");
67 StaticCms staticCms
= new StaticCms() {
69 protected void addComponents(ComponentRegister register
) {
71 CmsUserApp cmsApp
= new CmsUserApp();
72 Component
<CmsUserApp
> cmsAppC
= new Component
.Builder
<>(cmsApp
) //
73 .addType(CmsApp
.class) //
74 .addType(CmsUserApp
.class) //
75 .addDependency(register
.getSingleton(CmsContext
.class), cmsApp
::setCmsContext
, null) //
76 .addDependency(register
.getSingleton(ProvidedRepository
.class),
77 cmsApp
::setContentRepository
, null) //
80 CmsWebApp cmsWebApp
= new CmsWebApp();
81 Component
<CmsWebApp
> cmsWebAppC
= new Component
.Builder
<>(cmsWebApp
) //
82 .addType(ApplicationConfiguration
.class) //
83 .addType(CmsWebApp
.class) //
84 .addDependency(cmsAppC
.getType(CmsApp
.class), cmsWebApp
::setCmsApp
, null) //
87 RapJettyServer rwtRunner
= new RapJettyServer();
88 Component
<RapJettyServer
> rwtRunnerC
= new Component
.Builder
<>(rwtRunner
) //
89 .addActivation(rwtRunner
::start
) //
90 .addDeactivation(rwtRunner
::stop
) //
91 .addType(CmsJettyServer
.class) //
92 .addDependency(register
.getSingleton(CmsState
.class), rwtRunner
::setCmsState
, null) //
93 .addDependency(cmsWebAppC
.getType(CmsWebApp
.class), rwtRunner
::setCmsWebApp
, null) //
99 Runtime
.getRuntime().addShutdownHook(new Thread(() -> staticCms
.stop(), "Static CMS Shutdown"));
102 long jvmUptime
= ManagementFactory
.getRuntimeMXBean().getUptime();
103 System
.out
.println("Static CMS available in " + jvmUptime
+ " ms.");
107 // open browser in app mode
108 Thread
.sleep(2000);// wait for RWT to be ready
109 String browserCommand
= "google-chrome --app=http://localhost:"
110 + staticCms
.getComponentRegister().getObject(CmsJettyServer
.class).getHttpPort() + "/data";
111 Runtime
.getRuntime().exec(browserCommand
);
112 } catch (InterruptedException
| IOException e
) {
117 staticCms
.waitForStop();
123 public String
getDescription() {
124 return "Launch a static CMS.";