Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jubula.documentation/gefapi/javadoc/javadoc.xml2
-rw-r--r--org.eclipse.jubula.feature/feature.xml7
-rw-r--r--org.eclipse.jubula.project.configuration/target/definitions/juno.target19
-rw-r--r--org.eclipse.jubula.rc.rcp.common/.checkstyle7
-rw-r--r--org.eclipse.jubula.rc.rcp.common/.classpath21
-rw-r--r--org.eclipse.jubula.rc.rcp.common/.gitignore3
-rw-r--r--org.eclipse.jubula.rc.rcp.common/.project41
-rw-r--r--org.eclipse.jubula.rc.rcp.common/META-INF/MANIFEST.MF51
-rw-r--r--org.eclipse.jubula.rc.rcp.common/about.html28
-rw-r--r--org.eclipse.jubula.rc.rcp.common/build.properties18
-rw-r--r--org.eclipse.jubula.rc.rcp.common/genLib.xml (renamed from org.eclipse.jubula.rc.rcp/genLib.xml)30
-rw-r--r--org.eclipse.jubula.rc.rcp.common/pom.xml56
-rw-r--r--org.eclipse.jubula.rc.rcp.common/resources/logback.xml (renamed from org.eclipse.jubula.rc.rcp/resources/logback.xml)2
-rw-r--r--org.eclipse.jubula.rc.rcp.common/src/.keep0
-rw-r--r--org.eclipse.jubula.rc.rcp.e3.specific/.checkstyle7
-rw-r--r--org.eclipse.jubula.rc.rcp.e3.specific/.classpath7
-rw-r--r--org.eclipse.jubula.rc.rcp.e3.specific/.gitignore2
-rw-r--r--org.eclipse.jubula.rc.rcp.e3.specific/.project41
-rw-r--r--org.eclipse.jubula.rc.rcp.e3.specific/META-INF/MANIFEST.MF12
-rw-r--r--org.eclipse.jubula.rc.rcp.e3.specific/about.html28
-rw-r--r--org.eclipse.jubula.rc.rcp.e3.specific/build.properties17
-rw-r--r--org.eclipse.jubula.rc.rcp.e3.specific/plugin.xml (renamed from org.eclipse.jubula.rc.rcp/plugin.xml)11
-rw-r--r--org.eclipse.jubula.rc.rcp.e3.specific/pom.xml20
-rw-r--r--org.eclipse.jubula.rc.rcp.e3.specific/src/org/eclipse/jubula/rc/rcp/e3/specific/Startup.java36
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/.checkstyle7
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/.classpath7
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/.gitignore3
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/.project41
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/META-INF/MANIFEST.MF16
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/about.html28
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/build.properties16
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/pom.xml19
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/accessor/E3ComponentNamer.java34
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/accessor/E3Startup.java410
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/factory/DefaultEditPartAdapterFactory.java (renamed from org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/factory/DefaultEditPartAdapterFactory.java)24
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/identifier/ClassCountEditPartIdentifier.java (renamed from org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/identifier/ClassCountEditPartIdentifier.java)10
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/identifier/IEditPartIdentifier.java (renamed from org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/identifier/IEditPartIdentifier.java)12
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/identifier/StaticEditPartIdentifier.java (renamed from org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/identifier/StaticEditPartIdentifier.java)10
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/implclasses/FigureCanvasImplClass.java (renamed from org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/implclasses/FigureCanvasImplClass.java)291
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/inspector/FigureHighlighter.java (renamed from org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/inspector/FigureHighlighter.java)58
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/inspector/GefInspectorListenerAppender.java (renamed from org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/inspector/GefInspectorListenerAppender.java)163
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/listener/GefPartListener.java (renamed from org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/listener/GefPartListener.java)43
-rw-r--r--org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/util/FigureCanvasUtil.java (renamed from org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/util/FigureCanvasUtil.java)22
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.feature/.gitignore1
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.feature/.project17
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.feature/about.html28
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.feature/build.properties11
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.feature/epl-v10.html259
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.feature/feature.properties131
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.feature/feature.xml44
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.feature/license.html108
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.feature/pom.xml19
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.releng/.gitignore2
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.releng/.project11
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.releng/pom.xml80
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.site/.gitignore1
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.site/.project17
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.site/category.xml14
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.site/pom.xml41
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.swt/.checkstyle7
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.swt/.classpath7
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.swt/.gitignore2
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.swt/.project41
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.swt/META-INF/MANIFEST.MF16
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.swt/about.html28
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.swt/build.properties17
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.swt/plugin.xml20
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.swt/pom.xml19
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.swt/src/org/eclipse/jubula/rc/rcp/e4/swt/namer/E4SwtComponentNamer.java99
-rw-r--r--org.eclipse.jubula.rc.rcp.e4.swt/src/org/eclipse/jubula/rc/rcp/e4/swt/starter/SwtProcessor.java42
-rw-r--r--org.eclipse.jubula.rc.rcp.e4/.checkstyle7
-rw-r--r--org.eclipse.jubula.rc.rcp.e4/.classpath7
-rw-r--r--org.eclipse.jubula.rc.rcp.e4/.gitignore2
-rw-r--r--org.eclipse.jubula.rc.rcp.e4/.project41
-rw-r--r--org.eclipse.jubula.rc.rcp.e4/META-INF/MANIFEST.MF15
-rw-r--r--org.eclipse.jubula.rc.rcp.e4/about.html28
-rw-r--r--org.eclipse.jubula.rc.rcp.e4/build.properties16
-rw-r--r--org.eclipse.jubula.rc.rcp.e4/pom.xml19
-rw-r--r--org.eclipse.jubula.rc.rcp.e4/src/org/eclipse/jubula/rc/rcp/e4/namer/E4ComponentNamer.java63
-rw-r--r--org.eclipse.jubula.rc.rcp.e4/src/org/eclipse/jubula/rc/rcp/e4/starter/AbstractProcessor.java102
-rw-r--r--org.eclipse.jubula.rc.rcp.feature/.gitignore1
-rw-r--r--org.eclipse.jubula.rc.rcp.feature/.project17
-rw-r--r--org.eclipse.jubula.rc.rcp.feature/about.html28
-rw-r--r--org.eclipse.jubula.rc.rcp.feature/build.properties11
-rw-r--r--org.eclipse.jubula.rc.rcp.feature/epl-v10.html259
-rw-r--r--org.eclipse.jubula.rc.rcp.feature/feature.properties131
-rw-r--r--org.eclipse.jubula.rc.rcp.feature/feature.xml56
-rw-r--r--org.eclipse.jubula.rc.rcp.feature/license.html108
-rw-r--r--org.eclipse.jubula.rc.rcp.feature/pom.xml20
-rw-r--r--org.eclipse.jubula.rc.rcp.site/.gitignore1
-rw-r--r--org.eclipse.jubula.rc.rcp.site/.project17
-rw-r--r--org.eclipse.jubula.rc.rcp.site/category.xml7
-rw-r--r--org.eclipse.jubula.rc.rcp.site/pom.xml41
-rw-r--r--org.eclipse.jubula.rc.rcp.swt/.checkstyle7
-rw-r--r--org.eclipse.jubula.rc.rcp.swt/.classpath8
-rw-r--r--org.eclipse.jubula.rc.rcp.swt/.gitignore3
-rw-r--r--org.eclipse.jubula.rc.rcp.swt/.project41
-rw-r--r--org.eclipse.jubula.rc.rcp.swt/META-INF/MANIFEST.MF22
-rw-r--r--org.eclipse.jubula.rc.rcp.swt/about.html28
-rw-r--r--org.eclipse.jubula.rc.rcp.swt/build.properties17
-rw-r--r--org.eclipse.jubula.rc.rcp.swt/genLib.xml35
-rw-r--r--org.eclipse.jubula.rc.rcp.swt/pom.xml56
-rw-r--r--org.eclipse.jubula.rc.rcp.swt/src/org/eclipse/jubula/rc/rcp/swt/aut/RcpSwtComponentNamer.java357
-rw-r--r--org.eclipse.jubula.rc.rcp.swt/src/org/eclipse/jubula/rc/rcp/swt/aut/SwtRemoteControlService.java117
-rw-r--r--org.eclipse.jubula.rc.rcp/.classpath17
-rw-r--r--org.eclipse.jubula.rc.rcp/.gitignore6
-rw-r--r--org.eclipse.jubula.rc.rcp/META-INF/MANIFEST.MF28
-rw-r--r--org.eclipse.jubula.rc.rcp/build.properties23
-rw-r--r--org.eclipse.jubula.rc.rcp/genBundles.xml94
-rw-r--r--org.eclipse.jubula.rc.rcp/pom.xml143
-rw-r--r--org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/accessor/Startup.java698
-rw-r--r--org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/installer/BundleInstaller.java213
-rw-r--r--org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/installer/BundleIterator.java155
-rw-r--r--org.eclipse.jubula.rc.swt/META-INF/MANIFEST.MF5
-rw-r--r--org.eclipse.jubula.releng.server.rc.rcp/.gitignore2
-rw-r--r--org.eclipse.jubula.releng.server.rc.rcp/.project11
-rw-r--r--org.eclipse.jubula.releng.server.rc.rcp/pom.xml48
-rw-r--r--org.eclipse.jubula.releng.server/pom.xml1
-rw-r--r--org.eclipse.jubula.toolkit.provider.rcp.gef/resources/xml/ComponentConfiguration.xml2
119 files changed, 4716 insertions, 1180 deletions
diff --git a/org.eclipse.jubula.documentation/gefapi/javadoc/javadoc.xml b/org.eclipse.jubula.documentation/gefapi/javadoc/javadoc.xml
index da38974ba..1a86cb078 100644
--- a/org.eclipse.jubula.documentation/gefapi/javadoc/javadoc.xml
+++ b/org.eclipse.jubula.documentation/gefapi/javadoc/javadoc.xml
@@ -20,7 +20,7 @@
noindex="false"
nonavbar="false"
notree="false"
- packagenames="org.eclipse.jubula.rc.rcp.gef.identifier"
+ packagenames="org.eclipse.jubula.rc.rcp.e3.gef.identifier"
sourcepathref="rc.gef.extension.sourcepath"
splitindex="true"
use="true"
diff --git a/org.eclipse.jubula.feature/feature.xml b/org.eclipse.jubula.feature/feature.xml
index 611128f67..49a386593 100644
--- a/org.eclipse.jubula.feature/feature.xml
+++ b/org.eclipse.jubula.feature/feature.xml
@@ -320,13 +320,6 @@ BREDEX GmbH - initial API and implementation and/or initial documentation
unpack="false"/>
<plugin
- id="org.eclipse.jubula.rc.swt"
- download-size="0"
- install-size="0"
- version="0.0.0"
- unpack="false"/>
-
- <plugin
id="org.eclipse.jubula.rc.rcp"
download-size="0"
install-size="0"
diff --git a/org.eclipse.jubula.project.configuration/target/definitions/juno.target b/org.eclipse.jubula.project.configuration/target/definitions/juno.target
new file mode 100644
index 000000000..2d5f02dd2
--- /dev/null
+++ b/org.eclipse.jubula.project.configuration/target/definitions/juno.target
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde version="3.8"?>
+<!-- Copyright (c) 2004, 2011 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+
+<target name="juno">
+<locations>
+<location includeAllPlatforms="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.platform.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.e4.rcp.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.equinox.executable.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.emf.ecore.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.emf.common.feature.group" version="0.0.0"/>
+<repository id ="eclipse-juno" location="http://download.eclipse.org/releases/juno"/>
+</location>
+</locations>
+</target>
diff --git a/org.eclipse.jubula.rc.rcp.common/.checkstyle b/org.eclipse.jubula.rc.rcp.common/.checkstyle
new file mode 100644
index 000000000..f69a865d7
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.common/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <fileset name="all" enabled="true" check-config-name="Jubula" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/org.eclipse.jubula.rc.rcp.common/.classpath b/org.eclipse.jubula.rc.rcp.common/.classpath
new file mode 100644
index 000000000..5e80887d5
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.common/.classpath
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry exported="true" kind="lib" path="lib/xpp3_min-1.1.3.4.O.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/xstream-1.3.1.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/ch.qos.logback.slf4j.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/ch.qos.logback.core.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/ch.qos.logback.classic.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/org.apache.commons.lang.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/org.slf4j.api.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/org.slf4j.jcl.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/org.apache.oro.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/org.apache.commons.beanutils.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/org.eclipse.jubula.communication.jar" sourcepath="/org.eclipse.jubula.communication/src"/>
+ <classpathentry exported="true" kind="lib" path="lib/org.eclipse.jubula.tools.jar" sourcepath="/org.eclipse.jubula.tools/src"/>
+ <classpathentry exported="true" kind="lib" path="lib/org.eclipse.jubula.rc.common.jar" sourcepath="/org.eclipse.jubula.rc.common"/>
+ <classpathentry exported="true" kind="lib" path="resources" sourcepath="resources"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.jubula.rc.rcp.common/.gitignore b/org.eclipse.jubula.rc.rcp.common/.gitignore
new file mode 100644
index 000000000..61e26dab5
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.common/.gitignore
@@ -0,0 +1,3 @@
+/bin
+/target
+/lib
diff --git a/org.eclipse.jubula.rc.rcp.common/.project b/org.eclipse.jubula.rc.rcp.common/.project
new file mode 100644
index 000000000..ef9ad1583
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.common/.project
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.jubula.rc.rcp.common</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+ <linkedResources>
+ <link>
+ <name>.settings</name>
+ <type>2</type>
+ <locationURI>WORKSPACE_LOC/jubula/org.eclipse.jubula.project.configuration/settings/1.4</locationURI>
+ </link>
+ </linkedResources>
+</projectDescription>
diff --git a/org.eclipse.jubula.rc.rcp.common/META-INF/MANIFEST.MF b/org.eclipse.jubula.rc.rcp.common/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..0520d0bd5
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.common/META-INF/MANIFEST.MF
@@ -0,0 +1,51 @@
+Manifest-Version: 1.0
+Eclipse-BuddyPolicy: registered
+Bundle-ManifestVersion: 2
+Bundle-Name: Jubula Remote Control - RCP
+Bundle-SymbolicName: org.eclipse.jubula.rc.rcp.common; singleton:=true
+Bundle-Version: 2.0.0.qualifier
+Require-Bundle: org.eclipse.osgi;bundle-version="[3.3.0,5.0.0)"
+Bundle-ClassPath: .,
+ lib/xpp3_min-1.1.3.4.O.jar,
+ lib/xstream-1.3.1.jar,
+ lib/ch.qos.logback.slf4j.jar,
+ lib/ch.qos.logback.core.jar,
+ lib/ch.qos.logback.classic.jar,
+ lib/org.apache.commons.lang.jar,
+ lib/org.slf4j.api.jar,
+ lib/org.slf4j.jcl.jar,
+ lib/org.apache.oro.jar,
+ lib/org.apache.commons.beanutils.jar,
+ lib/org.eclipse.jubula.communication.jar,
+ lib/org.eclipse.jubula.tools.jar,
+ lib/org.eclipse.jubula.rc.common.jar,
+ resources/
+Bundle-Vendor: Eclipse Jubula
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Export-Package: org.apache.commons.beanutils,
+ org.apache.commons.lang,
+ org.eclipse.jubula.communication,
+ org.eclipse.jubula.communication.message,
+ org.eclipse.jubula.rc.common,
+ org.eclipse.jubula.rc.common.adaptable,
+ org.eclipse.jubula.rc.common.tester,
+ org.eclipse.jubula.rc.common.commands,
+ org.eclipse.jubula.rc.common.components,
+ org.eclipse.jubula.rc.common.driver,
+ org.eclipse.jubula.rc.common.exception,
+ org.eclipse.jubula.rc.common.implclasses,
+ org.eclipse.jubula.rc.common.listener,
+ org.eclipse.jubula.rc.common.logger,
+ org.eclipse.jubula.rc.common.tester.adapter.factory,
+ org.eclipse.jubula.rc.common.tester.adapter.interfaces,
+ org.eclipse.jubula.rc.common.util,
+ org.eclipse.jubula.tools.constants,
+ org.eclipse.jubula.tools.exception,
+ org.eclipse.jubula.tools.i18n,
+ org.eclipse.jubula.tools.messagehandling,
+ org.eclipse.jubula.tools.objects,
+ org.eclipse.jubula.tools.objects.event,
+ org.eclipse.jubula.tools.utils,
+ org.eclipse.jubula.tools.xml.businessmodell,
+ org.slf4j
diff --git a/org.eclipse.jubula.rc.rcp.common/about.html b/org.eclipse.jubula.rc.rcp.common/about.html
new file mode 100644
index 000000000..2a7ba0118
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.common/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 22, 2011</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.jubula.rc.rcp.common/build.properties b/org.eclipse.jubula.rc.rcp.common/build.properties
new file mode 100644
index 000000000..01645024b
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.common/build.properties
@@ -0,0 +1,18 @@
+###############################################################################
+# Copyright (c) 2004, 2013 BREDEX GmbH.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+bin.includes = about.html,\
+ META-INF/,\
+ .,\
+ lib/,\
+ resources/
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+javacSource = 1.4
+javacTarget = 1.4
+javacErrors.. = -assertIdentifier
diff --git a/org.eclipse.jubula.rc.rcp/genLib.xml b/org.eclipse.jubula.rc.rcp.common/genLib.xml
index ef8215bd3..d1dcf4169 100644
--- a/org.eclipse.jubula.rc.rcp/genLib.xml
+++ b/org.eclipse.jubula.rc.rcp.common/genLib.xml
@@ -1,17 +1,17 @@
<!--
- Copyright (c) 2004, 2011 BREDEX GmbH.
+ Copyright (c) 2004, 2013 BREDEX GmbH.
All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License v1.0
which accompanies this distribution, and is available at
http://www.eclipse.org/legal/epl-v10.html
-->
-<project name="org.eclipse.jubula.rc.rcp" default="gen-lib" basedir=".">
-
+<project name="org.eclipse.jubula.rc.rcp.common" default="gen-lib" basedir=".">
+
<property name="OrbitStorage" value="../org.eclipse.jubula.rc.common.orbit" />
<property name="SiteStorage" value="../org.eclipse.jubula.site/target/site/plugins" />
<target name="gen-lib">
-
+
<mkdir dir="lib" />
<delete>
<fileset dir="lib" includes="**/*"/>
@@ -68,13 +68,13 @@
<mergemapper to="org.slf4j.jcl.jar"/>
</copy>
- <!--
- The "SNAPSHOT" in the include selector ensures that only the non-source
- JAR is used. Without it, the corresponding source JAR was being used,
- and it was either being used exclusively or was *overwriting* the content
- provided by the non-source JAR. This caused compilation to fail when also
- building source bundles.
- -->
+ <!--
+ The "SNAPSHOT" in the include selector ensures that only the non-source
+ JAR is used. Without it, the corresponding source JAR was being used,
+ and it was either being used exclusively or was *overwriting* the content
+ provided by the non-source JAR. This caused compilation to fail when also
+ building source bundles.
+ -->
<copy todir="lib">
<fileset dir="../org.eclipse.jubula.rc.common/target">
<include name="org.eclipse.jubula.rc.common*SNAPSHOT.jar" />
@@ -82,12 +82,6 @@
<mergemapper to="org.eclipse.jubula.rc.common.jar"/>
</copy>
<copy todir="lib">
- <fileset dir="../org.eclipse.jubula.rc.swt/target">
- <include name="org.eclipse.jubula.rc.swt*SNAPSHOT.jar" />
- </fileset>
- <mergemapper to="org.eclipse.jubula.rc.swt.jar"/>
- </copy>
- <copy todir="lib">
<fileset dir="../org.eclipse.jubula.tools/target">
<include name="org.eclipse.jubula.tools*SNAPSHOT.jar" />
</fileset>
@@ -107,5 +101,5 @@
</fileset>
</copy>
</target>
-
+
</project>
diff --git a/org.eclipse.jubula.rc.rcp.common/pom.xml b/org.eclipse.jubula.rc.rcp.common/pom.xml
new file mode 100644
index 000000000..0b8fa88d3
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.common/pom.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.jubula.releng.server.rc.rcp</artifactId>
+ <groupId>org.eclipse.jubula</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.jubula.releng.server.rc.rcp</relativePath>
+ </parent>
+ <artifactId>org.eclipse.jubula.rc.rcp.common</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.6</version>
+ <executions>
+ <execution>
+ <id>gen-lib</id>
+ <phase>generate-resources</phase>
+ <configuration>
+ <target>
+ <ant antfile="genLib.xml" />
+ </target>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>2.4.1</version>
+ <configuration>
+ <filesets>
+ <fileset>
+ <directory>lib</directory>
+ <includes>
+ <include>*.jar</include>
+ </includes>
+ <followSymlinks>false</followSymlinks>
+ </fileset>
+ </filesets>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/org.eclipse.jubula.rc.rcp/resources/logback.xml b/org.eclipse.jubula.rc.rcp.common/resources/logback.xml
index 79b623cf5..92b3d50e3 100644
--- a/org.eclipse.jubula.rc.rcp/resources/logback.xml
+++ b/org.eclipse.jubula.rc.rcp.common/resources/logback.xml
@@ -15,6 +15,6 @@
</encoder>
</appender>
<root level="warn">
- <appender-ref ref="FILE" />
+ <appender-ref ref="STDOUT" /><!-- FILE -->
</root>
</configuration>
diff --git a/org.eclipse.jubula.rc.rcp.common/src/.keep b/org.eclipse.jubula.rc.rcp.common/src/.keep
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.common/src/.keep
diff --git a/org.eclipse.jubula.rc.rcp.e3.specific/.checkstyle b/org.eclipse.jubula.rc.rcp.e3.specific/.checkstyle
new file mode 100644
index 000000000..f69a865d7
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3.specific/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <fileset name="all" enabled="true" check-config-name="Jubula" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/org.eclipse.jubula.rc.rcp.e3.specific/.classpath b/org.eclipse.jubula.rc.rcp.e3.specific/.classpath
new file mode 100644
index 000000000..2fbb7a23e
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3.specific/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.jubula.rc.rcp.e3.specific/.gitignore b/org.eclipse.jubula.rc.rcp.e3.specific/.gitignore
new file mode 100644
index 000000000..934e0e06f
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3.specific/.gitignore
@@ -0,0 +1,2 @@
+/bin
+/target
diff --git a/org.eclipse.jubula.rc.rcp.e3.specific/.project b/org.eclipse.jubula.rc.rcp.e3.specific/.project
new file mode 100644
index 000000000..be803cb8c
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3.specific/.project
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.jubula.rc.rcp.e3.specific</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+ <linkedResources>
+ <link>
+ <name>.settings</name>
+ <type>2</type>
+ <locationURI>WORKSPACE_LOC/jubula/org.eclipse.jubula.project.configuration/settings/1.4</locationURI>
+ </link>
+ </linkedResources>
+</projectDescription>
diff --git a/org.eclipse.jubula.rc.rcp.e3.specific/META-INF/MANIFEST.MF b/org.eclipse.jubula.rc.rcp.e3.specific/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..719917431
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3.specific/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Jubula Remote Control - RCP e3 specific
+Bundle-SymbolicName: org.eclipse.jubula.rc.rcp.e3.specific;singleton:=true
+Bundle-Version: 2.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: Eclipse Jubula
+Require-Bundle: org.eclipse.ui;bundle-version="[3.2.0,3.100.0)",
+ org.eclipse.core.runtime;bundle-version="[3.2.0,3.100.0)",
+ org.eclipse.jubula.rc.rcp.e3;bundle-version="[2.0.0,3.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/org.eclipse.jubula.rc.rcp.e3.specific/about.html b/org.eclipse.jubula.rc.rcp.e3.specific/about.html
new file mode 100644
index 000000000..2a7ba0118
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3.specific/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 22, 2011</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.jubula.rc.rcp.e3.specific/build.properties b/org.eclipse.jubula.rc.rcp.e3.specific/build.properties
new file mode 100644
index 000000000..60dc36a34
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3.specific/build.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2004, 2013 BREDEX GmbH.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+bin.includes = about.html,\
+ META-INF/,\
+ plugin.xml,\
+ .
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+javacSource = 1.4
+javacTarget = 1.4
+javacErrors.. = -assertIdentifier
diff --git a/org.eclipse.jubula.rc.rcp/plugin.xml b/org.eclipse.jubula.rc.rcp.e3.specific/plugin.xml
index e9c7167bb..423cde0ab 100644
--- a/org.eclipse.jubula.rc.rcp/plugin.xml
+++ b/org.eclipse.jubula.rc.rcp.e3.specific/plugin.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.2"?><!--
- Copyright (c) 2004, 2010 BREDEX GmbH.
+<?eclipse version="3.2"?>
+<!--
+ Copyright (c) 2004, 2013 BREDEX GmbH.
All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License v1.0
which accompanies this distribution, and is available at
@@ -8,7 +9,7 @@
-->
<plugin>
- <extension point="org.eclipse.ui.startup">
- <startup class="org.eclipse.jubula.rc.rcp.accessor.Startup"/>
- </extension>
+ <extension point="org.eclipse.ui.startup">
+ <startup class="org.eclipse.jubula.rc.rcp.e3.specific.Startup"/>
+ </extension>
</plugin>
diff --git a/org.eclipse.jubula.rc.rcp.e3.specific/pom.xml b/org.eclipse.jubula.rc.rcp.e3.specific/pom.xml
new file mode 100644
index 000000000..48519a48a
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3.specific/pom.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.jubula.releng.server.rc.rcp</artifactId>
+ <groupId>org.eclipse.jubula</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.jubula.releng.server.rc.rcp</relativePath>
+ </parent>
+ <groupId>org.eclipse.jubula</groupId>
+ <artifactId>org.eclipse.jubula.rc.rcp.e3.specific</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/org.eclipse.jubula.rc.rcp.e3.specific/src/org/eclipse/jubula/rc/rcp/e3/specific/Startup.java b/org.eclipse.jubula.rc.rcp.e3.specific/src/org/eclipse/jubula/rc/rcp/e3/specific/Startup.java
new file mode 100644
index 000000000..f64bc0544
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3.specific/src/org/eclipse/jubula/rc/rcp/e3/specific/Startup.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2013 BREDEX GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BREDEX GmbH - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.jubula.rc.rcp.e3.specific;
+
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.internal.WorkbenchPartReference;
+
+import org.eclipse.jubula.rc.rcp.e3.accessor.E3Startup;
+
+/**
+ * Inherits everything from the parent class.
+ *
+ * @author BREDEX GmbH
+ * @created Dec 17, 2012
+ */
+public class Startup extends E3Startup {
+ /**
+ * Gets the control of the tool bar from the pane of the workbench
+ * part reference in Eclipse 3.x.
+ * @param workbenchPartRef The workbench part reference.
+ * @return The control of the tool bar from the given workbench part reference
+ * or null, if it does not exist.
+ */
+ public Control getToolBarFromWorkbenchPartRef(
+ WorkbenchPartReference workbenchPartRef) {
+ return workbenchPartRef.getPane().getToolBar();
+ }
+}
diff --git a/org.eclipse.jubula.rc.rcp.e3/.checkstyle b/org.eclipse.jubula.rc.rcp.e3/.checkstyle
new file mode 100644
index 000000000..f69a865d7
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <fileset name="all" enabled="true" check-config-name="Jubula" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/org.eclipse.jubula.rc.rcp.e3/.classpath b/org.eclipse.jubula.rc.rcp.e3/.classpath
new file mode 100644
index 000000000..2fbb7a23e
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.jubula.rc.rcp.e3/.gitignore b/org.eclipse.jubula.rc.rcp.e3/.gitignore
new file mode 100644
index 000000000..61e26dab5
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3/.gitignore
@@ -0,0 +1,3 @@
+/bin
+/target
+/lib
diff --git a/org.eclipse.jubula.rc.rcp.e3/.project b/org.eclipse.jubula.rc.rcp.e3/.project
new file mode 100644
index 000000000..0d0d70ece
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3/.project
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.jubula.rc.rcp.e3</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+ <linkedResources>
+ <link>
+ <name>.settings</name>
+ <type>2</type>
+ <locationURI>WORKSPACE_LOC/jubula/org.eclipse.jubula.project.configuration/settings/1.4</locationURI>
+ </link>
+ </linkedResources>
+</projectDescription>
diff --git a/org.eclipse.jubula.rc.rcp.e3/META-INF/MANIFEST.MF b/org.eclipse.jubula.rc.rcp.e3/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..57eb3e7a5
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Jubula Remote Control - RCP e3
+Bundle-SymbolicName: org.eclipse.jubula.rc.rcp.e3; singleton:=true
+Bundle-Version: 2.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: Eclipse Jubula
+Require-Bundle: org.eclipse.ui;bundle-version="[3.3.0,5.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.3.0,5.0.0)",
+ org.eclipse.jubula.rc.rcp.common;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.jubula.rc.rcp.swt;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.draw2d;bundle-version="[3.0.0,5.0.0)";resolution:=optional,
+ org.eclipse.gef;bundle-version="[3.0.0,5.0.0)";resolution:=optional
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Export-Package: org.eclipse.jubula.rc.rcp.e3.accessor
diff --git a/org.eclipse.jubula.rc.rcp.e3/about.html b/org.eclipse.jubula.rc.rcp.e3/about.html
new file mode 100644
index 000000000..2a7ba0118
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 22, 2011</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.jubula.rc.rcp.e3/build.properties b/org.eclipse.jubula.rc.rcp.e3/build.properties
new file mode 100644
index 000000000..abe4bd652
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3/build.properties
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2004, 2013 BREDEX GmbH.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+bin.includes = about.html,\
+ META-INF/,\
+ .
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+javacSource = 1.4
+javacTarget = 1.4
+javacErrors.. = -assertIdentifier
diff --git a/org.eclipse.jubula.rc.rcp.e3/pom.xml b/org.eclipse.jubula.rc.rcp.e3/pom.xml
new file mode 100644
index 000000000..45706880e
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3/pom.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.jubula.releng.server.rc.rcp</artifactId>
+ <groupId>org.eclipse.jubula</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.jubula.releng.server.rc.rcp</relativePath>
+ </parent>
+ <artifactId>org.eclipse.jubula.rc.rcp.e3</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/accessor/E3ComponentNamer.java b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/accessor/E3ComponentNamer.java
new file mode 100644
index 000000000..9da5bbdf1
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/accessor/E3ComponentNamer.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2013 BREDEX GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BREDEX GmbH - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.jubula.rc.rcp.e3.accessor;
+
+import org.eclipse.jface.preference.PreferenceManager;
+import org.eclipse.jubula.rc.rcp.swt.aut.RcpSwtComponentNamer;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * This listener assigns names to components as they become visible. The
+ * assigned name is determined by supporting data of the component and its
+ * surroundings.
+ *
+ * @author BREDEX GmbH
+ * @created Oct 19, 2007
+ */
+public class E3ComponentNamer extends RcpSwtComponentNamer {
+
+ /**
+ * {@inheritDoc}
+ */
+ protected PreferenceManager getPreferenceManager() {
+ return PlatformUI.getWorkbench()
+ .getPreferenceManager();
+ }
+}
diff --git a/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/accessor/E3Startup.java b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/accessor/E3Startup.java
new file mode 100644
index 000000000..5a48a6559
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/accessor/E3Startup.java
@@ -0,0 +1,410 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2010 BREDEX GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BREDEX GmbH - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.jubula.rc.rcp.e3.accessor;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jubula.rc.common.AUTServer;
+import org.eclipse.jubula.rc.common.tester.adapter.factory.GUIAdapterFactoryRegistry;
+import org.eclipse.jubula.rc.rcp.e3.gef.inspector.GefInspectorListenerAppender;
+import org.eclipse.jubula.rc.rcp.e3.gef.listener.GefPartListener;
+import org.eclipse.jubula.rc.rcp.swt.aut.RcpSwtComponentNamer;
+import org.eclipse.jubula.rc.swt.SwtAUTServer;
+import org.eclipse.jubula.rc.swt.tester.adapter.factory.SWTAdapterFactory;
+import org.eclipse.jubula.tools.constants.AutConfigConstants;
+import org.eclipse.jubula.tools.constants.CommandConstants;
+import org.eclipse.jubula.tools.utils.EnvironmentUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.CoolBar;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IStartup;
+import org.eclipse.ui.IViewReference;
+import org.eclipse.ui.IWindowListener;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.internal.WorkbenchPartReference;
+
+
+/**
+ * Initializes an AUT Server in a plug-in context.
+ *
+ * It is very important to avoid referencing GEF (org.eclipse.gef.*) classes
+ * directly from this class, as this will cause Class Not Found errors if the
+ * AUT does not contain the GEF plug-in.
+ *
+ * @author BREDEX GmbH
+ * @created Oct 5, 2007
+ */
+public abstract class E3Startup implements IStartup {
+
+ /** bundle ID for Eclipse Graphical Editing Framework (GEF) */
+ private static final String GEF_BUNDLE_ID = "org.eclipse.gef"; //$NON-NLS-1$
+
+ /** Single listener instance */
+ private IPartListener2 m_partNamingListener =
+ new PartNamingListener();
+
+ /**
+ * This listener
+ */
+ private IPartListener2 m_gefListener = null;
+
+ /**
+ * Assigns the controls (Composites) of Parts unique names based on
+ * their partId.
+ *
+ * @author BREDEX GmbH
+ * @created Oct 5, 2007
+ */
+ protected class PartNamingListener implements IPartListener2 {
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public void partActivated(IWorkbenchPartReference partRef) {
+ // Do nothing
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public void partBroughtToTop(IWorkbenchPartReference partRef) {
+ // Do nothing
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public void partClosed(IWorkbenchPartReference partRef) {
+ // Do nothing
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public void partDeactivated(IWorkbenchPartReference partRef) {
+ // Do nothing
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public void partHidden(IWorkbenchPartReference partRef) {
+ // Do nothing
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public void partInputChanged(IWorkbenchPartReference partRef) {
+ // Do nothing
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public void partOpened(IWorkbenchPartReference partRef) {
+ if (partRef instanceof WorkbenchPartReference) {
+ WorkbenchPartReference workbenchPartRef =
+ (WorkbenchPartReference)partRef;
+ // Get pane contents and part id
+ Control partContent =
+ workbenchPartRef.getPane().getControl();
+
+ if (RcpSwtComponentNamer.hasWidgetToBeNamed(partContent)) {
+
+ // Name pane control based on part
+ String partId = workbenchPartRef.getId();
+
+ // Append secondary id, if necessary
+ if (partRef instanceof IViewReference) {
+ String secondaryId =
+ ((IViewReference)partRef).getSecondaryId();
+ if (secondaryId != null) {
+ partId += "_" + secondaryId; //$NON-NLS-1$
+ }
+ }
+
+ if (partId == null || partId.trim().length() == 0) {
+ // Don't assign a name if the id is unusable
+ return;
+ }
+ RcpSwtComponentNamer.setComponentName(partContent, partId);
+
+ // Assign a corresponding id to the part's toolbar, if
+ // possible/usable.
+ final Control partToolbar =
+ getToolBarFromWorkbenchPartRef(workbenchPartRef);
+ final String finalPartId = partId;
+ if (partToolbar != null) {
+ RcpSwtComponentNamer.setToolbarComponentName(
+ partToolbar, finalPartId);
+ }
+
+ // A repaint is required in order for the aut component
+ // hierarchy to notice the change.
+ Shell shell = PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getShell();
+ repaintToolbars(shell);
+ }
+ }
+
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public void partVisible(IWorkbenchPartReference partRef) {
+ partOpened(partRef);
+ }
+
+ }
+
+ /**
+ * This abstract method is a place holder for different implementations
+ * depending on Eclipse e3.x and e4.x running in compatibility mode
+ * to get the SWT control form a given workbench part reference.
+ * @param workbenchPartRef The workbench part reference.
+ * @return The control of the tool bar from the given workbench part reference
+ * or null, if it does not exist.
+ * @see org.eclipse.jubula.rc.rcp.e3.specific#Startup
+ * @see org.eclipse.jubula.rc.rcp.e4.compat#Startup
+ */
+ public abstract Control getToolBarFromWorkbenchPartRef(
+ WorkbenchPartReference workbenchPartRef);
+
+ /**
+ * {@inheritDoc}
+ */
+ public void earlyStartup() {
+ final Properties envVars =
+ EnvironmentUtils.getProcessEnvironment();
+
+ if (getValue(AutConfigConstants.AUT_AGENT_HOST, envVars) != null) {
+ final IWorkbench workbench = PlatformUI.getWorkbench();
+ final Display display = workbench.getDisplay();
+ initAutServer(display, envVars);
+
+ display.syncExec(new Runnable() {
+ public void run() {
+ // add GEF listeners (and listener appenders) for GEF, if available
+ if (Platform.getBundle(E3Startup.GEF_BUNDLE_ID) != null) {
+ m_gefListener = new GefPartListener();
+ AUTServer.getInstance().addInspectorListenerAppender(
+ new GefInspectorListenerAppender());
+ }
+
+ // add naming listener
+ E3ComponentNamer namer = new E3ComponentNamer();
+ display.addFilter(SWT.Paint, namer);
+ display.addFilter(SWT.Activate, namer);
+
+ // Add window listener
+ addWindowListener(workbench);
+
+ IWorkbenchWindow window =
+ workbench.getActiveWorkbenchWindow();
+ if (window != null) {
+ // Add part listeners
+ addPartListeners(window);
+
+ // Handle existing parts
+ IWorkbenchPage [] pages = window.getPages();
+ for (int i = 0; i < pages.length; i++) {
+ IEditorReference[] editorRefs =
+ pages[i].getEditorReferences();
+ IViewReference[] viewRefs =
+ pages[i].getViewReferences();
+ for (int j = 0; j < editorRefs.length; j++) {
+ m_partNamingListener.partOpened(editorRefs[j]);
+ if (m_gefListener != null) {
+ m_gefListener.partOpened(editorRefs[j]);
+ }
+ }
+ for (int k = 0; k < viewRefs.length; k++) {
+ m_partNamingListener.partOpened(viewRefs[k]);
+ if (m_gefListener != null) {
+ m_gefListener.partOpened(viewRefs[k]);
+ }
+ }
+ }
+
+ // If a shell already exists, make sure that we get another
+ // chance to immediately add/use our naming listeners.
+ Shell mainShell = window.getShell();
+ if (mainShell != null && !mainShell.isDisposed()) {
+ repaintToolbars(mainShell);
+ }
+ }
+ }
+
+ });
+ // Registering the AdapterFactory for SWT at the registry
+ GUIAdapterFactoryRegistry.getInstance()
+ .registerFactory(new SWTAdapterFactory());
+ // add listener to AUT
+ AUTServer.getInstance().addToolKitEventListenerToAUT();
+
+ }
+
+ }
+
+ /**
+ * Initializes the AUT Server for the host application.
+ *
+ * @param display The Display to use for the AUT Server.
+ * @param envVars Environment variables to consult in configuring the
+ * AUT Server.
+ */
+ private void initAutServer(Display display, Properties envVars) {
+ ((SwtAUTServer)AUTServer.getInstance(CommandConstants
+ .AUT_SWT_SERVER)).setDisplay(display);
+ AUTServer.getInstance().setAutAgentHost(getValue(
+ AutConfigConstants.AUT_AGENT_HOST, envVars));
+ AUTServer.getInstance().setAutAgentPort(getValue(
+ AutConfigConstants.AUT_AGENT_PORT, envVars));
+ AUTServer.getInstance().setAutID(getValue(
+ AutConfigConstants.AUT_NAME, envVars));
+
+ AUTServer.getInstance().start(true);
+ }
+
+ /**
+ * Adds a window listener to the given workbench. This listener adds a
+ * part naming listener to opening windows.
+ *
+ * @param workbench The workbench to which the listener will be added.
+ */
+ private void addWindowListener(IWorkbench workbench) {
+ workbench.addWindowListener(new IWindowListener() {
+
+ public void windowActivated(IWorkbenchWindow window) {
+ addPartListeners(window);
+ }
+
+ public void windowClosed(IWorkbenchWindow window) {
+ // Do nothing
+ }
+
+ public void windowDeactivated(IWorkbenchWindow window) {
+ // Do nothing
+ }
+
+ public void windowOpened(IWorkbenchWindow window) {
+ addPartListeners(window);
+ }
+
+ });
+ }
+
+ /**
+ * Fires a paint event on all Toolbars and Coolbars within the given shell.
+ *
+ * @param mainShell The shell to search for Coolbars and Toolbars.
+ */
+ public static void repaintToolbars(Shell mainShell) {
+ List toolbarList = new ArrayList();
+ getToolbars(mainShell, toolbarList);
+ Iterator iter = toolbarList.iterator();
+ while (iter.hasNext()) {
+ Control toolbar = (Control)iter.next();
+ toolbar.update();
+ toolbar.redraw();
+ toolbar.update();
+ }
+ }
+
+ /**
+ * Adds all Coolbars and Toolbars within the given composite to the given
+ * list. The search is is also performed recursively on children of the
+ * given composite.
+ *
+ * @param composite The composite to search.
+ * @param toolbarList The list to which found Toolbars and Coolbars will
+ * be added.
+ */
+ public static void getToolbars(Composite composite,
+ List toolbarList) {
+
+ if (composite != null && !composite.isDisposed()) {
+ Control [] children = composite.getChildren();
+ for (int i = 0; i < children.length; i++) {
+ if (children[i] instanceof Composite) {
+ getToolbars((Composite)children[i], toolbarList);
+ }
+ try {
+ if (children[i] instanceof ToolBar
+ || children[i] instanceof CoolBar) {
+
+ toolbarList.add(children[i]);
+ }
+ } catch (NoClassDefFoundError e) {
+ // we may be running in eRCP which doesn't know about
+ // toolbars, so we just ignore this
+ }
+ }
+ }
+ }
+
+ /**
+ * Add part listeners to the given window.
+ *
+ * @param window The window to which the listeners will be added.
+ */
+ private void addPartListeners(IWorkbenchWindow window) {
+ window.getPartService().addPartListener(m_partNamingListener);
+ if (m_gefListener != null) {
+ window.getPartService().addPartListener(m_gefListener);
+ }
+ }
+
+ /**
+ * Returns the value for a given property. First, <code>envVars</code>
+ * is checked for the given property. If this
+ * property cannot be found there, the
+ * Java System Properties will be checked. If the property is not
+ * found there, <code>null</code> will be returned.
+ *
+ * @param envVars The first source to check for the given property.
+ * @param propName The name of the property for which to find the value.
+ * @return The value for the given property name, or <code>null</code> if
+ * given property name cannot be found.
+ */
+ private String getValue(String propName, Properties envVars) {
+ String value =
+ envVars.getProperty(propName);
+ if (value == null) {
+ value = System.getProperty(propName);
+ }
+ return value;
+ }
+}
diff --git a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/factory/DefaultEditPartAdapterFactory.java b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/factory/DefaultEditPartAdapterFactory.java
index 6f046e260..21a71612a 100644
--- a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/factory/DefaultEditPartAdapterFactory.java
+++ b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/factory/DefaultEditPartAdapterFactory.java
@@ -8,18 +8,18 @@
* Contributors:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
-package org.eclipse.jubula.rc.rcp.gef.factory;
+package org.eclipse.jubula.rc.rcp.e3.gef.factory;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.core.runtime.Platform;
import org.eclipse.gef.EditPart;
-import org.eclipse.jubula.rc.rcp.gef.identifier.ClassCountEditPartIdentifier;
-import org.eclipse.jubula.rc.rcp.gef.identifier.IEditPartIdentifier;
+import org.eclipse.jubula.rc.rcp.e3.gef.identifier.ClassCountEditPartIdentifier;
+import org.eclipse.jubula.rc.rcp.e3.gef.identifier.IEditPartIdentifier;
/**
- * The default adapter factory for getting adapters from EditPart to
- * IEditPartIdentifier.
+ * The default adapter factory for getting adapters from EditPart to
+ * IEditPartIdentifier.
*
* @author BREDEX GmbH
* @created May 13, 2009
@@ -27,9 +27,9 @@ import org.eclipse.jubula.rc.rcp.gef.identifier.IEditPartIdentifier;
public class DefaultEditPartAdapterFactory implements IAdapterFactory {
/** the types managed by this factory */
- private static final Class [] ADAPTABLE_TYPES =
+ private static final Class [] ADAPTABLE_TYPES =
new Class [] {EditPart.class};
-
+
/**
* {@inheritDoc}
*/
@@ -51,11 +51,11 @@ public class DefaultEditPartAdapterFactory implements IAdapterFactory {
}
/**
- *
+ *
* @param editPart The EditPart for which to find the IEditPartIdentifier.
* @return the IEditPartIdentifier for the given EditPart. First, an attempt
* is made to load this from a registered adapter factory. If this
- * does not provide an adapter, then this adapter factory is
+ * does not provide an adapter, then this adapter factory is
* queried, providing a default implementation.
*/
public static IEditPartIdentifier loadFigureIdentifier(EditPart editPart) {
@@ -63,11 +63,11 @@ public class DefaultEditPartAdapterFactory implements IAdapterFactory {
// null-safe
return null;
}
- IEditPartIdentifier editPartIdentifier =
+ IEditPartIdentifier editPartIdentifier =
(IEditPartIdentifier)Platform.getAdapterManager().loadAdapter(
editPart, IEditPartIdentifier.class.getName());
// if (editPartIdentifier == null) {
-// AccessibleEditPart accessible =
+// AccessibleEditPart accessible =
// (AccessibleEditPart)Platform.getAdapterManager().loadAdapter(
// editPart, AccessibleEditPart.class.getName());
// AccessibleEvent e = new AccessibleEvent(IEditPartIdentifier.class);
@@ -79,7 +79,7 @@ public class DefaultEditPartAdapterFactory implements IAdapterFactory {
if (editPartIdentifier == null) {
editPartIdentifier = new ClassCountEditPartIdentifier(editPart);
}
-
+
return editPartIdentifier;
}
}
diff --git a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/identifier/ClassCountEditPartIdentifier.java b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/identifier/ClassCountEditPartIdentifier.java
index 6570f423f..1376beb74 100644
--- a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/identifier/ClassCountEditPartIdentifier.java
+++ b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/identifier/ClassCountEditPartIdentifier.java
@@ -8,7 +8,7 @@
* Contributors:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
-package org.eclipse.jubula.rc.rcp.gef.identifier;
+package org.eclipse.jubula.rc.rcp.e3.gef.identifier;
import java.util.HashMap;
import java.util.Iterator;
@@ -17,7 +17,7 @@ import java.util.Map;
import org.eclipse.gef.EditPart;
/**
- * Default implementation of {@link IEditPartIdentifier}. The identifier is
+ * Default implementation of {@link IEditPartIdentifier}. The identifier is
* the name of the class of the {@link EditPart} plus a sequential number.
*
* @author BREDEX GmbH
@@ -27,16 +27,16 @@ public class ClassCountEditPartIdentifier implements IEditPartIdentifier {
/** the EditPart for which identifiers can be generated */
private EditPart m_editPart;
-
+
/**
* Constructor
- *
+ *
* @param editPart The EditPart for which identifiers can be generated.
*/
public ClassCountEditPartIdentifier(EditPart editPart) {
m_editPart = editPart;
}
-
+
/**
* {@inheritDoc}
*/
diff --git a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/identifier/IEditPartIdentifier.java b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/identifier/IEditPartIdentifier.java
index f19049dfd..f386f260f 100644
--- a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/identifier/IEditPartIdentifier.java
+++ b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/identifier/IEditPartIdentifier.java
@@ -8,14 +8,14 @@
* Contributors:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
-package org.eclipse.jubula.rc.rcp.gef.identifier;
+package org.eclipse.jubula.rc.rcp.e3.gef.identifier;
import java.util.Map;
/**
- * Encapsulates the ability to generate unique IDs for a given
+ * Encapsulates the ability to generate unique IDs for a given
* {@link org.eclipse.gef.EditPart}.
*
* @author BREDEX GmbH
@@ -24,16 +24,16 @@ import java.util.Map;
public interface IEditPartIdentifier {
/**
- *
+ *
* @return a String uniquely identifying the EditPart.
*/
public String getIdentifier();
/**
- *
- * @return a map that correlates identifiers (<code>String</code>s) with
+ *
+ * @return a map that correlates identifiers (<code>String</code>s) with
* <code>ConnectionAnchor</code>s.
*/
public Map getConnectionAnchors();
-
+
}
diff --git a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/identifier/StaticEditPartIdentifier.java b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/identifier/StaticEditPartIdentifier.java
index 6aa8fea3d..8a4ab9a12 100644
--- a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/identifier/StaticEditPartIdentifier.java
+++ b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/identifier/StaticEditPartIdentifier.java
@@ -8,14 +8,14 @@
* Contributors:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
-package org.eclipse.jubula.rc.rcp.gef.identifier;
+package org.eclipse.jubula.rc.rcp.e3.gef.identifier;
import java.util.Collections;
import java.util.Map;
/**
- * Provides a static String as an identifier. This class does not take the
+ * Provides a static String as an identifier. This class does not take the
* state of the {@link org.eclipse.gef.EditPart} into account, so it is useful
* for stateless {@link org.eclipse.gef.EditPart}s (ex. containers).
*
@@ -26,16 +26,16 @@ public class StaticEditPartIdentifier implements IEditPartIdentifier {
/** the identifier that will always be returned */
private String m_id;
-
+
/**
* Constructor
- *
+ *
* @param id The static identifier String that will always be returned.
*/
public StaticEditPartIdentifier(String id) {
m_id = id;
}
-
+
/**
* {@inheritDoc}
*/
diff --git a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/implclasses/FigureCanvasImplClass.java b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/implclasses/FigureCanvasImplClass.java
index 03ac4d485..49ac0983f 100644
--- a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/implclasses/FigureCanvasImplClass.java
+++ b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/implclasses/FigureCanvasImplClass.java
@@ -8,7 +8,7 @@
* Contributors:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
-package org.eclipse.jubula.rc.rcp.gef.implclasses;
+package org.eclipse.jubula.rc.rcp.e3.gef.implclasses;
import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
@@ -36,9 +36,9 @@ import org.eclipse.jubula.rc.common.driver.IRunnable;
import org.eclipse.jubula.rc.common.exception.StepExecutionException;
import org.eclipse.jubula.rc.common.implclasses.MatchUtil;
import org.eclipse.jubula.rc.common.implclasses.Verifier;
-import org.eclipse.jubula.rc.rcp.accessor.Startup;
-import org.eclipse.jubula.rc.rcp.gef.factory.DefaultEditPartAdapterFactory;
-import org.eclipse.jubula.rc.rcp.gef.identifier.IEditPartIdentifier;
+import org.eclipse.jubula.rc.rcp.e3.gef.factory.DefaultEditPartAdapterFactory;
+import org.eclipse.jubula.rc.rcp.e3.gef.identifier.IEditPartIdentifier;
+import org.eclipse.jubula.rc.rcp.e3.gef.listener.GefPartListener;
import org.eclipse.jubula.rc.swt.driver.DragAndDropHelperSwt;
import org.eclipse.jubula.rc.swt.implclasses.AbstractControlImplClass;
import org.eclipse.jubula.rc.swt.implclasses.MenuUtil;
@@ -57,14 +57,14 @@ import org.eclipse.swt.widgets.Control;
*/
public class FigureCanvasImplClass extends AbstractControlImplClass {
- /**
- * the viewer that contains the EditParts corresponding to the FigureCanvas
+ /**
+ * the viewer that contains the EditParts corresponding to the FigureCanvas
*/
private GraphicalViewer m_viewer = null;
-
+
/** the composite in which the IFigures are displayed */
private Composite m_composite = null;
-
+
/**
* {@inheritDoc}
*/
@@ -73,7 +73,7 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
}
/**
- *
+ *
* @return the viewer associated with the canvas to test.
*/
private GraphicalViewer getViewer() {
@@ -81,7 +81,7 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
}
/**
- *
+ *
* @return the control for the canvas to test.
*/
private Control getViewerControl() {
@@ -89,7 +89,7 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
}
/**
- *
+ *
* @return the root edit part of the viewer.
*/
private RootEditPart getRootEditPart() {
@@ -97,7 +97,7 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
}
/**
- *
+ *
* @return the root of the palette viewer (tool palette).
*/
private RootEditPart getPaletteRoot() {
@@ -105,10 +105,10 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
}
/**
- *
+ *
* @param textPath The path to the tool.
* @param operator The operator used for matching.
- * @return the EditPart found at the end of the given path. Returns
+ * @return the EditPart found at the end of the given path. Returns
* <code>null</code> if no EditPart can be found for the given path
* or if the EditPart found is not a GraphicalEditPart.
*/
@@ -117,13 +117,13 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
final String[] pathItems = MenuUtil.splitPath(textPath);
boolean isExisting = true;
-
+
EditPart currentEditPart = getPaletteRoot().getContents();
-
+
for (int i = 0; i < pathItems.length && currentEditPart != null; i++) {
List effectiveChildren = currentEditPart.getChildren();
-
- EditPart [] children =
+
+ EditPart [] children =
(EditPart [])effectiveChildren.toArray(
new EditPart[effectiveChildren.size()]);
boolean itemFound = false;
@@ -131,7 +131,7 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
Object model = children[j].getModel();
if (model instanceof PaletteEntry) {
String entryLabel = ((PaletteEntry)model).getLabel();
- if (entryLabel != null
+ if (entryLabel != null
&& MatchUtil.getInstance().match(
entryLabel, pathItems[i], operator)) {
itemFound = true;
@@ -143,14 +143,14 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
isExisting = false;
break;
}
-
+
}
-
- return isExisting && currentEditPart instanceof GraphicalEditPart
+
+ return isExisting && currentEditPart instanceof GraphicalEditPart
? (GraphicalEditPart)currentEditPart : null;
-
+
}
-
+
/**
* {@inheritDoc}
*/
@@ -168,27 +168,28 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
FigureCanvas figureCanvas = (FigureCanvas)graphicsComponent;
Composite parent = figureCanvas;
while (parent != null
- && !(parent.getData(Startup.TEST_GEF_VIEWER_DATA_KEY)
- instanceof GraphicalViewer)) {
+ && !(parent.getData(
+ GefPartListener.TEST_GEF_VIEWER_DATA_KEY)
+ instanceof GraphicalViewer)) {
parent = parent.getParent();
}
-
+
if (parent != null) {
m_composite = parent;
- m_viewer =
+ m_viewer =
(GraphicalViewer)parent.getData(
- Startup.TEST_GEF_VIEWER_DATA_KEY);
+ GefPartListener.TEST_GEF_VIEWER_DATA_KEY);
}
return null;
}
-
+
});
}
/**
* Checks whether the figure for the EditPart for the given path exists and
* is visible.
- *
+ *
* @param textPath The path to the figure.
* @param operator The operator used for matching.
* @param exists Whether the figure is expected to exist.
@@ -196,31 +197,31 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
public void gdCheckFigureExists(
String textPath, String operator, boolean exists) {
- boolean isExisting =
- findFigure(findEditPart(textPath, operator)) != null;
+ boolean isExisting =
+ findFigure(findEditPart(textPath, operator)) != null;
if (!isExisting) {
// See if there's a connection anchor at the given path
isExisting = findConnectionAnchor(textPath, operator) != null;
}
-
+
Verifier.equals(exists, isExisting);
}
/**
* Checks the given property of the figure at the given path.
- *
+ *
* @param textPath The path to the figure.
* @param textPathOperator The operator used for matching the text path.
* @param propertyName The name of the property
* @param expectedPropValue The value of the property as a string
* @param valueOperator The operator used to verify
*/
- public void gdVerifyFigureProperty(String textPath,
- String textPathOperator, final String propertyName,
+ public void gdVerifyFigureProperty(String textPath,
+ String textPathOperator, final String propertyName,
String expectedPropValue, String valueOperator) {
- final IFigure figure =
+ final IFigure figure =
findFigure(findEditPart(textPath, textPathOperator));
if (figure == null) {
throw new StepExecutionException(
@@ -236,32 +237,32 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
return PropertyUtils.getProperty(figure, propertyName);
} catch (IllegalAccessException e) {
throw new StepExecutionException(
- e.getMessage(),
+ e.getMessage(),
EventFactory.createActionError(
TestErrorEvent.PROPERTY_NOT_ACCESSABLE));
} catch (InvocationTargetException e) {
throw new StepExecutionException(
- e.getMessage(),
+ e.getMessage(),
EventFactory.createActionError(
TestErrorEvent.PROPERTY_NOT_ACCESSABLE));
} catch (NoSuchMethodException e) {
throw new StepExecutionException(
- e.getMessage(),
+ e.getMessage(),
EventFactory.createActionError(
TestErrorEvent.PROPERTY_NOT_ACCESSABLE));
}
}
-
+
});
final String propToStr = String.valueOf(prop);
Verifier.match(propToStr, expectedPropValue, valueOperator);
-
+
}
-
+
/**
* Checks whether the tool for the given path exists and
* is visible.
- *
+ *
* @param textPath The path to the figure.
* @param operator The operator used for matching.
* @param exists Whether the figure is expected to exist.
@@ -269,35 +270,35 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
public void gdCheckToolExists(
String textPath, String operator, boolean exists) {
- boolean isExisting = findPaletteFigure(textPath, operator) != null;
-
+ boolean isExisting = findPaletteFigure(textPath, operator) != null;
+
Verifier.equals(exists, isExisting);
}
/**
* Finds and clicks the figure for the given path.
- *
+ *
* @param textPath The path to the figure.
* @param operator The operator used for matching.
* @param count The number of times to click.
* @param button The mouse button to use for the click.
*/
- public void gdClickFigure(String textPath, String operator,
+ public void gdClickFigure(String textPath, String operator,
int count, int button) {
- getRobot().click(getViewerControl(),
- getFigureBoundsChecked(textPath, operator),
+ getRobot().click(getViewerControl(),
+ getFigureBoundsChecked(textPath, operator),
ClickOptions.create().setScrollToVisible(false)
.setClickCount(count).setMouseButton(button));
}
/**
- * Finds and clicks on a connection between a source figure and a
+ * Finds and clicks on a connection between a source figure and a
* target figure.
- *
+ *
* @param sourceTextPath The path to the source figure.
- * @param sourceOperator The operator to use for matching the source
+ * @param sourceOperator The operator to use for matching the source
* figure path.
* @param targetTextPath The path to the target figure.
* @param targetOperator The operator to use for matching the target
@@ -306,22 +307,22 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
* @param button The mouse button to use for the click.
*/
public void gdClickConnection(String sourceTextPath, String sourceOperator,
- String targetTextPath, String targetOperator,
+ String targetTextPath, String targetOperator,
int count, int button) {
- GraphicalEditPart sourceEditPart =
+ GraphicalEditPart sourceEditPart =
findEditPart(sourceTextPath, sourceOperator);
- GraphicalEditPart targetEditPart =
+ GraphicalEditPart targetEditPart =
findEditPart(targetTextPath, targetOperator);
ConnectionEditPart connectionEditPart = null;
-
+
if (sourceEditPart != null) {
List sourceConnectionList = sourceEditPart.getSourceConnections();
- ConnectionEditPart [] sourceConnections =
+ ConnectionEditPart [] sourceConnections =
(ConnectionEditPart [])sourceConnectionList.toArray(
- new ConnectionEditPart[sourceConnectionList.size()]);
- for (int i = 0; i < sourceConnections.length
+ new ConnectionEditPart[sourceConnectionList.size()]);
+ for (int i = 0; i < sourceConnections.length
&& connectionEditPart == null; i++) {
if (sourceConnections[i].getTarget() == targetEditPart) {
connectionEditPart = sourceConnections[i];
@@ -329,10 +330,10 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
}
} else if (targetEditPart != null) {
List targetConnectionList = targetEditPart.getTargetConnections();
- ConnectionEditPart [] targetConnections =
+ ConnectionEditPart [] targetConnections =
(ConnectionEditPart [])targetConnectionList.toArray(
- new ConnectionEditPart[targetConnectionList.size()]);
- for (int i = 0; i < targetConnections.length
+ new ConnectionEditPart[targetConnectionList.size()]);
+ for (int i = 0; i < targetConnections.length
&& connectionEditPart == null; i++) {
if (targetConnections[i].getSource() == targetEditPart) {
connectionEditPart = targetConnections[i];
@@ -351,30 +352,30 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
"No connection could be found for the given " + missingEnd + " figure.", //$NON-NLS-1$ //$NON-NLS-2$
EventFactory.createActionError(TestErrorEvent.NOT_FOUND));
}
-
+
// Scrolling
revealEditPart(connectionEditPart);
if (connectionFigure instanceof Connection) {
- Point midpoint =
+ Point midpoint =
((Connection)connectionFigure).getPoints().getMidpoint();
connectionFigure.translateToAbsolute(midpoint);
- getRobot().click(getViewerControl(), null,
+ getRobot().click(getViewerControl(), null,
ClickOptions.create().setScrollToVisible(false)
- .setClickCount(count).setMouseButton(button),
+ .setClickCount(count).setMouseButton(button),
midpoint.x, true, midpoint.y, true);
} else {
- getRobot().click(getViewerControl(),
- getBounds(connectionFigure),
+ getRobot().click(getViewerControl(),
+ getBounds(connectionFigure),
ClickOptions.create().setScrollToVisible(false)
.setClickCount(count).setMouseButton(button));
}
-
+
}
/**
* Clicks the specified position within the given figure.
- *
+ *
* @param textPath The path to the figure.
* @param operator The operator used for matching.
* @param count amount of clicks
@@ -385,23 +386,23 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
* @param yUnits should y position be pixel or percent values
* @throws StepExecutionException if step execution fails.
*/
- public void gdClickInFigure(String textPath, String operator,
- int count, int button, int xPos, String xUnits,
+ public void gdClickInFigure(String textPath, String operator,
+ int count, int button, int xPos, String xUnits,
int yPos, String yUnits) throws StepExecutionException {
-
- getRobot().click(getViewerControl(),
- getFigureBoundsChecked(textPath, operator),
+
+ getRobot().click(getViewerControl(),
+ getFigureBoundsChecked(textPath, operator),
ClickOptions.create().setScrollToVisible(false)
- .setClickCount(count).setMouseButton(button),
- xPos, xUnits.equalsIgnoreCase(POS_UNIT_PIXEL),
+ .setClickCount(count).setMouseButton(button),
+ xPos, xUnits.equalsIgnoreCase(POS_UNIT_PIXEL),
yPos, yUnits.equalsIgnoreCase(POS_UNIT_PIXEL));
}
/**
- * Simulates the beginning of a Drag. Moves to the specified position
- * within the given figure and stores information related to the drag to
+ * Simulates the beginning of a Drag. Moves to the specified position
+ * within the given figure and stores information related to the drag to
* be used later by a Drop operation.
- *
+ *
* @param textPath The path to the figure.
* @param operator The operator used for matching.
* @param mouseButton the mouse button.
@@ -411,7 +412,7 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
* @param yPos what y position
* @param yUnits should y position be pixel or percent values
*/
- public void gdDragFigure(String textPath, String operator,
+ public void gdDragFigure(String textPath, String operator,
int mouseButton, String modifier, int xPos,
String xUnits, int yPos, String yUnits) {
// Only store the Drag-Information. Otherwise the GUI-Eventqueue
@@ -421,7 +422,7 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
dndHelper.setMouseButton(mouseButton);
dndHelper.setModifier(modifier);
dndHelper.setDragComponent(null);
- gdClickInFigure(textPath, operator, 0, mouseButton,
+ gdClickInFigure(textPath, operator, 0, mouseButton,
xPos, xUnits, yPos, yUnits);
}
@@ -429,7 +430,7 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
* Performs a Drop. Moves to the specified location within the given figure
* and releases the modifier and mouse button pressed by the previous drag
* operation.
- *
+ *
* @param textPath The path to the figure.
* @param operator The operator used for matching.
* @param xPos what x position
@@ -440,11 +441,11 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
* between moving the mouse to the drop point and
* releasing the mouse button
*/
- public void gdDropOnFigure(final String textPath, final String operator,
- final int xPos, final String xUnits, final int yPos,
+ public void gdDropOnFigure(final String textPath, final String operator,
+ final int xPos, final String xUnits, final int yPos,
final String yUnits, int delayBeforeDrop) {
- final DragAndDropHelperSwt dndHelper =
+ final DragAndDropHelperSwt dndHelper =
DragAndDropHelperSwt.getInstance();
final IRobot robot = getRobot();
final String modifier = dndHelper.getModifier();
@@ -458,17 +459,17 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
getEventThreadQueuer().invokeAndWait("gdStartDragFigure", new IRunnable() { //$NON-NLS-1$
public Object run() throws StepExecutionException {
// drag
- robot.mousePress(dndHelper.getDragComponent(), null,
+ robot.mousePress(dndHelper.getDragComponent(), null,
mouseButton);
-
+
shakeMouse();
// drop
- gdClickInFigure(textPath, operator, 0,
+ gdClickInFigure(textPath, operator, 0,
mouseButton, xPos, xUnits, yPos, yUnits);
-
+
return null;
- }
+ }
});
waitBeforeDrop(delayBeforeDrop);
@@ -479,28 +480,28 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
}
/**
- * Returns the bounds for the figure for the given path. If no such
+ * Returns the bounds for the figure for the given path. If no such
* figure can be found, a {@link StepExecutionException} will be thrown.
- *
+ *
* @param textPath The path to the figure.
* @param operator The operator used for matching.
- * @return the bounds of the figure for the given path.
+ * @return the bounds of the figure for the given path.
*/
private Rectangle getFigureBoundsChecked(String textPath, String operator) {
- GraphicalEditPart editPart =
+ GraphicalEditPart editPart =
findEditPart(textPath, operator);
IFigure figure = findFigure(editPart);
ConnectionAnchor anchor = null;
-
+
if (figure == null) {
// Try to find a connection anchor instead
anchor = findConnectionAnchor(textPath, operator);
if (anchor != null) {
final String[] pathItems = MenuUtil.splitPath(textPath);
- final String[] editPartPathItems =
+ final String[] editPartPathItems =
new String[pathItems.length - 1];
System.arraycopy(
- pathItems, 0, editPartPathItems, 0,
+ pathItems, 0, editPartPathItems, 0,
editPartPathItems.length);
editPart = findEditPart(operator, editPartPathItems);
}
@@ -510,31 +511,31 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
EventFactory.createActionError(
TestErrorEvent.NOT_FOUND));
}
-
+
}
// Scrolling
revealEditPart(editPart);
-
+
return figure != null ? getBounds(figure) : getBounds(anchor);
}
/**
* Clicks the tool found at the given path.
- *
+ *
* @param textPath The path to the tool.
* @param operator The operator used for matching.
* @param count The number of times to click.
*/
public void gdSelectTool(String textPath, String operator, int count) {
Control paletteControl = getPaletteControl();
- IFigure figure =
+ IFigure figure =
findPaletteFigureChecked(textPath, operator);
- getRobot().click(paletteControl, getBounds(figure),
+ getRobot().click(paletteControl, getBounds(figure),
ClickOptions.create().setScrollToVisible(false)
.setClickCount(count));
}
-
+
/**
* @return the control associated with the palette viewer.
*/
@@ -543,36 +544,36 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
if (editDomain == null) {
return null;
}
-
+
PaletteViewer paletteViewer = editDomain.getPaletteViewer();
if (paletteViewer == null) {
return null;
}
-
+
return paletteViewer.getControl();
}
/**
- *
+ *
* @param figure The figure for which to find the bounds.
* @return the bounds of the given figure.
*/
private Rectangle getBounds(IFigure figure) {
- org.eclipse.draw2d.geometry.Rectangle figureBounds =
+ org.eclipse.draw2d.geometry.Rectangle figureBounds =
new org.eclipse.draw2d.geometry.Rectangle(figure.getBounds());
-
+
// Take scrolling and zooming into account
figure.translateToAbsolute(figureBounds);
return new Rectangle(
- figureBounds.x, figureBounds.y,
+ figureBounds.x, figureBounds.y,
figureBounds.width, figureBounds.height);
}
/**
- *
+ *
* @param anchor The anchor for which to find the bounds.
- * @return the "bounds" of the given anchor. Since the location of an
+ * @return the "bounds" of the given anchor. Since the location of an
* anchor is defined as a single point, the bounds are a small
* rectangle with that point at the center.
*/
@@ -585,10 +586,10 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
}
/**
- *
+ *
* @param textPath The path to the GraphicalEditPart.
* @param operator The operator used for matching.
- * @return the GraphicalEditPart for the given path. Returns
+ * @return the GraphicalEditPart for the given path. Returns
* <code>null</code> if no EditPart exists for the given path or if
* the found EditPart is not a GraphicalEditPart.
*/
@@ -601,7 +602,7 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
* @param operator The operator used for matching.
* @param pathItems The path to the GraphicalEditPart. Each element in the
* array represents a single segment of the path.
- * @return the GraphicalEditPart for the given path. Returns
+ * @return the GraphicalEditPart for the given path. Returns
* <code>null</code> if no EditPart exists for the given path or if
* the found EditPart is not a GraphicalEditPart.
*/
@@ -609,20 +610,20 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
final String[] pathItems) {
boolean isExisting = true;
EditPart currentEditPart = getRootEditPart().getContents();
-
+
for (int i = 0; i < pathItems.length && currentEditPart != null; i++) {
List effectiveChildren = currentEditPart.getChildren();
- EditPart [] children =
+ EditPart [] children =
(EditPart [])effectiveChildren.toArray(
new EditPart[effectiveChildren.size()]);
boolean itemFound = false;
for (int j = 0; j < children.length && !itemFound; j++) {
- IEditPartIdentifier childFigureIdentifier =
+ IEditPartIdentifier childFigureIdentifier =
DefaultEditPartAdapterFactory.loadFigureIdentifier(
children[j]);
if (childFigureIdentifier != null) {
String figureId = childFigureIdentifier.getIdentifier();
- if (figureId != null
+ if (figureId != null
&& MatchUtil.getInstance().match(
figureId, pathItems[i], operator)) {
itemFound = true;
@@ -634,25 +635,25 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
isExisting = false;
break;
}
-
+
}
-
- return isExisting && currentEditPart instanceof GraphicalEditPart
+
+ return isExisting && currentEditPart instanceof GraphicalEditPart
? (GraphicalEditPart)currentEditPart : null;
}
/**
- *
+ *
* @param textPath The path to the figure.
* @param operator The operator used for matching.
- * @return the figure for the GraphicalEditPart for the given path within
- * the palette. Returns <code>null</code> if no EditPart exists
- * for the given path or if the found EditPart does not have a
+ * @return the figure for the GraphicalEditPart for the given path within
+ * the palette. Returns <code>null</code> if no EditPart exists
+ * for the given path or if the found EditPart does not have a
* figure.
*/
private IFigure findPaletteFigure(String textPath, String operator) {
GraphicalEditPart editPart = findPaletteEditPart(textPath, operator);
-
+
// Scrolling
revealEditPart(editPart);
@@ -660,12 +661,12 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
}
/**
- * Finds and returns the palette figure for the given path. If no such
+ * Finds and returns the palette figure for the given path. If no such
* figure can be found, a {@link StepExecutionException} will be thrown.
- *
+ *
* @param textPath The path to the figure.
* @param operator The operator used for matching.
- * @return the figure for the GraphicalEditPart for the given path within
+ * @return the figure for the GraphicalEditPart for the given path within
* the palette.
*/
private IFigure findPaletteFigureChecked(String textPath, String operator) {
@@ -678,12 +679,12 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
return figure;
}
-
+
/**
- *
+ *
* @param editPart The EditPart for which to find the corresponding figure.
- * @return the (visible) figure corresponding to the given EditPart, or
- * <code>null</code> if no visible figure corresponds to the given
+ * @return the (visible) figure corresponding to the given EditPart, or
+ * <code>null</code> if no visible figure corresponds to the given
* EditPart.
*/
private IFigure findFigure(GraphicalEditPart editPart) {
@@ -699,7 +700,7 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
/**
* Attempts to find a connection anchor at the given textpath.
- *
+ *
* @param textPath The path to the anchor.
* @param operator The operator used for matching.
* @return the anchor found at the given text path, or <code>null</code>
@@ -718,19 +719,19 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
IEditPartIdentifier editPartIdentifier =
DefaultEditPartAdapterFactory.loadFigureIdentifier(editPart);
if (editPartIdentifier != null) {
- Map anchorMap =
+ Map anchorMap =
editPartIdentifier.getConnectionAnchors();
if (anchorMap != null) {
- Iterator anchorMapIter =
+ Iterator anchorMapIter =
anchorMap.keySet().iterator();
while (anchorMapIter.hasNext()) {
Object anchorMapKey = anchorMapIter.next();
- Object anchorMapValue =
+ Object anchorMapValue =
anchorMap.get(anchorMapKey);
if (anchorMapKey instanceof String
&& anchorMapValue instanceof ConnectionAnchor
&& MatchUtil.getInstance().match(
- (String)anchorMapKey, anchorPathItem,
+ (String)anchorMapKey, anchorPathItem,
operator)) {
return (ConnectionAnchor)anchorMapValue;
@@ -742,21 +743,21 @@ public class FigureCanvasImplClass extends AbstractControlImplClass {
return null;
}
-
+
/**
* Reveals the given {@link EditPart} within its viewer.
- *
+ *
* @param editPart the {@link EditPart} to reveal.
*/
private void revealEditPart(final EditPart editPart) {
if (editPart != null) {
getEventThreadQueuer().invokeAndWait(getClass().getName() + ".revealEditPart", new IRunnable() { //$NON-NLS-1$
-
+
public Object run() throws StepExecutionException {
editPart.getViewer().reveal(editPart);
return null;
}
-
+
});
}
}
diff --git a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/inspector/FigureHighlighter.java b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/inspector/FigureHighlighter.java
index 25cff1005..9d269f799 100644
--- a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/inspector/FigureHighlighter.java
+++ b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/inspector/FigureHighlighter.java
@@ -8,7 +8,7 @@
* Contributors:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
-package org.eclipse.jubula.rc.rcp.gef.inspector;
+package org.eclipse.jubula.rc.rcp.e3.gef.inspector;
import java.util.Iterator;
import java.util.Map;
@@ -20,9 +20,9 @@ import org.eclipse.gef.ConnectionEditPart;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.GraphicalViewer;
-import org.eclipse.jubula.rc.rcp.gef.factory.DefaultEditPartAdapterFactory;
-import org.eclipse.jubula.rc.rcp.gef.identifier.IEditPartIdentifier;
-import org.eclipse.jubula.rc.rcp.gef.util.FigureCanvasUtil;
+import org.eclipse.jubula.rc.rcp.e3.gef.factory.DefaultEditPartAdapterFactory;
+import org.eclipse.jubula.rc.rcp.e3.gef.identifier.IEditPartIdentifier;
+import org.eclipse.jubula.rc.rcp.e3.gef.util.FigureCanvasUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseMoveListener;
@@ -43,27 +43,27 @@ public class FigureHighlighter implements MouseMoveListener {
/** the viewer containing figures that can be highlighted */
private GraphicalViewer m_viewer;
-
+
/** the color to use for highlighting */
private Color m_highlightColor;
/** transparency for highlighting */
private int m_highlightAlpha;
-
+
/** the current highlighted bounds */
private Rectangle m_currentBounds;
-
+
/** the pain listener that performs the actual highlighting */
private PaintListener m_paintListener;
-
+
/**
* Constructor
- *
+ *
* @param viewer The viewer containing figures to highlight.
*/
public FigureHighlighter(GraphicalViewer viewer) {
m_viewer = viewer;
- m_highlightColor =
+ m_highlightColor =
viewer.getControl().getDisplay().getSystemColor(SWT.COLOR_BLUE);
m_highlightAlpha = 100;
m_currentBounds = null;
@@ -80,7 +80,7 @@ public class FigureHighlighter implements MouseMoveListener {
e.gc.setBackground(bgColor);
}
}
-
+
};
viewer.getControl().addPaintListener(m_paintListener);
}
@@ -89,9 +89,9 @@ public class FigureHighlighter implements MouseMoveListener {
* {@inheritDoc}
*/
public void mouseMove(MouseEvent e) {
- Point cursorLocation =
+ Point cursorLocation =
new Point(e.x, e.y);
- EditPart editPart =
+ EditPart editPart =
FigureCanvasUtil.findAtCurrentMousePosition(e.display, m_viewer);
if (editPart == m_viewer.getContents().getRoot()
|| editPart == null) {
@@ -99,20 +99,20 @@ public class FigureHighlighter implements MouseMoveListener {
m_currentBounds = null;
m_viewer.getControl().redraw();
}
-
+
return;
}
// Check for connection anchor
- Rectangle anchorBounds =
+ Rectangle anchorBounds =
getConnectionAnchorBounds(
DefaultEditPartAdapterFactory.loadFigureIdentifier(
editPart), cursorLocation);
-
- if (anchorBounds == null
+
+ if (anchorBounds == null
&& editPart instanceof ConnectionEditPart) {
- ConnectionEditPart connEditPart =
+ ConnectionEditPart connEditPart =
(ConnectionEditPart)editPart;
EditPart srcEditPart = connEditPart.getSource();
EditPart targetEditPart = connEditPart.getTarget();
@@ -122,7 +122,7 @@ public class FigureHighlighter implements MouseMoveListener {
if (anchorBounds == null) {
anchorBounds = getConnectionAnchorBounds(
DefaultEditPartAdapterFactory
- .loadFigureIdentifier(targetEditPart),
+ .loadFigureIdentifier(targetEditPart),
cursorLocation);
}
}
@@ -133,19 +133,19 @@ public class FigureHighlighter implements MouseMoveListener {
&& !(editPart instanceof ConnectionEditPart)
&& editPart instanceof GraphicalEditPart) {
IFigure figure = ((GraphicalEditPart)editPart).getFigure();
- org.eclipse.draw2d.geometry.Rectangle figureBounds =
+ org.eclipse.draw2d.geometry.Rectangle figureBounds =
new org.eclipse.draw2d.geometry.Rectangle(figure.getBounds());
figure.translateToAbsolute(figureBounds);
- bounds = new Rectangle(figureBounds.x, figureBounds.y,
+ bounds = new Rectangle(figureBounds.x, figureBounds.y,
figureBounds.width, figureBounds.height);
}
m_currentBounds = bounds;
m_viewer.getControl().redraw();
-
+
}
/**
- *
+ *
* @param editPartIdentifier Provides a list of possible anchors.
* @param cursorLocation The location at which to look for the anchor.
* @return the bounds for the connection anchor at the given location, or
@@ -155,19 +155,19 @@ public class FigureHighlighter implements MouseMoveListener {
IEditPartIdentifier editPartIdentifier, Point cursorLocation) {
if (editPartIdentifier != null) {
- Map anchorMap =
+ Map anchorMap =
editPartIdentifier.getConnectionAnchors();
if (anchorMap != null) {
Iterator iter = anchorMap.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
Object value = anchorMap.get(key);
- if (key instanceof String
+ if (key instanceof String
&& value instanceof ConnectionAnchor) {
- Point refPoint =
+ Point refPoint =
((ConnectionAnchor)value).getReferencePoint();
- // The "bounds" of an anchor is considered to be
+ // The "bounds" of an anchor is considered to be
// 3 pixels in all directions.
Rectangle refBounds = new Rectangle(
refPoint.x - 3, refPoint.y - 3, 7, 7);
@@ -178,7 +178,7 @@ public class FigureHighlighter implements MouseMoveListener {
}
}
}
-
+
return null;
}
@@ -192,5 +192,5 @@ public class FigureHighlighter implements MouseMoveListener {
control.redraw();
}
}
-
+
}
diff --git a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/inspector/GefInspectorListenerAppender.java b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/inspector/GefInspectorListenerAppender.java
index d5eb44325..c880d2f87 100644
--- a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/inspector/GefInspectorListenerAppender.java
+++ b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/inspector/GefInspectorListenerAppender.java
@@ -8,7 +8,7 @@
* Contributors:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
-package org.eclipse.jubula.rc.rcp.gef.inspector;
+package org.eclipse.jubula.rc.rcp.e3.gef.inspector;
import java.util.ArrayList;
import java.util.Collections;
@@ -34,10 +34,10 @@ import org.eclipse.jubula.communication.message.InspectorComponentSelectedMessag
import org.eclipse.jubula.rc.common.AUTServer;
import org.eclipse.jubula.rc.common.listener.IAutListenerAppender;
import org.eclipse.jubula.rc.common.logger.AutServerLogger;
-import org.eclipse.jubula.rc.rcp.accessor.Startup;
-import org.eclipse.jubula.rc.rcp.gef.factory.DefaultEditPartAdapterFactory;
-import org.eclipse.jubula.rc.rcp.gef.identifier.IEditPartIdentifier;
-import org.eclipse.jubula.rc.rcp.gef.util.FigureCanvasUtil;
+import org.eclipse.jubula.rc.rcp.e3.gef.factory.DefaultEditPartAdapterFactory;
+import org.eclipse.jubula.rc.rcp.e3.gef.identifier.IEditPartIdentifier;
+import org.eclipse.jubula.rc.rcp.e3.gef.listener.GefPartListener;
+import org.eclipse.jubula.rc.rcp.e3.gef.util.FigureCanvasUtil;
import org.eclipse.jubula.tools.exception.CommunicationException;
import org.eclipse.jubula.tools.objects.ComponentIdentifier;
import org.eclipse.jubula.tools.objects.IComponentIdentifier;
@@ -52,7 +52,7 @@ import org.eclipse.ui.PlatformUI;
/**
- * Adds listeners for the Inspector function. These listeners will only
+ * Adds listeners for the Inspector function. These listeners will only
* interact with GEF components.
*
* @author BREDEX GmbH
@@ -61,9 +61,9 @@ import org.eclipse.ui.PlatformUI;
public class GefInspectorListenerAppender implements IAutListenerAppender {
/** the logger */
- private static final AutServerLogger LOG =
+ private static final AutServerLogger LOG =
new AutServerLogger(GefInspectorListenerAppender.class);
-
+
/**
* Responsible for adding highlighters to controls and managing those
* highlighters.
@@ -75,7 +75,7 @@ public class GefInspectorListenerAppender implements IAutListenerAppender {
/** mapping from control to figure highlighter */
private Map m_canvasToListener = new HashMap();
-
+
/**
* {@inheritDoc}
*/
@@ -104,10 +104,10 @@ public class GefInspectorListenerAppender implements IAutListenerAppender {
}
m_canvasToListener.clear();
}
-
+
/**
* Adds a figure highlighter to the given canvas.
- *
+ *
* @param canvas The figure canvas entered by the mouse.
*/
private void handleMouseEnter(final FigureCanvas canvas) {
@@ -119,27 +119,27 @@ public class GefInspectorListenerAppender implements IAutListenerAppender {
GraphicalViewer viewer = FigureCanvasUtil.getViewer(canvas);
if (viewer != null) {
if (viewer.getContents() instanceof GraphicalEditPart) {
- FigureHighlighter highlighter =
+ FigureHighlighter highlighter =
new FigureHighlighter(viewer);
m_canvasToListener.put(canvas, highlighter);
canvas.addMouseMoveListener(highlighter);
}
}
}
-
+
}
-
+
/**
* Listens for a mouse click and:
- * 1. deregisters itself and any other provider listeners, and
+ * 1. deregisters itself and any other provider listeners, and
* 2. sends a "component selected" message
- *
+ *
* if that mouse click was over a GEF component.
*
* @author BREDEX GmbH
* @created Jun 11, 2009
*/
- private static class GefInspectorComponentSelectedListener
+ private static class GefInspectorComponentSelectedListener
implements Listener {
/** the appender */
@@ -147,17 +147,17 @@ public class GefInspectorListenerAppender implements IAutListenerAppender {
/**
* Constructor
- *
+ *
* @param highlightAppender The appender to use.
*/
public GefInspectorComponentSelectedListener(
FigureHighlightAppender highlightAppender) {
m_highlightAppender = highlightAppender;
}
-
+
/**
- *
- * @param editPartIdentifier Provides connection anchor IDs and
+ *
+ * @param editPartIdentifier Provides connection anchor IDs and
* locations.
* @param cursorLocation The location at which to search for an
* anchor point.
@@ -169,19 +169,19 @@ public class GefInspectorListenerAppender implements IAutListenerAppender {
IEditPartIdentifier editPartIdentifier, Point cursorLocation) {
if (editPartIdentifier != null) {
- Map anchorMap =
+ Map anchorMap =
editPartIdentifier.getConnectionAnchors();
if (anchorMap != null) {
Iterator iter = anchorMap.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
Object value = anchorMap.get(key);
- if (key instanceof String
+ if (key instanceof String
&& value instanceof ConnectionAnchor) {
- Point refPoint =
+ Point refPoint =
((ConnectionAnchor)value).getReferencePoint();
- // A click is recognized as being "within the
+ // A click is recognized as being "within the
// bounds" of an anchor if it is within 3 pixels
// in any direction.
Rectangle refBounds = new Rectangle(
@@ -193,12 +193,12 @@ public class GefInspectorListenerAppender implements IAutListenerAppender {
}
}
}
-
+
return null;
}
-
+
/**
- *
+ *
* {@inheritDoc}
*/
public void handleEvent(Event event) {
@@ -210,112 +210,113 @@ public class GefInspectorListenerAppender implements IAutListenerAppender {
event.type = SWT.None;
Widget selectedWidget = event.widget;
IComponentIdentifier compId = null;
-
+
if (!(selectedWidget instanceof FigureCanvas)) {
sendIdInfo(compId);
return;
}
- FigureCanvas figureCanvas =
+ FigureCanvas figureCanvas =
(FigureCanvas)selectedWidget;
Composite parent = figureCanvas;
while (parent != null
- && !(parent.getData(Startup.TEST_GEF_VIEWER_DATA_KEY)
- instanceof GraphicalViewer)) {
+ && !(parent.getData(
+ GefPartListener.TEST_GEF_VIEWER_DATA_KEY)
+ instanceof GraphicalViewer)) {
parent = parent.getParent();
}
-
+
if (parent == null) {
sendIdInfo(compId);
return;
}
- Object gefData =
- parent.getData(Startup.TEST_GEF_VIEWER_DATA_KEY);
-
+ Object gefData =
+ parent.getData(GefPartListener.TEST_GEF_VIEWER_DATA_KEY);
+
if (gefData instanceof EditPartViewer) {
EditPartViewer viewer = (EditPartViewer)gefData;
- Point cursorLocation = new Point(display.map(null,
- viewer.getControl(),
+ Point cursorLocation = new Point(display.map(null,
+ viewer.getControl(),
display.getCursorLocation()));
EditPart editPart = viewer.findObjectAt(cursorLocation);
EditPart primaryEditPart = FigureCanvasUtil.getPrimaryEditPart(
editPart, viewer.getRootEditPart());
List idStringList = Collections.EMPTY_LIST;
-
+
if (primaryEditPart != null) {
- idStringList = getPathToRoot(viewer.getRootEditPart(),
+ idStringList = getPathToRoot(viewer.getRootEditPart(),
cursorLocation, primaryEditPart);
-
+
} else {
- // No primary figure found.
+ // No primary figure found.
// Check whether a tool was selected.
EditDomain editDomain = viewer.getEditDomain();
if (editDomain != null) {
- PaletteViewer paletteViewer =
+ PaletteViewer paletteViewer =
editDomain.getPaletteViewer();
if (paletteViewer != null) {
- EditPart paletteEditPart =
+ EditPart paletteEditPart =
paletteViewer.findObjectAt(new Point(
- display.map(viewer.getControl(),
- paletteViewer.getControl(),
+ display.map(viewer.getControl(),
+ paletteViewer.getControl(),
cursorLocation.getSWTPoint())));
if (paletteEditPart != null) {
idStringList = getToolPathToRoot(
- paletteViewer.getRootEditPart(),
+ paletteViewer.getRootEditPart(),
paletteEditPart);
}
}
}
}
-
+
compId = createCompId(idStringList);
}
sendIdInfo(compId);
}
/**
- *
+ *
* @param editPart The edit part for which to find the path.
- * @param root The root for <code>editPart</code>. This is used to
+ * @param root The root for <code>editPart</code>. This is used to
* avoid adding the root identifier to the returned list.
* @param cursorLocation The location to check for nearby connection
* anchors.
* @return a list containing the identifier of each edit part between
* <code>editPart</code> and its root. The first element in the
- * list will be the identifier for a connection anchor if
+ * list will be the identifier for a connection anchor if
* <code>cursorLocation</code> is near such an anchor.
*/
private List getPathToRoot(RootEditPart root, Point cursorLocation,
EditPart editPart) {
-
+
List idStringList = new ArrayList();
EditPart currentEditPart = editPart;
-
+
// Check for connection anchor
- String connectionId =
+ String connectionId =
getConnectionAnchorId(
DefaultEditPartAdapterFactory.loadFigureIdentifier(
- currentEditPart),
+ currentEditPart),
cursorLocation);
-
- if (connectionId == null
+
+ if (connectionId == null
&& currentEditPart instanceof ConnectionEditPart) {
- ConnectionEditPart connEditPart =
+ ConnectionEditPart connEditPart =
(ConnectionEditPart)editPart;
EditPart srcEditPart = connEditPart.getSource();
EditPart targetEditPart = connEditPart.getTarget();
connectionId = getConnectionAnchorId(
DefaultEditPartAdapterFactory
- .loadFigureIdentifier(srcEditPart),
+ .loadFigureIdentifier(srcEditPart),
cursorLocation);
if (connectionId != null) {
currentEditPart = srcEditPart;
} else {
connectionId = getConnectionAnchorId(
DefaultEditPartAdapterFactory
- .loadFigureIdentifier(targetEditPart),
+ .loadFigureIdentifier(targetEditPart),
cursorLocation);
if (connectionId != null) {
currentEditPart = targetEditPart;
@@ -327,9 +328,9 @@ public class GefInspectorListenerAppender implements IAutListenerAppender {
idStringList.add(connectionId);
}
- while (currentEditPart != root.getContents()
+ while (currentEditPart != root.getContents()
&& currentEditPart != null) {
- IEditPartIdentifier identifier =
+ IEditPartIdentifier identifier =
DefaultEditPartAdapterFactory.loadFigureIdentifier(
currentEditPart);
if (identifier != null) {
@@ -337,15 +338,15 @@ public class GefInspectorListenerAppender implements IAutListenerAppender {
}
currentEditPart = currentEditPart.getParent();
}
-
+
return idStringList;
}
/**
- *
+ *
* @param editPart The edit part for which to find the path.
- * @param root The root for <code>editPart</code>. This is used to
+ * @param root The root for <code>editPart</code>. This is used to
* avoid adding the root identifier to the returned list.
* @return a list containing the identifier of each edit part between
* <code>editPart</code> and its root.
@@ -354,13 +355,13 @@ public class GefInspectorListenerAppender implements IAutListenerAppender {
List idStringList = new ArrayList();
EditPart currentEditPart = editPart;
-
+
if (currentEditPart != null) {
Object model = currentEditPart.getModel();
while (model instanceof PaletteEntry
&& currentEditPart != root.getContents()) {
idStringList.add(((PaletteEntry)model).getLabel());
- currentEditPart =
+ currentEditPart =
currentEditPart.getParent();
model = currentEditPart.getModel();
}
@@ -371,12 +372,12 @@ public class GefInspectorListenerAppender implements IAutListenerAppender {
/**
* Sends the given ID information to the client.
- *
- * @param compId The component identifier to send. May be
+ *
+ * @param compId The component identifier to send. May be
* <code>null</code>.
*/
private void sendIdInfo(IComponentIdentifier compId) {
- InspectorComponentSelectedMessage message =
+ InspectorComponentSelectedMessage message =
new InspectorComponentSelectedMessage();
message.setComponentIdentifier(compId);
try {
@@ -385,12 +386,12 @@ public class GefInspectorListenerAppender implements IAutListenerAppender {
LOG.error("Error occurred while trying to send message to Client.", e); //$NON-NLS-1$
}
}
-
+
/**
- *
+ *
* @param idStringList The path to root for a specific edit part or
* connection anchor.
- * @return a component identifier for the given path, or
+ * @return a component identifier for the given path, or
* <code>null</code> if no valid component identifier can be
* generated.
*/
@@ -401,39 +402,39 @@ public class GefInspectorListenerAppender implements IAutListenerAppender {
compId = new ComponentIdentifier();
compId.setHierarchyNames(idStringList);
}
-
+
return compId;
}
}
-
+
/** the listener responsible for appending highlight listeners */
private FigureHighlightAppender m_highlightAppender;
-
+
/** the listener responsible for handling mouse clicks */
private GefInspectorComponentSelectedListener m_componentSelectedListener;
-
+
/**
* Constructor
*/
public GefInspectorListenerAppender() {
m_highlightAppender = new FigureHighlightAppender();
- m_componentSelectedListener =
+ m_componentSelectedListener =
new GefInspectorComponentSelectedListener(m_highlightAppender);
}
-
+
/**
* {@inheritDoc}
*/
public void addAutListener() {
final Display display = PlatformUI.getWorkbench().getDisplay();
-
+
display.syncExec(new Runnable() {
public void run() {
display.addFilter(SWT.MouseEnter, m_highlightAppender);
display.addFilter(SWT.MouseDown, m_componentSelectedListener);
}
-
+
});
}
diff --git a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/listener/GefPartListener.java b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/listener/GefPartListener.java
index 91de9b88f..5f0bc71b8 100644
--- a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/listener/GefPartListener.java
+++ b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/listener/GefPartListener.java
@@ -8,12 +8,11 @@
* Contributors:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
-package org.eclipse.jubula.rc.rcp.gef.listener;
+package org.eclipse.jubula.rc.rcp.e3.gef.listener;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jubula.rc.rcp.accessor.Startup;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IPartListener2;
import org.eclipse.ui.IWorkbenchPart;
@@ -28,8 +27,11 @@ import org.eclipse.ui.part.MultiPageEditorPart;
*/
public class GefPartListener implements IPartListener2 {
+ /** Key for GEF Viewer in component data */
+ public static final String TEST_GEF_VIEWER_DATA_KEY = "TEST_GEF_VIEWER"; //$NON-NLS-1$
+
/**
- *
+ *
* {@inheritDoc}
*/
public void partActivated(IWorkbenchPartReference partRef) {
@@ -37,7 +39,7 @@ public class GefPartListener implements IPartListener2 {
}
/**
- *
+ *
* {@inheritDoc}
*/
public void partBroughtToTop(IWorkbenchPartReference partRef) {
@@ -45,7 +47,7 @@ public class GefPartListener implements IPartListener2 {
}
/**
- *
+ *
* {@inheritDoc}
*/
public void partClosed(IWorkbenchPartReference partRef) {
@@ -53,7 +55,7 @@ public class GefPartListener implements IPartListener2 {
}
/**
- *
+ *
* {@inheritDoc}
*/
public void partDeactivated(IWorkbenchPartReference partRef) {
@@ -61,7 +63,7 @@ public class GefPartListener implements IPartListener2 {
}
/**
- *
+ *
* {@inheritDoc}
*/
public void partHidden(IWorkbenchPartReference partRef) {
@@ -69,7 +71,7 @@ public class GefPartListener implements IPartListener2 {
}
/**
- *
+ *
* {@inheritDoc}
*/
public void partInputChanged(IWorkbenchPartReference partRef) {
@@ -77,16 +79,16 @@ public class GefPartListener implements IPartListener2 {
}
/**
- *
+ *
* {@inheritDoc}
*/
public void partOpened(final IWorkbenchPartReference partRef) {
IWorkbenchPart part = partRef.getPart(false);
-
+
if (part instanceof MultiPageEditorPart) {
((MultiPageEditorPart)part).getSite().getSelectionProvider()
.addSelectionChangedListener(new ISelectionChangedListener() {
-
+
public void selectionChanged(SelectionChangedEvent event) {
if (event.getSource() instanceof GraphicalViewer) {
registerGraphicalViewer(
@@ -95,10 +97,10 @@ public class GefPartListener implements IPartListener2 {
}
});
}
-
- if (part != null
+
+ if (part != null
&& partRef instanceof WorkbenchPartReference) {
- GraphicalViewer viewer =
+ GraphicalViewer viewer =
(GraphicalViewer)part.getAdapter(
GraphicalViewer.class);
registerGraphicalViewer(viewer, partRef);
@@ -106,7 +108,7 @@ public class GefPartListener implements IPartListener2 {
}
/**
- *
+ *
* {@inheritDoc}
*/
public void partVisible(IWorkbenchPartReference partRef) {
@@ -114,25 +116,26 @@ public class GefPartListener implements IPartListener2 {
}
/**
- * Registers a {@link GraphicalViewer} with the given
+ * Registers a {@link GraphicalViewer} with the given
* {@link IWorkbenchPartReference}.
- *
+ *
* @param viewer The viewer to register.
* @param partRef The reference to the part that (indirectly) contains the
* viewer.
*/
- private void registerGraphicalViewer(GraphicalViewer viewer,
+ private void registerGraphicalViewer(GraphicalViewer viewer,
IWorkbenchPartReference partRef) {
IWorkbenchPart part = partRef.getPart(false);
if (part != null && partRef instanceof WorkbenchPartReference) {
if (viewer != null) {
// Note the viewer on the component
- Control partContent =
+ Control partContent =
((WorkbenchPartReference)partRef).getPane().getControl();
if (partContent != null && !partContent.isDisposed()) {
- partContent.setData(Startup.TEST_GEF_VIEWER_DATA_KEY,
+ partContent.setData(
+ GefPartListener.TEST_GEF_VIEWER_DATA_KEY,
viewer);
}
}
diff --git a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/util/FigureCanvasUtil.java b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/util/FigureCanvasUtil.java
index 021395e35..be2816202 100644
--- a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/gef/util/FigureCanvasUtil.java
+++ b/org.eclipse.jubula.rc.rcp.e3/src/org/eclipse/jubula/rc/rcp/e3/gef/util/FigureCanvasUtil.java
@@ -8,7 +8,7 @@
* Contributors:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
-package org.eclipse.jubula.rc.rcp.gef.util;
+package org.eclipse.jubula.rc.rcp.e3.gef.util;
import org.eclipse.draw2d.FigureCanvas;
import org.eclipse.draw2d.geometry.Point;
@@ -16,16 +16,16 @@ import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.RootEditPart;
-import org.eclipse.jubula.rc.rcp.accessor.Startup;
-import org.eclipse.jubula.rc.rcp.gef.factory.DefaultEditPartAdapterFactory;
-import org.eclipse.jubula.rc.rcp.gef.identifier.IEditPartIdentifier;
+import org.eclipse.jubula.rc.rcp.e3.gef.factory.DefaultEditPartAdapterFactory;
+import org.eclipse.jubula.rc.rcp.e3.gef.identifier.IEditPartIdentifier;
+import org.eclipse.jubula.rc.rcp.e3.gef.listener.GefPartListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
/**
* Utility class for interacting with a FigureCanvas.
- *
+ *
* @author BREDEX GmbH
* @created Jun 26, 2009
*/
@@ -39,7 +39,7 @@ public class FigureCanvasUtil {
}
/**
- *
+ *
* @param figureCanvas
* The canvas for which to find the viewer.
* @return the graphical viewer associated with the given canvas, or
@@ -48,7 +48,7 @@ public class FigureCanvasUtil {
public static GraphicalViewer getViewer(FigureCanvas figureCanvas) {
Composite parent = figureCanvas;
while (parent != null
- && !(parent.getData(Startup.TEST_GEF_VIEWER_DATA_KEY)
+ && !(parent.getData(GefPartListener.TEST_GEF_VIEWER_DATA_KEY)
instanceof GraphicalViewer)) {
parent = parent.getParent();
}
@@ -56,14 +56,14 @@ public class FigureCanvasUtil {
if (parent != null) {
return (GraphicalViewer)parent
- .getData(Startup.TEST_GEF_VIEWER_DATA_KEY);
+ .getData(GefPartListener.TEST_GEF_VIEWER_DATA_KEY);
}
return null;
}
/**
- *
+ *
* @param display The display containing the edit part to find.
* @param viewer The viewer containing the edit part to find.
* @return the edit part for the viewer at the current mouse pointer
@@ -85,7 +85,7 @@ public class FigureCanvasUtil {
* Searches the path to root for the first element considered to be testable
* by Jubula. Testable in this case means that an ID can be acquired for
* the edit part.
- *
+ *
* @param editPart
* The starting edit part.
* @param root
@@ -98,7 +98,7 @@ public class FigureCanvasUtil {
EditPart currentEditPart = editPart;
- while (currentEditPart != root.getContents()
+ while (currentEditPart != root.getContents()
&& currentEditPart != null) {
IEditPartIdentifier identifier = DefaultEditPartAdapterFactory
.loadFigureIdentifier(currentEditPart);
diff --git a/org.eclipse.jubula.rc.rcp.e4.feature/.gitignore b/org.eclipse.jubula.rc.rcp.e4.feature/.gitignore
new file mode 100644
index 000000000..ea8c4bf7f
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.feature/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/org.eclipse.jubula.rc.rcp.e4.feature/.project b/org.eclipse.jubula.rc.rcp.e4.feature/.project
new file mode 100644
index 000000000..7543f7ff9
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.jubula.rc.rcp.e4.feature</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.FeatureBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.FeatureNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.jubula.rc.rcp.e4.feature/about.html b/org.eclipse.jubula.rc.rcp.e4.feature/about.html
new file mode 100644
index 000000000..2a7ba0118
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.feature/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 22, 2011</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.jubula.rc.rcp.e4.feature/build.properties b/org.eclipse.jubula.rc.rcp.e4.feature/build.properties
new file mode 100644
index 000000000..d739199fb
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.feature/build.properties
@@ -0,0 +1,11 @@
+###############################################################################
+# Copyright (c) 2004, 2010 BREDEX GmbH.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+bin.includes = feature.xml,\
+ feature.properties,\
+ epl-v10.html,\
+ license.html
diff --git a/org.eclipse.jubula.rc.rcp.e4.feature/epl-v10.html b/org.eclipse.jubula.rc.rcp.e4.feature/epl-v10.html
new file mode 100644
index 000000000..3d1aac845
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.feature/epl-v10.html
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+ body {
+ size: 8.5in 11.0in;
+ margin: 0.25in 0.5in 0.25in 0.5in;
+ tab-interval: 0.5in;
+ }
+ p {
+ margin-left: auto;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ p.list {
+ margin-left: 0.5in;
+ margin-top: 0.05em;
+ margin-bottom: 0.05em;
+ }
+ </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>&quot;Contribution&quot; means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>&quot;Contributor&quot; means any person or entity that distributes
+the Program.</p>
+
+<p>&quot;Licensed Patents&quot; mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>&quot;Program&quot; means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and
+indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
+against any losses, damages and costs (collectively &quot;Losses&quot;)
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+</body>
diff --git a/org.eclipse.jubula.rc.rcp.e4.feature/feature.properties b/org.eclipse.jubula.rc.rcp.e4.feature/feature.properties
new file mode 100644
index 000000000..026d2feee
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.feature/feature.properties
@@ -0,0 +1,131 @@
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+February 1, 2011\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+ - Content may be structured and packaged into modules to facilitate delivering,\n\
+ extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+ plug-in fragments ("Fragments"), and features ("Features").\n\
+ - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+ in a directory named "plugins".\n\
+ - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+ Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+ Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+ numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+ - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+ named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+ - The top-level (root) directory\n\
+ - Plug-in and Fragment directories\n\
+ - Inside Plug-ins and Fragments packaged as JARs\n\
+ - Sub-directories of the directory named "src" of certain Plug-ins\n\
+ - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+ - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+ - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+ - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+ - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+ - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+ - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+ 1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+ the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+ extending or updating the functionality of an Eclipse-based product.\n\
+ 2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+ Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+ 3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+ govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+ Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+ with the Specification. Such Installable Software Agreement must inform the user of the\n\
+ terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+ the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+ indication of agreement by the user, the provisioning Technology will complete installation\n\
+ of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/org.eclipse.jubula.rc.rcp.e4.feature/feature.xml b/org.eclipse.jubula.rc.rcp.e4.feature/feature.xml
new file mode 100644
index 000000000..abea2b2fb
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.feature/feature.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<feature
+ id="org.eclipse.jubula.rc.rcp.e4.feature"
+ label="Jubula RCP Remote Control"
+ version="2.0.0.qualifier"
+ provider-name="Eclipse Jubula">
+
+ <description url="http://www.eclipse.org/jubula">
+ Eclipse functional UI testing environment.
+ </description>
+
+ <copyright url="http://www.eclipse.org/jubula">
+ Copyright (c) 2004, 2013 BREDEX GmbH.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+BREDEX GmbH - initial API and implementation and/or initial documentation
+ </copyright>
+
+ <license url="license.html">
+ %license
+ </license>
+
+ <plugin
+ id="org.eclipse.jubula.rc.rcp.e4"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+ <plugin
+ id="org.eclipse.jubula.rc.rcp.e4.swt"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+</feature>
diff --git a/org.eclipse.jubula.rc.rcp.e4.feature/license.html b/org.eclipse.jubula.rc.rcp.e4.feature/license.html
new file mode 100644
index 000000000..f19c483b9
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.feature/license.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY &quot;CONTENT&quot;). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+ (&quot;EPL&quot;). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+ repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;. Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+ other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+ href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+ in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+ Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+ on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+ Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+ the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+ indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/org.eclipse.jubula.rc.rcp.e4.feature/pom.xml b/org.eclipse.jubula.rc.rcp.e4.feature/pom.xml
new file mode 100644
index 000000000..f3bace540
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.feature/pom.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.jubula.rc.rcp.e4.releng</artifactId>
+ <groupId>org.eclipse.jubula</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.jubula.rc.rcp.e4.releng</relativePath>
+ </parent>
+ <artifactId>org.eclipse.jubula.rc.rcp.e4.feature</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <packaging>eclipse-feature</packaging>
+</project>
diff --git a/org.eclipse.jubula.rc.rcp.e4.releng/.gitignore b/org.eclipse.jubula.rc.rcp.e4.releng/.gitignore
new file mode 100644
index 000000000..5b670009e
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.releng/.gitignore
@@ -0,0 +1,2 @@
+/target
+/workspace
diff --git a/org.eclipse.jubula.rc.rcp.e4.releng/.project b/org.eclipse.jubula.rc.rcp.e4.releng/.project
new file mode 100644
index 000000000..f3fd998ec
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.releng/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.jubula.rc.rcp.e4.releng</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.jubula.rc.rcp.e4.releng/pom.xml b/org.eclipse.jubula.rc.rcp.e4.releng/pom.xml
new file mode 100644
index 000000000..4443d86cb
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.releng/pom.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.jubula.releng.server.rc.rcp</artifactId>
+ <groupId>org.eclipse.jubula</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.jubula.releng.server.rc.rcp</relativePath>
+ </parent>
+ <groupId>org.eclipse.jubula</groupId>
+ <artifactId>org.eclipse.jubula.rc.rcp.e4.releng</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <modules>
+ <module>../org.eclipse.jubula.rc.rcp.e4</module>
+ <module>../org.eclipse.jubula.rc.rcp.e4.swt</module>
+ <module>../org.eclipse.jubula.rc.rcp.e4.feature</module>
+ <module>../org.eclipse.jubula.rc.rcp.e4.site</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-maven-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <extensions>true</extensions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>target-platform-configuration</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <resolver>p2</resolver>
+ <pomDependencies>consider</pomDependencies>
+ <target>
+ <artifact>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>${project.artifactId}</artifactId>
+ <version>${project.version}</version>
+ <classifier>../org.eclipse.jubula.project.configuration/target/definitions/juno</classifier>
+ </artifact>
+ </target>
+ <environments>
+ <environment>
+ <os>win32</os>
+ <ws>win32</ws>
+ <arch>x86</arch>
+ </environment>
+ <environment>
+ <os>win32</os>
+ <ws>win32</ws>
+ <arch>x86_64</arch>
+ </environment>
+ <environment>
+ <os>linux</os>
+ <ws>gtk</ws>
+ <arch>x86_64</arch>
+ </environment>
+ <environment>
+ <os>linux</os>
+ <ws>gtk</ws>
+ <arch>x86</arch>
+ </environment>
+ <environment>
+ <os>macosx</os>
+ <ws>cocoa</ws>
+ <arch>x86_64</arch>
+ </environment>
+ </environments>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/org.eclipse.jubula.rc.rcp.e4.site/.gitignore b/org.eclipse.jubula.rc.rcp.e4.site/.gitignore
new file mode 100644
index 000000000..ea8c4bf7f
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.site/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/org.eclipse.jubula.rc.rcp.e4.site/.project b/org.eclipse.jubula.rc.rcp.e4.site/.project
new file mode 100644
index 000000000..f1b415bda
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.site/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.jubula.rc.rcp.e4.site</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.UpdateSiteBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.UpdateSiteNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.jubula.rc.rcp.e4.site/category.xml b/org.eclipse.jubula.rc.rcp.e4.site/category.xml
new file mode 100644
index 000000000..412eb393f
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.site/category.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<site>
+ <feature url="features/org.eclipse.jubula.rc.rcp.e4.feature_2.0.0.qualifier.jar" id="org.eclipse.jubula.rc.rcp.e4.feature" version="2.0.0.qualifier">
+ <category name="org.eclipse.jubula.rc.rcp.e4"/>
+ </feature>
+ <bundle url="features/org.eclipse.jubula.rc.rcp.feature_2.0.0.qualifier.jar" id="org.eclipse.jubula.rc.rcp.feature" version="2.0.0.qualifier">
+ <category name="org.eclipse.jubula.rc.rcp.e4"/>
+ </bundle>
+ <category-def name="org.eclipse.jubula.rc.rcp.e4" label="Testing e4"/>
+</site>
diff --git a/org.eclipse.jubula.rc.rcp.e4.site/pom.xml b/org.eclipse.jubula.rc.rcp.e4.site/pom.xml
new file mode 100644
index 000000000..7ce65c626
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.site/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.jubula.rc.rcp.e4.releng</artifactId>
+ <groupId>org.eclipse.jubula</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.jubula.rc.rcp.e4.releng</relativePath>
+ </parent>
+ <artifactId>org.eclipse.jubula.rc.rcp.e4.site</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <packaging>eclipse-repository</packaging>
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.jubula</groupId>
+ <artifactId>org.eclipse.jubula.rc.rcp.site</artifactId>
+ <type>zip</type>
+ <version>2.0.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jubula</groupId>
+ <artifactId>org.eclipse.jubula.rc.rcp.e4</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jubula</groupId>
+ <artifactId>org.eclipse.jubula.rc.rcp.e4.swt</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+ <!-- FIXME: Raimar: Filtering of e3 target should be added! @see http://wiki.eclipse.org/Tycho/Target_Platform#Filtering -->
+ <!-- FIXME: Raimar: This site is needed for the e4 target. Perhaps this
+ could be solved in a better way by using bundles instead of features in org.eclipse.jubula.rc.rcp.site/category.xml
+ @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=378338 -->
+</project>
diff --git a/org.eclipse.jubula.rc.rcp.e4.swt/.checkstyle b/org.eclipse.jubula.rc.rcp.e4.swt/.checkstyle
new file mode 100644
index 000000000..f69a865d7
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.swt/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <fileset name="all" enabled="true" check-config-name="Jubula" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/org.eclipse.jubula.rc.rcp.e4.swt/.classpath b/org.eclipse.jubula.rc.rcp.e4.swt/.classpath
new file mode 100644
index 000000000..64c5e31b7
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.swt/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.jubula.rc.rcp.e4.swt/.gitignore b/org.eclipse.jubula.rc.rcp.e4.swt/.gitignore
new file mode 100644
index 000000000..934e0e06f
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.swt/.gitignore
@@ -0,0 +1,2 @@
+/bin
+/target
diff --git a/org.eclipse.jubula.rc.rcp.e4.swt/.project b/org.eclipse.jubula.rc.rcp.e4.swt/.project
new file mode 100644
index 000000000..7636d2daa
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.swt/.project
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.jubula.rc.rcp.e4.swt</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+ <linkedResources>
+ <link>
+ <name>.settings</name>
+ <type>2</type>
+ <locationURI>WORKSPACE_LOC/jubula/org.eclipse.jubula.project.configuration/settings/1.5</locationURI>
+ </link>
+ </linkedResources>
+</projectDescription>
diff --git a/org.eclipse.jubula.rc.rcp.e4.swt/META-INF/MANIFEST.MF b/org.eclipse.jubula.rc.rcp.e4.swt/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..de2cf9f39
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.swt/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Jubula Remote Control - RCP e4 SWT
+Bundle-SymbolicName: org.eclipse.jubula.rc.rcp.e4.swt; singleton:=true
+Bundle-Version: 2.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: Eclipse Jubula
+Require-Bundle: org.eclipse.osgi.services;bundle-version="[3.3.100,5.0.0)",
+ org.eclipse.swt;bundle-version="[3.3.0,5.0.0)",
+ org.eclipse.jface;bundle-version="[3.3.0,5.0.0)",
+ org.eclipse.e4.ui.workbench;bundle-version="[0.10.2,2.0.0)",
+ org.eclipse.jubula.rc.rcp.common;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.jubula.rc.rcp.swt;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.jubula.rc.rcp.e4;bundle-version="[2.0.0,3.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.jubula.rc.rcp.e4.swt/about.html b/org.eclipse.jubula.rc.rcp.e4.swt/about.html
new file mode 100644
index 000000000..2a7ba0118
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.swt/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 22, 2011</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.jubula.rc.rcp.e4.swt/build.properties b/org.eclipse.jubula.rc.rcp.e4.swt/build.properties
new file mode 100644
index 000000000..bf9e876fc
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.swt/build.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2004, 2013 BREDEX GmbH.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+bin.includes = about.html,\
+ META-INF/,\
+ plugin.xml,\
+ .
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+javacSource = 1.5
+javacTarget = 1.5
+javacErrors.. = -assertIdentifier
diff --git a/org.eclipse.jubula.rc.rcp.e4.swt/plugin.xml b/org.eclipse.jubula.rc.rcp.e4.swt/plugin.xml
new file mode 100644
index 000000000..d01723126
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.swt/plugin.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<!--
+ Copyright (c) 2004, 2013 BREDEX GmbH.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ -->
+<plugin>
+ <extension
+ id="AddonSnippet"
+ name="%extension.addonsnippet.name"
+ point="org.eclipse.e4.workbench.model">
+ <processor
+ beforefragment="true"
+ class="org.eclipse.jubula.rc.rcp.e4.swt.starter.SwtProcessor">
+ </processor>
+ </extension>
+</plugin>
diff --git a/org.eclipse.jubula.rc.rcp.e4.swt/pom.xml b/org.eclipse.jubula.rc.rcp.e4.swt/pom.xml
new file mode 100644
index 000000000..20b683c3e
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.swt/pom.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.jubula.rc.rcp.e4.releng</artifactId>
+ <groupId>org.eclipse.jubula</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.jubula.rc.rcp.e4.releng</relativePath>
+ </parent>
+ <artifactId>org.eclipse.jubula.rc.rcp.e4.swt</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/org.eclipse.jubula.rc.rcp.e4.swt/src/org/eclipse/jubula/rc/rcp/e4/swt/namer/E4SwtComponentNamer.java b/org.eclipse.jubula.rc.rcp.e4.swt/src/org/eclipse/jubula/rc/rcp/e4/swt/namer/E4SwtComponentNamer.java
new file mode 100644
index 000000000..90824543f
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.swt/src/org/eclipse/jubula/rc/rcp/e4/swt/namer/E4SwtComponentNamer.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2013 BREDEX GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BREDEX GmbH - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.jubula.rc.rcp.e4.swt.namer;
+
+import org.eclipse.e4.ui.model.application.ui.MUIElement;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.model.application.ui.basic.MPartStack;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolItem;
+import org.eclipse.e4.ui.model.application.ui.menu.impl.HandledToolItemImpl;
+import org.eclipse.jubula.rc.rcp.e4.namer.E4ComponentNamer;
+import org.eclipse.jface.preference.PreferenceManager;
+import org.eclipse.jubula.rc.rcp.swt.aut.RcpSwtComponentNamer;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * Specific implementation of a component namer for RCP-E4-SWT applications.
+ * used by {@link org.eclipse.jubula.rc.rcp.e4.swt.starter.SwtEventBrokerListener}.
+ */
+public class E4SwtComponentNamer extends RcpSwtComponentNamer
+ implements E4ComponentNamer {
+
+ /**
+ * Set the name of the control by using the element id of the given part stack.
+ * Called, when the given part stack of the application model has been created.
+ * @param mPartStack The opened part stack of the application model.
+ */
+ public void onModelPartStackCreated(MPartStack mPartStack) {
+ }
+
+ /**
+ * Set the name of the tool bar by using the elementId.
+ * @param mToolBar The created tool item of the application model.
+ */
+ public void onModelToolBarCreated(MToolBar mToolBar) {
+ onModelElementCreated(mToolBar);
+ }
+
+ /**
+ * Set the name of the tool item by using the command name.
+ * @param mToolItem The created tool item of the application model.
+ */
+ public void onModelToolItemCreated(MToolItem mToolItem) {
+ if (mToolItem instanceof HandledToolItemImpl) {
+ Widget widget = (Widget) mToolItem.getWidget();
+ if (hasWidgetToBeNamed(widget)) {
+ // issue: HandledToolItemImpl internal?
+ HandledToolItemImpl handledToolItem =
+ (HandledToolItemImpl) mToolItem;
+ String commandName = handledToolItem
+ .getCommand().getElementId();
+ String componentName = commandName;
+ setComponentName(widget, componentName);
+ }
+ }
+ }
+
+ /**
+ * Set the name of the control by using the element id of the given part.
+ * Called, when the given part of the application model has been created.
+ * @param mPart The opened part of the application model.
+ */
+ public void onModelPartCreated(MPart mPart) {
+ }
+
+ /**
+ * Set the name of the control by using the element id of the given part stack.
+ * Called, when the given part stack of the application model has been created.
+ * @param mElement The opened part stack of the application model.
+ */
+ public void onModelElementCreated(MUIElement mElement) {
+ Widget widget = (Widget) mElement.getWidget();
+ if (hasWidgetToBeNamed(widget)) {
+ // Name control based on element ID
+ String componentName = mElement.getElementId();
+ if (componentName != null) {
+ setComponentName(widget, componentName);
+ }
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ * Not implemented yet.
+ */
+ @Override
+ protected PreferenceManager getPreferenceManager() {
+ return null;
+ }
+
+}
diff --git a/org.eclipse.jubula.rc.rcp.e4.swt/src/org/eclipse/jubula/rc/rcp/e4/swt/starter/SwtProcessor.java b/org.eclipse.jubula.rc.rcp.e4.swt/src/org/eclipse/jubula/rc/rcp/e4/swt/starter/SwtProcessor.java
new file mode 100644
index 000000000..d82d4c1fc
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4.swt/src/org/eclipse/jubula/rc/rcp/e4/swt/starter/SwtProcessor.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2013 BREDEX GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BREDEX GmbH - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.jubula.rc.rcp.e4.swt.starter;
+
+import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
+import org.eclipse.jubula.rc.rcp.e4.namer.E4ComponentNamer;
+import org.eclipse.jubula.rc.rcp.e4.starter.AbstractProcessor;
+import org.eclipse.jubula.rc.rcp.e4.swt.namer.E4SwtComponentNamer;
+import org.eclipse.jubula.rc.rcp.swt.aut.SwtRemoteControlService;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * The SWT implementation of the abstract e4 processor.
+ */
+public class SwtProcessor extends AbstractProcessor {
+
+ /** The implementation of the e4 component namer interface. */
+ private E4SwtComponentNamer m_componentNamer = new E4SwtComponentNamer();
+
+ @Override
+ protected E4ComponentNamer getE4ComponentNamer() {
+ return m_componentNamer;
+ }
+
+ @Override
+ protected void onModelWindowCreated(MWindow mWindow) {
+ Shell shell = (Shell) mWindow.getWidget();
+ Display display = shell.getDisplay();
+ ((SwtRemoteControlService) SwtRemoteControlService.getInstance())
+ .checkRemoteControlService(display);
+ }
+
+}
diff --git a/org.eclipse.jubula.rc.rcp.e4/.checkstyle b/org.eclipse.jubula.rc.rcp.e4/.checkstyle
new file mode 100644
index 000000000..f69a865d7
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <fileset name="all" enabled="true" check-config-name="Jubula" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/org.eclipse.jubula.rc.rcp.e4/.classpath b/org.eclipse.jubula.rc.rcp.e4/.classpath
new file mode 100644
index 000000000..64c5e31b7
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.jubula.rc.rcp.e4/.gitignore b/org.eclipse.jubula.rc.rcp.e4/.gitignore
new file mode 100644
index 000000000..934e0e06f
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4/.gitignore
@@ -0,0 +1,2 @@
+/bin
+/target
diff --git a/org.eclipse.jubula.rc.rcp.e4/.project b/org.eclipse.jubula.rc.rcp.e4/.project
new file mode 100644
index 000000000..b57adb704
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4/.project
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.jubula.rc.rcp.e4</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+ <linkedResources>
+ <link>
+ <name>.settings</name>
+ <type>2</type>
+ <locationURI>WORKSPACE_LOC/jubula/org.eclipse.jubula.project.configuration/settings/1.5</locationURI>
+ </link>
+ </linkedResources>
+</projectDescription>
diff --git a/org.eclipse.jubula.rc.rcp.e4/META-INF/MANIFEST.MF b/org.eclipse.jubula.rc.rcp.e4/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..8454ba65e
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Jubula Remote Control - RCP e4
+Bundle-SymbolicName: org.eclipse.jubula.rc.rcp.e4; singleton:=true
+Bundle-Version: 2.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: Eclipse Jubula
+Require-Bundle: org.eclipse.osgi.services;bundle-version="[3.3.0,5.0.0)",
+ org.eclipse.e4.core.di;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.e4.core.services;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.e4.ui.workbench;bundle-version="[0.10.2,2.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.jubula.rc.rcp.e4.namer;version="2.0.0",
+ org.eclipse.jubula.rc.rcp.e4.starter;version="2.0.0"
diff --git a/org.eclipse.jubula.rc.rcp.e4/about.html b/org.eclipse.jubula.rc.rcp.e4/about.html
new file mode 100644
index 000000000..2a7ba0118
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 22, 2011</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.jubula.rc.rcp.e4/build.properties b/org.eclipse.jubula.rc.rcp.e4/build.properties
new file mode 100644
index 000000000..6ad40060a
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4/build.properties
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2004, 2013 BREDEX GmbH.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+bin.includes = about.html,\
+ META-INF/,\
+ .
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+javacSource = 1.5
+javacTarget = 1.5
+javacErrors.. = -assertIdentifier
diff --git a/org.eclipse.jubula.rc.rcp.e4/pom.xml b/org.eclipse.jubula.rc.rcp.e4/pom.xml
new file mode 100644
index 000000000..27e9784fb
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4/pom.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.jubula.rc.rcp.e4.releng</artifactId>
+ <groupId>org.eclipse.jubula</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.jubula.rc.rcp.e4.releng</relativePath>
+ </parent>
+ <artifactId>org.eclipse.jubula.rc.rcp.e4</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/org.eclipse.jubula.rc.rcp.e4/src/org/eclipse/jubula/rc/rcp/e4/namer/E4ComponentNamer.java b/org.eclipse.jubula.rc.rcp.e4/src/org/eclipse/jubula/rc/rcp/e4/namer/E4ComponentNamer.java
new file mode 100644
index 000000000..c5392bf02
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4/src/org/eclipse/jubula/rc/rcp/e4/namer/E4ComponentNamer.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2013 BREDEX GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BREDEX GmbH - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.jubula.rc.rcp.e4.namer;
+
+import org.eclipse.e4.ui.model.application.ui.MUIElement;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.model.application.ui.basic.MPartStack;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolItem;
+
+/**
+ * Interface for naming the components of an e4 application model.
+ * Known implementing classes:
+ * {@link org.eclipse.jubula.rc.rcp.e4.swt.namer.E4SwtComponentNamer}
+ * @see org.eclipse.jubula.rc.rcp.e4.starter.AbstractEventBrokerListener#getE4ComponentNamer()
+ * @see org.eclipse.jubula.rc.rcp.e4.swt.starter.EventBrokerListener#getE4ComponentNamer()
+ */
+public interface E4ComponentNamer {
+
+ /**
+ * This abstract method is called, when a new tool bar is created in the
+ * application model. Implement this method to react on this event.
+ * @param mToolBar The created model tool bar.
+ */
+ public abstract void onModelToolBarCreated(MToolBar mToolBar);
+
+ /**
+ * This abstract method is called, when a new tool item is created in the
+ * application model. Implement this method to react on this event.
+ * @param mToolItem The created model tool item.
+ */
+ public abstract void onModelToolItemCreated(MToolItem mToolItem);
+
+ /**
+ * This abstract method is called, when a new part stack is created in the
+ * application model. Implement this method to react on this event.
+ * @param mPartStack The created model part stack.
+ */
+ public abstract void onModelPartStackCreated(MPartStack mPartStack);
+
+ /**
+ * This abstract method is called, when a new window is created in the
+ * application model. Implement this method to react on this event.
+ * @param mPart The created model part.
+ */
+ public abstract void onModelPartCreated(MPart mPart);
+
+ /**
+ * This abstract method is called, when a new element is created in the
+ * application model. Implement this method to react on this event.
+ * @param mElement The created model element.
+ */
+ public abstract void onModelElementCreated(MUIElement mElement);
+
+}
diff --git a/org.eclipse.jubula.rc.rcp.e4/src/org/eclipse/jubula/rc/rcp/e4/starter/AbstractProcessor.java b/org.eclipse.jubula.rc.rcp.e4/src/org/eclipse/jubula/rc/rcp/e4/starter/AbstractProcessor.java
new file mode 100644
index 000000000..82ab3d45a
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.e4/src/org/eclipse/jubula/rc/rcp/e4/starter/AbstractProcessor.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2013 BREDEX GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BREDEX GmbH - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.jubula.rc.rcp.e4.starter;
+
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.core.services.events.IEventBroker;
+import org.eclipse.e4.ui.model.application.ui.MUIElement;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.model.application.ui.basic.MPartStack;
+import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolItem;
+import org.eclipse.e4.ui.workbench.UIEvents;
+import org.eclipse.e4.ui.workbench.UIEvents.EventTags;
+import org.eclipse.jubula.rc.rcp.e4.namer.E4ComponentNamer;
+import org.osgi.service.event.Event;
+import org.osgi.service.event.EventHandler;
+
+/**us
+ * This is an abstract e4 processor for the extension point
+ * <code>org.eclipse.e4.workbench.model</code>, the containing
+ * tag named processor and the attribute class for the implementing processor.
+ * An implementation only needs to implement the method {@link #getEventBrokerListener()},
+ * which returns an {@link AbstractEventBrokerListener}.
+ */
+public abstract class AbstractProcessor implements EventHandler {
+
+ /**
+ * Called by processor mechanism via extension point to register at
+ * the event broker listening on changes in the application model.
+ * It subscribes to event {@link TOPIC_WIDGET} for retrieving added
+ * or removed elements of the application model.
+ * Known implementation: {@link org.eclipse.jubula.rc.rcp.e4.swt.SwtProcessor}
+ * @param eventBroker The event Broker
+ */
+ @Execute
+ protected void hookListener(final IEventBroker eventBroker) {
+ if (!eventBroker.subscribe(UIEvents.UIElement.TOPIC_WIDGET,
+ this)) {
+ System.err.println(
+ "Could not subscribe to event broker TOPIC_WIDGET!");
+ }
+ }
+
+ /**
+ * This method listens directly on events from the event broker
+ * channel {@link UIEvents.UIElement#TOPIC_WIDGET}.
+ * An implementing class must only overwrite the methods
+ * {@link #getE4ComponentNamer()} and
+ * {@link #onModelWindowCreated(MWindow)}
+ * to react on new created elements in the application model.
+ * @param event The event containing information of the changed
+ * element in the application model.
+ */
+ public void handleEvent(final Event event) {
+ final MUIElement changedModelElement = (MUIElement) event
+ .getProperty(EventTags.ELEMENT);
+ if (changedModelElement instanceof MWindow) {
+ MWindow mWindow = (MWindow) changedModelElement;
+ if (mWindow.getWidget() != null) {
+ onModelWindowCreated(mWindow);
+ }
+ } else if (changedModelElement.getWidget() != null) {
+ if (changedModelElement instanceof MPartStack) {
+ getE4ComponentNamer()
+ .onModelPartStackCreated((MPartStack) changedModelElement);
+ } else if (changedModelElement instanceof MToolBar) {
+ getE4ComponentNamer()
+ .onModelToolBarCreated((MToolBar) changedModelElement);
+ } else if (changedModelElement instanceof MToolItem) {
+ getE4ComponentNamer()
+ .onModelToolItemCreated((MToolItem) changedModelElement);
+ } else if (changedModelElement instanceof MPart) {
+ getE4ComponentNamer()
+ .onModelPartCreated((MPart) changedModelElement);
+ }
+ }
+ }
+
+ /**
+ * @return The implementation of an e4 component namer
+ * of a specific GUI toolkit, which names the
+ * components.
+ */
+ protected abstract E4ComponentNamer getE4ComponentNamer();
+
+ /**
+ * This abstract method is called, when a new window is created in the
+ * application model. Implement this method to react on this event.
+ * @param window The created model window.
+ */
+ protected abstract void onModelWindowCreated(MWindow window);
+
+}
diff --git a/org.eclipse.jubula.rc.rcp.feature/.gitignore b/org.eclipse.jubula.rc.rcp.feature/.gitignore
new file mode 100644
index 000000000..ea8c4bf7f
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.feature/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/org.eclipse.jubula.rc.rcp.feature/.project b/org.eclipse.jubula.rc.rcp.feature/.project
new file mode 100644
index 000000000..fb1db55d5
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.jubula.rc.rcp.feature</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.FeatureBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.FeatureNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.jubula.rc.rcp.feature/about.html b/org.eclipse.jubula.rc.rcp.feature/about.html
new file mode 100644
index 000000000..2a7ba0118
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.feature/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 22, 2011</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.jubula.rc.rcp.feature/build.properties b/org.eclipse.jubula.rc.rcp.feature/build.properties
new file mode 100644
index 000000000..d739199fb
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.feature/build.properties
@@ -0,0 +1,11 @@
+###############################################################################
+# Copyright (c) 2004, 2010 BREDEX GmbH.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+bin.includes = feature.xml,\
+ feature.properties,\
+ epl-v10.html,\
+ license.html
diff --git a/org.eclipse.jubula.rc.rcp.feature/epl-v10.html b/org.eclipse.jubula.rc.rcp.feature/epl-v10.html
new file mode 100644
index 000000000..3d1aac845
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.feature/epl-v10.html
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+ body {
+ size: 8.5in 11.0in;
+ margin: 0.25in 0.5in 0.25in 0.5in;
+ tab-interval: 0.5in;
+ }
+ p {
+ margin-left: auto;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ p.list {
+ margin-left: 0.5in;
+ margin-top: 0.05em;
+ margin-bottom: 0.05em;
+ }
+ </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>&quot;Contribution&quot; means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>&quot;Contributor&quot; means any person or entity that distributes
+the Program.</p>
+
+<p>&quot;Licensed Patents&quot; mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>&quot;Program&quot; means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and
+indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
+against any losses, damages and costs (collectively &quot;Losses&quot;)
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+</body>
diff --git a/org.eclipse.jubula.rc.rcp.feature/feature.properties b/org.eclipse.jubula.rc.rcp.feature/feature.properties
new file mode 100644
index 000000000..026d2feee
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.feature/feature.properties
@@ -0,0 +1,131 @@
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+February 1, 2011\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+ - Content may be structured and packaged into modules to facilitate delivering,\n\
+ extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+ plug-in fragments ("Fragments"), and features ("Features").\n\
+ - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+ in a directory named "plugins".\n\
+ - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+ Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+ Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+ numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+ - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+ named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+ - The top-level (root) directory\n\
+ - Plug-in and Fragment directories\n\
+ - Inside Plug-ins and Fragments packaged as JARs\n\
+ - Sub-directories of the directory named "src" of certain Plug-ins\n\
+ - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+ - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+ - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+ - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+ - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+ - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+ - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+ 1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+ the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+ extending or updating the functionality of an Eclipse-based product.\n\
+ 2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+ Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+ 3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+ govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+ Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+ with the Specification. Such Installable Software Agreement must inform the user of the\n\
+ terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+ the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+ indication of agreement by the user, the provisioning Technology will complete installation\n\
+ of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/org.eclipse.jubula.rc.rcp.feature/feature.xml b/org.eclipse.jubula.rc.rcp.feature/feature.xml
new file mode 100644
index 000000000..eca086788
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.feature/feature.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<feature
+ id="org.eclipse.jubula.rc.rcp.feature"
+ label="Jubula RCP Remote Control"
+ version="2.0.0.qualifier"
+ provider-name="Eclipse Jubula">
+
+ <description url="http://www.eclipse.org/jubula">
+ Eclipse functional UI testing environment.
+ </description>
+
+ <copyright url="http://www.eclipse.org/jubula">
+ Copyright (c) 2004, 2013 BREDEX GmbH.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+BREDEX GmbH - initial API and implementation and/or initial documentation
+ </copyright>
+
+ <license url="license.html">
+ %license
+ </license>
+
+ <plugin
+ id="org.eclipse.jubula.rc.rcp.common"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+ <plugin
+ id="org.eclipse.jubula.rc.rcp.swt"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+ <plugin
+ id="org.eclipse.jubula.rc.rcp.e3"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+ <plugin
+ id="org.eclipse.jubula.rc.rcp.e3.specific"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+</feature>
diff --git a/org.eclipse.jubula.rc.rcp.feature/license.html b/org.eclipse.jubula.rc.rcp.feature/license.html
new file mode 100644
index 000000000..f19c483b9
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.feature/license.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY &quot;CONTENT&quot;). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+ (&quot;EPL&quot;). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+ repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;. Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+ other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+ href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+ in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+ Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+ on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+ Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+ the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+ indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/org.eclipse.jubula.rc.rcp.feature/pom.xml b/org.eclipse.jubula.rc.rcp.feature/pom.xml
new file mode 100644
index 000000000..77efa07b4
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.feature/pom.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.jubula.releng.server.rc.rcp</artifactId>
+ <groupId>org.eclipse.jubula</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.jubula.releng.server.rc.rcp</relativePath>
+ </parent>
+ <artifactId>org.eclipse.jubula.rc.rcp.feature</artifactId>
+ <groupId>org.eclipse.jubula</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <packaging>eclipse-feature</packaging>
+</project>
diff --git a/org.eclipse.jubula.rc.rcp.site/.gitignore b/org.eclipse.jubula.rc.rcp.site/.gitignore
new file mode 100644
index 000000000..ea8c4bf7f
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.site/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/org.eclipse.jubula.rc.rcp.site/.project b/org.eclipse.jubula.rc.rcp.site/.project
new file mode 100644
index 000000000..e53f12742
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.site/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.jubula.rc.rcp.site</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.UpdateSiteBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.UpdateSiteNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.jubula.rc.rcp.site/category.xml b/org.eclipse.jubula.rc.rcp.site/category.xml
new file mode 100644
index 000000000..7eec2ccb6
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.site/category.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<site>
+ <feature url="features/org.eclipse.jubula.rc.rcp.feature_2.0.0.qualifier.jar" id="org.eclipse.jubula.rc.rcp.feature" version="2.0.0.qualifier">
+ <category name="org.eclipse.jubula.rc.rcp"/>
+ </feature>
+ <category-def name="org.eclipse.jubula.rc.rcp" label="Testing"/>
+</site>
diff --git a/org.eclipse.jubula.rc.rcp.site/pom.xml b/org.eclipse.jubula.rc.rcp.site/pom.xml
new file mode 100644
index 000000000..ee8e93d22
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.site/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.jubula.releng.server.rc.rcp</artifactId>
+ <groupId>org.eclipse.jubula</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.jubula.releng.server.rc.rcp</relativePath>
+ </parent>
+ <artifactId>org.eclipse.jubula.rc.rcp.site</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <packaging>eclipse-repository</packaging>
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.jubula</groupId>
+ <artifactId>org.eclipse.jubula.rc.rcp.common</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jubula</groupId>
+ <artifactId>org.eclipse.jubula.rc.rcp.swt</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jubula</groupId>
+ <artifactId>org.eclipse.jubula.rc.rcp.e3</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jubula</groupId>
+ <artifactId>org.eclipse.jubula.rc.rcp.e3.specific</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/org.eclipse.jubula.rc.rcp.swt/.checkstyle b/org.eclipse.jubula.rc.rcp.swt/.checkstyle
new file mode 100644
index 000000000..f69a865d7
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.swt/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <fileset name="all" enabled="true" check-config-name="Jubula" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/org.eclipse.jubula.rc.rcp.swt/.classpath b/org.eclipse.jubula.rc.rcp.swt/.classpath
new file mode 100644
index 000000000..c9abe4f82
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.swt/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry exported="true" kind="lib" path="lib/org.eclipse.jubula.rc.swt.jar"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.jubula.rc.rcp.swt/.gitignore b/org.eclipse.jubula.rc.rcp.swt/.gitignore
new file mode 100644
index 000000000..d7634d197
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.swt/.gitignore
@@ -0,0 +1,3 @@
+/bin
+/target
+/lib \ No newline at end of file
diff --git a/org.eclipse.jubula.rc.rcp.swt/.project b/org.eclipse.jubula.rc.rcp.swt/.project
new file mode 100644
index 000000000..ae0e1ffbe
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.swt/.project
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.jubula.rc.rcp.swt</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+ <linkedResources>
+ <link>
+ <name>.settings</name>
+ <type>2</type>
+ <locationURI>WORKSPACE_LOC/jubula/org.eclipse.jubula.project.configuration/settings/1.4</locationURI>
+ </link>
+ </linkedResources>
+</projectDescription>
diff --git a/org.eclipse.jubula.rc.rcp.swt/META-INF/MANIFEST.MF b/org.eclipse.jubula.rc.rcp.swt/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..231b1a145
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.swt/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Eclipse-RegisterBuddy: org.eclipse.jubula.rc.rcp.common
+Bundle-ManifestVersion: 2
+Bundle-Name: Jubula Remote Control - RCP SWT
+Bundle-SymbolicName: org.eclipse.jubula.rc.rcp.swt;singleton:=true
+Bundle-Version: 2.0.0.qualifier
+Bundle-ClassPath: .,
+ lib/org.eclipse.jubula.rc.swt.jar
+Bundle-Vendor: Eclipse Jubula
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Require-Bundle: org.eclipse.swt;bundle-version="[3.3.0,5.0.0)",
+ org.eclipse.jface;bundle-version="[3.3.0,5.0.0)",
+ org.eclipse.jubula.rc.rcp.common;bundle-version="[2.0.0,3.0.0)"
+Export-Package: org.eclipse.jubula.rc.swt,
+ org.eclipse.jubula.rc.swt.commands,
+ org.eclipse.jubula.rc.swt.components,
+ org.eclipse.jubula.rc.swt.driver,
+ org.eclipse.jubula.rc.swt.implclasses,
+ org.eclipse.jubula.rc.swt.listener,
+ org.eclipse.jubula.rc.swt.tester.adapter.factory,
+ org.eclipse.jubula.rc.rcp.swt.aut
diff --git a/org.eclipse.jubula.rc.rcp.swt/about.html b/org.eclipse.jubula.rc.rcp.swt/about.html
new file mode 100644
index 000000000..2a7ba0118
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.swt/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 22, 2011</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.jubula.rc.rcp.swt/build.properties b/org.eclipse.jubula.rc.rcp.swt/build.properties
new file mode 100644
index 000000000..7dda88825
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.swt/build.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2004, 2013 BREDEX GmbH.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+bin.includes = about.html,\
+ META-INF/,\
+ .,\
+ lib/
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+javacSource = 1.4
+javacTarget = 1.4
+javacErrors.. = -assertIdentifier
diff --git a/org.eclipse.jubula.rc.rcp.swt/genLib.xml b/org.eclipse.jubula.rc.rcp.swt/genLib.xml
new file mode 100644
index 000000000..3c4597e7f
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.swt/genLib.xml
@@ -0,0 +1,35 @@
+<!--
+ Copyright (c) 2004, 2013 BREDEX GmbH.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ -->
+<project name="org.eclipse.jubula.rc.rcp.swt" default="gen-lib" basedir=".">
+
+ <property name="SiteStorage" value="../org.eclipse.jubula.site/target/site/plugins" />
+
+ <target name="gen-lib">
+
+ <mkdir dir="lib" />
+ <delete>
+ <fileset dir="lib" includes="**/*"/>
+ </delete>
+
+ <!--
+ The "SNAPSHOT" in the include selector ensures that only the non-source
+ JAR is used. Without it, the corresponding source JAR was being used,
+ and it was either being used exclusively or was *overwriting* the content
+ provided by the non-source JAR. This caused compilation to fail when also
+ building source bundles.
+ -->
+ <copy todir="lib">
+ <fileset dir="../org.eclipse.jubula.rc.swt/target">
+ <include name="org.eclipse.jubula.rc.swt*SNAPSHOT.jar" />
+ </fileset>
+ <mergemapper to="org.eclipse.jubula.rc.swt.jar"/>
+ </copy>
+
+ </target>
+
+</project>
diff --git a/org.eclipse.jubula.rc.rcp.swt/pom.xml b/org.eclipse.jubula.rc.rcp.swt/pom.xml
new file mode 100644
index 000000000..816b519c4
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.swt/pom.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.jubula.releng.server.rc.rcp</artifactId>
+ <groupId>org.eclipse.jubula</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.jubula.releng.server.rc.rcp</relativePath>
+ </parent>
+ <artifactId>org.eclipse.jubula.rc.rcp.swt</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.6</version>
+ <executions>
+ <execution>
+ <id>gen-lib</id>
+ <phase>generate-resources</phase>
+ <configuration>
+ <target>
+ <ant antfile="genLib.xml" />
+ </target>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>2.4.1</version>
+ <configuration>
+ <filesets>
+ <fileset>
+ <directory>lib</directory>
+ <includes>
+ <include>*.jar</include>
+ </includes>
+ <followSymlinks>false</followSymlinks>
+ </fileset>
+ </filesets>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/org.eclipse.jubula.rc.rcp.swt/src/org/eclipse/jubula/rc/rcp/swt/aut/RcpSwtComponentNamer.java b/org.eclipse.jubula.rc.rcp.swt/src/org/eclipse/jubula/rc/rcp/swt/aut/RcpSwtComponentNamer.java
new file mode 100644
index 000000000..e3e57c55e
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.swt/src/org/eclipse/jubula/rc/rcp/swt/aut/RcpSwtComponentNamer.java
@@ -0,0 +1,357 @@
+/*******************************************************************************
+ * Copyright (c) 2013 BREDEX GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BREDEX GmbH - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.jubula.rc.rcp.swt.aut;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IPageChangedListener;
+import org.eclipse.jface.dialogs.PageChangedEvent;
+import org.eclipse.jface.preference.IPreferenceNode;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.preference.PreferenceManager;
+import org.eclipse.jubula.rc.swt.listener.ComponentHandler;
+import org.eclipse.jubula.tools.constants.AutEnvironmentConstants;
+import org.eclipse.jubula.tools.constants.SwtAUTHierarchyConstants;
+import org.eclipse.jubula.tools.utils.EnvironmentUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.CoolBar;
+import org.eclipse.swt.widgets.CoolItem;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Item;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * This listener assigns names to components as they become visible. The
+ * assigned name is determined by using the component and its surroundings.
+ *
+ * @author BREDEX GmbH
+ * @created Oct 19, 2007, 2013
+ */
+public abstract class RcpSwtComponentNamer implements Listener {
+
+ /** ID suffix for tool bars belonging to a part (view/editor) */
+ private static final String TOOLBAR_ID_SUFFIX = ".toolbar"; //$NON-NLS-1$
+
+ /** Key for RCP partId in component data */
+ private static final String TEST_RCP_DATA_KEY =
+ SwtAUTHierarchyConstants.RCP_NAME;
+
+ /** map for naming dialog buttons */
+ private static Map componentNAMES = new HashMap();
+
+ /** is name generation enabled */
+ private static boolean generateNames = false;
+
+ static {
+ generateNames = Boolean.valueOf(
+ EnvironmentUtils.getProcessEnvironment().getProperty(
+ AutEnvironmentConstants.GENERATE_COMPONENT_NAMES))
+ .booleanValue();
+
+ addCompName(IDialogConstants.ABORT_ID, "abort"); //$NON-NLS-1$
+ addCompName(IDialogConstants.BACK_ID, "back"); //$NON-NLS-1$
+ addCompName(IDialogConstants.CANCEL_ID, "cancel"); //$NON-NLS-1$
+ addCompName(IDialogConstants.CLIENT_ID, "client"); //$NON-NLS-1$
+ addCompName(IDialogConstants.CLOSE_ID, "close"); //$NON-NLS-1$
+ addCompName(IDialogConstants.DESELECT_ALL_ID, "deselectAll"); //$NON-NLS-1$
+ addCompName(IDialogConstants.DETAILS_ID, "details"); //$NON-NLS-1$
+ addCompName(IDialogConstants.FINISH_ID, "finish"); //$NON-NLS-1$
+ addCompName(IDialogConstants.HELP_ID, "help"); //$NON-NLS-1$
+ addCompName(IDialogConstants.IGNORE_ID, "ignore"); //$NON-NLS-1$
+ addCompName(IDialogConstants.INTERNAL_ID, "internal"); //$NON-NLS-1$
+ addCompName(IDialogConstants.NEXT_ID, "next"); //$NON-NLS-1$
+ addCompName(IDialogConstants.NO_ID, "no"); //$NON-NLS-1$
+ addCompName(IDialogConstants.NO_TO_ALL_ID, "noToAll"); //$NON-NLS-1$
+ addCompName(IDialogConstants.OK_ID, "ok"); //$NON-NLS-1$
+ addCompName(IDialogConstants.OPEN_ID, "open"); //$NON-NLS-1$
+ addCompName(IDialogConstants.PROCEED_ID, "proceed"); //$NON-NLS-1$
+ addCompName(IDialogConstants.RETRY_ID, "retry"); //$NON-NLS-1$
+ addCompName(IDialogConstants.SELECT_ALL_ID, "selectAll"); //$NON-NLS-1$
+ addCompName(IDialogConstants.SELECT_TYPES_ID, "selectTypes"); //$NON-NLS-1$
+ addCompName(IDialogConstants.SKIP_ID, "skip"); //$NON-NLS-1$
+ addCompName(IDialogConstants.STOP_ID, "stop"); //$NON-NLS-1$
+ addCompName(IDialogConstants.YES_ID, "yes"); //$NON-NLS-1$
+ addCompName(IDialogConstants.YES_TO_ALL_ID, "yesToAll"); //$NON-NLS-1$
+ }
+
+ /**
+ * add component id <-> name mapping
+ *
+ * @param compID
+ * the component identifier
+ * @param compName
+ * the component name
+ */
+ private static void addCompName(int compID, String compName) {
+ String staticNamePreafix = "dialog.button."; //$NON-NLS-1$
+ componentNAMES.put(new Integer(compID), staticNamePreafix + compName);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void handleEvent(Event event) {
+ addNameData(event.widget);
+ Item[] items;
+ if (event.widget instanceof ToolBar) {
+ items = ((ToolBar) event.widget).getItems();
+ } else if (event.widget instanceof CoolBar) {
+ items = ((CoolBar) event.widget).getItems();
+ } else {
+ return;
+ }
+ for (int i = 0; i < items.length; i++) {
+ addNameData(items[i]);
+ }
+ }
+
+ /**
+ * Adds name information to the given widget, if necessary.
+ *
+ * @param widget
+ * The widget to name.
+ */
+ private void addNameData(Widget widget) {
+ // Assign name
+ if (hasWidgetToBeNamed(widget)) {
+ Object data = getWidgetData(widget);
+
+ if (data instanceof IContributionItem) {
+ // Name buttons and toolitems according to the action that
+ // they represent, if possible.
+ String actionId = ((IContributionItem) data).getId();
+ if (actionId != null && actionId.trim().length() > 0) {
+ setComponentName(widget, actionId);
+ ComponentHandler.getAutHierarchy().refreshComponentName(
+ widget);
+
+ }
+ } else if (data instanceof PreferenceDialog) {
+ PreferenceDialog prefDialog = (PreferenceDialog) data;
+
+ // Add a listener to add name data as pages are
+ // selected/created.
+ prefDialog.addPageChangedListener(new IPageChangedListener() {
+
+ public void pageChanged(PageChangedEvent event) {
+ addNameDataToPrefPage(event.getSelectedPage());
+ }
+
+ });
+
+ // The listener won't notice the initally selected page,
+ // so we have to add that name data here.
+ addNameDataToPrefPage(prefDialog.getSelectedPage());
+ }
+ if (generateNames && data instanceof Dialog) {
+ Dialog dialog = (Dialog) data;
+ setNameForDialogButtonBarButtons(dialog);
+ }
+ }
+ }
+
+ /**
+ *
+ * @param widget
+ * The widget for which to get the data.
+ * @return the data object corresponding to the given widget.
+ */
+ private static Object getWidgetData(Widget widget) {
+ Object data = widget.getData();
+
+ // Handle the case of CoolBar containing CoolItem containing ToolBar.
+ // The CoolItem is the widget that represents the toolbar
+ // contribution, but it (the CoolItem) is not in our AUT
+ // component hierarchy, due to the fact that the ToolBar's
+ // getParent() returns the CoolBar rather than the CoolItem.
+ // To resolve this discrepancy, we use the data from the
+ // coresponding CoolItem to generate a name for the ToolBar.
+ try {
+ if (widget instanceof ToolBar) {
+ Composite toolbarParent = ((ToolBar) widget).getParent();
+ if (toolbarParent instanceof CoolBar) {
+ CoolItem[] coolItems = ((CoolBar) toolbarParent).getItems();
+ for (int i = 0; i < coolItems.length; i++) {
+ CoolItem item = coolItems[i];
+ if (item != null && item.getControl() == widget) {
+ data = item.getData();
+ }
+ }
+ }
+ }
+ } catch (NoClassDefFoundError e) {
+ // we may be running in eRCP which doesn't know
+ // about
+ // toolbars, so we just ignore this
+ }
+
+ return data;
+ }
+
+ /**
+ * @param dialog
+ * the dialog
+ */
+ private void setNameForDialogButtonBarButtons(Dialog dialog) {
+ try {
+ Method getButtonMethod = Dialog.class.getDeclaredMethod(
+ "getButton", new Class[] { int.class }); //$NON-NLS-1$
+ getButtonMethod.setAccessible(true);
+
+ Iterator components = componentNAMES.keySet().iterator();
+ while (components.hasNext()) {
+ Integer componentID = (Integer) components.next();
+ invokeNameSetting(dialog, getButtonMethod, componentID,
+ componentNAMES.get(componentID));
+ }
+ } catch (SecurityException e) {
+ // ignore exceptions
+ } catch (NoSuchMethodException e) {
+ // ignore exceptions
+ }
+ }
+
+ /**
+ * use this method to set a name on the given object
+ *
+ * @param useObject
+ * the object
+ * @param methodToInvoke
+ * the method to invoke
+ * @param buttonID
+ * the button id
+ * @param buttonName
+ * the button name
+ */
+ private static void invokeNameSetting(
+ Object useObject, Method methodToInvoke,
+ Integer buttonID, Object buttonName) {
+ Object ret = null;
+ try {
+ ret = methodToInvoke.invoke(useObject, new Object[] { buttonID });
+ } catch (IllegalArgumentException e) {
+ // ignore exceptions
+ } catch (IllegalAccessException e) {
+ // ignore exceptions
+ } catch (InvocationTargetException e) {
+ // ignore exceptions
+ }
+ if (ret instanceof Button) {
+ Button button = (Button) ret;
+ if (hasWidgetToBeNamed(button)) {
+ setComponentName(button, buttonName.toString());
+ }
+ }
+ }
+
+ /**
+ * Attaches name data to the given page appropriate.
+ *
+ * @param selectedPage
+ * The page to which we will try to attach the name data.
+ */
+ private void addNameDataToPrefPage(Object selectedPage) {
+ if (selectedPage == null) {
+ return;
+ }
+ PreferenceManager prefMan = getPreferenceManager();
+ if (prefMan == null) {
+ return;
+ }
+
+ Iterator iter = prefMan.getElements(PreferenceManager.PRE_ORDER)
+ .iterator();
+ while (iter.hasNext()) {
+ IPreferenceNode prefNode = (IPreferenceNode) iter.next();
+ if (selectedPage.equals(prefNode.getPage())) {
+ Control pageControl = prefNode.getPage().getControl();
+ String prefNodeId = prefNode.getId();
+ // Assign id to page composite only if the composite exists
+ // and if the id is usable
+ if (hasWidgetToBeNamed(pageControl)
+ && prefNodeId != null
+ && prefNodeId.trim().length() > 0) {
+ setComponentName(pageControl, prefNodeId);
+ Shell prefShell = pageControl.getDisplay().getActiveShell();
+ Event activateEvent = new Event();
+ activateEvent.time = (int) System.currentTimeMillis();
+ activateEvent.type = SWT.Activate;
+ activateEvent.widget = prefShell;
+ prefShell.notifyListeners(SWT.Activate, activateEvent);
+ }
+ // We found the page we were looking for, so we can stop
+ // searching.
+ break;
+ }
+ }
+ }
+
+ /**
+ * @param widget
+ * The SWT widget to look at.
+ * @return True, if the given SWT widget is not null, is not disposed and the component
+ * name has not been set, otherwise false.
+ */
+ public static boolean hasWidgetToBeNamed(Widget widget) {
+ boolean hasToBeNamed =
+ // exists
+ widget != null
+ // is not destroyed
+ && !widget.isDisposed()
+ // the test component name has not been set
+ && widget.getData(TEST_RCP_DATA_KEY) == null;
+ return hasToBeNamed;
+ }
+
+ /**
+ * Sets the given component name id to the given widget.
+ * @param widget
+ * The widget setting the id on.
+ * @param id
+ * The id to set to the widget.
+ */
+ public static void setComponentName(Widget widget, String id) {
+ widget.setData(TEST_RCP_DATA_KEY, id);
+ }
+
+ /**
+ * Set the component name of a tool bar. Calls {@link #setComponentName(Widget, String)}
+ * with appending the suffix tool bar to the finalPartId.
+ * @param partToolbar The part of the tool bar.
+ * @param finalPartId The ID for the part of the tool bar.
+ */
+ public static void setToolbarComponentName(Widget partToolbar,
+ String finalPartId) {
+ RcpSwtComponentNamer.setToolbarComponentName(
+ partToolbar,
+ finalPartId + TOOLBAR_ID_SUFFIX);
+ }
+
+ /**
+ * @return An instance of the preference manager, or null if not available.
+ * This method must be implemented depending on Eclipse RCP e3 and e4.
+ */
+ protected abstract PreferenceManager getPreferenceManager();
+
+}
diff --git a/org.eclipse.jubula.rc.rcp.swt/src/org/eclipse/jubula/rc/rcp/swt/aut/SwtRemoteControlService.java b/org.eclipse.jubula.rc.rcp.swt/src/org/eclipse/jubula/rc/rcp/swt/aut/SwtRemoteControlService.java
new file mode 100644
index 000000000..91b4ce1b4
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp.swt/src/org/eclipse/jubula/rc/rcp/swt/aut/SwtRemoteControlService.java
@@ -0,0 +1,117 @@
+package org.eclipse.jubula.rc.rcp.swt.aut;
+
+import java.util.Properties;
+
+import org.eclipse.jubula.rc.common.AUTServer;
+import org.eclipse.jubula.rc.common.adaptable.AdapterFactoryRegistry;
+import org.eclipse.jubula.rc.common.tester.adapter.factory.GUIAdapterFactoryRegistry;
+import org.eclipse.jubula.rc.swt.SwtAUTServer;
+import org.eclipse.jubula.rc.swt.tester.adapter.factory.SWTAdapterFactory;
+import org.eclipse.jubula.tools.constants.AutConfigConstants;
+import org.eclipse.jubula.tools.utils.EnvironmentUtils;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * This class extends the SwtAUTServer to avoid buddy class loading,
+ * which does not work, if the SWT library is in it's own bundle.
+ */
+public class SwtRemoteControlService extends SwtAUTServer {
+
+ /** An instance of this class. */
+ private static SwtRemoteControlService instance;
+
+ /** True, if AUTServer is running, otherwise false. */
+ private boolean m_hasRemoteControlServiceStarted = false;
+
+ /**
+ * Private constructor for Singleton pattern.
+ */
+ private SwtRemoteControlService() {
+ super();
+ // set also static instance in parent AUTServer
+ setInstance(this);
+ AdapterFactoryRegistry.initRegistration();
+ }
+
+ /**
+ * @return The instance of this remote control service.
+ */
+ public static AUTServer getInstance() {
+ if (instance == null) {
+ instance = new SwtRemoteControlService();
+ }
+ return instance;
+ }
+
+ /**
+ * Check that the remote control service has been started
+ * and start it, if necessary. It can only be started, if
+ * there exists an active shell, which contains the
+ * needed display.
+ * @param display The model element with existing widget
+ */
+ public void checkRemoteControlService(Display display) {
+ if (!m_hasRemoteControlServiceStarted) {
+ if (startRemoteControlService(display)) {
+ prepareRemoteControlService();
+ }
+ }
+ }
+
+ /**
+ * Start the SwtAUTServer by connecting with the AUT agent.
+ * @param display The SWT display.
+ * @return True, if the AUTServer is already running, otherwise false.
+ */
+ private boolean startRemoteControlService(final Display display) {
+ final Properties envVars =
+ EnvironmentUtils.getProcessEnvironment();
+ if (getValue(AutConfigConstants.AUT_AGENT_HOST, envVars) != null) {
+ try {
+ setAutAgentHost(getValue(
+ AutConfigConstants.AUT_AGENT_HOST, envVars));
+ setAutAgentPort(getValue(
+ AutConfigConstants.AUT_AGENT_PORT, envVars));
+ setAutID(getValue(
+ AutConfigConstants.AUT_NAME, envVars));
+ setDisplay(display);
+ start(true); // true = start an RCP accessor
+ m_hasRemoteControlServiceStarted = true;
+ } catch (Exception e) {
+ e.getStackTrace();
+ }
+ }
+ return m_hasRemoteControlServiceStarted;
+ }
+
+ /**
+ * Prepare the SwtAUTServer for SWT components.
+ */
+ private static void prepareRemoteControlService() {
+ // Registering the AdapterFactory for SWT at the registry
+ GUIAdapterFactoryRegistry.getInstance()
+ .registerFactory(new SWTAdapterFactory());
+ // add listener to AUT
+ AUTServer.getInstance().addToolKitEventListenerToAUT();
+ }
+
+ /**
+ * Returns the value for a given property. First, <code>envVars</code>
+ * is checked for the given property. If this property cannot be found
+ * there, the Java System Properties will be checked. If the property
+ * is not found there, <code>null</code> will be returned.
+ *
+ * @param envVars The first source to check for the given property.
+ * @param propName The name of the property for which to find the value.
+ * @return The value for the given property name, or <code>null</code> if
+ * the given property name cannot be found.
+ */
+ private static String getValue(String propName, Properties envVars) {
+ String value = envVars.getProperty(propName);
+ if (value == null) {
+ value = System.getProperty(propName);
+ }
+ return value;
+ }
+
+}
diff --git a/org.eclipse.jubula.rc.rcp/.classpath b/org.eclipse.jubula.rc.rcp/.classpath
index ba35c19fa..2fbb7a23e 100644
--- a/org.eclipse.jubula.rc.rcp/.classpath
+++ b/org.eclipse.jubula.rc.rcp/.classpath
@@ -3,22 +3,5 @@
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
- <classpathentry kind="lib" path="lib/ch.qos.logback.classic.jar"/>
- <classpathentry kind="lib" path="lib/ch.qos.logback.core.jar"/>
- <classpathentry kind="lib" path="lib/ch.qos.logback.slf4j.jar"/>
- <classpathentry kind="lib" path="lib/org.apache.commons.beanutils.jar"/>
- <classpathentry kind="lib" path="lib/org.apache.commons.lang.jar"/>
- <classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.jubula.communication"/>
- <classpathentry kind="lib" path="lib/org.eclipse.jubula.communication.jar"/>
- <classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.jubula.rc.common"/>
- <classpathentry kind="lib" path="lib/org.eclipse.jubula.rc.common.jar"/>
- <classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.jubula.rc.swt"/>
- <classpathentry kind="lib" path="lib/org.eclipse.jubula.rc.swt.jar"/>
- <classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.jubula.tools"/>
- <classpathentry kind="lib" path="lib/org.eclipse.jubula.tools.jar"/>
- <classpathentry kind="lib" path="lib/org.slf4j.api.jar"/>
- <classpathentry kind="lib" path="lib/org.slf4j.jcl.jar"/>
- <classpathentry kind="lib" path="lib/xpp3_min-1.1.3.4.O.jar"/>
- <classpathentry kind="lib" path="lib/xstream-1.3.1.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
diff --git a/org.eclipse.jubula.rc.rcp/.gitignore b/org.eclipse.jubula.rc.rcp/.gitignore
index 61e26dab5..a06c7f9b1 100644
--- a/org.eclipse.jubula.rc.rcp/.gitignore
+++ b/org.eclipse.jubula.rc.rcp/.gitignore
@@ -1,3 +1,7 @@
/bin
/target
-/lib
+/bundles
+/bundles.swt
+/bundles.e3
+/bundles.e4
+/bundles.e4.swt
diff --git a/org.eclipse.jubula.rc.rcp/META-INF/MANIFEST.MF b/org.eclipse.jubula.rc.rcp/META-INF/MANIFEST.MF
index d056c5b67..e85d1c8de 100644
--- a/org.eclipse.jubula.rc.rcp/META-INF/MANIFEST.MF
+++ b/org.eclipse.jubula.rc.rcp/META-INF/MANIFEST.MF
@@ -1,30 +1,10 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
-Bundle-Name: Jubula Remote Control - RCP
+Bundle-Name: Jubula Remote Control - RCP Common
Bundle-SymbolicName: org.eclipse.jubula.rc.rcp; singleton:=true
Bundle-Version: 2.0.0.qualifier
-Bundle-ClassPath: .,
- lib/org.eclipse.jubula.tools.jar,
- lib/org.apache.commons.lang.jar,
- lib/org.apache.oro.jar,
- lib/org.apache.commons.beanutils.jar,
- lib/org.eclipse.jubula.rc.common.jar,
- lib/org.eclipse.jubula.rc.swt.jar,
- lib/org.eclipse.jubula.communication.jar,
- lib/org.slf4j.api.jar,
- lib/org.slf4j.jcl.jar,
- lib/ch.qos.logback.slf4j.jar,
- lib/ch.qos.logback.core.jar,
- lib/ch.qos.logback.classic.jar,
- lib/xpp3_min-1.1.3.4.O.jar,
- lib/xstream-1.3.1.jar,
- resources/
+Require-Bundle: org.eclipse.osgi;bundle-version="[3.3.0,5.0.0)"
+Bundle-ClassPath: .
Bundle-Vendor: Eclipse Jubula
-Require-Bundle: org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.draw2d;bundle-version="[3.0.0,4.0.0)";resolution:=optional,
- org.eclipse.gef;bundle-version="[3.0.0,4.0.0)";resolution:=optional
-Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: J2SE-1.4
-Export-Package: org.eclipse.jubula.rc.rcp.gef.factory,
- org.eclipse.jubula.rc.rcp.gef.identifier
+Bundle-Activator: org.eclipse.jubula.rc.rcp.installer.BundleInstaller
diff --git a/org.eclipse.jubula.rc.rcp/build.properties b/org.eclipse.jubula.rc.rcp/build.properties
index 784306ecd..d9e7c548f 100644
--- a/org.eclipse.jubula.rc.rcp/build.properties
+++ b/org.eclipse.jubula.rc.rcp/build.properties
@@ -1,29 +1,18 @@
###############################################################################
-# Copyright (c) 2004, 2011 BREDEX GmbH.
+# Copyright (c) 2004, 2013 BREDEX GmbH.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
###############################################################################
bin.includes = about.html,\
- resources/,\
META-INF/,\
- plugin.xml,\
.,\
- lib/org.eclipse.jubula.tools.jar,\
- lib/org.apache.commons.lang.jar,\
- lib/org.apache.commons.beanutils.jar,\
- lib/org.apache.oro.jar,\
- lib/org.eclipse.jubula.rc.common.jar,\
- lib/org.eclipse.jubula.rc.swt.jar,\
- lib/org.eclipse.jubula.communication.jar,\
- lib/org.slf4j.api.jar,\
- lib/org.slf4j.jcl.jar,\
- lib/ch.qos.logback.slf4j.jar,\
- lib/ch.qos.logback.core.jar,\
- lib/ch.qos.logback.classic.jar,\
- lib/xpp3_min-1.1.3.4.O.jar,\
- lib/xstream-1.3.1.jar
+ bundles/,\
+ bundles.e3/,\
+ bundles.e4/,\
+ bundles.e4.swt/,\
+ bundles.swt/
jars.compile.order = .
source.. = src/
output.. = bin/
diff --git a/org.eclipse.jubula.rc.rcp/genBundles.xml b/org.eclipse.jubula.rc.rcp/genBundles.xml
new file mode 100644
index 000000000..66bf356d3
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp/genBundles.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2004, 2013 BREDEX GmbH.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ -->
+<project name="org.eclipse.jubula.rc.rcp" default="gen-bundles" basedir=".">
+
+ <property name="bundlesSourceDirE3" value="../org.eclipse.jubula.rc.rcp.site/target/repository/plugins/" />
+ <property name="bundlesSourceDirE4" value="../org.eclipse.jubula.rc.rcp.e4.site/target/repository/plugins/" />
+
+ <property name="bundlesTargetDir" value="bundles" />
+ <property name="bundlesTargetDir.swt" value="bundles.swt" />
+ <property name="bundlesTargetDir.e3" value="bundles.e3" />
+ <property name="bundlesTargetDir.e4" value="bundles.e4" />
+ <property name="bundlesTargetDir.e4.swt" value="bundles.e4.swt" />
+
+ <!-- Function for copying a bundle into the bundles/ dir. -->
+ <target name="copyBundleToBundlesDir">
+ <copy todir="${targetDir}">
+ <fileset dir="${sourceDir}">
+ <include name="${bundleName}_*.jar" />
+ </fileset>
+ </copy>
+ </target>
+
+ <target name="gen-bundles">
+ <!-- Remove previously copied files -->
+ <mkdir dir="${bundlesTargetDir}" />
+ <mkdir dir="${bundlesTargetDir.swt}" />
+ <mkdir dir="${bundlesTargetDir.e3}" />
+ <mkdir dir="${bundlesTargetDir.e4}" />
+ <mkdir dir="${bundlesTargetDir.e4.swt}" />
+ <delete>
+ <fileset dir="${bundlesTargetDir}" includes="**/*" />
+ </delete>
+ <delete>
+ <fileset dir="${bundlesTargetDir.swt}" includes="**/*" />
+ </delete>
+ <delete>
+ <fileset dir="${bundlesTargetDir.e3}" includes="**/*" />
+ </delete>
+ <delete>
+ <fileset dir="${bundlesTargetDir.e4}" includes="**/*" />
+ </delete>
+ <delete>
+ <fileset dir="${bundlesTargetDir.e4.swt}" includes="**/*" />
+ </delete>
+
+ <!-- Copy common bundles into bundles/ folder. -->
+ <antcall target="copyBundleToBundlesDir">
+ <param name="sourceDir" value="${bundlesSourceDirE3}" />
+ <param name="targetDir" value="${bundlesTargetDir}" />
+ <param name="bundleName" value="org.eclipse.jubula.rc.rcp.common" />
+ </antcall>
+
+ <!-- Copy common bundles into bundles.swt/ folder. -->
+ <antcall target="copyBundleToBundlesDir">
+ <param name="sourceDir" value="${bundlesSourceDirE3}" />
+ <param name="targetDir" value="${bundlesTargetDir.swt}" />
+ <param name="bundleName" value="org.eclipse.jubula.rc.rcp.swt" />
+ </antcall>
+
+ <!-- Copy e3 specific bundles into bundles.e3/ folder. -->
+ <antcall target="copyBundleToBundlesDir">
+ <param name="sourceDir" value="${bundlesSourceDirE3}" />
+ <param name="targetDir" value="${bundlesTargetDir.e3}" />
+ <param name="bundleName" value="org.eclipse.jubula.rc.rcp.e3" />
+ </antcall>
+ <antcall target="copyBundleToBundlesDir">
+ <param name="sourceDir" value="${bundlesSourceDirE3}" />
+ <param name="targetDir" value="${bundlesTargetDir.e3}" />
+ <param name="bundleName" value="org.eclipse.jubula.rc.rcp.e3.specific" />
+ </antcall>
+
+ <!-- Copy e4 bundles into bundles.e4/ folder. -->
+ <antcall target="copyBundleToBundlesDir">
+ <param name="sourceDir" value="${bundlesSourceDirE4}" />
+ <param name="targetDir" value="${bundlesTargetDir.e4}" />
+ <param name="bundleName" value="org.eclipse.jubula.rc.rcp.e4" />
+ </antcall>
+
+ <!-- Copy e4 with SWT specific bundles into bundles.e4.swt/ folder. -->
+ <antcall target="copyBundleToBundlesDir">
+ <param name="sourceDir" value="${bundlesSourceDirE4}" />
+ <param name="targetDir" value="${bundlesTargetDir.e4.swt}" />
+ <param name="bundleName" value="org.eclipse.jubula.rc.rcp.e4.swt" />
+ </antcall>
+
+ </target>
+
+</project>
diff --git a/org.eclipse.jubula.rc.rcp/pom.xml b/org.eclipse.jubula.rc.rcp/pom.xml
index e321dd861..179868ac1 100644
--- a/org.eclipse.jubula.rc.rcp/pom.xml
+++ b/org.eclipse.jubula.rc.rcp/pom.xml
@@ -1,77 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <artifactId>org.eclipse.jubula.releng.client</artifactId>
- <groupId>org.eclipse.jubula</groupId>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<!-- Use this pom with <code>mvn package</code> to recompile bundle rc.rcp
+ with all including bundles. -->
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.jubula.releng.server</artifactId>
+ <groupId>org.eclipse.jubula</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.jubula.releng.server</relativePath>
+ </parent>
+ <artifactId>org.eclipse.jubula.rc.rcp</artifactId>
<version>2.0.0-SNAPSHOT</version>
- <relativePath>../org.eclipse.jubula.releng.client</relativePath>
- </parent>
- <groupId>org.eclipse.jubula</groupId>
- <artifactId>org.eclipse.jubula.rc.rcp</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- <packaging>eclipse-plugin</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.eclipse.jubula</groupId>
- <artifactId>org.eclipse.jubula.tools</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jubula</groupId>
- <artifactId>org.eclipse.jubula.communication</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jubula</groupId>
- <artifactId>org.eclipse.jubula.rc.common</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jubula</groupId>
- <artifactId>org.eclipse.jubula.rc.swt</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <version>1.6</version>
- <executions>
- <execution>
- <id>gen-lib</id>
- <phase>generate-resources</phase>
- <configuration>
- <target>
- <ant antfile="genLib.xml" />
- </target>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <artifactId>maven-clean-plugin</artifactId>
- <version>2.4.1</version>
- <configuration>
- <filesets>
- <fileset>
- <directory>lib</directory>
- <includes>
- <include>*.jar</include>
- </includes>
- <followSymlinks>false</followSymlinks>
- </fileset>
- </filesets>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
-</project>
+ <packaging>eclipse-plugin</packaging>
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.jubula</groupId>
+ <artifactId>org.eclipse.jubula.rc.rcp.e4.site</artifactId>
+ <type>zip</type>
+ <version>2.0.0-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.6</version>
+ <executions>
+ <execution>
+ <id>gen-bundles</id>
+ <phase>prepare-package</phase>
+ <configuration>
+ <target>
+ <ant antfile="genBundles.xml" />
+ </target>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>2.4.1</version>
+ <configuration>
+ <filesets>
+ <fileset>
+ <directory>.</directory>
+ <includes>
+ <include>bundles/</include>
+ <include>bundles.e3/</include>
+ <include>bundles.e4/</include>
+ <include>bundles.e4.swt/</include>
+ <include>bundles.swt/</include>
+ </includes>
+ <followSymlinks>false</followSymlinks>
+ </fileset>
+ </filesets>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/accessor/Startup.java b/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/accessor/Startup.java
deleted file mode 100644
index 4b2f1ecef..000000000
--- a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/accessor/Startup.java
+++ /dev/null
@@ -1,698 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2010 BREDEX GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * BREDEX GmbH - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.jubula.rc.rcp.accessor;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.action.IContributionItem;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.IPageChangedListener;
-import org.eclipse.jface.dialogs.PageChangedEvent;
-import org.eclipse.jface.preference.IPreferenceNode;
-import org.eclipse.jface.preference.PreferenceDialog;
-import org.eclipse.jface.preference.PreferenceManager;
-import org.eclipse.jubula.rc.common.AUTServer;
-import org.eclipse.jubula.rc.common.tester.adapter.factory.GUIAdapterFactoryRegistry;
-import org.eclipse.jubula.rc.rcp.gef.inspector.GefInspectorListenerAppender;
-import org.eclipse.jubula.rc.rcp.gef.listener.GefPartListener;
-import org.eclipse.jubula.rc.swt.SwtAUTServer;
-import org.eclipse.jubula.rc.swt.listener.ComponentHandler;
-import org.eclipse.jubula.rc.swt.tester.adapter.factory.SWTAdapterFactory;
-import org.eclipse.jubula.tools.constants.AutConfigConstants;
-import org.eclipse.jubula.tools.constants.AutEnvironmentConstants;
-import org.eclipse.jubula.tools.constants.CommandConstants;
-import org.eclipse.jubula.tools.constants.SwtAUTHierarchyConstants;
-import org.eclipse.jubula.tools.utils.EnvironmentUtils;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.CoolBar;
-import org.eclipse.swt.widgets.CoolItem;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Item;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.Widget;
-import org.eclipse.ui.IEditorReference;
-import org.eclipse.ui.IPartListener2;
-import org.eclipse.ui.IStartup;
-import org.eclipse.ui.IViewReference;
-import org.eclipse.ui.IWindowListener;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPartReference;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.internal.WorkbenchPartReference;
-
-
-/**
- * Initializes an AUT Server in a plug-in context.
- *
- * It is very important to avoid referencing GEF (org.eclipse.gef.*) classes
- * directly from this class, as this will cause Class Not Found errors if the
- * AUT does not contain the GEF plug-in.
- *
- * @author BREDEX GmbH
- * @created Oct 5, 2007
- */
-public class Startup implements IStartup {
- /** Key for GEF Viewer in component data */
- public static final String TEST_GEF_VIEWER_DATA_KEY = "TEST_GEF_VIEWER"; //$NON-NLS-1$
-
- /** bundle ID for Eclipse Graphical Editing Framework (GEF) */
- public static final String GEF_BUNDLE_ID = "org.eclipse.gef"; //$NON-NLS-1$
-
- /** Key for RCP partId in component data */
- private static final String TEST_RCP_DATA_KEY =
- SwtAUTHierarchyConstants.RCP_NAME;
-
- /** ID suffix for toolbars belonging to a part (view/editor) */
- private static final String TOOLBAR_ID_SUFFIX = ".toolbar"; //$NON-NLS-1$
-
- /** Single listener instance */
- private static IPartListener2 partNamingListener =
- new PartNamingListener();
-
- /**
- * This listener
- */
- private IPartListener2 m_gefListener = null;
-
- /**
- * This listener assigns names to components as they become visible. The
- * assigned name is determined by supporting data of the component and its
- * surroundings.
- *
- * @author BREDEX GmbH
- * @created Oct 19, 2007
- */
- private static class ComponentNamer implements Listener {
-
- /** map for naming dialog buttons */
- private static Map componentNAMES = new HashMap();
-
- /** is name generation enabled */
- private static boolean generateNames = false;
-
- static {
- generateNames = Boolean.valueOf(
- EnvironmentUtils.getProcessEnvironment()
- .getProperty(
- AutEnvironmentConstants
- .GENERATE_COMPONENT_NAMES))
- .booleanValue();
-
- addCompName(IDialogConstants.ABORT_ID, "abort"); //$NON-NLS-1$
- addCompName(IDialogConstants.BACK_ID, "back"); //$NON-NLS-1$
- addCompName(IDialogConstants.CANCEL_ID, "cancel"); //$NON-NLS-1$
- addCompName(IDialogConstants.CLIENT_ID, "client"); //$NON-NLS-1$
- addCompName(IDialogConstants.CLOSE_ID, "close"); //$NON-NLS-1$
- addCompName(IDialogConstants.DESELECT_ALL_ID, "deselectAll"); //$NON-NLS-1$
- addCompName(IDialogConstants.DETAILS_ID, "details"); //$NON-NLS-1$
- addCompName(IDialogConstants.FINISH_ID, "finish"); //$NON-NLS-1$
- addCompName(IDialogConstants.HELP_ID, "help"); //$NON-NLS-1$
- addCompName(IDialogConstants.IGNORE_ID, "ignore"); //$NON-NLS-1$
- addCompName(IDialogConstants.INTERNAL_ID, "internal"); //$NON-NLS-1$
- addCompName(IDialogConstants.NEXT_ID, "next"); //$NON-NLS-1$
- addCompName(IDialogConstants.NO_ID, "no"); //$NON-NLS-1$
- addCompName(IDialogConstants.NO_TO_ALL_ID, "noToAll"); //$NON-NLS-1$
- addCompName(IDialogConstants.OK_ID, "ok"); //$NON-NLS-1$
- addCompName(IDialogConstants.OPEN_ID, "open"); //$NON-NLS-1$
- addCompName(IDialogConstants.PROCEED_ID, "proceed"); //$NON-NLS-1$
- addCompName(IDialogConstants.RETRY_ID, "retry"); //$NON-NLS-1$
- addCompName(IDialogConstants.SELECT_ALL_ID, "selectAll"); //$NON-NLS-1$
- addCompName(IDialogConstants.SELECT_TYPES_ID, "selectTypes"); //$NON-NLS-1$
- addCompName(IDialogConstants.SKIP_ID, "skip"); //$NON-NLS-1$
- addCompName(IDialogConstants.STOP_ID, "stop"); //$NON-NLS-1$
- addCompName(IDialogConstants.YES_ID, "yes"); //$NON-NLS-1$
- addCompName(IDialogConstants.YES_TO_ALL_ID, "yesToAll"); //$NON-NLS-1$
- }
-
- /**
- * add component id <-> name mapping
- * @param compID the component identifier
- * @param compName the component name
- */
- private static void addCompName(int compID, String compName) {
- String staticNamePreafix = "dialog.button."; //$NON-NLS-1$
- componentNAMES.put(new Integer(compID),
- staticNamePreafix + compName);
- }
-
- /**
- * {@inheritDoc}
- */
- public void handleEvent(Event event) {
- addNameData(event.widget);
- Item [] items = new Item [] {};
- if (event.widget instanceof ToolBar) {
- items = ((ToolBar)event.widget).getItems();
- } else if (event.widget instanceof CoolBar) {
- items = ((CoolBar)event.widget).getItems();
- }
- for (int i = 0; i < items.length; i++) {
- addNameData(items[i]);
- }
- }
-
- /**
- * Adds name information to the given widget, if necessary.
- *
- * @param widget The widget to name.
- */
- private void addNameData(Widget widget) {
- // Assign name
- if (widget != null && !widget.isDisposed()) {
- if (widget.getData(Startup.TEST_RCP_DATA_KEY) != null) {
- // Component already has a name, so we don't need to
- // assign a new one.
- return;
- }
- Object data = getWidgetData(widget);
-
- if (data instanceof IContributionItem) {
- // Name buttons and toolitems according to the action that
- // they represent, if possible.
- String actionId = ((IContributionItem)data).getId();
- if (actionId != null && actionId.trim().length() > 0) {
-
- widget.setData(Startup.TEST_RCP_DATA_KEY, actionId);
- ComponentHandler.getAutHierarchy()
- .refreshComponentName(widget);
-
- }
- } else if (data instanceof PreferenceDialog) {
- PreferenceDialog prefDialog = (PreferenceDialog)data;
-
- // Add a listener to add name data as pages are
- // selected/created.
- prefDialog.addPageChangedListener(
- new IPageChangedListener() {
-
- public void pageChanged(PageChangedEvent event) {
- addNameDataToPrefPage(event.getSelectedPage());
- }
-
- });
-
- // The listener won't notice the initally selected page,
- // so we have to add that name data here.
- addNameDataToPrefPage(prefDialog.getSelectedPage());
- }
- if (generateNames && data instanceof Dialog) {
- Dialog dialog = (Dialog)data;
- setNameForDialogButtonBarButtons(dialog);
- }
- }
- }
-
- /**
- *
- * @param widget The widget for which to get the data.
- * @return the data object corresponding to the given widget.
- */
- private Object getWidgetData(Widget widget) {
- Object data = widget.getData();
-
- // Handle the case of CoolBar containing CoolItem containing ToolBar.
- // The CoolItem is the widget that represents the toolbar
- // contribution, but it (the CoolItem) is not in our AUT
- // component hierarchy, due to the fact that the ToolBar's
- // getParent() returns the CoolBar rather than the CoolItem.
- // To resolve this discrepancy, we use the data from the
- // coresponding CoolItem to generate a name for the ToolBar.
- try {
- if (widget instanceof ToolBar) {
- Composite toolbarParent = ((ToolBar)widget).getParent();
- if (toolbarParent instanceof CoolBar) {
- CoolItem [] coolItems =
- ((CoolBar)toolbarParent).getItems();
- for (int i = 0; i < coolItems.length; i++) {
- CoolItem item = coolItems[i];
- if (item != null
- && item.getControl() == widget) {
- data = item.getData();
- }
- }
- }
- }
- } catch (NoClassDefFoundError e) {
- // we may be running in eRCP which doesn't know
- // about
- // toolbars, so we just ignore this
- }
-
- return data;
- }
-
- /**
- * @param dialog the dialog
- */
- private void setNameForDialogButtonBarButtons(Dialog dialog) {
- try {
- Method getButtonMethod = Dialog.class.getDeclaredMethod(
- "getButton", new Class[] { int.class }); //$NON-NLS-1$
- getButtonMethod.setAccessible(true);
-
- Iterator components = componentNAMES.keySet().iterator();
- while (components.hasNext()) {
- Integer componentID = (Integer)components.next();
- invokeNameSetting(dialog, getButtonMethod, componentID,
- componentNAMES.get(componentID));
- }
- } catch (SecurityException e) {
- // ignore exceptions
- } catch (NoSuchMethodException e) {
- // ignore exceptions
- }
- }
-
- /**
- * use this method to set a name on the given object
- * @param useObject the object
- * @param methodToInvoke the method to invoke
- * @param buttonID the button id
- * @param buttonName the button name
- */
- private void invokeNameSetting(Object useObject, Method methodToInvoke,
- Integer buttonID, Object buttonName) {
- Object ret = null;
- try {
- ret = methodToInvoke.invoke(useObject,
- new Object[] { buttonID });
- } catch (IllegalArgumentException e) {
- // ignore exceptions
- } catch (IllegalAccessException e) {
- // ignore exceptions
- } catch (InvocationTargetException e) {
- // ignore exceptions
- }
- if (ret instanceof Button) {
- Button button = (Button)ret;
- if (button.getData(TEST_RCP_DATA_KEY) == null) {
- button.setData(TEST_RCP_DATA_KEY, buttonName);
- }
- }
- }
-
- /**
- * Attaches name data to the given page appropriate.
- *
- * @param selectedPage The page to which we will try to attach the
- * name data.
- */
- private void addNameDataToPrefPage(Object selectedPage) {
- if (selectedPage == null) {
- return;
- }
- PreferenceManager prefMan =
- PlatformUI.getWorkbench().getPreferenceManager();
-
- Iterator iter =
- prefMan.getElements(PreferenceManager.PRE_ORDER).iterator();
- while (iter.hasNext()) {
- IPreferenceNode prefNode =
- (IPreferenceNode)iter.next();
- if (selectedPage.equals(prefNode.getPage())) {
- Control pageControl =
- prefNode.getPage().getControl();
- String prefNodeId = prefNode.getId();
-
- // Assign id to page composite only if the composite exists
- // and if the id is usable
- if (pageControl != null
- && !pageControl.isDisposed()
- && pageControl.getData(
- Startup.TEST_RCP_DATA_KEY) == null
- && prefNodeId != null
- && prefNodeId.trim().length() > 0) {
-
- pageControl.setData(
- Startup.TEST_RCP_DATA_KEY, prefNodeId);
-
- Shell prefShell =
- pageControl.getDisplay().getActiveShell();
- Event activateEvent = new Event();
- activateEvent.time = (int)System.currentTimeMillis();
- activateEvent.type = SWT.Activate;
- activateEvent.widget = prefShell;
- prefShell.notifyListeners(SWT.Activate, activateEvent);
-
- }
-
- // We found the page we were looking for, so we can stop
- // searching.
- break;
- }
- }
- }
- }
-
- /**
- * Assigns the controls (Composites) of Parts unique names based on
- * their partId.
- *
- * @author BREDEX GmbH
- * @created Oct 5, 2007
- */
- static class PartNamingListener implements IPartListener2 {
-
- /**
- *
- * {@inheritDoc}
- */
- public void partActivated(IWorkbenchPartReference partRef) {
- // Do nothing
- }
-
- /**
- *
- * {@inheritDoc}
- */
- public void partBroughtToTop(IWorkbenchPartReference partRef) {
- // Do nothing
- }
-
- /**
- *
- * {@inheritDoc}
- */
- public void partClosed(IWorkbenchPartReference partRef) {
- // Do nothing
- }
-
- /**
- *
- * {@inheritDoc}
- */
- public void partDeactivated(IWorkbenchPartReference partRef) {
- // Do nothing
- }
-
- /**
- *
- * {@inheritDoc}
- */
- public void partHidden(IWorkbenchPartReference partRef) {
- // Do nothing
- }
-
- /**
- *
- * {@inheritDoc}
- */
- public void partInputChanged(IWorkbenchPartReference partRef) {
- // Do nothing
- }
-
- /**
- *
- * {@inheritDoc}
- */
- public void partOpened(IWorkbenchPartReference partRef) {
- if (partRef instanceof WorkbenchPartReference) {
- WorkbenchPartReference workbenchPartRef =
- (WorkbenchPartReference)partRef;
- // Get pane contents and part id
- Control partContent =
- workbenchPartRef.getPane().getControl();
-
- if (partContent != null
- && !partContent.isDisposed()
- && partContent.getData(TEST_RCP_DATA_KEY) == null) {
-
- // Name pane control based on part
- String partId = workbenchPartRef.getId();
-
- // Append secondary id, if necessary
- if (partRef instanceof IViewReference) {
- String secondaryId =
- ((IViewReference)partRef).getSecondaryId();
- if (secondaryId != null) {
- partId += "_" + secondaryId; //$NON-NLS-1$
- }
- }
-
- if (partId == null || partId.trim().length() == 0) {
- // Don't assign a name if the id is unusable
- return;
- }
- partContent.setData(TEST_RCP_DATA_KEY, partId);
-
- // Assign a corresponding id to the part's toolbar, if
- // possible/usable.
- Control partToolbar =
- workbenchPartRef.getPane().getToolBar();
- if (partToolbar != null) {
- partToolbar.setData(TEST_RCP_DATA_KEY,
- partId + TOOLBAR_ID_SUFFIX);
- }
-
- // A repaint is required in order for the aut component
- // hierarchy to notice the change.
- Shell shell = PlatformUI.getWorkbench()
- .getActiveWorkbenchWindow().getShell();
- repaintToolbars(shell);
- }
- }
-
- }
-
- /**
- *
- * {@inheritDoc}
- */
- public void partVisible(IWorkbenchPartReference partRef) {
- partOpened(partRef);
- }
-
- }
-
-
- /**
- * {@inheritDoc}
- */
- public void earlyStartup() {
- final Properties envVars =
- EnvironmentUtils.getProcessEnvironment();
-
- if (getValue(AutConfigConstants.AUT_AGENT_HOST, envVars) != null) {
- final IWorkbench workbench = PlatformUI.getWorkbench();
- final Display display = workbench.getDisplay();
- initAutServer(display, envVars);
-
- display.syncExec(new Runnable() {
- public void run() {
- // add GEF listeners (and listener appenders) for GEF, if available
- if (Platform.getBundle(Startup.GEF_BUNDLE_ID) != null) {
- m_gefListener = new GefPartListener();
- AUTServer.getInstance().addInspectorListenerAppender(
- new GefInspectorListenerAppender());
- }
-
- // add naming listener
- ComponentNamer namer = new ComponentNamer();
- display.addFilter(SWT.Paint, namer);
- display.addFilter(SWT.Activate, namer);
-
- // Add window listener
- addWindowListener(workbench);
-
- IWorkbenchWindow window =
- workbench.getActiveWorkbenchWindow();
- if (window != null) {
- // Add part listeners
- addPartListeners(window);
-
- // Handle existing parts
- IWorkbenchPage [] pages = window.getPages();
- for (int i = 0; i < pages.length; i++) {
- IEditorReference[] editorRefs =
- pages[i].getEditorReferences();
- IViewReference[] viewRefs =
- pages[i].getViewReferences();
- for (int j = 0; j < editorRefs.length; j++) {
- partNamingListener.partOpened(editorRefs[j]);
- if (m_gefListener != null) {
- m_gefListener.partOpened(editorRefs[j]);
- }
- }
- for (int k = 0; k < viewRefs.length; k++) {
- partNamingListener.partOpened(viewRefs[k]);
- if (m_gefListener != null) {
- m_gefListener.partOpened(viewRefs[k]);
- }
- }
- }
-
- // If a shell already exists, make sure that we get another
- // chance to immediately add/use our naming listeners.
- Shell mainShell = window.getShell();
- if (mainShell != null && !mainShell.isDisposed()) {
- repaintToolbars(mainShell);
- }
- }
- }
-
- });
- // Registering the AdapterFactory for SWT at the registry
- GUIAdapterFactoryRegistry.getInstance()
- .registerFactory(new SWTAdapterFactory());
- // add listener to AUT
- AUTServer.getInstance().addToolKitEventListenerToAUT();
-
- }
-
- }
-
- /**
- * Initializes the AUT Server for the host application.
- *
- * @param display The Display to use for the AUT Server.
- * @param envVars Environment variables to consult in configuring the
- * AUT Server.
- */
- private void initAutServer(Display display, Properties envVars) {
- ((SwtAUTServer)AUTServer.getInstance(CommandConstants
- .AUT_SWT_SERVER)).setDisplay(display);
- AUTServer.getInstance().setAutAgentHost(getValue(
- AutConfigConstants.AUT_AGENT_HOST, envVars));
- AUTServer.getInstance().setAutAgentPort(getValue(
- AutConfigConstants.AUT_AGENT_PORT, envVars));
- AUTServer.getInstance().setAutID(getValue(
- AutConfigConstants.AUT_NAME, envVars));
-
- AUTServer.getInstance().start(true);
- }
-
- /**
- * Adds a window listener to the given workbench. This listener adds a
- * part naming listener to opening windows.
- *
- * @param workbench The workbench to which the listener will be added.
- */
- private void addWindowListener(IWorkbench workbench) {
- workbench.addWindowListener(new IWindowListener() {
-
- public void windowActivated(IWorkbenchWindow window) {
- addPartListeners(window);
- }
-
- public void windowClosed(IWorkbenchWindow window) {
- // Do nothing
- }
-
- public void windowDeactivated(IWorkbenchWindow window) {
- // Do nothing
- }
-
- public void windowOpened(IWorkbenchWindow window) {
- addPartListeners(window);
- }
-
- });
- }
-
- /**
- * Fires a paint event on all Toolbars and Coolbars within the given shell.
- *
- * @param mainShell The shell to search for Coolbars and Toolbars.
- */
- public static void repaintToolbars(Shell mainShell) {
- List toolbarList = new ArrayList();
- getToolbars(mainShell, toolbarList);
- Iterator iter = toolbarList.iterator();
- while (iter.hasNext()) {
- Control toolbar = (Control)iter.next();
- toolbar.update();
- toolbar.redraw();
- toolbar.update();
- }
- }
-
- /**
- * Adds all Coolbars and Toolbars within the given composite to the given
- * list. The search is is also performed recursively on children of the
- * given composite.
- *
- * @param composite The composite to search.
- * @param toolbarList The list to which found Toolbars and Coolbars will
- * be added.
- */
- public static void getToolbars(Composite composite,
- List toolbarList) {
-
- if (composite != null && !composite.isDisposed()) {
- Control [] children = composite.getChildren();
- for (int i = 0; i < children.length; i++) {
- if (children[i] instanceof Composite) {
- getToolbars((Composite)children[i], toolbarList);
- }
- try {
- if (children[i] instanceof ToolBar
- || children[i] instanceof CoolBar) {
-
- toolbarList.add(children[i]);
- }
- } catch (NoClassDefFoundError e) {
- // we may be running in eRCP which doesn't know about
- // toolbars, so we just ignore this
- }
- }
- }
- }
-
- /**
- * Add part listeners to the given window.
- *
- * @param window The window to which the listeners will be added.
- */
- private void addPartListeners(IWorkbenchWindow window) {
- window.getPartService().addPartListener(partNamingListener);
- if (m_gefListener != null) {
- window.getPartService().addPartListener(m_gefListener);
- }
- }
-
- /**
- * Returns the value for a given property. First, <code>envVars</code>
- * is checked for the given property. If this
- * property cannot be found there, the
- * Java System Properties will be checked. If the property is not
- * found there, <code>null</code> will be returned.
- *
- * @param envVars The first source to check for the given property.
- * @param propName The name of the property for which to find the value.
- * @return The value for the given property name, or <code>null</code> if
- * given property name cannot be found.
- */
- private String getValue(String propName, Properties envVars) {
- String value =
- envVars.getProperty(propName);
- if (value == null) {
- value = System.getProperty(propName);
- }
- return value;
- }
-}
diff --git a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/installer/BundleInstaller.java b/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/installer/BundleInstaller.java
new file mode 100644
index 000000000..556147bb7
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/installer/BundleInstaller.java
@@ -0,0 +1,213 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2013 BREDEX GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BREDEX GmbH - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.jubula.rc.rcp.installer;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+
+/**
+ * This bundle activator installs the Jubula RCP accessor.
+ * All embedded bundles are installed and only the specialized
+ * bundles depending on Eclipse e3 or e4 are starting correctly.
+ */
+public class BundleInstaller implements BundleActivator {
+
+ /** An bundle name to identify a pure e4 application. */
+ private static final String E4_SPECIFIC_BUNDLE =
+ "org.eclipse.e4.core.services"; //$NON-NLS-1$
+
+ /** An bundle name to identify a pure e4 application. */
+ private static final String SWT_SPECIFIC_BUNDLE =
+ "org.eclipse.swt"; //$NON-NLS-1$
+
+ /** The suffixes of the bundles used in Eclipse RCP e3. */
+ private static final String BUNDLE_FOLDER_SUFFIX_SWT = ".swt"; //$NON-NLS-1$
+
+ /** The suffixes of the bundles used in Eclipse RCP e3. */
+ private static final String BUNDLE_FOLDER_SUFFIX_E3 = ".e3"; //$NON-NLS-1$
+
+ /** The suffixes of the bundles used in Eclipse RCP e4. */
+ private static final String BUNDLE_FOLDER_SUFFIX_E4 = ".e4"; //$NON-NLS-1$
+
+ /** The suffixes of the bundles used in Eclipse RCP e4. */
+ private static final String BUNDLE_FOLDER_SUFFIX_E4_SWT = ".e4.swt"; //$NON-NLS-1$
+
+ /**
+ * Install embedded bundles, if they have not been already installed.
+ * @param context The bundle context.
+ * @throws Exception
+ * @see #installBundles(BundleContext)
+ * @see #startBundles(List)
+ * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ // install and start the bundles for the RCP accessor
+ List bundleFolderSuffixes = getBundleFolderSuffixes(context);
+ try {
+ List installedBundles = installAllBundles(
+ context, bundleFolderSuffixes);
+ startBundles(installedBundles);
+ } catch (Throwable t) {
+ t.printStackTrace(); // unexpected exception
+ }
+ }
+
+ /**
+ * @param context The bundle context.
+ * @return The bundle folder suffix depending on the RCP version
+ * identified by the existence of {@link #E4_SPECIFIC_BUNDLE},
+ * i.e. {@link #BUNDLE_FOLDER_SUFFIX_E3} or {@link #BUNDLE_FOLDER_SUFFIX_E4_SWT}.
+ */
+ private static List getBundleFolderSuffixes(
+ BundleContext context) {
+ List bundleFolderSuffixes = new ArrayList();
+ bundleFolderSuffixes.add(""); //$NON-NLS-1$
+ Bundle[] installedBundles = context.getBundles();
+ if (isBundleInstalled(installedBundles, E4_SPECIFIC_BUNDLE)) {
+ bundleFolderSuffixes.add(BUNDLE_FOLDER_SUFFIX_E4);
+ if (isBundleInstalled(installedBundles, SWT_SPECIFIC_BUNDLE)) {
+ // e4 with SWT has been found
+ bundleFolderSuffixes.add(BUNDLE_FOLDER_SUFFIX_SWT);
+ bundleFolderSuffixes.add(BUNDLE_FOLDER_SUFFIX_E4_SWT);
+ }
+ } else {
+ // e3 has been found (only with SWT)
+ bundleFolderSuffixes.add(BUNDLE_FOLDER_SUFFIX_SWT);
+ bundleFolderSuffixes.add(BUNDLE_FOLDER_SUFFIX_E3);
+ }
+ return bundleFolderSuffixes;
+ }
+
+ /**
+ * @param installedBundles The array of installed bundles.
+ * @param bundleName The bundle name searching for.
+ * @return True, if the given array contains the given bundle name.
+ */
+ private static boolean isBundleInstalled(Bundle[] installedBundles,
+ String bundleName) {
+ for (int i = 0; i < installedBundles.length; i++) {
+ if (bundleName.compareTo(
+ installedBundles[i].getSymbolicName()) == 0) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Calls {@link #installBundlesWithSuffix(BundleContext, String)} with all suffixes.
+ * @param context The bundle context.
+ * @param bundleFolderSuffixes A string list of the bundle folder suffixes.
+ * @return A list of all newly installed bundles.
+ * @throws BundleException
+ * @throws IOException
+ * @see BundleIterator#installBundle()
+ */
+ private static List installAllBundles(
+ BundleContext context, List bundleFolderSuffixes)
+ throws BundleException, IOException {
+ List bundles = new ArrayList();
+ Iterator suffixes = bundleFolderSuffixes.iterator();
+ while (suffixes.hasNext()) {
+ bundles.addAll(installBundlesWithSuffix(
+ context, (String) suffixes.next()));
+ }
+ return bundles;
+ }
+
+ /**
+ * Install all bundles located in the directory named "bundles",
+ * if they are not already installed.
+ * <p>Attention:
+ * One bundle is randomly chosen out of a set of bundles with the same name
+ * and with different versions located in the "bundles/" directory, but this
+ * situation should normally not appear.
+ * @param context The bundle context.
+ * @param suffix The string defining the suffix of the bundle folder.
+ * @return The newly installed bundles.
+ */
+ private static List installBundlesWithSuffix(BundleContext context,
+ String suffix)
+ throws IOException, BundleException,
+ SecurityException, IllegalArgumentException {
+ List bundles = new ArrayList();
+ BundleIterator it = new BundleIterator(context, suffix);
+ while (it.hasNext()) {
+ it.next(); // move to next bundle in bundle folder
+ Bundle newBundle = it.installBundle();
+ if (newBundle != null) {
+ // remember all newly installed bundles
+ bundles.add(newBundle);
+ }
+ }
+ return bundles;
+ }
+
+ /**
+ * Start the given bundles (only newly installed).
+ * Attention:
+ * <ul>
+ * <li>Newly installed bundles must be started to activate them in the first application invocation.</li>
+ * <li>Newly installed bundles must be started <i>after</i> all necessary bundles are installed.
+ * Otherwise the OSGI framework may fail with unresolved dependencies.</li>
+ * <li>If the bundles are already installed by a previous application invocation, the bundles are
+ * started automatically by the OSGI framework and are not started by this method.</li>
+ * </ul>
+ * @param bundles The list of bundles to start.
+ * @throws BundleException
+ */
+ private static void startBundles(List bundles) throws BundleException {
+ Iterator it = bundles.iterator();
+ while (it.hasNext()) {
+ Bundle bundle = ((Bundle) (it.next()));
+ bundle.start();
+ }
+ }
+
+ /**
+ * Stop all currently running bundles installed by this activator.
+ * @param context The bundle context.
+ * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ stopAllBundles(context, getBundleFolderSuffixes(context));
+ }
+
+ /**
+ * @param context The bundle context.
+ * @param bundleFolderSuffixes The string list of bundle folder suffixes,
+ * which defines the bundles to stop.
+ */
+ private static void stopAllBundles(
+ BundleContext context, List bundleFolderSuffixes) {
+ Iterator itSuffixes = bundleFolderSuffixes.iterator();
+ while (itSuffixes.hasNext()) {
+ BundleIterator it = new BundleIterator(
+ context, (String) itSuffixes.next());
+ while (it.hasNext()) {
+ it.next();
+ try {
+ it.uninstallBundle();
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ }
+ }
+ }
+
+}
diff --git a/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/installer/BundleIterator.java b/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/installer/BundleIterator.java
new file mode 100644
index 000000000..a65f2afa6
--- /dev/null
+++ b/org.eclipse.jubula.rc.rcp/src/org/eclipse/jubula/rc/rcp/installer/BundleIterator.java
@@ -0,0 +1,155 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2013 BREDEX GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BREDEX GmbH - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.jubula.rc.rcp.installer;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+
+/**
+ * Helper class for installing OSGI bundles located in a bundle. This class
+ * requires bundle files (*.jar) in the directory named "bundles/" in the given
+ * bundle context. The file names must contain a version between the last '_'
+ * and the file name extension.
+ */
+public class BundleIterator {
+
+ /** The directory to search for bundles. */
+ private static final String BUNDLES_DIR = "bundles"; //$NON-NLS-1$
+
+ /** The file pattern to search for bundles. */
+ private static final String FILE_PATTERN = "*.jar"; //$NON-NLS-1$
+
+ /** The context containing the bundles to install. */
+ private BundleContext m_context;
+
+ /** The URL list of the bundles to install. */
+ private Enumeration m_urls;
+
+ /** The current URL of the iterator. */
+ private URL m_url;
+
+ /** The current bundle name of the iterator. */
+ private String m_bundleName;
+
+ /** The current bundle of the iterator. */
+ private Bundle m_bundle;
+
+ /**
+ * @param context
+ * The context containing the bundles to install in the directory
+ * named "bundles/". Each bundle file must end with ".jar".
+ * @param bundleFolderSuffix The suffix for the bundle folder added to "bundles/".
+ */
+ public BundleIterator(BundleContext context, String bundleFolderSuffix) {
+ this.m_context = context; // store context for later usage
+ m_urls = context.getBundle()
+ .findEntries(
+ // the directory searching for bundles
+ BUNDLES_DIR + bundleFolderSuffix,
+ // the file pattern (*.jar)
+ FILE_PATTERN,
+ // false = search not recursively
+ false);
+ if (m_urls == null) {
+ // create an empty enumeration if no bundles have been found
+ m_urls = Collections.enumeration(new ArrayList());
+ }
+ }
+
+ /**
+ * Iterator method.
+ *
+ * @return True, if there are one or more bundles left to install, otherwise
+ * false.
+ */
+ public boolean hasNext() {
+ return m_urls.hasMoreElements();
+ }
+
+ /**
+ * Iterate to next bundle.
+ * @return The current bundle, if it is already installed, otherwise null.
+ */
+ public Bundle next() {
+ m_url = (URL) m_urls.nextElement();
+ m_bundleName = getBundleName(m_url);
+ m_bundle = m_context.getBundle(m_bundleName);
+ return m_bundle;
+ }
+
+ /**
+ * Installs the current bundle, if it has not been already installed.
+ * @return The already installed or newly installed bundle.
+ * @throws IOException Errors with input stream of bundle.
+ * @see BundleContext#installBundle(String, java.io.InputStream)
+ * for detailed exception description.
+ */
+ public Bundle installBundle()
+ throws IOException, BundleException,
+ SecurityException, IllegalStateException {
+ if (m_bundle != null) {
+ // bundle exists
+ return m_bundle;
+ }
+ // bundle does not exist, so install it
+ BufferedInputStream inputStream = new BufferedInputStream(
+ m_url.openStream());
+ try {
+ m_bundle = m_context.installBundle(m_bundleName, inputStream);
+ } finally {
+ inputStream.close(); // installBundle() needs closing of input
+ // stream
+ }
+ return m_bundle;
+ }
+
+ /**
+ * Stop the current bundle, if it is installed and activated.
+ * @return True, if the bundle was active and has been stopped, otherwise false.
+ */
+ public boolean uninstallBundle() {
+ if (m_bundle != null) {
+ try {
+ m_bundle.uninstall(); // uninstall bundle
+ return true;
+ } catch (Throwable e) {
+ System.err.println(e);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Convert e. g.
+ * "bundleentry://6.fwk29851476/bundles/de.test_1.0.0.201301182302.jar"
+ * to "de.test" by using the string between the last char '/' and
+ * '_'.
+ *
+ * @param url
+ * The URL of the bundle.
+ * @return The bundle name.
+ */
+ private static String getBundleName(URL url) {
+ String urlString = url.getFile();
+ int indexBegin = urlString.lastIndexOf('/') + 1;
+ int indexEnd = urlString.lastIndexOf('_');
+ return urlString.substring(indexBegin, indexEnd);
+ }
+
+}
diff --git a/org.eclipse.jubula.rc.swt/META-INF/MANIFEST.MF b/org.eclipse.jubula.rc.swt/META-INF/MANIFEST.MF
index adfc811c0..c856d3d0a 100644
--- a/org.eclipse.jubula.rc.swt/META-INF/MANIFEST.MF
+++ b/org.eclipse.jubula.rc.swt/META-INF/MANIFEST.MF
@@ -12,10 +12,11 @@ Require-Bundle: org.apache.commons.beanutils;bundle-version="[1.7.0,2.0.0)",
org.eclipse.jubula.tools;bundle-version="[2.0.0,2.1.0)",
org.eclipse.jubula.communication;bundle-version="[2.0.0,2.1.0)",
org.eclipse.jubula.rc.common;bundle-version="[2.0.0,2.1.0)",
- org.eclipse.swt;bundle-version="[3.1.0,4.0.0)"
+ org.eclipse.swt;bundle-version="[3.3.0,5.0.0)"
Bundle-RequiredExecutionEnvironment: J2SE-1.4
Export-Package: com.bredexsw.guidancer.autswtserver.implclasses,
org.eclipse.jubula.rc.swt,
+ org.eclipse.jubula.rc.swt.tester,
org.eclipse.jubula.rc.swt.commands,
org.eclipse.jubula.rc.swt.components,
org.eclipse.jubula.rc.swt.driver,
@@ -23,4 +24,6 @@ Export-Package: com.bredexsw.guidancer.autswtserver.implclasses,
org.eclipse.jubula.rc.swt.implclasses.tree,
org.eclipse.jubula.rc.swt.interfaces,
org.eclipse.jubula.rc.swt.listener,
+ org.eclipse.jubula.rc.swt.tester.adapter,
+ org.eclipse.jubula.rc.swt.tester.adapter.factory,
org.eclipse.jubula.rc.swt.utils
diff --git a/org.eclipse.jubula.releng.server.rc.rcp/.gitignore b/org.eclipse.jubula.releng.server.rc.rcp/.gitignore
new file mode 100644
index 000000000..5b670009e
--- /dev/null
+++ b/org.eclipse.jubula.releng.server.rc.rcp/.gitignore
@@ -0,0 +1,2 @@
+/target
+/workspace
diff --git a/org.eclipse.jubula.releng.server.rc.rcp/.project b/org.eclipse.jubula.releng.server.rc.rcp/.project
new file mode 100644
index 000000000..2a4cb5d24
--- /dev/null
+++ b/org.eclipse.jubula.releng.server.rc.rcp/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.jubula.releng.server.rc.rcp</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.jubula.releng.server.rc.rcp/pom.xml b/org.eclipse.jubula.releng.server.rc.rcp/pom.xml
new file mode 100644
index 000000000..e08e98b8f
--- /dev/null
+++ b/org.eclipse.jubula.releng.server.rc.rcp/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (c) 2004, 2013 BREDEX GmbH. All rights reserved. This program
+ and the accompanying materials are made available under the terms of the
+ Eclipse Public License v1.0 which accompanies this distribution, and is available
+ at http://www.eclipse.org/legal/epl-v10.html -->
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.jubula.releng.server</artifactId>
+ <groupId>org.eclipse.jubula</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.jubula.releng.server</relativePath>
+ </parent>
+ <groupId>org.eclipse.jubula</groupId>
+ <artifactId>org.eclipse.jubula.releng.server.rc.rcp</artifactId>
+ <name>Eclipse Jubula Server Remote Control Components</name>
+ <description>Release engineering for Jubula server remote control components.</description>
+ <version>2.0.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <modules>
+ <module>../org.eclipse.jubula.rc.rcp.feature</module>
+ <module>../org.eclipse.jubula.rc.rcp.common</module>
+ <module>../org.eclipse.jubula.rc.rcp.swt</module>
+ <module>../org.eclipse.jubula.rc.rcp.e3</module>
+ <module>../org.eclipse.jubula.rc.rcp.e3.specific</module>
+ <module>../org.eclipse.jubula.rc.rcp.site</module>
+ <module>../org.eclipse.jubula.rc.rcp.e4.releng</module>
+ </modules>
+ <build>
+ <plugins>
+ <!-- Compile only necessary sources. -->
+ <plugin>
+ <groupId>net.java.maven-incremental-build</groupId>
+ <artifactId>incremental-build-plugin</artifactId>
+ <version>1.6</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>incremental-build</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/org.eclipse.jubula.releng.server/pom.xml b/org.eclipse.jubula.releng.server/pom.xml
index a2d9f2d1a..c7b417a6c 100644
--- a/org.eclipse.jubula.releng.server/pom.xml
+++ b/org.eclipse.jubula.releng.server/pom.xml
@@ -23,6 +23,7 @@
<module>../org.eclipse.jubula.rc.common.agent</module>
<module>../org.eclipse.jubula.rc.swing</module>
<module>../org.eclipse.jubula.rc.swt</module>
+ <module>../org.eclipse.jubula.releng.server.rc.rcp</module>
<module>../org.eclipse.jubula.rc.rcp</module>
<module>../org.eclipse.jubula.app.autrun</module>
<module>../org.eclipse.jubula.app.autagent</module>
diff --git a/org.eclipse.jubula.toolkit.provider.rcp.gef/resources/xml/ComponentConfiguration.xml b/org.eclipse.jubula.toolkit.provider.rcp.gef/resources/xml/ComponentConfiguration.xml
index 44198d0fb..2777b542d 100644
--- a/org.eclipse.jubula.toolkit.provider.rcp.gef/resources/xml/ComponentConfiguration.xml
+++ b/org.eclipse.jubula.toolkit.provider.rcp.gef/resources/xml/ComponentConfiguration.xml
@@ -17,7 +17,7 @@
<toolkitComponent type="org.eclipse.draw2d.FigureCanvas">
<realizes>guidancer.abstract.Widget</realizes>
- <testerClass>org.eclipse.jubula.rc.rcp.gef.implclasses.FigureCanvasImplClass</testerClass>
+ <testerClass>org.eclipse.jubula.rc.rcp.e3.gef.implclasses.FigureCanvasImplClass</testerClass>
<componentClass name="org.eclipse.draw2d.FigureCanvas" />
<action name="CompSystem.CheckFigureExists" changed="4.0">
<method>gdCheckFigureExists</method>

Back to the top