]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Refactor SLC IDE
authorMathieu Baudier <mbaudier@argeo.org>
Mon, 29 Jan 2018 14:18:15 +0000 (15:18 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Mon, 29 Jan 2018 14:18:15 +0000 (15:18 +0100)
54 files changed:
ide/plugins/org.argeo.slc.ide.branding/META-INF/MANIFEST.MF
ide/plugins/org.argeo.slc.ide.branding/org.argeo.slc.ide.product
ide/plugins/org.argeo.slc.ide.branding/plugin.xml
ide/plugins/org.argeo.slc.ide.ui/.classpath
ide/plugins/org.argeo.slc.ide.ui/.gitignore
ide/plugins/org.argeo.slc.ide.ui/META-INF/MANIFEST.MF
ide/plugins/org.argeo.slc.ide.ui/bnd.bnd [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/pom.xml [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/DeployedSlcSystem.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/EmbeddedSlcSystem.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/SlcIdeUiPlugin.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/SlcMainPreferencePage.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/SlcPerspectiveFactory.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/SlcSystem.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLaunchConfiguration.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLaunchShortcut.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLauncherTabGroup.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiBootEquinoxLaunchConfiguration.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiBootLaunchShortcut.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiBootLauncherTabGroup.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiBootMainTab.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiLaunchHelper.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiLauncherConstants.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/preferences/SlcLaunchPreferencePage.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchConfigurationTab.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchConfigurationTabGroup.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchDelegate.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchShortcut.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchShortcutWithDialog.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptUtils.java [deleted file]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/DeployedSlcSystem.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/EmbeddedSlcSystem.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/SlcIdeUiPlugin.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/SlcMainPreferencePage.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/SlcPerspectiveFactory.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/SlcSystem.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLaunchConfiguration.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLaunchShortcut.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLauncherTabGroup.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiBootEquinoxLaunchConfiguration.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiBootLaunchShortcut.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiBootLauncherTabGroup.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiBootMainTab.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiLaunchHelper.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiLauncherConstants.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/preferences/SlcLaunchPreferencePage.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchConfigurationTab.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchConfigurationTabGroup.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchDelegate.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchShortcut.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchShortcutWithDialog.java [new file with mode: 0644]
ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptUtils.java [new file with mode: 0644]
ide/plugins/pom.xml [new file with mode: 0644]
ide/pom.xml [new file with mode: 0644]

index f1381c2c429f7307a1aea4337e553535a7009945..2c7c4a9fd4033d13f03aa3f360565425529baa57 100644 (file)
@@ -4,9 +4,9 @@ Bundle-Name: Argeo IDE
 Bundle-SymbolicName: org.argeo.slc.ide.branding;singleton:=true
 Bundle-Version: 1.1.1.D20121107_1340
 Bundle-Vendor: Argeo.org
-Require-Bundle: org.eclipse.ui;bundle-version="3.5.1",
- org.eclipse.osgi;bundle-version="3.5.1",
- org.eclipse.core.runtime;bundle-version="3.5.0",
- org.eclipse.jdt.ui;bundle-version="3.5.1",
- org.eclipse.ui.console;bundle-version="3.4.0"
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.osgi,
+ org.eclipse.core.runtime,
+ org.eclipse.jdt.ui,
+ org.eclipse.ui.console
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
index 0d93d1e40e512746bcce75d33c7027ef16833319..6561c4101094596b1c0e5e53c30fe6320399c5bb 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?pde version="3.5"?>
 
-<product name="Argeo SLC IDE" uid="org.argeo.slc.ide" id="org.argeo.slc.ide.branding.product" application="org.eclipse.ui.ide.workbench" version="0.12.1.D20100107_1317" useFeatures="false" includeLaunchers="true">
+<product name="Argeo SLC IDE" uid="org.argeo.slc.ide" id="org.argeo.slc.ide.branding.product" application="org.argeo.cms.ui.workbench.rcp.secureUi" version="2.1.11.D20171231" useFeatures="false" includeLaunchers="true">
 
    <aboutInfo>
       <image path="eclipse_lg.gif"/>
    </configIni>
 
    <launcherArgs>
+      <programArgs>-console
+      </programArgs>
+      <vmArgs>-Dargeo.osgi.start.2.node=org.eclipse.equinox.http.servlet,org.eclipse.equinox.http.jetty,org.eclipse.equinox.metatype,org.eclipse.equinox.cm,org.eclipse.rap.rwt.osgi -Dargeo.osgi.start.3.node=org.argeo.cms -Dargeo.osgi.start.4.apps=org.eclipse.gemini.blueprint.extender -Djava.security.manager= -Djava.security.policy=all.policy
+      </vmArgs>
       <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts
       </vmArgsMac>
    </launcherArgs>
@@ -27,7 +31,6 @@
       startupForegroundColor="0066D0" />
    <launcher name="ArgeoSLC">
       <linux icon="/org.argeo.slc.ide.branding/icons/argeo-icon-100104-256.xpm"/>
-      <solaris/>
       <win useIco="false">
          <bmp/>
       </win>
@@ -131,313 +134,549 @@ This Agreement is governed by the laws of the State of New York and the intellec
    </license>
 
    <plugins>
-      <plugin id="com.collabnet.subversion.merge"/>
+      <plugin id="EDU.oswego.cs.dl.util.concurrent"/>
+      <plugin id="EDU.oswego.cs.dl.util.concurrent.source"/>
+      <plugin id="argeo-tp-rcp"/>
+      <plugin id="bcmail"/>
+      <plugin id="bcmail.source"/>
+      <plugin id="bcpg"/>
+      <plugin id="bcpg.source"/>
+      <plugin id="bcpkix"/>
+      <plugin id="bcpkix.source"/>
+      <plugin id="bcprov"/>
+      <plugin id="bcprov.source"/>
+      <plugin id="bitronix.tm"/>
+      <plugin id="bitronix.tm.source"/>
+      <plugin id="biz.aQute.bnd"/>
+      <plugin id="biz.aQute.bnd.source"/>
+      <plugin id="ch.qos.logback.classic"/>
+      <plugin id="ch.qos.logback.core"/>
+      <plugin id="com.google.gson"/>
+      <plugin id="com.google.guava"/>
+      <plugin id="com.google.gwtorm"/>
+      <plugin id="com.google.inject"/>
+      <plugin id="com.google.inject.multibindings" fragment="true"/>
+      <plugin id="com.google.javascript"/>
+      <plugin id="com.google.protobuf"/>
+      <plugin id="com.googlecode.javaewah.JavaEWAH"/>
+      <plugin id="com.googlecode.javaewah.JavaEWAH.source"/>
+      <plugin id="com.gradleware.tooling.client"/>
+      <plugin id="com.gradleware.tooling.model"/>
+      <plugin id="com.gradleware.tooling.utils"/>
       <plugin id="com.ibm.icu"/>
+      <plugin id="com.ibm.icu.source"/>
       <plugin id="com.jcraft.jsch"/>
-      <plugin id="com.sun.jna"/>
-      <plugin id="java_cup.runtime"/>
-      <plugin id="javax.activation"/>
+      <plugin id="com.jcraft.jsch.source"/>
+      <plugin id="com.sun.el"/>
+      <plugin id="com.sun.el.source"/>
+      <plugin id="javaewah"/>
+      <plugin id="javax.annotation"/>
+      <plugin id="javax.annotation.source"/>
+      <plugin id="javax.el"/>
+      <plugin id="javax.el.source"/>
+      <plugin id="javax.inject"/>
+      <plugin id="javax.inject.source"/>
+      <plugin id="javax.jcr"/>
+      <plugin id="javax.jcr.source"/>
       <plugin id="javax.mail"/>
+      <plugin id="javax.mail.source"/>
       <plugin id="javax.servlet"/>
       <plugin id="javax.servlet.jsp"/>
-      <plugin id="javax.wsdl"/>
+      <plugin id="javax.servlet.jsp.source"/>
+      <plugin id="javax.servlet.source"/>
+      <plugin id="javax.transaction" fragment="true"/>
+      <plugin id="javax.transaction.source"/>
       <plugin id="javax.xml"/>
-      <plugin id="javax.xml.rpc"/>
-      <plugin id="javax.xml.soap"/>
-      <plugin id="net.sourceforge.lpg.lpgjavaruntime"/>
+      <plugin id="javax.xml.stream"/>
+      <plugin id="net.sf.ehcache"/>
+      <plugin id="org.aopalliance"/>
+      <plugin id="org.aopalliance.source"/>
       <plugin id="org.apache.ant"/>
-      <plugin id="org.apache.axis"/>
-      <plugin id="org.apache.batik.bridge"/>
+      <plugin id="org.apache.ant.launch"/>
+      <plugin id="org.apache.ant.launch.source"/>
+      <plugin id="org.apache.ant.source"/>
       <plugin id="org.apache.batik.css"/>
-      <plugin id="org.apache.batik.dom"/>
-      <plugin id="org.apache.batik.dom.svg"/>
-      <plugin id="org.apache.batik.ext.awt"/>
-      <plugin id="org.apache.batik.parser"/>
-      <plugin id="org.apache.batik.pdf"/>
-      <plugin id="org.apache.batik.svggen"/>
-      <plugin id="org.apache.batik.transcoder"/>
+      <plugin id="org.apache.batik.css.source"/>
+      <plugin id="org.apache.batik.i18n"/>
+      <plugin id="org.apache.batik.i18n.source"/>
       <plugin id="org.apache.batik.util"/>
       <plugin id="org.apache.batik.util.gui"/>
-      <plugin id="org.apache.batik.xml"/>
-      <plugin id="org.apache.bcel"/>
+      <plugin id="org.apache.batik.util.gui.source"/>
+      <plugin id="org.apache.batik.util.source"/>
       <plugin id="org.apache.commons.codec"/>
-      <plugin id="org.apache.commons.discovery"/>
-      <plugin id="org.apache.commons.el"/>
+      <plugin id="org.apache.commons.codec.source"/>
+      <plugin id="org.apache.commons.collections"/>
+      <plugin id="org.apache.commons.collections.source"/>
+      <plugin id="org.apache.commons.compress"/>
+      <plugin id="org.apache.commons.compress.source"/>
+      <plugin id="org.apache.commons.dbcp"/>
+      <plugin id="org.apache.commons.dbcp.source"/>
+      <plugin id="org.apache.commons.exec"/>
+      <plugin id="org.apache.commons.exec.source"/>
+      <plugin id="org.apache.commons.fileupload"/>
+      <plugin id="org.apache.commons.fileupload.source"/>
       <plugin id="org.apache.commons.httpclient"/>
+      <plugin id="org.apache.commons.httpclient.source"/>
+      <plugin id="org.apache.commons.io"/>
+      <plugin id="org.apache.commons.io.source"/>
       <plugin id="org.apache.commons.jxpath"/>
+      <plugin id="org.apache.commons.jxpath.source"/>
       <plugin id="org.apache.commons.lang"/>
+      <plugin id="org.apache.commons.lang3"/>
       <plugin id="org.apache.commons.logging"/>
+      <plugin id="org.apache.commons.logging.source"/>
+      <plugin id="org.apache.commons.math"/>
       <plugin id="org.apache.commons.net"/>
-      <plugin id="org.apache.jasper"/>
+      <plugin id="org.apache.commons.net.source"/>
+      <plugin id="org.apache.commons.pool"/>
+      <plugin id="org.apache.commons.pool.source"/>
+      <plugin id="org.apache.commons.vfs"/>
+      <plugin id="org.apache.commons.vfs.source"/>
+      <plugin id="org.apache.directory.api.asn1.api"/>
+      <plugin id="org.apache.directory.api.asn1.ber"/>
+      <plugin id="org.apache.directory.api.dsmlv2.parser"/>
+      <plugin id="org.apache.directory.api.i18n"/>
+      <plugin id="org.apache.directory.api.ldap.client.api"/>
+      <plugin id="org.apache.directory.api.ldap.codec.core"/>
+      <plugin id="org.apache.directory.api.ldap.extras.aci"/>
+      <plugin id="org.apache.directory.api.ldap.extras.codec"/>
+      <plugin id="org.apache.directory.api.ldap.extras.codec.api"/>
+      <plugin id="org.apache.directory.api.ldap.extras.util"/>
+      <plugin id="org.apache.directory.api.ldap.model"/>
+      <plugin id="org.apache.directory.api.ldap.net.mina"/>
+      <plugin id="org.apache.directory.api.ldap.schema"/>
+      <plugin id="org.apache.directory.api.ldap.schema.converter"/>
+      <plugin id="org.apache.directory.api.util"/>
+      <plugin id="org.apache.directory.server.config"/>
+      <plugin id="org.apache.directory.server.core.api"/>
+      <plugin id="org.apache.directory.server.core.avl"/>
+      <plugin id="org.apache.directory.server.core.constants"/>
+      <plugin id="org.apache.directory.server.i18n"/>
+      <plugin id="org.apache.directory.server.kerberos.codec"/>
+      <plugin id="org.apache.directory.server.ldif.partition"/>
+      <plugin id="org.apache.directory.server.xdbm.partition"/>
+      <plugin id="org.apache.directory.studio.aciitemeditor"/>
+      <plugin id="org.apache.directory.studio.apacheds.configuration"/>
+      <plugin id="org.apache.directory.studio.apacheds.help"/>
+      <plugin id="org.apache.directory.studio.common.core"/>
+      <plugin id="org.apache.directory.studio.common.ui"/>
+      <plugin id="org.apache.directory.studio.connection.core"/>
+      <plugin id="org.apache.directory.studio.connection.ui"/>
+      <plugin id="org.apache.directory.studio.ldapbrowser.common"/>
+      <plugin id="org.apache.directory.studio.ldapbrowser.core"/>
+      <plugin id="org.apache.directory.studio.ldapbrowser.help"/>
+      <plugin id="org.apache.directory.studio.ldapbrowser.ui"/>
+      <plugin id="org.apache.directory.studio.ldapservers"/>
+      <plugin id="org.apache.directory.studio.ldapservers.apacheds"/>
+      <plugin id="org.apache.directory.studio.ldifeditor"/>
+      <plugin id="org.apache.directory.studio.ldifeditor.help"/>
+      <plugin id="org.apache.directory.studio.ldifparser"/>
+      <plugin id="org.apache.directory.studio.schemaeditor"/>
+      <plugin id="org.apache.directory.studio.schemaeditor.help"/>
+      <plugin id="org.apache.directory.studio.slf4j-eclipselog" fragment="true"/>
+      <plugin id="org.apache.directory.studio.valueeditors"/>
+      <plugin id="org.apache.felix.gogo.command"/>
+      <plugin id="org.apache.felix.gogo.command.source"/>
+      <plugin id="org.apache.felix.gogo.runtime"/>
+      <plugin id="org.apache.felix.gogo.runtime.source"/>
+      <plugin id="org.apache.felix.gogo.shell"/>
+      <plugin id="org.apache.felix.gogo.shell.source"/>
+      <plugin id="org.apache.felix.scr"/>
+      <plugin id="org.apache.felix.scr.source"/>
+      <plugin id="org.apache.httpcomponents.httpclient"/>
+      <plugin id="org.apache.httpcomponents.httpclient.source"/>
+      <plugin id="org.apache.httpcomponents.httpcore"/>
+      <plugin id="org.apache.httpcomponents.httpcore.source"/>
+      <plugin id="org.apache.jackrabbit.api"/>
+      <plugin id="org.apache.jackrabbit.api.source"/>
+      <plugin id="org.apache.jackrabbit.core"/>
+      <plugin id="org.apache.jackrabbit.core.source"/>
+      <plugin id="org.apache.jackrabbit.data" fragment="true"/>
+      <plugin id="org.apache.jackrabbit.data.source"/>
+      <plugin id="org.apache.jackrabbit.jcr.commons"/>
+      <plugin id="org.apache.jackrabbit.jcr.commons.source"/>
+      <plugin id="org.apache.jackrabbit.jcr2dav"/>
+      <plugin id="org.apache.jackrabbit.jcr2dav.source"/>
+      <plugin id="org.apache.jackrabbit.jcr2spi"/>
+      <plugin id="org.apache.jackrabbit.jcr2spi.source"/>
+      <plugin id="org.apache.jackrabbit.server"/>
+      <plugin id="org.apache.jackrabbit.server.source"/>
+      <plugin id="org.apache.jackrabbit.spi"/>
+      <plugin id="org.apache.jackrabbit.spi.commons"/>
+      <plugin id="org.apache.jackrabbit.spi.commons.source"/>
+      <plugin id="org.apache.jackrabbit.spi.source"/>
+      <plugin id="org.apache.jackrabbit.spi2dav"/>
+      <plugin id="org.apache.jackrabbit.spi2dav.source"/>
+      <plugin id="org.apache.jackrabbit.webdav"/>
+      <plugin id="org.apache.jackrabbit.webdav.source"/>
+      <plugin id="org.apache.jasper.glassfish"/>
+      <plugin id="org.apache.jasper.glassfish.source"/>
       <plugin id="org.apache.log4j"/>
+      <plugin id="org.apache.log4j.source"/>
       <plugin id="org.apache.lucene"/>
-      <plugin id="org.apache.lucene.analysis"/>
-      <plugin id="org.apache.wsil4j"/>
-      <plugin id="org.apache.xalan"/>
+      <plugin id="org.apache.lucene.analyzers-common"/>
+      <plugin id="org.apache.lucene.analyzers-common.source"/>
+      <plugin id="org.apache.lucene.analyzers-smartcn"/>
+      <plugin id="org.apache.lucene.analyzers-smartcn.source"/>
+      <plugin id="org.apache.lucene.core"/>
+      <plugin id="org.apache.lucene.core.source"/>
+      <plugin id="org.apache.lucene.misc"/>
+      <plugin id="org.apache.lucene.misc.source"/>
+      <plugin id="org.apache.lucene.queryparser"/>
+      <plugin id="org.apache.lucene.source"/>
+      <plugin id="org.apache.maven.resolver.api"/>
+      <plugin id="org.apache.maven.resolver.connector.basic"/>
+      <plugin id="org.apache.maven.resolver.impl"/>
+      <plugin id="org.apache.maven.resolver.spi"/>
+      <plugin id="org.apache.maven.resolver.transport.file"/>
+      <plugin id="org.apache.maven.resolver.transport.http"/>
+      <plugin id="org.apache.maven.resolver.util"/>
+      <plugin id="org.apache.mina.core"/>
+      <plugin id="org.apache.servicemix.bundles.antlr"/>
+      <plugin id="org.apache.servicemix.bundles.dom4j"/>
+      <plugin id="org.apache.servicemix.bundles.xpp3"/>
+      <plugin id="org.apache.solr.client.solrj"/>
+      <plugin id="org.apache.tika.core"/>
+      <plugin id="org.apache.tika.core.source"/>
+      <plugin id="org.apache.tika.parser.source"/>
+      <plugin id="org.apache.tika.parsers"/>
+      <plugin id="org.apache.ws.commons.util"/>
       <plugin id="org.apache.xerces"/>
       <plugin id="org.apache.xml.resolver"/>
       <plugin id="org.apache.xml.serializer"/>
+      <plugin id="org.apache.xmlgraphics.commons"/>
+      <plugin id="org.apache.xmlgraphics.commons.source"/>
+      <plugin id="org.apiguardian"/>
+      <plugin id="org.argeo.cms"/>
+      <plugin id="org.argeo.cms.ui"/>
+      <plugin id="org.argeo.cms.ui.workbench"/>
+      <plugin id="org.argeo.cms.ui.workbench.rcp"/>
+      <plugin id="org.argeo.dep.cms.client"/>
+      <plugin id="org.argeo.dep.cms.node"/>
+      <plugin id="org.argeo.dep.cms.platform"/>
+      <plugin id="org.argeo.dep.cms.sdk"/>
+      <plugin id="org.argeo.eclipse.ui"/>
+      <plugin id="org.argeo.eclipse.ui.rcp"/>
+      <plugin id="org.argeo.enterprise"/>
+      <plugin id="org.argeo.ext.jackrabbit" fragment="true"/>
+      <plugin id="org.argeo.jcr"/>
+      <plugin id="org.argeo.node.api"/>
+      <plugin id="org.argeo.osgi.boot"/>
+      <plugin id="org.argeo.slc.agent"/>
+      <plugin id="org.argeo.slc.agent.jcr"/>
+      <plugin id="org.argeo.slc.api"/>
+      <plugin id="org.argeo.slc.client.ui"/>
+      <plugin id="org.argeo.slc.client.ui.dist"/>
+      <plugin id="org.argeo.slc.core"/>
+      <plugin id="org.argeo.slc.demo.ant"/>
+      <plugin id="org.argeo.slc.demo.basic"/>
+      <plugin id="org.argeo.slc.demo.minimal"/>
+      <plugin id="org.argeo.slc.factory"/>
       <plugin id="org.argeo.slc.ide.branding"/>
       <plugin id="org.argeo.slc.ide.ui"/>
+      <plugin id="org.argeo.slc.repo"/>
+      <plugin id="org.argeo.slc.server.repo"/>
+      <plugin id="org.argeo.slc.support"/>
+      <plugin id="org.argeo.util"/>
+      <plugin id="org.aspectj.weaver"/>
+      <plugin id="org.aspectj.weaver.source"/>
+      <plugin id="org.bouncycastle.bcprov"/>
+      <plugin id="org.dbunit"/>
+      <plugin id="org.dbunit.source"/>
+      <plugin id="org.eclipse.aether.maven"/>
       <plugin id="org.eclipse.ant.core"/>
+      <plugin id="org.eclipse.ant.core.source"/>
+      <plugin id="org.eclipse.ant.launching"/>
       <plugin id="org.eclipse.ant.ui"/>
+      <plugin id="org.eclipse.buildship.branding"/>
+      <plugin id="org.eclipse.buildship.core"/>
+      <plugin id="org.eclipse.buildship.stsmigration"/>
+      <plugin id="org.eclipse.buildship.ui"/>
+      <plugin id="org.eclipse.cdt"/>
+      <plugin id="org.eclipse.cdt.autotools.core"/>
+      <plugin id="org.eclipse.cdt.autotools.docs"/>
+      <plugin id="org.eclipse.cdt.autotools.ui"/>
+      <plugin id="org.eclipse.cdt.build.gcc.core"/>
+      <plugin id="org.eclipse.cdt.build.gcc.ui"/>
+      <plugin id="org.eclipse.cdt.codan.checkers"/>
+      <plugin id="org.eclipse.cdt.codan.checkers.ui"/>
+      <plugin id="org.eclipse.cdt.codan.core"/>
+      <plugin id="org.eclipse.cdt.codan.core.cxx"/>
+      <plugin id="org.eclipse.cdt.codan.ui"/>
+      <plugin id="org.eclipse.cdt.codan.ui.cxx"/>
+      <plugin id="org.eclipse.cdt.core"/>
+      <plugin id="org.eclipse.cdt.core.linux" fragment="true"/>
+      <plugin id="org.eclipse.cdt.core.linux.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.cdt.core.native"/>
+      <plugin id="org.eclipse.cdt.debug.core"/>
+      <plugin id="org.eclipse.cdt.debug.ui"/>
+      <plugin id="org.eclipse.cdt.doc.user"/>
+      <plugin id="org.eclipse.cdt.dsf"/>
+      <plugin id="org.eclipse.cdt.dsf.gdb"/>
+      <plugin id="org.eclipse.cdt.dsf.gdb.ui"/>
+      <plugin id="org.eclipse.cdt.dsf.ui"/>
+      <plugin id="org.eclipse.cdt.gdb"/>
+      <plugin id="org.eclipse.cdt.gdb.ui"/>
+      <plugin id="org.eclipse.cdt.launch"/>
+      <plugin id="org.eclipse.cdt.make.core"/>
+      <plugin id="org.eclipse.cdt.make.ui"/>
+      <plugin id="org.eclipse.cdt.managedbuilder.core"/>
+      <plugin id="org.eclipse.cdt.managedbuilder.gnu.ui"/>
+      <plugin id="org.eclipse.cdt.managedbuilder.ui"/>
+      <plugin id="org.eclipse.cdt.native.serial"/>
+      <plugin id="org.eclipse.cdt.remote.core"/>
+      <plugin id="org.eclipse.cdt.ui"/>
       <plugin id="org.eclipse.compare"/>
       <plugin id="org.eclipse.compare.core"/>
-      <plugin id="org.eclipse.compare.win32"/>
-      <plugin id="org.eclipse.core.boot"/>
+      <plugin id="org.eclipse.compare.core.source"/>
+      <plugin id="org.eclipse.compare.source"/>
       <plugin id="org.eclipse.core.commands"/>
+      <plugin id="org.eclipse.core.commands.source"/>
       <plugin id="org.eclipse.core.contenttype"/>
+      <plugin id="org.eclipse.core.contenttype.source"/>
       <plugin id="org.eclipse.core.databinding"/>
       <plugin id="org.eclipse.core.databinding.beans"/>
+      <plugin id="org.eclipse.core.databinding.beans.source"/>
       <plugin id="org.eclipse.core.databinding.observable"/>
+      <plugin id="org.eclipse.core.databinding.observable.source"/>
       <plugin id="org.eclipse.core.databinding.property"/>
+      <plugin id="org.eclipse.core.databinding.property.source"/>
+      <plugin id="org.eclipse.core.databinding.source"/>
       <plugin id="org.eclipse.core.expressions"/>
+      <plugin id="org.eclipse.core.expressions.source"/>
+      <plugin id="org.eclipse.core.externaltools"/>
+      <plugin id="org.eclipse.core.externaltools.source"/>
       <plugin id="org.eclipse.core.filebuffers"/>
+      <plugin id="org.eclipse.core.filebuffers.source"/>
       <plugin id="org.eclipse.core.filesystem"/>
-      <plugin id="org.eclipse.core.filesystem.hpux.PA_RISC" fragment="true"/>
-      <plugin id="org.eclipse.core.filesystem.hpux.ia64_32" fragment="true"/>
-      <plugin id="org.eclipse.core.filesystem.linux.ppc" fragment="true"/>
-      <plugin id="org.eclipse.core.filesystem.linux.x86" fragment="true"/>
-      <plugin id="org.eclipse.core.filesystem.macosx" fragment="true"/>
-      <plugin id="org.eclipse.core.filesystem.qnx.x86" fragment="true"/>
-      <plugin id="org.eclipse.core.filesystem.solaris.sparc" fragment="true"/>
-      <plugin id="org.eclipse.core.filesystem.win32.x86" fragment="true"/>
-      <plugin id="org.eclipse.core.filesystem.win32.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.core.filesystem.linux.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.core.filesystem.source"/>
       <plugin id="org.eclipse.core.jobs"/>
+      <plugin id="org.eclipse.core.jobs.source"/>
       <plugin id="org.eclipse.core.net"/>
-      <plugin id="org.eclipse.core.net.linux.x86" fragment="true"/>
-      <plugin id="org.eclipse.core.net.win32.x86" fragment="true"/>
-      <plugin id="org.eclipse.core.net.win32.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.core.net.linux.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.core.net.source"/>
       <plugin id="org.eclipse.core.resources"/>
-      <plugin id="org.eclipse.core.resources.compatibility" fragment="true"/>
-      <plugin id="org.eclipse.core.resources.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.resources.source"/>
       <plugin id="org.eclipse.core.runtime"/>
-      <plugin id="org.eclipse.core.runtime.compatibility"/>
-      <plugin id="org.eclipse.core.runtime.compatibility.auth"/>
-      <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
+      <plugin id="org.eclipse.core.runtime.source"/>
       <plugin id="org.eclipse.core.variables"/>
-      <plugin id="org.eclipse.cvs"/>
+      <plugin id="org.eclipse.core.variables.source"/>
       <plugin id="org.eclipse.debug.core"/>
+      <plugin id="org.eclipse.debug.core.source"/>
       <plugin id="org.eclipse.debug.ui"/>
+      <plugin id="org.eclipse.debug.ui.source"/>
       <plugin id="org.eclipse.draw2d"/>
-      <plugin id="org.eclipse.dstore.core"/>
-      <plugin id="org.eclipse.dstore.extra"/>
+      <plugin id="org.eclipse.e4.core.commands"/>
+      <plugin id="org.eclipse.e4.core.commands.source"/>
+      <plugin id="org.eclipse.e4.core.contexts"/>
+      <plugin id="org.eclipse.e4.core.contexts.source"/>
+      <plugin id="org.eclipse.e4.core.di"/>
+      <plugin id="org.eclipse.e4.core.di.annotations"/>
+      <plugin id="org.eclipse.e4.core.di.annotations.source"/>
+      <plugin id="org.eclipse.e4.core.di.extensions"/>
+      <plugin id="org.eclipse.e4.core.di.extensions.source"/>
+      <plugin id="org.eclipse.e4.core.di.extensions.supplier"/>
+      <plugin id="org.eclipse.e4.core.di.extensions.supplier.source"/>
+      <plugin id="org.eclipse.e4.core.di.source"/>
+      <plugin id="org.eclipse.e4.core.services"/>
+      <plugin id="org.eclipse.e4.core.services.source"/>
+      <plugin id="org.eclipse.e4.emf.xpath"/>
+      <plugin id="org.eclipse.e4.emf.xpath.source"/>
+      <plugin id="org.eclipse.e4.tools"/>
+      <plugin id="org.eclipse.e4.tools.compat"/>
+      <plugin id="org.eclipse.e4.tools.emf.editor3x"/>
+      <plugin id="org.eclipse.e4.tools.emf.ui"/>
+      <plugin id="org.eclipse.e4.tools.jdt.templates"/>
+      <plugin id="org.eclipse.e4.tools.services"/>
+      <plugin id="org.eclipse.e4.ui.bindings"/>
+      <plugin id="org.eclipse.e4.ui.bindings.source"/>
+      <plugin id="org.eclipse.e4.ui.css.core"/>
+      <plugin id="org.eclipse.e4.ui.css.core.source"/>
+      <plugin id="org.eclipse.e4.ui.css.swt"/>
+      <plugin id="org.eclipse.e4.ui.css.swt.source"/>
+      <plugin id="org.eclipse.e4.ui.css.swt.theme"/>
+      <plugin id="org.eclipse.e4.ui.css.swt.theme.source"/>
+      <plugin id="org.eclipse.e4.ui.di"/>
+      <plugin id="org.eclipse.e4.ui.di.source"/>
+      <plugin id="org.eclipse.e4.ui.dialogs"/>
+      <plugin id="org.eclipse.e4.ui.dialogs.source"/>
+      <plugin id="org.eclipse.e4.ui.model.workbench"/>
+      <plugin id="org.eclipse.e4.ui.model.workbench.source"/>
+      <plugin id="org.eclipse.e4.ui.services"/>
+      <plugin id="org.eclipse.e4.ui.services.source"/>
+      <plugin id="org.eclipse.e4.ui.swt.gtk" fragment="true"/>
+      <plugin id="org.eclipse.e4.ui.swt.gtk.source"/>
+      <plugin id="org.eclipse.e4.ui.widgets"/>
+      <plugin id="org.eclipse.e4.ui.widgets.source"/>
+      <plugin id="org.eclipse.e4.ui.workbench"/>
+      <plugin id="org.eclipse.e4.ui.workbench.addons.swt"/>
+      <plugin id="org.eclipse.e4.ui.workbench.addons.swt.source"/>
+      <plugin id="org.eclipse.e4.ui.workbench.renderers.swt"/>
+      <plugin id="org.eclipse.e4.ui.workbench.renderers.swt.source"/>
+      <plugin id="org.eclipse.e4.ui.workbench.source"/>
+      <plugin id="org.eclipse.e4.ui.workbench.swt"/>
+      <plugin id="org.eclipse.e4.ui.workbench.swt.source"/>
+      <plugin id="org.eclipse.e4.ui.workbench3"/>
+      <plugin id="org.eclipse.e4.ui.workbench3.source"/>
       <plugin id="org.eclipse.ecf"/>
       <plugin id="org.eclipse.ecf.filetransfer"/>
       <plugin id="org.eclipse.ecf.identity"/>
       <plugin id="org.eclipse.ecf.provider.filetransfer"/>
-      <plugin id="org.eclipse.ecf.provider.filetransfer.httpclient"/>
-      <plugin id="org.eclipse.ecf.provider.filetransfer.httpclient.ssl" fragment="true"/>
+      <plugin id="org.eclipse.ecf.provider.filetransfer.httpclient4"/>
+      <plugin id="org.eclipse.ecf.provider.filetransfer.httpclient4.ssl" fragment="true"/>
       <plugin id="org.eclipse.ecf.provider.filetransfer.ssl" fragment="true"/>
       <plugin id="org.eclipse.ecf.ssl" fragment="true"/>
-      <plugin id="org.eclipse.emf"/>
-      <plugin id="org.eclipse.emf.ant"/>
-      <plugin id="org.eclipse.emf.cheatsheets"/>
-      <plugin id="org.eclipse.emf.codegen"/>
-      <plugin id="org.eclipse.emf.codegen.ecore"/>
-      <plugin id="org.eclipse.emf.codegen.ecore.ui"/>
-      <plugin id="org.eclipse.emf.codegen.ui"/>
+      <plugin id="org.eclipse.eclemma.core"/>
+      <plugin id="org.eclipse.eclemma.doc"/>
+      <plugin id="org.eclipse.eclemma.ui"/>
+      <plugin id="org.eclipse.egit"/>
+      <plugin id="org.eclipse.egit.core"/>
+      <plugin id="org.eclipse.egit.doc"/>
+      <plugin id="org.eclipse.egit.ui"/>
       <plugin id="org.eclipse.emf.common"/>
+      <plugin id="org.eclipse.emf.common.source"/>
       <plugin id="org.eclipse.emf.common.ui"/>
-      <plugin id="org.eclipse.emf.compare"/>
-      <plugin id="org.eclipse.emf.compare.diff"/>
-      <plugin id="org.eclipse.emf.compare.diff.edit"/>
-      <plugin id="org.eclipse.emf.compare.doc"/>
-      <plugin id="org.eclipse.emf.compare.epatch"/>
-      <plugin id="org.eclipse.emf.compare.match"/>
-      <plugin id="org.eclipse.emf.compare.ui"/>
-      <plugin id="org.eclipse.emf.converter"/>
       <plugin id="org.eclipse.emf.databinding"/>
       <plugin id="org.eclipse.emf.databinding.edit"/>
-      <plugin id="org.eclipse.emf.doc"/>
       <plugin id="org.eclipse.emf.ecore"/>
       <plugin id="org.eclipse.emf.ecore.change"/>
-      <plugin id="org.eclipse.emf.ecore.change.edit"/>
+      <plugin id="org.eclipse.emf.ecore.change.source"/>
       <plugin id="org.eclipse.emf.ecore.edit"/>
-      <plugin id="org.eclipse.emf.ecore.editor"/>
+      <plugin id="org.eclipse.emf.ecore.source"/>
       <plugin id="org.eclipse.emf.ecore.xmi"/>
+      <plugin id="org.eclipse.emf.ecore.xmi.source"/>
       <plugin id="org.eclipse.emf.edit"/>
       <plugin id="org.eclipse.emf.edit.ui"/>
-      <plugin id="org.eclipse.emf.example.installer"/>
-      <plugin id="org.eclipse.emf.exporter"/>
-      <plugin id="org.eclipse.emf.importer"/>
-      <plugin id="org.eclipse.emf.importer.ecore"/>
-      <plugin id="org.eclipse.emf.importer.java"/>
-      <plugin id="org.eclipse.emf.importer.rose"/>
-      <plugin id="org.eclipse.emf.mapping"/>
-      <plugin id="org.eclipse.emf.mapping.ecore"/>
-      <plugin id="org.eclipse.emf.mapping.ecore.editor"/>
-      <plugin id="org.eclipse.emf.mapping.ecore2ecore"/>
-      <plugin id="org.eclipse.emf.mapping.ecore2ecore.editor"/>
-      <plugin id="org.eclipse.emf.mapping.ecore2xml"/>
-      <plugin id="org.eclipse.emf.mapping.ecore2xml.ui"/>
-      <plugin id="org.eclipse.emf.mapping.ui"/>
-      <plugin id="org.eclipse.emf.mapping.xsd2ecore"/>
-      <plugin id="org.eclipse.emf.mapping.xsd2ecore.editor"/>
-      <plugin id="org.eclipse.emf.transaction"/>
-      <plugin id="org.eclipse.emf.transaction.ui"/>
-      <plugin id="org.eclipse.emf.validation"/>
-      <plugin id="org.eclipse.emf.validation.ui"/>
-      <plugin id="org.eclipse.emf.validation.ui.ide"/>
-      <plugin id="org.eclipse.emf.workspace"/>
-      <plugin id="org.eclipse.emf.workspace.ui"/>
+      <plugin id="org.eclipse.epp.mpc.core"/>
+      <plugin id="org.eclipse.epp.mpc.help.ui"/>
+      <plugin id="org.eclipse.epp.mpc.ui"/>
+      <plugin id="org.eclipse.epp.package.common"/>
+      <plugin id="org.eclipse.epp.package.rcp"/>
       <plugin id="org.eclipse.equinox.app"/>
+      <plugin id="org.eclipse.equinox.app.source"/>
+      <plugin id="org.eclipse.equinox.bidi"/>
+      <plugin id="org.eclipse.equinox.bidi.source"/>
       <plugin id="org.eclipse.equinox.cm"/>
+      <plugin id="org.eclipse.equinox.cm.source"/>
       <plugin id="org.eclipse.equinox.common"/>
+      <plugin id="org.eclipse.equinox.common.source"/>
       <plugin id="org.eclipse.equinox.concurrent"/>
-      <plugin id="org.eclipse.equinox.device"/>
+      <plugin id="org.eclipse.equinox.console"/>
+      <plugin id="org.eclipse.equinox.console.source"/>
       <plugin id="org.eclipse.equinox.ds"/>
+      <plugin id="org.eclipse.equinox.ds.source"/>
       <plugin id="org.eclipse.equinox.event"/>
+      <plugin id="org.eclipse.equinox.event.source"/>
       <plugin id="org.eclipse.equinox.frameworkadmin"/>
       <plugin id="org.eclipse.equinox.frameworkadmin.equinox"/>
-      <plugin id="org.eclipse.equinox.http"/>
+      <plugin id="org.eclipse.equinox.frameworkadmin.equinox.source"/>
+      <plugin id="org.eclipse.equinox.frameworkadmin.source"/>
       <plugin id="org.eclipse.equinox.http.jetty"/>
+      <plugin id="org.eclipse.equinox.http.jetty.source"/>
       <plugin id="org.eclipse.equinox.http.registry"/>
+      <plugin id="org.eclipse.equinox.http.registry.source"/>
       <plugin id="org.eclipse.equinox.http.servlet"/>
-      <plugin id="org.eclipse.equinox.http.servletbridge"/>
-      <plugin id="org.eclipse.equinox.io"/>
-      <plugin id="org.eclipse.equinox.ip"/>
+      <plugin id="org.eclipse.equinox.http.servlet.source"/>
       <plugin id="org.eclipse.equinox.jsp.jasper"/>
       <plugin id="org.eclipse.equinox.jsp.jasper.registry"/>
+      <plugin id="org.eclipse.equinox.jsp.jasper.registry.source"/>
+      <plugin id="org.eclipse.equinox.jsp.jasper.source"/>
       <plugin id="org.eclipse.equinox.launcher"/>
-      <plugin id="org.eclipse.equinox.launcher.carbon.macosx" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.cocoa.macosx" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.cocoa.macosx.x86_64" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.gtk.linux.ppc" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.gtk.linux.s390" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.gtk.linux.s390x" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.gtk.linux.x86" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.gtk.solaris.sparc" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.gtk.solaris.x86" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.motif.aix.ppc" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.motif.hpux.PA_RISC" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.motif.hpux.ia64_32" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.motif.linux.x86" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.motif.solaris.sparc" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.win32.win32.x86" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.win32.win32.x86_64" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.wpf.win32.x86" fragment="true"/>
-      <plugin id="org.eclipse.equinox.log"/>
+      <plugin id="org.eclipse.equinox.launcher.gtk.linux.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.equinox.launcher.source"/>
       <plugin id="org.eclipse.equinox.metatype"/>
+      <plugin id="org.eclipse.equinox.metatype.source"/>
       <plugin id="org.eclipse.equinox.p2.artifact.repository"/>
+      <plugin id="org.eclipse.equinox.p2.artifact.repository.source"/>
       <plugin id="org.eclipse.equinox.p2.console"/>
+      <plugin id="org.eclipse.equinox.p2.console.source"/>
       <plugin id="org.eclipse.equinox.p2.core"/>
+      <plugin id="org.eclipse.equinox.p2.core.source"/>
       <plugin id="org.eclipse.equinox.p2.director"/>
       <plugin id="org.eclipse.equinox.p2.director.app"/>
+      <plugin id="org.eclipse.equinox.p2.director.app.source"/>
+      <plugin id="org.eclipse.equinox.p2.director.source"/>
       <plugin id="org.eclipse.equinox.p2.directorywatcher"/>
+      <plugin id="org.eclipse.equinox.p2.directorywatcher.source"/>
+      <plugin id="org.eclipse.equinox.p2.discovery"/>
+      <plugin id="org.eclipse.equinox.p2.discovery.compatibility"/>
       <plugin id="org.eclipse.equinox.p2.engine"/>
-      <plugin id="org.eclipse.equinox.p2.exemplarysetup"/>
+      <plugin id="org.eclipse.equinox.p2.engine.source"/>
       <plugin id="org.eclipse.equinox.p2.extensionlocation"/>
+      <plugin id="org.eclipse.equinox.p2.extensionlocation.source"/>
       <plugin id="org.eclipse.equinox.p2.garbagecollector"/>
-      <plugin id="org.eclipse.equinox.p2.installer"/>
+      <plugin id="org.eclipse.equinox.p2.garbagecollector.source"/>
       <plugin id="org.eclipse.equinox.p2.jarprocessor"/>
+      <plugin id="org.eclipse.equinox.p2.jarprocessor.source"/>
       <plugin id="org.eclipse.equinox.p2.metadata"/>
-      <plugin id="org.eclipse.equinox.p2.metadata.generator"/>
       <plugin id="org.eclipse.equinox.p2.metadata.repository"/>
+      <plugin id="org.eclipse.equinox.p2.metadata.repository.source"/>
+      <plugin id="org.eclipse.equinox.p2.metadata.source"/>
+      <plugin id="org.eclipse.equinox.p2.operations"/>
+      <plugin id="org.eclipse.equinox.p2.operations.source"/>
       <plugin id="org.eclipse.equinox.p2.publisher"/>
+      <plugin id="org.eclipse.equinox.p2.publisher.eclipse"/>
+      <plugin id="org.eclipse.equinox.p2.publisher.eclipse.source"/>
+      <plugin id="org.eclipse.equinox.p2.publisher.source"/>
       <plugin id="org.eclipse.equinox.p2.reconciler.dropins"/>
+      <plugin id="org.eclipse.equinox.p2.reconciler.dropins.source"/>
       <plugin id="org.eclipse.equinox.p2.repository"/>
+      <plugin id="org.eclipse.equinox.p2.repository.source"/>
       <plugin id="org.eclipse.equinox.p2.repository.tools"/>
-      <plugin id="org.eclipse.equinox.p2.tools"/>
+      <plugin id="org.eclipse.equinox.p2.repository.tools.source"/>
       <plugin id="org.eclipse.equinox.p2.touchpoint.eclipse"/>
+      <plugin id="org.eclipse.equinox.p2.touchpoint.eclipse.source"/>
       <plugin id="org.eclipse.equinox.p2.touchpoint.natives"/>
+      <plugin id="org.eclipse.equinox.p2.touchpoint.natives.source"/>
+      <plugin id="org.eclipse.equinox.p2.transport.ecf"/>
+      <plugin id="org.eclipse.equinox.p2.transport.ecf.source"/>
       <plugin id="org.eclipse.equinox.p2.ui"/>
-      <plugin id="org.eclipse.equinox.p2.ui.admin"/>
-      <plugin id="org.eclipse.equinox.p2.ui.admin.rcp"/>
+      <plugin id="org.eclipse.equinox.p2.ui.discovery"/>
+      <plugin id="org.eclipse.equinox.p2.ui.importexport"/>
+      <plugin id="org.eclipse.equinox.p2.ui.importexport.source"/>
       <plugin id="org.eclipse.equinox.p2.ui.sdk"/>
       <plugin id="org.eclipse.equinox.p2.ui.sdk.scheduler"/>
+      <plugin id="org.eclipse.equinox.p2.ui.sdk.scheduler.source"/>
+      <plugin id="org.eclipse.equinox.p2.ui.sdk.source"/>
+      <plugin id="org.eclipse.equinox.p2.ui.source"/>
       <plugin id="org.eclipse.equinox.p2.updatechecker"/>
+      <plugin id="org.eclipse.equinox.p2.updatechecker.source"/>
       <plugin id="org.eclipse.equinox.p2.updatesite"/>
+      <plugin id="org.eclipse.equinox.p2.updatesite.source"/>
       <plugin id="org.eclipse.equinox.preferences"/>
+      <plugin id="org.eclipse.equinox.preferences.source"/>
       <plugin id="org.eclipse.equinox.registry"/>
+      <plugin id="org.eclipse.equinox.registry.source"/>
       <plugin id="org.eclipse.equinox.security"/>
-      <plugin id="org.eclipse.equinox.security.macosx" fragment="true"/>
+      <plugin id="org.eclipse.equinox.security.linux.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.equinox.security.linux.x86_64.source"/>
+      <plugin id="org.eclipse.equinox.security.source"/>
       <plugin id="org.eclipse.equinox.security.ui"/>
-      <plugin id="org.eclipse.equinox.security.win32.x86" fragment="true"/>
-      <plugin id="org.eclipse.equinox.servletbridge"/>
+      <plugin id="org.eclipse.equinox.security.ui.source"/>
       <plugin id="org.eclipse.equinox.simpleconfigurator"/>
       <plugin id="org.eclipse.equinox.simpleconfigurator.manipulator"/>
-      <plugin id="org.eclipse.equinox.supplement"/>
-      <plugin id="org.eclipse.equinox.transforms.hook" fragment="true"/>
-      <plugin id="org.eclipse.equinox.transforms.xslt"/>
-      <plugin id="org.eclipse.equinox.useradmin"/>
+      <plugin id="org.eclipse.equinox.simpleconfigurator.manipulator.source"/>
+      <plugin id="org.eclipse.equinox.simpleconfigurator.source"/>
       <plugin id="org.eclipse.equinox.util"/>
-      <plugin id="org.eclipse.equinox.wireadmin"/>
+      <plugin id="org.eclipse.equinox.util.source"/>
       <plugin id="org.eclipse.gef"/>
-      <plugin id="org.eclipse.gmf"/>
-      <plugin id="org.eclipse.gmf.bridge"/>
-      <plugin id="org.eclipse.gmf.bridge.trace"/>
-      <plugin id="org.eclipse.gmf.bridge.ui"/>
-      <plugin id="org.eclipse.gmf.bridge.ui.dashboard"/>
-      <plugin id="org.eclipse.gmf.codegen"/>
-      <plugin id="org.eclipse.gmf.codegen.edit"/>
-      <plugin id="org.eclipse.gmf.codegen.ui"/>
-      <plugin id="org.eclipse.gmf.common"/>
-      <plugin id="org.eclipse.gmf.doc"/>
-      <plugin id="org.eclipse.gmf.doc.ui"/>
-      <plugin id="org.eclipse.gmf.ecore.editor"/>
-      <plugin id="org.eclipse.gmf.examples"/>
-      <plugin id="org.eclipse.gmf.examples.ui.pde"/>
-      <plugin id="org.eclipse.gmf.graphdef"/>
-      <plugin id="org.eclipse.gmf.graphdef.codegen"/>
-      <plugin id="org.eclipse.gmf.graphdef.codegen.ui"/>
-      <plugin id="org.eclipse.gmf.graphdef.edit"/>
-      <plugin id="org.eclipse.gmf.map"/>
-      <plugin id="org.eclipse.gmf.map.edit"/>
-      <plugin id="org.eclipse.gmf.runtime.common.core"/>
-      <plugin id="org.eclipse.gmf.runtime.common.ui"/>
-      <plugin id="org.eclipse.gmf.runtime.common.ui.action"/>
-      <plugin id="org.eclipse.gmf.runtime.common.ui.action.ide"/>
-      <plugin id="org.eclipse.gmf.runtime.common.ui.printing"/>
-      <plugin id="org.eclipse.gmf.runtime.common.ui.printing.win32" fragment="true"/>
-      <plugin id="org.eclipse.gmf.runtime.common.ui.services"/>
-      <plugin id="org.eclipse.gmf.runtime.common.ui.services.action"/>
-      <plugin id="org.eclipse.gmf.runtime.common.ui.services.dnd"/>
-      <plugin id="org.eclipse.gmf.runtime.common.ui.services.dnd.ide"/>
-      <plugin id="org.eclipse.gmf.runtime.common.ui.services.properties"/>
-      <plugin id="org.eclipse.gmf.runtime.diagram.core"/>
-      <plugin id="org.eclipse.gmf.runtime.diagram.ui"/>
-      <plugin id="org.eclipse.gmf.runtime.diagram.ui.actions"/>
-      <plugin id="org.eclipse.gmf.runtime.diagram.ui.dnd"/>
-      <plugin id="org.eclipse.gmf.runtime.diagram.ui.geoshapes"/>
-      <plugin id="org.eclipse.gmf.runtime.diagram.ui.printing"/>
-      <plugin id="org.eclipse.gmf.runtime.diagram.ui.printing.render"/>
-      <plugin id="org.eclipse.gmf.runtime.diagram.ui.properties"/>
-      <plugin id="org.eclipse.gmf.runtime.diagram.ui.providers"/>
-      <plugin id="org.eclipse.gmf.runtime.diagram.ui.providers.ide"/>
-      <plugin id="org.eclipse.gmf.runtime.diagram.ui.render"/>
-      <plugin id="org.eclipse.gmf.runtime.diagram.ui.resources.editor"/>
-      <plugin id="org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide"/>
-      <plugin id="org.eclipse.gmf.runtime.draw2d.ui"/>
-      <plugin id="org.eclipse.gmf.runtime.draw2d.ui.render"/>
-      <plugin id="org.eclipse.gmf.runtime.draw2d.ui.render.awt"/>
-      <plugin id="org.eclipse.gmf.runtime.emf.clipboard.core"/>
-      <plugin id="org.eclipse.gmf.runtime.emf.commands.core"/>
-      <plugin id="org.eclipse.gmf.runtime.emf.core"/>
-      <plugin id="org.eclipse.gmf.runtime.emf.type.core"/>
-      <plugin id="org.eclipse.gmf.runtime.emf.type.ui"/>
-      <plugin id="org.eclipse.gmf.runtime.emf.ui"/>
-      <plugin id="org.eclipse.gmf.runtime.emf.ui.properties"/>
-      <plugin id="org.eclipse.gmf.runtime.gef.ui"/>
-      <plugin id="org.eclipse.gmf.runtime.notation"/>
-      <plugin id="org.eclipse.gmf.runtime.notation.edit"/>
-      <plugin id="org.eclipse.gmf.runtime.notation.providers"/>
-      <plugin id="org.eclipse.gmf.sdk"/>
-      <plugin id="org.eclipse.gmf.templates.legacy"/>
-      <plugin id="org.eclipse.gmf.tooldef"/>
-      <plugin id="org.eclipse.gmf.tooldef.edit"/>
-      <plugin id="org.eclipse.gmf.tooling"/>
-      <plugin id="org.eclipse.gmf.validate"/>
-      <plugin id="org.eclipse.gmf.xpand"/>
-      <plugin id="org.eclipse.gmf.xpand.editor"/>
-      <plugin id="org.eclipse.gmf.xpand.migration"/>
-      <plugin id="org.eclipse.gmf.xpand.qvtlibrary"/>
+      <plugin id="org.eclipse.gemini.blueprint.core"/>
+      <plugin id="org.eclipse.gemini.blueprint.core.source"/>
+      <plugin id="org.eclipse.gemini.blueprint.extender"/>
+      <plugin id="org.eclipse.gemini.blueprint.extender.source"/>
+      <plugin id="org.eclipse.gemini.blueprint.io"/>
+      <plugin id="org.eclipse.gemini.blueprint.io.source"/>
       <plugin id="org.eclipse.help"/>
-      <plugin id="org.eclipse.help.appserver"/>
       <plugin id="org.eclipse.help.base"/>
+      <plugin id="org.eclipse.help.base.source"/>
+      <plugin id="org.eclipse.help.source"/>
       <plugin id="org.eclipse.help.ui"/>
+      <plugin id="org.eclipse.help.ui.source"/>
       <plugin id="org.eclipse.help.webapp"/>
+      <plugin id="org.eclipse.help.webapp.source"/>
       <plugin id="org.eclipse.jdt"/>
+      <plugin id="org.eclipse.jdt.annotation"/>
       <plugin id="org.eclipse.jdt.apt.core"/>
       <plugin id="org.eclipse.jdt.apt.pluggable.core"/>
       <plugin id="org.eclipse.jdt.apt.ui"/>
@@ -449,231 +688,235 @@ This Agreement is governed by the laws of the State of New York and the intellec
       <plugin id="org.eclipse.jdt.debug.ui"/>
       <plugin id="org.eclipse.jdt.doc.user"/>
       <plugin id="org.eclipse.jdt.junit"/>
+      <plugin id="org.eclipse.jdt.junit.core"/>
       <plugin id="org.eclipse.jdt.junit.runtime"/>
       <plugin id="org.eclipse.jdt.junit4.runtime"/>
+      <plugin id="org.eclipse.jdt.junit5.runtime"/>
       <plugin id="org.eclipse.jdt.launching"/>
-      <plugin id="org.eclipse.jdt.launching.macosx"/>
-      <plugin id="org.eclipse.jdt.launching.ui.macosx"/>
       <plugin id="org.eclipse.jdt.ui"/>
-      <plugin id="org.eclipse.jem"/>
-      <plugin id="org.eclipse.jem.beaninfo"/>
-      <plugin id="org.eclipse.jem.beaninfo.vm"/>
-      <plugin id="org.eclipse.jem.beaninfo.vm.common"/>
-      <plugin id="org.eclipse.jem.proxy"/>
       <plugin id="org.eclipse.jem.util"/>
-      <plugin id="org.eclipse.jem.workbench"/>
+      <plugin id="org.eclipse.jetty.continuation"/>
+      <plugin id="org.eclipse.jetty.continuation.source"/>
+      <plugin id="org.eclipse.jetty.http"/>
+      <plugin id="org.eclipse.jetty.http.source"/>
+      <plugin id="org.eclipse.jetty.io"/>
+      <plugin id="org.eclipse.jetty.io.source"/>
+      <plugin id="org.eclipse.jetty.security"/>
+      <plugin id="org.eclipse.jetty.security.source"/>
+      <plugin id="org.eclipse.jetty.server"/>
+      <plugin id="org.eclipse.jetty.server.source"/>
+      <plugin id="org.eclipse.jetty.servlet"/>
+      <plugin id="org.eclipse.jetty.servlet.source"/>
+      <plugin id="org.eclipse.jetty.util"/>
+      <plugin id="org.eclipse.jetty.util.source"/>
+      <plugin id="org.eclipse.jetty.webapp"/>
+      <plugin id="org.eclipse.jetty.xml"/>
       <plugin id="org.eclipse.jface"/>
       <plugin id="org.eclipse.jface.databinding"/>
+      <plugin id="org.eclipse.jface.databinding.source"/>
+      <plugin id="org.eclipse.jface.source"/>
       <plugin id="org.eclipse.jface.text"/>
+      <plugin id="org.eclipse.jface.text.source"/>
+      <plugin id="org.eclipse.jgit"/>
+      <plugin id="org.eclipse.jgit.archive"/>
+      <plugin id="org.eclipse.jgit.source"/>
       <plugin id="org.eclipse.jsch.core"/>
+      <plugin id="org.eclipse.jsch.core.source"/>
       <plugin id="org.eclipse.jsch.ui"/>
-      <plugin id="org.eclipse.jst.common.annotations.controller"/>
-      <plugin id="org.eclipse.jst.common.annotations.core"/>
-      <plugin id="org.eclipse.jst.common.annotations.ui"/>
-      <plugin id="org.eclipse.jst.common.frameworks"/>
-      <plugin id="org.eclipse.jst.common.project.facet.core"/>
-      <plugin id="org.eclipse.jst.common.project.facet.ui"/>
-      <plugin id="org.eclipse.jst.j2ee"/>
-      <plugin id="org.eclipse.jst.j2ee.core"/>
-      <plugin id="org.eclipse.jst.j2ee.jca"/>
-      <plugin id="org.eclipse.jst.j2ee.web"/>
-      <plugin id="org.eclipse.jst.jee"/>
-      <plugin id="org.eclipse.jst.jee.web"/>
-      <plugin id="org.eclipse.jst.jsf.common"/>
-      <plugin id="org.eclipse.jst.jsf.common.runtime"/>
-      <plugin id="org.eclipse.jst.jsf.common.ui"/>
-      <plugin id="org.eclipse.jst.jsf.core"/>
-      <plugin id="org.eclipse.jst.jsf.doc.user"/>
-      <plugin id="org.eclipse.jst.jsf.facesconfig"/>
-      <plugin id="org.eclipse.jst.jsf.facesconfig.ui"/>
-      <plugin id="org.eclipse.jst.jsf.standard.tagsupport"/>
-      <plugin id="org.eclipse.jst.jsf.ui"/>
-      <plugin id="org.eclipse.jst.jsp.core"/>
-      <plugin id="org.eclipse.jst.jsp.ui"/>
-      <plugin id="org.eclipse.jst.jsp.ui.infopop"/>
-      <plugin id="org.eclipse.jst.server.core"/>
-      <plugin id="org.eclipse.jst.server.generic.core"/>
-      <plugin id="org.eclipse.jst.server.generic.ui"/>
-      <plugin id="org.eclipse.jst.server.ui"/>
-      <plugin id="org.eclipse.jst.server.ui.doc.user"/>
-      <plugin id="org.eclipse.jst.server.ui.infopop"/>
-      <plugin id="org.eclipse.jst.standard.schemas"/>
+      <plugin id="org.eclipse.jsch.ui.source"/>
+      <plugin id="org.eclipse.json"/>
+      <plugin id="org.eclipse.launchbar.core"/>
+      <plugin id="org.eclipse.launchbar.ui"/>
       <plugin id="org.eclipse.ltk.core.refactoring"/>
+      <plugin id="org.eclipse.ltk.core.refactoring.source"/>
       <plugin id="org.eclipse.ltk.ui.refactoring"/>
-      <plugin id="org.eclipse.m2m.qvt.oml"/>
-      <plugin id="org.eclipse.m2m.qvt.oml.common"/>
-      <plugin id="org.eclipse.m2m.qvt.oml.cst.parser"/>
-      <plugin id="org.eclipse.m2m.qvt.oml.ecore.imperativeocl"/>
-      <plugin id="org.eclipse.m2m.qvt.oml.emf.util"/>
-      <plugin id="org.eclipse.m2m.qvt.oml.project"/>
-      <plugin id="org.eclipse.m2m.qvt.oml.runtime"/>
-      <plugin id="org.eclipse.mylyn"/>
-      <plugin id="org.eclipse.mylyn.bugzilla.core"/>
-      <plugin id="org.eclipse.mylyn.bugzilla.ide"/>
-      <plugin id="org.eclipse.mylyn.bugzilla.ui"/>
-      <plugin id="org.eclipse.mylyn.commons.core"/>
-      <plugin id="org.eclipse.mylyn.commons.net"/>
-      <plugin id="org.eclipse.mylyn.commons.ui"/>
-      <plugin id="org.eclipse.mylyn.compatibility"/>
-      <plugin id="org.eclipse.mylyn.context.core"/>
-      <plugin id="org.eclipse.mylyn.context.ui"/>
-      <plugin id="org.eclipse.mylyn.discovery.core"/>
-      <plugin id="org.eclipse.mylyn.discovery.ui"/>
-      <plugin id="org.eclipse.mylyn.help.ui"/>
-      <plugin id="org.eclipse.mylyn.ide.ant"/>
-      <plugin id="org.eclipse.mylyn.ide.ui"/>
-      <plugin id="org.eclipse.mylyn.java.tasks"/>
-      <plugin id="org.eclipse.mylyn.java.ui"/>
-      <plugin id="org.eclipse.mylyn.monitor.core"/>
-      <plugin id="org.eclipse.mylyn.monitor.ui"/>
-      <plugin id="org.eclipse.mylyn.pde.ui"/>
-      <plugin id="org.eclipse.mylyn.resources.ui"/>
-      <plugin id="org.eclipse.mylyn.tasks.bugs"/>
-      <plugin id="org.eclipse.mylyn.tasks.core"/>
-      <plugin id="org.eclipse.mylyn.tasks.ui"/>
-      <plugin id="org.eclipse.mylyn.team.cvs"/>
-      <plugin id="org.eclipse.mylyn.team.ui"/>
-      <plugin id="org.eclipse.mylyn.wikitext.confluence.core"/>
-      <plugin id="org.eclipse.mylyn.wikitext.confluence.ui"/>
-      <plugin id="org.eclipse.mylyn.wikitext.core"/>
-      <plugin id="org.eclipse.mylyn.wikitext.help.ui"/>
-      <plugin id="org.eclipse.mylyn.wikitext.mediawiki.core"/>
-      <plugin id="org.eclipse.mylyn.wikitext.mediawiki.ui"/>
-      <plugin id="org.eclipse.mylyn.wikitext.tasks.ui"/>
-      <plugin id="org.eclipse.mylyn.wikitext.textile.core"/>
-      <plugin id="org.eclipse.mylyn.wikitext.textile.ui"/>
-      <plugin id="org.eclipse.mylyn.wikitext.tracwiki.core"/>
-      <plugin id="org.eclipse.mylyn.wikitext.tracwiki.ui"/>
-      <plugin id="org.eclipse.mylyn.wikitext.twiki.core"/>
-      <plugin id="org.eclipse.mylyn.wikitext.twiki.ui"/>
-      <plugin id="org.eclipse.mylyn.wikitext.ui"/>
-      <plugin id="org.eclipse.ocl"/>
-      <plugin id="org.eclipse.ocl.ecore"/>
+      <plugin id="org.eclipse.ltk.ui.refactoring.source"/>
+      <plugin id="org.eclipse.nebula.widgets.tablecombo"/>
+      <plugin id="org.eclipse.oomph.base"/>
+      <plugin id="org.eclipse.oomph.base.edit"/>
+      <plugin id="org.eclipse.oomph.extractor.lib"/>
+      <plugin id="org.eclipse.oomph.jreinfo"/>
+      <plugin id="org.eclipse.oomph.jreinfo.ui"/>
+      <plugin id="org.eclipse.oomph.p2"/>
+      <plugin id="org.eclipse.oomph.p2.core"/>
+      <plugin id="org.eclipse.oomph.p2.doc"/>
+      <plugin id="org.eclipse.oomph.p2.edit"/>
+      <plugin id="org.eclipse.oomph.p2.ui"/>
+      <plugin id="org.eclipse.oomph.predicates"/>
+      <plugin id="org.eclipse.oomph.predicates.edit"/>
+      <plugin id="org.eclipse.oomph.preferences"/>
+      <plugin id="org.eclipse.oomph.resources"/>
+      <plugin id="org.eclipse.oomph.resources.edit"/>
+      <plugin id="org.eclipse.oomph.setup"/>
+      <plugin id="org.eclipse.oomph.setup.core"/>
+      <plugin id="org.eclipse.oomph.setup.doc"/>
+      <plugin id="org.eclipse.oomph.setup.edit"/>
+      <plugin id="org.eclipse.oomph.setup.editor"/>
+      <plugin id="org.eclipse.oomph.setup.p2"/>
+      <plugin id="org.eclipse.oomph.setup.p2.edit"/>
+      <plugin id="org.eclipse.oomph.setup.sync"/>
+      <plugin id="org.eclipse.oomph.setup.ui"/>
+      <plugin id="org.eclipse.oomph.setup.ui.questionnaire"/>
+      <plugin id="org.eclipse.oomph.ui"/>
+      <plugin id="org.eclipse.oomph.util"/>
+      <plugin id="org.eclipse.oomph.workingsets"/>
+      <plugin id="org.eclipse.oomph.workingsets.edit"/>
+      <plugin id="org.eclipse.oomph.workingsets.editor"/>
       <plugin id="org.eclipse.osgi"/>
+      <plugin id="org.eclipse.osgi.compatibility.state" fragment="true"/>
+      <plugin id="org.eclipse.osgi.compatibility.state.source"/>
       <plugin id="org.eclipse.osgi.services"/>
+      <plugin id="org.eclipse.osgi.services.source"/>
+      <plugin id="org.eclipse.osgi.source"/>
       <plugin id="org.eclipse.osgi.util"/>
+      <plugin id="org.eclipse.osgi.util.source"/>
       <plugin id="org.eclipse.pde"/>
       <plugin id="org.eclipse.pde.api.tools"/>
+      <plugin id="org.eclipse.pde.api.tools.annotations"/>
       <plugin id="org.eclipse.pde.api.tools.ui"/>
       <plugin id="org.eclipse.pde.build"/>
       <plugin id="org.eclipse.pde.core"/>
       <plugin id="org.eclipse.pde.doc.user"/>
+      <plugin id="org.eclipse.pde.ds.annotations"/>
       <plugin id="org.eclipse.pde.ds.core"/>
+      <plugin id="org.eclipse.pde.ds.lib"/>
       <plugin id="org.eclipse.pde.ds.ui"/>
+      <plugin id="org.eclipse.pde.ds1_2.lib"/>
+      <plugin id="org.eclipse.pde.genericeditor.extension"/>
       <plugin id="org.eclipse.pde.junit.runtime"/>
+      <plugin id="org.eclipse.pde.launching"/>
       <plugin id="org.eclipse.pde.runtime"/>
       <plugin id="org.eclipse.pde.ua.core"/>
       <plugin id="org.eclipse.pde.ua.ui"/>
       <plugin id="org.eclipse.pde.ui"/>
       <plugin id="org.eclipse.pde.ui.templates"/>
       <plugin id="org.eclipse.platform"/>
+      <plugin id="org.eclipse.platform.doc.isv"/>
       <plugin id="org.eclipse.platform.doc.user"/>
+      <plugin id="org.eclipse.platform.source"/>
+      <plugin id="org.eclipse.rap.doc"/>
+      <plugin id="org.eclipse.rap.tools.intro"/>
+      <plugin id="org.eclipse.rap.tools.intro.source"/>
+      <plugin id="org.eclipse.rap.tools.launch"/>
+      <plugin id="org.eclipse.rap.tools.launch.rwt"/>
+      <plugin id="org.eclipse.rap.tools.launch.rwt.source"/>
+      <plugin id="org.eclipse.rap.tools.launch.source"/>
+      <plugin id="org.eclipse.rap.tools.templates"/>
+      <plugin id="org.eclipse.rap.tools.templates.source"/>
       <plugin id="org.eclipse.rcp"/>
-      <plugin id="org.eclipse.rse"/>
-      <plugin id="org.eclipse.rse.connectorservice.dstore"/>
-      <plugin id="org.eclipse.rse.connectorservice.local"/>
-      <plugin id="org.eclipse.rse.connectorservice.ssh"/>
-      <plugin id="org.eclipse.rse.connectorservice.telnet"/>
-      <plugin id="org.eclipse.rse.core"/>
-      <plugin id="org.eclipse.rse.doc.user"/>
-      <plugin id="org.eclipse.rse.dstore.security"/>
-      <plugin id="org.eclipse.rse.efs"/>
-      <plugin id="org.eclipse.rse.efs.ui"/>
-      <plugin id="org.eclipse.rse.files.ui"/>
-      <plugin id="org.eclipse.rse.importexport"/>
-      <plugin id="org.eclipse.rse.processes.ui"/>
-      <plugin id="org.eclipse.rse.services"/>
-      <plugin id="org.eclipse.rse.services.dstore"/>
-      <plugin id="org.eclipse.rse.services.files.ftp"/>
-      <plugin id="org.eclipse.rse.services.local"/>
-      <plugin id="org.eclipse.rse.services.ssh"/>
-      <plugin id="org.eclipse.rse.services.telnet"/>
-      <plugin id="org.eclipse.rse.shells.ui"/>
-      <plugin id="org.eclipse.rse.subsystems.files.core"/>
-      <plugin id="org.eclipse.rse.subsystems.files.dstore"/>
-      <plugin id="org.eclipse.rse.subsystems.files.ftp"/>
-      <plugin id="org.eclipse.rse.subsystems.files.local"/>
-      <plugin id="org.eclipse.rse.subsystems.files.ssh"/>
-      <plugin id="org.eclipse.rse.subsystems.processes.core"/>
-      <plugin id="org.eclipse.rse.subsystems.processes.dstore"/>
-      <plugin id="org.eclipse.rse.subsystems.processes.local"/>
-      <plugin id="org.eclipse.rse.subsystems.processes.shell.linux"/>
-      <plugin id="org.eclipse.rse.subsystems.shells.core"/>
-      <plugin id="org.eclipse.rse.subsystems.shells.dstore"/>
-      <plugin id="org.eclipse.rse.subsystems.shells.local"/>
-      <plugin id="org.eclipse.rse.subsystems.shells.ssh"/>
-      <plugin id="org.eclipse.rse.subsystems.shells.telnet"/>
-      <plugin id="org.eclipse.rse.subsystems.terminals.core"/>
-      <plugin id="org.eclipse.rse.subsystems.terminals.ssh"/>
-      <plugin id="org.eclipse.rse.terminals.ui"/>
-      <plugin id="org.eclipse.rse.ui"/>
+      <plugin id="org.eclipse.recommenders.apidocs"/>
+      <plugin id="org.eclipse.recommenders.apidocs.rcp"/>
+      <plugin id="org.eclipse.recommenders.calls"/>
+      <plugin id="org.eclipse.recommenders.calls.rcp"/>
+      <plugin id="org.eclipse.recommenders.chain.rcp"/>
+      <plugin id="org.eclipse.recommenders.completion.rcp"/>
+      <plugin id="org.eclipse.recommenders.constructors"/>
+      <plugin id="org.eclipse.recommenders.constructors.rcp"/>
+      <plugin id="org.eclipse.recommenders.coordinates"/>
+      <plugin id="org.eclipse.recommenders.coordinates.rcp"/>
+      <plugin id="org.eclipse.recommenders.injection"/>
+      <plugin id="org.eclipse.recommenders.jayes"/>
+      <plugin id="org.eclipse.recommenders.jayes.io"/>
+      <plugin id="org.eclipse.recommenders.jdt"/>
+      <plugin id="org.eclipse.recommenders.models"/>
+      <plugin id="org.eclipse.recommenders.models.rcp"/>
+      <plugin id="org.eclipse.recommenders.net"/>
+      <plugin id="org.eclipse.recommenders.overrides"/>
+      <plugin id="org.eclipse.recommenders.overrides.rcp"/>
+      <plugin id="org.eclipse.recommenders.rcp"/>
+      <plugin id="org.eclipse.recommenders.snipmatch"/>
+      <plugin id="org.eclipse.recommenders.snipmatch.rcp"/>
+      <plugin id="org.eclipse.recommenders.statics"/>
+      <plugin id="org.eclipse.recommenders.statics.rcp"/>
+      <plugin id="org.eclipse.recommenders.subwords.rcp"/>
+      <plugin id="org.eclipse.recommenders.types.rcp"/>
+      <plugin id="org.eclipse.recommenders.utils"/>
+      <plugin id="org.eclipse.recommenders.utils.rcp"/>
+      <plugin id="org.eclipse.remote.core"/>
       <plugin id="org.eclipse.search"/>
+      <plugin id="org.eclipse.search.source"/>
       <plugin id="org.eclipse.swt"/>
-      <plugin id="org.eclipse.swt.carbon.macosx" fragment="true"/>
-      <plugin id="org.eclipse.swt.cocoa.macosx" fragment="true"/>
-      <plugin id="org.eclipse.swt.cocoa.macosx.x86_64" fragment="true"/>
-      <plugin id="org.eclipse.swt.gtk.linux.ppc" fragment="true"/>
-      <plugin id="org.eclipse.swt.gtk.linux.s390" fragment="true"/>
-      <plugin id="org.eclipse.swt.gtk.linux.s390x" fragment="true"/>
-      <plugin id="org.eclipse.swt.gtk.linux.x86" fragment="true"/>
-      <plugin id="org.eclipse.swt.gtk.solaris.sparc" fragment="true"/>
-      <plugin id="org.eclipse.swt.gtk.solaris.x86" fragment="true"/>
-      <plugin id="org.eclipse.swt.motif.aix.ppc" fragment="true"/>
-      <plugin id="org.eclipse.swt.motif.hpux.PA_RISC" fragment="true"/>
-      <plugin id="org.eclipse.swt.motif.hpux.ia64_32" fragment="true"/>
-      <plugin id="org.eclipse.swt.motif.linux.x86" fragment="true"/>
-      <plugin id="org.eclipse.swt.motif.solaris.sparc" fragment="true"/>
-      <plugin id="org.eclipse.swt.photon.qnx.x86" fragment="true"/>
-      <plugin id="org.eclipse.swt.win32.win32.x86" fragment="true"/>
-      <plugin id="org.eclipse.swt.win32.win32.x86_64" fragment="true"/>
-      <plugin id="org.eclipse.swt.wpf.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.swt.gtk.linux.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.swt.gtk.linux.x86_64.source"/>
+      <plugin id="org.eclipse.swtbot.e4.finder"/>
+      <plugin id="org.eclipse.swtbot.eclipse.core"/>
+      <plugin id="org.eclipse.swtbot.eclipse.finder"/>
+      <plugin id="org.eclipse.swtbot.eclipse.gef.finder"/>
+      <plugin id="org.eclipse.swtbot.eclipse.spy"/>
+      <plugin id="org.eclipse.swtbot.eclipse.ui"/>
+      <plugin id="org.eclipse.swtbot.forms.finder"/>
+      <plugin id="org.eclipse.swtbot.generator"/>
+      <plugin id="org.eclipse.swtbot.generator.client"/>
+      <plugin id="org.eclipse.swtbot.generator.jdt"/>
+      <plugin id="org.eclipse.swtbot.generator.rules.workbench"/>
+      <plugin id="org.eclipse.swtbot.generator.ui"/>
+      <plugin id="org.eclipse.swtbot.go"/>
+      <plugin id="org.eclipse.swtbot.junit4_x"/>
+      <plugin id="org.eclipse.swtbot.swt.finder"/>
       <plugin id="org.eclipse.team.core"/>
-      <plugin id="org.eclipse.team.cvs.core"/>
-      <plugin id="org.eclipse.team.cvs.ssh"/>
-      <plugin id="org.eclipse.team.cvs.ssh2"/>
-      <plugin id="org.eclipse.team.cvs.ui"/>
+      <plugin id="org.eclipse.team.core.source"/>
+      <plugin id="org.eclipse.team.genericeditor.diff.extension"/>
+      <plugin id="org.eclipse.team.genericeditor.diff.extension.source"/>
       <plugin id="org.eclipse.team.ui"/>
+      <plugin id="org.eclipse.team.ui.source"/>
       <plugin id="org.eclipse.text"/>
-      <plugin id="org.eclipse.tm.terminal"/>
-      <plugin id="org.eclipse.tm.terminal.serial"/>
-      <plugin id="org.eclipse.tm.terminal.ssh"/>
-      <plugin id="org.eclipse.tm.terminal.telnet"/>
-      <plugin id="org.eclipse.tm.terminal.view"/>
+      <plugin id="org.eclipse.text.source"/>
+      <plugin id="org.eclipse.tm.terminal.control"/>
+      <plugin id="org.eclipse.tools.layout.spy"/>
+      <plugin id="org.eclipse.tools.templates.core"/>
+      <plugin id="org.eclipse.tools.templates.freemarker"/>
+      <plugin id="org.eclipse.tools.templates.ui"/>
       <plugin id="org.eclipse.ui"/>
       <plugin id="org.eclipse.ui.browser"/>
-      <plugin id="org.eclipse.ui.carbon" fragment="true"/>
+      <plugin id="org.eclipse.ui.browser.source"/>
       <plugin id="org.eclipse.ui.cheatsheets"/>
-      <plugin id="org.eclipse.ui.cocoa" fragment="true"/>
+      <plugin id="org.eclipse.ui.cheatsheets.source"/>
       <plugin id="org.eclipse.ui.console"/>
+      <plugin id="org.eclipse.ui.console.source"/>
       <plugin id="org.eclipse.ui.editors"/>
+      <plugin id="org.eclipse.ui.editors.source"/>
       <plugin id="org.eclipse.ui.externaltools"/>
+      <plugin id="org.eclipse.ui.externaltools.source"/>
       <plugin id="org.eclipse.ui.forms"/>
+      <plugin id="org.eclipse.ui.forms.source"/>
+      <plugin id="org.eclipse.ui.genericeditor"/>
+      <plugin id="org.eclipse.ui.genericeditor.source"/>
       <plugin id="org.eclipse.ui.ide"/>
       <plugin id="org.eclipse.ui.ide.application"/>
+      <plugin id="org.eclipse.ui.ide.application.source"/>
+      <plugin id="org.eclipse.ui.ide.source"/>
       <plugin id="org.eclipse.ui.intro"/>
+      <plugin id="org.eclipse.ui.intro.quicklinks"/>
+      <plugin id="org.eclipse.ui.intro.quicklinks.source"/>
+      <plugin id="org.eclipse.ui.intro.source"/>
       <plugin id="org.eclipse.ui.intro.universal"/>
+      <plugin id="org.eclipse.ui.intro.universal.source"/>
+      <plugin id="org.eclipse.ui.monitoring"/>
+      <plugin id="org.eclipse.ui.monitoring.source"/>
       <plugin id="org.eclipse.ui.navigator"/>
       <plugin id="org.eclipse.ui.navigator.resources"/>
+      <plugin id="org.eclipse.ui.navigator.resources.source"/>
+      <plugin id="org.eclipse.ui.navigator.source"/>
       <plugin id="org.eclipse.ui.net"/>
-      <plugin id="org.eclipse.ui.presentations.r21"/>
+      <plugin id="org.eclipse.ui.net.source"/>
+      <plugin id="org.eclipse.ui.source"/>
+      <plugin id="org.eclipse.ui.themes"/>
+      <plugin id="org.eclipse.ui.themes.source"/>
+      <plugin id="org.eclipse.ui.trace"/>
       <plugin id="org.eclipse.ui.views"/>
       <plugin id="org.eclipse.ui.views.log"/>
       <plugin id="org.eclipse.ui.views.properties.tabbed"/>
-      <plugin id="org.eclipse.ui.win32" fragment="true"/>
+      <plugin id="org.eclipse.ui.views.properties.tabbed.source"/>
+      <plugin id="org.eclipse.ui.views.source"/>
       <plugin id="org.eclipse.ui.workbench"/>
-      <plugin id="org.eclipse.ui.workbench.compatibility" fragment="true"/>
+      <plugin id="org.eclipse.ui.workbench.source"/>
       <plugin id="org.eclipse.ui.workbench.texteditor"/>
+      <plugin id="org.eclipse.ui.workbench.texteditor.source"/>
       <plugin id="org.eclipse.update.configurator"/>
-      <plugin id="org.eclipse.update.core"/>
-      <plugin id="org.eclipse.update.core.linux" fragment="true"/>
-      <plugin id="org.eclipse.update.core.win32" fragment="true"/>
-      <plugin id="org.eclipse.update.scheduler"/>
-      <plugin id="org.eclipse.update.ui"/>
-      <plugin id="org.eclipse.wst.command.env"/>
-      <plugin id="org.eclipse.wst.command.env.core"/>
-      <plugin id="org.eclipse.wst.command.env.doc.user"/>
-      <plugin id="org.eclipse.wst.command.env.infopop"/>
-      <plugin id="org.eclipse.wst.command.env.ui"/>
+      <plugin id="org.eclipse.update.configurator.source"/>
+      <plugin id="org.eclipse.userstorage"/>
+      <plugin id="org.eclipse.userstorage.oauth"/>
+      <plugin id="org.eclipse.userstorage.ui"/>
       <plugin id="org.eclipse.wst.common.core"/>
       <plugin id="org.eclipse.wst.common.emf"/>
       <plugin id="org.eclipse.wst.common.emfworkbench.integration"/>
@@ -682,6 +925,7 @@ This Agreement is governed by the laws of the State of New York and the intellec
       <plugin id="org.eclipse.wst.common.frameworks.ui"/>
       <plugin id="org.eclipse.wst.common.infopop"/>
       <plugin id="org.eclipse.wst.common.modulecore"/>
+      <plugin id="org.eclipse.wst.common.modulecore.ui"/>
       <plugin id="org.eclipse.wst.common.project.facet.core"/>
       <plugin id="org.eclipse.wst.common.project.facet.ui"/>
       <plugin id="org.eclipse.wst.common.snippets"/>
@@ -700,15 +944,48 @@ This Agreement is governed by the laws of the State of New York and the intellec
       <plugin id="org.eclipse.wst.internet.cache"/>
       <plugin id="org.eclipse.wst.internet.monitor.core"/>
       <plugin id="org.eclipse.wst.internet.monitor.ui"/>
+      <plugin id="org.eclipse.wst.jsdt.chromium"/>
+      <plugin id="org.eclipse.wst.jsdt.chromium.debug"/>
+      <plugin id="org.eclipse.wst.jsdt.chromium.debug.core"/>
+      <plugin id="org.eclipse.wst.jsdt.chromium.debug.js"/>
+      <plugin id="org.eclipse.wst.jsdt.chromium.debug.jsdtbridge"/>
+      <plugin id="org.eclipse.wst.jsdt.chromium.debug.ui"/>
+      <plugin id="org.eclipse.wst.jsdt.chromium.wip.eclipse"/>
+      <plugin id="org.eclipse.wst.jsdt.chromium.wipbackend.dev"/>
+      <plugin id="org.eclipse.wst.jsdt.chromium.wipbackend.protocol_1_0"/>
       <plugin id="org.eclipse.wst.jsdt.core"/>
+      <plugin id="org.eclipse.wst.jsdt.debug.core"/>
+      <plugin id="org.eclipse.wst.jsdt.debug.crossfire"/>
+      <plugin id="org.eclipse.wst.jsdt.debug.rhino"/>
+      <plugin id="org.eclipse.wst.jsdt.debug.rhino.debugger"/>
+      <plugin id="org.eclipse.wst.jsdt.debug.transport"/>
+      <plugin id="org.eclipse.wst.jsdt.debug.ui"/>
       <plugin id="org.eclipse.wst.jsdt.doc"/>
+      <plugin id="org.eclipse.wst.jsdt.js.bower"/>
+      <plugin id="org.eclipse.wst.jsdt.js.cli"/>
+      <plugin id="org.eclipse.wst.jsdt.js.common"/>
+      <plugin id="org.eclipse.wst.jsdt.js.grunt"/>
+      <plugin id="org.eclipse.wst.jsdt.js.gulp"/>
+      <plugin id="org.eclipse.wst.jsdt.js.node"/>
+      <plugin id="org.eclipse.wst.jsdt.js.node.common"/>
+      <plugin id="org.eclipse.wst.jsdt.js.npm"/>
       <plugin id="org.eclipse.wst.jsdt.manipulation"/>
       <plugin id="org.eclipse.wst.jsdt.support.firefox"/>
       <plugin id="org.eclipse.wst.jsdt.support.ie"/>
       <plugin id="org.eclipse.wst.jsdt.ui"/>
       <plugin id="org.eclipse.wst.jsdt.web.core"/>
-      <plugin id="org.eclipse.wst.jsdt.web.support.jsp"/>
       <plugin id="org.eclipse.wst.jsdt.web.ui"/>
+      <plugin id="org.eclipse.wst.json.bower.core"/>
+      <plugin id="org.eclipse.wst.json.bower.ui"/>
+      <plugin id="org.eclipse.wst.json.core"/>
+      <plugin id="org.eclipse.wst.json.eslint.core"/>
+      <plugin id="org.eclipse.wst.json.eslint.ui"/>
+      <plugin id="org.eclipse.wst.json.jshint.core"/>
+      <plugin id="org.eclipse.wst.json.jshint.ui"/>
+      <plugin id="org.eclipse.wst.json.npm.core"/>
+      <plugin id="org.eclipse.wst.json.npm.ui"/>
+      <plugin id="org.eclipse.wst.json.schemaprocessor"/>
+      <plugin id="org.eclipse.wst.json.ui"/>
       <plugin id="org.eclipse.wst.server.core"/>
       <plugin id="org.eclipse.wst.server.discovery"/>
       <plugin id="org.eclipse.wst.server.ui"/>
@@ -726,74 +1003,86 @@ This Agreement is governed by the laws of the State of New York and the intellec
       <plugin id="org.eclipse.wst.web.ui"/>
       <plugin id="org.eclipse.wst.web.ui.infopop"/>
       <plugin id="org.eclipse.wst.webtools.doc.user"/>
-      <plugin id="org.eclipse.wst.ws"/>
-      <plugin id="org.eclipse.wst.ws.explorer"/>
-      <plugin id="org.eclipse.wst.ws.infopop"/>
-      <plugin id="org.eclipse.wst.ws.parser"/>
-      <plugin id="org.eclipse.wst.ws.service.policy"/>
-      <plugin id="org.eclipse.wst.ws.service.policy.ui"/>
-      <plugin id="org.eclipse.wst.ws.ui"/>
-      <plugin id="org.eclipse.wst.wsdl"/>
-      <plugin id="org.eclipse.wst.wsdl.ui"/>
-      <plugin id="org.eclipse.wst.wsdl.ui.doc.user"/>
-      <plugin id="org.eclipse.wst.wsdl.validation"/>
-      <plugin id="org.eclipse.wst.wsi"/>
-      <plugin id="org.eclipse.wst.wsi.ui"/>
-      <plugin id="org.eclipse.wst.wsi.ui.doc.user"/>
       <plugin id="org.eclipse.wst.xml.core"/>
       <plugin id="org.eclipse.wst.xml.ui"/>
       <plugin id="org.eclipse.wst.xml.ui.infopop"/>
-      <plugin id="org.eclipse.wst.xml.xpath.core"/>
-      <plugin id="org.eclipse.wst.xml.xpath.ui"/>
-      <plugin id="org.eclipse.wst.xml.xpath2.processor"/>
       <plugin id="org.eclipse.wst.xmleditor.doc.user"/>
       <plugin id="org.eclipse.wst.xsd.core"/>
       <plugin id="org.eclipse.wst.xsd.ui"/>
       <plugin id="org.eclipse.wst.xsdeditor.doc.user"/>
-      <plugin id="org.eclipse.wst.xsl"/>
-      <plugin id="org.eclipse.wst.xsl.core"/>
-      <plugin id="org.eclipse.wst.xsl.debug.ui"/>
-      <plugin id="org.eclipse.wst.xsl.doc"/>
-      <plugin id="org.eclipse.wst.xsl.jaxp.debug"/>
-      <plugin id="org.eclipse.wst.xsl.jaxp.debug.ui"/>
-      <plugin id="org.eclipse.wst.xsl.jaxp.launching"/>
-      <plugin id="org.eclipse.wst.xsl.launching"/>
-      <plugin id="org.eclipse.wst.xsl.saxon"/>
-      <plugin id="org.eclipse.wst.xsl.ui"/>
-      <plugin id="org.eclipse.wst.xsl.xalan"/>
       <plugin id="org.eclipse.xsd"/>
-      <plugin id="org.eclipse.xsd.cheatsheets"/>
-      <plugin id="org.eclipse.xsd.doc"/>
-      <plugin id="org.eclipse.xsd.ecore.converter"/>
-      <plugin id="org.eclipse.xsd.ecore.exporter"/>
-      <plugin id="org.eclipse.xsd.ecore.importer"/>
       <plugin id="org.eclipse.xsd.edit"/>
-      <plugin id="org.eclipse.xsd.editor"/>
-      <plugin id="org.eclipse.xsd.example.installer"/>
-      <plugin id="org.eclipse.xsd.mapping"/>
-      <plugin id="org.eclipse.xsd.mapping.editor"/>
+      <plugin id="org.freemarker"/>
+      <plugin id="org.gradle.toolingapi"/>
+      <plugin id="org.h2"/>
+      <plugin id="org.h2.source"/>
       <plugin id="org.hamcrest.core"/>
+      <plugin id="org.hamcrest.library"/>
+      <plugin id="org.jacoco.agent"/>
+      <plugin id="org.jacoco.core"/>
+      <plugin id="org.jacoco.report"/>
+      <plugin id="org.jsoup"/>
       <plugin id="org.junit"/>
-      <plugin id="org.junit4"/>
-      <plugin id="org.mortbay.jetty.server"/>
-      <plugin id="org.mortbay.jetty.util"/>
+      <plugin id="org.junit.jupiter.api"/>
+      <plugin id="org.junit.jupiter.engine"/>
+      <plugin id="org.junit.jupiter.migrationsupport"/>
+      <plugin id="org.junit.jupiter.params"/>
+      <plugin id="org.junit.platform.commons"/>
+      <plugin id="org.junit.platform.engine"/>
+      <plugin id="org.junit.platform.launcher"/>
+      <plugin id="org.junit.platform.runner"/>
+      <plugin id="org.junit.platform.suite.api"/>
+      <plugin id="org.junit.source"/>
+      <plugin id="org.junit.vintage.engine"/>
+      <plugin id="org.mozilla.javascript"/>
       <plugin id="org.objectweb.asm"/>
+      <plugin id="org.objectweb.asm.commons"/>
+      <plugin id="org.objectweb.asm.tree"/>
+      <plugin id="org.opentest4j"/>
+      <plugin id="org.postgresql.jdbc42"/>
+      <plugin id="org.postgresql.jdbc42.source"/>
+      <plugin id="org.redline-rpm"/>
+      <plugin id="org.redline-rpm.source"/>
       <plugin id="org.sat4j.core"/>
       <plugin id="org.sat4j.pb"/>
-      <plugin id="org.tigris.subversion.clientadapter"/>
-      <plugin id="org.tigris.subversion.clientadapter.javahl"/>
-      <plugin id="org.tigris.subversion.clientadapter.svnkit"/>
-      <plugin id="org.tigris.subversion.subclipse.core"/>
-      <plugin id="org.tigris.subversion.subclipse.doc"/>
-      <plugin id="org.tigris.subversion.subclipse.graph"/>
-      <plugin id="org.tigris.subversion.subclipse.mylyn"/>
-      <plugin id="org.tigris.subversion.subclipse.ui"/>
-      <plugin id="org.tmatesoft.svnkit"/>
-      <plugin id="org.uddi4j"/>
+      <plugin id="org.slf4j.api"/>
+      <plugin id="org.slf4j.api.source"/>
+      <plugin id="org.slf4j.commons.logging"/>
+      <plugin id="org.slf4j.log4j12"/>
+      <plugin id="org.springframework.aop"/>
+      <plugin id="org.springframework.aop.source"/>
+      <plugin id="org.springframework.aspects"/>
+      <plugin id="org.springframework.aspects.source"/>
+      <plugin id="org.springframework.beans"/>
+      <plugin id="org.springframework.beans.source"/>
+      <plugin id="org.springframework.context"/>
+      <plugin id="org.springframework.context.source"/>
+      <plugin id="org.springframework.context.support"/>
+      <plugin id="org.springframework.context.support.source"/>
+      <plugin id="org.springframework.core"/>
+      <plugin id="org.springframework.core.source"/>
+      <plugin id="org.springframework.expression"/>
+      <plugin id="org.springframework.expression.source"/>
+      <plugin id="org.springframework.instrument"/>
+      <plugin id="org.springframework.instrument.source"/>
+      <plugin id="org.springframework.jdbc"/>
+      <plugin id="org.springframework.jdbc.source"/>
+      <plugin id="org.springframework.tx"/>
+      <plugin id="org.springframework.tx.source"/>
+      <plugin id="org.springframework.web"/>
+      <plugin id="org.springframework.web.servlet"/>
+      <plugin id="org.springframework.web.servlet.source"/>
+      <plugin id="org.springframework.web.source"/>
+      <plugin id="org.tukaani.xz"/>
+      <plugin id="org.tukaani.xz.source"/>
       <plugin id="org.w3c.css.sac"/>
+      <plugin id="org.w3c.css.sac.source"/>
       <plugin id="org.w3c.dom.events"/>
+      <plugin id="org.w3c.dom.events.source"/>
       <plugin id="org.w3c.dom.smil"/>
+      <plugin id="org.w3c.dom.smil.source"/>
       <plugin id="org.w3c.dom.svg"/>
+      <plugin id="org.w3c.dom.svg.source"/>
    </plugins>
 
    <features>
@@ -830,5 +1119,20 @@ This Agreement is governed by the laws of the State of New York and the intellec
       <feature id="org.eclipse.mylyn_feature" version="3.2.2.v20090912-0400-e3x"/>
    </features>
 
+   <configurations>
+      <plugin id="org.argeo.osgi.boot" autoStart="true" startLevel="1" />
+      <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="0" />
+      <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />
+      <plugin id="org.eclipse.equinox.ds" autoStart="true" startLevel="2" />
+      <plugin id="org.eclipse.equinox.event" autoStart="true" startLevel="2" />
+      <plugin id="org.eclipse.equinox.simpleconfigurator" autoStart="true" startLevel="1" />
+   </configurations>
+
+   <preferencesInfo>
+      <targetfile overwrite="false"/>
+   </preferencesInfo>
+
+   <cssInfo>
+   </cssInfo>
 
 </product>
index 19b35d1d0e8689c63ac957d11cd970c56aaf5a5a..850762749250be7ccf509a9273572e37d0883095 100644 (file)
@@ -6,7 +6,7 @@
          id="product"
          point="org.eclipse.core.runtime.products">
       <product
-            application="org.eclipse.ui.ide.workbench"
+            application="org.argeo.cms.ui.workbench.rcp.secureUi"
             name="Argeo SLC IDE">
          <property
                name="windowImages"
index 3e28a04e0f101cb35947ad23e54406031f00bdee..01836c4842f6560398b775d8fe0696fc95387dd7 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-       <classpathentry kind="src" path="src/main/java"/>
+       <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"/>
index ae3c1726048cd06b9a143e0376ed46dd9b9a8d53..09e3bc9b241c477ea341af9ee029becad0c2148c 100644 (file)
@@ -1 +1,2 @@
 /bin/
+/target/
index aa3700c991facb747d5179abbf2fa3d4558205c0..ab196498ca4e536158022b9252a69ea96b88d201 100644 (file)
@@ -1,21 +1,46 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: SLC IDE
-Bundle-SymbolicName: org.argeo.slc.ide.ui;singleton:=true
-Bundle-Version: 1.1.1.qualifier
-Bundle-Activator: org.argeo.slc.ide.ui.SlcIdeUiPlugin
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.debug.core,
- org.eclipse.jdt.launching,
- org.eclipse.debug.ui,
- org.eclipse.jdt.core,
- org.eclipse.ui.console,
- org.eclipse.jdt.debug.ui,
- org.eclipse.ui.ide,
- org.eclipse.core.variables,
- org.eclipse.pde.ui;bundle-version="3.4.0",
- org.eclipse.jdt.ui;bundle-version="3.4.2"
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Bundle-Vendor: Argeo GmbH
-Bundle-ActivationPolicy: lazy
+Manifest-Version: 1.0\r
+Bundle-ActivationPolicy: lazy\r
+Bundle-Activator: org.argeo.slc.ide.ui.SlcIdeUiPlugin\r
+Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt\r
+Bundle-ManifestVersion: 2\r
+Bundle-Name: IDE UI\r
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8\r
+Bundle-SymbolicName: org.argeo.slc.ide.ui;singleton=true\r
+Bundle-Version: 2.1.11.SNAPSHOT-r201801241311\r
+Export-Package: org.argeo.slc.ide.ui;uses:="org.eclipse.debug.core,org.e\r
+ clipse.jdt.core,org.eclipse.jdt.launching,org.eclipse.jface.preference,\r
+ org.eclipse.swt.graphics,org.eclipse.ui,org.eclipse.ui.plugin,org.osgi.\r
+ framework";version="2.1.11.SNAPSHOT-r201801241311",org.argeo.slc.ide.ui\r
+ .launch.preferences;uses:="org.eclipse.jface.preference,org.eclipse.ui"\r
+ ;version="2.1.11.SNAPSHOT-r201801241311",org.argeo.slc.ide.ui.launch.os\r
+ gi;uses:="org.eclipse.core.resources,org.eclipse.debug.core,org.eclipse\r
+ .debug.ui,org.eclipse.jdt.launching,org.eclipse.jface.viewers,org.eclip\r
+ se.pde.launching,org.eclipse.pde.ui.launcher,org.eclipse.swt.graphics,o\r
+ rg.eclipse.swt.widgets";version="2.1.11.SNAPSHOT-r201801241311",org.arg\r
+ eo.slc.ide.ui.launch.script;uses:="org.argeo.slc.ide.ui,org.eclipse.cor\r
+ e.resources,org.eclipse.debug.core,org.eclipse.debug.ui,org.eclipse.jdt\r
+ .core,org.eclipse.jdt.launching,org.eclipse.jface.viewers,org.eclipse.s\r
+ wt.widgets,org.eclipse.ui";version="2.1.11.SNAPSHOT-r201801241311"\r
+Import-Package: org.eclipse.swt.widgets,org.osgi.framework;version="0.0.\r
+ 0",org.argeo.slc.ide.ui,org.eclipse.core.resources,org.eclipse.core.var\r
+ iables,org.eclipse.debug.core,org.eclipse.debug.core.model,org.eclipse.\r
+ debug.ui,org.eclipse.jdt.core,org.eclipse.jdt.launching,org.eclipse.jfa\r
+ ce.dialogs,org.eclipse.jface.preference,org.eclipse.jface.resource,org.\r
+ eclipse.jface.viewers,org.eclipse.osgi.service.resolver;version="[1.6,2\r
+ )",org.eclipse.pde.core.plugin,org.eclipse.pde.launching,org.eclipse.pd\r
+ e.ui.launcher,org.eclipse.swt.events,org.eclipse.swt.graphics,org.eclip\r
+ se.swt.layout,org.eclipse.ui;ui.workbench=split,org.eclipse.ui.plugin,o\r
+ rg.argeo.cms.auth;version="[2.1,3)",org.argeo.eclipse.spring;version="[\r
+ 2.1,3)",org.argeo.eclipse.ui.utils;version="[2.1,3)",org.eclipse.core.r\r
+ untime.jobs,org.eclipse.jface.window,org.eclipse.swt,org.eclipse.ui.ser\r
+ vices,org.springframework.core;version="[3.2,4)",org.springframework.be\r
+ ans.factory;version="[3.2,4)",org.springframework.core.io.support;versi\r
+ on="[3.2,4)",org.eclipse.pde.core\r
+Include-Resource: icons/eclipse-launch.gif=icons/eclipse-launch.gif,icon\r
+ s/argeo-icon-100104-256.png=icons/argeo-icon-100104-256.png,icons/slc-l\r
+ aunch.gif=icons/slc-launch.gif,targets/managedTarget.target=targets/man\r
+ agedTarget.target,plugin.xml=plugin.xml\r
+Private-Package: icons,targets\r
+Require-Bundle: org.eclipse.core.runtime,org.eclipse.core.commands\r
+Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"\r
+SLC-Category: org.argeo.slc\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/bnd.bnd b/ide/plugins/org.argeo.slc.ide.ui/bnd.bnd
new file mode 100644 (file)
index 0000000..825921f
--- /dev/null
@@ -0,0 +1,22 @@
+Bundle-SymbolicName: org.argeo.slc.ide.ui;singleton=true
+Bundle-Activator: org.argeo.slc.ide.ui.SlcIdeUiPlugin
+Bundle-ActivationPolicy: lazy
+
+Require-Bundle:        org.eclipse.core.runtime,\
+org.eclipse.core.commands
+
+Import-Package:        org.argeo.cms.auth,\
+org.argeo.eclipse.spring,\
+org.argeo.eclipse.ui.utils,\
+org.eclipse.core.runtime.jobs,\
+org.eclipse.jface.window,\
+org.eclipse.swt,\
+org.eclipse.swt.widgets,\
+org.eclipse.ui.services,\
+org.osgi.*;version=0.0.0,\
+org.springframework.core,\
+org.springframework.beans.factory,\
+org.springframework.core.io.support,\
+!org.eclipse.core.runtime,\
+org.eclipse.pde.core,\
+*                              
diff --git a/ide/plugins/org.argeo.slc.ide.ui/pom.xml b/ide/plugins/org.argeo.slc.ide.ui/pom.xml
new file mode 100644 (file)
index 0000000..ef35acb
--- /dev/null
@@ -0,0 +1,46 @@
+<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>ide-plugins</artifactId>
+               <version>2.1.11-SNAPSHOT</version>
+               <relativePath>..</relativePath>
+       </parent>
+       <artifactId>org.argeo.slc.ide.ui</artifactId>
+       <name>IDE UI</name>
+       <packaging>jar</packaging>
+       <dependencies>
+               <!-- SLC -->
+               <dependency>
+                       <groupId>org.argeo.slc</groupId>
+                       <artifactId>org.argeo.slc.core</artifactId>
+                       <version>2.1.11-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.workbench</artifactId>
+                       <version>${version.argeo-commons}</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.argeo.commons.rcp</groupId>
+                       <artifactId>org.argeo.eclipse.ui.rcp</artifactId>
+                       <version>${version.argeo-rcp}</version>
+               </dependency>
+
+               <!-- Eclipse SDK -->
+               <dependency>
+                       <groupId>org.argeo.commons.rcp</groupId>
+                       <artifactId>org.argeo.dep.cms.ide</artifactId>
+                       <version>${version.argeo-rcp}</version>
+                       <scope>provided</scope>
+               </dependency>
+       </dependencies>
+</project>
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/DeployedSlcSystem.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/DeployedSlcSystem.java
deleted file mode 100644 (file)
index 8992432..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.argeo.slc.ide.ui;\r
-\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.util.List;\r
-import java.util.Vector;\r
-\r
-import org.eclipse.core.runtime.CoreException;\r
-import org.eclipse.jdt.launching.IVMInstall;\r
-import org.eclipse.jdt.launching.JavaRuntime;\r
-\r
-public class DeployedSlcSystem implements SlcSystem {\r
-       private File baseDir;\r
-       private String relLibDir = "lib";\r
-\r
-       public DeployedSlcSystem(String baseDirPath) {\r
-               try {\r
-                       this.baseDir = new File(baseDirPath).getCanonicalFile();\r
-               } catch (IOException e) {\r
-                       throw new RuntimeException("Cannot get path for " + baseDirPath, e);\r
-               }\r
-       }\r
-\r
-       public String[] getClasspath() throws CoreException {\r
-               List<String> classpath = new Vector<String>();\r
-               File libDir = new File(baseDir.getPath() + File.separator + relLibDir);\r
-               File[] files = libDir.listFiles();\r
-               for (File file : files) {\r
-                       try {\r
-                               classpath.add(file.getCanonicalPath());\r
-                       } catch (IOException e) {\r
-                               throw new RuntimeException("Cannot get path for " + file, e);\r
-                       }\r
-               }\r
-               return classpath.toArray(new String[classpath.size()]);\r
-       }\r
-\r
-       public IVMInstall getVmInstall() throws CoreException {\r
-               return JavaRuntime.getDefaultVMInstall();\r
-       }\r
-\r
-       public String getAntHome() {\r
-               return baseDir.getPath();\r
-       }\r
-\r
-       public String getJavaLibraryPath() {\r
-               return baseDir.getPath() + File.separator + "bin";\r
-       }\r
-\r
-}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/EmbeddedSlcSystem.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/EmbeddedSlcSystem.java
deleted file mode 100644 (file)
index e2414e0..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.argeo.slc.ide.ui;
-
-import org.argeo.slc.ide.ui.launch.preferences.SlcLaunchPreferencePage;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.launching.IVMInstall;
-import org.eclipse.jdt.launching.JavaRuntime;
-
-public class EmbeddedSlcSystem implements SlcSystem {
-       private final IJavaProject project;
-
-       public EmbeddedSlcSystem(IJavaProject project) {
-               this.project = project;
-       }
-
-       public String[] getClasspath() throws CoreException {
-               return JavaRuntime.computeDefaultRuntimeClassPath(project);
-       }
-
-       public String getJavaLibraryPath() {
-               String javaLibPath = SlcIdeUiPlugin.getDefault()
-                               .getPreferenceStore().getString(
-                                               SlcLaunchPreferencePage.PREF_SLC_RUNTIME_LOCATION);
-               if (javaLibPath == null || javaLibPath.equals(""))
-                       return null;
-               else
-                       return javaLibPath;
-       }
-
-       public IVMInstall getVmInstall() throws CoreException {
-               return JavaRuntime.getVMInstall(project);
-       }
-
-}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/SlcIdeUiPlugin.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/SlcIdeUiPlugin.java
deleted file mode 100644 (file)
index 3570a61..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-package org.argeo.slc.ide.ui;\r
-\r
-import java.net.URL;\r
-\r
-import org.eclipse.core.resources.IResource;\r
-import org.eclipse.core.runtime.CoreException;\r
-import org.eclipse.debug.core.DebugEvent;\r
-import org.eclipse.debug.core.DebugPlugin;\r
-import org.eclipse.debug.core.IDebugEventSetListener;\r
-import org.eclipse.debug.core.ILaunch;\r
-import org.eclipse.debug.core.model.IProcess;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.jface.resource.ImageRegistry;\r
-import org.eclipse.pde.core.plugin.TargetPlatform;\r
-import org.eclipse.swt.graphics.Image;\r
-import org.eclipse.ui.plugin.AbstractUIPlugin;\r
-import org.osgi.framework.BundleContext;\r
-\r
-/**\r
- * The activator class controls the plug-in life cycle\r
- */\r
-public class SlcIdeUiPlugin extends AbstractUIPlugin {\r
-\r
-       // The plug-in ID\r
-       public static final String ID = "org.argeo.slc.ide.ui";\r
-\r
-       // The shared instance\r
-       private static SlcIdeUiPlugin plugin;\r
-\r
-       /**\r
-        * The constructor\r
-        */\r
-       public SlcIdeUiPlugin() {\r
-       }\r
-\r
-       @Override\r
-       public void start(BundleContext context) throws Exception {\r
-               super.start(context);\r
-               plugin = this;\r
-               DebugPlugin.getDefault()\r
-                               .addDebugEventListener(new DebugEventListener());\r
-\r
-               String location = TargetPlatform.getLocation();\r
-               System.out.println(location);\r
-       }\r
-\r
-       @Override\r
-       public void stop(BundleContext context) throws Exception {\r
-               plugin = null;\r
-               super.stop(context);\r
-       }\r
-\r
-       /**\r
-        * Returns the shared instance\r
-        * \r
-        * @return the shared instance\r
-        */\r
-       public static SlcIdeUiPlugin getDefault() {\r
-               return plugin;\r
-       }\r
-\r
-       public Image getImage(String relativeURL) {\r
-               ImageRegistry imageRegistry = getImageRegistry();\r
-               Image image = imageRegistry.get(relativeURL);\r
-               if (image == null) {\r
-                       URL imageURL = getBundle().getEntry(relativeURL);\r
-                       ImageDescriptor descriptor = ImageDescriptor\r
-                                       .createFromURL(imageURL);\r
-                       image = descriptor.createImage();\r
-                       imageRegistry.put(relativeURL, image);\r
-               }\r
-               return image;\r
-       }\r
-\r
-       protected static class DebugEventListener implements IDebugEventSetListener {\r
-               public void handleDebugEvents(DebugEvent[] events) {\r
-                       if (events == null)\r
-                               return;\r
-\r
-                       for (int i = 0; i < events.length; i++) {\r
-                               DebugEvent event = events[i];\r
-                               if (event == null)\r
-                                       continue;\r
-                               Object source = event.getSource();\r
-                               if (source instanceof IProcess\r
-                                               && event.getKind() == DebugEvent.TERMINATE) {\r
-                                       IProcess process = (IProcess) source;\r
-//                                     if (process == null)\r
-//                                             continue;\r
-                                       ILaunch launch = process.getLaunch();\r
-                                       if (launch != null)\r
-                                               refreshOsgiBootLaunch(launch);\r
-                               }\r
-                       }\r
-               }\r
-\r
-               protected void refreshOsgiBootLaunch(ILaunch launch) {\r
-                       try {\r
-                               if (launch == null)\r
-                                       return;\r
-                               IResource[] resources = launch.getLaunchConfiguration()\r
-                                               .getMappedResources();\r
-                               if (resources == null)\r
-                                       return;\r
-                               if (resources.length > 0) {\r
-                                       IResource propertiesFile = resources[0];\r
-                                       if (propertiesFile.getParent() == null)\r
-                                               return;\r
-                                       propertiesFile.getParent().refreshLocal(\r
-                                                       IResource.DEPTH_INFINITE, null);\r
-                                       // System.out.println("Refreshed "\r
-                                       // + propertiesFile.getParent());\r
-                               }\r
-                       } catch (CoreException e) {\r
-                               e.printStackTrace();\r
-                       }\r
-\r
-               }\r
-\r
-       }\r
-\r
-}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/SlcMainPreferencePage.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/SlcMainPreferencePage.java
deleted file mode 100644 (file)
index d091715..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.argeo.slc.ide.ui;\r
-\r
-import org.eclipse.jface.preference.FieldEditorPreferencePage;\r
-import org.eclipse.ui.IWorkbench;\r
-import org.eclipse.ui.IWorkbenchPreferencePage;\r
-\r
-public class SlcMainPreferencePage extends FieldEditorPreferencePage implements\r
-               IWorkbenchPreferencePage {\r
-       public SlcMainPreferencePage() {\r
-//             IPreferenceStore store = SlcIdePlugin.getDefault().getPreferenceStore();\r
-//             setPreferenceStore(store);\r
-               setDescription("Argeo SLC Preferences");\r
-       }\r
-\r
-       @Override\r
-       protected void createFieldEditors() {\r
-//             addField(new DirectoryFieldEditor(PREF_SLC_RUNTIME_LOCATION,\r
-//                             "SLC Runtime", getFieldEditorParent()));\r
-//             addField(new DirectoryFieldEditor(PREF_EMBEDDED_JAVA_LIBRARY_PATH,\r
-//                             "Embedded Java Library Path", getFieldEditorParent()));\r
-       }\r
-\r
-       public void init(IWorkbench workbench) {\r
-       }\r
-\r
-}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/SlcPerspectiveFactory.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/SlcPerspectiveFactory.java
deleted file mode 100644 (file)
index 7c0084e..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.argeo.slc.ide.ui;\r
-\r
-import org.eclipse.jdt.ui.JavaUI;\r
-import org.eclipse.ui.IFolderLayout;\r
-import org.eclipse.ui.IPageLayout;\r
-import org.eclipse.ui.IPerspectiveFactory;\r
-import org.eclipse.ui.console.IConsoleConstants;\r
-\r
-public class SlcPerspectiveFactory implements IPerspectiveFactory {\r
-\r
-       public void createInitialLayout(IPageLayout layout) {\r
-               // Get the editor area.\r
-               String editorArea = layout.getEditorArea();\r
-\r
-               IFolderLayout topLeft = layout.createFolder("topLeft", IPageLayout.LEFT, 0.25f,\r
-                       editorArea);\r
-               topLeft.addView(JavaUI.ID_PACKAGES);\r
-\r
-               IFolderLayout bottom = layout.createFolder("bottom", IPageLayout.BOTTOM, 0.66f,\r
-                               editorArea);\r
-               bottom.addView(IConsoleConstants.ID_CONSOLE_VIEW);\r
-               bottom.addView(IPageLayout.ID_TASK_LIST);\r
-               \r
-               layout.addActionSet("org.eclipse.debug.ui.launchActionSet");\r
-       }\r
-\r
-}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/SlcSystem.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/SlcSystem.java
deleted file mode 100644 (file)
index ff797c6..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.argeo.slc.ide.ui;\r
-\r
-import org.eclipse.core.runtime.CoreException;\r
-import org.eclipse.jdt.launching.IVMInstall;\r
-\r
-public interface SlcSystem {\r
-       public String[] getClasspath() throws CoreException;\r
-       public String getJavaLibraryPath();\r
-       public IVMInstall getVmInstall() throws CoreException;\r
-}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLaunchConfiguration.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLaunchConfiguration.java
deleted file mode 100644 (file)
index d03b90a..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.argeo.slc.ide.ui.launch.osgi;
-
-import org.argeo.slc.ide.ui.SlcIdeUiPlugin;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.pde.launching.EclipseApplicationLaunchConfiguration;
-
-/** OSGiBoot launch configuration. */
-public class EclipseBootLaunchConfiguration extends
-               EclipseApplicationLaunchConfiguration {
-       public final static String ID = SlcIdeUiPlugin.ID + ".EclipseBootLauncher";
-
-       @Override
-       public void launch(ILaunchConfiguration configuration, String mode,
-                       ILaunch launch, IProgressMonitor monitor) throws CoreException {
-               super.launch(configuration, mode, launch, monitor);
-               // Refresh resources before launching
-               final IFile propertiesFile = (IFile) configuration.getMappedResources()[0];
-               propertiesFile.getParent().refreshLocal(IResource.DEPTH_INFINITE,
-                               monitor);
-       }
-
-       @Override
-       protected void preLaunchCheck(ILaunchConfiguration configuration,
-                       ILaunch launch, IProgressMonitor monitor) throws CoreException {
-               ILaunchConfigurationWorkingCopy wc = configuration.getWorkingCopy();
-               OsgiLaunchHelper.updateLaunchConfiguration(wc, true);
-               wc.doSave();
-
-               super.preLaunchCheck(configuration, launch, monitor);
-
-               // Note that if a Java project contains a build.properties it has to
-               // declare the sources otherwise it will be skipped in the generation of
-               // the dev.properties file!
-       }
-
-}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLaunchShortcut.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLaunchShortcut.java
deleted file mode 100644 (file)
index aa7f861..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.argeo.slc.ide.ui.launch.osgi;
-
-import java.util.Iterator;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchConfigurationType;
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.pde.ui.launcher.EclipseLaunchShortcut;
-
-/**
- * Launch shortcut simplifying the launch of an Eclipse application (typically
- * an RCP).
- */
-public class EclipseBootLaunchShortcut extends EclipseLaunchShortcut implements
-               OsgiLauncherConstants {
-       private StringBuffer name = null;
-       private IFile propertiesFile = null;
-
-       @Override
-       protected String getLaunchConfigurationTypeName() {
-               return EclipseBootLaunchConfiguration.ID;
-       }
-
-       @Override
-       public void launch(ISelection selection, String mode) {
-               // we assume that only one file is selected
-               IStructuredSelection sSelection = (IStructuredSelection) selection;
-               Iterator<?> it = sSelection.iterator();
-               propertiesFile = (IFile) it.next();
-
-               name = new StringBuffer(OsgiLaunchHelper.extractName(propertiesFile));
-
-               super.launch(selection, mode);
-       }
-
-       @Override
-       protected void initializeConfiguration(ILaunchConfigurationWorkingCopy wc) {
-               IResource[] resources = { propertiesFile };
-               wc.setMappedResources(resources);
-               super.initializeConfiguration(wc);
-
-               OsgiLaunchHelper.setDefaults(wc, true);
-               wc.setAttribute(
-                               IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY,
-                               OsgiLaunchHelper.findWorkingDirectory(propertiesFile));
-
-               OsgiLaunchHelper.updateLaunchConfiguration(wc, true);
-       }
-
-       protected String getName(ILaunchConfigurationType type) {
-               if (name != null && !name.toString().trim().equals(""))
-                       return DebugPlugin.getDefault().getLaunchManager()
-                                       .generateLaunchConfigurationName(name.toString());
-               else
-                       return DebugPlugin.getDefault().getLaunchManager()
-                                       .generateLaunchConfigurationName("SLC");
-       }
-
-       @Override
-       protected boolean isGoodMatch(ILaunchConfiguration configuration) {
-               if (name != null) {
-                       return name.toString().equals(configuration.getName());
-               }
-               return super.isGoodMatch(configuration);
-       }
-}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLauncherTabGroup.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLauncherTabGroup.java
deleted file mode 100644 (file)
index 53794ed..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.argeo.slc.ide.ui.launch.osgi;
-
-import org.eclipse.debug.ui.CommonTab;
-import org.eclipse.debug.ui.EnvironmentTab;
-import org.eclipse.debug.ui.ILaunchConfigurationDialog;
-import org.eclipse.debug.ui.ILaunchConfigurationTab;
-import org.eclipse.pde.ui.launcher.EclipseLauncherTabGroup;
-import org.eclipse.pde.ui.launcher.MainTab;
-import org.eclipse.pde.ui.launcher.OSGiSettingsTab;
-import org.eclipse.pde.ui.launcher.PluginsTab;
-import org.eclipse.pde.ui.launcher.TracingTab;
-
-/** Definition of the set of tabs used in Eclipse Boot launch configuration UI. */
-public class EclipseBootLauncherTabGroup extends EclipseLauncherTabGroup {
-
-       @Override
-       public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
-               ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] {
-                               new OsgiBootMainTab(true),
-                               new MainTab(),
-                               new PluginsTab(),
-                               // new PluginsTab() {
-                               // private boolean activating = false;
-                               //
-                               // @Override
-                               // public void performApply(
-                               // ILaunchConfigurationWorkingCopy config) {
-                               // super.performApply(config);
-                               // if (activating) {
-                               // try {
-                               // config.doSave();
-                               // } catch (CoreException e) {
-                               // e.printStackTrace();
-                               // }
-                               // activating = false;
-                               // }
-                               // }
-                               //
-                               // @Override
-                               // public void activated(
-                               // ILaunchConfigurationWorkingCopy workingCopy) {
-                               // activating = true;
-                               // }
-                               // },
-                               new OSGiSettingsTab(), new EnvironmentTab(), new TracingTab(),
-                               new CommonTab() };
-               setTabs(tabs);
-       }
-
-}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiBootEquinoxLaunchConfiguration.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiBootEquinoxLaunchConfiguration.java
deleted file mode 100644 (file)
index 19cdee1..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.argeo.slc.ide.ui.launch.osgi;
-
-import org.argeo.slc.ide.ui.SlcIdeUiPlugin;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.pde.launching.EquinoxLaunchConfiguration;
-
-/** OSGiBoot launch configuration. */
-public class OsgiBootEquinoxLaunchConfiguration extends
-               EquinoxLaunchConfiguration {
-       public final static String ID = SlcIdeUiPlugin.ID
-                       + ".OsgiBootEquinoxLauncher";
-
-       @Override
-       public void launch(ILaunchConfiguration configuration, String mode,
-                       ILaunch launch, IProgressMonitor monitor) throws CoreException {
-               super.launch(configuration, mode, launch, monitor);
-
-//             System.out.println("targetBundles="
-//                             + configuration.getAttribute(
-//                                             IPDELauncherConstants.TARGET_BUNDLES, ""));
-//             System.out.println("workspaceBundles="
-//                             + configuration.getAttribute(
-//                                             IPDELauncherConstants.WORKSPACE_BUNDLES, ""));
-
-               // Refresh resources before launching
-               final IFile propertiesFile = (IFile) configuration.getMappedResources()[0];
-               propertiesFile.getParent().refreshLocal(IResource.DEPTH_INFINITE,
-                               monitor);
-       }
-
-       @Override
-       protected void preLaunchCheck(ILaunchConfiguration configuration,
-                       ILaunch launch, IProgressMonitor monitor) throws CoreException {
-               // System.out.println("Launching... " + launch);
-               ILaunchConfigurationWorkingCopy wc = configuration.getWorkingCopy();
-               OsgiLaunchHelper.updateLaunchConfiguration(wc, false);
-               wc.doSave();
-               super.preLaunchCheck(configuration, launch, monitor);
-
-               // Note that if a Java project contains a build.properties it has to
-               // declare the sources otherwise it will be skipped in the generation of
-               // the dev.properties file!
-
-               // for(Object bundleId:fAllBundles.keySet()){
-               // System.out.println(bundleId+"="+fAllBundles.get(bundleId));
-               // }
-       }
-
-}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiBootLaunchShortcut.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiBootLaunchShortcut.java
deleted file mode 100644 (file)
index b73b612..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.argeo.slc.ide.ui.launch.osgi;
-
-import java.util.Iterator;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchConfigurationType;
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.pde.ui.launcher.OSGiLaunchShortcut;
-
-/** Launch shortcut simplifying the launch of a pure OSGi runtime */
-public class OsgiBootLaunchShortcut extends OSGiLaunchShortcut implements
-               OsgiLauncherConstants {
-       private StringBuffer name = null;
-       private IFile propertiesFile = null;
-
-       @Override
-       protected String getLaunchConfigurationTypeName() {
-               return OsgiBootEquinoxLaunchConfiguration.ID;
-       }
-
-       @Override
-       public void launch(ISelection selection, String mode) {
-               // we assume that only one file is selected
-               IStructuredSelection sSelection = (IStructuredSelection) selection;
-               Iterator<?> it = sSelection.iterator();
-               propertiesFile = (IFile) it.next();
-
-               name = new StringBuffer(OsgiLaunchHelper.extractName(propertiesFile));
-
-               super.launch(selection, mode);
-       }
-
-       @Override
-       protected void initializeConfiguration(ILaunchConfigurationWorkingCopy wc) {
-               IResource[] resources = { propertiesFile };
-               wc.setMappedResources(resources);
-               super.initializeConfiguration(wc);
-
-               OsgiLaunchHelper.setDefaults(wc, true);
-
-               wc.setAttribute(
-                               IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY,
-                               OsgiLaunchHelper.findWorkingDirectory(propertiesFile));
-
-               OsgiLaunchHelper.updateLaunchConfiguration(wc, false);
-       }
-
-       protected String getName(ILaunchConfigurationType type) {
-               if (name != null && !name.toString().trim().equals(""))
-                       return DebugPlugin.getDefault().getLaunchManager()
-                                       .generateLaunchConfigurationName(name.toString());
-               else
-                       return DebugPlugin.getDefault().getLaunchManager()
-                                       .generateLaunchConfigurationName("SLC");
-       }
-
-       @Override
-       protected boolean isGoodMatch(ILaunchConfiguration configuration) {
-               if (name != null) {
-                       return name.toString().equals(configuration.getName());
-               }
-               return super.isGoodMatch(configuration);
-       }
-
-}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiBootLauncherTabGroup.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiBootLauncherTabGroup.java
deleted file mode 100644 (file)
index 837a7c3..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.argeo.slc.ide.ui.launch.osgi;
-
-import org.eclipse.debug.ui.CommonTab;
-import org.eclipse.debug.ui.EnvironmentTab;
-import org.eclipse.debug.ui.ILaunchConfigurationDialog;
-import org.eclipse.debug.ui.ILaunchConfigurationTab;
-import org.eclipse.pde.ui.launcher.BundlesTab;
-import org.eclipse.pde.ui.launcher.OSGiLauncherTabGroup;
-import org.eclipse.pde.ui.launcher.OSGiSettingsTab;
-import org.eclipse.pde.ui.launcher.TracingTab;
-
-/** Definition of the set of tabs used in OSGi Boot launch configuration UI. */
-public class OsgiBootLauncherTabGroup extends OSGiLauncherTabGroup {
-
-       @Override
-       public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
-               ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] {
-                               new OsgiBootMainTab(false),
-                               new BundlesTab() {
-//                                     private boolean activating = false;
-//
-//                                     @Override
-//                                     public void performApply(
-//                                                     ILaunchConfigurationWorkingCopy config) {
-//                                             super.performApply(config);
-//                                             if (activating) {
-//                                                     try {
-//                                                             config.doSave();
-//                                                     } catch (CoreException e) {
-//                                                             e.printStackTrace();
-//                                                     }
-//                                                     activating = false;
-//                                             }
-//                                     }
-//
-//                                     @Override
-//                                     public void activated(
-//                                                     ILaunchConfigurationWorkingCopy workingCopy) {
-//                                             activating = true;
-//                                     }
-                               }, new OSGiSettingsTab(), new EnvironmentTab(),
-                               new TracingTab(), new CommonTab() };
-               setTabs(tabs);
-       }
-
-}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiBootMainTab.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiBootMainTab.java
deleted file mode 100644 (file)
index 0bd5331..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-package org.argeo.slc.ide.ui.launch.osgi;
-
-import org.argeo.slc.ide.ui.SlcIdeUiPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-
-/** Main tab of OSGiBoot launch configuration UI. */
-public class OsgiBootMainTab extends AbstractLaunchConfigurationTab implements
-               OsgiLauncherConstants {
-       private Listener listener = new Listener();
-
-       private Button syncBundles;
-       private Button clearDataDirectory;
-
-       private Button addJvmPaths;
-       private Text additionalVmArgs;
-
-       private Text additionalProgramArgs;
-
-       // private final Boolean isEclipse;
-
-       public OsgiBootMainTab(Boolean isEclipse) {
-               super();
-               // this.isEclipse = isEclipse;
-       }
-
-       public void createControl(Composite parent) {
-               Composite container = new Composite(parent, SWT.NONE);
-               container.setLayout(new GridLayout());
-               container.setLayoutData(new GridData(GridData.FILL_BOTH));
-
-               createAdditionalProgramArgs(container);
-               createAdditionalVmArgumentBlock(container);
-               createAdvanced(container);
-               Dialog.applyDialogFont(container);
-               setControl(container);
-       }
-
-       /** Init UI for programs arguments */
-       protected void createAdditionalProgramArgs(Composite parent) {
-               Group container = new Group(parent, SWT.NONE);
-               container.setText("Additional Program Arguments");
-               GridLayout layout = new GridLayout();
-               layout.numColumns = 2;
-               container.setLayout(layout);
-               container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-               additionalProgramArgs = new Text(container, SWT.MULTI | SWT.WRAP
-                               | SWT.BORDER | SWT.V_SCROLL);
-               GridData gd = new GridData(GridData.FILL_BOTH);
-               gd.heightHint = 60;
-               gd.widthHint = 100;
-               gd.horizontalSpan = 2;
-               additionalProgramArgs.setLayoutData(gd);
-               additionalProgramArgs.addModifyListener(listener);
-       }
-
-       /** Init UI for VM arguments */
-       protected void createAdditionalVmArgumentBlock(Composite parent) {
-               Group container = new Group(parent, SWT.NONE);
-               container.setText("Additional VM Arguments");
-               GridLayout layout = new GridLayout();
-               layout.numColumns = 2;
-               container.setLayout(layout);
-               container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-               additionalVmArgs = new Text(container, SWT.MULTI | SWT.WRAP
-                               | SWT.BORDER | SWT.V_SCROLL);
-               GridData gd = new GridData(GridData.FILL_BOTH);
-               gd.heightHint = 60;
-               gd.widthHint = 100;
-               gd.horizontalSpan = 2;
-               additionalVmArgs.setLayoutData(gd);
-               additionalVmArgs.addModifyListener(listener);
-
-       }
-
-       /** Init UI for Advanced section */
-       protected void createAdvanced(Composite parent) {
-               Group container = new Group(parent, SWT.NONE);
-               container.setText("Advanced");
-               GridLayout layout = new GridLayout();
-               layout.numColumns = 2;
-               container.setLayout(layout);
-               container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-               syncBundles = new Button(container, SWT.CHECK);
-               syncBundles.addSelectionListener(listener);
-               new Label(container, SWT.NONE)
-                               .setText("Keep bundles in line with target platform and workspace (recommended)");
-               clearDataDirectory = new Button(container, SWT.CHECK);
-               clearDataDirectory.addSelectionListener(listener);
-               new Label(container, SWT.NONE)
-                               .setText("Clear data directory before launch");
-
-               addJvmPaths = new Button(container, SWT.CHECK);
-               addJvmPaths.addSelectionListener(listener);
-               new Label(container, SWT.NONE)
-                               .setText("Add workspace JVM paths as non-standard system properties");
-
-       }
-
-       public String getName() {
-               return "OSGi Boot";
-       }
-
-       @Override
-       public Image getImage() {
-               return SlcIdeUiPlugin.getDefault().getImage("icons/slc-launch.gif");
-       }
-
-       public void initializeFrom(ILaunchConfiguration configuration) {
-               // System.out.println("initializeFrom");
-               try {
-                       syncBundles.setSelection(configuration.getAttribute(
-                                       ATTR_SYNC_BUNDLES, true));
-                       clearDataDirectory.setSelection(configuration.getAttribute(
-                                       ATTR_CLEAR_DATA_DIRECTORY, false));
-
-                       additionalProgramArgs.setText(configuration.getAttribute(
-                                       ATTR_ADDITIONAL_PROGRAM_ARGS, ""));
-                       addJvmPaths.setSelection(configuration.getAttribute(
-                                       ATTR_ADD_JVM_PATHS, false));
-                       additionalVmArgs.setText(configuration.getAttribute(
-                                       ATTR_ADDITIONAL_VM_ARGS, ""));
-                       // readProperties(configuration);
-               } catch (CoreException e) {
-                       e.printStackTrace();
-               }
-       }
-
-       public void performApply(ILaunchConfigurationWorkingCopy configuration) {
-               // System.out.println("performApply");
-               configuration.setAttribute(ATTR_SYNC_BUNDLES,
-                               syncBundles.getSelection());
-               configuration.setAttribute(ATTR_CLEAR_DATA_DIRECTORY,
-                               clearDataDirectory.getSelection());
-
-               configuration.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS,
-                               additionalProgramArgs.getText());
-               configuration.setAttribute(ATTR_ADDITIONAL_VM_ARGS,
-                               additionalVmArgs.getText());
-               configuration.setAttribute(ATTR_ADD_JVM_PATHS,
-                               addJvmPaths.getSelection());
-               // writeProperties(configuration);
-
-               // OsgiLaunchHelper.updateLaunchConfiguration(configuration, isEclipse);
-       }
-
-       public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
-               // System.out.println("setDefaults");
-               configuration.setAttribute(ATTR_SYNC_BUNDLES, true);
-               configuration.setAttribute(ATTR_CLEAR_DATA_DIRECTORY, false);
-               configuration.setAttribute(ATTR_ADD_JVM_PATHS, false);
-               configuration.setAttribute(ATTR_ADDITIONAL_VM_ARGS, "-Xmx128m");
-               configuration.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS, "-console");
-       }
-
-       @Override
-       public void activated(ILaunchConfigurationWorkingCopy workingCopy) {
-               initializeFrom(workingCopy);
-               try {
-                       workingCopy.doSave();
-               } catch (CoreException e) {
-                       e.printStackTrace();
-               }
-       }
-
-       @Override
-       public void deactivated(ILaunchConfigurationWorkingCopy workingCopy) {
-               // do nothing
-       }
-
-       class Listener extends SelectionAdapter implements ModifyListener {
-               public void widgetSelected(SelectionEvent e) {
-                       // Object source = e.getSource();
-                       // setDirty(true);
-                       updateLaunchConfigurationDialog();
-               }
-
-               public void modifyText(ModifyEvent e) {
-                       // System.out.println("modifyText : " + e);
-                       // setDirty(true);
-                       updateLaunchConfigurationDialog();
-               }
-       }
-
-       // private void readProperties(ILaunchConfiguration configuration) {
-       // BufferedReader reader = null;
-       // try {
-       // IFile propertiesFile = (IFile) configuration.getMappedResources()[0];
-       // propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
-       // reader = new BufferedReader(new InputStreamReader(propertiesFile
-       // .getContents()));
-       // String line = null;
-       // StringBuffer buf = new StringBuffer("");
-       // while ((line = reader.readLine()) != null) {
-       // buf.append(line);
-       // buf.append("\n");
-       // }
-       // propertiesText.setText(buf.toString());
-       // } catch (CoreException e) {
-       // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
-       // "Error", "Cannot read properties", e.getStatus());
-       // return;
-       // } catch (Exception e) {
-       // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
-       // "Error", "Cannot read properties",
-       // new Status(IStatus.ERROR, SlcIdeUiPlugin.ID,
-       // e.getMessage(), e));
-       // return;
-       // } finally {
-       // if (reader != null)
-       // try {
-       // reader.close();
-       // } catch (IOException e) {
-       // // silent
-       // }
-       // }
-       //
-       // }
-       //
-       // private void writeProperties(ILaunchConfiguration configuration) {
-       // InputStream in = null;
-       // IFile propertiesFile = null;
-       // try {
-       // propertiesFile = (IFile) configuration.getMappedResources()[0];
-       // in = new ByteArrayInputStream(propertiesText.getText().getBytes());
-       // propertiesFile.setContents(in, true, true, null);
-       // propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
-       // } catch (CoreException e) {
-       // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
-       // "Error", "Cannot write properties", e.getStatus());
-       // return;
-       // } catch (Exception e) {
-       // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
-       // "Error", "Cannot write properties",
-       // new Status(IStatus.ERROR, SlcIdeUiPlugin.ID,
-       // e.getMessage(), e));
-       // return;
-       // } finally {
-       // if (in != null)
-       // try {
-       // in.close();
-       // } catch (IOException e) {
-       // // silent
-       // }
-       // }
-       //
-       // }
-
-}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiLaunchHelper.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiLaunchHelper.java
deleted file mode 100644 (file)
index f99e1b3..0000000
+++ /dev/null
@@ -1,620 +0,0 @@
-package org.argeo.slc.ide.ui.launch.osgi;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import org.argeo.slc.ide.ui.SlcIdeUiPlugin;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.variables.IStringVariableManager;
-import org.eclipse.core.variables.VariablesPlugin;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
-import org.eclipse.jdt.launching.IVMInstall;
-import org.eclipse.jdt.launching.IVMInstall2;
-import org.eclipse.jdt.launching.IVMInstallType;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.osgi.service.resolver.BundleDescription;
-import org.eclipse.pde.core.plugin.IPluginModelBase;
-import org.eclipse.pde.core.plugin.PluginRegistry;
-import org.eclipse.pde.launching.IPDELauncherConstants;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * Most of the actual logic is concentrated in this class which manipulates
- * {@link ILaunchConfigurationWorkingCopy}. Static method are used since the
- * shortcut and launch configuration classes are already extending PDE classes.
- */
-@SuppressWarnings("restriction")
-public class OsgiLaunchHelper implements OsgiLauncherConstants {
-       private static Boolean debug = true;
-
-       private final static String DEFAULT_DATA_DIR = "data";
-       private final static String DEFAULT_EXEC_DIR = "exec";
-       private final static String DEFAULT_VMARGS = "-Xmx256m";
-       private final static String DEFAULT_PROGRAM_ARGS = "-console";
-
-       /** Sets default values on this configuration. */
-       public static void setDefaults(ILaunchConfigurationWorkingCopy wc,
-                       Boolean isEclipse) {
-               try {
-                       if (isEclipse) {
-                               wc.setAttribute(IPDELauncherConstants.USE_DEFAULT, false);
-                               wc.setAttribute(IPDELauncherConstants.USE_PRODUCT, false);
-                       }
-
-                       wc.setAttribute(ATTR_ADD_JVM_PATHS, false);
-                       wc.setAttribute(ATTR_ADDITIONAL_VM_ARGS, DEFAULT_VMARGS);
-                       wc.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS, DEFAULT_PROGRAM_ARGS);
-
-                       // Defaults
-                       String originalVmArgs = wc.getAttribute(
-                                       IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, "");
-                       wc.setAttribute(ATTR_DEFAULT_VM_ARGS, originalVmArgs);
-
-                       // clear config area by default
-                       wc.setAttribute(IPDELauncherConstants.CONFIG_CLEAR_AREA, true);
-               } catch (CoreException e) {
-                       Shell shell = Display.getCurrent().getActiveShell();
-                       ErrorDialog.openError(shell, "Error",
-                                       "Cannot execute initalize configuration", e.getStatus());
-               }
-       }
-
-       /** Find the working directory based on this properties file. */
-       public static String findWorkingDirectory(IFile propertiesFile) {
-               try {
-                       IProject project = propertiesFile.getProject();
-                       IPath parent = propertiesFile.getProjectRelativePath()
-                                       .removeLastSegments(1);
-                       IFolder execFolder = project.getFolder(parent
-                                       .append(DEFAULT_EXEC_DIR));
-                       if (!execFolder.exists())
-                               execFolder.create(true, true, null);
-                       IFolder launchFolder = project.getFolder(execFolder
-                                       .getProjectRelativePath().append(
-                                                       extractName(propertiesFile)));
-                       if (!launchFolder.exists())
-                               launchFolder.create(true, true, null);
-                       return "${workspace_loc:"
-                                       + launchFolder.getFullPath().toString().substring(1) + "}";
-               } catch (Exception e) {
-                       e.printStackTrace();
-                       throw new RuntimeException("Cannot create working directory", e);
-               }
-       }
-
-       /** Extract the launch configuration name from the properties file. */
-       public static String extractName(IFile propertiesFile) {
-               IPath path = propertiesFile.getFullPath();
-               IPath pathNoExt = path.removeFileExtension();
-               return pathNoExt.segment(pathNoExt.segmentCount() - 1);
-
-       }
-
-       /** Expects properties file to be set as mapped resources */
-       @SuppressWarnings("unchecked")
-       public static void updateLaunchConfiguration(
-                       ILaunchConfigurationWorkingCopy wc, Boolean isEclipse) {
-               try {
-                       if (debug)
-                               debug("##\n## Launch " + wc.getName() + " - " + new Date()
-                                               + "\n##");
-
-                       // Finds the properties file and load it
-                       IFile propertiesFile = (IFile) wc.getMappedResources()[0];
-                       propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
-                       Properties properties = readProperties(propertiesFile);
-
-                       // Extract information from the properties file
-                       Map<String, Integer> bundlesToStart = new TreeMap<String, Integer>();
-                       Map<String, String> systemPropertiesToAppend = new HashMap<String, String>();
-                       String applicationId = interpretProperties(properties,
-                                       bundlesToStart, systemPropertiesToAppend);
-
-                       if (applicationId != null)
-                               wc.setAttribute(IPDELauncherConstants.APPLICATION,
-                                               applicationId);
-                       else {
-                               if (isEclipse)
-                                       throw new Exception("No application defined,"
-                                                       + " please set the 'eclipse.application' property"
-                                                       + " in the properties file");
-                       }
-
-                       // Define directories
-                       File workingDir = getWorkingDirectory(wc);
-                       File dataDir = new File(workingDir, DEFAULT_DATA_DIR);
-
-                       // Update the launch configuration accordingly
-                       updateLaunchConfiguration(wc, bundlesToStart,
-                                       systemPropertiesToAppend, dataDir.getAbsolutePath(),
-                                       isEclipse);
-
-                       if (debug) {
-                               Map<String, ?> attrs = new TreeMap<String, Object>(
-                                               wc.getAttributes());
-                               for (String key : attrs.keySet())
-                                       OsgiLaunchHelper.debug(key + "=" + attrs.get(key));
-                       }
-               } catch (Exception e) {
-                       e.printStackTrace();
-                       Shell shell = SlcIdeUiPlugin.getDefault().getWorkbench()
-                                       .getActiveWorkbenchWindow().getShell();
-                       // Shell shell= Display.getCurrent().getActiveShell();
-                       ErrorDialog.openError(shell, "Error",
-                                       "Cannot prepare launch configuration",
-                                       new Status(IStatus.ERROR, SlcIdeUiPlugin.ID,
-                                                       e.getMessage(), e));
-                       return;
-               }
-       }
-
-       /**
-        * Actually modifies the launch configuration in order to reflect the
-        * current state read from the properties file and the launch configuration
-        * UI.
-        */
-       protected static void updateLaunchConfiguration(
-                       ILaunchConfigurationWorkingCopy wc,
-                       Map<String, Integer> bundlesToStart,
-                       Map<String, String> systemPropertiesToAppend, String dataDir,
-                       Boolean isEclipse) throws CoreException {
-               // Convert bundle lists
-               final String targetBundles;
-               final String wkSpaceBundles;
-               if (wc.getAttribute(ATTR_SYNC_BUNDLES, true)) {
-                       StringBuffer tBuf = new StringBuffer();
-                       for (IPluginModelBase model : PluginRegistry.getExternalModels()) {
-                               tBuf.append(model.getBundleDescription().getSymbolicName());
-                               tBuf.append(',');
-                       }
-                       targetBundles = tBuf.toString();
-                       StringBuffer wBuf = new StringBuffer();
-                       models: for (IPluginModelBase model : PluginRegistry
-                                       .getWorkspaceModels()) {
-                               if (model.getBundleDescription() == null) {
-                                       System.err.println("No bundle description for " + model);
-                                       continue models;
-                               }
-                               wBuf.append(model.getBundleDescription().getSymbolicName());
-                               wBuf.append(',');
-                       }
-                       wkSpaceBundles = wBuf.toString();
-               } else {
-                       targetBundles = wc.getAttribute(targetBundlesAttr(isEclipse), "");
-                       wkSpaceBundles = wc.getAttribute(workspaceBundlesAttr(isEclipse),
-                                       "");
-               }
-               wc.setAttribute(targetBundlesAttr(isEclipse),
-                               convertBundleList(bundlesToStart, targetBundles));
-
-               wc.setAttribute(workspaceBundlesAttr(isEclipse),
-                               convertBundleList(bundlesToStart, wkSpaceBundles));
-
-               // Update other default information
-               wc.setAttribute(IPDELauncherConstants.DEFAULT_AUTO_START, false);
-
-               wc.setAttribute(IPDELauncherConstants.USE_CUSTOM_FEATURES, false);
-               if (!isEclipse)
-                       wc.setAttribute(IPDELauncherConstants.USE_DEFAULT, true);
-
-               // VM arguments (system properties)
-               String defaultVmArgs = wc.getAttribute(
-                               OsgiLauncherConstants.ATTR_DEFAULT_VM_ARGS, "");
-               StringBuffer vmArgs = new StringBuffer(defaultVmArgs);
-
-               // Data dir system property
-               if (dataDir != null) {
-                       addSysProperty(vmArgs, OsgiLauncherConstants.ARGEO_OSGI_DATA_DIR,
-                                       dataDir);
-                       if (isEclipse) {
-                               wc.setAttribute(IPDELauncherConstants.LOCATION, dataDir);
-                       }
-               }
-
-               // Add locations of JVMs
-               if (wc.getAttribute(ATTR_ADD_JVM_PATHS, false))
-                       addVms(vmArgs);
-
-               // Add other system properties
-               for (String key : systemPropertiesToAppend.keySet())
-                       addSysProperty(vmArgs, key, systemPropertiesToAppend.get(key));
-
-               vmArgs.append(" ").append(wc.getAttribute(ATTR_ADDITIONAL_VM_ARGS, ""));
-
-               wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS,
-                               vmArgs.toString());
-
-               // Program arguments
-               StringBuffer progArgs = new StringBuffer("");
-               if (dataDir != null) {
-                       progArgs.append("-data ");
-                       progArgs.append(surroundSpaces(dataDir));
-
-                       if (wc.getAttribute(ATTR_CLEAR_DATA_DIRECTORY, false)) {
-                               File dataDirFile = new File(dataDir);
-                               deleteDir(dataDirFile);
-                               dataDirFile.mkdirs();
-                       }
-               }
-               String additionalProgramArgs = wc.getAttribute(
-                               OsgiLauncherConstants.ATTR_ADDITIONAL_PROGRAM_ARGS, "");
-               progArgs.append(' ').append(additionalProgramArgs);
-               wc.setAttribute(
-                               IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS,
-                               progArgs.toString());
-       }
-
-       /** The launch configuration attribute to use for target bundles */
-       protected static String targetBundlesAttr(Boolean isEclipse) {
-               return isEclipse ? IPDELauncherConstants.SELECTED_TARGET_PLUGINS
-                               : IPDELauncherConstants.TARGET_BUNDLES;
-       }
-
-       /** The launch configuration attribute to use for workspace bundles */
-       protected static String workspaceBundlesAttr(Boolean isEclipse) {
-               return isEclipse ? IPDELauncherConstants.SELECTED_WORKSPACE_PLUGINS
-                               : IPDELauncherConstants.WORKSPACE_BUNDLES;
-       }
-
-       /**
-        * Interprets special properties and register the others as system
-        * properties to append.
-        * 
-        * @return the application id defined by
-        *         {@link OsgiLauncherConstants#ECLIPSE_APPLICATION}, or null if not
-        *         found
-        */
-       protected static String interpretProperties(Properties properties,
-                       Map<String, Integer> bundlesToStart,
-                       Map<String, String> systemPropertiesToAppend) {
-               computeBundlesToStart(bundlesToStart, properties, null);
-
-               String applicationId = null;
-               propKeys: for (Object keyObj : properties.keySet()) {
-                       String key = keyObj.toString();
-                       if (OsgiLauncherConstants.ARGEO_OSGI_START.equals(key))
-                               continue propKeys;
-                       if (key.startsWith(OsgiLauncherConstants.ARGEO_OSGI_START + "."))
-                               continue propKeys;
-                       else if (OsgiLauncherConstants.ARGEO_OSGI_BUNDLES.equals(key))
-                               continue propKeys;
-                       else if (OsgiLauncherConstants.ARGEO_OSGI_LOCATIONS.equals(key))
-                               continue propKeys;
-                       else if (OsgiLauncherConstants.OSGI_BUNDLES.equals(key))
-                               continue propKeys;
-                       else if (OsgiLauncherConstants.ECLIPSE_APPLICATION.equals(key))
-                               applicationId = properties.getProperty(key);
-                       else
-                               systemPropertiesToAppend.put(key, properties.getProperty(key));
-               }
-               return applicationId;
-       }
-
-       /** Adds a regular system property. */
-       protected static void addSysProperty(StringBuffer vmArgs, String key,
-                       String value) {
-               surroundSpaces(value);
-               String str = "-D" + key + "=" + value;
-               vmArgs.append(' ').append(str);
-       }
-
-       /** Adds JVMS registered in the workspace as special system properties. */
-       protected static void addVms(StringBuffer vmArgs) {
-               addVmSysProperty(vmArgs, "default", JavaRuntime.getDefaultVMInstall());
-               IVMInstallType[] vmTypes = JavaRuntime.getVMInstallTypes();
-               for (IVMInstallType vmType : vmTypes) {
-                       for (IVMInstall vmInstall : vmType.getVMInstalls()) {
-                               // properties based on name
-                               addVmSysProperty(vmArgs, vmInstall.getName(), vmInstall);
-                               if (vmInstall instanceof IVMInstall2) {
-                                       // properties based on version
-                                       IVMInstall2 vmInstall2 = (IVMInstall2) vmInstall;
-                                       String version = vmInstall2.getJavaVersion();
-                                       addVmSysProperty(vmArgs, version, vmInstall);
-
-                                       List<String> tokens = new ArrayList<String>();
-                                       StringTokenizer st = new StringTokenizer(version, ".");
-                                       while (st.hasMoreTokens())
-                                               tokens.add(st.nextToken());
-                                       if (tokens.size() >= 2)
-                                               addVmSysProperty(vmArgs,
-                                                               tokens.get(0) + "." + tokens.get(1), vmInstall);
-                               }
-                       }
-               }
-
-       }
-
-       /** Adds a special system property pointing to one of the registered JVMs. */
-       protected static void addVmSysProperty(StringBuffer vmArgs, String suffix,
-                       IVMInstall vmInstall) {
-               addSysProperty(vmArgs, OsgiLauncherConstants.VMS_PROPERTY_PREFIX + "."
-                               + suffix, vmInstall.getInstallLocation().getPath());
-       }
-
-       /** Surround the string with quotes if it contains spaces. */
-       protected static String surroundSpaces(String str) {
-               if (str.indexOf(' ') >= 0)
-                       return '\"' + str + '\"';
-               else
-                       return str;
-       }
-
-       /**
-        * Reformat the bundle list in order to reflect which bundles have to be
-        * started.
-        */
-       protected static String convertBundleList(
-                       Map<String, Integer> bundlesToStart, String original) {
-               StringTokenizer stComa = new StringTokenizer(original, ",");
-               // sort by bundle symbolic name
-               Set<String> bundleIds = new TreeSet<String>();
-               bundles: while (stComa.hasMoreTokens()) {
-
-                       String bundleId = stComa.nextToken();
-                       if (bundleId.indexOf('*') >= 0)
-                               throw new RuntimeException(
-                                               "Bundle id "
-                                                               + bundleId
-                                                               + " not properly formatted, clean your workspace projects");
-
-                       int indexAt = bundleId.indexOf('@');
-                       if (indexAt >= 0) {
-                               bundleId = bundleId.substring(0, indexAt);
-                       }
-
-                       // We can now rely on bundleId value
-
-                       if (bundleId.endsWith(".source")) {
-                               // debug("Skip source bundle " + bundleId);
-                               continue bundles;
-                       } else if (bundleId
-                                       .equals("org.eclipse.equinox.simpleconfigurator")) {
-                               // IPDEBuildConstants.BUNDLE_SIMPLE_CONFIGURATOR
-                               // skip simple configurator in order to avoid side-effects
-                               continue bundles;
-                       }
-                       bundleIds.add(bundleId);
-               }
-
-               StringBuffer bufBundles = new StringBuffer(1024);
-               boolean first = true;
-               for (String bundleId : bundleIds) {
-                       if (first)
-                               first = false;
-                       else
-                               bufBundles.append(',');
-                       boolean modified = false;
-                       if (bundlesToStart.containsKey(bundleId)) {
-                               Integer startLevel = bundlesToStart.get(bundleId);
-                               String startLevelStr = startLevel != null ? startLevel
-                                               .toString() : "default";
-                               bufBundles.append(bundleId).append('@').append(startLevelStr)
-                                               .append(":true");
-                               modified = true;
-                               debug("Will start " + bundleId + " at level " + startLevelStr);
-                       }
-
-                       if (!modified)
-                               bufBundles.append(bundleId);
-
-               }
-               String output = bufBundles.toString();
-               return output;
-       }
-
-       // UTILITIES
-       /** Recursively deletes a directory tree. */
-       private static void deleteDir(File dir) {
-               File[] files = dir.listFiles();
-               for (File file : files) {
-                       if (file.isDirectory())
-                               deleteDir(file);
-                       else
-                               file.delete();
-               }
-               dir.delete();
-       }
-
-       /** Loads a properties file. */
-       private static Properties readProperties(IFile file) throws CoreException {
-               Properties props = new Properties();
-
-               InputStream in = null;
-               try {
-                       in = file.getContents();
-                       props.load(in);
-               } catch (Exception e) {
-                       throw new CoreException(new Status(IStatus.ERROR,
-                                       SlcIdeUiPlugin.ID, "Cannot read properties file", e));
-               } finally {
-                       if (in != null)
-                               try {
-                                       in.close();
-                               } catch (IOException e) {
-                                       // silent
-                               }
-               }
-               return props;
-       }
-
-       /** Determines the start levels for the bundles */
-       private static void computeBundlesToStart(
-                       Map<String, Integer> bundlesToStart, Properties properties,
-                       Integer defaultStartLevel) {
-
-               // default (and previously, only behaviour)
-               appendBundlesToStart(bundlesToStart, defaultStartLevel,
-                               properties.getProperty(OsgiLauncherConstants.ARGEO_OSGI_START,
-                                               ""));
-
-               // list argeo.osgi.start.* system properties
-               Iterator<Object> keys = properties.keySet().iterator();
-               final String prefix = OsgiLauncherConstants.ARGEO_OSGI_START + ".";
-               while (keys.hasNext()) {
-                       String key = (String) keys.next();
-                       if (key.startsWith(prefix)) {
-                               Integer startLevel;
-                               String suffix = key.substring(prefix.length());
-                               String[] tokens = suffix.split("\\.");
-                               if (tokens.length > 0 && !tokens[0].trim().equals(""))
-                                       try {
-                                               // first token is start level
-                                               startLevel = new Integer(tokens[0]);
-                                       } catch (NumberFormatException e) {
-                                               startLevel = defaultStartLevel;
-                                       }
-                               else
-                                       startLevel = defaultStartLevel;
-
-                               // append bundle names
-                               String bundleNames = properties.getProperty(key);
-                               appendBundlesToStart(bundlesToStart, startLevel, bundleNames);
-                       }
-               }
-       }
-
-       /** Append a comma-separated list of bundles to the start levels. */
-       private static void appendBundlesToStart(
-                       Map<String, Integer> bundlesToStart, Integer startLevel, String str) {
-               if (str == null || str.trim().equals(""))
-                       return;
-
-               String[] bundleNames = str.split(",");
-               for (int i = 0; i < bundleNames.length; i++) {
-                       if (bundleNames[i] != null && !bundleNames[i].trim().equals(""))
-                               bundlesToStart.put(bundleNames[i], startLevel);
-               }
-       }
-
-       /*
-        * HACKED UTILITIES
-        */
-       // Hacked from
-       // org.eclipse.pde.internal.ui.launcher.LaunchArgumentsHelper.getWorkingDirectory(ILaunchConfiguration)
-       private static File getWorkingDirectory(ILaunchConfiguration configuration)
-                       throws CoreException {
-               String working;
-               try {
-                       working = configuration.getAttribute(
-                                       IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY,
-                                       new File(".").getCanonicalPath()); //$NON-NLS-1$
-               } catch (IOException e) {
-                       working = "${workspace_loc}/../"; //$NON-NLS-1$
-               }
-               File dir;
-               try {
-                       dir = new File(getSubstitutedString(working));
-               } catch (Exception e) {
-                       // the directory was most probably deleted
-                       IFile propertiesFile = (IFile) configuration.getMappedResources()[0];
-                       working = findWorkingDirectory(propertiesFile);
-                       dir = new File(getSubstitutedString(working));
-               }
-               if (!dir.exists())
-                       dir.mkdirs();
-               return dir;
-       }
-
-       // Hacked from
-       // org.eclipse.pde.internal.ui.launcher.LaunchArgumentsHelper.getSubstitutedString(String)
-       private static String getSubstitutedString(String text)
-                       throws CoreException {
-               if (text == null)
-                       return ""; //$NON-NLS-1$
-               IStringVariableManager mgr = VariablesPlugin.getDefault()
-                               .getStringVariableManager();
-               return mgr.performStringSubstitution(text);
-       }
-
-       /**
-        * Not used anymore, but kept because this routine may be useful in the
-        * future.
-        */
-       protected void addSelectedProjects(StringBuffer name, ISelection selection,
-                       List<String> bundlesToStart) {
-               Assert.isNotNull(selection);
-
-               Map<String, IPluginModelBase> bundleProjects = new HashMap<String, IPluginModelBase>();
-               for (IPluginModelBase modelBase : PluginRegistry.getWorkspaceModels()) {
-                       IProject bundleProject = modelBase.getUnderlyingResource()
-                                       .getProject();
-                       bundleProjects.put(bundleProject.getName(), modelBase);
-               }
-
-               IStructuredSelection sSelection = (IStructuredSelection) selection;
-               for (Iterator<?> it = sSelection.iterator(); it.hasNext();) {
-                       Object obj = it.next();
-                       if (obj instanceof IProject) {
-                               IProject project = (IProject) obj;
-                               if (bundleProjects.containsKey(project.getName())) {
-                                       IPluginModelBase modelBase = bundleProjects.get(project
-                                                       .getName());
-
-                                       BundleDescription bundleDescription = null;
-                                       if (modelBase.isFragmentModel()) {
-                                               BundleDescription[] hosts = modelBase
-                                                               .getBundleDescription().getHost().getHosts();
-                                               for (BundleDescription bd : hosts) {
-                                                       if (debug)
-                                                               System.out.println("Host for "
-                                                                               + modelBase.getBundleDescription()
-                                                                                               .getSymbolicName() + ": "
-                                                                               + bd.getSymbolicName());
-                                                       bundleDescription = bd;
-                                               }
-                                       } else {
-                                               bundleDescription = modelBase.getBundleDescription();
-                                       }
-
-                                       if (bundleDescription != null) {
-                                               String symbolicName = bundleDescription
-                                                               .getSymbolicName();
-                                               String bundleName = bundleDescription.getName();
-
-                                               bundlesToStart.add(symbolicName);
-
-                                               if (name.length() > 0)
-                                                       name.append(" ");
-                                               if (bundleName != null)
-                                                       name.append(bundleName);
-                                               else
-                                                       name.append(symbolicName);
-                                       }
-                               }
-                       }
-               }
-       }
-
-       static void debug(Object obj) {
-               if (debug)
-                       System.out.println(obj);
-       }
-
-}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiLauncherConstants.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiLauncherConstants.java
deleted file mode 100644 (file)
index 8ada527..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.argeo.slc.ide.ui.launch.osgi;
-
-import org.argeo.slc.ide.ui.SlcIdeUiPlugin;
-
-/** Constants used by OSGi launch. */
-public interface OsgiLauncherConstants {
-
-       public final static String OSGI_BUNDLES = "osgi.bundles";
-       public final static String ECLIPSE_APPLICATION = "eclipse.application";
-
-       public final static String ARGEO_OSGI_START = "argeo.osgi.start";
-       public final static String ARGEO_OSGI_BUNDLES = "argeo.osgi.bundles";
-       public final static String ARGEO_OSGI_LOCATIONS = "argeo.osgi.locations";
-       public final static String ARGEO_OSGI_DATA_DIR = "argeo.osgi.data.dir";
-       public final static String VMS_PROPERTY_PREFIX = "slc.launch.vm";
-
-       // Configuration
-       public final static String ATTR_SYNC_BUNDLES = SlcIdeUiPlugin.ID
-                       + ".syncBundles";
-       public final static String ATTR_CLEAR_DATA_DIRECTORY = SlcIdeUiPlugin.ID
-                       + ".clearDataDirectory";
-
-       public final static String ATTR_DEFAULT_VM_ARGS = SlcIdeUiPlugin.ID
-                       + ".defaultVmArgs";
-       public final static String ATTR_ADDITIONAL_PROGRAM_ARGS = SlcIdeUiPlugin.ID
-                       + ".additionalProgramArgs";
-       public final static String ATTR_ADDITIONAL_VM_ARGS = SlcIdeUiPlugin.ID
-                       + ".additionalVmArgs";
-       public final static String ATTR_ADD_JVM_PATHS = SlcIdeUiPlugin.ID
-                       + ".addJvmPaths";
-       public final static String ATTR_DATADIR = SlcIdeUiPlugin.ID + ".dataDir";
-}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/preferences/SlcLaunchPreferencePage.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/preferences/SlcLaunchPreferencePage.java
deleted file mode 100644 (file)
index 24c6757..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.argeo.slc.ide.ui.launch.preferences;\r
-\r
-import org.argeo.slc.ide.ui.SlcIdeUiPlugin;\r
-import org.eclipse.jface.preference.DirectoryFieldEditor;\r
-import org.eclipse.jface.preference.FieldEditorPreferencePage;\r
-import org.eclipse.ui.IWorkbench;\r
-import org.eclipse.ui.IWorkbenchPreferencePage;\r
-\r
-public class SlcLaunchPreferencePage extends FieldEditorPreferencePage implements\r
-               IWorkbenchPreferencePage {\r
-       public final static String PREF_SLC_RUNTIME_LOCATION = SlcIdeUiPlugin.ID\r
-                       + ".slcRuntimeLocation";\r
-       public final static String PREF_EMBEDDED_JAVA_LIBRARY_PATH = SlcIdeUiPlugin.ID\r
-                       + ".embeddedJavaLibraryPath";\r
-\r
-       public SlcLaunchPreferencePage() {\r
-//             IPreferenceStore store = SlcUiLaunchPlugin.getDefault()\r
-//                             .getPreferenceStore();\r
-//             setPreferenceStore(store);\r
-               setDescription("Argeo SLC Launch Preferences");\r
-       }\r
-\r
-       @Override\r
-       protected void createFieldEditors() {\r
-               addField(new DirectoryFieldEditor(PREF_SLC_RUNTIME_LOCATION,\r
-                               "SLC Runtime", getFieldEditorParent()));\r
-               addField(new DirectoryFieldEditor(PREF_EMBEDDED_JAVA_LIBRARY_PATH,\r
-                               "Embedded Java Library Path", getFieldEditorParent()));\r
-       }\r
-\r
-       public void init(IWorkbench workbench) {\r
-       }\r
-\r
-}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchConfigurationTab.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchConfigurationTab.java
deleted file mode 100644 (file)
index f73a8ca..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-package org.argeo.slc.ide.ui.launch.script;\r
-\r
-import org.eclipse.core.resources.IResource;\r
-import org.eclipse.core.resources.ResourcesPlugin;\r
-import org.eclipse.core.runtime.CoreException;\r
-import org.eclipse.debug.core.ILaunchConfiguration;\r
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;\r
-import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;\r
-import org.eclipse.jface.window.Window;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.ModifyEvent;\r
-import org.eclipse.swt.events.ModifyListener;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.events.SelectionListener;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Label;\r
-import org.eclipse.swt.widgets.Text;\r
-import org.eclipse.ui.dialogs.ResourceSelectionDialog;\r
-\r
-public class SlcScriptLaunchConfigurationTab extends\r
-               AbstractLaunchConfigurationTab {\r
-\r
-       private Text scriptTF;\r
-       private Text propertiesTF;\r
-       private Text runtimeTF;\r
-       private Text targetsTF;\r
-       private Button pre093B;\r
-\r
-       public void createControl(Composite parent) {\r
-               Composite body = new Composite(parent, SWT.NONE);\r
-               setControl(body);\r
-               body.setLayout(new GridLayout(1, false));\r
-               body.setFont(parent.getFont());\r
-\r
-               createLabel(body, "Script location");\r
-               scriptTF = createSingleText(body);\r
-               createWorkspaceButton(body);\r
-\r
-               createLabel(body, "Runtime");\r
-               runtimeTF = createSingleText(body);\r
-\r
-               createLabel(body, "Targets");\r
-               targetsTF = createSingleText(body);\r
-\r
-               createLabel(body, "Properties");\r
-               propertiesTF = createMultipleText(body, 10);\r
-\r
-               pre093B = createCheckBox(body, "Pre SLC v0.9.3");\r
-       }\r
-\r
-       public String getName() {\r
-               return "SLC";\r
-       }\r
-\r
-       public void initializeFrom(ILaunchConfiguration configuration) {\r
-               try {\r
-                       scriptTF.setText(configuration.getAttribute(\r
-                                       SlcScriptUtils.ATTR_SCRIPT, ""));\r
-\r
-                       boolean pre093 = configuration.getAttribute(\r
-                                       SlcScriptUtils.ATTR_PRE093, false);\r
-\r
-                       propertiesTF.setText(configuration.getAttribute(\r
-                                       SlcScriptUtils.ATTR_PROPERTIES, ""));\r
-                       runtimeTF.setText(configuration.getAttribute(\r
-                                       SlcScriptUtils.ATTR_RUNTIME, ""));\r
-                       targetsTF.setText(configuration.getAttribute(\r
-                                       SlcScriptUtils.ATTR_TARGETS, ""));\r
-                       pre093B.setSelection(pre093);\r
-               } catch (CoreException e) {\r
-                       throw new RuntimeException("Cannot initialize tab", e);\r
-               }\r
-\r
-       }\r
-\r
-       public void performApply(ILaunchConfigurationWorkingCopy configuration) {\r
-               configuration.setAttribute(SlcScriptUtils.ATTR_SCRIPT, scriptTF\r
-                               .getText());\r
-               configuration.setAttribute(SlcScriptUtils.ATTR_PROPERTIES, propertiesTF\r
-                               .getText());\r
-               configuration.setAttribute(SlcScriptUtils.ATTR_RUNTIME, runtimeTF\r
-                               .getText());\r
-               configuration.setAttribute(SlcScriptUtils.ATTR_TARGETS, targetsTF\r
-                               .getText());\r
-               configuration.setAttribute(SlcScriptUtils.ATTR_PRE093, pre093B\r
-                               .getSelection());\r
-       }\r
-\r
-       public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {\r
-               configuration.setAttribute(SlcScriptUtils.ATTR_SCRIPT, "");\r
-               configuration.setAttribute(SlcScriptUtils.ATTR_PROPERTIES, "");\r
-               configuration.setAttribute(SlcScriptUtils.ATTR_RUNTIME, "");\r
-               configuration.setAttribute(SlcScriptUtils.ATTR_TARGETS, "");\r
-               configuration.setAttribute(SlcScriptUtils.ATTR_PRE093, false);\r
-       }\r
-\r
-       // UI Utils\r
-       protected Label createLabel(Composite parent, String text) {\r
-               Label t = new Label(parent, SWT.NONE | SWT.WRAP);\r
-               t.setText(text);\r
-               t.setFont(parent.getFont());\r
-               GridData gd = new GridData(GridData.FILL_HORIZONTAL);\r
-               gd.horizontalSpan = 1;\r
-               t.setLayoutData(gd);\r
-               return t;\r
-       }\r
-\r
-       protected Text createSingleText(Composite parent) {\r
-               Text t = new Text(parent, SWT.SINGLE | SWT.BORDER);\r
-               t.setFont(parent.getFont());\r
-               GridData gd = new GridData(GridData.FILL_HORIZONTAL);\r
-               gd.horizontalSpan = 1;\r
-               t.setLayoutData(gd);\r
-               t.addModifyListener(modifyListener);\r
-               return t;\r
-       }\r
-\r
-       protected Text createMultipleText(Composite parent, int verticalSpan) {\r
-               Text t = new Text(parent, SWT.MULTI | SWT.BORDER);\r
-               t.setFont(parent.getFont());\r
-               GridData gd = new GridData(GridData.FILL, GridData.FILL, true, true);\r
-               gd.horizontalSpan = 1;\r
-               gd.verticalSpan = verticalSpan;\r
-               t.setLayoutData(gd);\r
-               t.addModifyListener(modifyListener);\r
-               return t;\r
-       }\r
-\r
-       protected Button createCheckBox(Composite parent, String label) {\r
-               Button b = new Button(parent, SWT.CHECK);\r
-               b.setFont(parent.getFont());\r
-               b.setText(label);\r
-               b.addSelectionListener(selectionListener);\r
-               return b;\r
-\r
-       }\r
-\r
-       protected Button createWorkspaceButton(Composite parent) {\r
-               Button b = new Button(parent, SWT.PUSH);\r
-               b.setFont(parent.getFont());\r
-               b.setText("Workspace...");\r
-               b.addSelectionListener(new SelectionListener() {\r
-                       public void widgetDefaultSelected(SelectionEvent e) {\r
-                       }\r
-\r
-                       public void widgetSelected(SelectionEvent e) {\r
-                               handleWorkspaceLocationButtonSelected();\r
-                       }\r
-               });\r
-               return b;\r
-       }\r
-\r
-       protected void handleWorkspaceLocationButtonSelected() {\r
-               ResourceSelectionDialog dialog;\r
-               dialog = new ResourceSelectionDialog(getShell(), ResourcesPlugin\r
-                               .getWorkspace().getRoot(), "Select a file");\r
-               if (dialog.open() == Window.OK) {\r
-                       Object[] results = dialog.getResult();\r
-                       if (results == null || results.length < 1) {\r
-                               return;\r
-                       }\r
-                       IResource resource = (IResource) results[0];\r
-                       scriptTF.setText(SlcScriptUtils\r
-                                       .convertToWorkspaceLocation(resource));\r
-                       updateLaunchConfigurationDialog();\r
-               }\r
-       }\r
-\r
-       // LISTENERS\r
-       /**\r
-        * Modify listener that simply updates the owning launch configuration\r
-        * dialog.\r
-        */\r
-       private ModifyListener modifyListener = new ModifyListener() {\r
-               public void modifyText(ModifyEvent evt) {\r
-                       updateLaunchConfigurationDialog();\r
-               }\r
-       };\r
-       private SelectionListener selectionListener = new SelectionListener() {\r
-               public void widgetDefaultSelected(SelectionEvent e) {\r
-               }\r
-\r
-               public void widgetSelected(SelectionEvent e) {\r
-                       updateLaunchConfigurationDialog();\r
-               }\r
-       };\r
-\r
-}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchConfigurationTabGroup.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchConfigurationTabGroup.java
deleted file mode 100644 (file)
index e7d54a3..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.argeo.slc.ide.ui.launch.script;\r
-\r
-import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup;\r
-import org.eclipse.debug.ui.CommonTab;\r
-import org.eclipse.debug.ui.ILaunchConfigurationDialog;\r
-import org.eclipse.debug.ui.ILaunchConfigurationTab;\r
-\r
-public class SlcScriptLaunchConfigurationTabGroup extends\r
-               AbstractLaunchConfigurationTabGroup {\r
-\r
-       public void createTabs(ILaunchConfigurationDialog dialog, String mode) {\r
-               ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] {\r
-                               new SlcScriptLaunchConfigurationTab(), new CommonTab() };\r
-               setTabs(tabs);\r
-       }\r
-}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchDelegate.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchDelegate.java
deleted file mode 100644 (file)
index 75d8ce7..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-package org.argeo.slc.ide.ui.launch.script;\r
-\r
-import java.io.ByteArrayInputStream;\r
-import java.io.IOException;\r
-import java.util.List;\r
-import java.util.Properties;\r
-import java.util.Vector;\r
-\r
-import org.argeo.slc.ide.ui.DeployedSlcSystem;\r
-import org.argeo.slc.ide.ui.EmbeddedSlcSystem;\r
-import org.argeo.slc.ide.ui.SlcSystem;\r
-import org.argeo.slc.ide.ui.SlcIdeUiPlugin;\r
-import org.argeo.slc.ide.ui.launch.preferences.SlcLaunchPreferencePage;\r
-import org.eclipse.core.resources.IFile;\r
-import org.eclipse.core.resources.IProject;\r
-import org.eclipse.core.resources.ResourcesPlugin;\r
-import org.eclipse.core.runtime.CoreException;\r
-import org.eclipse.core.runtime.IPath;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Path;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.core.variables.IStringVariableManager;\r
-import org.eclipse.core.variables.VariablesPlugin;\r
-import org.eclipse.debug.core.DebugPlugin;\r
-import org.eclipse.debug.core.ILaunch;\r
-import org.eclipse.debug.core.ILaunchConfiguration;\r
-import org.eclipse.debug.core.ILaunchManager;\r
-import org.eclipse.jdt.core.IJavaProject;\r
-import org.eclipse.jdt.core.IType;\r
-import org.eclipse.jdt.core.JavaCore;\r
-import org.eclipse.jdt.core.JavaModelException;\r
-import org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate;\r
-import org.eclipse.jdt.launching.IVMRunner;\r
-import org.eclipse.jdt.launching.VMRunnerConfiguration;\r
-import org.eclipse.jface.dialogs.ErrorDialog;\r
-import org.eclipse.swt.widgets.Shell;\r
-\r
-public class SlcScriptLaunchDelegate extends\r
-               AbstractJavaLaunchConfigurationDelegate {\r
-       public static final String ID = "org.argeo.slc.launch.slcScriptLaunchType";\r
-\r
-       public final static String ANT_MAIN = "org.apache.tools.ant.Main";\r
-       public final static String SLC_MAIN = "org.argeo.slc.cli.SlcMain";\r
-\r
-       @SuppressWarnings("deprecation")\r
-       public void launch(ILaunchConfiguration configuration, String mode,\r
-                       ILaunch launch, IProgressMonitor monitor) throws CoreException {\r
-               if (!saveBeforeLaunch(configuration, mode, monitor))\r
-                       return;\r
-\r
-               String scriptLocation = configuration.getAttribute(\r
-                               SlcScriptUtils.ATTR_SCRIPT, "");\r
-               if (scriptLocation.equals(""))\r
-                       abort("Script has to be provided", null, 1);\r
-\r
-               IStringVariableManager manager = VariablesPlugin.getDefault()\r
-                               .getStringVariableManager();\r
-               scriptLocation = manager.performStringSubstitution(scriptLocation);\r
-               IPath path = new Path(scriptLocation);\r
-               IFile[] files = ResourcesPlugin.getWorkspace().getRoot()\r
-                               .findFilesForLocation(path);\r
-\r
-               if (files.length == 0)\r
-                       abort("Coulkd not find related file", null, 1);\r
-\r
-               IFile file = (IFile) files[0];\r
-               DebugPlugin\r
-                               .logMessage("Launching " + file.getLocation().toFile(), null);\r
-\r
-               boolean pre093 = configuration.getAttribute(SlcScriptUtils.ATTR_PRE093,\r
-                               false);\r
-\r
-               // Retrieve SLC Runtime\r
-               SlcSystem slcSystem = findSlcSystem(file, pre093);\r
-               if (slcSystem == null)\r
-                       return;\r
-\r
-               IVMRunner vmRunner = slcSystem.getVmInstall().getVMRunner(mode);\r
-               final VMRunnerConfiguration vmConfig;\r
-               if (pre093) {\r
-                       vmConfig = createPre093Config(slcSystem, file, mode);\r
-               } else {\r
-                       vmConfig = createConfig(slcSystem, file, mode, configuration);\r
-               }\r
-               vmRunner.run(vmConfig, launch, monitor);\r
-       }\r
-\r
-       protected SlcSystem findSlcSystem(IFile file, boolean pre093)\r
-                       throws CoreException {\r
-               SlcSystem slcSystem = null;\r
-\r
-               IProject project = file.getProject();\r
-               if (project.getNature("org.eclipse.jdt.core.javanature") != null) {\r
-                       IJavaProject javaProject = JavaCore.create(project);\r
-                       if (checkProjectForEmbedded(javaProject, pre093)) {\r
-                               slcSystem = new EmbeddedSlcSystem(javaProject);\r
-                       }\r
-               }\r
-\r
-               if (slcSystem == null) {\r
-                       String slcRuntimePath = SlcIdeUiPlugin.getDefault()\r
-                                       .getPreferenceStore().getString(\r
-                                                       SlcLaunchPreferencePage.PREF_SLC_RUNTIME_LOCATION);\r
-                       if (slcRuntimePath == null || slcRuntimePath.equals("")) {\r
-                               showError("SLC Runtime path is not set. Set it in Windows > Preferences > SLC");\r
-                               return null;\r
-                       }\r
-\r
-                       slcSystem = new DeployedSlcSystem(slcRuntimePath);\r
-               }\r
-\r
-               return slcSystem;\r
-       }\r
-\r
-       protected boolean checkProjectForEmbedded(IJavaProject project,\r
-                       boolean pre093) {\r
-               try {\r
-                       IType mainType = null;\r
-                       if (pre093)\r
-                               mainType = project.findType(ANT_MAIN);\r
-                       else\r
-                               mainType = project.findType(SLC_MAIN);\r
-\r
-                       if (mainType == null)\r
-                               return false;\r
-                       else\r
-                               return true;\r
-               } catch (JavaModelException e) {\r
-                       e.printStackTrace();\r
-                       return false;\r
-               }\r
-       }\r
-\r
-       // Regular SLC\r
-       protected VMRunnerConfiguration createConfig(SlcSystem deployedSlc,\r
-                       IFile file, String mode, ILaunchConfiguration configuration)\r
-                       throws CoreException {\r
-               VMRunnerConfiguration vmConfig = new VMRunnerConfiguration(SLC_MAIN,\r
-                               deployedSlc.getClasspath());\r
-               vmConfig.setVMArguments(getVmArguments(deployedSlc));\r
-               vmConfig.setWorkingDirectory(file.getLocation().toFile().getParent());\r
-               vmConfig.setProgramArguments(getProgramArguments(deployedSlc, file,\r
-                               mode, configuration));\r
-               return vmConfig;\r
-       }\r
-\r
-       protected String[] getVmArguments(SlcSystem deployedSlc) {\r
-               List<String> list = new Vector<String>();\r
-               if (deployedSlc.getJavaLibraryPath() != null)\r
-                       list.add("-Djava.library.path=" + deployedSlc.getJavaLibraryPath());\r
-               return list.toArray(new String[list.size()]);\r
-       }\r
-\r
-       protected String[] getProgramArguments(SlcSystem deployedSlc, IFile file,\r
-                       String mode, ILaunchConfiguration configuration)\r
-                       throws CoreException {\r
-               List<String> list = new Vector<String>();\r
-\r
-               list.add("--mode");\r
-               list.add("single");\r
-\r
-               // Script\r
-               list.add("--script");\r
-               list.add(file.getLocation().toFile().getAbsolutePath());\r
-\r
-               // Runtime\r
-               String runtime = configuration.getAttribute(\r
-                               SlcScriptUtils.ATTR_RUNTIME, "");\r
-               if (!runtime.equals("")) {\r
-                       list.add("--runtime");\r
-                       list.add(runtime);\r
-               }\r
-\r
-               // Targets\r
-               String targets = configuration.getAttribute(\r
-                               SlcScriptUtils.ATTR_TARGETS, "");\r
-               if (!targets.equals("")) {\r
-                       list.add("--targets");\r
-                       list.add(targets);\r
-               }\r
-\r
-               // Properties\r
-               Properties properties = new Properties();\r
-               String str = configuration.getAttribute(SlcScriptUtils.ATTR_PROPERTIES,\r
-                               "");\r
-               ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes());\r
-               try {\r
-                       properties.load(in);\r
-               } catch (IOException e) {\r
-                       throw new RuntimeException("Cannot read properties", e);\r
-               } finally {\r
-                       if (in != null)\r
-                               try {\r
-                                       in.close();\r
-                               } catch (IOException e) {\r
-                                       // silent\r
-                               }\r
-               }\r
-\r
-               for (Object key : properties.keySet()) {\r
-                       list.add("-p");\r
-                       StringBuffer buf = new StringBuffer("");\r
-                       buf.append(key).append('=').append(properties.get(key));\r
-                       list.add(buf.toString());\r
-               }\r
-\r
-               // Debug mode\r
-               if (mode.equals(ILaunchManager.DEBUG_MODE)) {\r
-                       list.add("--property");\r
-                       list.add("log4j.logger.org.argeo.slc=DEBUG");\r
-               }\r
-               return list.toArray(new String[list.size()]);\r
-       }\r
-\r
-       // Pre SLC v0.9.3\r
-       protected VMRunnerConfiguration createPre093Config(SlcSystem deployedSlc,\r
-                       IFile file, String mode) throws CoreException {\r
-               VMRunnerConfiguration vmConfig = new VMRunnerConfiguration(ANT_MAIN,\r
-                               deployedSlc.getClasspath());\r
-               vmConfig.setVMArguments(getPre093VmArguments(deployedSlc));\r
-               vmConfig.setWorkingDirectory(file.getLocation().toFile().getParent());\r
-               vmConfig.setProgramArguments(getPre093ProgramArguments(deployedSlc,\r
-                               file, mode));\r
-               return vmConfig;\r
-       }\r
-\r
-       protected String[] getPre093VmArguments(SlcSystem deployedSlc) {\r
-               List<String> list = new Vector<String>();\r
-               // list.add("-Dant.home=" + deployedSlc.getAntHome());\r
-               if (deployedSlc.getJavaLibraryPath() != null)\r
-                       list.add("-Djava.library.path=" + deployedSlc.getJavaLibraryPath());\r
-               return list.toArray(new String[list.size()]);\r
-       }\r
-\r
-       protected String[] getPre093ProgramArguments(SlcSystem deployedSlc,\r
-                       IFile file, String mode) {\r
-               List<String> list = new Vector<String>();\r
-               list.add("-f");\r
-               list.add(file.getLocation().toFile().getAbsolutePath());\r
-               if (mode.equals(ILaunchManager.DEBUG_MODE)) {\r
-                       list.add("-d");\r
-               }\r
-               return list.toArray(new String[list.size()]);\r
-       }\r
-\r
-       // Utilities\r
-       private static void showError(String message) {\r
-               Shell shell = SlcIdeUiPlugin.getDefault().getWorkbench()\r
-                               .getActiveWorkbenchWindow().getShell();\r
-\r
-               IStatus status = new Status(IStatus.ERROR, SlcIdeUiPlugin.ID,\r
-                               message);\r
-               ErrorDialog.openError(shell, "Error", "Cannot launch SLC script",\r
-                               status);\r
-       }\r
-\r
-}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchShortcut.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchShortcut.java
deleted file mode 100644 (file)
index dfb0044..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-package org.argeo.slc.ide.ui.launch.script;\r
-\r
-import org.argeo.slc.ide.ui.SlcIdeUiPlugin;\r
-import org.eclipse.core.resources.IFile;\r
-import org.eclipse.core.runtime.CoreException;\r
-import org.eclipse.core.runtime.IPath;\r
-import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.debug.core.DebugPlugin;\r
-import org.eclipse.debug.core.ILaunchConfiguration;\r
-import org.eclipse.debug.core.ILaunchConfigurationType;\r
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;\r
-import org.eclipse.debug.core.ILaunchManager;\r
-import org.eclipse.debug.ui.DebugUITools;\r
-import org.eclipse.debug.ui.IDebugUIConstants;\r
-import org.eclipse.debug.ui.ILaunchShortcut;\r
-import org.eclipse.jface.dialogs.ErrorDialog;\r
-import org.eclipse.jface.viewers.ISelection;\r
-import org.eclipse.jface.viewers.IStructuredSelection;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.eclipse.ui.IEditorPart;\r
-\r
-public class SlcScriptLaunchShortcut implements ILaunchShortcut {\r
-       private boolean showDialog = false;\r
-\r
-       public void launch(ISelection selection, String mode) {\r
-               try {\r
-                       if (!(selection instanceof IStructuredSelection)) {\r
-                               throw new RuntimeException("Unknown selection "\r
-                                               + selection.getClass());\r
-                       }\r
-                       IStructuredSelection sSelection = (IStructuredSelection) selection;\r
-                       if (sSelection.size() != 1) {\r
-                               throw new RuntimeException("Can only launch one SLC script.");\r
-                       }\r
-                       Object obj = sSelection.iterator().next();\r
-                       if (!(obj instanceof IFile)) {\r
-                               throw new RuntimeException("Can only launch files.");\r
-                       }\r
-                       IFile file = ((IFile) obj);\r
-\r
-                       ILaunchManager manager = DebugPlugin.getDefault()\r
-                                       .getLaunchManager();\r
-                       ILaunchConfigurationType type = manager\r
-                                       .getLaunchConfigurationType(SlcScriptLaunchDelegate.ID);\r
-\r
-                       // Find or create config\r
-                       String configLocation = SlcScriptUtils\r
-                                       .convertToWorkspaceLocation(file);\r
-                       ILaunchConfiguration config = findLaunchConfiguration(\r
-                                       configLocation, manager.getLaunchConfigurations(type));\r
-                       if (config == null) {\r
-                               ILaunchConfigurationWorkingCopy wc = type.newInstance(null,\r
-                                               generateName(file));\r
-                               wc.setAttribute(SlcScriptUtils.ATTR_SCRIPT, configLocation);\r
-                               wc.setMappedResources(new IFile[] { file });\r
-                               config = wc.doSave();\r
-                       }\r
-\r
-                       // Launch\r
-                       launch(config, mode);\r
-               } catch (CoreException e) {\r
-                       Shell shell = SlcIdeUiPlugin.getDefault().getWorkbench()\r
-                                       .getActiveWorkbenchWindow().getShell();\r
-                       ErrorDialog.openError(shell, "Error",\r
-                                       "Cannot execute SLC launch shortcut", e.getStatus());\r
-               }\r
-\r
-       }\r
-\r
-       protected String generateName(IFile file) {\r
-               IPath relativePath = file.getProjectRelativePath();\r
-               String name = relativePath.toString();\r
-               int idx = name.lastIndexOf(".xml");\r
-               if (idx > 0)\r
-                       name = name.substring(0, idx);\r
-\r
-               if (name.startsWith("src/main/slc/root/"))\r
-                       name = name.substring("src/main/slc/root/".length());\r
-               else if (name.startsWith("src/main/slc/"))\r
-                       name = name.substring("src/main/slc/".length());\r
-\r
-               name = name.replace('/', '.');// otherwise not properly saved\r
-               return name;\r
-       }\r
-\r
-       protected ILaunchConfiguration findLaunchConfiguration(\r
-                       String configLocation, ILaunchConfiguration[] configs)\r
-                       throws CoreException {\r
-               for (ILaunchConfiguration config : configs) {\r
-                       String loc = config.getAttribute(SlcScriptUtils.ATTR_SCRIPT, "");\r
-                       if (loc.equals(configLocation)) {\r
-                               return config;\r
-                       }\r
-               }\r
-               return null;\r
-       }\r
-\r
-       protected void launch(ILaunchConfiguration configuration, String mode)\r
-                       throws CoreException {\r
-               if (showDialog) {\r
-                       IStatus status = new Status(IStatus.INFO, SlcIdeUiPlugin.ID,\r
-                                       "Configure SLC Launch");\r
-                       String groupId;\r
-                       if (mode.equals(ILaunchManager.DEBUG_MODE)) {\r
-                               groupId = IDebugUIConstants.ID_DEBUG_LAUNCH_GROUP;\r
-                       } else {\r
-                               groupId = IDebugUIConstants.ID_RUN_LAUNCH_GROUP;\r
-                       }\r
-                       DebugUITools.openLaunchConfigurationDialog(SlcIdeUiPlugin\r
-                                       .getDefault().getWorkbench().getActiveWorkbenchWindow()\r
-                                       .getShell(), configuration, groupId, status);\r
-               } else {\r
-                       DebugUITools.launch(configuration, mode);\r
-               }\r
-\r
-       }\r
-\r
-       public void launch(IEditorPart editor, String mode) {\r
-               // not (yet) implemented\r
-       }\r
-\r
-       public void setShowDialog(boolean showDialog) {\r
-               this.showDialog = showDialog;\r
-       }\r
-\r
-}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchShortcutWithDialog.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchShortcutWithDialog.java
deleted file mode 100644 (file)
index 9e8dd3e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.argeo.slc.ide.ui.launch.script;\r
-\r
-\r
-public class SlcScriptLaunchShortcutWithDialog extends SlcScriptLaunchShortcut {\r
-\r
-       public SlcScriptLaunchShortcutWithDialog() {\r
-               super();\r
-               setShowDialog(true);\r
-       }\r
-\r
-}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptUtils.java b/ide/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/script/SlcScriptUtils.java
deleted file mode 100644 (file)
index 9a5bc42..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.argeo.slc.ide.ui.launch.script;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.variables.VariablesPlugin;
-
-public class SlcScriptUtils {
-
-       public final static String ATTR_SCRIPT = "script";
-       public final static String ATTR_PROPERTIES = "properties";
-       public final static String ATTR_RUNTIME = "runtime";
-       public final static String ATTR_TARGETS = "targets";
-       public final static String ATTR_PRE093 = "pre093";
-
-       public static String convertToWorkspaceLocation(IResource resource) {
-               return VariablesPlugin.getDefault().getStringVariableManager()
-                               .generateVariableExpression("workspace_loc",
-                                               resource.getFullPath().toString());
-       }
-
-       private SlcScriptUtils() {
-
-       }
-}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/DeployedSlcSystem.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/DeployedSlcSystem.java
new file mode 100644 (file)
index 0000000..8992432
--- /dev/null
@@ -0,0 +1,50 @@
+package org.argeo.slc.ide.ui;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.jdt.launching.IVMInstall;\r
+import org.eclipse.jdt.launching.JavaRuntime;\r
+\r
+public class DeployedSlcSystem implements SlcSystem {\r
+       private File baseDir;\r
+       private String relLibDir = "lib";\r
+\r
+       public DeployedSlcSystem(String baseDirPath) {\r
+               try {\r
+                       this.baseDir = new File(baseDirPath).getCanonicalFile();\r
+               } catch (IOException e) {\r
+                       throw new RuntimeException("Cannot get path for " + baseDirPath, e);\r
+               }\r
+       }\r
+\r
+       public String[] getClasspath() throws CoreException {\r
+               List<String> classpath = new Vector<String>();\r
+               File libDir = new File(baseDir.getPath() + File.separator + relLibDir);\r
+               File[] files = libDir.listFiles();\r
+               for (File file : files) {\r
+                       try {\r
+                               classpath.add(file.getCanonicalPath());\r
+                       } catch (IOException e) {\r
+                               throw new RuntimeException("Cannot get path for " + file, e);\r
+                       }\r
+               }\r
+               return classpath.toArray(new String[classpath.size()]);\r
+       }\r
+\r
+       public IVMInstall getVmInstall() throws CoreException {\r
+               return JavaRuntime.getDefaultVMInstall();\r
+       }\r
+\r
+       public String getAntHome() {\r
+               return baseDir.getPath();\r
+       }\r
+\r
+       public String getJavaLibraryPath() {\r
+               return baseDir.getPath() + File.separator + "bin";\r
+       }\r
+\r
+}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/EmbeddedSlcSystem.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/EmbeddedSlcSystem.java
new file mode 100644 (file)
index 0000000..e2414e0
--- /dev/null
@@ -0,0 +1,34 @@
+package org.argeo.slc.ide.ui;
+
+import org.argeo.slc.ide.ui.launch.preferences.SlcLaunchPreferencePage;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.JavaRuntime;
+
+public class EmbeddedSlcSystem implements SlcSystem {
+       private final IJavaProject project;
+
+       public EmbeddedSlcSystem(IJavaProject project) {
+               this.project = project;
+       }
+
+       public String[] getClasspath() throws CoreException {
+               return JavaRuntime.computeDefaultRuntimeClassPath(project);
+       }
+
+       public String getJavaLibraryPath() {
+               String javaLibPath = SlcIdeUiPlugin.getDefault()
+                               .getPreferenceStore().getString(
+                                               SlcLaunchPreferencePage.PREF_SLC_RUNTIME_LOCATION);
+               if (javaLibPath == null || javaLibPath.equals(""))
+                       return null;
+               else
+                       return javaLibPath;
+       }
+
+       public IVMInstall getVmInstall() throws CoreException {
+               return JavaRuntime.getVMInstall(project);
+       }
+
+}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/SlcIdeUiPlugin.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/SlcIdeUiPlugin.java
new file mode 100644 (file)
index 0000000..3570a61
--- /dev/null
@@ -0,0 +1,122 @@
+package org.argeo.slc.ide.ui;\r
+\r
+import java.net.URL;\r
+\r
+import org.eclipse.core.resources.IResource;\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.debug.core.DebugEvent;\r
+import org.eclipse.debug.core.DebugPlugin;\r
+import org.eclipse.debug.core.IDebugEventSetListener;\r
+import org.eclipse.debug.core.ILaunch;\r
+import org.eclipse.debug.core.model.IProcess;\r
+import org.eclipse.jface.resource.ImageDescriptor;\r
+import org.eclipse.jface.resource.ImageRegistry;\r
+import org.eclipse.pde.core.plugin.TargetPlatform;\r
+import org.eclipse.swt.graphics.Image;\r
+import org.eclipse.ui.plugin.AbstractUIPlugin;\r
+import org.osgi.framework.BundleContext;\r
+\r
+/**\r
+ * The activator class controls the plug-in life cycle\r
+ */\r
+public class SlcIdeUiPlugin extends AbstractUIPlugin {\r
+\r
+       // The plug-in ID\r
+       public static final String ID = "org.argeo.slc.ide.ui";\r
+\r
+       // The shared instance\r
+       private static SlcIdeUiPlugin plugin;\r
+\r
+       /**\r
+        * The constructor\r
+        */\r
+       public SlcIdeUiPlugin() {\r
+       }\r
+\r
+       @Override\r
+       public void start(BundleContext context) throws Exception {\r
+               super.start(context);\r
+               plugin = this;\r
+               DebugPlugin.getDefault()\r
+                               .addDebugEventListener(new DebugEventListener());\r
+\r
+               String location = TargetPlatform.getLocation();\r
+               System.out.println(location);\r
+       }\r
+\r
+       @Override\r
+       public void stop(BundleContext context) throws Exception {\r
+               plugin = null;\r
+               super.stop(context);\r
+       }\r
+\r
+       /**\r
+        * Returns the shared instance\r
+        * \r
+        * @return the shared instance\r
+        */\r
+       public static SlcIdeUiPlugin getDefault() {\r
+               return plugin;\r
+       }\r
+\r
+       public Image getImage(String relativeURL) {\r
+               ImageRegistry imageRegistry = getImageRegistry();\r
+               Image image = imageRegistry.get(relativeURL);\r
+               if (image == null) {\r
+                       URL imageURL = getBundle().getEntry(relativeURL);\r
+                       ImageDescriptor descriptor = ImageDescriptor\r
+                                       .createFromURL(imageURL);\r
+                       image = descriptor.createImage();\r
+                       imageRegistry.put(relativeURL, image);\r
+               }\r
+               return image;\r
+       }\r
+\r
+       protected static class DebugEventListener implements IDebugEventSetListener {\r
+               public void handleDebugEvents(DebugEvent[] events) {\r
+                       if (events == null)\r
+                               return;\r
+\r
+                       for (int i = 0; i < events.length; i++) {\r
+                               DebugEvent event = events[i];\r
+                               if (event == null)\r
+                                       continue;\r
+                               Object source = event.getSource();\r
+                               if (source instanceof IProcess\r
+                                               && event.getKind() == DebugEvent.TERMINATE) {\r
+                                       IProcess process = (IProcess) source;\r
+//                                     if (process == null)\r
+//                                             continue;\r
+                                       ILaunch launch = process.getLaunch();\r
+                                       if (launch != null)\r
+                                               refreshOsgiBootLaunch(launch);\r
+                               }\r
+                       }\r
+               }\r
+\r
+               protected void refreshOsgiBootLaunch(ILaunch launch) {\r
+                       try {\r
+                               if (launch == null)\r
+                                       return;\r
+                               IResource[] resources = launch.getLaunchConfiguration()\r
+                                               .getMappedResources();\r
+                               if (resources == null)\r
+                                       return;\r
+                               if (resources.length > 0) {\r
+                                       IResource propertiesFile = resources[0];\r
+                                       if (propertiesFile.getParent() == null)\r
+                                               return;\r
+                                       propertiesFile.getParent().refreshLocal(\r
+                                                       IResource.DEPTH_INFINITE, null);\r
+                                       // System.out.println("Refreshed "\r
+                                       // + propertiesFile.getParent());\r
+                               }\r
+                       } catch (CoreException e) {\r
+                               e.printStackTrace();\r
+                       }\r
+\r
+               }\r
+\r
+       }\r
+\r
+}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/SlcMainPreferencePage.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/SlcMainPreferencePage.java
new file mode 100644 (file)
index 0000000..d091715
--- /dev/null
@@ -0,0 +1,26 @@
+package org.argeo.slc.ide.ui;\r
+\r
+import org.eclipse.jface.preference.FieldEditorPreferencePage;\r
+import org.eclipse.ui.IWorkbench;\r
+import org.eclipse.ui.IWorkbenchPreferencePage;\r
+\r
+public class SlcMainPreferencePage extends FieldEditorPreferencePage implements\r
+               IWorkbenchPreferencePage {\r
+       public SlcMainPreferencePage() {\r
+//             IPreferenceStore store = SlcIdePlugin.getDefault().getPreferenceStore();\r
+//             setPreferenceStore(store);\r
+               setDescription("Argeo SLC Preferences");\r
+       }\r
+\r
+       @Override\r
+       protected void createFieldEditors() {\r
+//             addField(new DirectoryFieldEditor(PREF_SLC_RUNTIME_LOCATION,\r
+//                             "SLC Runtime", getFieldEditorParent()));\r
+//             addField(new DirectoryFieldEditor(PREF_EMBEDDED_JAVA_LIBRARY_PATH,\r
+//                             "Embedded Java Library Path", getFieldEditorParent()));\r
+       }\r
+\r
+       public void init(IWorkbench workbench) {\r
+       }\r
+\r
+}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/SlcPerspectiveFactory.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/SlcPerspectiveFactory.java
new file mode 100644 (file)
index 0000000..297a919
--- /dev/null
@@ -0,0 +1,25 @@
+package org.argeo.slc.ide.ui;\r
+\r
+import org.eclipse.ui.IFolderLayout;\r
+import org.eclipse.ui.IPageLayout;\r
+import org.eclipse.ui.IPerspectiveFactory;\r
+\r
+public class SlcPerspectiveFactory implements IPerspectiveFactory {\r
+\r
+       public void createInitialLayout(IPageLayout layout) {\r
+               // Get the editor area.\r
+               String editorArea = layout.getEditorArea();\r
+\r
+               IFolderLayout topLeft = layout.createFolder("topLeft", IPageLayout.LEFT, 0.25f,\r
+                       editorArea);\r
+//             topLeft.addView(JavaUI.ID_PACKAGES);\r
+\r
+               IFolderLayout bottom = layout.createFolder("bottom", IPageLayout.BOTTOM, 0.66f,\r
+                               editorArea);\r
+//             bottom.addView(IConsoleConstants.ID_CONSOLE_VIEW);\r
+               bottom.addView(IPageLayout.ID_TASK_LIST);\r
+               \r
+               layout.addActionSet("org.eclipse.debug.ui.launchActionSet");\r
+       }\r
+\r
+}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/SlcSystem.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/SlcSystem.java
new file mode 100644 (file)
index 0000000..ff797c6
--- /dev/null
@@ -0,0 +1,10 @@
+package org.argeo.slc.ide.ui;\r
+\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.jdt.launching.IVMInstall;\r
+\r
+public interface SlcSystem {\r
+       public String[] getClasspath() throws CoreException;\r
+       public String getJavaLibraryPath();\r
+       public IVMInstall getVmInstall() throws CoreException;\r
+}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLaunchConfiguration.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLaunchConfiguration.java
new file mode 100644 (file)
index 0000000..d03b90a
--- /dev/null
@@ -0,0 +1,42 @@
+package org.argeo.slc.ide.ui.launch.osgi;
+
+import org.argeo.slc.ide.ui.SlcIdeUiPlugin;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.pde.launching.EclipseApplicationLaunchConfiguration;
+
+/** OSGiBoot launch configuration. */
+public class EclipseBootLaunchConfiguration extends
+               EclipseApplicationLaunchConfiguration {
+       public final static String ID = SlcIdeUiPlugin.ID + ".EclipseBootLauncher";
+
+       @Override
+       public void launch(ILaunchConfiguration configuration, String mode,
+                       ILaunch launch, IProgressMonitor monitor) throws CoreException {
+               super.launch(configuration, mode, launch, monitor);
+               // Refresh resources before launching
+               final IFile propertiesFile = (IFile) configuration.getMappedResources()[0];
+               propertiesFile.getParent().refreshLocal(IResource.DEPTH_INFINITE,
+                               monitor);
+       }
+
+       @Override
+       protected void preLaunchCheck(ILaunchConfiguration configuration,
+                       ILaunch launch, IProgressMonitor monitor) throws CoreException {
+               ILaunchConfigurationWorkingCopy wc = configuration.getWorkingCopy();
+               OsgiLaunchHelper.updateLaunchConfiguration(wc, true);
+               wc.doSave();
+
+               super.preLaunchCheck(configuration, launch, monitor);
+
+               // Note that if a Java project contains a build.properties it has to
+               // declare the sources otherwise it will be skipped in the generation of
+               // the dev.properties file!
+       }
+
+}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLaunchShortcut.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLaunchShortcut.java
new file mode 100644 (file)
index 0000000..aa7f861
--- /dev/null
@@ -0,0 +1,72 @@
+package org.argeo.slc.ide.ui.launch.osgi;
+
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationType;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.pde.ui.launcher.EclipseLaunchShortcut;
+
+/**
+ * Launch shortcut simplifying the launch of an Eclipse application (typically
+ * an RCP).
+ */
+public class EclipseBootLaunchShortcut extends EclipseLaunchShortcut implements
+               OsgiLauncherConstants {
+       private StringBuffer name = null;
+       private IFile propertiesFile = null;
+
+       @Override
+       protected String getLaunchConfigurationTypeName() {
+               return EclipseBootLaunchConfiguration.ID;
+       }
+
+       @Override
+       public void launch(ISelection selection, String mode) {
+               // we assume that only one file is selected
+               IStructuredSelection sSelection = (IStructuredSelection) selection;
+               Iterator<?> it = sSelection.iterator();
+               propertiesFile = (IFile) it.next();
+
+               name = new StringBuffer(OsgiLaunchHelper.extractName(propertiesFile));
+
+               super.launch(selection, mode);
+       }
+
+       @Override
+       protected void initializeConfiguration(ILaunchConfigurationWorkingCopy wc) {
+               IResource[] resources = { propertiesFile };
+               wc.setMappedResources(resources);
+               super.initializeConfiguration(wc);
+
+               OsgiLaunchHelper.setDefaults(wc, true);
+               wc.setAttribute(
+                               IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY,
+                               OsgiLaunchHelper.findWorkingDirectory(propertiesFile));
+
+               OsgiLaunchHelper.updateLaunchConfiguration(wc, true);
+       }
+
+       protected String getName(ILaunchConfigurationType type) {
+               if (name != null && !name.toString().trim().equals(""))
+                       return DebugPlugin.getDefault().getLaunchManager()
+                                       .generateLaunchConfigurationName(name.toString());
+               else
+                       return DebugPlugin.getDefault().getLaunchManager()
+                                       .generateLaunchConfigurationName("SLC");
+       }
+
+       @Override
+       protected boolean isGoodMatch(ILaunchConfiguration configuration) {
+               if (name != null) {
+                       return name.toString().equals(configuration.getName());
+               }
+               return super.isGoodMatch(configuration);
+       }
+}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLauncherTabGroup.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/EclipseBootLauncherTabGroup.java
new file mode 100644 (file)
index 0000000..53794ed
--- /dev/null
@@ -0,0 +1,50 @@
+package org.argeo.slc.ide.ui.launch.osgi;
+
+import org.eclipse.debug.ui.CommonTab;
+import org.eclipse.debug.ui.EnvironmentTab;
+import org.eclipse.debug.ui.ILaunchConfigurationDialog;
+import org.eclipse.debug.ui.ILaunchConfigurationTab;
+import org.eclipse.pde.ui.launcher.EclipseLauncherTabGroup;
+import org.eclipse.pde.ui.launcher.MainTab;
+import org.eclipse.pde.ui.launcher.OSGiSettingsTab;
+import org.eclipse.pde.ui.launcher.PluginsTab;
+import org.eclipse.pde.ui.launcher.TracingTab;
+
+/** Definition of the set of tabs used in Eclipse Boot launch configuration UI. */
+public class EclipseBootLauncherTabGroup extends EclipseLauncherTabGroup {
+
+       @Override
+       public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
+               ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] {
+                               new OsgiBootMainTab(true),
+                               new MainTab(),
+                               new PluginsTab(),
+                               // new PluginsTab() {
+                               // private boolean activating = false;
+                               //
+                               // @Override
+                               // public void performApply(
+                               // ILaunchConfigurationWorkingCopy config) {
+                               // super.performApply(config);
+                               // if (activating) {
+                               // try {
+                               // config.doSave();
+                               // } catch (CoreException e) {
+                               // e.printStackTrace();
+                               // }
+                               // activating = false;
+                               // }
+                               // }
+                               //
+                               // @Override
+                               // public void activated(
+                               // ILaunchConfigurationWorkingCopy workingCopy) {
+                               // activating = true;
+                               // }
+                               // },
+                               new OSGiSettingsTab(), new EnvironmentTab(), new TracingTab(),
+                               new CommonTab() };
+               setTabs(tabs);
+       }
+
+}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiBootEquinoxLaunchConfiguration.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiBootEquinoxLaunchConfiguration.java
new file mode 100644 (file)
index 0000000..19cdee1
--- /dev/null
@@ -0,0 +1,55 @@
+package org.argeo.slc.ide.ui.launch.osgi;
+
+import org.argeo.slc.ide.ui.SlcIdeUiPlugin;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.pde.launching.EquinoxLaunchConfiguration;
+
+/** OSGiBoot launch configuration. */
+public class OsgiBootEquinoxLaunchConfiguration extends
+               EquinoxLaunchConfiguration {
+       public final static String ID = SlcIdeUiPlugin.ID
+                       + ".OsgiBootEquinoxLauncher";
+
+       @Override
+       public void launch(ILaunchConfiguration configuration, String mode,
+                       ILaunch launch, IProgressMonitor monitor) throws CoreException {
+               super.launch(configuration, mode, launch, monitor);
+
+//             System.out.println("targetBundles="
+//                             + configuration.getAttribute(
+//                                             IPDELauncherConstants.TARGET_BUNDLES, ""));
+//             System.out.println("workspaceBundles="
+//                             + configuration.getAttribute(
+//                                             IPDELauncherConstants.WORKSPACE_BUNDLES, ""));
+
+               // Refresh resources before launching
+               final IFile propertiesFile = (IFile) configuration.getMappedResources()[0];
+               propertiesFile.getParent().refreshLocal(IResource.DEPTH_INFINITE,
+                               monitor);
+       }
+
+       @Override
+       protected void preLaunchCheck(ILaunchConfiguration configuration,
+                       ILaunch launch, IProgressMonitor monitor) throws CoreException {
+               // System.out.println("Launching... " + launch);
+               ILaunchConfigurationWorkingCopy wc = configuration.getWorkingCopy();
+               OsgiLaunchHelper.updateLaunchConfiguration(wc, false);
+               wc.doSave();
+               super.preLaunchCheck(configuration, launch, monitor);
+
+               // Note that if a Java project contains a build.properties it has to
+               // declare the sources otherwise it will be skipped in the generation of
+               // the dev.properties file!
+
+               // for(Object bundleId:fAllBundles.keySet()){
+               // System.out.println(bundleId+"="+fAllBundles.get(bundleId));
+               // }
+       }
+
+}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiBootLaunchShortcut.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiBootLaunchShortcut.java
new file mode 100644 (file)
index 0000000..b73b612
--- /dev/null
@@ -0,0 +1,71 @@
+package org.argeo.slc.ide.ui.launch.osgi;
+
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationType;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.pde.ui.launcher.OSGiLaunchShortcut;
+
+/** Launch shortcut simplifying the launch of a pure OSGi runtime */
+public class OsgiBootLaunchShortcut extends OSGiLaunchShortcut implements
+               OsgiLauncherConstants {
+       private StringBuffer name = null;
+       private IFile propertiesFile = null;
+
+       @Override
+       protected String getLaunchConfigurationTypeName() {
+               return OsgiBootEquinoxLaunchConfiguration.ID;
+       }
+
+       @Override
+       public void launch(ISelection selection, String mode) {
+               // we assume that only one file is selected
+               IStructuredSelection sSelection = (IStructuredSelection) selection;
+               Iterator<?> it = sSelection.iterator();
+               propertiesFile = (IFile) it.next();
+
+               name = new StringBuffer(OsgiLaunchHelper.extractName(propertiesFile));
+
+               super.launch(selection, mode);
+       }
+
+       @Override
+       protected void initializeConfiguration(ILaunchConfigurationWorkingCopy wc) {
+               IResource[] resources = { propertiesFile };
+               wc.setMappedResources(resources);
+               super.initializeConfiguration(wc);
+
+               OsgiLaunchHelper.setDefaults(wc, true);
+
+               wc.setAttribute(
+                               IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY,
+                               OsgiLaunchHelper.findWorkingDirectory(propertiesFile));
+
+               OsgiLaunchHelper.updateLaunchConfiguration(wc, false);
+       }
+
+       protected String getName(ILaunchConfigurationType type) {
+               if (name != null && !name.toString().trim().equals(""))
+                       return DebugPlugin.getDefault().getLaunchManager()
+                                       .generateLaunchConfigurationName(name.toString());
+               else
+                       return DebugPlugin.getDefault().getLaunchManager()
+                                       .generateLaunchConfigurationName("SLC");
+       }
+
+       @Override
+       protected boolean isGoodMatch(ILaunchConfiguration configuration) {
+               if (name != null) {
+                       return name.toString().equals(configuration.getName());
+               }
+               return super.isGoodMatch(configuration);
+       }
+
+}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiBootLauncherTabGroup.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiBootLauncherTabGroup.java
new file mode 100644 (file)
index 0000000..837a7c3
--- /dev/null
@@ -0,0 +1,46 @@
+package org.argeo.slc.ide.ui.launch.osgi;
+
+import org.eclipse.debug.ui.CommonTab;
+import org.eclipse.debug.ui.EnvironmentTab;
+import org.eclipse.debug.ui.ILaunchConfigurationDialog;
+import org.eclipse.debug.ui.ILaunchConfigurationTab;
+import org.eclipse.pde.ui.launcher.BundlesTab;
+import org.eclipse.pde.ui.launcher.OSGiLauncherTabGroup;
+import org.eclipse.pde.ui.launcher.OSGiSettingsTab;
+import org.eclipse.pde.ui.launcher.TracingTab;
+
+/** Definition of the set of tabs used in OSGi Boot launch configuration UI. */
+public class OsgiBootLauncherTabGroup extends OSGiLauncherTabGroup {
+
+       @Override
+       public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
+               ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] {
+                               new OsgiBootMainTab(false),
+                               new BundlesTab() {
+//                                     private boolean activating = false;
+//
+//                                     @Override
+//                                     public void performApply(
+//                                                     ILaunchConfigurationWorkingCopy config) {
+//                                             super.performApply(config);
+//                                             if (activating) {
+//                                                     try {
+//                                                             config.doSave();
+//                                                     } catch (CoreException e) {
+//                                                             e.printStackTrace();
+//                                                     }
+//                                                     activating = false;
+//                                             }
+//                                     }
+//
+//                                     @Override
+//                                     public void activated(
+//                                                     ILaunchConfigurationWorkingCopy workingCopy) {
+//                                             activating = true;
+//                                     }
+                               }, new OSGiSettingsTab(), new EnvironmentTab(),
+                               new TracingTab(), new CommonTab() };
+               setTabs(tabs);
+       }
+
+}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiBootMainTab.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiBootMainTab.java
new file mode 100644 (file)
index 0000000..0bd5331
--- /dev/null
@@ -0,0 +1,268 @@
+package org.argeo.slc.ide.ui.launch.osgi;
+
+import org.argeo.slc.ide.ui.SlcIdeUiPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/** Main tab of OSGiBoot launch configuration UI. */
+public class OsgiBootMainTab extends AbstractLaunchConfigurationTab implements
+               OsgiLauncherConstants {
+       private Listener listener = new Listener();
+
+       private Button syncBundles;
+       private Button clearDataDirectory;
+
+       private Button addJvmPaths;
+       private Text additionalVmArgs;
+
+       private Text additionalProgramArgs;
+
+       // private final Boolean isEclipse;
+
+       public OsgiBootMainTab(Boolean isEclipse) {
+               super();
+               // this.isEclipse = isEclipse;
+       }
+
+       public void createControl(Composite parent) {
+               Composite container = new Composite(parent, SWT.NONE);
+               container.setLayout(new GridLayout());
+               container.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+               createAdditionalProgramArgs(container);
+               createAdditionalVmArgumentBlock(container);
+               createAdvanced(container);
+               Dialog.applyDialogFont(container);
+               setControl(container);
+       }
+
+       /** Init UI for programs arguments */
+       protected void createAdditionalProgramArgs(Composite parent) {
+               Group container = new Group(parent, SWT.NONE);
+               container.setText("Additional Program Arguments");
+               GridLayout layout = new GridLayout();
+               layout.numColumns = 2;
+               container.setLayout(layout);
+               container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               additionalProgramArgs = new Text(container, SWT.MULTI | SWT.WRAP
+                               | SWT.BORDER | SWT.V_SCROLL);
+               GridData gd = new GridData(GridData.FILL_BOTH);
+               gd.heightHint = 60;
+               gd.widthHint = 100;
+               gd.horizontalSpan = 2;
+               additionalProgramArgs.setLayoutData(gd);
+               additionalProgramArgs.addModifyListener(listener);
+       }
+
+       /** Init UI for VM arguments */
+       protected void createAdditionalVmArgumentBlock(Composite parent) {
+               Group container = new Group(parent, SWT.NONE);
+               container.setText("Additional VM Arguments");
+               GridLayout layout = new GridLayout();
+               layout.numColumns = 2;
+               container.setLayout(layout);
+               container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               additionalVmArgs = new Text(container, SWT.MULTI | SWT.WRAP
+                               | SWT.BORDER | SWT.V_SCROLL);
+               GridData gd = new GridData(GridData.FILL_BOTH);
+               gd.heightHint = 60;
+               gd.widthHint = 100;
+               gd.horizontalSpan = 2;
+               additionalVmArgs.setLayoutData(gd);
+               additionalVmArgs.addModifyListener(listener);
+
+       }
+
+       /** Init UI for Advanced section */
+       protected void createAdvanced(Composite parent) {
+               Group container = new Group(parent, SWT.NONE);
+               container.setText("Advanced");
+               GridLayout layout = new GridLayout();
+               layout.numColumns = 2;
+               container.setLayout(layout);
+               container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               syncBundles = new Button(container, SWT.CHECK);
+               syncBundles.addSelectionListener(listener);
+               new Label(container, SWT.NONE)
+                               .setText("Keep bundles in line with target platform and workspace (recommended)");
+               clearDataDirectory = new Button(container, SWT.CHECK);
+               clearDataDirectory.addSelectionListener(listener);
+               new Label(container, SWT.NONE)
+                               .setText("Clear data directory before launch");
+
+               addJvmPaths = new Button(container, SWT.CHECK);
+               addJvmPaths.addSelectionListener(listener);
+               new Label(container, SWT.NONE)
+                               .setText("Add workspace JVM paths as non-standard system properties");
+
+       }
+
+       public String getName() {
+               return "OSGi Boot";
+       }
+
+       @Override
+       public Image getImage() {
+               return SlcIdeUiPlugin.getDefault().getImage("icons/slc-launch.gif");
+       }
+
+       public void initializeFrom(ILaunchConfiguration configuration) {
+               // System.out.println("initializeFrom");
+               try {
+                       syncBundles.setSelection(configuration.getAttribute(
+                                       ATTR_SYNC_BUNDLES, true));
+                       clearDataDirectory.setSelection(configuration.getAttribute(
+                                       ATTR_CLEAR_DATA_DIRECTORY, false));
+
+                       additionalProgramArgs.setText(configuration.getAttribute(
+                                       ATTR_ADDITIONAL_PROGRAM_ARGS, ""));
+                       addJvmPaths.setSelection(configuration.getAttribute(
+                                       ATTR_ADD_JVM_PATHS, false));
+                       additionalVmArgs.setText(configuration.getAttribute(
+                                       ATTR_ADDITIONAL_VM_ARGS, ""));
+                       // readProperties(configuration);
+               } catch (CoreException e) {
+                       e.printStackTrace();
+               }
+       }
+
+       public void performApply(ILaunchConfigurationWorkingCopy configuration) {
+               // System.out.println("performApply");
+               configuration.setAttribute(ATTR_SYNC_BUNDLES,
+                               syncBundles.getSelection());
+               configuration.setAttribute(ATTR_CLEAR_DATA_DIRECTORY,
+                               clearDataDirectory.getSelection());
+
+               configuration.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS,
+                               additionalProgramArgs.getText());
+               configuration.setAttribute(ATTR_ADDITIONAL_VM_ARGS,
+                               additionalVmArgs.getText());
+               configuration.setAttribute(ATTR_ADD_JVM_PATHS,
+                               addJvmPaths.getSelection());
+               // writeProperties(configuration);
+
+               // OsgiLaunchHelper.updateLaunchConfiguration(configuration, isEclipse);
+       }
+
+       public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
+               // System.out.println("setDefaults");
+               configuration.setAttribute(ATTR_SYNC_BUNDLES, true);
+               configuration.setAttribute(ATTR_CLEAR_DATA_DIRECTORY, false);
+               configuration.setAttribute(ATTR_ADD_JVM_PATHS, false);
+               configuration.setAttribute(ATTR_ADDITIONAL_VM_ARGS, "-Xmx128m");
+               configuration.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS, "-console");
+       }
+
+       @Override
+       public void activated(ILaunchConfigurationWorkingCopy workingCopy) {
+               initializeFrom(workingCopy);
+               try {
+                       workingCopy.doSave();
+               } catch (CoreException e) {
+                       e.printStackTrace();
+               }
+       }
+
+       @Override
+       public void deactivated(ILaunchConfigurationWorkingCopy workingCopy) {
+               // do nothing
+       }
+
+       class Listener extends SelectionAdapter implements ModifyListener {
+               public void widgetSelected(SelectionEvent e) {
+                       // Object source = e.getSource();
+                       // setDirty(true);
+                       updateLaunchConfigurationDialog();
+               }
+
+               public void modifyText(ModifyEvent e) {
+                       // System.out.println("modifyText : " + e);
+                       // setDirty(true);
+                       updateLaunchConfigurationDialog();
+               }
+       }
+
+       // private void readProperties(ILaunchConfiguration configuration) {
+       // BufferedReader reader = null;
+       // try {
+       // IFile propertiesFile = (IFile) configuration.getMappedResources()[0];
+       // propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
+       // reader = new BufferedReader(new InputStreamReader(propertiesFile
+       // .getContents()));
+       // String line = null;
+       // StringBuffer buf = new StringBuffer("");
+       // while ((line = reader.readLine()) != null) {
+       // buf.append(line);
+       // buf.append("\n");
+       // }
+       // propertiesText.setText(buf.toString());
+       // } catch (CoreException e) {
+       // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
+       // "Error", "Cannot read properties", e.getStatus());
+       // return;
+       // } catch (Exception e) {
+       // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
+       // "Error", "Cannot read properties",
+       // new Status(IStatus.ERROR, SlcIdeUiPlugin.ID,
+       // e.getMessage(), e));
+       // return;
+       // } finally {
+       // if (reader != null)
+       // try {
+       // reader.close();
+       // } catch (IOException e) {
+       // // silent
+       // }
+       // }
+       //
+       // }
+       //
+       // private void writeProperties(ILaunchConfiguration configuration) {
+       // InputStream in = null;
+       // IFile propertiesFile = null;
+       // try {
+       // propertiesFile = (IFile) configuration.getMappedResources()[0];
+       // in = new ByteArrayInputStream(propertiesText.getText().getBytes());
+       // propertiesFile.setContents(in, true, true, null);
+       // propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
+       // } catch (CoreException e) {
+       // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
+       // "Error", "Cannot write properties", e.getStatus());
+       // return;
+       // } catch (Exception e) {
+       // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
+       // "Error", "Cannot write properties",
+       // new Status(IStatus.ERROR, SlcIdeUiPlugin.ID,
+       // e.getMessage(), e));
+       // return;
+       // } finally {
+       // if (in != null)
+       // try {
+       // in.close();
+       // } catch (IOException e) {
+       // // silent
+       // }
+       // }
+       //
+       // }
+
+}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiLaunchHelper.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiLaunchHelper.java
new file mode 100644 (file)
index 0000000..f99e1b3
--- /dev/null
@@ -0,0 +1,620 @@
+package org.argeo.slc.ide.ui.launch.osgi;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import org.argeo.slc.ide.ui.SlcIdeUiPlugin;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.variables.IStringVariableManager;
+import org.eclipse.core.variables.VariablesPlugin;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.IVMInstall2;
+import org.eclipse.jdt.launching.IVMInstallType;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.plugin.PluginRegistry;
+import org.eclipse.pde.launching.IPDELauncherConstants;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Most of the actual logic is concentrated in this class which manipulates
+ * {@link ILaunchConfigurationWorkingCopy}. Static method are used since the
+ * shortcut and launch configuration classes are already extending PDE classes.
+ */
+@SuppressWarnings("restriction")
+public class OsgiLaunchHelper implements OsgiLauncherConstants {
+       private static Boolean debug = true;
+
+       private final static String DEFAULT_DATA_DIR = "data";
+       private final static String DEFAULT_EXEC_DIR = "exec";
+       private final static String DEFAULT_VMARGS = "-Xmx256m";
+       private final static String DEFAULT_PROGRAM_ARGS = "-console";
+
+       /** Sets default values on this configuration. */
+       public static void setDefaults(ILaunchConfigurationWorkingCopy wc,
+                       Boolean isEclipse) {
+               try {
+                       if (isEclipse) {
+                               wc.setAttribute(IPDELauncherConstants.USE_DEFAULT, false);
+                               wc.setAttribute(IPDELauncherConstants.USE_PRODUCT, false);
+                       }
+
+                       wc.setAttribute(ATTR_ADD_JVM_PATHS, false);
+                       wc.setAttribute(ATTR_ADDITIONAL_VM_ARGS, DEFAULT_VMARGS);
+                       wc.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS, DEFAULT_PROGRAM_ARGS);
+
+                       // Defaults
+                       String originalVmArgs = wc.getAttribute(
+                                       IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, "");
+                       wc.setAttribute(ATTR_DEFAULT_VM_ARGS, originalVmArgs);
+
+                       // clear config area by default
+                       wc.setAttribute(IPDELauncherConstants.CONFIG_CLEAR_AREA, true);
+               } catch (CoreException e) {
+                       Shell shell = Display.getCurrent().getActiveShell();
+                       ErrorDialog.openError(shell, "Error",
+                                       "Cannot execute initalize configuration", e.getStatus());
+               }
+       }
+
+       /** Find the working directory based on this properties file. */
+       public static String findWorkingDirectory(IFile propertiesFile) {
+               try {
+                       IProject project = propertiesFile.getProject();
+                       IPath parent = propertiesFile.getProjectRelativePath()
+                                       .removeLastSegments(1);
+                       IFolder execFolder = project.getFolder(parent
+                                       .append(DEFAULT_EXEC_DIR));
+                       if (!execFolder.exists())
+                               execFolder.create(true, true, null);
+                       IFolder launchFolder = project.getFolder(execFolder
+                                       .getProjectRelativePath().append(
+                                                       extractName(propertiesFile)));
+                       if (!launchFolder.exists())
+                               launchFolder.create(true, true, null);
+                       return "${workspace_loc:"
+                                       + launchFolder.getFullPath().toString().substring(1) + "}";
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       throw new RuntimeException("Cannot create working directory", e);
+               }
+       }
+
+       /** Extract the launch configuration name from the properties file. */
+       public static String extractName(IFile propertiesFile) {
+               IPath path = propertiesFile.getFullPath();
+               IPath pathNoExt = path.removeFileExtension();
+               return pathNoExt.segment(pathNoExt.segmentCount() - 1);
+
+       }
+
+       /** Expects properties file to be set as mapped resources */
+       @SuppressWarnings("unchecked")
+       public static void updateLaunchConfiguration(
+                       ILaunchConfigurationWorkingCopy wc, Boolean isEclipse) {
+               try {
+                       if (debug)
+                               debug("##\n## Launch " + wc.getName() + " - " + new Date()
+                                               + "\n##");
+
+                       // Finds the properties file and load it
+                       IFile propertiesFile = (IFile) wc.getMappedResources()[0];
+                       propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
+                       Properties properties = readProperties(propertiesFile);
+
+                       // Extract information from the properties file
+                       Map<String, Integer> bundlesToStart = new TreeMap<String, Integer>();
+                       Map<String, String> systemPropertiesToAppend = new HashMap<String, String>();
+                       String applicationId = interpretProperties(properties,
+                                       bundlesToStart, systemPropertiesToAppend);
+
+                       if (applicationId != null)
+                               wc.setAttribute(IPDELauncherConstants.APPLICATION,
+                                               applicationId);
+                       else {
+                               if (isEclipse)
+                                       throw new Exception("No application defined,"
+                                                       + " please set the 'eclipse.application' property"
+                                                       + " in the properties file");
+                       }
+
+                       // Define directories
+                       File workingDir = getWorkingDirectory(wc);
+                       File dataDir = new File(workingDir, DEFAULT_DATA_DIR);
+
+                       // Update the launch configuration accordingly
+                       updateLaunchConfiguration(wc, bundlesToStart,
+                                       systemPropertiesToAppend, dataDir.getAbsolutePath(),
+                                       isEclipse);
+
+                       if (debug) {
+                               Map<String, ?> attrs = new TreeMap<String, Object>(
+                                               wc.getAttributes());
+                               for (String key : attrs.keySet())
+                                       OsgiLaunchHelper.debug(key + "=" + attrs.get(key));
+                       }
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       Shell shell = SlcIdeUiPlugin.getDefault().getWorkbench()
+                                       .getActiveWorkbenchWindow().getShell();
+                       // Shell shell= Display.getCurrent().getActiveShell();
+                       ErrorDialog.openError(shell, "Error",
+                                       "Cannot prepare launch configuration",
+                                       new Status(IStatus.ERROR, SlcIdeUiPlugin.ID,
+                                                       e.getMessage(), e));
+                       return;
+               }
+       }
+
+       /**
+        * Actually modifies the launch configuration in order to reflect the
+        * current state read from the properties file and the launch configuration
+        * UI.
+        */
+       protected static void updateLaunchConfiguration(
+                       ILaunchConfigurationWorkingCopy wc,
+                       Map<String, Integer> bundlesToStart,
+                       Map<String, String> systemPropertiesToAppend, String dataDir,
+                       Boolean isEclipse) throws CoreException {
+               // Convert bundle lists
+               final String targetBundles;
+               final String wkSpaceBundles;
+               if (wc.getAttribute(ATTR_SYNC_BUNDLES, true)) {
+                       StringBuffer tBuf = new StringBuffer();
+                       for (IPluginModelBase model : PluginRegistry.getExternalModels()) {
+                               tBuf.append(model.getBundleDescription().getSymbolicName());
+                               tBuf.append(',');
+                       }
+                       targetBundles = tBuf.toString();
+                       StringBuffer wBuf = new StringBuffer();
+                       models: for (IPluginModelBase model : PluginRegistry
+                                       .getWorkspaceModels()) {
+                               if (model.getBundleDescription() == null) {
+                                       System.err.println("No bundle description for " + model);
+                                       continue models;
+                               }
+                               wBuf.append(model.getBundleDescription().getSymbolicName());
+                               wBuf.append(',');
+                       }
+                       wkSpaceBundles = wBuf.toString();
+               } else {
+                       targetBundles = wc.getAttribute(targetBundlesAttr(isEclipse), "");
+                       wkSpaceBundles = wc.getAttribute(workspaceBundlesAttr(isEclipse),
+                                       "");
+               }
+               wc.setAttribute(targetBundlesAttr(isEclipse),
+                               convertBundleList(bundlesToStart, targetBundles));
+
+               wc.setAttribute(workspaceBundlesAttr(isEclipse),
+                               convertBundleList(bundlesToStart, wkSpaceBundles));
+
+               // Update other default information
+               wc.setAttribute(IPDELauncherConstants.DEFAULT_AUTO_START, false);
+
+               wc.setAttribute(IPDELauncherConstants.USE_CUSTOM_FEATURES, false);
+               if (!isEclipse)
+                       wc.setAttribute(IPDELauncherConstants.USE_DEFAULT, true);
+
+               // VM arguments (system properties)
+               String defaultVmArgs = wc.getAttribute(
+                               OsgiLauncherConstants.ATTR_DEFAULT_VM_ARGS, "");
+               StringBuffer vmArgs = new StringBuffer(defaultVmArgs);
+
+               // Data dir system property
+               if (dataDir != null) {
+                       addSysProperty(vmArgs, OsgiLauncherConstants.ARGEO_OSGI_DATA_DIR,
+                                       dataDir);
+                       if (isEclipse) {
+                               wc.setAttribute(IPDELauncherConstants.LOCATION, dataDir);
+                       }
+               }
+
+               // Add locations of JVMs
+               if (wc.getAttribute(ATTR_ADD_JVM_PATHS, false))
+                       addVms(vmArgs);
+
+               // Add other system properties
+               for (String key : systemPropertiesToAppend.keySet())
+                       addSysProperty(vmArgs, key, systemPropertiesToAppend.get(key));
+
+               vmArgs.append(" ").append(wc.getAttribute(ATTR_ADDITIONAL_VM_ARGS, ""));
+
+               wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS,
+                               vmArgs.toString());
+
+               // Program arguments
+               StringBuffer progArgs = new StringBuffer("");
+               if (dataDir != null) {
+                       progArgs.append("-data ");
+                       progArgs.append(surroundSpaces(dataDir));
+
+                       if (wc.getAttribute(ATTR_CLEAR_DATA_DIRECTORY, false)) {
+                               File dataDirFile = new File(dataDir);
+                               deleteDir(dataDirFile);
+                               dataDirFile.mkdirs();
+                       }
+               }
+               String additionalProgramArgs = wc.getAttribute(
+                               OsgiLauncherConstants.ATTR_ADDITIONAL_PROGRAM_ARGS, "");
+               progArgs.append(' ').append(additionalProgramArgs);
+               wc.setAttribute(
+                               IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS,
+                               progArgs.toString());
+       }
+
+       /** The launch configuration attribute to use for target bundles */
+       protected static String targetBundlesAttr(Boolean isEclipse) {
+               return isEclipse ? IPDELauncherConstants.SELECTED_TARGET_PLUGINS
+                               : IPDELauncherConstants.TARGET_BUNDLES;
+       }
+
+       /** The launch configuration attribute to use for workspace bundles */
+       protected static String workspaceBundlesAttr(Boolean isEclipse) {
+               return isEclipse ? IPDELauncherConstants.SELECTED_WORKSPACE_PLUGINS
+                               : IPDELauncherConstants.WORKSPACE_BUNDLES;
+       }
+
+       /**
+        * Interprets special properties and register the others as system
+        * properties to append.
+        * 
+        * @return the application id defined by
+        *         {@link OsgiLauncherConstants#ECLIPSE_APPLICATION}, or null if not
+        *         found
+        */
+       protected static String interpretProperties(Properties properties,
+                       Map<String, Integer> bundlesToStart,
+                       Map<String, String> systemPropertiesToAppend) {
+               computeBundlesToStart(bundlesToStart, properties, null);
+
+               String applicationId = null;
+               propKeys: for (Object keyObj : properties.keySet()) {
+                       String key = keyObj.toString();
+                       if (OsgiLauncherConstants.ARGEO_OSGI_START.equals(key))
+                               continue propKeys;
+                       if (key.startsWith(OsgiLauncherConstants.ARGEO_OSGI_START + "."))
+                               continue propKeys;
+                       else if (OsgiLauncherConstants.ARGEO_OSGI_BUNDLES.equals(key))
+                               continue propKeys;
+                       else if (OsgiLauncherConstants.ARGEO_OSGI_LOCATIONS.equals(key))
+                               continue propKeys;
+                       else if (OsgiLauncherConstants.OSGI_BUNDLES.equals(key))
+                               continue propKeys;
+                       else if (OsgiLauncherConstants.ECLIPSE_APPLICATION.equals(key))
+                               applicationId = properties.getProperty(key);
+                       else
+                               systemPropertiesToAppend.put(key, properties.getProperty(key));
+               }
+               return applicationId;
+       }
+
+       /** Adds a regular system property. */
+       protected static void addSysProperty(StringBuffer vmArgs, String key,
+                       String value) {
+               surroundSpaces(value);
+               String str = "-D" + key + "=" + value;
+               vmArgs.append(' ').append(str);
+       }
+
+       /** Adds JVMS registered in the workspace as special system properties. */
+       protected static void addVms(StringBuffer vmArgs) {
+               addVmSysProperty(vmArgs, "default", JavaRuntime.getDefaultVMInstall());
+               IVMInstallType[] vmTypes = JavaRuntime.getVMInstallTypes();
+               for (IVMInstallType vmType : vmTypes) {
+                       for (IVMInstall vmInstall : vmType.getVMInstalls()) {
+                               // properties based on name
+                               addVmSysProperty(vmArgs, vmInstall.getName(), vmInstall);
+                               if (vmInstall instanceof IVMInstall2) {
+                                       // properties based on version
+                                       IVMInstall2 vmInstall2 = (IVMInstall2) vmInstall;
+                                       String version = vmInstall2.getJavaVersion();
+                                       addVmSysProperty(vmArgs, version, vmInstall);
+
+                                       List<String> tokens = new ArrayList<String>();
+                                       StringTokenizer st = new StringTokenizer(version, ".");
+                                       while (st.hasMoreTokens())
+                                               tokens.add(st.nextToken());
+                                       if (tokens.size() >= 2)
+                                               addVmSysProperty(vmArgs,
+                                                               tokens.get(0) + "." + tokens.get(1), vmInstall);
+                               }
+                       }
+               }
+
+       }
+
+       /** Adds a special system property pointing to one of the registered JVMs. */
+       protected static void addVmSysProperty(StringBuffer vmArgs, String suffix,
+                       IVMInstall vmInstall) {
+               addSysProperty(vmArgs, OsgiLauncherConstants.VMS_PROPERTY_PREFIX + "."
+                               + suffix, vmInstall.getInstallLocation().getPath());
+       }
+
+       /** Surround the string with quotes if it contains spaces. */
+       protected static String surroundSpaces(String str) {
+               if (str.indexOf(' ') >= 0)
+                       return '\"' + str + '\"';
+               else
+                       return str;
+       }
+
+       /**
+        * Reformat the bundle list in order to reflect which bundles have to be
+        * started.
+        */
+       protected static String convertBundleList(
+                       Map<String, Integer> bundlesToStart, String original) {
+               StringTokenizer stComa = new StringTokenizer(original, ",");
+               // sort by bundle symbolic name
+               Set<String> bundleIds = new TreeSet<String>();
+               bundles: while (stComa.hasMoreTokens()) {
+
+                       String bundleId = stComa.nextToken();
+                       if (bundleId.indexOf('*') >= 0)
+                               throw new RuntimeException(
+                                               "Bundle id "
+                                                               + bundleId
+                                                               + " not properly formatted, clean your workspace projects");
+
+                       int indexAt = bundleId.indexOf('@');
+                       if (indexAt >= 0) {
+                               bundleId = bundleId.substring(0, indexAt);
+                       }
+
+                       // We can now rely on bundleId value
+
+                       if (bundleId.endsWith(".source")) {
+                               // debug("Skip source bundle " + bundleId);
+                               continue bundles;
+                       } else if (bundleId
+                                       .equals("org.eclipse.equinox.simpleconfigurator")) {
+                               // IPDEBuildConstants.BUNDLE_SIMPLE_CONFIGURATOR
+                               // skip simple configurator in order to avoid side-effects
+                               continue bundles;
+                       }
+                       bundleIds.add(bundleId);
+               }
+
+               StringBuffer bufBundles = new StringBuffer(1024);
+               boolean first = true;
+               for (String bundleId : bundleIds) {
+                       if (first)
+                               first = false;
+                       else
+                               bufBundles.append(',');
+                       boolean modified = false;
+                       if (bundlesToStart.containsKey(bundleId)) {
+                               Integer startLevel = bundlesToStart.get(bundleId);
+                               String startLevelStr = startLevel != null ? startLevel
+                                               .toString() : "default";
+                               bufBundles.append(bundleId).append('@').append(startLevelStr)
+                                               .append(":true");
+                               modified = true;
+                               debug("Will start " + bundleId + " at level " + startLevelStr);
+                       }
+
+                       if (!modified)
+                               bufBundles.append(bundleId);
+
+               }
+               String output = bufBundles.toString();
+               return output;
+       }
+
+       // UTILITIES
+       /** Recursively deletes a directory tree. */
+       private static void deleteDir(File dir) {
+               File[] files = dir.listFiles();
+               for (File file : files) {
+                       if (file.isDirectory())
+                               deleteDir(file);
+                       else
+                               file.delete();
+               }
+               dir.delete();
+       }
+
+       /** Loads a properties file. */
+       private static Properties readProperties(IFile file) throws CoreException {
+               Properties props = new Properties();
+
+               InputStream in = null;
+               try {
+                       in = file.getContents();
+                       props.load(in);
+               } catch (Exception e) {
+                       throw new CoreException(new Status(IStatus.ERROR,
+                                       SlcIdeUiPlugin.ID, "Cannot read properties file", e));
+               } finally {
+                       if (in != null)
+                               try {
+                                       in.close();
+                               } catch (IOException e) {
+                                       // silent
+                               }
+               }
+               return props;
+       }
+
+       /** Determines the start levels for the bundles */
+       private static void computeBundlesToStart(
+                       Map<String, Integer> bundlesToStart, Properties properties,
+                       Integer defaultStartLevel) {
+
+               // default (and previously, only behaviour)
+               appendBundlesToStart(bundlesToStart, defaultStartLevel,
+                               properties.getProperty(OsgiLauncherConstants.ARGEO_OSGI_START,
+                                               ""));
+
+               // list argeo.osgi.start.* system properties
+               Iterator<Object> keys = properties.keySet().iterator();
+               final String prefix = OsgiLauncherConstants.ARGEO_OSGI_START + ".";
+               while (keys.hasNext()) {
+                       String key = (String) keys.next();
+                       if (key.startsWith(prefix)) {
+                               Integer startLevel;
+                               String suffix = key.substring(prefix.length());
+                               String[] tokens = suffix.split("\\.");
+                               if (tokens.length > 0 && !tokens[0].trim().equals(""))
+                                       try {
+                                               // first token is start level
+                                               startLevel = new Integer(tokens[0]);
+                                       } catch (NumberFormatException e) {
+                                               startLevel = defaultStartLevel;
+                                       }
+                               else
+                                       startLevel = defaultStartLevel;
+
+                               // append bundle names
+                               String bundleNames = properties.getProperty(key);
+                               appendBundlesToStart(bundlesToStart, startLevel, bundleNames);
+                       }
+               }
+       }
+
+       /** Append a comma-separated list of bundles to the start levels. */
+       private static void appendBundlesToStart(
+                       Map<String, Integer> bundlesToStart, Integer startLevel, String str) {
+               if (str == null || str.trim().equals(""))
+                       return;
+
+               String[] bundleNames = str.split(",");
+               for (int i = 0; i < bundleNames.length; i++) {
+                       if (bundleNames[i] != null && !bundleNames[i].trim().equals(""))
+                               bundlesToStart.put(bundleNames[i], startLevel);
+               }
+       }
+
+       /*
+        * HACKED UTILITIES
+        */
+       // Hacked from
+       // org.eclipse.pde.internal.ui.launcher.LaunchArgumentsHelper.getWorkingDirectory(ILaunchConfiguration)
+       private static File getWorkingDirectory(ILaunchConfiguration configuration)
+                       throws CoreException {
+               String working;
+               try {
+                       working = configuration.getAttribute(
+                                       IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY,
+                                       new File(".").getCanonicalPath()); //$NON-NLS-1$
+               } catch (IOException e) {
+                       working = "${workspace_loc}/../"; //$NON-NLS-1$
+               }
+               File dir;
+               try {
+                       dir = new File(getSubstitutedString(working));
+               } catch (Exception e) {
+                       // the directory was most probably deleted
+                       IFile propertiesFile = (IFile) configuration.getMappedResources()[0];
+                       working = findWorkingDirectory(propertiesFile);
+                       dir = new File(getSubstitutedString(working));
+               }
+               if (!dir.exists())
+                       dir.mkdirs();
+               return dir;
+       }
+
+       // Hacked from
+       // org.eclipse.pde.internal.ui.launcher.LaunchArgumentsHelper.getSubstitutedString(String)
+       private static String getSubstitutedString(String text)
+                       throws CoreException {
+               if (text == null)
+                       return ""; //$NON-NLS-1$
+               IStringVariableManager mgr = VariablesPlugin.getDefault()
+                               .getStringVariableManager();
+               return mgr.performStringSubstitution(text);
+       }
+
+       /**
+        * Not used anymore, but kept because this routine may be useful in the
+        * future.
+        */
+       protected void addSelectedProjects(StringBuffer name, ISelection selection,
+                       List<String> bundlesToStart) {
+               Assert.isNotNull(selection);
+
+               Map<String, IPluginModelBase> bundleProjects = new HashMap<String, IPluginModelBase>();
+               for (IPluginModelBase modelBase : PluginRegistry.getWorkspaceModels()) {
+                       IProject bundleProject = modelBase.getUnderlyingResource()
+                                       .getProject();
+                       bundleProjects.put(bundleProject.getName(), modelBase);
+               }
+
+               IStructuredSelection sSelection = (IStructuredSelection) selection;
+               for (Iterator<?> it = sSelection.iterator(); it.hasNext();) {
+                       Object obj = it.next();
+                       if (obj instanceof IProject) {
+                               IProject project = (IProject) obj;
+                               if (bundleProjects.containsKey(project.getName())) {
+                                       IPluginModelBase modelBase = bundleProjects.get(project
+                                                       .getName());
+
+                                       BundleDescription bundleDescription = null;
+                                       if (modelBase.isFragmentModel()) {
+                                               BundleDescription[] hosts = modelBase
+                                                               .getBundleDescription().getHost().getHosts();
+                                               for (BundleDescription bd : hosts) {
+                                                       if (debug)
+                                                               System.out.println("Host for "
+                                                                               + modelBase.getBundleDescription()
+                                                                                               .getSymbolicName() + ": "
+                                                                               + bd.getSymbolicName());
+                                                       bundleDescription = bd;
+                                               }
+                                       } else {
+                                               bundleDescription = modelBase.getBundleDescription();
+                                       }
+
+                                       if (bundleDescription != null) {
+                                               String symbolicName = bundleDescription
+                                                               .getSymbolicName();
+                                               String bundleName = bundleDescription.getName();
+
+                                               bundlesToStart.add(symbolicName);
+
+                                               if (name.length() > 0)
+                                                       name.append(" ");
+                                               if (bundleName != null)
+                                                       name.append(bundleName);
+                                               else
+                                                       name.append(symbolicName);
+                                       }
+                               }
+                       }
+               }
+       }
+
+       static void debug(Object obj) {
+               if (debug)
+                       System.out.println(obj);
+       }
+
+}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiLauncherConstants.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/osgi/OsgiLauncherConstants.java
new file mode 100644 (file)
index 0000000..8ada527
--- /dev/null
@@ -0,0 +1,32 @@
+package org.argeo.slc.ide.ui.launch.osgi;
+
+import org.argeo.slc.ide.ui.SlcIdeUiPlugin;
+
+/** Constants used by OSGi launch. */
+public interface OsgiLauncherConstants {
+
+       public final static String OSGI_BUNDLES = "osgi.bundles";
+       public final static String ECLIPSE_APPLICATION = "eclipse.application";
+
+       public final static String ARGEO_OSGI_START = "argeo.osgi.start";
+       public final static String ARGEO_OSGI_BUNDLES = "argeo.osgi.bundles";
+       public final static String ARGEO_OSGI_LOCATIONS = "argeo.osgi.locations";
+       public final static String ARGEO_OSGI_DATA_DIR = "argeo.osgi.data.dir";
+       public final static String VMS_PROPERTY_PREFIX = "slc.launch.vm";
+
+       // Configuration
+       public final static String ATTR_SYNC_BUNDLES = SlcIdeUiPlugin.ID
+                       + ".syncBundles";
+       public final static String ATTR_CLEAR_DATA_DIRECTORY = SlcIdeUiPlugin.ID
+                       + ".clearDataDirectory";
+
+       public final static String ATTR_DEFAULT_VM_ARGS = SlcIdeUiPlugin.ID
+                       + ".defaultVmArgs";
+       public final static String ATTR_ADDITIONAL_PROGRAM_ARGS = SlcIdeUiPlugin.ID
+                       + ".additionalProgramArgs";
+       public final static String ATTR_ADDITIONAL_VM_ARGS = SlcIdeUiPlugin.ID
+                       + ".additionalVmArgs";
+       public final static String ATTR_ADD_JVM_PATHS = SlcIdeUiPlugin.ID
+                       + ".addJvmPaths";
+       public final static String ATTR_DATADIR = SlcIdeUiPlugin.ID + ".dataDir";
+}
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/preferences/SlcLaunchPreferencePage.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/preferences/SlcLaunchPreferencePage.java
new file mode 100644 (file)
index 0000000..24c6757
--- /dev/null
@@ -0,0 +1,34 @@
+package org.argeo.slc.ide.ui.launch.preferences;\r
+\r
+import org.argeo.slc.ide.ui.SlcIdeUiPlugin;\r
+import org.eclipse.jface.preference.DirectoryFieldEditor;\r
+import org.eclipse.jface.preference.FieldEditorPreferencePage;\r
+import org.eclipse.ui.IWorkbench;\r
+import org.eclipse.ui.IWorkbenchPreferencePage;\r
+\r
+public class SlcLaunchPreferencePage extends FieldEditorPreferencePage implements\r
+               IWorkbenchPreferencePage {\r
+       public final static String PREF_SLC_RUNTIME_LOCATION = SlcIdeUiPlugin.ID\r
+                       + ".slcRuntimeLocation";\r
+       public final static String PREF_EMBEDDED_JAVA_LIBRARY_PATH = SlcIdeUiPlugin.ID\r
+                       + ".embeddedJavaLibraryPath";\r
+\r
+       public SlcLaunchPreferencePage() {\r
+//             IPreferenceStore store = SlcUiLaunchPlugin.getDefault()\r
+//                             .getPreferenceStore();\r
+//             setPreferenceStore(store);\r
+               setDescription("Argeo SLC Launch Preferences");\r
+       }\r
+\r
+       @Override\r
+       protected void createFieldEditors() {\r
+               addField(new DirectoryFieldEditor(PREF_SLC_RUNTIME_LOCATION,\r
+                               "SLC Runtime", getFieldEditorParent()));\r
+               addField(new DirectoryFieldEditor(PREF_EMBEDDED_JAVA_LIBRARY_PATH,\r
+                               "Embedded Java Library Path", getFieldEditorParent()));\r
+       }\r
+\r
+       public void init(IWorkbench workbench) {\r
+       }\r
+\r
+}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchConfigurationTab.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchConfigurationTab.java
new file mode 100644 (file)
index 0000000..3af85d6
--- /dev/null
@@ -0,0 +1,188 @@
+package org.argeo.slc.ide.ui.launch.script;\r
+\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.debug.core.ILaunchConfiguration;\r
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;\r
+import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.ModifyEvent;\r
+import org.eclipse.swt.events.ModifyListener;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.events.SelectionListener;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Text;\r
+\r
+public class SlcScriptLaunchConfigurationTab extends\r
+               AbstractLaunchConfigurationTab {\r
+\r
+       private Text scriptTF;\r
+       private Text propertiesTF;\r
+       private Text runtimeTF;\r
+       private Text targetsTF;\r
+       private Button pre093B;\r
+\r
+       public void createControl(Composite parent) {\r
+               Composite body = new Composite(parent, SWT.NONE);\r
+               setControl(body);\r
+               body.setLayout(new GridLayout(1, false));\r
+               body.setFont(parent.getFont());\r
+\r
+               createLabel(body, "Script location");\r
+               scriptTF = createSingleText(body);\r
+               createWorkspaceButton(body);\r
+\r
+               createLabel(body, "Runtime");\r
+               runtimeTF = createSingleText(body);\r
+\r
+               createLabel(body, "Targets");\r
+               targetsTF = createSingleText(body);\r
+\r
+               createLabel(body, "Properties");\r
+               propertiesTF = createMultipleText(body, 10);\r
+\r
+               pre093B = createCheckBox(body, "Pre SLC v0.9.3");\r
+       }\r
+\r
+       public String getName() {\r
+               return "SLC";\r
+       }\r
+\r
+       public void initializeFrom(ILaunchConfiguration configuration) {\r
+               try {\r
+                       scriptTF.setText(configuration.getAttribute(\r
+                                       SlcScriptUtils.ATTR_SCRIPT, ""));\r
+\r
+                       boolean pre093 = configuration.getAttribute(\r
+                                       SlcScriptUtils.ATTR_PRE093, false);\r
+\r
+                       propertiesTF.setText(configuration.getAttribute(\r
+                                       SlcScriptUtils.ATTR_PROPERTIES, ""));\r
+                       runtimeTF.setText(configuration.getAttribute(\r
+                                       SlcScriptUtils.ATTR_RUNTIME, ""));\r
+                       targetsTF.setText(configuration.getAttribute(\r
+                                       SlcScriptUtils.ATTR_TARGETS, ""));\r
+                       pre093B.setSelection(pre093);\r
+               } catch (CoreException e) {\r
+                       throw new RuntimeException("Cannot initialize tab", e);\r
+               }\r
+\r
+       }\r
+\r
+       public void performApply(ILaunchConfigurationWorkingCopy configuration) {\r
+               configuration.setAttribute(SlcScriptUtils.ATTR_SCRIPT, scriptTF\r
+                               .getText());\r
+               configuration.setAttribute(SlcScriptUtils.ATTR_PROPERTIES, propertiesTF\r
+                               .getText());\r
+               configuration.setAttribute(SlcScriptUtils.ATTR_RUNTIME, runtimeTF\r
+                               .getText());\r
+               configuration.setAttribute(SlcScriptUtils.ATTR_TARGETS, targetsTF\r
+                               .getText());\r
+               configuration.setAttribute(SlcScriptUtils.ATTR_PRE093, pre093B\r
+                               .getSelection());\r
+       }\r
+\r
+       public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {\r
+               configuration.setAttribute(SlcScriptUtils.ATTR_SCRIPT, "");\r
+               configuration.setAttribute(SlcScriptUtils.ATTR_PROPERTIES, "");\r
+               configuration.setAttribute(SlcScriptUtils.ATTR_RUNTIME, "");\r
+               configuration.setAttribute(SlcScriptUtils.ATTR_TARGETS, "");\r
+               configuration.setAttribute(SlcScriptUtils.ATTR_PRE093, false);\r
+       }\r
+\r
+       // UI Utils\r
+       protected Label createLabel(Composite parent, String text) {\r
+               Label t = new Label(parent, SWT.NONE | SWT.WRAP);\r
+               t.setText(text);\r
+               t.setFont(parent.getFont());\r
+               GridData gd = new GridData(GridData.FILL_HORIZONTAL);\r
+               gd.horizontalSpan = 1;\r
+               t.setLayoutData(gd);\r
+               return t;\r
+       }\r
+\r
+       protected Text createSingleText(Composite parent) {\r
+               Text t = new Text(parent, SWT.SINGLE | SWT.BORDER);\r
+               t.setFont(parent.getFont());\r
+               GridData gd = new GridData(GridData.FILL_HORIZONTAL);\r
+               gd.horizontalSpan = 1;\r
+               t.setLayoutData(gd);\r
+               t.addModifyListener(modifyListener);\r
+               return t;\r
+       }\r
+\r
+       protected Text createMultipleText(Composite parent, int verticalSpan) {\r
+               Text t = new Text(parent, SWT.MULTI | SWT.BORDER);\r
+               t.setFont(parent.getFont());\r
+               GridData gd = new GridData(GridData.FILL, GridData.FILL, true, true);\r
+               gd.horizontalSpan = 1;\r
+               gd.verticalSpan = verticalSpan;\r
+               t.setLayoutData(gd);\r
+               t.addModifyListener(modifyListener);\r
+               return t;\r
+       }\r
+\r
+       protected Button createCheckBox(Composite parent, String label) {\r
+               Button b = new Button(parent, SWT.CHECK);\r
+               b.setFont(parent.getFont());\r
+               b.setText(label);\r
+               b.addSelectionListener(selectionListener);\r
+               return b;\r
+\r
+       }\r
+\r
+       protected Button createWorkspaceButton(Composite parent) {\r
+               Button b = new Button(parent, SWT.PUSH);\r
+               b.setFont(parent.getFont());\r
+               b.setText("Workspace...");\r
+               b.addSelectionListener(new SelectionListener() {\r
+                       public void widgetDefaultSelected(SelectionEvent e) {\r
+                       }\r
+\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               handleWorkspaceLocationButtonSelected();\r
+                       }\r
+               });\r
+               return b;\r
+       }\r
+\r
+       protected void handleWorkspaceLocationButtonSelected() {\r
+               // FIXME do not use resource framework\r
+//             ResourceSelectionDialog dialog;\r
+//             dialog = new ResourceSelectionDialog(getShell(), ResourcesPlugin\r
+//                             .getWorkspace().getRoot(), "Select a file");\r
+//             if (dialog.open() == Window.OK) {\r
+//                     Object[] results = dialog.getResult();\r
+//                     if (results == null || results.length < 1) {\r
+//                             return;\r
+//                     }\r
+//                     IResource resource = (IResource) results[0];\r
+//                     scriptTF.setText(SlcScriptUtils\r
+//                                     .convertToWorkspaceLocation(resource));\r
+//                     updateLaunchConfigurationDialog();\r
+//             }\r
+       }\r
+\r
+       // LISTENERS\r
+       /**\r
+        * Modify listener that simply updates the owning launch configuration\r
+        * dialog.\r
+        */\r
+       private ModifyListener modifyListener = new ModifyListener() {\r
+               public void modifyText(ModifyEvent evt) {\r
+                       updateLaunchConfigurationDialog();\r
+               }\r
+       };\r
+       private SelectionListener selectionListener = new SelectionListener() {\r
+               public void widgetDefaultSelected(SelectionEvent e) {\r
+               }\r
+\r
+               public void widgetSelected(SelectionEvent e) {\r
+                       updateLaunchConfigurationDialog();\r
+               }\r
+       };\r
+\r
+}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchConfigurationTabGroup.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchConfigurationTabGroup.java
new file mode 100644 (file)
index 0000000..e7d54a3
--- /dev/null
@@ -0,0 +1,16 @@
+package org.argeo.slc.ide.ui.launch.script;\r
+\r
+import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup;\r
+import org.eclipse.debug.ui.CommonTab;\r
+import org.eclipse.debug.ui.ILaunchConfigurationDialog;\r
+import org.eclipse.debug.ui.ILaunchConfigurationTab;\r
+\r
+public class SlcScriptLaunchConfigurationTabGroup extends\r
+               AbstractLaunchConfigurationTabGroup {\r
+\r
+       public void createTabs(ILaunchConfigurationDialog dialog, String mode) {\r
+               ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] {\r
+                               new SlcScriptLaunchConfigurationTab(), new CommonTab() };\r
+               setTabs(tabs);\r
+       }\r
+}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchDelegate.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchDelegate.java
new file mode 100644 (file)
index 0000000..75d8ce7
--- /dev/null
@@ -0,0 +1,258 @@
+package org.argeo.slc.ide.ui.launch.script;\r
+\r
+import java.io.ByteArrayInputStream;\r
+import java.io.IOException;\r
+import java.util.List;\r
+import java.util.Properties;\r
+import java.util.Vector;\r
+\r
+import org.argeo.slc.ide.ui.DeployedSlcSystem;\r
+import org.argeo.slc.ide.ui.EmbeddedSlcSystem;\r
+import org.argeo.slc.ide.ui.SlcSystem;\r
+import org.argeo.slc.ide.ui.SlcIdeUiPlugin;\r
+import org.argeo.slc.ide.ui.launch.preferences.SlcLaunchPreferencePage;\r
+import org.eclipse.core.resources.IFile;\r
+import org.eclipse.core.resources.IProject;\r
+import org.eclipse.core.resources.ResourcesPlugin;\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.core.runtime.IPath;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Path;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.core.variables.IStringVariableManager;\r
+import org.eclipse.core.variables.VariablesPlugin;\r
+import org.eclipse.debug.core.DebugPlugin;\r
+import org.eclipse.debug.core.ILaunch;\r
+import org.eclipse.debug.core.ILaunchConfiguration;\r
+import org.eclipse.debug.core.ILaunchManager;\r
+import org.eclipse.jdt.core.IJavaProject;\r
+import org.eclipse.jdt.core.IType;\r
+import org.eclipse.jdt.core.JavaCore;\r
+import org.eclipse.jdt.core.JavaModelException;\r
+import org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate;\r
+import org.eclipse.jdt.launching.IVMRunner;\r
+import org.eclipse.jdt.launching.VMRunnerConfiguration;\r
+import org.eclipse.jface.dialogs.ErrorDialog;\r
+import org.eclipse.swt.widgets.Shell;\r
+\r
+public class SlcScriptLaunchDelegate extends\r
+               AbstractJavaLaunchConfigurationDelegate {\r
+       public static final String ID = "org.argeo.slc.launch.slcScriptLaunchType";\r
+\r
+       public final static String ANT_MAIN = "org.apache.tools.ant.Main";\r
+       public final static String SLC_MAIN = "org.argeo.slc.cli.SlcMain";\r
+\r
+       @SuppressWarnings("deprecation")\r
+       public void launch(ILaunchConfiguration configuration, String mode,\r
+                       ILaunch launch, IProgressMonitor monitor) throws CoreException {\r
+               if (!saveBeforeLaunch(configuration, mode, monitor))\r
+                       return;\r
+\r
+               String scriptLocation = configuration.getAttribute(\r
+                               SlcScriptUtils.ATTR_SCRIPT, "");\r
+               if (scriptLocation.equals(""))\r
+                       abort("Script has to be provided", null, 1);\r
+\r
+               IStringVariableManager manager = VariablesPlugin.getDefault()\r
+                               .getStringVariableManager();\r
+               scriptLocation = manager.performStringSubstitution(scriptLocation);\r
+               IPath path = new Path(scriptLocation);\r
+               IFile[] files = ResourcesPlugin.getWorkspace().getRoot()\r
+                               .findFilesForLocation(path);\r
+\r
+               if (files.length == 0)\r
+                       abort("Coulkd not find related file", null, 1);\r
+\r
+               IFile file = (IFile) files[0];\r
+               DebugPlugin\r
+                               .logMessage("Launching " + file.getLocation().toFile(), null);\r
+\r
+               boolean pre093 = configuration.getAttribute(SlcScriptUtils.ATTR_PRE093,\r
+                               false);\r
+\r
+               // Retrieve SLC Runtime\r
+               SlcSystem slcSystem = findSlcSystem(file, pre093);\r
+               if (slcSystem == null)\r
+                       return;\r
+\r
+               IVMRunner vmRunner = slcSystem.getVmInstall().getVMRunner(mode);\r
+               final VMRunnerConfiguration vmConfig;\r
+               if (pre093) {\r
+                       vmConfig = createPre093Config(slcSystem, file, mode);\r
+               } else {\r
+                       vmConfig = createConfig(slcSystem, file, mode, configuration);\r
+               }\r
+               vmRunner.run(vmConfig, launch, monitor);\r
+       }\r
+\r
+       protected SlcSystem findSlcSystem(IFile file, boolean pre093)\r
+                       throws CoreException {\r
+               SlcSystem slcSystem = null;\r
+\r
+               IProject project = file.getProject();\r
+               if (project.getNature("org.eclipse.jdt.core.javanature") != null) {\r
+                       IJavaProject javaProject = JavaCore.create(project);\r
+                       if (checkProjectForEmbedded(javaProject, pre093)) {\r
+                               slcSystem = new EmbeddedSlcSystem(javaProject);\r
+                       }\r
+               }\r
+\r
+               if (slcSystem == null) {\r
+                       String slcRuntimePath = SlcIdeUiPlugin.getDefault()\r
+                                       .getPreferenceStore().getString(\r
+                                                       SlcLaunchPreferencePage.PREF_SLC_RUNTIME_LOCATION);\r
+                       if (slcRuntimePath == null || slcRuntimePath.equals("")) {\r
+                               showError("SLC Runtime path is not set. Set it in Windows > Preferences > SLC");\r
+                               return null;\r
+                       }\r
+\r
+                       slcSystem = new DeployedSlcSystem(slcRuntimePath);\r
+               }\r
+\r
+               return slcSystem;\r
+       }\r
+\r
+       protected boolean checkProjectForEmbedded(IJavaProject project,\r
+                       boolean pre093) {\r
+               try {\r
+                       IType mainType = null;\r
+                       if (pre093)\r
+                               mainType = project.findType(ANT_MAIN);\r
+                       else\r
+                               mainType = project.findType(SLC_MAIN);\r
+\r
+                       if (mainType == null)\r
+                               return false;\r
+                       else\r
+                               return true;\r
+               } catch (JavaModelException e) {\r
+                       e.printStackTrace();\r
+                       return false;\r
+               }\r
+       }\r
+\r
+       // Regular SLC\r
+       protected VMRunnerConfiguration createConfig(SlcSystem deployedSlc,\r
+                       IFile file, String mode, ILaunchConfiguration configuration)\r
+                       throws CoreException {\r
+               VMRunnerConfiguration vmConfig = new VMRunnerConfiguration(SLC_MAIN,\r
+                               deployedSlc.getClasspath());\r
+               vmConfig.setVMArguments(getVmArguments(deployedSlc));\r
+               vmConfig.setWorkingDirectory(file.getLocation().toFile().getParent());\r
+               vmConfig.setProgramArguments(getProgramArguments(deployedSlc, file,\r
+                               mode, configuration));\r
+               return vmConfig;\r
+       }\r
+\r
+       protected String[] getVmArguments(SlcSystem deployedSlc) {\r
+               List<String> list = new Vector<String>();\r
+               if (deployedSlc.getJavaLibraryPath() != null)\r
+                       list.add("-Djava.library.path=" + deployedSlc.getJavaLibraryPath());\r
+               return list.toArray(new String[list.size()]);\r
+       }\r
+\r
+       protected String[] getProgramArguments(SlcSystem deployedSlc, IFile file,\r
+                       String mode, ILaunchConfiguration configuration)\r
+                       throws CoreException {\r
+               List<String> list = new Vector<String>();\r
+\r
+               list.add("--mode");\r
+               list.add("single");\r
+\r
+               // Script\r
+               list.add("--script");\r
+               list.add(file.getLocation().toFile().getAbsolutePath());\r
+\r
+               // Runtime\r
+               String runtime = configuration.getAttribute(\r
+                               SlcScriptUtils.ATTR_RUNTIME, "");\r
+               if (!runtime.equals("")) {\r
+                       list.add("--runtime");\r
+                       list.add(runtime);\r
+               }\r
+\r
+               // Targets\r
+               String targets = configuration.getAttribute(\r
+                               SlcScriptUtils.ATTR_TARGETS, "");\r
+               if (!targets.equals("")) {\r
+                       list.add("--targets");\r
+                       list.add(targets);\r
+               }\r
+\r
+               // Properties\r
+               Properties properties = new Properties();\r
+               String str = configuration.getAttribute(SlcScriptUtils.ATTR_PROPERTIES,\r
+                               "");\r
+               ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes());\r
+               try {\r
+                       properties.load(in);\r
+               } catch (IOException e) {\r
+                       throw new RuntimeException("Cannot read properties", e);\r
+               } finally {\r
+                       if (in != null)\r
+                               try {\r
+                                       in.close();\r
+                               } catch (IOException e) {\r
+                                       // silent\r
+                               }\r
+               }\r
+\r
+               for (Object key : properties.keySet()) {\r
+                       list.add("-p");\r
+                       StringBuffer buf = new StringBuffer("");\r
+                       buf.append(key).append('=').append(properties.get(key));\r
+                       list.add(buf.toString());\r
+               }\r
+\r
+               // Debug mode\r
+               if (mode.equals(ILaunchManager.DEBUG_MODE)) {\r
+                       list.add("--property");\r
+                       list.add("log4j.logger.org.argeo.slc=DEBUG");\r
+               }\r
+               return list.toArray(new String[list.size()]);\r
+       }\r
+\r
+       // Pre SLC v0.9.3\r
+       protected VMRunnerConfiguration createPre093Config(SlcSystem deployedSlc,\r
+                       IFile file, String mode) throws CoreException {\r
+               VMRunnerConfiguration vmConfig = new VMRunnerConfiguration(ANT_MAIN,\r
+                               deployedSlc.getClasspath());\r
+               vmConfig.setVMArguments(getPre093VmArguments(deployedSlc));\r
+               vmConfig.setWorkingDirectory(file.getLocation().toFile().getParent());\r
+               vmConfig.setProgramArguments(getPre093ProgramArguments(deployedSlc,\r
+                               file, mode));\r
+               return vmConfig;\r
+       }\r
+\r
+       protected String[] getPre093VmArguments(SlcSystem deployedSlc) {\r
+               List<String> list = new Vector<String>();\r
+               // list.add("-Dant.home=" + deployedSlc.getAntHome());\r
+               if (deployedSlc.getJavaLibraryPath() != null)\r
+                       list.add("-Djava.library.path=" + deployedSlc.getJavaLibraryPath());\r
+               return list.toArray(new String[list.size()]);\r
+       }\r
+\r
+       protected String[] getPre093ProgramArguments(SlcSystem deployedSlc,\r
+                       IFile file, String mode) {\r
+               List<String> list = new Vector<String>();\r
+               list.add("-f");\r
+               list.add(file.getLocation().toFile().getAbsolutePath());\r
+               if (mode.equals(ILaunchManager.DEBUG_MODE)) {\r
+                       list.add("-d");\r
+               }\r
+               return list.toArray(new String[list.size()]);\r
+       }\r
+\r
+       // Utilities\r
+       private static void showError(String message) {\r
+               Shell shell = SlcIdeUiPlugin.getDefault().getWorkbench()\r
+                               .getActiveWorkbenchWindow().getShell();\r
+\r
+               IStatus status = new Status(IStatus.ERROR, SlcIdeUiPlugin.ID,\r
+                               message);\r
+               ErrorDialog.openError(shell, "Error", "Cannot launch SLC script",\r
+                               status);\r
+       }\r
+\r
+}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchShortcut.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchShortcut.java
new file mode 100644 (file)
index 0000000..dfb0044
--- /dev/null
@@ -0,0 +1,127 @@
+package org.argeo.slc.ide.ui.launch.script;\r
+\r
+import org.argeo.slc.ide.ui.SlcIdeUiPlugin;\r
+import org.eclipse.core.resources.IFile;\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.core.runtime.IPath;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.debug.core.DebugPlugin;\r
+import org.eclipse.debug.core.ILaunchConfiguration;\r
+import org.eclipse.debug.core.ILaunchConfigurationType;\r
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;\r
+import org.eclipse.debug.core.ILaunchManager;\r
+import org.eclipse.debug.ui.DebugUITools;\r
+import org.eclipse.debug.ui.IDebugUIConstants;\r
+import org.eclipse.debug.ui.ILaunchShortcut;\r
+import org.eclipse.jface.dialogs.ErrorDialog;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.ui.IEditorPart;\r
+\r
+public class SlcScriptLaunchShortcut implements ILaunchShortcut {\r
+       private boolean showDialog = false;\r
+\r
+       public void launch(ISelection selection, String mode) {\r
+               try {\r
+                       if (!(selection instanceof IStructuredSelection)) {\r
+                               throw new RuntimeException("Unknown selection "\r
+                                               + selection.getClass());\r
+                       }\r
+                       IStructuredSelection sSelection = (IStructuredSelection) selection;\r
+                       if (sSelection.size() != 1) {\r
+                               throw new RuntimeException("Can only launch one SLC script.");\r
+                       }\r
+                       Object obj = sSelection.iterator().next();\r
+                       if (!(obj instanceof IFile)) {\r
+                               throw new RuntimeException("Can only launch files.");\r
+                       }\r
+                       IFile file = ((IFile) obj);\r
+\r
+                       ILaunchManager manager = DebugPlugin.getDefault()\r
+                                       .getLaunchManager();\r
+                       ILaunchConfigurationType type = manager\r
+                                       .getLaunchConfigurationType(SlcScriptLaunchDelegate.ID);\r
+\r
+                       // Find or create config\r
+                       String configLocation = SlcScriptUtils\r
+                                       .convertToWorkspaceLocation(file);\r
+                       ILaunchConfiguration config = findLaunchConfiguration(\r
+                                       configLocation, manager.getLaunchConfigurations(type));\r
+                       if (config == null) {\r
+                               ILaunchConfigurationWorkingCopy wc = type.newInstance(null,\r
+                                               generateName(file));\r
+                               wc.setAttribute(SlcScriptUtils.ATTR_SCRIPT, configLocation);\r
+                               wc.setMappedResources(new IFile[] { file });\r
+                               config = wc.doSave();\r
+                       }\r
+\r
+                       // Launch\r
+                       launch(config, mode);\r
+               } catch (CoreException e) {\r
+                       Shell shell = SlcIdeUiPlugin.getDefault().getWorkbench()\r
+                                       .getActiveWorkbenchWindow().getShell();\r
+                       ErrorDialog.openError(shell, "Error",\r
+                                       "Cannot execute SLC launch shortcut", e.getStatus());\r
+               }\r
+\r
+       }\r
+\r
+       protected String generateName(IFile file) {\r
+               IPath relativePath = file.getProjectRelativePath();\r
+               String name = relativePath.toString();\r
+               int idx = name.lastIndexOf(".xml");\r
+               if (idx > 0)\r
+                       name = name.substring(0, idx);\r
+\r
+               if (name.startsWith("src/main/slc/root/"))\r
+                       name = name.substring("src/main/slc/root/".length());\r
+               else if (name.startsWith("src/main/slc/"))\r
+                       name = name.substring("src/main/slc/".length());\r
+\r
+               name = name.replace('/', '.');// otherwise not properly saved\r
+               return name;\r
+       }\r
+\r
+       protected ILaunchConfiguration findLaunchConfiguration(\r
+                       String configLocation, ILaunchConfiguration[] configs)\r
+                       throws CoreException {\r
+               for (ILaunchConfiguration config : configs) {\r
+                       String loc = config.getAttribute(SlcScriptUtils.ATTR_SCRIPT, "");\r
+                       if (loc.equals(configLocation)) {\r
+                               return config;\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       protected void launch(ILaunchConfiguration configuration, String mode)\r
+                       throws CoreException {\r
+               if (showDialog) {\r
+                       IStatus status = new Status(IStatus.INFO, SlcIdeUiPlugin.ID,\r
+                                       "Configure SLC Launch");\r
+                       String groupId;\r
+                       if (mode.equals(ILaunchManager.DEBUG_MODE)) {\r
+                               groupId = IDebugUIConstants.ID_DEBUG_LAUNCH_GROUP;\r
+                       } else {\r
+                               groupId = IDebugUIConstants.ID_RUN_LAUNCH_GROUP;\r
+                       }\r
+                       DebugUITools.openLaunchConfigurationDialog(SlcIdeUiPlugin\r
+                                       .getDefault().getWorkbench().getActiveWorkbenchWindow()\r
+                                       .getShell(), configuration, groupId, status);\r
+               } else {\r
+                       DebugUITools.launch(configuration, mode);\r
+               }\r
+\r
+       }\r
+\r
+       public void launch(IEditorPart editor, String mode) {\r
+               // not (yet) implemented\r
+       }\r
+\r
+       public void setShowDialog(boolean showDialog) {\r
+               this.showDialog = showDialog;\r
+       }\r
+\r
+}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchShortcutWithDialog.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptLaunchShortcutWithDialog.java
new file mode 100644 (file)
index 0000000..9e8dd3e
--- /dev/null
@@ -0,0 +1,11 @@
+package org.argeo.slc.ide.ui.launch.script;\r
+\r
+\r
+public class SlcScriptLaunchShortcutWithDialog extends SlcScriptLaunchShortcut {\r
+\r
+       public SlcScriptLaunchShortcutWithDialog() {\r
+               super();\r
+               setShowDialog(true);\r
+       }\r
+\r
+}\r
diff --git a/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptUtils.java b/ide/plugins/org.argeo.slc.ide.ui/src/org/argeo/slc/ide/ui/launch/script/SlcScriptUtils.java
new file mode 100644 (file)
index 0000000..9a5bc42
--- /dev/null
@@ -0,0 +1,23 @@
+package org.argeo.slc.ide.ui.launch.script;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.variables.VariablesPlugin;
+
+public class SlcScriptUtils {
+
+       public final static String ATTR_SCRIPT = "script";
+       public final static String ATTR_PROPERTIES = "properties";
+       public final static String ATTR_RUNTIME = "runtime";
+       public final static String ATTR_TARGETS = "targets";
+       public final static String ATTR_PRE093 = "pre093";
+
+       public static String convertToWorkspaceLocation(IResource resource) {
+               return VariablesPlugin.getDefault().getStringVariableManager()
+                               .generateVariableExpression("workspace_loc",
+                                               resource.getFullPath().toString());
+       }
+
+       private SlcScriptUtils() {
+
+       }
+}
diff --git a/ide/plugins/pom.xml b/ide/plugins/pom.xml
new file mode 100644 (file)
index 0000000..85efe86
--- /dev/null
@@ -0,0 +1,15 @@
+<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>ide</artifactId>
+               <version>2.1.11-SNAPSHOT</version>
+               <relativePath>..</relativePath>
+       </parent>
+       <artifactId>ide-plugins</artifactId>
+       <packaging>pom</packaging>
+       <name>IDE Plugins</name>
+       <modules>
+               <module>org.argeo.slc.ide.ui</module>
+       </modules>
+</project>
\ No newline at end of file
diff --git a/ide/pom.xml b/ide/pom.xml
new file mode 100644 (file)
index 0000000..64dd819
--- /dev/null
@@ -0,0 +1,15 @@
+<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.11-SNAPSHOT</version>
+               <relativePath>..</relativePath>
+       </parent>
+       <artifactId>ide</artifactId>
+       <packaging>pom</packaging>
+       <name>IDE</name>
+       <modules>
+               <module>plugins</module>
+       </modules>
+</project>
\ No newline at end of file