Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTorsten Sommer2013-05-13 12:05:58 +0000
committerTorsten Sommer2013-05-13 12:05:58 +0000
commitf44bcb5445652b87acabb513acc79f6a2facf60d (patch)
treedb7b5543da39fe1b66936ef110bbe4cd5ac7cad1
parent9e42521c27d6d846df76ef94d99266f3b95f03fc (diff)
downloadorg.eclipse.efxclipse-f44bcb5445652b87acabb513acc79f6a2facf60d.tar.gz
org.eclipse.efxclipse-f44bcb5445652b87acabb513acc79f6a2facf60d.tar.xz
org.eclipse.efxclipse-f44bcb5445652b87acabb513acc79f6a2facf60d.zip
Moved ECP projects from GitHub.
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/.classpath7
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/.project28
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/META-INF/MANIFEST.MF20
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/OSGI-INF/modelElementOpener.xml7
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/build.properties5
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/plugin.xml89
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/DummyControlFactory.java15
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ECPModelElementOpener.java12
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ECPModelElementOpenerImpl.java43
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ECPUIPlugin.java50
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/FXControlFactory.java48
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/FXPropertyObservableValue.java49
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ModelElementEditor.java9
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/StringControl.java84
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/CheckBoxControl.java57
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/DummyControl.java57
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/EnumControl.java100
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/FormControlFactory.java52
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/IControlConstants.java8
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/MultiReferenceControl.java58
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/MultiTextControl.java60
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/ReferenceControl.java89
-rw-r--r--bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/TextFieldControl.java139
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.feature/.project17
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.feature/build.properties1
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.feature/feature.xml632
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.feature/pom.xml16
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.jemmy.feature/.project17
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.jemmy.feature/build.properties1
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.jemmy.feature/feature.xml23
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.jemmy/.classpath7
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.jemmy/.project28
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.jemmy/META-INF/MANIFEST.MF55
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.jemmy/at.bestsolution.efxclipse.ecp.app.jemmy.launch50
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.jemmy/build.properties3
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.jemmy/pom.xml79
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.jemmy/src/at/bestsolution/efxclipse/ecp/app/jemmy/SampleTestCase.java25
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.jemmy/src/at/bestsolution/efxclipse/ecp/app/jemmy/TestSuite.java12
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.product/.project11
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.product/at.bestsolution.efxclipse.ecp.app.product.product30
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.product/at.bestsolution.efxclipse.ecp.app.product.product.launch38
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.product/pom.xml40
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.releng/.project11
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.releng/at.bestsolution.efxclipse.tooling.build-0.0.1.jarbin0 -> 3955 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.releng/build.xml51
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.releng/fx-osgi-launch.jarbin0 -> 16855 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app.releng/pom.xml176
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/.classpath7
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/.project39
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/Application.e4xmi50
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/ECPAppProposal.pdfbin0 -> 104376 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/META-INF/MANIFEST.MF59
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/TODOS.txt31
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/build.properties8
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/css/default.css1
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/EPackage.gifbin0 -> 207 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/EPackageUnknown.gifbin0 -> 207 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/add.gifbin0 -> 318 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/bricks.pngbin0 -> 825 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/checkout_project.gifbin0 -> 577 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/checkout_project_old.gifbin0 -> 574 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/checkout_project_wiz.pngbin0 -> 6107 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/database_go.pngbin0 -> 698 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/database_save.pngbin0 -> 755 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/delete.gifbin0 -> 351 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/delete_wiz.pngbin0 -> 5628 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/error.gifbin0 -> 339 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/folder_brick.pngbin0 -> 735 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/link_with_editor.gifbin0 -> 160 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/magnifier.pngbin0 -> 615 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/pending.gifbin0 -> 718 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/project_closed.gifbin0 -> 349 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/project_open.gifbin0 -> 351 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/properties_wiz.pngbin0 -> 5496 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/property_obj.gifbin0 -> 204 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/provider.gifbin0 -> 328 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/provider_disabled.gifbin0 -> 211 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/providers.gifbin0 -> 214 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/refresh.gifbin0 -> 330 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/repositories.gifbin0 -> 588 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/repository.gifbin0 -> 545 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/icons/sample.gifbin0 -> 983 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/notes.txt12
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/plugin.xml19
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/pom.xml33
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/ModelEditorPart.java146
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/ModelExplorerPart.java111
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/RepositoryBrowserPart.java64
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/arrow.pngbin0 -> 360 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/dialogs/ReferenceSelectionDialog.fxml21
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/dialogs/ReferenceSelectionDialog.fxml.bak21
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/dialogs/ReferenceSelectionDialog.java64
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/handlers/ExitHandler.java27
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/handlers/OpenModelElementHandler.java67
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/provider/ECPItemProviderAdapterFactory.java59
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/provider/ECPProviderItemProvider.java83
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/provider/fldr_obj.gifbin0 -> 216 bytes
-rw-r--r--demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/style.css56
98 files changed, 3387 insertions, 0 deletions
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/.classpath b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/.classpath
new file mode 100644
index 000000000..1fa3e6803
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/.project b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/.project
new file mode 100644
index 000000000..43079c940
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>at.bestsolution.efxclipse.ecp.ui</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/META-INF/MANIFEST.MF b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..b90fff9a4
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: ECP for JavaFX UI
+Bundle-SymbolicName: at.bestsolution.efxclipse.ecp.ui;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: at.bestsolution.efxclipse.ecp.ui.ECPUIPlugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.emf.ecp.edit;bundle-version="1.0.0",
+ org.eclipse.e4.ui.model.workbench;bundle-version="0.10.1",
+ org.eclipse.e4.ui.workbench;bundle-version="0.11.0",
+ org.eclipse.e4.core.di;bundle-version="1.2.0",
+ org.eclipse.e4.core.contexts;bundle-version="1.2.0",
+ com.google.guava;bundle-version="10.0.1",
+ org.eclipse.fx.emf.edit.ui;bundle-version="0.8.1",
+ at.bestsolution.efxclipse.runtime.ecp.dummy;bundle-version="1.0.0"
+Bundle-ActivationPolicy: lazy
+Export-Package: at.bestsolution.efxclipse.ecp.ui
+Service-Component: OSGI-INF/modelElementOpener.xml
+Import-Package: javax.inject;version="1.0.0"
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/OSGI-INF/modelElementOpener.xml b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/OSGI-INF/modelElementOpener.xml
new file mode 100644
index 000000000..0ba024413
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/OSGI-INF/modelElementOpener.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="at.bestsolution.efxclipse.ecp.app">
+ <implementation class="at.bestsolution.efxclipse.ecp.ui.ECPModelElementOpenerImpl"/>
+ <service>
+ <provide interface="at.bestsolution.efxclipse.ecp.ui.ECPModelElementOpener"/>
+ </service>
+</scr:component>
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/build.properties b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/build.properties
new file mode 100644
index 000000000..e9863e281
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/plugin.xml b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/plugin.xml
new file mode 100644
index 000000000..c8353f8b3
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/plugin.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.emf.ecp.edit.controls">
+ <!--
+ <factory
+ class="at.bestsolution.efxclipse.ecp.ui.controls.DummyControl$Factory"
+ controlClass="javafx.scene.Node"
+ id="at.bestsolution.efxclipse.ecp.ui.factories.dummyControl"
+ showLabel="true">
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Object">
+ </staticTest>
+ </factory>
+ -->
+ <factory
+ class="at.bestsolution.efxclipse.ecp.ui.controls.CheckBoxControl$Factory"
+ controlClass="javafx.scene.Node"
+ id="at.bestsolution.efxclipse.ecp.ui.factories.checkBoxControl"
+ showLabel="true">
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Boolean">
+ </staticTest>
+ </factory>
+ <factory
+ class="at.bestsolution.efxclipse.ecp.ui.controls.TextFieldControl$Factory"
+ controlClass="javafx.scene.Node"
+ id="at.bestsolution.efxclipse.ecp.ui.factories.textFieldControl"
+ showLabel="true">
+
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.math.BigDecimal">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.math.BigInteger">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Character">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.util.Date">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Double">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Float">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Integer">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Long">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.Short">
+ </staticTest>
+ <staticTest
+ priority="1"
+ singleValue="true"
+ supportedClassType="java.lang.String">
+ </staticTest>
+ </factory>
+ </extension>
+
+</plugin>
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/DummyControlFactory.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/DummyControlFactory.java
new file mode 100644
index 000000000..db99f10c1
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/DummyControlFactory.java
@@ -0,0 +1,15 @@
+package at.bestsolution.efxclipse.ecp.ui;
+
+import org.eclipse.emf.ecp.edit.Control;
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+@SuppressWarnings("restriction")
+public class DummyControlFactory implements Control.Factory {
+
+ @Override
+ public Control createControl(IItemPropertyDescriptor itemPropertyDescriptor, ECPControlContext context) {
+ return null;
+ }
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ECPModelElementOpener.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ECPModelElementOpener.java
new file mode 100644
index 000000000..21ef0532b
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ECPModelElementOpener.java
@@ -0,0 +1,12 @@
+package at.bestsolution.efxclipse.ecp.ui;
+
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.e4.ui.workbench.modeling.EModelService;
+import org.eclipse.e4.ui.workbench.modeling.EPartService;
+import org.eclipse.emf.ecore.EObject;
+
+public interface ECPModelElementOpener {
+
+ void openModelElement(EObject modelElement, MApplication application, EModelService modelService, EPartService partService);
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ECPModelElementOpenerImpl.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ECPModelElementOpenerImpl.java
new file mode 100644
index 000000000..3dcb2e4a0
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ECPModelElementOpenerImpl.java
@@ -0,0 +1,43 @@
+package at.bestsolution.efxclipse.ecp.ui;
+
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.e4.ui.model.application.ui.basic.MBasicFactory;
+import org.eclipse.e4.ui.model.application.ui.basic.MInputPart;
+import org.eclipse.e4.ui.model.application.ui.basic.MPartStack;
+import org.eclipse.e4.ui.workbench.modeling.EModelService;
+import org.eclipse.e4.ui.workbench.modeling.EPartService;
+import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+
+import at.bestsolution.efxclipse.runtime.ecp.dummy.DummyControlContext;
+import at.bestsolution.efxclipse.runtime.ecp.dummy.DummyWorkspace;
+
+@SuppressWarnings("restriction")
+public class ECPModelElementOpenerImpl implements ECPModelElementOpener {
+
+ @Override
+ public void openModelElement(EObject modelElement, MApplication application, EModelService modelService, EPartService partService) {
+ MPartStack stack = (MPartStack)
+ modelService.find("at.bestsolution.efxclipse.ecp.app.partstacks.editors",
+ application);
+
+ MInputPart part = MBasicFactory.INSTANCE.createInputPart();
+ part.setContributionURI("bundleclass://at.bestsolution.efxclipse.ecp.app/at.bestsolution.efxclipse.ecp.ModelEditorPart");
+
+// part.setIconURI("platform:/plugin/de.vogella.rcp.e4.todo/icons/sample.gif");
+ part.setCloseable(true);
+
+ stack.getChildren().add(part);
+ partService.showPart(part, PartState.ACTIVATE);
+
+ part.getContext().set(EObject.class, modelElement);
+
+ ModelElementEditor editor = (ModelElementEditor) part.getObject();
+
+ ECPControlContext modelElementContext = new DummyControlContext(DummyWorkspace.INSTANCE.getPlayer());
+
+ editor.setInput(modelElementContext);
+ }
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ECPUIPlugin.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ECPUIPlugin.java
new file mode 100644
index 000000000..e9988a02c
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ECPUIPlugin.java
@@ -0,0 +1,50 @@
+package at.bestsolution.efxclipse.ecp.ui;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class ECPUIPlugin extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "at.bestsolution.efxclipse.ecp.ui"; //$NON-NLS-1$
+
+ // The shared instance
+ private static ECPUIPlugin plugin;
+
+ /**
+ * The constructor
+ */
+ public ECPUIPlugin() {
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static ECPUIPlugin getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/FXControlFactory.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/FXControlFactory.java
new file mode 100644
index 000000000..07e6eb040
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/FXControlFactory.java
@@ -0,0 +1,48 @@
+package at.bestsolution.efxclipse.ecp.ui;
+
+import java.util.Set;
+
+import javafx.beans.property.Property;
+import javafx.scene.control.TextField;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecp.edit.AbstractControl;
+import org.eclipse.emf.ecp.edit.ControlDescription;
+import org.eclipse.emf.ecp.edit.ControlFactory;
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+public class FXControlFactory implements ControlFactory {
+
+ public static final FXControlFactory INSTANCE = new FXControlFactory();
+
+ @Override
+ public <T> AbstractControl<T> createControl(T parent, IItemPropertyDescriptor itemPropertyDescriptor, ECPControlContext context) {
+ return null;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public <T> AbstractControl<T> createControl(T parent, IItemPropertyDescriptor itemPropertyDescriptor, ECPControlContext context,
+ String controlId) {
+ EStructuralFeature feature = (EStructuralFeature) itemPropertyDescriptor.getFeature(context.getModelElement());
+
+ if(feature instanceof EAttribute) {
+ EAttribute attribute = (EAttribute) feature;
+ if(attribute.getEAttributeType() == EcorePackage.Literals.ESTRING) {
+ return (AbstractControl<T>) new StringControl(true, itemPropertyDescriptor, feature, context, false);
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public Set<ControlDescription> getControlDescriptors() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/FXPropertyObservableValue.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/FXPropertyObservableValue.java
new file mode 100644
index 000000000..5bd3f75a4
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/FXPropertyObservableValue.java
@@ -0,0 +1,49 @@
+package at.bestsolution.efxclipse.ecp.ui;
+
+import javafx.beans.property.Property;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+
+import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
+import org.eclipse.core.databinding.observable.value.ValueDiff;
+
+
+public class FXPropertyObservableValue<T> extends AbstractObservableValue {
+
+ Property<T> property;
+
+ public FXPropertyObservableValue(Property<T> property) {
+ this.property = property;
+ property.addListener(new ChangeListener<T>() {
+
+ @Override
+ public void changed(ObservableValue<? extends T> observableValue, final T oldValue, final T newValue) {
+ fireValueChange(new ValueDiff() {
+
+ @Override
+ public Object getOldValue() {
+ return oldValue;
+ }
+
+ @Override
+ public Object getNewValue() {
+ return newValue;
+ }
+
+ });
+ }
+
+ });
+ }
+
+ @Override
+ public Object getValueType() {
+ return null;
+ }
+
+ @Override
+ protected Object doGetValue() {
+ return property.getValue();
+ }
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ModelElementEditor.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ModelElementEditor.java
new file mode 100644
index 000000000..15a337bd2
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/ModelElementEditor.java
@@ -0,0 +1,9 @@
+package at.bestsolution.efxclipse.ecp.ui;
+
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+
+public interface ModelElementEditor {
+
+ void setInput(ECPControlContext modelElement);
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/StringControl.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/StringControl.java
new file mode 100644
index 000000000..ab5f195dd
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/StringControl.java
@@ -0,0 +1,84 @@
+package at.bestsolution.efxclipse.ecp.ui;
+
+import javafx.scene.Node;
+import javafx.scene.control.Label;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.Priority;
+
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.databinding.edit.EditingDomainEObjectObservableValue;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecp.edit.AbstractControl;
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+public class StringControl extends AbstractControl<Node> {
+
+ public StringControl(boolean showLabel, IItemPropertyDescriptor itemPropertyDescriptor, EStructuralFeature feature,
+ ECPControlContext modelElementContext, boolean embedded) {
+ super(showLabel, itemPropertyDescriptor, feature, modelElementContext, embedded);
+ }
+
+ @Override
+ public Node createControl(Node parent) {
+ IItemPropertyDescriptor descriptor = getItemPropertyDescriptor();
+ EObject modelElement = getModelElementContext().getModelElement();
+ EditingDomain editingDomain = getModelElementContext().getEditingDomain();
+ DataBindingContext dataBindingContext = getModelElementContext().getDataBindingContext();
+
+ HBox hBox = new HBox();
+
+ Label label = new Label(descriptor.getDisplayName(modelElement));
+ label.setPrefWidth(150);
+ hBox.getChildren().add(label);
+
+ Object feature = descriptor.getFeature(modelElement);
+
+ if(feature instanceof EAttribute) {
+ EAttribute attribute = (EAttribute) feature;
+ if(attribute.getEAttributeType() == EcorePackage.Literals.ESTRING) {
+ TextField textField = new TextField();
+ HBox.setHgrow(textField, Priority.ALWAYS);
+ hBox.getChildren().add(textField);
+
+ //Property<String> textProperty = EMFEditFXProperties.value(editingDomain, modelElement, attribute);
+ //textField.textProperty().bindBidirectional(textProperty);
+
+ FXPropertyObservableValue<String> targetObservableValue = new FXPropertyObservableValue<String>(textField.textProperty());
+
+ EditingDomainEObjectObservableValue modelObservableValue = new EditingDomainEObjectObservableValue(editingDomain, modelElement, attribute);
+
+ dataBindingContext.bindValue(targetObservableValue, modelObservableValue);
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public void dispose() {
+ // do nothing
+ }
+
+ @Override
+ public void handleValidation(Diagnostic diagnostic) {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ public void resetValidation() {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ public void setEditable(boolean isEditable) {
+ // TODO Auto-generated method stub
+ }
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/CheckBoxControl.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/CheckBoxControl.java
new file mode 100644
index 000000000..f3de0a6e3
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/CheckBoxControl.java
@@ -0,0 +1,57 @@
+package at.bestsolution.efxclipse.ecp.ui.controls;
+
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.Label;
+import javafx.scene.layout.HBox;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecp.edit.Control;
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+@SuppressWarnings("restriction")
+public class CheckBoxControl extends HBox implements Control {
+
+ public CheckBoxControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
+ getStyleClass().add("formControl");
+
+ EObject modelElement = context.getModelElement();
+
+ String displayName = propertyDescriptor.getDisplayName(modelElement);
+ Label label = new Label(displayName);
+ label.getStyleClass().add(IControlConstants.CONTROL_LABEL_CLASS);
+ getChildren().add(label);
+
+ EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
+ Object val = modelElement.eGet(feature);
+
+ CheckBox checkBox = new CheckBox();
+ checkBox.setSelected((Boolean) val);
+
+ getChildren().add(checkBox);
+ }
+
+ @Override
+ public void handleValidation(Diagnostic diagnostic) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void resetValidation() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public static class Factory implements Control.Factory {
+
+ @Override
+ public Control createControl(IItemPropertyDescriptor itemPropertyDescriptor, ECPControlContext context) {
+ return new CheckBoxControl(itemPropertyDescriptor, context);
+ }
+
+ }
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/DummyControl.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/DummyControl.java
new file mode 100644
index 000000000..c47621bee
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/DummyControl.java
@@ -0,0 +1,57 @@
+package at.bestsolution.efxclipse.ecp.ui.controls;
+
+
+import javafx.scene.control.Label;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.Priority;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecp.edit.Control;
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+@SuppressWarnings("restriction")
+public class DummyControl extends HBox implements Control {
+
+ public DummyControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
+ EObject modelElement = context.getModelElement();
+
+ String displayName = propertyDescriptor.getDisplayName(modelElement);
+ Label label = new Label(displayName);
+ label.getStyleClass().add(IControlConstants.CONTROL_LABEL_CLASS);
+ getChildren().add(label);
+
+ EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
+ Object val = modelElement.eGet(feature);
+
+ TextField textField = new TextField();
+ textField.setText(val.toString());
+ textField.setDisable(true);
+ HBox.setHgrow(textField, Priority.ALWAYS);
+
+ getChildren().add(textField);
+ }
+
+ @Override
+ public void handleValidation(Diagnostic diagnostic) {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ public void resetValidation() {
+ // TODO Auto-generated method stub
+ }
+
+ public static class Factory implements Control.Factory {
+
+ @Override
+ public Control createControl(IItemPropertyDescriptor itemPropertyDescriptor, ECPControlContext context) {
+ return new DummyControl(itemPropertyDescriptor, context);
+ }
+
+ }
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/EnumControl.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/EnumControl.java
new file mode 100644
index 000000000..c8b553500
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/EnumControl.java
@@ -0,0 +1,100 @@
+package at.bestsolution.efxclipse.ecp.ui.controls;
+
+import java.util.ArrayList;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.scene.control.ChoiceBox;
+import javafx.scene.control.Label;
+import javafx.scene.control.SingleSelectionModel;
+import javafx.scene.layout.HBox;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecp.edit.Control;
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+@SuppressWarnings("restriction")
+public class EnumControl extends HBox implements Control {
+
+ public EnumControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
+ final EObject modelElement = context.getModelElement();
+ final EditingDomain editingDomain = context.getEditingDomain();
+
+ String displayName = propertyDescriptor.getDisplayName(modelElement);
+ Label label = new Label(displayName);
+ label.getStyleClass().add(IControlConstants.CONTROL_LABEL_CLASS);
+ getChildren().add(label);
+
+ final EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
+
+ ChoiceBox<Enumerator> choiceBox = new ChoiceBox<>();
+
+ EClassifier type = feature.getEType();
+
+ EEnum eEnum = (EEnum) type;
+
+ EList<EEnumLiteral> enumLiterals = eEnum.getELiterals();
+
+ ArrayList<Enumerator> values = new ArrayList<Enumerator>();
+
+ if (!feature.isRequired())
+ values.add(null);
+
+ for (EEnumLiteral literal : enumLiterals)
+ values.add(literal.getInstance());
+
+ choiceBox.getItems().addAll(values);
+
+ SingleSelectionModel<Enumerator> selectionModel = choiceBox.getSelectionModel();
+
+ Enumerator val = (Enumerator) modelElement.eGet(feature);
+
+ selectionModel.select(val);
+
+ getChildren().add(choiceBox);
+
+ selectionModel.selectedItemProperty().addListener(new ChangeListener<Enumerator>() {
+
+ @Override
+ public void changed(ObservableValue<? extends Enumerator> observableValue, Enumerator oldValue, Enumerator newValue) {
+ Command command = SetCommand.create(editingDomain, modelElement, feature, newValue);
+ if (command.canExecute())
+ editingDomain.getCommandStack().execute(command);
+ }
+
+ });
+ }
+
+ @Override
+ public void handleValidation(Diagnostic diagnostic) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void resetValidation() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public static class Factory implements Control.Factory {
+
+ @Override
+ public Control createControl(IItemPropertyDescriptor itemPropertyDescriptor, ECPControlContext context) {
+ return new EnumControl(itemPropertyDescriptor, context);
+ }
+
+ }
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/FormControlFactory.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/FormControlFactory.java
new file mode 100644
index 000000000..9caff4d08
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/FormControlFactory.java
@@ -0,0 +1,52 @@
+package at.bestsolution.efxclipse.ecp.ui.controls;
+
+import javafx.scene.Node;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+public class FormControlFactory {
+
+ public Node createFormControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
+
+ EObject modelElement = context.getModelElement();
+ EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
+
+ EClassifier type = feature.getEType();
+
+ if (feature.isMany()) {
+ if (type == EcorePackage.Literals.ESTRING) {
+ return new MultiTextControl(propertyDescriptor, context);
+ }
+ if (feature instanceof EReference) {
+ return new MultiReferenceControl(propertyDescriptor, context);
+ }
+ } else {
+
+ if (type == EcorePackage.Literals.EBOOLEAN) {
+ return new CheckBoxControl(propertyDescriptor, context);
+ } else if (type instanceof EEnum) {
+ return new EnumControl(propertyDescriptor, context);
+ } else if (feature instanceof EAttribute) {
+ TextFieldControl textFieldControl = new TextFieldControl(propertyDescriptor, context);
+ if (type instanceof EDataType && textFieldControl.isControlFor((EDataType) type))
+ return textFieldControl;
+ } else if (feature instanceof EReference) {
+ return new ReferenceControl(propertyDescriptor, context);
+ }
+
+ }
+
+ return new DummyControl(propertyDescriptor, context);
+
+ }
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/IControlConstants.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/IControlConstants.java
new file mode 100644
index 000000000..21b5e93ee
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/IControlConstants.java
@@ -0,0 +1,8 @@
+package at.bestsolution.efxclipse.ecp.ui.controls;
+
+public interface IControlConstants {
+
+ String CONTROL_LABEL_CLASS = "controlLabel";
+ String INVALID_CLASS = "invalid";
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/MultiReferenceControl.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/MultiReferenceControl.java
new file mode 100644
index 000000000..5e7a15573
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/MultiReferenceControl.java
@@ -0,0 +1,58 @@
+package at.bestsolution.efxclipse.ecp.ui.controls;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
+import javafx.scene.control.ChoiceBox;
+import javafx.scene.control.Label;
+import javafx.scene.control.ListView;
+import javafx.scene.control.SingleSelectionModel;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.Priority;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+public class MultiReferenceControl extends HBox {
+
+ public MultiReferenceControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
+ final EObject modelElement = context.getModelElement();
+ final EditingDomain editingDomain = context.getEditingDomain();
+
+ getStyleClass().add("multiReferenceControl");
+
+ String displayName = propertyDescriptor.getDisplayName(modelElement);
+ Label label = new Label(displayName);
+ label.getStyleClass().add(IControlConstants.CONTROL_LABEL_CLASS);
+ getChildren().add(label);
+
+ final EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
+
+ ListView<Object> listView = new ListView<>();
+
+ List<Object> values = (List<Object>) modelElement.eGet(feature);
+
+ listView.setItems(FXCollections.observableList(values));
+
+ getChildren().add(listView);
+
+ listView.setDisable(true);
+
+ HBox.setHgrow(listView, Priority.ALWAYS);
+ }
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/MultiTextControl.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/MultiTextControl.java
new file mode 100644
index 000000000..fdccf1a16
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/MultiTextControl.java
@@ -0,0 +1,60 @@
+package at.bestsolution.efxclipse.ecp.ui.controls;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
+import javafx.scene.control.ChoiceBox;
+import javafx.scene.control.Label;
+import javafx.scene.control.ListView;
+import javafx.scene.control.SingleSelectionModel;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.Priority;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+public class MultiTextControl extends HBox {
+
+ public MultiTextControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
+ final EObject modelElement = context.getModelElement();
+ final EditingDomain editingDomain = context.getEditingDomain();
+
+ getStyleClass().add("multiTextControl");
+
+ String displayName = propertyDescriptor.getDisplayName(modelElement);
+ Label label = new Label(displayName);
+ label.getStyleClass().add(IControlConstants.CONTROL_LABEL_CLASS);
+ getChildren().add(label);
+
+ final EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
+
+
+
+ ListView<String> listView = new ListView<>();
+
+ List<String> values = (List<String>) modelElement.eGet(feature);
+
+ listView.setItems(FXCollections.observableList(values));
+
+ getChildren().add(listView);
+
+ listView.setDisable(true);
+
+ HBox.setHgrow(listView, Priority.ALWAYS);
+ }
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/ReferenceControl.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/ReferenceControl.java
new file mode 100644
index 000000000..47333c072
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/ReferenceControl.java
@@ -0,0 +1,89 @@
+package at.bestsolution.efxclipse.ecp.ui.controls;
+
+import java.net.URL;
+
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.scene.control.Button;
+import javafx.scene.control.Label;
+import javafx.scene.image.ImageView;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.Priority;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+public class ReferenceControl extends HBox {
+
+ public ReferenceControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
+
+ final EObject modelElement = context.getModelElement();
+ final EditingDomain editingDomain = context.getEditingDomain();
+
+ String displayName = propertyDescriptor.getDisplayName(modelElement);
+ Label label = new Label(displayName);
+ label.getStyleClass().add(IControlConstants.CONTROL_LABEL_CLASS);
+ getChildren().add(label);
+
+ final EReference feature = (EReference) propertyDescriptor.getFeature(modelElement);
+
+ Object value = modelElement.eGet(feature);
+
+ ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+ IItemLabelProvider labelProvider = (IItemLabelProvider) adapterFactory.adapt(value, IItemLabelProvider.class);
+
+ HBox hBox = new HBox();
+
+ Label label2 = new Label(labelProvider.getText(value));
+
+ URL image = (URL) labelProvider.getImage(value);
+
+ hBox.getChildren().add(new ImageView(image.toExternalForm()));
+ hBox.getChildren().add(label2);
+ Button button = new Button("...");
+ button.setOnAction(new EventHandler<ActionEvent>() {
+
+ @Override
+ public void handle(ActionEvent arg0) {
+// ReferenceSelectionDialog referenceSelectionDialog = new ReferenceSelectionDialog(null, null);
+// referenceSelectionDialog.showAndWait();
+
+// final Stage dialog = new Stage();
+// dialog.initModality(Modality.WINDOW_MODAL);
+//// dialog.initOwner(primaryStage);
+// dialog.setScene(
+// new Scene(
+// HBoxBuilder.create().styleClass("modal-dialog").children(
+// LabelBuilder.create().text("Will you like this page?").build(),
+// ButtonBuilder.create().text("Yes").defaultButton(true).onAction(new EventHandler<ActionEvent>() {
+// @Override public void handle(ActionEvent actionEvent) {
+// dialog.close();
+// }
+// }).build(),
+// ButtonBuilder.create().text("No").cancelButton(true).onAction(new EventHandler<ActionEvent>() {
+// @Override public void handle(ActionEvent actionEvent) {
+// dialog.close();
+// }
+// }).build()
+// ).build()
+// , Color.TRANSPARENT
+// )
+// );
+// dialog.showAndWait();
+ }
+ });
+
+ hBox.getChildren().add(button);
+
+ HBox.setHgrow(label2, Priority.ALWAYS);
+
+ getChildren().add(hBox);
+ }
+
+}
diff --git a/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/TextFieldControl.java b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/TextFieldControl.java
new file mode 100644
index 000000000..2af6a9c4a
--- /dev/null
+++ b/bundles/runtime/at.bestsolution.efxclipse.ecp.ui/src/at/bestsolution/efxclipse/ecp/ui/controls/TextFieldControl.java
@@ -0,0 +1,139 @@
+package at.bestsolution.efxclipse.ecp.ui.controls;
+
+import java.util.Collection;
+import java.util.Objects;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.ObservableList;
+import javafx.scene.control.Label;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.Priority;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecp.edit.Control;
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+import com.google.common.collect.Sets;
+
+@SuppressWarnings("restriction")
+public class TextFieldControl extends HBox implements Control {
+
+ final Collection<EDataType> supportedTypes = Sets.newHashSet(
+ EcorePackage.Literals.EBIG_DECIMAL,
+ EcorePackage.Literals.EBIG_INTEGER,
+ EcorePackage.Literals.EBOOLEAN,
+ EcorePackage.Literals.ECHAR,
+ EcorePackage.Literals.ECHARACTER_OBJECT,
+ EcorePackage.Literals.EDATE,
+ EcorePackage.Literals.EDOUBLE,
+ EcorePackage.Literals.EDOUBLE_OBJECT,
+ EcorePackage.Literals.EFLOAT,
+ EcorePackage.Literals.EFLOAT_OBJECT,
+ EcorePackage.Literals.EINT,
+ EcorePackage.Literals.EINTEGER_OBJECT,
+ EcorePackage.Literals.ELONG,
+ EcorePackage.Literals.ELONG_OBJECT,
+ EcorePackage.Literals.ESHORT,
+ EcorePackage.Literals.ESHORT_OBJECT,
+ EcorePackage.Literals.ESTRING);
+ private TextField textField;
+
+ public boolean isControlFor(EDataType type) {
+ return supportedTypes.contains(type);
+ }
+
+ public TextFieldControl(IItemPropertyDescriptor propertyDescriptor, ECPControlContext context) {
+
+ final EObject modelElement = context.getModelElement();
+ final EditingDomain editingDomain = context.getEditingDomain();
+
+ String displayName = propertyDescriptor.getDisplayName(modelElement);
+ Label label = new Label(displayName);
+ label.getStyleClass().add(IControlConstants.CONTROL_LABEL_CLASS);
+ getChildren().add(label);
+
+ final EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
+
+ //final EDataTypeValueHandler valueHandler = new EDataTypeValueHandler((EDataType) feature.getEType());
+
+ Object value = modelElement.eGet(feature);
+
+ textField = null;//new TextField(valueHandler.toString(value));
+
+ textField.textProperty().addListener(new ChangeListener<String>() {
+
+ @Override
+ public void changed(ObservableValue<? extends String> observableValue, String oldText, String newText) {
+ String message = "lala"; //valueHandler.isValid(newText);
+ ObservableList<String> styleClass = textField.getStyleClass();
+ if (message == null)
+ styleClass.remove(IControlConstants.INVALID_CLASS);
+ else if (!styleClass.contains(IControlConstants.INVALID_CLASS))
+ styleClass.add(IControlConstants.INVALID_CLASS);
+ }
+
+ });
+
+ textField.focusedProperty().addListener(new ChangeListener<Boolean>() {
+
+ @Override
+ public void changed(ObservableValue<? extends Boolean> observableValue, Boolean oldFocused, Boolean newFocused) {
+ if (!newFocused) {
+ Object oldValue = modelElement.eGet(feature);
+ String text = textField.getText();
+ String message = "lala"; // valueHandler.isValid(text);
+
+ if (message == null) {
+ Object newValue = "lala"; // valueHandler.toValue(text);
+
+ // only commit if the value has changed
+ if (!Objects.equals(oldValue, newValue)) {
+ Command command = SetCommand.create(editingDomain, modelElement, feature, newValue);
+ if (command.canExecute())
+ editingDomain.getCommandStack().execute(command);
+ }
+ } else {
+ System.err.println(message);
+ }
+ }
+ }
+
+ });
+
+ HBox.setHgrow(textField, Priority.ALWAYS);
+
+ getChildren().add(textField);
+ }
+
+ @Override
+ public void handleValidation(Diagnostic diagnostic) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void resetValidation() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public static class Factory implements Control.Factory {
+
+ @Override
+ public Control createControl(IItemPropertyDescriptor itemPropertyDescriptor, ECPControlContext context) {
+ return new TextFieldControl(itemPropertyDescriptor, context);
+ }
+
+ }
+
+}
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.feature/.project b/demos/at.bestsolution.efxclipse.ecp.app.feature/.project
new file mode 100644
index 000000000..f07cf1750
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>at.bestsolution.efxclipse.ecp.app.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/demos/at.bestsolution.efxclipse.ecp.app.feature/build.properties b/demos/at.bestsolution.efxclipse.ecp.app.feature/build.properties
new file mode 100644
index 000000000..b045d3976
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.feature/build.properties
@@ -0,0 +1 @@
+bin.includes = feature.xml \ No newline at end of file
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.feature/feature.xml b/demos/at.bestsolution.efxclipse.ecp.app.feature/feature.xml
new file mode 100644
index 000000000..f789ac762
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.feature/feature.xml
@@ -0,0 +1,632 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+ id="at.bestsolution.efxclipse.ecp.app.feature"
+ label="ECP for JavaFX Application Feature"
+ version="1.0.0.qualifier"
+ provider-name="${BundleProject_bundleVendor}">
+
+ <description url="http://www.efxclipse.org">
+ TODO FILL WITH CONTENT
+ </description>
+
+ <copyright url="http://www.efxclipse.org">
+ TODO FILL WITH CONTENT
+ </copyright>
+
+ <license url="http://www.efxclipse.org">
+ TODO FILL WITH CONTENT
+ </license>
+
+ <plugin
+ id="at.bestsolution.efxclipse.ecp.app"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="com.ibm.icu"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="javax.annotation"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="javax.inject"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="javax.xml"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.apache.commons.logging"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.commands"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.contenttype"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.databinding"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.databinding.observable"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.databinding.property"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.expressions"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.filesystem"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.jobs"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.resources"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.runtime"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.runtime.compatibility.registry"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ fragment="true"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.e4.core.commands"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.e4.core.contexts"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.e4.core.di"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.e4.core.di.extensions"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.e4.core.services"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.e4.ui.di"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.e4.ui.model.workbench"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.e4.ui.services"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.e4.ui.workbench"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.emf.common"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.emf.databinding"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.emf.ecore"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.emf.ecore.change"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.emf.ecore.xmi"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.app"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.common"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.concurrent"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.ds"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.event"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.launcher"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.preferences"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.registry"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.util"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osgi.services"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.console"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.apache.felix.gogo.command"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.apache.felix.gogo.runtime"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.apache.felix.gogo.shell"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osgi"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.core"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.core.databinding"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.core.guice"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"/>
+
+ <plugin
+ id="org.eclipse.fx.core.log4j"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.core.p2"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.demo.contacts"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.demo.contacts.app"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.demo.contacts.edit"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.demo.contacts.edit.tests"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ fragment="true"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.demo.contacts.tests"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ fragment="true"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.emf.databinding"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.emf.edit.ui"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.emf.edit.ui.tests"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ fragment="true"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.formats.svg"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ide.css"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ide.css.tests"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ide.css.ui"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"/>
+
+ <plugin
+ id="org.eclipse.fx.ide.jdt.core"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ide.jdt.ui"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ide.ui"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.javafx"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.osgi"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ fragment="true"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.osgi.util"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.animation"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.application"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.databinding"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.di"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.di.interopt"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.dialogs"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.keybindings"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.keybindings.e4"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.keybindings.generic"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.panes"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.services"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.theme"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.workbench.base"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.workbench.fx"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.workbench.fx.controls"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.workbench.renderers.base"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.workbench.renderers.fx"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.fx.ui.workbench3"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+</feature>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.feature/pom.xml b/demos/at.bestsolution.efxclipse.ecp.app.feature/pom.xml
new file mode 100644
index 000000000..639a36286
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.feature/pom.xml
@@ -0,0 +1,16 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <name>ECP for JavaFX - application feature</name>
+ <groupId>at.bestsolution.efxclipse.ecp</groupId>
+ <artifactId>at.bestsolution.efxclipse.ecp.app.feature</artifactId>
+ <packaging>eclipse-feature</packaging>
+
+ <parent>
+ <groupId>at.bestsolution.efxclipse.ecp</groupId>
+ <artifactId>at.bestsolution.efxclipse.ecp.app.releng</artifactId>
+ <relativePath>../at.bestsolution.efxclipse.ecp.app.releng/pom.xml</relativePath>
+ <version>1.0.0-SNAPSHOT</version>
+ </parent>
+
+</project> \ No newline at end of file
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.jemmy.feature/.project b/demos/at.bestsolution.efxclipse.ecp.app.jemmy.feature/.project
new file mode 100644
index 000000000..91701289d
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.jemmy.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>at.bestsolution.efxclipse.ecp.app.jemmy.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/demos/at.bestsolution.efxclipse.ecp.app.jemmy.feature/build.properties b/demos/at.bestsolution.efxclipse.ecp.app.jemmy.feature/build.properties
new file mode 100644
index 000000000..b045d3976
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.jemmy.feature/build.properties
@@ -0,0 +1 @@
+bin.includes = feature.xml \ No newline at end of file
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.jemmy.feature/feature.xml b/demos/at.bestsolution.efxclipse.ecp.app.jemmy.feature/feature.xml
new file mode 100644
index 000000000..20fb88d74
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.jemmy.feature/feature.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+ id="at.bestsolution.efxclipse.ecp.app.jemmy.feature"
+ label="ECP for JavaFX Jemmy JUnit Feature"
+ version="1.0.0.qualifier"
+ provider-name="${BundleProject_bundleVendor}"
+ >
+ <description url="http://www.efxclipse.org">
+ TODO FILL WITH CONTENT
+ </description>
+
+ <copyright url="http://www.efxclipse.org">
+ TODO FILL WITH CONTENT
+ </copyright>
+
+ <license url="http://www.efxclipse.org">
+ TODO FILL WITH CONTENT
+ </license>
+
+ <plugin id="at.bestsolution.efxclipse.ecp.app.jemmy" install-size="0" version="0.0.0" unpack="false" />
+
+
+</feature>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.jemmy/.classpath b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/.classpath
new file mode 100644
index 000000000..751c8f2e5
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.jemmy/.project b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/.project
new file mode 100644
index 000000000..43c807a77
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>at.bestsolution.efxclipse.ecp.app.jemmy</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.jemmy/META-INF/MANIFEST.MF b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..1f8e7dbaa
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/META-INF/MANIFEST.MF
@@ -0,0 +1,55 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: My Sample App Jemmy UI Tests
+Bundle-SymbolicName: at.bestsolution.efxclipse.ecp.app.jemmy
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment:
+Require-Bundle: org.junit4,
+ at.bestsolution.efxclipse.runtime.jemmy
+Import-Package: javax.inject;version="1.0.0",
+ javax.annotation;version="1.0.0",
+ javafx.animation;version="2.0.0",
+ javafx.application;version="2.0.0",
+ javafx.beans;version="2.0.0",
+ javafx.beans.binding;version="2.0.0",
+ javafx.beans.property;version="2.0.0",
+ javafx.beans.value;version="2.0.0",
+ javafx.collections;version="2.0.0",
+ javafx.concurrent;version="2.0.0",
+ javafx.event;version="2.0.0",
+ javafx.fxml;version="2.0.0",
+ javafx.geometry;version="2.0.0",
+ javafx.scene;version="2.0.0",
+ javafx.scene.chart;version="2.0.0",
+ javafx.scene.control;version="2.0.0",
+ javafx.scene.control.cell;version="2.0.0",
+ javafx.scene.effect;version="2.0.0",
+ javafx.scene.image;version="2.0.0",
+ javafx.scene.input;version="2.0.0",
+ javafx.scene.layout;version="2.0.0",
+ javafx.scene.media;version="2.0.0",
+ javafx.scene.paint;version="2.0.0",
+ javafx.scene.shape;version="2.0.0",
+ javafx.scene.text;version="2.0.0",
+ javafx.scene.transform;version="2.0.0",
+ javafx.scene.web;version="2.0.0",
+ javafx.stage;version="2.0.0",
+ javafx.util;version="2.0.0",
+ org.jemmy.action;version="3.0.0",
+ org.jemmy.browser;version="3.0.0",
+ org.jemmy.control;version="3.0.0",
+ org.jemmy.dock;version="3.0.0",
+ org.jemmy.env;version="3.0.0",
+ org.jemmy.fx;version="3.0.0",
+ org.jemmy.fx.control;version="3.0.0",
+ org.jemmy.fx.control.caspian;version="3.0.0",
+ org.jemmy.image;version="3.0.0",
+ org.jemmy.image.pixel;version="3.0.0",
+ org.jemmy.input;version="3.0.0",
+ org.jemmy.input.glass;version="3.0.0",
+ org.jemmy.interfaces;version="3.0.0",
+ org.jemmy.lookup;version="3.0.0",
+ org.jemmy.operators;version="3.0.0",
+ org.jemmy.resources;version="3.0.0",
+ org.jemmy.support;version="3.0.0",
+ org.jemmy.timing;version="3.0.0"
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.jemmy/at.bestsolution.efxclipse.ecp.app.jemmy.launch b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/at.bestsolution.efxclipse.ecp.app.jemmy.launch
new file mode 100644
index 000000000..c42db2a90
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/at.bestsolution.efxclipse.ecp.app.jemmy.launch
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
+<setAttribute key="additional_plugins"/>
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="featureDefaultLocation" value="workspace"/>
+<stringAttribute key="featurePluginResolution" value="workspace"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/my.app.sample.jemmy/src/my/app/sample/jemmy/TestSuite.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="at.bestsolution.efxclipse.ecp.app.jemmy.TestSuite"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-nl ${target.nl} -consoleLog -nosplash"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="at.bestsolution.efxclipse.ecp.app.jemmy"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx512m -Dosgi.framework.extensions=at.bestsolution.efxclipse.runtime.osgi -Dtest.jemmy.product=at.bestsolution.efxclipse.ecp.app.product"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.sdk.ide"/>
+<booleanAttribute key="run_in_ui_thread" value="false"/>
+<setAttribute key="selected_features">
+<setEntry value="at.bestsolution.efxclipse.ecp.app.jemmy.feature:default"/>
+<setEntry value="at.bestsolution.efxclipse.ecp.app.feature:default"/>
+<setEntry value="at.bestsolution.efxclipse.runtime.jemmy.junit.feature:default"/>
+<setEntry value="at.bestsolution.efxclipse.runtime.jemmy.feature:default"/>
+</setAttribute>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="true"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.jemmy/build.properties b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/build.properties
new file mode 100644
index 000000000..c634d9795
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/build.properties
@@ -0,0 +1,3 @@
+bin.includes = .,\
+ META-INF/
+source.. = src/
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.jemmy/pom.xml b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/pom.xml
new file mode 100644
index 000000000..b78cf7d86
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/pom.xml
@@ -0,0 +1,79 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <name>ECP for JavaFX - jemmy tests</name>
+ <groupId>at.bestsolution.efxclipse.ecp</groupId>
+ <artifactId>at.bestsolution.efxclipse.ecp.app.jemmy</artifactId>
+ <packaging>eclipse-test-plugin</packaging>
+
+ <parent>
+ <groupId>at.bestsolution.efxclipse.ecp</groupId>
+ <artifactId>at.bestsolution.efxclipse.ecp.app.releng</artifactId>
+ <relativePath>../at.bestsolution.efxclipse.ecp.app.releng/pom.xml</relativePath>
+ <version>1.0.0-SNAPSHOT</version>
+ </parent>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-surefire-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <testSuite>at.bestsolution.efxclipse.ecp.app.jemmy</testSuite>
+ <testClass>at.bestsolution.efxclipse.ecp.app.jemmy.TestSuite</testClass>
+ <useUIHarness>false</useUIHarness>
+ <useUIThread>false</useUIThread>
+ <argLine>-Xms40m -Xmx512m -Defxclipse.osgi.hook.debug=true -Dosgi.framework.extensions=at.bestsolution.efxclipse.runtime.osgi -Dtest.jemmy.product=at.bestsolution.efxclipse.ecp.app.product</argLine>
+ <appArgLine>-consoleLog -nosplash</appArgLine>
+ <application>org.eclipse.pde.junit.runtime.coretestapplication</application>
+ <dependencies>
+ <dependency>
+ <type>eclipse-feature</type>
+ <artifactId>at.bestsolution.efxclipse.ecp.app.feature</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ </dependencies>
+ <frameworkExtensions>
+ <frameworkExtension>
+ <groupId>at.bestsolution.efxclipse</groupId>
+ <artifactId>at.bestsolution.efxclipse.runtime.osgi</artifactId>
+ <version>${efx-version}</version>
+ </frameworkExtension>
+ </frameworkExtensions>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>test</phase>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <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>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.jemmy/src/at/bestsolution/efxclipse/ecp/app/jemmy/SampleTestCase.java b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/src/at/bestsolution/efxclipse/ecp/app/jemmy/SampleTestCase.java
new file mode 100644
index 000000000..2fbd0faf7
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/src/at/bestsolution/efxclipse/ecp/app/jemmy/SampleTestCase.java
@@ -0,0 +1,25 @@
+package at.bestsolution.efxclipse.ecp.app.jemmy;
+
+import junit.framework.Assert;
+
+import org.jemmy.fx.SceneDock;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class SampleTestCase {
+ protected static SceneDock scene;
+
+ @BeforeClass
+ public static void startApp() throws InterruptedException {
+ try {
+ scene = new SceneDock();
+ } catch(Throwable t ) {
+ t.printStackTrace();
+ }
+ }
+
+ @Test
+ public void sampleTestMethod() {
+ Assert.fail("Not implemented");
+ }
+}
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.jemmy/src/at/bestsolution/efxclipse/ecp/app/jemmy/TestSuite.java b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/src/at/bestsolution/efxclipse/ecp/app/jemmy/TestSuite.java
new file mode 100644
index 000000000..c8b2f238b
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.jemmy/src/at/bestsolution/efxclipse/ecp/app/jemmy/TestSuite.java
@@ -0,0 +1,12 @@
+package at.bestsolution.efxclipse.ecp.app.jemmy;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+import at.bestsolution.efxclipse.runtime.jemmy.OSGiJemmyBootstrapTestCase;
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses({ SampleTestCase.class })
+public class TestSuite extends OSGiJemmyBootstrapTestCase {
+
+}
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.product/.project b/demos/at.bestsolution.efxclipse.ecp.app.product/.project
new file mode 100644
index 000000000..02d5f3e23
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.product/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>at.bestsolution.efxclipse.ecp.app.product</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.product/at.bestsolution.efxclipse.ecp.app.product.product b/demos/at.bestsolution.efxclipse.ecp.app.product/at.bestsolution.efxclipse.ecp.app.product.product
new file mode 100644
index 000000000..695b08da8
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.product/at.bestsolution.efxclipse.ecp.app.product.product
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="ECP for JavaFX" uid="at.bestsolution.efxclipse.ecp.app.product" id="at.bestsolution.efxclipse.ecp.app.product" application="org.eclipse.fx.ui.workbench.fx.application" version="1.0.0" useFeatures="true" includeLaunchers="false">
+
+ <configIni use="default">
+ </configIni>
+
+ <launcherArgs>
+ <programArgs>-nosplash</programArgs>
+ <vmArgs>-Dosgi.framework.extensions=at.bestsolution.efxclipse.runtime.osgi</vmArgs>
+ </launcherArgs>
+
+ <windowImages/>
+
+ <plugins>
+ </plugins>
+
+ <features>
+ <feature id="at.bestsolution.efxclipse.ecp.app.feature" version="1.0.0.qualifier"/>
+ </features>
+
+ <configurations>
+ <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="0" />
+ <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />
+ <plugin id="org.eclipse.equinox.ds" autoStart="true" startLevel="1" />
+ <plugin id="org.eclipse.osgi" autoStart="true" startLevel="-1" />
+ </configurations>
+
+</product>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.product/at.bestsolution.efxclipse.ecp.app.product.product.launch b/demos/at.bestsolution.efxclipse.ecp.app.product/at.bestsolution.efxclipse.ecp.app.product.product.launch
new file mode 100644
index 000000000..d717a1bfc
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.product/at.bestsolution.efxclipse.ecp.app.product.product.launch
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<setAttribute key="additional_plugins"/>
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.fx.ui.workbench.fx.application"/>
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/at.bestsolution.efxclipse.ecp.app.product.product"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="featureDefaultLocation" value="workspace"/>
+<stringAttribute key="featurePluginResolution" value="workspace"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../runtime-at.bestsolution.efxclipse.ecp.app.product"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -nosplash"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dosgi.requiredJavaVersion=1.5 -Dhelp.lucene.tokenizer=standard -Xms40m -Xmx512m -Dosgi.framework.extensions=org.eclipse.fx.osgi"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="at.bestsolution.efxclipse.ecp.app.product"/>
+<stringAttribute key="productFile" value="/at.bestsolution.efxclipse.ecp.app.product/at.bestsolution.efxclipse.ecp.app.product.product"/>
+<setAttribute key="selected_features">
+<setEntry value="at.bestsolution.efxclipse.ecp.app.feature:default"/>
+</setAttribute>
+<stringAttribute key="selected_target_plugins" value="com.google.guava*11.0.1@default:default,com.google.inject@default:default,com.ibm.icu@default:default,javax.annotation@default:default,javax.inject@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.ant@default:default,org.apache.batik.css@default:default,org.apache.batik.util.gui@default:default,org.apache.batik.util@default:default,org.apache.commons.logging*1.1.1.v201101211721@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.log4j@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.win32.x86_64@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.ui.bindings@default:default,org.eclipse.e4.ui.css.core@default:default,org.eclipse.e4.ui.css.swt.theme@default:default,org.eclipse.e4.ui.css.swt@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.widgets@default:default,org.eclipse.e4.ui.workbench.addons.swt@default:default,org.eclipse.e4.ui.workbench.renderers.swt@default:default,org.eclipse.e4.ui.workbench.swt@default:default,org.eclipse.e4.ui.workbench3@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.databinding.edit@default:default,org.eclipse.emf.databinding@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.edit@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit@default:default,org.eclipse.emf.emfstore.examplemodel.edit@default:default,org.eclipse.emf.emfstore.examplemodel@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.concurrent@default:default,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.event@default:default,org.eclipse.equinox.launcher.win32.win32.x86_64@default:false,org.eclipse.equinox.launcher@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.equinox.weaving.hook@default:false,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface@default:default,org.eclipse.net4j.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.swt.win32.win32.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.team.core@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.hamcrest.core@default:default,org.junit*4.10.0.v4_10_0_v20120426-0900@default:default,org.junit4@default:default,org.objenesis@default:default,org.w3c.css.sac@default:default,org.w3c.dom.smil@default:default,org.w3c.dom.svg@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="at.bestsolution.efxclipse.ecp.app@default:default,at.bestsolution.efxclipse.ecp.ui@default:default,at.bestsolution.efxclipse.runtime.ecp.dummy@default:default,org.eclipse.emf.ecp.core@default:default,org.eclipse.emf.ecp.edit@default:default,org.eclipse.emf.emfstore.examplemodel.edit@default:default,org.eclipse.emf.emfstore.examplemodel@default:default,org.eclipse.fx.core.databinding@default:default,org.eclipse.fx.core.guice@default:default,org.eclipse.fx.core.log4j@default:default,org.eclipse.fx.core@default:default,org.eclipse.fx.emf.databinding@default:default,org.eclipse.fx.emf.edit.ui@default:default,org.eclipse.fx.javafx@default:default,org.eclipse.fx.osgi.util@default:default,org.eclipse.fx.osgi@default:false,org.eclipse.fx.ui.animation@default:default,org.eclipse.fx.ui.application@default:default,org.eclipse.fx.ui.databinding@default:default,org.eclipse.fx.ui.di.interopt@default:default,org.eclipse.fx.ui.di@default:default,org.eclipse.fx.ui.dialogs@default:default,org.eclipse.fx.ui.keybindings.e4@default:default,org.eclipse.fx.ui.keybindings.generic@default:default,org.eclipse.fx.ui.keybindings@default:default,org.eclipse.fx.ui.panes@default:default,org.eclipse.fx.ui.services@default:default,org.eclipse.fx.ui.theme@default:default,org.eclipse.fx.ui.workbench.base@default:default,org.eclipse.fx.ui.workbench.fx.controls@default:default,org.eclipse.fx.ui.workbench.fx@default:default,org.eclipse.fx.ui.workbench.renderers.base@default:default,org.eclipse.fx.ui.workbench.renderers.fx@default:default,org.eclipse.fx.ui.workbench3@default:default,org.eclipse.osgi@-1:true"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="true"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.product/pom.xml b/demos/at.bestsolution.efxclipse.ecp.app.product/pom.xml
new file mode 100644
index 000000000..56886c782
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.product/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <name>ECP for JavaFX - application product</name>
+ <groupId>at.bestsolution.efxclipse.ecp</groupId>
+ <artifactId>at.bestsolution.efxclipse.ecp.app.product</artifactId>
+ <packaging>eclipse-repository</packaging>
+
+ <parent>
+ <groupId>at.bestsolution.efxclipse.ecp</groupId>
+ <artifactId>at.bestsolution.efxclipse.ecp.app.releng</artifactId>
+ <relativePath>../at.bestsolution.efxclipse.ecp.app.releng/pom.xml</relativePath>
+ <version>1.0.0-SNAPSHOT</version>
+ </parent>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-director-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <executions>
+ <execution>
+ <id>materialize-products</id>
+ <goals>
+ <goal>materialize-products</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>archive-products</id>
+ <goals>
+ <goal>archive-products</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.releng/.project b/demos/at.bestsolution.efxclipse.ecp.app.releng/.project
new file mode 100644
index 000000000..2b35b0897
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.releng/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>at.bestsolution.efxclipse.ecp.app.releng</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.releng/at.bestsolution.efxclipse.tooling.build-0.0.1.jar b/demos/at.bestsolution.efxclipse.ecp.app.releng/at.bestsolution.efxclipse.tooling.build-0.0.1.jar
new file mode 100644
index 000000000..82629ad44
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.releng/at.bestsolution.efxclipse.tooling.build-0.0.1.jar
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.releng/build.xml b/demos/at.bestsolution.efxclipse.ecp.app.releng/build.xml
new file mode 100644
index 000000000..211d2c524
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.releng/build.xml
@@ -0,0 +1,51 @@
+<project name="native-build" default="do-deploy" basedir="." xmlns:fx="javafx:com.sun.javafx.tools.ant">
+ <property name="eclipse-app-dir" value="../at.bestsolution.efxclipse.ecp.app.product/target/macosx.cocoa.x86_64/eclipse" />
+
+ <target name="init-fx-tasks">
+ <path id="fxant">
+ <filelist>
+ <file name="${java.home}\..\lib\ant-javafx.jar"/>
+ <file name="${java.home}\lib\jfxrt.jar"/>
+ </filelist>
+ </path>
+
+ <taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
+ uri="javafx:com.sun.javafx.tools.ant"
+ classpathref="fxant"/>
+ <taskdef name="configIni" classpath="at.bestsolution.efxclipse.tooling.build-0.0.1.jar" classname="at.bestsolution.efxclipse.tooling.build.ConfigFixTask" />
+ </target>
+
+ <target name="config-fix" depends="init-fx-tasks">
+ <configIni rootfolder="${eclipse-app-dir}"/>
+ </target>
+
+ <target name="do-deploy" depends="config-fix, init-fx-tasks">
+ <fx:resources id="appRes">
+ <fx:fileset dir="." includes="fx-osgi-launch.jar"/>
+ <fx:fileset dir="${eclipse-app-dir}" includes="**/*"/>
+ </fx:resources>
+
+ <fx:application id="fxApplication"
+ name="ECP for JavaFX"
+ mainClass="org.eclipse.equinox.launcher.Main"
+ toolkit="swing"
+
+ />
+
+ <fx:deploy
+ embedJNLP="false"
+ extension="false"
+ includeDT="false"
+ offlineAllowed="true"
+ outdir="${basedir}/deploy"
+ outfile="fix-ide"
+ nativeBundles="all"
+ updatemode="background"
+ >
+
+ <fx:info title="ECP for JavaFX" vendor=""/>
+ <fx:application refid="fxApplication"/>
+ <fx:resources refid="appRes"/>
+ </fx:deploy>
+ </target>
+</project> \ No newline at end of file
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.releng/fx-osgi-launch.jar b/demos/at.bestsolution.efxclipse.ecp.app.releng/fx-osgi-launch.jar
new file mode 100644
index 000000000..e17ac5e3f
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.releng/fx-osgi-launch.jar
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app.releng/pom.xml b/demos/at.bestsolution.efxclipse.ecp.app.releng/pom.xml
new file mode 100644
index 000000000..781032ed6
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app.releng/pom.xml
@@ -0,0 +1,176 @@
+<?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>
+ <name>ECP for JavaFX - releng</name>
+
+ <prerequisites>
+ <maven>3.0</maven>
+ </prerequisites>
+
+ <groupId>at.bestsolution.efxclipse.ecp</groupId>
+ <artifactId>at.bestsolution.efxclipse.ecp.app.releng</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <properties>
+ <tycho-version>0.16.0</tycho-version>
+ <junit-version>4.8.1</junit-version>
+ <mockito-version>1.8.4</mockito-version>
+ <platform-version>4.2</platform-version>
+ <efx-version>0.1.1</efx-version>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+
+ <modules>
+ <module>../at.bestsolution.efxclipse.ecp.app</module>
+ <module>../at.bestsolution.efxclipse.ecp.app.feature</module>
+ <module>../at.bestsolution.efxclipse.ecp.app.product</module>
+ <module>../at.bestsolution.efxclipse.ecp.app.jemmy</module>
+ </modules>
+
+ <repositories>
+ <repository>
+ <id>juno</id>
+ <layout>p2</layout>
+ <url>http://download.eclipse.org/releases/juno</url>
+ </repository>
+ <repository>
+ <id>efxclipse-repo</id>
+ <layout>p2</layout>
+ <url>http://www.efxclipse.org/p2-repos/releases/latest</url>
+ </repository>
+
+ </repositories>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>tycho</id>
+ <url>http://repository.sonatype.org/content/groups/sonatype-public-grid</url>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <build>
+
+ <!-- build plugins -->
+ <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>
+ <environments>
+ <environment>
+ <os>linux</os>
+ <ws>gtk</ws>
+ <arch>x86</arch>
+ </environment>
+ <environment>
+ <os>linux</os>
+ <ws>gtk</ws>
+ <arch>x86_64</arch>
+ </environment>
+ <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>macosx</os>
+ <ws>cocoa</ws>
+ <arch>x86_64</arch>
+ </environment>
+ </environments>
+ </configuration>
+ </plugin>
+ </plugins>
+
+
+ <!-- defines the default settings for the used plugins -->
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-compiler-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ <source>1.7</source>
+ <target>1.7</target>
+ <extraClasspathElements>
+ <extraClasspathElement>
+ <groupId>javafx</groupId>
+ <artifactId>javafx.mvn</artifactId>
+ <version>2.2.0-SNAPSHOT</version>
+ </extraClasspathElement>
+ </extraClasspathElements>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <executions>
+ <execution>
+ <id>plugin-source</id>
+ <goals>
+ <goal>plugin-source</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-packaging-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <archiveSite>true</archiveSite>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junit-version}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>${mockito-version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project> \ No newline at end of file
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/.classpath b/demos/at.bestsolution.efxclipse.ecp.app/.classpath
new file mode 100644
index 000000000..751c8f2e5
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/.project b/demos/at.bestsolution.efxclipse.ecp.app/.project
new file mode 100644
index 000000000..e210c1ea0
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/.project
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>at.bestsolution.efxclipse.ecp.app</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>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ds.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ </natures>
+</projectDescription>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/Application.e4xmi b/demos/at.bestsolution.efxclipse.ecp.app/Application.e4xmi
new file mode 100644
index 000000000..5c3464db5
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/Application.e4xmi
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application:Application xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:application="http://www.eclipse.org/ui/2010/UIModel/application" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/ui/basic" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmi:id="_wIZNwZO_EeK1DMHyA2N3yA" elementId="org.eclipse.e4.application" bindingContexts="_wIZNwJO_EeK1DMHyA2N3yA">
+ <children xsi:type="basic:TrimmedWindow" xmi:id="_BinB4JPAEeK1DMHyA2N3yA" elementId="at.bestsolution.efxclipse.ecp.app.trimmedwindow.0" label="Main Window" x="20" y="20" width="1500" height="1000">
+ <children xsi:type="basic:PartSashContainer" xmi:id="_K08kYJPKEeK1DMHyA2N3yA" elementId="at.bestsolution.efxclipse.ecp.app.partsashcontainer.0" horizontal="true">
+ <children xsi:type="basic:PartStack" xmi:id="_MA-5sJPKEeK1DMHyA2N3yA" elementId="at.bestsolution.efxclipse.ecp.app.partstack.0">
+ <children xsi:type="basic:Part" xmi:id="_zTgCYJPAEeK1DMHyA2N3yA" elementId="at.bestsolution.efxclipse.ecp.app.part.0" contributionURI="bundleclass://at.bestsolution.efxclipse.ecp.app/at.bestsolution.efxclipse.ecp.ModelExplorerPart" label="Model Explorer">
+ <menus xmi:id="_m34iIKwdEeKOacGlVFA1Xw" elementId="at.bestsolution.efxclipse.ecp.app.menu.0" label="Bla">
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_vPnCEKwdEeKOacGlVFA1Xw" elementId="at.bestsolution.efxclipse.ecp.app.handledmenuitem.0" label="Blub" command="_zREoUKNJEeKrxsf5nYgbOA"/>
+ </menus>
+ </children>
+ </children>
+ <children xsi:type="basic:PartSashContainer" xmi:id="_pMxkkJRxEeK6bNllnvSnhw" elementId="at.bestsolution.efxclipse.ecp.app.partsashcontainer.1">
+ <children xsi:type="basic:PartStack" xmi:id="_NrmBYJPKEeK1DMHyA2N3yA" elementId="at.bestsolution.efxclipse.ecp.app.partstacks.editors">
+ <children xsi:type="basic:Part" xmi:id="_idED8JR0EeK6bNllnvSnhw" elementId="at.bestsolution.efxclipse.ecp.app.part.2" contributionURI="bundleclass://at.bestsolution.efxclipse.ecp.app/at.bestsolution.efxclipse.ecp.ModelEditorPart" label="Model Editor" closeable="true"/>
+ </children>
+ <children xsi:type="basic:PartStack" xmi:id="_rS0rEJRxEeK6bNllnvSnhw" elementId="at.bestsolution.efxclipse.ecp.app.partstack.2">
+ <children xsi:type="basic:Part" xmi:id="_r9f_wJRxEeK6bNllnvSnhw" elementId="at.bestsolution.efxclipse.ecp.app.part.1" contributionURI="bundleclass://at.bestsolution.efxclipse.ecp.app/at.bestsolution.efxclipse.ecp.RepositoryBrowserPart" label="Repository Browser"/>
+ </children>
+ </children>
+ </children>
+ <mainMenu xmi:id="_ExCa0JPCEeK1DMHyA2N3yA" elementId="at.bestsolution.efxclipse.ecp.app.menu.0">
+ <children xsi:type="menu:Menu" xmi:id="_x8DqEJSLEeK6bNllnvSnhw" elementId="" label="_File">
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_g3-KEKNJEeKrxsf5nYgbOA" elementId="" label="Open Model Element" command="_R-d_MKNJEeKrxsf5nYgbOA"/>
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_0g9PwJSLEeK6bNllnvSnhw" elementId="" label="Exit" command="_zREoUKNJEeKrxsf5nYgbOA"/>
+ </children>
+ <children xsi:type="menu:Menu" xmi:id="_fKWWQKddEeKa-q0jml1KAw" elementId="at.bestsolution.efxclipse.ecp.app.menu.0" label="Edit">
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_i3jn0KddEeKa-q0jml1KAw" elementId="" label="Undo" command="_TIft8KddEeKa-q0jml1KAw"/>
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_myz8cKddEeKa-q0jml1KAw" elementId="" label="Redo" command="_UvMmAKddEeKa-q0jml1KAw"/>
+ </children>
+ </mainMenu>
+ </children>
+ <handlers xmi:id="_RAYmUKNJEeKrxsf5nYgbOA" elementId="" contributionURI="bundleclass://at.bestsolution.efxclipse.ecp.app/at.bestsolution.efxclipse.ecp.handlers.OpenModelElementHandler" command="_R-d_MKNJEeKrxsf5nYgbOA"/>
+ <handlers xmi:id="_38AGYKNJEeKrxsf5nYgbOA" elementId="" contributionURI="bundleclass://at.bestsolution.efxclipse.ecp.app/at.bestsolution.efxclipse.ecp.handlers.ExitHandler" command="_zREoUKNJEeKrxsf5nYgbOA"/>
+ <rootContext xmi:id="_wIZNwJO_EeK1DMHyA2N3yA" elementId="org.eclipse.ui.contexts.dialogAndWindow" name="In Dialog and Windows">
+ <children xmi:id="_wIZ00JO_EeK1DMHyA2N3yA" elementId="org.eclipse.ui.contexts.window" name="In Windows"/>
+ <children xmi:id="_wIZ00ZO_EeK1DMHyA2N3yA" elementId="org.eclipse.ui.contexts.dialog" name="In Dialogs"/>
+ </rootContext>
+ <commands xmi:id="_R-d_MKNJEeKrxsf5nYgbOA" elementId="at.bestsolution.efxclipse.ecp.app.commands.openModelElement" commandName="Open Model Element">
+ <parameters xmi:id="_XSvEcKNlEeKwjd1bf4rv-A" elementId="at.bestsolution.efxclipse.ecp.app.commandparameter.modelElement" name="Model Element" typeId="theTypeID" optional="false"/>
+ </commands>
+ <commands xmi:id="_zREoUKNJEeKrxsf5nYgbOA" elementId="at.bestsolution.efxclipse.ecp.app.commands.exit" commandName="Exit"/>
+ <commands xmi:id="_TIft8KddEeKa-q0jml1KAw" elementId="org.eclipse.fx.ecp.app.commands.undo" commandName="Undo"/>
+ <commands xmi:id="_UvMmAKddEeKa-q0jml1KAw" elementId="org.eclipse.fx.ecp.app.commands.redo" commandName="Redo"/>
+ <addons xmi:id="_wIZ00pO_EeK1DMHyA2N3yA" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/>
+ <addons xmi:id="_wIZ005O_EeK1DMHyA2N3yA" elementId="org.eclipse.e4.ui.contexts.service" contributionURI="bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"/>
+ <addons xmi:id="_wIZ01JO_EeK1DMHyA2N3yA" elementId="at.bestsolution.efxclipse.runtime.bindings.e4.service" contributionURI="bundleclass://at.bestsolution.efxclipse.runtime.bindings.e4/at.bestsolution.efxclipse.runtime.bindings.e4.BindingServiceAddon"/>
+ <addons xmi:id="_wIZ01ZO_EeK1DMHyA2N3yA" elementId="org.eclipse.e4.ui.workbench.commands.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.CommandProcessingAddon"/>
+ <addons xmi:id="_wIZ01pO_EeK1DMHyA2N3yA" elementId="org.eclipse.e4.ui.workbench.contexts.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.ContextProcessingAddon"/>
+ <addons xmi:id="_wIZ015O_EeK1DMHyA2N3yA" elementId="at.bestsolution.efxclipse.runtime.bindings.e4.model" contributionURI="bundleclass://at.bestsolution.efxclipse.runtime.bindings.e4/at.bestsolution.efxclipse.runtime.bindings.e4.BindingProcessingAddon"/>
+</application:Application>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/ECPAppProposal.pdf b/demos/at.bestsolution.efxclipse.ecp.app/ECPAppProposal.pdf
new file mode 100644
index 000000000..6226b2bcc
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/ECPAppProposal.pdf
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/META-INF/MANIFEST.MF b/demos/at.bestsolution.efxclipse.ecp.app/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..56fe425cc
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/META-INF/MANIFEST.MF
@@ -0,0 +1,59 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: My Sample App
+Bundle-SymbolicName: at.bestsolution.efxclipse.ecp.app; singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment:
+Require-Bundle: org.eclipse.e4.ui.model.workbench,
+ org.eclipse.e4.core.services,
+ org.eclipse.e4.core.di,
+ org.eclipse.e4.ui.di,
+ org.eclipse.e4.core.di.extensions,
+ org.eclipse.e4.core.contexts,
+ org.eclipse.core.databinding,
+ org.eclipse.core.databinding.observable,
+ org.eclipse.core.databinding.property,
+ org.eclipse.e4.ui.workbench,
+ org.eclipse.e4.ui.services,
+ org.eclipse.emf.ecp.core;bundle-version="1.0.0",
+ org.eclipse.core.runtime;bundle-version="3.8.0",
+ org.eclipse.emf.ecp.edit;bundle-version="1.0.0",
+ com.google.guava;bundle-version="10.0.1",
+ org.eclipse.fx.ui.application;bundle-version="0.8.1",
+ org.eclipse.fx.ui.workbench.fx;bundle-version="0.8.1",
+ org.eclipse.fx.emf.edit.ui;bundle-version="0.8.1",
+ org.eclipse.fx.emf.databinding;bundle-version="0.8.1",
+ org.eclipse.fx.ui.databinding;bundle-version="0.8.1",
+ org.eclipse.fx.ui.di;bundle-version="0.8.1",
+ org.eclipse.fx.ui.theme;bundle-version="0.8.1",
+ at.bestsolution.efxclipse.ecp.ui;bundle-version="1.0.0",
+ at.bestsolution.efxclipse.runtime.ecp.dummy;bundle-version="1.0.0"
+Import-Package: javax.inject;version="1.0.0",
+ javax.annotation;version="1.0.0",
+ javafx.animation;version="2.0.0",
+ javafx.application;version="2.0.0",
+ javafx.beans;version="2.0.0",
+ javafx.beans.binding;version="2.0.0",
+ javafx.beans.property;version="2.0.0",
+ javafx.beans.value;version="2.0.0",
+ javafx.collections;version="2.0.0",
+ javafx.concurrent;version="2.0.0",
+ javafx.event;version="2.0.0",
+ javafx.fxml;version="2.0.0",
+ javafx.geometry;version="2.0.0",
+ javafx.scene;version="2.0.0",
+ javafx.scene.chart;version="2.0.0",
+ javafx.scene.control;version="2.0.0",
+ javafx.scene.control.cell;version="2.0.0",
+ javafx.scene.effect;version="2.0.0",
+ javafx.scene.image;version="2.0.0",
+ javafx.scene.input;version="2.0.0",
+ javafx.scene.layout;version="2.0.0",
+ javafx.scene.media;version="2.0.0",
+ javafx.scene.paint;version="2.0.0",
+ javafx.scene.shape;version="2.0.0",
+ javafx.scene.text;version="2.0.0",
+ javafx.scene.transform;version="2.0.0",
+ javafx.scene.web;version="2.0.0",
+ javafx.stage;version="2.0.0",
+ javafx.util;version="2.0.0"
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/TODOS.txt b/demos/at.bestsolution.efxclipse.ecp.app/TODOS.txt
new file mode 100644
index 000000000..8b1deeb7a
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/TODOS.txt
@@ -0,0 +1,31 @@
+
+API:
+
+- Prefixes: What's the rule behind the prefixes (ME, ECP, I, ...)?
+- Variable names sometimes don't match the type name / getters and setters
+- No clear separation between EMFStore and ECP
+- Interface documentation is very poor
+- An architecture chart would be nice
+- SWT dependencies all over the place
+
+
+Step 1:
+
+- create architectural overview
+- create JavaFX e4 application with basic parts (Repository Explorer, Project Explorer, Model Element Editor, Validation View)
+- create a model workspace mockup
+- create basic unit test
+- create build config
+- add some basic javadoc
+- update website
+
+Step 2:
+
+- add more dialogs / wizards
+- add Jemmy tests
+- add proper documentation
+
+ECP Questions:
+
+InternalChildreList contains a reference to its parent. Yet the parent needs to be passed to Provider.fillChildren(). Why?
+
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/build.properties b/demos/at.bestsolution.efxclipse.ecp.app/build.properties
new file mode 100644
index 000000000..060ac9ea1
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/build.properties
@@ -0,0 +1,8 @@
+source.. = src/
+bin.includes = .,\
+ META-INF/,\
+ plugin.xml,\
+ css/,\
+ Application.e4xmi,\
+ OSGI-INF/modelElementOpener.xml,\
+ OSGI-INF/modelElementOpener.xml
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/css/default.css b/demos/at.bestsolution.efxclipse.ecp.app/css/default.css
new file mode 100644
index 000000000..a38730ef4
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/css/default.css
@@ -0,0 +1 @@
+/* Main CSS-File */ \ No newline at end of file
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/EPackage.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/EPackage.gif
new file mode 100644
index 000000000..30c5c10cc
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/EPackage.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/EPackageUnknown.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/EPackageUnknown.gif
new file mode 100644
index 000000000..459efb43c
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/EPackageUnknown.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/add.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/add.gif
new file mode 100644
index 000000000..252d7ebcb
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/add.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/bricks.png b/demos/at.bestsolution.efxclipse.ecp.app/icons/bricks.png
new file mode 100644
index 000000000..0905f933b
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/bricks.png
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/checkout_project.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/checkout_project.gif
new file mode 100644
index 000000000..e7b7fb4d8
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/checkout_project.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/checkout_project_old.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/checkout_project_old.gif
new file mode 100644
index 000000000..97d4cb07f
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/checkout_project_old.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/checkout_project_wiz.png b/demos/at.bestsolution.efxclipse.ecp.app/icons/checkout_project_wiz.png
new file mode 100644
index 000000000..fdff016ce
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/checkout_project_wiz.png
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/database_go.png b/demos/at.bestsolution.efxclipse.ecp.app/icons/database_go.png
new file mode 100644
index 000000000..61a8556c4
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/database_go.png
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/database_save.png b/demos/at.bestsolution.efxclipse.ecp.app/icons/database_save.png
new file mode 100644
index 000000000..44c06dddf
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/database_save.png
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/delete.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/delete.gif
new file mode 100644
index 000000000..b6922ac11
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/delete.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/delete_wiz.png b/demos/at.bestsolution.efxclipse.ecp.app/icons/delete_wiz.png
new file mode 100644
index 000000000..ac0f45b81
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/delete_wiz.png
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/error.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/error.gif
new file mode 100644
index 000000000..0bc60689c
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/error.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/folder_brick.png b/demos/at.bestsolution.efxclipse.ecp.app/icons/folder_brick.png
new file mode 100644
index 000000000..5dea9769a
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/folder_brick.png
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/link_with_editor.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/link_with_editor.gif
new file mode 100644
index 000000000..870934b69
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/link_with_editor.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/magnifier.png b/demos/at.bestsolution.efxclipse.ecp.app/icons/magnifier.png
new file mode 100644
index 000000000..cf3d97f75
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/magnifier.png
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/pending.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/pending.gif
new file mode 100644
index 000000000..b234df7bf
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/pending.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/project_closed.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/project_closed.gif
new file mode 100644
index 000000000..6052a8687
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/project_closed.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/project_open.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/project_open.gif
new file mode 100644
index 000000000..a4ea580d2
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/project_open.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/properties_wiz.png b/demos/at.bestsolution.efxclipse.ecp.app/icons/properties_wiz.png
new file mode 100644
index 000000000..2247e9f02
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/properties_wiz.png
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/property_obj.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/property_obj.gif
new file mode 100644
index 000000000..f8277cfaf
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/property_obj.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/provider.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/provider.gif
new file mode 100644
index 000000000..8493df40d
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/provider.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/provider_disabled.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/provider_disabled.gif
new file mode 100644
index 000000000..d17cc224a
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/provider_disabled.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/providers.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/providers.gif
new file mode 100644
index 000000000..0fa090a18
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/providers.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/refresh.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/refresh.gif
new file mode 100644
index 000000000..e3831471a
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/refresh.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/repositories.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/repositories.gif
new file mode 100644
index 000000000..c13bea1ca
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/repositories.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/repository.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/repository.gif
new file mode 100644
index 000000000..0470e1588
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/repository.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/icons/sample.gif b/demos/at.bestsolution.efxclipse.ecp.app/icons/sample.gif
new file mode 100644
index 000000000..34fb3c9d8
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/icons/sample.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/notes.txt b/demos/at.bestsolution.efxclipse.ecp.app/notes.txt
new file mode 100644
index 000000000..6da16ccbb
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/notes.txt
@@ -0,0 +1,12 @@
+
+
+org.eclipse.emf.edit.ui.provider.PropertyDescriptor
+
+Implements org.eclipse.ui.views.properties.IPropertyDescriptor
+- creates / validates SWT CellEditors
+
+org.eclipse.emf.edit.provider.ItemPropertyDescriptor
+
+-base class with most of the implementation for IItemProviderPropertyDescriptor
+
+org.eclipse.emf.common.ui.celleditor.ExtendedComboBoxCellEditor \ No newline at end of file
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/plugin.xml b/demos/at.bestsolution.efxclipse.ecp.app/plugin.xml
new file mode 100644
index 000000000..c9d126fdb
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/plugin.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+<extension id="product" point="org.eclipse.core.runtime.products">
+ <product name="ECP for JavaFX" application="org.eclipse.fx.ui.workbench.fx.application" >
+ <property name="appName" value="ECP for JavaFX" />
+
+ <property name="applicationXMI" value="at.bestsolution.efxclipse.ecp.app/Application.e4xmi" />
+
+ <property name="cssTheme" value="theme.default" />
+
+ </product>
+
+</extension>
+<extension point="org.eclipse.fx.ui.theme">
+ <theme id="theme.default" basestylesheet="css/default.css" />
+
+</extension>
+</plugin>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/pom.xml b/demos/at.bestsolution.efxclipse.ecp.app/pom.xml
new file mode 100644
index 000000000..0910dbc45
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <name>ECP for JavaFX - application bundle</name>
+ <groupId>at.bestsolution.efxclipse.ecp</groupId>
+ <artifactId>at.bestsolution.efxclipse.ecp.app</artifactId>
+ <packaging>eclipse-plugin</packaging>
+
+ <parent>
+ <groupId>at.bestsolution.efxclipse.ecp</groupId>
+ <artifactId>at.bestsolution.efxclipse.ecp.app.releng</artifactId>
+ <relativePath>../at.bestsolution.efxclipse.ecp.app.releng/pom.xml</relativePath>
+ <version>1.0.0-SNAPSHOT</version>
+ </parent>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>META-INF/</include>
+ </includes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/ModelEditorPart.java b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/ModelEditorPart.java
new file mode 100644
index 000000000..ebe872413
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/ModelEditorPart.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * Copyright (c) 2012 TESIS DYNAware GmbH and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ *******************************************************************************/
+package at.bestsolution.efxclipse.ecp;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.geometry.VPos;
+import javafx.scene.Node;
+import javafx.scene.control.Button;
+import javafx.scene.control.Label;
+import javafx.scene.control.ScrollPane;
+import javafx.scene.layout.BorderPane;
+import javafx.scene.layout.GridPane;
+import javafx.scene.layout.Priority;
+
+import javax.inject.Inject;
+
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.Diagnostician;
+import org.eclipse.emf.ecp.edit.Control;
+import org.eclipse.emf.ecp.edit.Control.Factory;
+import org.eclipse.emf.ecp.edit.Control.Factory.Registry;
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+import at.bestsolution.efxclipse.ecp.ui.ModelElementEditor;
+
+@SuppressWarnings("restriction")
+public class ModelEditorPart implements ModelElementEditor {
+
+ private ScrollPane scrollPane;
+ private MPart part;
+ private Map<EStructuralFeature, Control> controls = new HashMap<>();
+
+ @Inject
+ public ModelEditorPart(BorderPane parent, final MApplication application, MPart part) {
+ this.part = part;
+ // part.setCloseable(true);
+
+ // ECPControlContext modelElementContext = new
+ // DummyControlContext(DummyWorkspace.INSTANCE.getPlayer());
+ // ECPControlContext modelElementContext = new
+ // DummyControlContext(DummyWorkspace.INSTANCE.getTournament());
+ // ECPControlContext modelElementContext = new
+ // DummyControlContext(DummyWorkspace.INSTANCE.getReferee());
+
+ scrollPane = new ScrollPane();
+ scrollPane.setFitToWidth(true);
+ scrollPane.getStylesheets().add(getClass().getResource("style.css").toExternalForm());
+
+ parent.setCenter(scrollPane);
+ }
+
+ public void setInput(final ECPControlContext modelElementContext) {
+ ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+ AdapterFactoryItemDelegator adapterFactoryItemDelegator = new AdapterFactoryItemDelegator(adapterFactory);
+ EObject modelElement = modelElementContext.getModelElement();
+
+ IItemLabelProvider labelProvider = (IItemLabelProvider) adapterFactory.adapt(modelElement, IItemLabelProvider.class);
+ part.setLabel(labelProvider.getText(modelElement));
+ Object image = labelProvider.getImage(modelElement);
+ if (image instanceof URL)
+ part.setIconURI(((URL) image).toExternalForm());
+
+ List<IItemPropertyDescriptor> propertyDescriptors = adapterFactoryItemDelegator.getPropertyDescriptors(modelElement);
+ // FormControlFactory controlFactory = new FormControlFactory();
+
+ GridPane gridPane = new GridPane();
+ gridPane.getStyleClass().add("theForm");
+ // gridPane.setStyle("-fx-alignment: top-left;");
+
+ // VBox vBox = new VBox();
+ // vBox.getStyleClass().add("theForm");
+
+ Button button = new Button("validate");
+ button.setOnAction(new EventHandler<ActionEvent>() {
+
+ @Override
+ public void handle(ActionEvent arg0) {
+ Diagnostic diagnostic = Diagnostician.INSTANCE.validate(modelElementContext.getModelElement());
+ for (Diagnostic childDiagnostic : diagnostic.getChildren()) {
+ Control control = controls.get(childDiagnostic.getData().get(1));
+ if(control != null)
+ control.handleValidation(childDiagnostic);
+ }
+
+ }
+
+ });
+
+ gridPane.add(button, 1, 0);
+
+ Registry registry = Control.Factory.Registry.INSTANCE;
+
+ int i = 1;
+ for (IItemPropertyDescriptor propertyDescriptor : propertyDescriptors) {
+
+ String displayName = propertyDescriptor.getDisplayName(modelElement);
+ Label label = new Label(displayName);
+ label.getStyleClass().add("controlLabel");
+ // label.setStyle("-fx-alignment: top-left;");
+ GridPane.setValignment(label, VPos.TOP);
+ gridPane.add(label, 0, i);
+
+ Factory factory = registry.getFactory(Node.class, propertyDescriptor, modelElement);
+
+ EStructuralFeature feature = (EStructuralFeature) propertyDescriptor.getFeature(modelElement);
+
+ if (factory != null) {
+ Control control = factory.createControl(propertyDescriptor, modelElementContext);
+ Node node = (Node) control;
+ gridPane.add(node, 1, i);
+ GridPane.setHgrow(node, Priority.ALWAYS);
+ controls.put(feature, control);
+ }
+ i++;
+ }
+
+ Label label = new Label("The End.");
+ gridPane.add(label, 0, i);
+
+ scrollPane.setContent(gridPane);
+ }
+
+}
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/ModelExplorerPart.java b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/ModelExplorerPart.java
new file mode 100644
index 000000000..8f0740156
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/ModelExplorerPart.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2012 TESIS DYNAware GmbH and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ *******************************************************************************/
+package at.bestsolution.efxclipse.ecp;
+
+import javafx.scene.control.TreeItem;
+import javafx.scene.control.TreeView;
+import javafx.scene.layout.BorderPane;
+
+import javax.inject.Inject;
+
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.emf.ecp.core.ECPProjectManager;
+import org.eclipse.emf.ecp.internal.core.util.ChildrenListImpl;
+import org.eclipse.emf.ecp.spi.core.InternalProvider;
+import org.eclipse.emf.ecp.spi.core.util.InternalChildrenList;
+import org.eclipse.fx.emf.edit.ui.AdapterFactoryTreeCellFactory;
+import org.eclipse.fx.emf.edit.ui.AdapterFactoryTreeItem;
+
+import at.bestsolution.efxclipse.ecp.provider.ECPItemProviderAdapterFactory;
+import at.bestsolution.efxclipse.runtime.ecp.dummy.DummyWorkspace;
+
+@SuppressWarnings("restriction")
+public class ModelExplorerPart {
+
+ static class ModelElementTreeItem extends TreeItem<Object> {
+ ModelElementTreeItem(Object item, InternalProvider provider) {
+ super(item);
+ InternalChildrenList childrenList = new ChildrenListImpl(item);
+ provider.fillChildren(null, item, childrenList);
+ for (Object child : childrenList.getChildren()) {
+ getChildren().add(new ModelElementTreeItem(child, provider));
+ }
+ }
+ }
+
+ @Inject
+ public ModelExplorerPart(BorderPane parent, final MApplication application, ECPProjectManager projectManager) {
+
+ TreeView<Object> treeView = new TreeView<>();
+
+// TreeItem<Object> root = new TreeItem<Object>();
+//
+// for (final ECPProject project : projectManager.getProjects()) {
+//
+// final InternalProvider provider = (InternalProvider) project.getProvider();
+//
+// TreeItem<Object> projectTreeItem = new TreeItem<Object>(project);
+//
+// for (Object element : project.getElements()) {
+// TreeItem<Object> elementTreeItem = new ModelElementTreeItem(element, provider);
+// projectTreeItem.getChildren().add(elementTreeItem);
+// }
+//
+// root.getChildren().add(projectTreeItem);
+// }
+//
+// treeView.setRoot(root);
+ treeView.setShowRoot(false);
+
+// treeView.setCellFactory(new Callback<TreeView<Object>, TreeCell<Object>>() {
+//
+// @Override
+// public TreeCell<Object> call(TreeView<Object> arg0) {
+// return new TreeCell<Object>() {
+//
+// @Override
+// protected void updateItem(Object item, boolean empty) {
+// super.updateItem(item, empty);
+// if (item instanceof ECPProject) {
+// ECPProject project = (ECPProject) item;
+// setText(project.getName());
+// } else if (item != null) {
+// ComposedAdapterFactory adapterFactory = DummyWorkspace.INSTANCE.getAdapterFactory();
+// IItemLabelProvider labelProvider = (IItemLabelProvider) adapterFactory.adapt(item, IItemLabelProvider.class);
+// if (labelProvider != null)
+// setText(labelProvider.getText(item));
+// else
+// setText(item.toString());
+// } else {
+// setText(null);
+// }
+// }
+//
+// };
+// }
+//
+// });
+
+ //ComposedAdapterFactory adapterFactory = DummyWorkspace.INSTANCE.getAdapterFactory();
+
+ ECPItemProviderAdapterFactory adapterFactory = new ECPItemProviderAdapterFactory(DummyWorkspace.INSTANCE.getProvider());
+
+ AdapterFactoryTreeItem rootItem = new AdapterFactoryTreeItem(projectManager, treeView, adapterFactory);
+
+ treeView.setRoot(rootItem);
+
+ treeView.setCellFactory(new AdapterFactoryTreeCellFactory(adapterFactory));
+
+ parent.setCenter(treeView);
+
+ }
+
+}
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/RepositoryBrowserPart.java b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/RepositoryBrowserPart.java
new file mode 100644
index 000000000..f6bf9247b
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/RepositoryBrowserPart.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2012 TESIS DYNAware GmbH and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ *******************************************************************************/
+package at.bestsolution.efxclipse.ecp;
+
+import java.util.Collection;
+
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.control.ListCell;
+import javafx.scene.control.ListView;
+import javafx.scene.image.ImageView;
+import javafx.scene.layout.BorderPane;
+import javafx.util.Callback;
+
+import javax.inject.Inject;
+
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.emf.ecp.core.ECPRepository;
+import org.eclipse.emf.ecp.core.ECPRepositoryManager;
+
+@SuppressWarnings("restriction")
+public class RepositoryBrowserPart {
+
+ @Inject
+ public RepositoryBrowserPart(BorderPane parent, final MApplication application, ECPRepositoryManager repositoryManager) {
+
+ ListView<ECPRepository> listView = new ListView<>();
+
+ listView.setCellFactory(new Callback<ListView<ECPRepository>, ListCell<ECPRepository>>() {
+
+ @Override
+ public ListCell<ECPRepository> call(ListView<ECPRepository> arg0) {
+ return new ListCell<ECPRepository>() {
+ @Override
+ protected void updateItem(ECPRepository repository, boolean empty) {
+ super.updateItem(repository, empty);
+ if (repository != null) {
+ setText(repository.getName());
+ setGraphic(new ImageView("platform:/plugin/at.bestsolution.efxclipse.ecp.app/icons/repository.gif"));
+ }
+ }
+ };
+ }
+ });
+
+ Collection<ECPRepository> repositories = repositoryManager.getRepositories();
+
+ ObservableList<ECPRepository> repositoriesList = FXCollections.observableArrayList(repositories);
+
+ listView.setItems(repositoriesList);
+
+ parent.setCenter(listView);
+
+ }
+
+}
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/arrow.png b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/arrow.png
new file mode 100644
index 000000000..9ea256a28
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/arrow.png
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/dialogs/ReferenceSelectionDialog.fxml b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/dialogs/ReferenceSelectionDialog.fxml
new file mode 100644
index 000000000..25bf3f779
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/dialogs/ReferenceSelectionDialog.fxml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import java.lang.*?>
+<?import java.util.*?>
+<?import javafx.scene.control.*?>
+<?import javafx.scene.layout.*?>
+<?import javafx.scene.paint.*?>
+
+<BorderPane id="BorderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
+ <bottom>
+ <HBox prefHeight="-1.0" prefWidth="-1.0">
+ <children>
+ <Button fx:id="okButton" defaultButton="true" mnemonicParsing="false" text="OK" />
+ <Button id="cancelButton" fx:id="cancleButton" mnemonicParsing="false" text="Cancel" />
+ </children>
+ </HBox>
+ </bottom>
+ <center>
+ <ListView fx:id="listView" prefHeight="200.0" prefWidth="200.0" />
+ </center>
+</BorderPane>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/dialogs/ReferenceSelectionDialog.fxml.bak b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/dialogs/ReferenceSelectionDialog.fxml.bak
new file mode 100644
index 000000000..fbe317230
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/dialogs/ReferenceSelectionDialog.fxml.bak
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import java.lang.*?>
+<?import java.util.*?>
+<?import javafx.scene.control.*?>
+<?import javafx.scene.layout.*?>
+<?import javafx.scene.paint.*?>
+
+<BorderPane id="BorderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
+ <bottom>
+ <HBox prefHeight="-1.0" prefWidth="-1.0">
+ <children>
+ <Button fx:id="okButton" defaultButton="true" mnemonicParsing="false" text="OK" />
+ <Button fx:id="cancleButton" mnemonicParsing="false" text="Cancle" />
+ </children>
+ </HBox>
+ </bottom>
+ <center>
+ <ListView fx:id="listView" prefHeight="200.0" prefWidth="200.0" />
+ </center>
+</BorderPane>
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/dialogs/ReferenceSelectionDialog.java b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/dialogs/ReferenceSelectionDialog.java
new file mode 100644
index 000000000..0b4e04de5
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/dialogs/ReferenceSelectionDialog.java
@@ -0,0 +1,64 @@
+package at.bestsolution.efxclipse.ecp.dialogs;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Scene;
+import javafx.scene.control.ListView;
+import javafx.scene.layout.Pane;
+import javafx.stage.Stage;
+
+public class ReferenceSelectionDialog extends Stage {
+
+ EObject modelElement;
+ EReference reference;
+
+ public ReferenceSelectionDialog(EObject modelElement, EReference reference) {
+ this.modelElement = modelElement;
+ this.reference = reference;
+
+ URL location = getClass().getResource("ReferenceSelectionDialog.fxml");
+ FXMLLoader fxmlLoader = new FXMLLoader(location);
+
+// controller = new DetailsViewController();
+
+ Controller controller = new Controller();
+
+ fxmlLoader.setController(controller);
+
+ Pane root = null;
+ try {
+ root = (Pane) fxmlLoader.load();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ Scene scene = new Scene(root);
+
+ setScene(scene);
+ }
+
+ class Controller {
+
+ @FXML
+ ListView<?> listView;
+
+ public void init() {
+ ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+
+
+ System.out.println();
+ }
+
+
+
+ }
+
+}
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/handlers/ExitHandler.java b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/handlers/ExitHandler.java
new file mode 100644
index 000000000..16824ad18
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/handlers/ExitHandler.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Siemens AG and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html.
+ *
+ * Contributors:
+ * Kai Tödter - initial implementation
+ ******************************************************************************/
+
+package at.bestsolution.efxclipse.ecp.handlers;
+
+import javafx.application.Platform;
+import org.eclipse.e4.core.di.annotations.Execute;
+
+@SuppressWarnings("restriction")
+public class ExitHandler {
+
+ @Execute
+ public void exit() {
+ // TODO better life cycle support
+ Platform.exit();
+ }
+
+}
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/handlers/OpenModelElementHandler.java b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/handlers/OpenModelElementHandler.java
new file mode 100644
index 000000000..fa7fc4569
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/handlers/OpenModelElementHandler.java
@@ -0,0 +1,67 @@
+package at.bestsolution.efxclipse.ecp.handlers;
+
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.core.di.annotations.Optional;
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.e4.ui.model.application.ui.basic.MBasicFactory;
+import org.eclipse.e4.ui.model.application.ui.basic.MInputPart;
+import org.eclipse.e4.ui.model.application.ui.basic.MPartStack;
+import org.eclipse.e4.ui.workbench.modeling.EModelService;
+import org.eclipse.e4.ui.workbench.modeling.EPartService;
+import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecp.core.ECPProjectManager;
+import org.eclipse.emf.ecp.edit.ECPControlContext;
+
+import at.bestsolution.efxclipse.ecp.ModelEditorPart;
+import at.bestsolution.efxclipse.ecp.ui.ECPModelElementOpener;
+import at.bestsolution.efxclipse.runtime.ecp.dummy.DummyControlContext;
+import at.bestsolution.efxclipse.runtime.ecp.dummy.DummyWorkspace;
+
+@SuppressWarnings("restriction")
+public class OpenModelElementHandler {
+
+ // @Execute
+ // public void open(MApplication application, EModelService modelService,
+ // EPartService partService) {
+ // // Assuming that all editors should open in the the stack with the
+ // // ID "org.eclipse.e4.primaryDataStack"
+ //
+ // MPartStack stack = (MPartStack)
+ // modelService.find("at.bestsolution.efxclipse.ecp.app.partstacks.editors",
+ // application);
+ //
+ // MInputPart part = MBasicFactory.INSTANCE.createInputPart();
+ // // Pointing to the contributing class
+ // part.setContributionURI("bundleclass://at.bestsolution.efxclipse.ecp.app/at.bestsolution.efxclipse.ecp.ModelEditorPart");
+ //
+ // // part.setInputURI(input.getInputURI());
+ // //
+ // part.setIconURI("platform:/plugin/de.vogella.rcp.e4.todo/icons/sample.gif");
+ // part.setLabel("huhu");
+ // // part.setTooltip(input.getTooltip());
+ // part.setCloseable(true);
+ //
+ // stack.getChildren().add(part);
+ // partService.showPart(part, PartState.ACTIVATE);
+ //
+ // part.getContext().set(EObject.class,
+ // DummyWorkspace.INSTANCE.getTournament());
+ //
+ // ModelEditorPart modelEditorPart = (ModelEditorPart) part.getObject();
+ //
+ // ECPControlContext modelElementContext = new
+ // DummyControlContext(DummyWorkspace.INSTANCE.getReferee());
+ //
+ // modelEditorPart.setInput(modelElementContext);
+ // }
+
+ @Execute
+ public void open(ECPModelElementOpener modelElementOpener, MApplication application, EModelService modelService,
+ EPartService partService) {
+
+ EObject modelElement = DummyWorkspace.INSTANCE.getReferee();
+ modelElementOpener.openModelElement(modelElement, application, modelService, partService);
+ }
+
+}
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/provider/ECPItemProviderAdapterFactory.java b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/provider/ECPItemProviderAdapterFactory.java
new file mode 100644
index 000000000..cb3d46df8
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/provider/ECPItemProviderAdapterFactory.java
@@ -0,0 +1,59 @@
+package at.bestsolution.efxclipse.ecp.provider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.ecp.spi.core.InternalProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+public class ECPItemProviderAdapterFactory implements AdapterFactory {
+
+ protected InternalProvider provider;
+
+ /**
+ * This keeps track of all the supported types checked by
+ * {@link #isFactoryForType isFactoryForType}.
+ */
+ protected Collection<Object> supportedTypes = new ArrayList<Object>();
+ protected ECPProviderItemProvider modelElementItemProvider;
+
+ public ECPItemProviderAdapterFactory(InternalProvider provider) {
+ this.provider = provider;
+ supportedTypes.add(IStructuredItemContentProvider.class);
+ supportedTypes.add(ITreeItemContentProvider.class);
+ supportedTypes.add(IItemLabelProvider.class);
+ }
+
+ @Override
+ public boolean isFactoryForType(Object type) {
+ return supportedTypes.contains(type);
+ }
+
+ @Override
+ public Adapter adapt(Notifier target, Object type) {
+ return adapt(target, type);
+ }
+
+ @Override
+ public Object adapt(Object target, Object type) {
+ ECPProviderItemProvider itemProvider = new ECPProviderItemProvider(this, provider);
+
+ return supportedTypes.contains(type) ? itemProvider : null;
+ }
+
+ @Override
+ public Adapter adaptNew(Notifier target, Object type) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void adaptAllNew(Notifier notifier) {
+ throw new UnsupportedOperationException();
+ }
+
+}
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/provider/ECPProviderItemProvider.java b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/provider/ECPProviderItemProvider.java
new file mode 100644
index 000000000..61f5f762c
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/provider/ECPProviderItemProvider.java
@@ -0,0 +1,83 @@
+package at.bestsolution.efxclipse.ecp.provider;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import javafx.scene.image.ImageView;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.ecp.core.ECPProject;
+import org.eclipse.emf.ecp.core.util.ECPModelContext;
+import org.eclipse.emf.ecp.internal.core.util.ChildrenListImpl;
+import org.eclipse.emf.ecp.spi.core.InternalProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.osgi.framework.Bundle;
+
+import at.bestsolution.efxclipse.runtime.ecp.dummy.DummyWorkspace;
+
+@SuppressWarnings("restriction")
+public class ECPProviderItemProvider extends ItemProviderAdapter implements ITreeItemContentProvider, IItemLabelProvider {
+
+ InternalProvider provider;
+ Map<Object, Object> parentsCache = new WeakHashMap<Object, Object>();
+
+ public ECPProviderItemProvider(AdapterFactory adapterFactory, InternalProvider provider) {
+ super(adapterFactory);
+ this.provider = provider;
+ }
+
+ @Override
+ public Collection<?> getChildren(Object object) {
+ ECPModelContext modelContext = getModelContext(object);
+ ChildrenListImpl childrenList = new ChildrenListImpl(object);
+ provider.fillChildren(modelContext, object, childrenList);
+ return childrenList;
+ }
+
+ @Override
+ public String getText(Object object) {
+ if (object instanceof ECPProject) {
+ ECPProject project = (ECPProject) object;
+ return project.getName();
+ }
+
+ IItemLabelProvider labelProvider = (IItemLabelProvider) DummyWorkspace.INSTANCE.getAdapterFactory().adapt(object,
+ IItemLabelProvider.class);
+ if (labelProvider != null)
+ return labelProvider.getText(object);
+
+ return object.toString();
+ }
+
+ @Override
+ public Object getImage(Object object) {
+ if (object instanceof ECPProject) {
+ try {
+ URL url = new URL("platform:/plugin/at.bestsolution.efxclipse.ecp.app/icons/project_open.gif");
+ return new ImageView(((URL) url).toExternalForm());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ IItemLabelProvider labelProvider = (IItemLabelProvider) DummyWorkspace.INSTANCE.getAdapterFactory().adapt(object,
+ IItemLabelProvider.class);
+ if (labelProvider != null)
+ return labelProvider.getImage(object);
+
+ return super.getImage(object);
+ }
+
+ protected ECPModelContext getModelContext(Object element) {
+ // TODO add proper implementation
+ return null;
+ }
+
+}
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/provider/fldr_obj.gif b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/provider/fldr_obj.gif
new file mode 100644
index 000000000..51e703b1b
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/provider/fldr_obj.gif
Binary files differ
diff --git a/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/style.css b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/style.css
new file mode 100644
index 000000000..a8bad55a9
--- /dev/null
+++ b/demos/at.bestsolution.efxclipse.ecp.app/src/at/bestsolution/efxclipse/ecp/style.css
@@ -0,0 +1,56 @@
+.invalid {
+ -fx-background-color: -fx-outer-border, #FF5555, #FFFAFA;
+}
+
+.theForm {
+ -fx-padding: 10.0;
+ -fx-hgap: 6.0;
+ -fx-vgap: 6.0;
+}
+
+.formControl {
+ /* -fx-min-height: 20; */
+ /* -fx-pref-height: 50; works */
+ /* -fx-padding: 10; */
+}
+
+.multiTextControl .list-view {
+ -fx-pref-height: 50.0;
+}
+
+.multiReferenceControl .list-view {
+ -fx-pref-height: 80.0;
+}
+
+.multiAttributeControl .list-view {
+ -fx-pref-height: 80.0;
+}
+
+.controlLabel {
+ /*-fx-pref-width: 150.0;*/
+ -fx-alignment: top-left;
+ -fx-min-height: 20.0;
+ /*-fx-background-color: red;*/
+ -fx-padding: 3;
+
+ -fx-font-size: 12px;
+ -fx-font-weight: bold;
+ -fx-text-fill: #333333;
+ -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 );
+}
+
+.validationLabel {
+ -fx-padding: 16 10 10 10;
+ /* -fx-background-insets: 0 0 -1 0, 0, 1, 2; */
+ /* -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color; */
+ /* -fx-background-image: url("arrow.png"); */
+ /* -fx-background-position: 50 -15; */
+ /* -fx-background-repeat: no-repeat; */
+ -fx-min-width: 100;
+ -fx-background-insets: 8 0 0 0;
+ -fx-background-color: linear-gradient(#f04349 0%, #c81e2b 100%);
+ -fx-background-radius: 5;
+ -fx-text-fill: white;
+ -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 );
+}
+

Back to the top