org.argeo.slc.factory \
org.argeo.slc.runtime \
cms/org.argeo.slc.cms \
+suite/org.argeo.slc.tool \
-VPATH = .:cms
+VPATH = .:cms:suite
clean:
rm -rf $(BUILD_BASE)
org.argeo.tp.sdk \
org.argeo.tp.apache \
org.argeo.tp.jetty \
-org.argeo.tp.eclipse.equinox \
-org.argeo.tp.eclipse.rap \
+org.argeo.tp.eclipse \
+osgi/api/org.argeo.tp.osgi \
+swt/rcp/org.argeo.tp.swt \
+lib/linux/x86_64/swt/rcp/org.argeo.tp.swt \
+swt/rcp/org.argeo.tp.swt.workbench \
org.argeo.tp.jcr \
org.argeo.tp.formats \
org.argeo.tp.gis \
org.argeo.cms \
+org.argeo.cms.eclipse.rcp \
+
+A2_BUNDLES_CLASSPATH = $(subst $(space),$(pathsep),$(strip $(A2_BUNDLES)))
+
+native-image:
+ mkdir -p $(A2_OUTPUT)/libexec/$(A2_CATEGORY)
+ cd $(A2_OUTPUT)/libexec/$(A2_CATEGORY) && /opt/graalvm-ce/bin/native-image \
+ -cp $(A2_CLASSPATH):$(A2_BUNDLES_CLASSPATH) org.argeo.slc.tool.Main \
+ --enable-url-protocols=http,https -H:AdditionalSecurityProviders=sun.security.jgss.SunProvider \
+ --initialize-at-build-time=org.argeo.init.logging.ThinLogging,org.slf4j.LoggerFactory \
+ --no-fallback
+
include $(SDK_SRC_BASE)/sdk/argeo-build/osgi.mk
\ No newline at end of file
Import-Package: \
org.apache.commons.logging,\
-org.osgi.*;version=0.0.0§,\
+org.osgi.*;version="0.0.0",\
*
\ No newline at end of file
+++ /dev/null
-package org.argeo.slc.cli;
-
-import org.apache.commons.cli.Option;
-import org.argeo.cms.cli.CommandsCli;
-import org.argeo.slc.cli.posix.PosixCommands;
-
-/** Argeo command line tools. */
-public class ArgeoCli extends CommandsCli {
-
- public ArgeoCli(String commandName) {
- super(commandName);
- // Common options
- options.addOption(Option.builder("v").hasArg().argName("verbose").desc("verbosity").build());
- options.addOption(
- Option.builder("D").hasArgs().argName("property=value").desc("use value for given property").build());
-
- addCommandsCli(new PosixCommands("posix"));
-// addCommandsCli(new FsCommands("fs"));
-// addCommandsCli(new JcrCommands("jcr"));
- }
-
- @Override
- public String getDescription() {
- return "Argeo command line utilities";
- }
-
- public static void main(String[] args) {
- mainImpl(new ArgeoCli("argeo"), args);
- }
-
-}
continue entries;
if (entry.getName().startsWith("META-INF/versions/")) // skip multi-version
continue entries;
+ // skip file system providers as they cause issues with native image
+ if (entry.getName().startsWith("META-INF/services/java.nio.file.spi.FileSystemProvider"))
+ continue entries;
if (entry.getName().startsWith("OSGI-OPT/src/")) // skip embedded sources
continue entries;
Path target = targetBundleDir.resolve(entry.getName());
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.argeo.slc.tool</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
--- /dev/null
+[
+{
+ "name":"com.sun.security.auth.module.UnixSystem",
+ "fields":[
+ {"name":"gid"},
+ {"name":"groups"},
+ {"name":"uid"},
+ {"name":"username"}
+ ]
+},
+{
+ "name":"java.lang.Boolean",
+ "methods":[{"name":"getBoolean","parameterTypes":["java.lang.String"] }]
+},
+{
+ "name":"java.lang.ClassLoader",
+ "methods":[
+ {"name":"getPlatformClassLoader","parameterTypes":[] },
+ {"name":"loadClass","parameterTypes":["java.lang.String"] }
+ ]
+},
+{
+ "name":"java.lang.Throwable",
+ "methods":[{"name":"addSuppressed","parameterTypes":["java.lang.Throwable"] }]
+},
+{
+ "name":"jdk.internal.loader.ClassLoaders$PlatformClassLoader"
+},
+{
+ "name":"org.eclipse.swt.browser.WebKit",
+ "methods":[
+ {"name":"JSDOMEventProc","parameterTypes":["long","long","long"] },
+ {"name":"Proc","parameterTypes":["long","long"] },
+ {"name":"Proc","parameterTypes":["long","long","long"] },
+ {"name":"Proc","parameterTypes":["long","long","long","long"] },
+ {"name":"Proc","parameterTypes":["long","long","long","long","long"] }
+ ]
+},
+{
+ "name":"org.eclipse.swt.browser.WebKit$WebKitExtension",
+ "methods":[{"name":"initializeWebExtensions_callback","parameterTypes":["long","long"] }]
+},
+{
+ "name":"org.eclipse.swt.browser.WebKit$Webkit2AsyncToSync",
+ "methods":[
+ {"name":"getCookie_callback","parameterTypes":["long","long","long"] },
+ {"name":"getText_callback","parameterTypes":["long","long","long"] },
+ {"name":"runjavascript_callback","parameterTypes":["long","long","long"] },
+ {"name":"setCookie_callback","parameterTypes":["long","long","long"] }
+ ]
+},
+{
+ "name":"org.eclipse.swt.browser.WebkitGDBus",
+ "methods":[
+ {"name":"authenticatePeerCB","parameterTypes":["long","long","long","long"] },
+ {"name":"callExtensionAsyncCB","parameterTypes":["long","long","long"] },
+ {"name":"handleMethodCB","parameterTypes":["long","long","long","long","long","long","long","long"] },
+ {"name":"newConnectionCB","parameterTypes":["long","long","long"] },
+ {"name":"newConnectionToExtensionCB","parameterTypes":["long","long","long"] }
+ ]
+},
+{
+ "name":"org.eclipse.swt.graphics.Device",
+ "methods":[{"name":"logProc","parameterTypes":["long","long","long","long"] }]
+},
+{
+ "name":"org.eclipse.swt.internal.SessionManagerDBus",
+ "methods":[{"name":"g_signal_handler","parameterTypes":["long","long","long","long","long"] }]
+},
+{
+ "name":"org.eclipse.swt.internal.cairo.cairo_rectangle_int_t",
+ "fields":[
+ {"name":"height"},
+ {"name":"width"},
+ {"name":"x"},
+ {"name":"y"}
+ ]
+},
+{
+ "name":"org.eclipse.swt.internal.gtk.GTypeInfo",
+ "fields":[
+ {"name":"base_finalize"},
+ {"name":"base_init"},
+ {"name":"class_data"},
+ {"name":"class_finalize"},
+ {"name":"class_init"},
+ {"name":"class_size"},
+ {"name":"instance_init"},
+ {"name":"instance_size"},
+ {"name":"n_preallocs"},
+ {"name":"value_table"}
+ ]
+},
+{
+ "name":"org.eclipse.swt.internal.gtk.GdkKeymapKey",
+ "fields":[
+ {"name":"group"},
+ {"name":"keycode"},
+ {"name":"level"}
+ ]
+},
+{
+ "name":"org.eclipse.swt.internal.gtk.GdkRGBA",
+ "fields":[
+ {"name":"alpha"},
+ {"name":"blue"},
+ {"name":"green"},
+ {"name":"red"}
+ ]
+},
+{
+ "name":"org.eclipse.swt.internal.gtk.GdkRectangle",
+ "fields":[
+ {"name":"height"},
+ {"name":"width"},
+ {"name":"x"},
+ {"name":"y"}
+ ]
+},
+{
+ "name":"org.eclipse.swt.internal.gtk.GtkAllocation",
+ "fields":[
+ {"name":"height"},
+ {"name":"width"},
+ {"name":"x"},
+ {"name":"y"}
+ ]
+},
+{
+ "name":"org.eclipse.swt.internal.gtk.GtkBorder",
+ "fields":[
+ {"name":"bottom"},
+ {"name":"left"},
+ {"name":"right"},
+ {"name":"top"}
+ ]
+},
+{
+ "name":"org.eclipse.swt.internal.gtk.GtkRequisition",
+ "fields":[
+ {"name":"height"},
+ {"name":"width"}
+ ]
+},
+{
+ "name":"org.eclipse.swt.internal.gtk3.GdkEvent",
+ "fields":[{"name":"type"}]
+},
+{
+ "name":"org.eclipse.swt.internal.gtk3.GdkEventCrossing",
+ "fields":[
+ {"name":"detail"},
+ {"name":"focus"},
+ {"name":"mode"},
+ {"name":"send_event"},
+ {"name":"state"},
+ {"name":"subwindow"},
+ {"name":"time"},
+ {"name":"window"},
+ {"name":"x"},
+ {"name":"x_root"},
+ {"name":"y"},
+ {"name":"y_root"}
+ ]
+},
+{
+ "name":"org.eclipse.swt.internal.gtk3.GdkEventFocus",
+ "fields":[
+ {"name":"in"},
+ {"name":"send_event"},
+ {"name":"window"}
+ ]
+},
+{
+ "name":"org.eclipse.swt.internal.gtk3.GdkEventKey",
+ "fields":[
+ {"name":"window"},
+ {"name":"send_event"},
+ {"name":"time"},
+ {"name":"state"},
+ {"name":"keyval"},
+ {"name":"length"},
+ {"name":"string"},
+ {"name":"is_modifier"},
+ {"name":"hardware_keycode"},
+ {"name":"group"}
+ ]
+},
+{
+ "name":"org.eclipse.swt.internal.gtk3.GdkEventMotion",
+ "fields":[
+ {"name":"axes"},
+ {"name":"device"},
+ {"name":"is_hint"},
+ {"name":"send_event"},
+ {"name":"state"},
+ {"name":"time"},
+ {"name":"window"},
+ {"name":"x"},
+ {"name":"x_root"},
+ {"name":"y"},
+ {"name":"y_root"}
+ ]
+},
+{
+ "name":"org.eclipse.swt.internal.gtk3.GdkEventWindowState",
+ "fields":[
+ {"name":"changed_mask"},
+ {"name":"new_window_state"},
+ {"name":"send_event"},
+ {"name":"window"}
+ ]
+},
+{
+ "name":"org.eclipse.swt.widgets.Control",
+ "methods":[
+ {"name":"gestureBeginProc","parameterTypes":["long","long","long"] },
+ {"name":"gestureEndProc","parameterTypes":["long","long","long"] },
+ {"name":"magnifyProc","parameterTypes":["long","double","long"] },
+ {"name":"rotateProc","parameterTypes":["long","double","double","long"] },
+ {"name":"swipeProc","parameterTypes":["long","double","double","long"] }
+ ]
+},
+{
+ "name":"org.eclipse.swt.widgets.Display",
+ "methods":[
+ {"name":"allChildrenProc","parameterTypes":["long","long"] },
+ {"name":"caretProc","parameterTypes":["long"] },
+ {"name":"cellDataProc","parameterTypes":["long","long","long","long","long"] },
+ {"name":"changeValue","parameterTypes":["long","int","double","long"] },
+ {"name":"checkIfEventProc","parameterTypes":["long","long","long"] },
+ {"name":"emissionProc","parameterTypes":["long","long","long","long"] },
+ {"name":"eventProc","parameterTypes":["long","long"] },
+ {"name":"idleProc","parameterTypes":["long"] },
+ {"name":"keysChangedProc","parameterTypes":["long","long"] },
+ {"name":"mouseHoverProc","parameterTypes":["long"] },
+ {"name":"notifyProc","parameterTypes":["long","long","long"] },
+ {"name":"rendererClassInitProc","parameterTypes":["long","long"] },
+ {"name":"rendererGetPreferredWidthProc","parameterTypes":["long","long","long","long"] },
+ {"name":"rendererRenderProc","parameterTypes":["long","long","long","long","long","long"] },
+ {"name":"setDirectionProc","parameterTypes":["long","long"] },
+ {"name":"shellMapProc","parameterTypes":["long","long","long"] },
+ {"name":"signalProc","parameterTypes":["long","long","long"] },
+ {"name":"sizeAllocateProc","parameterTypes":["long","long","long"] },
+ {"name":"sizeRequestProc","parameterTypes":["long","long","long"] },
+ {"name":"timerProc","parameterTypes":["long"] },
+ {"name":"windowProc","parameterTypes":["long","long"] },
+ {"name":"windowProc","parameterTypes":["long","long","long"] },
+ {"name":"windowProc","parameterTypes":["long","long","long","long"] },
+ {"name":"windowProc","parameterTypes":["long","long","long","long","long"] },
+ {"name":"windowTimerProc","parameterTypes":["long"] }
+ ]
+},
+{
+ "name":"org.eclipse.swt.widgets.ToolBar",
+ "methods":[{"name":"MenuItemSelectedProc","parameterTypes":["long","long"] }]
+},
+{
+ "name":"org.graalvm.jniutils.JNIExceptionWrapperEntryPoints",
+ "methods":[{"name":"getClassName","parameterTypes":["java.lang.Class"] }]
+},
+{
+ "name":"sun.management.VMManagementImpl",
+ "fields":[
+ {"name":"compTimeMonitoringSupport"},
+ {"name":"currentThreadCpuTimeSupport"},
+ {"name":"objectMonitorUsageSupport"},
+ {"name":"otherThreadCpuTimeSupport"},
+ {"name":"remoteDiagnosticCommandsSupport"},
+ {"name":"synchronizerUsageSupport"},
+ {"name":"threadAllocatedMemorySupport"},
+ {"name":"threadContentionMonitoringSupport"}
+ ]
+}
+]
--- /dev/null
+[
+ {
+ "type":"agent-extracted",
+ "classes":[
+ ]
+ }
+]
+
--- /dev/null
+[
+{
+ "name":"[B"
+},
+{
+ "name":"[Ljava.lang.String;"
+},
+{
+ "name":"[Lsun.security.pkcs.SignerInfo;"
+},
+{
+ "name":"com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"java.lang.String"
+},
+{
+ "name":"java.security.SecureRandomParameters"
+},
+{
+ "name":"java.util.Date"
+},
+{
+ "name":"javax.security.auth.login.Configuration$Parameters"
+},
+{
+ "name":"javax.security.auth.x500.X500Principal",
+ "fields":[{"name":"thisX500Name"}],
+ "queriedMethods":[{"name":"<init>","parameterTypes":["sun.security.x509.X500Name"] }]
+},
+{
+ "name":"org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.xerces.impl.dv.dtd.XML11DTDDVFactoryImpl",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.xerces.impl.dv.xs.ExtendedSchemaDVFactoryImpl",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.xerces.impl.dv.xs.SchemaDVFactoryImpl",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.xerces.impl.xs.XSMessageFormatter",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.xerces.parsers.XIncludeAwareParserConfiguration",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.argeo.cms.auth.DataAdminLoginModule",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.argeo.cms.auth.SingleUserLoginModule",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.eclipse.swt.widgets.Display"
+},
+{
+ "name":"sun.security.provider.ConfigFile$Spi",
+ "methods":[{"name":"<init>","parameterTypes":["javax.security.auth.login.Configuration$Parameters"] }]
+},
+{
+ "name":"sun.security.provider.DRBG",
+ "methods":[{"name":"<init>","parameterTypes":["java.security.SecureRandomParameters"] }]
+},
+{
+ "name":"sun.security.provider.NativePRNG",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.SHA",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.SHA2$SHA256",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.util.ObjectIdentifier"
+},
+{
+ "name":"sun.security.x509.CertificateExtensions"
+}
+]
--- /dev/null
+{
+ "resources":{
+ "includes":[
+ {
+ "pattern":"\\QMETA-INF/services/java.lang.System$LoggerFinder\\E"
+ },
+ {
+ "pattern":"\\QMETA-INF/services/javax.xml.validation.SchemaFactory\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/cms/acr/schemas/DSMLv2.xsd\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/cms/acr/schemas/SVG.xsd\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/cms/acr/schemas/XForms-11-Schema.xsd\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/cms/acr/schemas/XMLSchema.dtd\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/cms/acr/schemas/XMLSchema.xsd\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/cms/acr/schemas/cr.xsd\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/cms/acr/schemas/datatypes.dtd\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/cms/acr/schemas/docbook.xsd\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/cms/acr/schemas/schema-for-xslt20.xsd\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/cms/acr/schemas/xlink.xsd\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/cms/acr/schemas/xml-events-attribs-1.xsd\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/cms/acr/schemas/xml.xsd\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/cms/internal/runtime/jaas.cfg\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/minidesktop/cheatsheet_obj@2x.png\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/minidesktop/console_view@2x.png\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/minidesktop/delete@2x.png\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/minidesktop/external_browser@2x.png\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/minidesktop/file_obj@2x.png\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/minidesktop/fldr_obj@2x.png\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/minidesktop/nav_home@2x.png\\E"
+ },
+ {
+ "pattern":"\\Qorg/argeo/osgi/useradmin/jaas-os.cfg\\E"
+ },
+ {
+ "pattern":"\\Qorg/eclipse/swt/internal/gtk/swt_functional_gtk_3_20.css\\E"
+ },
+ {
+ "pattern":"\\Qorg/eclipse/swt/internal/gtk/swt_theming_fixes_gtk_3_20.css\\E"
+ },
+ {
+ "pattern":"\\Qorg/eclipse/swt/internal/gtk/swt_theming_fixes_gtk_3_24_5.css\\E"
+ }
+ ]},
+ "bundles":[
+ {
+ "name":"org.apache.xerces.impl.msg.XMLSchemaMessages",
+ "locales":[
+ "en",
+ "und"
+ ]
+ },
+ {
+ "name":"org.apache.xerces.impl.xpath.regex.message",
+ "locales":[
+ "en",
+ "und"
+ ]
+ },
+ {
+ "name":"org.eclipse.swt.internal.SWTMessages",
+ "locales":[""]
+ },
+ {
+ "name":"sun.security.util.Resources",
+ "classNames":["sun.security.util.Resources"]
+ }
+ ]
+}
--- /dev/null
+{
+ "types":[
+ ],
+ "lambdaCapturingTypes":[
+ ]
+}
--- /dev/null
+Main-Class: org.argeo.slc.tool.Main
--- /dev/null
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
--- /dev/null
+package org.argeo.slc.tool;
+
+import java.lang.management.ManagementFactory;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.concurrent.ForkJoinPool;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.argeo.api.acr.spi.ProvidedRepository;
+import org.argeo.api.cms.CmsApp;
+import org.argeo.cms.cli.CommandsCli;
+import org.argeo.cms.cli.DescribedCommand;
+import org.argeo.cms.runtime.StaticCms;
+import org.argeo.cms.swt.app.CmsUserApp;
+import org.argeo.cms.ui.rcp.CmsRcpDisplayFactory;
+import org.argeo.util.register.Component;
+import org.argeo.util.register.SimpleRegister;
+
+public class CmsCli extends CommandsCli {
+
+ public CmsCli(String commandName) {
+ super(commandName);
+ addCommand("static", new Launch());
+ }
+
+ @Override
+ public String getDescription() {
+ return "Argeo CMS utilities.";
+ }
+
+ static class Launch implements DescribedCommand<String> {
+ private Option dataOption;
+ private Option uiOption;
+
+ @Override
+ public Options getOptions() {
+ Options options = new Options();
+ dataOption = Option.builder().longOpt("data").hasArg().required()
+ .desc("path to the writable data area (mandatory)").build();
+ uiOption = Option.builder().longOpt("ui").desc("open a user interface").build();
+ options.addOption(dataOption);
+ options.addOption(uiOption);
+ return options;
+ }
+
+ @Override
+ public String apply(List<String> args) {
+ CommandLine cl = toCommandLine(args);
+ String dataÜath = cl.getOptionValue(dataOption);
+ boolean ui = cl.hasOption(uiOption);
+
+ Path instancePath = Paths.get(dataÜath);
+ System.setProperty("osgi.instance.area", instancePath.toUri().toString());
+
+ StaticCms staticCms = new StaticCms() {
+ @Override
+ protected void addComponents(SimpleRegister register) {
+ if (ui) {
+ Component<? extends ProvidedRepository> contentRepositoryC = register
+ .find(ProvidedRepository.class, null).first();
+ CmsUserApp cmsApp = new CmsUserApp();
+ Component<CmsUserApp> cmsAppC = new Component.Builder<>(cmsApp) //
+ .addType(CmsApp.class) //
+ .addType(CmsUserApp.class) //
+ .addDependency(contentRepositoryC.getType(ProvidedRepository.class),
+ cmsApp::setContentRepository, null) //
+ .build(register);
+
+ CmsRcpDisplayFactory displayFactory = new CmsRcpDisplayFactory();
+ Component<CmsRcpDisplayFactory> displayFactoryC = new Component.Builder<>(displayFactory) //
+ .addActivation(displayFactory::init) //
+ .addDeactivation(displayFactory::destroy) //
+ .build(register);
+
+ }
+ }
+
+ @Override
+ protected void postActivation(SimpleRegister register) {
+ if (ui) {
+ Component<? extends CmsUserApp> cmsAppC = register.find(CmsUserApp.class, null).first();
+ CmsRcpDisplayFactory.openCmsApp(null, cmsAppC.get(), "data", (e) -> {
+ // asynchronous in order to avoid deadlock in UI thread
+ ForkJoinPool.commonPool().execute(() -> stop());
+ });
+ }
+ }
+
+ };
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> staticCms.stop(), "Static CMS Shutdown"));
+ staticCms.start();
+
+ long jvmUptime = ManagementFactory.getRuntimeMXBean().getUptime();
+ System.out.println("Static CMS available in " + jvmUptime + " ms.");
+
+ staticCms.waitForStop();
+
+ return null;
+ }
+
+ @Override
+ public String getDescription() {
+ return "Launch a static CMS.";
+ }
+
+ }
+}
--- /dev/null
+package org.argeo.slc.tool;
+
+import org.apache.commons.cli.Option;
+import org.argeo.cms.cli.CommandsCli;
+import org.argeo.slc.cli.posix.PosixCommands;
+import org.argeo.slc.tool.swt.MiniDesktopCli;
+
+/** Argeo command line tools. */
+public class Main extends CommandsCli {
+
+ public Main(String commandName) {
+ super(commandName);
+ // Common options
+ options.addOption(Option.builder("v").hasArg().argName("verbose").desc("verbosity").build());
+ options.addOption(
+ Option.builder("D").hasArgs().argName("property=value").desc("use value for given property").build());
+
+ addCommandsCli(new PosixCommands("posix"));
+ addCommandsCli(new CmsCli("cms"));
+ addCommandsCli(new MiniDesktopCli("minidesktop"));
+// addCommandsCli(new FsCommands("fs"));
+// addCommandsCli(new JcrCommands("jcr"));
+ }
+
+ @Override
+ public String getDescription() {
+ return "Argeo command line utilities";
+ }
+
+ public static void main(String[] args) {
+ mainImpl(new Main("argeo"), args);
+ }
+
+}
--- /dev/null
+package org.argeo.slc.tool.swt;
+
+import java.util.List;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.argeo.cms.cli.CommandsCli;
+import org.argeo.cms.cli.DescribedCommand;
+import org.argeo.minidesktop.MiniDesktopManager;
+
+public class MiniDesktopCli extends CommandsCli {
+
+ public MiniDesktopCli(String commandName) {
+ super(commandName);
+ addCommand("launch", new Launch());
+ }
+
+ @Override
+ public String getDescription() {
+ return "A minimalistic desktop manager based on Java and Eclipse SWT.";
+ }
+
+ public static void main(String[] args) {
+ mainImpl(new MiniDesktopCli("minidesktop"), args);
+ }
+
+ static class Launch implements DescribedCommand<String> {
+ @Override
+ public Options getOptions() {
+ Options options = new Options();
+ options.addOption(Option.builder().longOpt("fullscreen")
+ .desc("take control of the whole screen (default is to run in a window)").build());
+ options.addOption(Option.builder().longOpt("stacking")
+ .desc("open apps as tabs (default is to create new windows)").build());
+ return options;
+ }
+
+ @Override
+ public String apply(List<String> args) {
+ CommandLine cl = toCommandLine(args);
+ boolean fullscreen = cl.hasOption("fullscreen");
+ boolean stacking = cl.hasOption("stacking");
+
+ MiniDesktopManager desktopManager = new MiniDesktopManager(fullscreen, stacking);
+ desktopManager.init();
+ desktopManager.run();
+ desktopManager.dispose();
+ return null;
+ }
+
+ @Override
+ public String getDescription() {
+ return "Launch a minidesktop manager.";
+ }
+
+ }
+}