Bundle-Name: SLC Agent based on Spring\r
Bundle-RequiredExecutionEnvironment: JavaSE-1.8\r
Bundle-SymbolicName: org.argeo.slc.dep.spring\r
-Bundle-Version: 2.1.17.SNAPSHOT-r202001040954\r
+Bundle-Version: 2.1.17.SNAPSHOT-r202001041014\r
Private-Package: !*\r
SLC-Category: org.argeo.slc\r
SLC-ModularDistribution: default\r
<developmentCycle.slc>2.1</developmentCycle.slc>
<version.argeo-tp-extras>2.1.13</version.argeo-tp-extras>
-
+
<version.argeo-commons-legacy>2.1.85-SNAPSHOT</version.argeo-commons-legacy>
</properties>
<modules>
<!-- E4 -->
<module>org.argeo.slc.e4</module>
+ <!-- Desktop -->
+ <module>rcp</module>
+
<!-- Legacy UI -->
<module>legacy</module>
<module>org.argeo.slc.client.ui</module>
<module>org.argeo.slc.client.ui.dist</module>
<module>org.argeo.slc.client.rap</module>
+ <!-- Distribution -->
<module>lib</module>
<module>dep</module>
<module>dist</module>
--- /dev/null
+log4j.rootLogger=WARN, development
+
+## Levels
+log4j.logger.org.argeo=DEBUG
+log4j.logger.org.argeo.jackrabbit.remote.ExtendedDispatcherServlet=WARN
+log4j.logger.org.argeo.server.webextender.TomcatDeployer=INFO
+
+#log4j.logger.org.springframework.security=DEBUG
+#log4j.logger.org.apache.commons.exec=DEBUG
+#log4j.logger.org.apache.jackrabbit.webdav=DEBUG
+#log4j.logger.org.apache.jackrabbit.remote=DEBUG
+#log4j.logger.org.apache.jackrabbit.core.observation=DEBUG
+
+log4j.logger.org.apache.catalina=INFO
+log4j.logger.org.apache.coyote=INFO
+
+log4j.logger.org.apache.directory=INFO
+log4j.logger.org.apache.directory.server=ERROR
+log4j.logger.org.apache.jackrabbit.core.query.lucene=ERROR
+
+## Appenders
+# console is set to be a ConsoleAppender.
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+
+# console uses PatternLayout.
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c - [%t]%n
+
+# development appender (slow!)
+log4j.appender.development=org.apache.log4j.ConsoleAppender
+log4j.appender.development.layout=org.apache.log4j.PatternLayout
+log4j.appender.development.layout.ConversionPattern=%d{HH:mm:ss} [%16.16t] %5p %m (%F:%L) %c%n
--- /dev/null
+/org.argeo.security.dep.node.rcp-maven.target
+/target/
+/*.target
--- /dev/null
+/MANIFEST.MF
--- /dev/null
+properties.1.name=org.eclipse.equinox.p2.type.category
+properties.1.value=true
\ No newline at end of file
--- /dev/null
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.slc.rcp</groupId>
+ <artifactId>dep</artifactId>
+ <version>2.1.17-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>org.argeo.dep.cms.e4.rcp</artifactId>
+ <name>Node Eclipse RCP</name>
+ <dependencies>
+ <!-- Argeo -->
+ <dependency>
+ <groupId>org.argeo.slc.rcp</groupId>
+ <artifactId>org.argeo.eclipse.ui.rcp</artifactId>
+ <version>2.1.17-SNAPSHOT</version>
+ </dependency>
+
+ <!-- Desktop -->
+ <dependency>
+ <groupId>org.argeo.slc.rcp</groupId>
+ <artifactId>org.argeo.cms.desktop</artifactId>
+ <version>2.1.17-SNAPSHOT</version>
+ </dependency>
+
+ <!-- E4 specific -->
+ <dependency>
+ <groupId>org.argeo.slc.rcp</groupId>
+ <artifactId>org.argeo.cms.e4.rcp</artifactId>
+ <version>2.1.17-SNAPSHOT</version>
+ </dependency>
+
+ <!-- Argeo Commons -->
+ <dependency>
+ <groupId>org.argeo.commons</groupId>
+ <artifactId>org.argeo.eclipse.ui</artifactId>
+ <version>${version.argeo-commons}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons</groupId>
+ <artifactId>org.argeo.cms.ui</artifactId>
+ <version>${version.argeo-commons}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons</groupId>
+ <artifactId>org.argeo.cms.ui.theme</artifactId>
+ <version>${version.argeo-commons}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons</groupId>
+ <artifactId>org.argeo.cms.e4</artifactId>
+ <version>${version.argeo-commons}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons</groupId>
+ <artifactId>org.argeo.dep.cms.node</artifactId>
+ <version>${version.argeo-commons}</version>
+ <type>pom</type>
+ </dependency>
+
+ <!-- SDK -->
+ <dependency>
+ <groupId>org.argeo.tp.equinox</groupId>
+ <artifactId>org.eclipse.osgi</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- SWT for ARM -->
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.swt.gtk.linux.arm</artifactId>
+ <version>3.108.0.v20180905-1254</version>
+ </dependency>
+
+ <!-- Additional text components (not in RCP distribution) -->
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.text</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.jface.text</artifactId>
+ </dependency>
+
+ <!-- SWT and JFace -->
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.swt</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.jface</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
+ </dependency>
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.gtk.linux.x86</artifactId> -->
+ <!-- </dependency> -->
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.swt.cocoa.macosx.x86_64</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
+ </dependency>
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.win32.win32.x86</artifactId> -->
+ <!-- </dependency> -->
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.gtk.linux.ppc64le</artifactId> -->
+ <!-- </dependency> -->
+
+
+ <!-- Eclipse launcher -->
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.equinox.launcher</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.equinox.launcher.gtk.linux.x86_64</artifactId>
+ </dependency>
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.gtk.linux.x86</artifactId> -->
+ <!-- </dependency> -->
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.equinox.launcher.cocoa.macosx.x86_64</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.equinox.launcher.win32.win32.x86_64</artifactId>
+ </dependency>
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.win32.win32.x86</artifactId> -->
+ <!-- </dependency> -->
+
+ <!-- RCP -->
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.css.swt.theme</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.workbench.swt</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.core.contenttype</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.core.di</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.core.runtime</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.core.databinding</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.bindings</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.model.workbench</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.jface.databinding</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.workbench.addons.swt</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.core.services</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.apache.felix.gogo.shell</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.widgets</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.core.commands</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.core.di.extensions.supplier</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.core.expressions</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>com.ibm.icu</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.css.swt</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.swt.gtk</artifactId>
+ </dependency>
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.e4.emf.xpath</artifactId> -->
+ <!-- </dependency> -->
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.core.databinding.observable</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.rcp</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.help</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.workbench.renderers.swt</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.w3c.dom.smil</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.core.databinding.property</artifactId>
+ </dependency>
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.apache.commons.io</artifactId> -->
+ <!-- </dependency> -->
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.di</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.dialogs</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.core.di.extensions</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.equinox.bidi</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.core.di.annotations</artifactId>
+ </dependency>
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.apache.commons.logging</artifactId> -->
+ <!-- <version>1.2.0.v20180409-1502</version> -->
+ <!-- </dependency> -->
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.apache.felix.gogo.command</artifactId> -->
+ <!-- <version>1.0.2.v20170914-1324</version> -->
+ <!-- </dependency> -->
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.workbench3</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.core.jobs</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.core.contexts</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.core.databinding.beans</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.css.core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.ui.workbench</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.core.commands</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.services</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.ui</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.workbench</artifactId>
+ </dependency>
+
+ <!-- Platform dependent -->
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.e4.ui.workbench.renderers.swt.cocoa</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.eclipse.ui.cocoa</artifactId>
+ </dependency>
+
+ <!-- Third party -->
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.w3c.css.sac</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.w3c.dom.svg</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.w3c.dom.events</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.apache.xmlgraphics</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.apache.commons.jxpath</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.apache.batik.util</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.apache.batik.i18n</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.apache.batik.css</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.apache.batik.constants</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.apache.felix.gogo.runtime</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rcp.e4</groupId>
+ <artifactId>org.apache.felix.scr</artifactId>
+ </dependency>
+
+
+ <!-- RCP -->
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp</groupId> -->
+ <!-- <artifactId>argeo-tp-rcp-e4</artifactId> -->
+ <!-- <version>${version.argeo-tp}</version> -->
+ <!-- <exclusions> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.osgi</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.osgi.services</artifactId> -->
+ <!-- </exclusion> -->
+
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.osgi.compatibility.state</artifactId> -->
+ <!-- </exclusion> -->
+
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.update.configurator</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.carbon.macosx</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.gtk.solaris.sparc</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.gtk.solaris.x86</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.motif.solaris.sparc</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.gtk.linux.s390</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.gtk.linux.s390x</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.gtk.linux.ppc64</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.motif.linux.x86</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.gtk.linux.ppc</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.photon.qnx.x86</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.motif.aix.ppc</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.motif.aix.ppc64</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.motif.hpux.ia64_32</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.gtk.aix.ppc</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.gtk.aix.ppc64</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.swt.gtk.hpux.ia64_32</artifactId> -->
+ <!-- </exclusion> -->
+
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.carbon.macosx</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.gtk.solaris.sparc</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.gtk.solaris.x86</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.motif.solaris.sparc</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.gtk.linux.s390</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.gtk.linux.s390x</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.gtk.linux.ppc64</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.motif.linux.x86</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.gtk.linux.ppc</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.photon.qnx.x86</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.motif.aix.ppc</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.motif.aix.ppc64</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.motif.hpux.ia64_32</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.gtk.aix.ppc</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.gtk.aix.ppc64</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.gtk.hpux.ia64_32</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.ui.carbon</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- </exclusions> -->
+ <!-- </dependency> -->
+
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.e4.ui.di</artifactId> -->
+ <!-- </dependency> -->
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.e4.core.di</artifactId> -->
+ <!-- </dependency> -->
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.e4.core.di.extensions.supplier</artifactId> -->
+ <!-- </dependency> -->
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.e4.ui.model.workbench</artifactId> -->
+ <!-- </dependency> -->
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.e4.core.contexts</artifactId> -->
+ <!-- </dependency> -->
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.e4.core.services</artifactId> -->
+ <!-- </dependency> -->
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.e4.core.di.annotations</artifactId> -->
+ <!-- </dependency> -->
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.e4.ui.services</artifactId> -->
+ <!-- </dependency> -->
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.rcp.e4</groupId> -->
+ <!-- <artifactId>org.eclipse.e4.core.di.extensions</artifactId> -->
+ <!-- </dependency> -->
+
+ <!-- Taking EMF from RAP -->
+ <!-- FIXME investigate why we have to -->
+ <dependency>
+ <groupId>org.argeo.tp.rap.e4</groupId>
+ <artifactId>org.eclipse.emf.common</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rap.e4</groupId>
+ <artifactId>org.eclipse.emf.ecore</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rap.e4</groupId>
+ <artifactId>org.eclipse.emf.ecore.change</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rap.e4</groupId>
+ <artifactId>org.eclipse.emf.ecore.xmi</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.rap.e4</groupId>
+ <artifactId>org.eclipse.e4.emf.xpath</artifactId>
+ </dependency>
+
+
+ </dependencies>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.argeo.tp</groupId>
+ <artifactId>argeo-tp-rcp-e4</artifactId>
+ <version>${version.argeo-tp}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <profiles>
+ <profile>
+ <id>rpmbuild</id>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>prepare-source</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <descriptorRefs>
+ <descriptorRef>a2-source</descriptorRef>
+ </descriptorRefs>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>rpm-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>rpm-argeo</id>
+ <phase>package</phase>
+ <goals>
+ <goal>rpm</goal>
+ </goals>
+ <configuration>
+ <name>argeo-cms-e4-rcp</name>
+ <mappings>
+ <mapping>
+ <directory>/usr/share/osgi</directory>
+ <username>root</username>
+ <groupname>root</groupname>
+ <filemode>644</filemode>
+ <directoryIncluded>false</directoryIncluded>
+ <sources>
+ <source>
+ <location>${project.build.directory}/${project.artifactId}-${project.version}-a2-source</location>
+ <includes>
+ <include>**/*.jar</include>
+ </includes>
+ </source>
+ </sources>
+ </mapping>
+ </mappings>
+ <requires>
+ <require>argeo-cms-node</require>
+ <require>argeo-cms-e4-rcp-tp</require>
+ </requires>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>rpmbuild-tp</id>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>prepare-source-tp</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <descriptorRefs>
+ <descriptorRef>a2-source-tp</descriptorRef>
+ </descriptorRefs>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>rpm-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>rpm-tp</id>
+ <phase>package</phase>
+ <goals>
+ <goal>rpm</goal>
+ </goals>
+ <configuration>
+ <name>argeo-cms-e4-rcp-tp</name>
+ <projversion>${version.argeo-tp}</projversion>
+ <mappings>
+ <mapping>
+ <directory>/usr/share/osgi</directory>
+ <username>root</username>
+ <groupname>root</groupname>
+ <filemode>644</filemode>
+ <directoryIncluded>false</directoryIncluded>
+ <sources>
+ <source>
+ <location>${project.build.directory}/${project.artifactId}-${project.version}-a2-source-tp</location>
+ <includes>
+ <include>**/*.jar</include>
+ </includes>
+ </source>
+ </sources>
+ </mapping>
+ <mapping>
+ <directory>/usr/share/osgi/boot</directory>
+ <username>root</username>
+ <groupname>root</groupname>
+ <filemode>644</filemode>
+ <directoryIncluded>false</directoryIncluded>
+ <dependency>
+ <stripVersion>true</stripVersion>
+ <includes>
+ <include>org.argeo.tp.rcp.e4:org.eclipse.equinox.launcher</include>
+ </includes>
+ </dependency>
+ </mapping>
+ </mappings>
+ <requires>
+ <require>argeo-cms-node-tp</require>
+ </requires>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
--- /dev/null
+<!--
+
+ Copyright (C) 2007-2012 Argeo GmbH
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<!-- Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org> Licensed under
+ the Apache License, Version 2.0 (the "License"); you may not use this file
+ except in compliance with the License. You may obtain a copy of the License
+ at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
+ law or agreed to in writing, software distributed under the License is distributed
+ on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ express or implied. See the License for the specific language governing permissions
+ and limitations under the License. -->
+
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <id>linux.x86</id>
+ <baseDirectory>argeo-node-ui</baseDirectory>
+ <formats>
+ <format>tar.gz</format>
+ </formats>
+ <dependencySets>
+ <dependencySet>
+ <unpack>false</unpack>
+ <outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}
+ </outputFileNameMapping>
+ <outputDirectory>lib</outputDirectory>
+ <includes>
+ <include>*:jar</include>
+ </includes>
+ <excludes>
+ <exclude>org.eclipse.swt:org.eclipse.swt*:jar</exclude>
+ </excludes>
+ </dependencySet>
+ <dependencySet>
+ <unpack>false</unpack>
+ <outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}
+ </outputFileNameMapping>
+ <outputDirectory>lib</outputDirectory>
+ <includes>
+ <include>org.eclipse.swt:org.eclipse.swt.gtk.linux.x86:jar</include>
+ </includes>
+ </dependencySet>
+ </dependencySets>
+</assembly>
\ No newline at end of file
--- /dev/null
+<!--
+
+ Copyright (C) 2007-2012 Argeo GmbH
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<!-- Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org> Licensed under
+ the Apache License, Version 2.0 (the "License"); you may not use this file
+ except in compliance with the License. You may obtain a copy of the License
+ at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
+ law or agreed to in writing, software distributed under the License is distributed
+ on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ express or implied. See the License for the specific language governing permissions
+ and limitations under the License. -->
+
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <id>linux.x86_64</id>
+ <baseDirectory>argeo-node-ui</baseDirectory>
+ <formats>
+ <format>tar.gz</format>
+ </formats>
+ <dependencySets>
+ <dependencySet>
+ <unpack>false</unpack>
+ <outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}
+ </outputFileNameMapping>
+ <outputDirectory>lib</outputDirectory>
+ <includes>
+ <include>*:jar</include>
+ </includes>
+ <excludes>
+ <exclude>org.eclipse.swt:org.eclipse.swt*:jar</exclude>
+ </excludes>
+ </dependencySet>
+ <dependencySet>
+ <unpack>false</unpack>
+ <outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}
+ </outputFileNameMapping>
+ <outputDirectory>lib</outputDirectory>
+ <includes>
+ <include>org.eclipse.swt:org.eclipse.swt.gtk.linux.x86_64:jar</include>
+ </includes>
+ </dependencySet>
+ </dependencySets>
+</assembly>
\ No newline at end of file
--- /dev/null
+<!--
+
+ Copyright (C) 2007-2012 Argeo GmbH
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<!-- Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org> Licensed under
+ the Apache License, Version 2.0 (the "License"); you may not use this file
+ except in compliance with the License. You may obtain a copy of the License
+ at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
+ law or agreed to in writing, software distributed under the License is distributed
+ on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ express or implied. See the License for the specific language governing permissions
+ and limitations under the License. -->
+
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <id>win32.x86</id>
+ <baseDirectory>argeo-node-ui</baseDirectory>
+ <formats>
+ <format>zip</format>
+ </formats>
+ <dependencySets>
+ <dependencySet>
+ <unpack>false</unpack>
+ <outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}
+ </outputFileNameMapping>
+ <outputDirectory>lib</outputDirectory>
+ <includes>
+ <include>*:jar</include>
+ </includes>
+ <excludes>
+ <exclude>org.eclipse.swt:org.eclipse.swt*:jar</exclude>
+ </excludes>
+ </dependencySet>
+ <dependencySet>
+ <unpack>false</unpack>
+ <outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}
+ </outputFileNameMapping>
+ <outputDirectory>lib</outputDirectory>
+ <includes>
+ <include>org.eclipse.swt:org.eclipse.swt.win32.win32.x86:jar</include>
+ </includes>
+ </dependencySet>
+ </dependencySets>
+</assembly>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.slc.rcp</groupId>
+ <artifactId>argeo-rcp</artifactId>
+ <version>2.1.17-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>dep</artifactId>
+ <name>RCP Base Dependencies</name>
+ <packaging>pom</packaging>
+ <modules>
+ <module>org.argeo.dep.cms.e4.rcp</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <configuration>
+ <instructions>
+ <SLC-ModularDistribution>default</SLC-ModularDistribution>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.argeo.maven.plugins</groupId>
+ <artifactId>argeo-osgi-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>generate-descriptors</id>
+ <goals>
+ <goal>descriptors</goal>
+ </goals>
+ <phase>generate-resources</phase>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>org.argeo.commons</groupId>
+ <artifactId>assembly-descriptors</artifactId>
+ <version>${version.argeo-commons}</version>
+ </dependency>
+ </dependencies>
+ <configuration>
+ <attach>false</attach>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.argeo.tp.equinox</groupId>
+ <artifactId>org.eclipse.osgi</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.sdk</groupId>
+ <artifactId>org.junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.sdk</groupId>
+ <artifactId>org.hamcrest</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <profiles>
+ <profile>
+ <id>check-osgi</id>
+ <dependencies>
+ <dependency>
+ <groupId>org.argeo.commons</groupId>
+ <artifactId>org.argeo.osgi.boot</artifactId>
+ <version>${version.argeo-commons}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.argeo.maven.plugins</groupId>
+ <artifactId>argeo-osgi-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>check-osgi</id>
+ <phase>test</phase>
+ <goals>
+ <goal>equinox</goal>
+ </goals>
+ <configuration>
+ <onlyCheck>true</onlyCheck>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
\ No newline at end of file
--- /dev/null
+osgi.bundles=org.argeo.osgi.boot@start
+osgi.clean=true
+
+argeo.osgi.start.2.rcp=\
+org.eclipse.core.runtime
+
+argeo.osgi.start.2.node=\
+org.eclipse.equinox.metatype,\
+org.eclipse.equinox.ds,\
+org.eclipse.equinox.cm,\
+
+argeo.osgi.start.3.node=\
+org.argeo.cms
+
+applicationXMI=org.argeo.cms.e4.rcp/argeo-companion.e4xmi
+lifeCycleURI=bundleclass://org.argeo.cms.e4.rcp/org.argeo.cms.e4.rcp.CmsRcpLifeCycle
+clearPersistedState=true
+#argeo.cms.desktop.inTray=true
+
+# Remote node:
+#argeo.node.repo.labeledUri=http://root:demo@localhost:7070/jcr/node
+
+log4j.configuration=file:../../log4j.properties
+argeo.node.useradmin.uris=os:///
+eclipse.application=org.argeo.cms.e4.rcp.CmsE4Application
--- /dev/null
+log4j.rootLogger=WARN, development
+
+## Levels
+log4j.logger.org.argeo=DEBUG
+log4j.logger.org.argeo.jackrabbit.remote.ExtendedDispatcherServlet=WARN
+log4j.logger.org.argeo.server.webextender.TomcatDeployer=INFO
+
+#log4j.logger.org.springframework.security=DEBUG
+#log4j.logger.org.apache.commons.exec=DEBUG
+#log4j.logger.org.apache.jackrabbit.webdav=DEBUG
+#log4j.logger.org.apache.jackrabbit.remote=DEBUG
+#log4j.logger.org.apache.jackrabbit.core.observation=DEBUG
+
+log4j.logger.org.apache.catalina=INFO
+log4j.logger.org.apache.coyote=INFO
+
+log4j.logger.org.apache.directory=INFO
+log4j.logger.org.apache.directory.server=ERROR
+log4j.logger.org.apache.jackrabbit.core.query.lucene=ERROR
+
+## Appenders
+# console is set to be a ConsoleAppender.
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+
+# console uses PatternLayout.
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c - [%t]%n
+
+# development appender (slow!)
+log4j.appender.development=org.apache.log4j.ConsoleAppender
+log4j.appender.development.layout=org.apache.log4j.PatternLayout
+log4j.appender.development.layout.ConversionPattern=%d{HH:mm:ss} [%16.16t] %5p %m (%F:%L) %c%n
--- /dev/null
+#!/bin/sh
+APP=argeo-companion
+
+JVM=java
+
+# Directories and files
+CONF_DIR=/etc/$APP
+CONF_DIRS=/etc/$APP/conf.d
+BASE_POLICY_ALL=/usr/share/$APP/all.policy
+BASE_CONFIG_INI=/usr/share/$APP/config.ini
+
+EXEC_DIR=$HOME/.local/share/argeo-companion
+DATA_DIR=$EXEC_DIR/data
+CONF_RW=$EXEC_DIR/state
+CONFIG_INI=$CONF_RW/config.ini
+
+OSGI_INSTALL_AREA=/usr/share/osgi/boot
+OSGI_FRAMEWORK=$OSGI_INSTALL_AREA/org.eclipse.osgi.jar
+ECLIPSE_LAUNCHER=$OSGI_INSTALL_AREA/org.eclipse.equinox.launcher.jar
+
+# Overwrite variables
+if [ -f $CONF_DIR/settings.sh ];then
+ . $CONF_DIR/settings.sh
+fi
+
+RETVAL=0
+
+start() {
+ mkdir -p $CONF_RW
+ mkdir -p $DATA_DIR
+
+ # Merge config files
+ printf "## Equinox configuration - Generated by /usr/sbin/nodectl ##\n\n" > $CONFIG_INI
+# cat $BASE_CONFIG_INI >> $CONFIG_INI
+ printf "\n##\n## $CONF_DIR/$APP.ini\n##\n\n" >> $CONFIG_INI
+ cat $CONF_DIR/$APP.ini >> $CONFIG_INI
+ for file in `ls -v $CONF_DIRS/*.ini`; do
+ printf "\n##\n## $file\n##\n\n" >> $CONFIG_INI
+ cat $file >> $CONFIG_INI
+ done;
+
+# $JAVA_OPTS -jar $OSGI_FRAMEWORK \
+
+ cd $EXEC_DIR
+ $JVM \
+ -Dlog4j.configuration="file:$CONF_DIR/log4j.properties" \
+ -Dosgi.framework=$OSGI_FRAMEWORK \
+ $JAVA_OPTS -classpath $ECLIPSE_LAUNCHER org.eclipse.equinox.launcher.Main \
+ -configuration "$CONF_RW" \
+ -data "$DATA_DIR"
+}
+
+start
+
--- /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-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
--- /dev/null
+/bin/
+/target/
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.argeo.cms.desktop</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
+/MANIFEST.MF
--- /dev/null
+Import-Package: org.eclipse.swt,\
+*
--- /dev/null
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.slc.rcp</groupId>
+ <artifactId>argeo-rcp</artifactId>
+ <version>2.1.17-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>org.argeo.cms.desktop</artifactId>
+ <name>CMS Desktop</name>
+ <packaging>jar</packaging>
+ <dependencies>
+ <!-- Base Argeo UI -->
+ <dependency>
+ <groupId>org.argeo.commons</groupId>
+ <artifactId>org.argeo.cms.ui</artifactId>
+ <version>${version.argeo-commons}</version>
+ </dependency>
+ <!-- RCP specific -->
+ <dependency>
+ <groupId>org.argeo.slc.rcp</groupId>
+ <artifactId>org.argeo.eclipse.ui.rcp</artifactId>
+ <version>2.1.17-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
--- /dev/null
+package org.argeo.cms.desktop;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+
+ private static BundleContext context;
+
+ static BundleContext getContext() {
+ return context;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext bundleContext) throws Exception {
+ Activator.context = bundleContext;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext bundleContext) throws Exception {
+ Activator.context = null;
+ }
+
+}
--- /dev/null
+package org.argeo.cms.desktop;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+
+public class CmsDesktopManager {
+ private Display display;
+
+ private Shell rootShell;
+ private Shell toolBarShell;
+
+ public void init() {
+ display = Display.getCurrent();
+ if (display != null)
+ throw new IllegalStateException("Already a display " + display);
+ display = new Display();
+
+ int toolBarSize = 48;
+
+ if (isFullScreen()) {
+ rootShell = new Shell(display, SWT.NO_TRIM);
+ // rootShell.setMaximized(true);
+ rootShell.setFullScreen(true);
+ Rectangle bounds = display.getBounds();
+
+ rootShell.setSize(bounds.width, bounds.height);
+// Point realSize = rootShell.getSize();
+// rootShell.setBounds(bounds);
+// Rectangle realBounds = rootShell.getBounds();
+ } else {
+ rootShell = new Shell(display, SWT.SHELL_TRIM);
+ Rectangle shellArea = rootShell.computeTrim(200, 200, 800, 480);
+ rootShell.setSize(shellArea.width, shellArea.height);
+ }
+
+ rootShell.setLayout(new GridLayout(2, false));
+ Composite toolBarArea = new Composite(rootShell, SWT.NONE);
+ toolBarArea.setLayoutData(new GridData(toolBarSize, rootShell.getSize().y));
+
+ ToolBar toolBar;
+ if (isFullScreen()) {
+ toolBarShell = new Shell(rootShell, SWT.NO_TRIM | SWT.ON_TOP);
+ toolBar = new ToolBar(toolBarShell, SWT.VERTICAL | SWT.FLAT | SWT.BORDER);
+ createDock(toolBar);
+ toolBarShell.pack();
+ toolBarArea.setLayoutData(new GridData(toolBar.getSize().x, toolBar.getSize().y));
+ } else {
+ toolBar = new ToolBar(toolBarArea, SWT.VERTICAL | SWT.FLAT | SWT.BORDER);
+ createDock(toolBar);
+ toolBarArea.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
+ }
+
+ Composite backgroundArea = new Composite(rootShell, SWT.NONE);
+ backgroundArea.setLayout(new GridLayout(6, true));
+ DesktopLayer desktopLayer = new DesktopLayer();
+ desktopLayer.init(backgroundArea);
+ rootShell.open();
+ // rootShell.layout(true, true);
+
+ if (toolBarShell != null) {
+ toolBarShell.setLocation(new Point(0, 0));
+ toolBarShell.open();
+ }
+ }
+
+ protected void createDock(ToolBar toolBar) {
+
+ // toolBar.setLocation(clientArea.x, clientArea.y);
+
+ ToolItem closeI = new ToolItem(toolBar, SWT.PUSH);
+ closeI.setImage(display.getSystemImage(SWT.ICON_ERROR));
+ closeI.setToolTipText("Close");
+ closeI.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ rootShell.dispose();
+ }
+
+ });
+
+ ToolItem searchI = new ToolItem(toolBar, SWT.PUSH);
+ searchI.setImage(display.getSystemImage(SWT.ICON_QUESTION));
+ searchI.setToolTipText("Search");
+ searchI.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ // rootShell.dispose();
+ }
+
+ });
+ // toolBar.setSize(48, toolBar.getSize().y);
+ toolBar.pack();
+ }
+
+ public void run() {
+ while (!rootShell.isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+ }
+
+ public void dispose() {
+ if (!rootShell.isDisposed())
+ rootShell.dispose();
+ }
+
+ protected boolean isFullScreen() {
+ return true;
+ }
+
+ public static void main(String[] args) {
+ CmsDesktopManager desktopManager = new CmsDesktopManager();
+ desktopManager.init();
+ // Runtime.getRuntime().addShutdownHook(new Thread(() ->
+ // desktopManager.dispose(), "Dispose desktop manager"));
+ desktopManager.run();
+ desktopManager.dispose();
+ }
+
+}
--- /dev/null
+package org.argeo.cms.desktop;
+
+import java.io.IOException;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.apache.commons.io.FilenameUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.program.Program;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+
+public class DesktopLayer {
+ // TODO make it configurable
+ private Path desktopDir = Paths.get(System.getProperty("user.home"), "tmp");
+
+ public void init(Composite parentShell) {
+// Decorations shell = new Decorations(parentShell, SWT.CLOSE);
+// shell.setLayoutData(new GridData(GridData.FILL_BOTH));
+ createUi(parentShell, desktopDir);
+ // shell.open();
+ }
+
+ public Control createUi(Composite parent, Path context) {
+ // parent.setLayout(new FillLayout());
+ try {
+ DirectoryStream<Path> ds = Files.newDirectoryStream(context);
+ ds.forEach((path) -> createIcon(parent, path));
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return parent;
+
+ }
+
+ protected void createIcon(Composite parent, Path path) {
+ String ext = FilenameUtils.getExtension(path.getFileName().toString());
+ Program program = Program.findProgram(ext);
+ if (program == null) {
+ createDefaultIcon(parent, path);
+ return;
+ }
+
+ Display display = parent.getDisplay();
+ ImageData iconData = program.getImageData();
+
+ Image iconImage;
+ if (iconData == null) {
+ iconImage = display.getSystemImage(SWT.ICON_INFORMATION);
+ iconData = iconImage.getImageData();
+ } else {
+ iconImage = new Image(display, iconData);
+ }
+
+ Composite icon = new Composite(parent, SWT.NONE);
+ icon.setLayoutData(new GridData(48, 72));
+ icon.setLayout(new GridLayout());
+ // Button
+ Button iconB = new Button(icon, SWT.FLAT);
+ iconB.setImage(iconImage);
+ // iconB.setLayoutData(new GridData(iconData.width, iconData.height));
+ iconB.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+ iconB.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ program.execute(path.toString());
+ }
+
+ });
+ // Label
+ Label iconL = new Label(icon, SWT.WRAP);
+ iconL.setText(path.getFileName().toString());
+ iconL.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+ }
+
+ protected void createDefaultIcon(Composite parent, Path path) {
+ Composite icon = new Composite(parent, SWT.NONE);
+ icon.setLayout(new GridLayout());
+ Label iconL = new Label(icon, SWT.NONE);
+ iconL.setText(path.getFileName().toString());
+ iconL.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
+ }
+}
--- /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-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
--- /dev/null
+/bin/
+/target/
+/exec
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.argeo.cms.e4.rcp</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
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
--- /dev/null
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
--- /dev/null
+/MANIFEST.MF
--- /dev/null
+<?xml version="1.0" encoding="ASCII"?>
+<application:Application xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:advanced="http://www.eclipse.org/ui/2010/UIModel/application/ui/advanced" xmlns:application="http://www.eclipse.org/ui/2010/UIModel/application" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/ui/basic" xmi:id="_c4iAgCnCEei1F8sdBz8Mpw" elementId="org.argeo.cms.e4.rcp.application">
+ <children xsi:type="basic:TrimmedWindow" xmi:id="_hSGBwCnCEei1F8sdBz8Mpw" elementId="org.argeo.cms.e4.rcp.trimmedwindow.argeocompanion" label="Argeo Companion">
+ <children xsi:type="advanced:PerspectiveStack" xmi:id="_nxzQICnCEei1F8sdBz8Mpw" elementId="org.argeo.cms.e4.rcp.perspectivestack.0">
+ <children xsi:type="advanced:Perspective" xmi:id="_oI_oICnCEei1F8sdBz8Mpw" elementId="org.argeo.cms.e4.rcp.perspective.cmsadmin" label="CMS Admin">
+ <children xsi:type="basic:PartSashContainer" xmi:id="_qc16ECnCEei1F8sdBz8Mpw" elementId="org.argeo.cms.e4.rcp.partsashcontainer.0" horizontal="true">
+ <children xsi:type="basic:PartStack" xmi:id="_RE87kDsXEeiUntFYWh-hFg" elementId="org.argeo.cms.e4.rcp.partstack.1">
+ <children xsi:type="basic:Part" xmi:id="_V1WvgDsXEeiUntFYWh-hFg" elementId="org.argeo.cms.e4.rcp.part.files" contributionURI="bundleclass://org.argeo.cms.e4/org.argeo.cms.e4.files.NodeFsBrowserView" label="Files"/>
+ <children xsi:type="basic:Part" xmi:id="_vOqDQCnCEei1F8sdBz8Mpw" elementId="org.argeo.cms.e4.rcp.part.jcr" containerData="4000" contributionURI="bundleclass://org.argeo.cms.e4/org.argeo.cms.e4.jcr.JcrBrowserView" label="JCR"/>
+ </children>
+ <children xsi:type="basic:PartStack" xmi:id="_0eRiwCnCEei1F8sdBz8Mpw" elementId="org.argeo.cms.e4.rcp.partstack.0" containerData="6000"/>
+ </children>
+ </children>
+ </children>
+ </children>
+ <addons xmi:id="_c4iAgSnCEei1F8sdBz8Mpw" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/>
+ <addons xmi:id="_c4iAginCEei1F8sdBz8Mpw" elementId="org.eclipse.e4.ui.contexts.service" contributionURI="bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"/>
+ <addons xmi:id="_c4iAgynCEei1F8sdBz8Mpw" elementId="org.eclipse.e4.ui.bindings.service" contributionURI="bundleclass://org.eclipse.e4.ui.bindings/org.eclipse.e4.ui.bindings.BindingServiceAddon"/>
+ <addons xmi:id="_c4iAhCnCEei1F8sdBz8Mpw" elementId="org.eclipse.e4.ui.workbench.commands.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.CommandProcessingAddon"/>
+ <addons xmi:id="_c4iAhSnCEei1F8sdBz8Mpw" elementId="org.eclipse.e4.ui.workbench.contexts.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.ContextProcessingAddon"/>
+ <addons xmi:id="_c4iAhinCEei1F8sdBz8Mpw" elementId="org.eclipse.e4.ui.workbench.bindings.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.swt/org.eclipse.e4.ui.workbench.swt.util.BindingProcessingAddon"/>
+ <addons xmi:id="_c4iAhynCEei1F8sdBz8Mpw" elementId="org.eclipse.e4.ui.workbench.handler.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.HandlerProcessingAddon"/>
+</application:Application>
--- /dev/null
+argeo.osgi.start.2.node=\
+org.eclipse.equinox.metatype,\
+org.eclipse.equinox.ds,\
+org.eclipse.equinox.cm,\
+
+argeo.osgi.start.3.node=\
+org.argeo.cms
+
+applicationXMI=org.argeo.cms.e4.rcp/argeo-companion.e4xmi
+lifeCycleURI=bundleclass://org.argeo.cms.e4.rcp/org.argeo.cms.e4.rcp.CmsRcpLifeCycle
+clearPersistedState=true
+#argeo.cms.desktop.inTray=true
+
+# Remote node:
+#argeo.node.repo.labeledUri=http://root:demo@localhost:7070/jcr/node
+
+log4j.configuration=file:../../log4j.properties
+argeo.node.useradmin.uris=os:///
+eclipse.application=org.argeo.cms.e4.rcp.CmsE4Application
--- /dev/null
+Bundle-SymbolicName: org.argeo.cms.e4.rcp;singleton=true
+
+Require-Bundle: org.eclipse.core.runtime
+
+Import-Package: org.argeo.node,\
+!org.eclipse.core.runtime,\
+org.eclipse.swt,\
+*
--- /dev/null
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ argeo-companion.e4xmi
+source.. = src/
--- /dev/null
+log4j.rootLogger=WARN, development
+
+## Levels
+log4j.logger.org.argeo=DEBUG
+log4j.logger.org.argeo.jackrabbit.remote.ExtendedDispatcherServlet=WARN
+log4j.logger.org.argeo.server.webextender.TomcatDeployer=INFO
+
+#log4j.logger.org.springframework.security=DEBUG
+#log4j.logger.org.apache.commons.exec=DEBUG
+#log4j.logger.org.apache.jackrabbit.webdav=DEBUG
+#log4j.logger.org.apache.jackrabbit.remote=DEBUG
+#log4j.logger.org.apache.jackrabbit.core.observation=DEBUG
+
+log4j.logger.org.apache.catalina=INFO
+log4j.logger.org.apache.coyote=INFO
+
+log4j.logger.org.apache.directory=INFO
+log4j.logger.org.apache.directory.server=ERROR
+log4j.logger.org.apache.jackrabbit.core.query.lucene=ERROR
+
+## Appenders
+# console is set to be a ConsoleAppender.
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+
+# console uses PatternLayout.
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c - [%t]%n
+
+# development appender (slow!)
+log4j.appender.development=org.apache.log4j.ConsoleAppender
+log4j.appender.development.layout=org.apache.log4j.PatternLayout
+log4j.appender.development.layout.ConversionPattern=%d{HH:mm:ss} [%16.16t] %5p %m (%F:%L) %c%n
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ id="CmsE4Application"
+ name="CMS E4 Application"
+ point="org.eclipse.core.runtime.applications">
+ <application
+ cardinality="singleton-global"
+ thread="main"
+ visible="true">
+ <run class="org.argeo.cms.e4.rcp.CmsE4Application"></run>
+ </application>
+ </extension>
+</plugin>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.slc.rcp</groupId>
+ <artifactId>argeo-rcp</artifactId>
+ <version>2.1.17-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>org.argeo.cms.e4.rcp</artifactId>
+ <name>CMS E4 RCP</name>
+ <packaging>jar</packaging>
+ <dependencies>
+ <!-- Base Argeo UI -->
+ <dependency>
+ <groupId>org.argeo.commons</groupId>
+ <artifactId>org.argeo.cms.ui</artifactId>
+ <version>${version.argeo-commons}</version>
+ </dependency>
+ <!-- RCP specific -->
+ <dependency>
+ <groupId>org.argeo.slc.rcp</groupId>
+ <artifactId>org.argeo.eclipse.ui.rcp</artifactId>
+ <version>2.1.17-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
--- /dev/null
+package org.argeo.cms.e4.rcp;
+
+import java.security.PrivilegedExceptionAction;
+
+import javax.security.auth.Subject;
+import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
+
+import org.argeo.cms.CmsException;
+import org.argeo.cms.auth.CurrentUser;
+import org.argeo.cms.ui.CmsImageManager;
+import org.argeo.cms.ui.CmsView;
+import org.argeo.cms.ui.UxContext;
+import org.argeo.cms.util.SimpleUxContext;
+import org.argeo.cms.widgets.auth.CmsLoginShell;
+import org.argeo.node.NodeConstants;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.swt.widgets.Display;
+
+public class CmsE4Application implements IApplication, CmsView {
+ private LoginContext loginContext;
+ private IApplication e4Application;
+ private UxContext uxContext;
+
+ @Override
+ public Object start(IApplicationContext context) throws Exception {
+ Subject subject = new Subject();
+ Display display = createDisplay();
+ CmsLoginShell loginShell = new CmsLoginShell(this);
+ // TODO customize CmsLoginShell to be smaller and centered
+ loginShell.setSubject(subject);
+ try {
+ // try pre-auth
+ loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, subject, loginShell);
+ loginContext.login();
+ } catch (LoginException e) {
+ e.printStackTrace();
+ loginShell.createUi();
+ loginShell.open();
+
+ while (!loginShell.getShell().isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+ }
+ if (CurrentUser.getUsername(getSubject()) == null)
+ throw new CmsException("Cannot log in");
+
+ // try {
+ // CallbackHandler callbackHandler = new DefaultLoginDialog(
+ // display.getActiveShell());
+ // loginContext = new LoginContext(
+ // NodeConstants.LOGIN_CONTEXT_SINGLE_USER, subject,
+ // callbackHandler);
+ // } catch (LoginException e1) {
+ // throw new CmsException("Cannot initialize login context", e1);
+ // }
+ //
+ // // login
+ // try {
+ // loginContext.login();
+ // subject = loginContext.getSubject();
+ // } catch (LoginException e) {
+ // e.printStackTrace();
+ // display.dispose();
+ // try {
+ // Thread.sleep(2000);
+ // } catch (InterruptedException e1) {
+ // // silent
+ // }
+ // return null;
+ // }
+
+ uxContext = new SimpleUxContext();
+
+ e4Application = getApplication(null);
+ Object res = Subject.doAs(subject, new PrivilegedExceptionAction<Object>() {
+
+ @Override
+ public Object run() throws Exception {
+ return e4Application.start(context);
+ }
+
+ });
+ return res;
+ }
+
+ @Override
+ public void stop() {
+ if (e4Application != null)
+ e4Application.stop();
+ }
+
+ static IApplication getApplication(String[] args) {
+ IExtension extension = Platform.getExtensionRegistry().getExtension(Platform.PI_RUNTIME,
+ Platform.PT_APPLICATIONS, "org.eclipse.e4.ui.workbench.swt.E4Application");
+ try {
+ IConfigurationElement[] elements = extension.getConfigurationElements();
+ if (elements.length > 0) {
+ IConfigurationElement[] runs = elements[0].getChildren("run");
+ if (runs.length > 0) {
+ Object runnable;
+ runnable = runs[0].createExecutableExtension("class");
+ if (runnable instanceof IApplication)
+ return (IApplication) runnable;
+ }
+ }
+ } catch (Exception e) {
+ throw new IllegalStateException("Cannot find e4 application", e);
+ }
+ throw new IllegalStateException("Cannot find e4 application");
+ }
+
+ public static Display createDisplay() {
+ Display.setAppName("Argeo CMS RCP");
+
+ // create the display
+ Display newDisplay = Display.getCurrent();
+ if (newDisplay == null) {
+ newDisplay = new Display();
+ }
+ // Set the priority higher than normal so as to be higher
+ // than the JobManager.
+ Thread.currentThread().setPriority(Math.min(Thread.MAX_PRIORITY, Thread.NORM_PRIORITY + 1));
+ return newDisplay;
+ }
+
+ //
+ // CMS VIEW
+ //
+
+ @Override
+ public UxContext getUxContext() {
+ return uxContext;
+ }
+
+ @Override
+ public void navigateTo(String state) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void authChange(LoginContext loginContext) {
+ if (loginContext == null)
+ throw new CmsException("Login context cannot be null");
+ // logout previous login context
+ // if (this.loginContext != null)
+ // try {
+ // this.loginContext.logout();
+ // } catch (LoginException e1) {
+ // System.err.println("Could not log out: " + e1);
+ // }
+ this.loginContext = loginContext;
+ }
+
+ @Override
+ public void logout() {
+ if (loginContext == null)
+ throw new CmsException("Login context should not bet null");
+ try {
+ CurrentUser.logoutCmsSession(loginContext.getSubject());
+ loginContext.logout();
+ } catch (LoginException e) {
+ throw new CmsException("Cannot log out", e);
+ }
+ }
+
+ @Override
+ public void exception(Throwable e) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public CmsImageManager getImageManager() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ protected Subject getSubject() {
+ return loginContext.getSubject();
+ }
+
+ @Override
+ public boolean isAnonymous() {
+ return CurrentUser.isAnonymous(getSubject());
+ }
+
+}
--- /dev/null
+package org.argeo.cms.e4.rcp;
+
+import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.ui.workbench.lifecycle.PostContextCreate;
+import org.eclipse.e4.ui.workbench.lifecycle.PreSave;
+import org.eclipse.e4.ui.workbench.lifecycle.ProcessAdditions;
+import org.eclipse.e4.ui.workbench.lifecycle.ProcessRemovals;
+
+@SuppressWarnings("restriction")
+public class CmsRcpLifeCycle {
+
+ @PostContextCreate
+ void postContextCreate(IEclipseContext workbenchContext) {
+ }
+
+ @PreSave
+ void preSave(IEclipseContext workbenchContext) {
+ }
+
+ @ProcessAdditions
+ void processAdditions(IEclipseContext workbenchContext) {
+ }
+
+ @ProcessRemovals
+ void processRemovals(IEclipseContext workbenchContext) {
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src" />
+ <classpathentry kind="con"
+ path="org.eclipse.pde.core.requiredPlugins" />
+ <classpathentry kind="con"
+ path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8" />
+ <classpathentry kind="output" path="bin" />
+</classpath>
--- /dev/null
+/target/
+/bin/
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.argeo.eclipse.ui.rcp</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
+/MANIFEST.MF
--- /dev/null
+Import-Package: org.apache.commons.io,\
+ org.eclipse.core.commands,\
+ org.argeo.eclipse.ui.utils,\
+ !org.eclipse.core.runtime,\
+ !org.eclipse.ui.plugin,\
+ org.eclipse.swt,\
+ *
+
+Export-Package: org.argeo.*,\
+org.eclipse.rap.fileupload.*;version="3.4",\
+org.eclipse.rap.rwt.*;version="3.4"
+
+# Was !org.eclipse.core.commands,\ why ?
+
+#Bundle-Activator: org.argeo.eclipse.ui.ArgeoUiPlugin
+#Bundle-ActivationPolicy: lazy
+#Ignore-Package: org.eclipse.core.commands
\ No newline at end of file
--- /dev/null
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.slc.rcp</groupId>
+ <artifactId>argeo-rcp</artifactId>
+ <version>2.1.17-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>org.argeo.eclipse.ui.rcp</artifactId>
+ <name>Eclipse UI RCP</name>
+ <description>Provide RCP specific classes and behaviour in order to enable single sourcing</description>
+ <packaging>jar</packaging>
+ <dependencies>
+ <dependency>
+ <groupId>org.argeo.commons</groupId>
+ <artifactId>org.argeo.eclipse.ui</artifactId>
+ <version>${version.argeo-commons}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons</groupId>
+ <artifactId>org.argeo.util</artifactId>
+ <version>${version.argeo-commons}</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
--- /dev/null
+package org.argeo.eclipse.ui.rcp.internal.rwt;
+
+import org.eclipse.rap.rwt.client.Client;
+import org.eclipse.rap.rwt.client.service.BrowserNavigation;
+import org.eclipse.rap.rwt.client.service.BrowserNavigationListener;
+import org.eclipse.rap.rwt.client.service.ClientService;
+import org.eclipse.rap.rwt.client.service.JavaScriptExecutor;
+
+public class RcpClient implements Client {
+
+ @Override
+ public <T extends ClientService> T getService(Class<T> type) {
+ if (type.isAssignableFrom(JavaScriptExecutor.class))
+ return (T) javaScriptExecutor;
+ else if (type.isAssignableFrom(BrowserNavigation.class))
+ return (T) browserNavigation;
+ else
+ return null;
+ }
+
+ private JavaScriptExecutor javaScriptExecutor = new JavaScriptExecutor() {
+
+ @Override
+ public void execute(String code) {
+ // TODO Auto-generated method stub
+
+ }
+ };
+ private BrowserNavigation browserNavigation = new BrowserNavigation() {
+
+ @Override
+ public void pushState(String state, String title) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void addBrowserNavigationListener(
+ BrowserNavigationListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+ };
+}
--- /dev/null
+package org.argeo.eclipse.ui.rcp.internal.rwt;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.apache.commons.io.IOUtils;
+import org.eclipse.rap.rwt.service.ResourceManager;
+
+public class RcpResourceManager implements ResourceManager {
+ private Map<String, byte[]> register = Collections
+ .synchronizedMap(new TreeMap<String, byte[]>());
+
+ @Override
+ public void register(String name, InputStream in) {
+ try {
+ register.put(name, IOUtils.toByteArray(in));
+ } catch (IOException e) {
+ throw new RuntimeException("Cannot register " + name, e);
+ }
+ }
+
+ @Override
+ public boolean unregister(String name) {
+ return register.remove(name) != null;
+ }
+
+ @Override
+ public InputStream getRegisteredContent(String name) {
+ return new ByteArrayInputStream(register.get(name));
+ }
+
+ @Override
+ public String getLocation(String name) {
+ return name;
+ }
+
+ @Override
+ public boolean isRegistered(String name) {
+ return register.containsKey(name);
+ }
+
+}
--- /dev/null
+package org.argeo.eclipse.ui.specific;
+
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Shell;
+
+public class CmsFileDialog extends FileDialog {
+ public CmsFileDialog(Shell parent, int style) {
+ super(parent, style);
+ }
+
+ public CmsFileDialog(Shell parent) {
+ super(parent);
+ }
+
+}
--- /dev/null
+package org.argeo.eclipse.ui.specific;
+
+import org.eclipse.rap.rwt.widgets.FileUpload;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Composite;
+
+public class CmsFileUpload extends FileUpload {
+ public CmsFileUpload(Composite parent, int style) {
+ super(parent, style);
+ }
+
+ @Override
+ public void setText(String text) {
+ super.setText(text);
+ }
+
+ @Override
+ public String getFileName() {
+ return super.getFileName();
+ }
+
+ @Override
+ public String[] getFileNames() {
+ return super.getFileNames();
+ }
+
+ @Override
+ public void addSelectionListener(SelectionListener listener) {
+ super.addSelectionListener(listener);
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.argeo.eclipse.ui.specific;
+
+/** RCP specific {@link NLS} to be extended */
+public class DefaultNLS {// extends NLS {
+// public final static String DEFAULT_BUNDLE_LOCATION = "/properties/plugin";
+//
+// public DefaultNLS() {
+// this(DEFAULT_BUNDLE_LOCATION);
+// }
+//
+// public DefaultNLS(String bundleName) {
+// NLS.initializeMessages(bundleName, getClass());
+// }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.argeo.eclipse.ui.specific;
+
+import org.eclipse.jface.viewers.ColumnViewer;
+import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
+import org.eclipse.jface.viewers.Viewer;
+
+/** Static utilities to bridge differences between RCP and RAP */
+public class EclipseUiSpecificUtils {
+ /**
+ * TootlTip support is supported for {@link ColumnViewer} in RCP
+ *
+ * @see ColumnViewerToolTipSupport#enableFor(Viewer)
+ */
+ public static void enableToolTipSupport(Viewer viewer) {
+ if (viewer instanceof ColumnViewer)
+ ColumnViewerToolTipSupport.enableFor((ColumnViewer) viewer);
+ }
+
+ private EclipseUiSpecificUtils() {
+ }
+}
--- /dev/null
+package org.argeo.eclipse.ui.specific;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTarget;
+import org.eclipse.swt.dnd.DropTargetAdapter;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Control;
+
+public class FileDropAdapter {
+
+ public void prepareDropTarget(Control control, DropTarget dropTarget) {
+ dropTarget.setTransfer(new Transfer[] { FileTransfer.getInstance() });
+ dropTarget.addDropListener(new DropTargetAdapter() {
+ @Override
+ public void dropAccept(DropTargetEvent event) {
+ if (!FileTransfer.getInstance().isSupportedType(event.currentDataType)) {
+ event.detail = DND.DROP_NONE;
+ }
+ }
+
+ @Override
+ public void drop(DropTargetEvent event) {
+ handleFileDrop(control, event);
+ }
+ });
+ }
+
+ public void handleFileDrop(Control control, DropTargetEvent event) {
+ String fileList[] = null;
+ FileTransfer ft = FileTransfer.getInstance();
+ if (ft.isSupportedType(event.currentDataType)) {
+ fileList = (String[]) event.data;
+ }
+ System.out.println(Arrays.toString(fileList));
+ }
+
+ /** Executed in UI thread */
+ protected void processUpload(InputStream in, String fileName, String contentType) throws IOException {
+
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.argeo.eclipse.ui.specific;
+
+import static org.argeo.eclipse.ui.utils.SingleSourcingConstants.FILE_SCHEME;
+import static org.argeo.eclipse.ui.utils.SingleSourcingConstants.SCHEME_HOST_SEPARATOR;
+
+import java.awt.Desktop;
+import java.io.File;
+import java.io.IOException;
+
+import org.argeo.eclipse.ui.utils.SingleSourcingConstants;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+
+/**
+ * RCP specific command handler to open a file.
+ *
+ * The parameter "URI" is used to determine the correct method to open it.
+ *
+ * Various instances of this handler with different command ID might coexist in
+ * order to provide context specific open file services.
+ *
+ */
+public class OpenFile extends AbstractHandler {
+ // private final static Log log = LogFactory.getLog(OpenFile.class);
+ public final static String ID = SingleSourcingConstants.OPEN_FILE_CMD_ID;
+ public final static String PARAM_FILE_NAME = SingleSourcingConstants.PARAM_FILE_NAME;
+ public final static String PARAM_FILE_URI = SingleSourcingConstants.PARAM_FILE_URI;
+
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ String fileUri = event.getParameter(PARAM_FILE_URI);
+
+ // sanity check
+ if (fileUri == null || "".equals(fileUri.trim()))
+ return null;
+
+ Desktop desktop = null;
+ if (Desktop.isDesktopSupported()) {
+ desktop = Desktop.getDesktop();
+ }
+
+ File file = getFileFromUri(fileUri);
+ if (file != null)
+ try {
+ desktop.open(file);
+ } catch (IOException e) {
+ throw new SingleSourcingException("Unable to open file with URI: " + fileUri, e);
+ }
+ return null;
+ }
+
+ protected File getFileFromUri(String uri) {
+ if (uri.startsWith(FILE_SCHEME)) {
+ String path = uri.substring((FILE_SCHEME + SCHEME_HOST_SEPARATOR).length());
+ return new File(path);
+ }
+ return null;
+ }
+}
--- /dev/null
+package org.argeo.eclipse.ui.specific;
+
+/** Exception related to SWT/RWT single sourcing. */
+public class SingleSourcingException extends RuntimeException {
+ private static final long serialVersionUID = -727700418055348468L;
+
+ public SingleSourcingException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public SingleSourcingException(String message) {
+ super(message);
+ }
+
+}
--- /dev/null
+package org.argeo.eclipse.ui.specific;
+
+import java.util.Locale;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.swt.widgets.Display;
+
+/** Singleton class providing single sources infos about the UI context. */
+public class UiContext {
+
+ public static HttpServletRequest getHttpRequest() {
+ return null;
+ }
+
+ public static HttpServletResponse getHttpResponse() {
+ return null;
+ }
+
+ public static Locale getLocale() {
+ return Locale.getDefault();
+ }
+
+ public static void setLocale(Locale locale) {
+ Locale.setDefault(locale);
+ }
+
+ /** Can always be null */
+ @SuppressWarnings("unchecked")
+ public static <T> T getData(String key) {
+ Display display = getDisplay();
+ if (display == null)
+ return null;
+ return (T) display.getData(key);
+ }
+
+ public static void setData(String key, Object value) {
+ Display display = getDisplay();
+ if (display == null)
+ throw new SingleSourcingException(
+ "Not display available in RAP context");
+ display.setData(key, value);
+ }
+
+ private static Display getDisplay() {
+ return Display.getCurrent();
+ }
+
+ private UiContext() {
+ }
+
+}
--- /dev/null
+package org.argeo.swt.desktop;
+
+import java.util.Observable;
+import java.util.function.BiFunction;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.browser.LocationAdapter;
+import org.eclipse.swt.browser.LocationEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/** A minimalistic web browser based on {@link Browser}. */
+public class MiniBrowser implements BiFunction<Composite, MiniBrowser.Context, Control> {
+ @Override
+ public Control apply(Composite parent, MiniBrowser.Context context) {
+ parent.setLayout(new GridLayout());
+ Control toolBar = createToolBar(parent, context);
+ toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ Control body = createBody(parent, context);
+ body.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ return body;
+ }
+
+ public Control createToolBar(Composite parent, MiniBrowser.Context context) {
+ Composite toolBar = new Composite(parent, SWT.NONE);
+ toolBar.setLayout(new FillLayout());
+ Text addressT = new Text(toolBar, SWT.SINGLE | SWT.BORDER);
+ addressT.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ String url = addressT.getText().trim();
+ context.setUrl(url);
+ }
+ });
+ context.addObserver((o, v) -> addressT.setText(((Context) o).getUrl().toString()));
+ return toolBar;
+ }
+
+ public Control createBody(Composite parent, MiniBrowser.Context context) {
+ Browser browser = new Browser(parent, SWT.WEBKIT);
+ browser.addLocationListener(new LocationAdapter() {
+ @Override
+ public void changing(LocationEvent event) {
+ if (!context.getUrl().equals(event.location))
+ context.setUrl(event.location);
+ }
+ });
+ browser.addTitleListener(e -> context.setTitle(e.title));
+ context.addObserver((o, v) -> {
+ String url = ((Context) o).getUrl();
+ if (!url.equals(browser.getUrl()))
+ browser.setUrl(url.toString());
+ });
+ return browser;
+ }
+
+ /** The observable context of this web browser. */
+ public static class Context extends Observable {
+ private String url;
+ private String title = "";
+
+ public void setUrl(String url) {
+ this.url = url;
+ System.out.println(url);
+ setChanged();
+ notifyObservers(url);
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ setChanged();
+ notifyObservers(title);
+ }
+
+ }
+
+ public static void main(String[] args) {
+ Display display = Display.getCurrent() == null ? new Display() : Display.getCurrent();
+ Shell shell = new Shell(display, SWT.SHELL_TRIM);
+
+ MiniBrowser miniBrowser = new MiniBrowser();
+ MiniBrowser.Context context = new MiniBrowser.Context();
+ miniBrowser.apply(shell, context);
+ context.addObserver((o, v) -> shell.setText(((Context) o).getTitle()));
+ String url = args.length > 0 ? args[0] : "http://www.argeo.org";
+ context.setUrl(url);
+
+ shell.open();
+ shell.setSize(new Point(800, 480));
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+ }
+
+}
--- /dev/null
+package org.argeo.swt.desktop;
+
+import java.io.IOException;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.program.Program;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+
+public class MiniExplorer {
+ private Path url;
+ private Text addressT;
+ private Table browser;
+
+ private boolean showHidden = false;
+
+ public MiniExplorer(Composite parent, int style) {
+ parent.setLayout(new GridLayout());
+
+ Composite toolBar = new Composite(parent, SWT.NONE);
+ toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ toolBar.setLayout(new FillLayout());
+ addressT = new Text(toolBar, SWT.SINGLE | SWT.BORDER);
+ // addressT.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ addressT.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ setUrl(addressT.getText().trim());
+ }
+ });
+ browser = createTable(parent, this.url);
+
+ }
+
+ public void setUrl(Path url) {
+ this.url = url;
+ if (addressT != null)
+ addressT.setText(url.toString());
+ if (browser != null) {
+ Composite parent = browser.getParent();
+ browser.dispose();
+ browser = createTable(parent, this.url);
+ parent.layout(true, true);
+ }
+ }
+
+ protected Table createTable(Composite parent, Path path) {
+ Table table = new Table(parent, SWT.BORDER);
+ table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ table.addMouseListener(new MouseAdapter() {
+
+ @Override
+ public void mouseDoubleClick(MouseEvent e) {
+ Point pt = new Point(e.x, e.y);
+ TableItem item = table.getItem(pt);
+ Path path = (Path) item.getData();
+ if (Files.isDirectory(path)) {
+ setUrl(path);
+ } else {
+ Program.launch(path.toString());
+ }
+ }
+ });
+
+ if (path != null) {
+ if (path.getParent() != null) {
+ TableItem parentTI = new TableItem(table, SWT.NONE);
+ parentTI.setText("..");
+ parentTI.setData(path.getParent());
+ }
+
+ try {
+ // directories
+ DirectoryStream<Path> ds = Files.newDirectoryStream(url, p -> Files.isDirectory(p) && isShown(p));
+ ds.forEach(p -> {
+ TableItem ti = new TableItem(table, SWT.NONE);
+ ti.setText(p.getFileName().toString() + "/");
+ ti.setData(p);
+ });
+ // files
+ ds = Files.newDirectoryStream(url, p -> !Files.isDirectory(p) && isShown(p));
+ ds.forEach(p -> {
+ TableItem ti = new TableItem(table, SWT.NONE);
+ ti.setText(p.getFileName().toString());
+ ti.setData(p);
+ });
+ } catch (IOException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ }
+ return table;
+ }
+
+ protected boolean isShown(Path path) {
+ if (showHidden)
+ return true;
+ try {
+ return !Files.isHidden(path);
+ } catch (IOException e) {
+ throw new IllegalArgumentException("Cannot check " + path, e);
+ }
+ }
+
+ public void setUrl(String url) {
+ setUrl(Paths.get(url));
+ }
+
+ public static void main(String[] args) {
+ Display display = Display.getCurrent() == null ? new Display() : Display.getCurrent();
+ Shell shell = new Shell(display, SWT.SHELL_TRIM);
+
+ MiniExplorer miniBrowser = new MiniExplorer(shell, SWT.NONE);
+ String url = args.length > 0 ? args[0] : System.getProperty("user.home");
+ miniBrowser.setUrl(url);
+
+ shell.open();
+ shell.setSize(new Point(800, 480));
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+ }
+
+}
--- /dev/null
+package org.argeo.swt.desktop;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.ImageLoader;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Shell;
+
+public class MiniImageViewer implements PaintListener {
+ private URL url;
+ private Canvas area;
+
+ private Image image;
+
+ public MiniImageViewer(Composite parent, int style) {
+ parent.setLayout(new GridLayout());
+
+ Composite toolBar = new Composite(parent, SWT.NONE);
+ toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ toolBar.setLayout(new RowLayout());
+ Button load = new Button(toolBar, SWT.FLAT);
+ load.setText("\u2191");// up arrow
+ load.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ FileDialog fileDialog = new FileDialog(area.getShell());
+ String path = fileDialog.open();
+ if (path != null) {
+ setUrl(path);
+ }
+ }
+
+ });
+
+ area = new Canvas(parent, SWT.NONE);
+ area.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ area.addPaintListener(this);
+ }
+
+ protected void load(URL url) {
+ try {
+ ImageLoader imageLoader = new ImageLoader();
+ ImageData[] data = imageLoader.load(url.openStream());
+ image = new Image(area.getDisplay(), data[0]);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void paintControl(PaintEvent e) {
+ e.gc.drawImage(image, 0, 0);
+
+ }
+
+ protected Path url2path(URL url) {
+ try {
+ Path path = Paths.get(url.toURI());
+ return path;
+ } catch (URISyntaxException e) {
+ throw new IllegalStateException("Cannot convert " + url + " to uri", e);
+ }
+ }
+
+ public void setUrl(URL url) {
+ this.url = url;
+ if (area != null)
+ load(this.url);
+ }
+
+ public void setUrl(String url) {
+ try {
+ setUrl(new URL(url));
+ } catch (MalformedURLException e) {
+ // try with http
+ try {
+ setUrl(new URL("file://" + url));
+ return;
+ } catch (MalformedURLException e1) {
+ // nevermind...
+ }
+ throw new IllegalArgumentException("Cannot interpret URL " + url, e);
+ }
+ }
+
+ public static void main(String[] args) {
+ Display display = Display.getCurrent() == null ? new Display() : Display.getCurrent();
+ Shell shell = new Shell(display, SWT.SHELL_TRIM);
+
+ MiniImageViewer miniBrowser = new MiniImageViewer(shell, SWT.NONE);
+ String url = args.length > 0 ? args[0] : "";
+ if (!url.trim().equals("")) {
+ miniBrowser.setUrl(url);
+ shell.setText(url);
+ } else {
+ shell.setText("*");
+ }
+
+ shell.open();
+ shell.setSize(new Point(800, 480));
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+ }
+
+}
--- /dev/null
+package org.argeo.swt.desktop;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Caret;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+public class MiniTerminal implements KeyListener, PaintListener {
+
+ private Canvas area;
+ private Caret caret;
+
+ private StringBuffer buf = new StringBuffer("");
+ private StringBuffer userInput = new StringBuffer("");
+ private List<String> history = new ArrayList<>();
+
+ private Point charExtent = null;
+ private int charsPerLine = 0;
+ private String[] lines = new String[0];
+ private List<String> logicalLines = new ArrayList<>();
+
+ private Font mono;
+ private Charset charset;
+
+ private Path currentDir;
+ private Path homeDir;
+ private String host = "localhost";
+ private String username;
+
+ private boolean running = false;
+ private OutputStream stdIn = null;
+
+ public MiniTerminal(Composite parent, int style) {
+ charset = StandardCharsets.UTF_8;
+
+ Display display = parent.getDisplay();
+ // Linux-specific
+ mono = new Font(display, "Monospace", 10, SWT.NONE);
+
+ parent.setLayout(new GridLayout());
+ area = new Canvas(parent, SWT.NONE);
+ area.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ caret = new Caret(area, SWT.NONE);
+ area.setCaret(caret);
+
+ area.addKeyListener(this);
+ area.addPaintListener(this);
+
+ username = System.getProperty("user.name");
+ try {
+ host = InetAddress.getLocalHost().getHostName();
+ if (host.indexOf('.') > 0)
+ host = host.substring(0, host.indexOf('.'));
+ } catch (UnknownHostException e) {
+ host = "localhost";
+ }
+ homeDir = Paths.get(System.getProperty("user.home"));
+ currentDir = homeDir;
+
+ buf = new StringBuffer(prompt());
+ }
+
+ @Override
+ public void keyPressed(KeyEvent e) {
+ }
+
+ @Override
+ public void keyReleased(KeyEvent e) {
+ if (e.keyLocation != 0)
+ return;// weird characters
+ // System.out.println(e.character);
+ if (e.keyCode == 0xd) {// return
+ markLogicalLine();
+ if (!running)
+ processUserInput();
+ // buf.append(prompt());
+ } else if (e.keyCode == 0x8) {// delete
+ if (userInput.length() == 0)
+ return;
+ userInput.setLength(userInput.length() - 1);
+ if (!running && buf.length() > 0)
+ buf.setLength(buf.length() - 1);
+ } else {
+ // if (!running)
+ buf.append(e.character);
+ userInput.append(e.character);
+ }
+
+ if (area.isDisposed())
+ return;
+ area.redraw();
+ // System.out.println("Append " + e);
+
+ if (running) {
+ if (stdIn != null) {
+ try {
+ stdIn.write(Character.toString(e.character).getBytes(charset));
+ } catch (IOException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ }
+ }
+ }
+
+ protected String prompt() {
+ String fileName = currentDir.equals(homeDir) ? "~" : currentDir.getFileName().toString();
+ String end = username.equals("root") ? "]# " : "]$ ";
+ return "[" + username + "@" + host + " " + fileName + end;
+ }
+
+ private void displayPrompt() {
+ buf.append(prompt() + userInput);
+ }
+
+ protected void markLogicalLine() {
+ String str = buf.toString().trim();
+ logicalLines.add(str);
+ buf = new StringBuffer("");
+ }
+
+ private void processUserInput() {
+ String cmd = userInput.toString();
+ userInput = new StringBuffer("");
+ processUserInput(cmd);
+ history.add(cmd);
+ }
+
+ protected void processUserInput(String input) {
+ try {
+ StringTokenizer st = new StringTokenizer(input);
+ List<String> args = new ArrayList<>();
+ while (st.hasMoreTokens())
+ args.add(st.nextToken());
+ if (args.size() == 0) {
+ displayPrompt();
+ return;
+ }
+
+ // change directory
+ if (args.get(0).equals("cd")) {
+ if (args.size() == 1) {
+ setPath(homeDir);
+ } else {
+ Path newPath = currentDir.resolve(args.get(1));
+ if (!Files.exists(newPath) || !Files.isDirectory(newPath)) {
+ println(newPath + ": No such file or directory");
+ return;
+ }
+ setPath(newPath);
+ }
+ displayPrompt();
+ return;
+ }
+ // show current directory
+ else if (args.get(0).equals("pwd")) {
+ println(currentDir);
+ displayPrompt();
+ return;
+ }
+ // exit
+ else if (args.get(0).equals("exit")) {
+ println("logout");
+ area.getShell().dispose();
+ return;
+ }
+
+ ProcessBuilder pb = new ProcessBuilder(args);
+ pb.redirectErrorStream(true);
+ pb.directory(currentDir.toFile());
+// Process process = Runtime.getRuntime().exec(input, null, currentPath.toFile());
+ Process process = pb.start();
+
+ stdIn = process.getOutputStream();
+ Thread readOut = new Thread("Read out") {
+ @Override
+ public void run() {
+ running = true;
+ try (BufferedReader in = new BufferedReader(
+ new InputStreamReader(process.getInputStream(), charset))) {
+ String line = null;
+ while ((line = in.readLine()) != null) {
+ println(line);
+ }
+ } catch (IOException e) {
+ println(e.getMessage());
+ }
+ stdIn = null;
+ displayPrompt();
+ running = false;
+ }
+ };
+ readOut.start();
+ } catch (IOException e) {
+ println(e.getMessage());
+ displayPrompt();
+ }
+ }
+
+ protected int linesForLogicalLine(char[] line) {
+ return line.length / charsPerLine + 1;
+ }
+
+ protected void println(Object line) {
+ buf.append(line);
+ markLogicalLine();
+ }
+
+ protected void refreshLines(int charPerLine, int nbrOfLines) {
+ if (lines.length != nbrOfLines) {
+ lines = new String[nbrOfLines];
+ Arrays.fill(lines, null);
+ }
+ if (this.charsPerLine != charPerLine)
+ this.charsPerLine = charPerLine;
+
+ int currentLine = nbrOfLines - 1;
+ // current line
+ if (buf.length() > 0) {
+ lines[currentLine] = buf.toString();
+ } else {
+ lines[currentLine] = "";
+ }
+ currentLine--;
+
+ logicalLines: for (int i = logicalLines.size() - 1; i >= 0; i--) {
+ char[] logicalLine = logicalLines.get(i).toCharArray();
+ int linesNeeded = linesForLogicalLine(logicalLine);
+ for (int j = linesNeeded - 1; j >= 0; j--) {
+ int from = j * charPerLine;
+ int to = j == linesNeeded - 1 ? from + charPerLine : Math.min(from + charPerLine, logicalLine.length);
+ lines[currentLine] = new String(Arrays.copyOfRange(logicalLine, from, to));
+// System.out.println("Set line " + currentLine + " to : " + lines[currentLine]);
+ currentLine--;
+ if (currentLine < 0)
+ break logicalLines;
+ }
+ }
+ }
+
+ @Override
+ public void paintControl(PaintEvent e) {
+ GC gc = e.gc;
+ gc.setFont(mono);
+ if (charExtent == null)
+ charExtent = gc.textExtent("a");
+
+ Point areaSize = area.getSize();
+ int charPerLine = areaSize.x / charExtent.x;
+ int nbrOfLines = areaSize.y / charExtent.y;
+ refreshLines(charPerLine, nbrOfLines);
+
+ for (int i = 0; i < lines.length; i++) {
+ String line = lines[i];
+ if (line != null)
+ gc.drawString(line, 0, i * charExtent.y);
+ }
+// String toDraw = buf.toString();
+// gc.drawString(toDraw, 0, 0);
+// area.setCaret(caret);
+ }
+
+ public void setPath(String path) {
+ this.currentDir = Paths.get(path);
+ }
+
+ public void setPath(Path path) {
+ this.currentDir = path;
+ }
+
+ public static void main(String[] args) {
+ Display display = Display.getCurrent() == null ? new Display() : Display.getCurrent();
+ Shell shell = new Shell(display, SWT.SHELL_TRIM);
+
+ MiniTerminal miniBrowser = new MiniTerminal(shell, SWT.NONE);
+ String url = args.length > 0 ? args[0] : System.getProperty("user.home");
+ miniBrowser.setPath(url);
+
+ shell.open();
+ shell.setSize(new Point(800, 480));
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+ }
+
+}
--- /dev/null
+package org.argeo.swt.desktop;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+public class MiniTextEditor {
+ private URL url;
+ private Text text;
+
+ public MiniTextEditor(Composite parent, int style) {
+ parent.setLayout(new GridLayout());
+
+ Composite toolBar = new Composite(parent, SWT.NONE);
+ toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ toolBar.setLayout(new RowLayout());
+ Button load = new Button(toolBar, SWT.FLAT);
+ load.setText("\u2191");// up arrow
+ load.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ FileDialog fileDialog = new FileDialog(text.getShell());
+ String path = fileDialog.open();
+ if (path != null) {
+ setUrl(path);
+ }
+ }
+
+ });
+
+ Button save = new Button(toolBar, SWT.FLAT);
+ save.setText("\u2193");// down arrow
+ // save.setText("\u1F609");// emoji
+ save.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ save(url);
+ }
+
+ });
+
+ text = new Text(parent, SWT.WRAP | SWT.MULTI | SWT.BORDER | SWT.V_SCROLL);
+ text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ }
+
+ protected void load(URL url) {
+ text.setText("");
+ // TODO deal with encoding and binary data
+ try (BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8))) {
+ String line = null;
+ while ((line = in.readLine()) != null) {
+ text.append(line + "\n");
+ }
+ text.setEditable(true);
+ } catch (IOException e) {
+ if (e instanceof FileNotFoundException) {
+ Path path = url2path(url);
+ try {
+ Files.createFile(path);
+ load(url);
+ return;
+ } catch (IOException e1) {
+ e = e1;
+ }
+ }
+ text.setText(e.getMessage());
+ text.setEditable(false);
+ e.printStackTrace();
+ // throw new IllegalStateException("Cannot load " + url, e);
+ }
+ }
+
+ protected Path url2path(URL url) {
+ try {
+ Path path = Paths.get(url.toURI());
+ return path;
+ } catch (URISyntaxException e) {
+ throw new IllegalStateException("Cannot convert " + url + " to uri", e);
+ }
+ }
+
+ protected void save(URL url) {
+ if (!url.getProtocol().equals("file"))
+ throw new IllegalArgumentException(url.getProtocol() + " protocol is not supported for write");
+ Path path = url2path(url);
+ try (BufferedWriter out = new BufferedWriter(new OutputStreamWriter(Files.newOutputStream(path)))) {
+ out.write(text.getText());
+ } catch (IOException e) {
+ throw new IllegalStateException("Cannot save " + url + " to " + path, e);
+ }
+ }
+
+ public void setUrl(URL url) {
+ this.url = url;
+ if (text != null)
+ load(url);
+ }
+
+ public void setUrl(String url) {
+ try {
+ setUrl(new URL(url));
+ } catch (MalformedURLException e) {
+ // try with http
+ try {
+ setUrl(new URL("file://" + url));
+ return;
+ } catch (MalformedURLException e1) {
+ // nevermind...
+ }
+ throw new IllegalArgumentException("Cannot interpret URL " + url, e);
+ }
+ }
+
+ public static void main(String[] args) {
+ Display display = Display.getCurrent() == null ? new Display() : Display.getCurrent();
+ Shell shell = new Shell(display, SWT.SHELL_TRIM);
+
+ MiniTextEditor miniBrowser = new MiniTextEditor(shell, SWT.NONE);
+ String url = args.length > 0 ? args[0] : "";
+ if (!url.trim().equals("")) {
+ miniBrowser.setUrl(url);
+ shell.setText(url);
+ } else {
+ shell.setText("*");
+ }
+
+ shell.open();
+ shell.setSize(new Point(800, 480));
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+ }
+
+}
--- /dev/null
+package org.eclipse.rap.fileupload;
+
+public interface FileDetails {
+ String getContentType();
+
+ long getContentLength();
+
+ String getFileName();
+}
--- /dev/null
+package org.eclipse.rap.fileupload;
+
+import java.util.EventObject;
+
+public abstract class FileUploadEvent extends EventObject {
+
+ private static final long serialVersionUID = 1L;
+
+ protected FileUploadEvent(FileUploadHandler source) {
+ super(source);
+ }
+
+ public abstract FileDetails[] getFileDetails();
+
+ public abstract long getContentLength();
+
+ public abstract long getBytesRead();
+
+ public abstract Exception getException();
+
+}
--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2011, 2012 EclipseSource and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * EclipseSource - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.rap.fileupload;
+
+/**
+ * A file upload handler is used to accept file uploads from a client. After
+ * creating a file upload handler, the server will accept file uploads to the
+ * URL returned by <code>getUploadUrl()</code>. Upload listeners can be attached
+ * to react on progress. When the upload has finished, a FileUploadHandler has
+ * to be disposed of by calling its <code>dispose()</code> method.
+ *
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class FileUploadHandler {
+
+ public FileUploadHandler(FileUploadReceiver fileUploadReceiver) {
+ }
+
+ public void dispose() {
+
+ }
+
+ public void addUploadListener(FileUploadListener listener) {
+
+ }
+
+ public String getUploadUrl() {
+ return null;
+ }
+}
--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2011, 2012 EclipseSource and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * EclipseSource - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.rap.fileupload;
+
+import org.eclipse.swt.widgets.Display;
+
+
+/**
+ * Listener to react on progress and completion of a file upload.
+ * <p>
+ * <strong>Note:</strong> This listener will be called from a different thread than the UI thread.
+ * Implementations must use {@link Display#asyncExec(Runnable)} to access the UI.
+ * </p>
+ *
+ * @see FileUploadEvent
+ */
+public interface FileUploadListener {
+
+ /**
+ * Called when new information about an in-progress upload is available.
+ *
+ * @param event event object that contains information about the uploaded file
+ * @see FileUploadEvent#getBytesRead()
+ */
+ void uploadProgress( FileUploadEvent event );
+
+ /**
+ * Called when a file upload has finished successfully.
+ *
+ * @param event event object that contains information about the uploaded file
+ * @see FileUploadEvent
+ */
+ void uploadFinished( FileUploadEvent event );
+
+ /**
+ * Called when a file upload failed.
+ *
+ * @param event event object that contains information about the uploaded file
+ * @see FileUploadEvent#getErrorMessage()
+ */
+ void uploadFailed( FileUploadEvent event );
+
+}
--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2011, 2013 EclipseSource and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * EclipseSource - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.rap.fileupload;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+
+/**
+ * Instances of this interface are responsible for reading and processing the data from a file
+ * upload.
+ */
+public abstract class FileUploadReceiver {
+
+ /**
+ * Reads and processes all data from the provided input stream.
+ *
+ * @param stream the stream to read from
+ * @param details the details of the uploaded file like file name, content-type and size
+ * @throws IOException if an input / output error occurs
+ */
+ public abstract void receive( InputStream stream, FileDetails details ) throws IOException;
+
+}
--- /dev/null
+package org.eclipse.rap.rwt;
+
+import java.util.Locale;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.argeo.eclipse.ui.rcp.internal.rwt.RcpClient;
+import org.argeo.eclipse.ui.rcp.internal.rwt.RcpResourceManager;
+import org.eclipse.rap.rwt.client.Client;
+import org.eclipse.rap.rwt.service.ResourceManager;
+
+public class RWT {
+ public final static String CUSTOM_VARIANT = "argeo-rcp:CUSTOM_VARIANT";
+ public final static String MARKUP_ENABLED = "argeo-rcp:MARKUP_ENABLED";
+ public final static String CUSTOM_ITEM_HEIGHT = "argeo-rcp:CUSTOM_ITEM_HEIGHT";
+ public final static String ACTIVE_KEYS = "argeo-rcp:ACTIVE_KEYS";
+ public final static String CANCEL_KEYS = "argeo-rcp:CANCEL_KEYS";
+ public final static String DEFAULT_THEME_ID = "argeo-rcp:DEFAULT_THEME_ID";
+
+ public final static int HYPERLINK = 0;
+
+ private static Locale locale = Locale.getDefault();
+ private static RcpClient client = new RcpClient();
+ private static ResourceManager resourceManager = new RcpResourceManager();
+ static {
+
+ }
+
+ public static Locale getLocale() {
+ return locale;
+ }
+
+ public static HttpServletRequest getRequest() {
+ return null;
+ }
+
+ public static ResourceManager getResourceManager() {
+ return resourceManager;
+ }
+
+ public static Client getClient() {
+ return client;
+ }
+}
--- /dev/null
+package org.eclipse.rap.rwt;
+
+public class SingletonUtil {
+ public static <T> T getSessionInstance(Class<T> clss) {
+ return null;
+ }
+}
--- /dev/null
+package org.eclipse.rap.rwt.application;
+
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+public abstract class AbstractEntryPoint implements EntryPoint {
+ private Display display;
+ private Shell shell;
+
+ protected Shell createShell(Display display) {
+ return new Shell(display);
+ }
+
+ protected void createContents(Composite parent) {
+
+ }
+
+ public int createUI() {
+ display = new Display();
+ shell = createShell(display);
+ shell.setLayout(new GridLayout(1, false));
+ createContents(shell);
+ if (shell.getMaximized()) {
+ shell.layout();
+ } else {
+ shell.pack();
+ }
+ shell.open();
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch()) {
+ display.sleep();
+ }
+ }
+ display.dispose();
+ return 0;
+ }
+
+ protected Shell getShell() {
+ return shell;
+ }
+}
--- /dev/null
+package org.eclipse.rap.rwt.application;
+
+import java.util.Map;
+
+import org.eclipse.rap.rwt.service.ResourceLoader;
+
+public interface Application {
+ public static enum OperationMode {
+ JEE_COMPATIBILITY, SWT_COMPATIBILITY,
+ }
+
+ void setOperationMode(OperationMode operationMode);
+
+ void addResource(String name, ResourceLoader resourceLoader);
+
+ void setExceptionHandler(ExceptionHandler exceptionHandler);
+
+ void addEntryPoint(String path, EntryPointFactory entryPointFactory,
+ Map<String, String> properties);
+
+ void addEntryPoint(String path, Class<? extends EntryPoint> entryPoint,
+ Map<String, String> properties);
+
+ void addStyleSheet(String themeId, String styleSheetLocation,
+ ResourceLoader resourceLoader);
+
+}
--- /dev/null
+package org.eclipse.rap.rwt.application;
+
+public interface ApplicationConfiguration {
+ void configure(Application application);
+}
--- /dev/null
+package org.eclipse.rap.rwt.application;
+
+public interface EntryPoint {
+ int createUI();
+}
--- /dev/null
+package org.eclipse.rap.rwt.application;
+
+public interface EntryPointFactory {
+ public EntryPoint create();
+}
--- /dev/null
+package org.eclipse.rap.rwt.application;
+
+public interface ExceptionHandler {
+ public void handleException(Throwable throwable);
+}
--- /dev/null
+package org.eclipse.rap.rwt.client;
+
+import java.io.Serializable;
+
+import org.eclipse.rap.rwt.client.service.ClientService;
+
+public interface Client extends Serializable {
+
+ /**
+ * Returns this client's implementation of a given service, if available.
+ *
+ * @param type the type of the requested service, must be a subtype of ClientService
+ * @return the requested service if provided by this client, otherwise <code>null</code>
+ * @see ClientService
+ */
+ <T extends ClientService> T getService( Class<T> type );
+
+}
\ No newline at end of file
--- /dev/null
+package org.eclipse.rap.rwt.client;
+
+public interface WebClient {
+ public final static String FAVICON = "rcp:FAVICON";
+ public final static String PAGE_TITLE = "rcp:PAGE_TITLE";
+ public final static String BODY_HTML = "rcp:BODY_HTML";
+ public final static String THEME_ID = "rcp:THEME_ID";
+ public final static String HEAD_HTML = "rcp:HEAD_HTML";
+ public final static String PAGE_OVERFLOW = "rcp:PAGE_OVERFLOW";
+}
--- /dev/null
+package org.eclipse.rap.rwt.client.service;
+
+public interface BrowserNavigation extends ClientService {
+ void pushState(String state, String title);
+
+ void addBrowserNavigationListener(BrowserNavigationListener listener);
+}
--- /dev/null
+package org.eclipse.rap.rwt.client.service;
+
+public class BrowserNavigationEvent {
+ private String state;
+
+ public String getState() {
+ return state;
+ }
+
+}
--- /dev/null
+package org.eclipse.rap.rwt.client.service;
+
+public interface BrowserNavigationListener {
+ public void navigated(BrowserNavigationEvent event);
+}
--- /dev/null
+package org.eclipse.rap.rwt.client.service;
+
+import java.io.Serializable;
+
+public interface ClientService extends Serializable {
+}
--- /dev/null
+package org.eclipse.rap.rwt.client.service;
+
+public interface JavaScriptExecutor extends ClientService {
+ public void execute( String code );
+}
--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * EclipseSource - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.rap.rwt.client.service;
+
+/**
+ * The UrlLauncher service allows loading an URL in an external window, application or save dialog.
+ *
+ * @since 2.0
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface UrlLauncher extends ClientService {
+
+ /**
+ * Opens the given URL.
+ *
+ * Any HTTP URL or relative URL will be opened in a new window.
+ * Modern browser may block any attempt to open new windows, but will usually prompt the user to
+ * accept or ignore. Even if accepted, the decision may be applied to only this attempt, or only
+ * to future attempts. It could also trigger a document reload, causing a session restart.
+ *
+ * Non-HTTP URLs like "mailto" will not create a new browser window, but require the client
+ * to have a matching protocol handler registered.
+ *
+ * @param url the URL to open
+ */
+ void openURL( String url );
+
+}
--- /dev/null
+package org.eclipse.rap.rwt.service;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public interface ResourceLoader {
+ public InputStream getResourceAsStream(String resourceName)
+ throws IOException;
+}
--- /dev/null
+package org.eclipse.rap.rwt.service;
+
+import java.io.InputStream;
+
+public interface ResourceManager {
+ public void register(String name, InputStream in);
+
+ boolean unregister(String name);
+
+ public InputStream getRegisteredContent(String name);
+
+ public String getLocation(String name);
+
+ public boolean isRegistered(String name);
+}
--- /dev/null
+package org.eclipse.rap.rwt.service;
+
+/** Mock, does nothing as this is irrelevant for RCP. */
+public class ServerPushSession {
+ public void start() {
+
+ }
+
+ public void stop() {
+
+ }
+}
--- /dev/null
+package org.eclipse.rap.rwt.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Widget;
+
+public class DropDown {
+ private boolean visible=false;
+
+ public DropDown(Widget parent, int style) {
+ // FIXME implement a shell
+ }
+
+ public DropDown(Widget parent) {
+ this(parent, SWT.NONE);
+ }
+
+ public void setVisible(boolean visible) {
+ this.visible = visible;
+ }
+
+ public boolean isVisible() {
+ return visible;
+ }
+
+ public void setItems( String[] items ) {
+
+ }
+
+ public void setSelectionIndex( int selection ) {
+
+ }
+
+}
--- /dev/null
+package org.eclipse.rap.rwt.widgets;
+
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+
+public class FileUpload extends Composite {
+
+ public FileUpload(Composite parent, int style) {
+ super(parent, style);
+ }
+
+ public void addSelectionListener(SelectionListener listener) {
+
+ }
+
+ public void submit(String url) {
+
+ }
+
+ public void setImage(Image image) {
+
+ }
+
+ public void setText(String text) {
+
+ }
+
+ public String getFileName() {
+ return null;
+ }
+
+ public String[] getFileNames() {
+ return null;
+ }
+
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.slc</groupId>
+ <artifactId>argeo-slc</artifactId>
+ <version>2.1.17-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+ <groupId>org.argeo.slc.rcp</groupId>
+ <artifactId>argeo-rcp</artifactId>
+ <name>Argeo RCP</name>
+ <packaging>pom</packaging>
+ <modules>
+ <module>org.argeo.eclipse.ui.rcp</module>
+ <module>org.argeo.cms.desktop</module>
+ <module>org.argeo.cms.e4.rcp</module>
+ <module>dep</module>
+ <!-- <module>demo</module> -->
+ </modules>
+ <dependencies>
+ <dependency>
+ <groupId>org.argeo.tp</groupId>
+ <artifactId>argeo-tp</artifactId>
+ <version>${version.argeo-tp}</version>
+ <scope>provided</scope>
+ <exclusions>
+ <!-- Equinox base -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.equinox</groupId> -->
+ <!-- <artifactId>org.eclipse.osgi</artifactId> -->
+ <!-- </exclusion> -->
+ <!-- <exclusion> -->
+ <!-- <groupId>org.argeo.tp.equinox</groupId> -->
+ <!-- <artifactId>org.eclipse.osgi.services</artifactId> -->
+ <!-- </exclusion> -->
+
+ <!-- RAP UI -->
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.rap.ui.forms</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.rap.rwt</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.rap.jface</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.rap.ui</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.rap.ui.views</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.rap.ui.workbench</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.rap.rwt.osgi</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.rap.jface.databinding</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.core.jobs</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.core.expressions</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.core.databinding.observable</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.help</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.core.databinding</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.core.databinding.beans</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.core.runtime</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.core.databinding.property</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>com.ibm.icu.base</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.core.contenttype</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.core.commands</artifactId>
+ </exclusion>
+
+ <!-- Addons -->
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.rap.filedialog</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rap.platform</groupId>
+ <artifactId>org.eclipse.rap.fileupload</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp</groupId>
+ <artifactId>argeo-tp-rcp-e4</artifactId>
+ <version>${version.argeo-tp}</version>
+ <scope>provided</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.argeo.tp.rcp.platform</groupId>
+ <artifactId>org.eclipse.osgi</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.argeo.tp.rcp.platform</groupId>
+ <artifactId>org.eclipse.osgi.services</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.eclipse.ide</groupId> -->
+ <!-- <artifactId>org.eclipse.ui.forms</artifactId> -->
+ <!-- <version>3.7.101.v20170815-1446</version> -->
+ <!-- <scope>provided</scope> -->
+ <!-- </dependency> -->
+ </dependencies>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.argeo.tp</groupId>
+ <artifactId>argeo-tp-rcp-e4</artifactId>
+ <version>${version.argeo-tp}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>