added e4 demo
diff --git a/extra/org.eclipse.emf.ecp.application.e4/.classpath b/extra/org.eclipse.emf.ecp.application.e4/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/extra/org.eclipse.emf.ecp.application.e4/.project b/extra/org.eclipse.emf.ecp.application.e4/.project
new file mode 100644
index 0000000..e570693
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.ecp.application.e4</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/extra/org.eclipse.emf.ecp.application.e4/.settings/org.eclipse.jdt.core.prefs b/extra/org.eclipse.emf.ecp.application.e4/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/extra/org.eclipse.emf.ecp.application.e4/.settings/org.eclipse.pde.core.prefs b/extra/org.eclipse.emf.ecp.application.e4/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..f29e940
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/extra/org.eclipse.emf.ecp.application.e4/Application.e4xmi b/extra/org.eclipse.emf.ecp.application.e4/Application.e4xmi
new file mode 100644
index 0000000..ae99994
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/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="_0JoRAJgREeKJoJcmiy2C6w" elementId="org.eclipse.e4.ide.application">
+ <children xsi:type="basic:TrimmedWindow" xmi:id="_0JoRAZgREeKJoJcmiy2C6w" label="org.eclipse.emf.ecp.e4.application" width="500" height="400">
+ <children xsi:type="basic:PartSashContainer" xmi:id="_AErb0JgUEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.partsashcontainer.1" selectedElement="_lM0okJgTEeKJoJcmiy2C6w">
+ <children xsi:type="basic:PartSashContainer" xmi:id="_lM0okJgTEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.partsashcontainer.0" horizontal="true">
+ <children xsi:type="basic:PartStack" xmi:id="_8GAbsJoUEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.partstack.2">
+ <children xsi:type="basic:Part" xmi:id="_nOXCgJgTEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.part.navigator" contributionURI="bundleclass://org.eclipse.emf.ecp.application.e4/org.eclipse.emf.ecp.e4.view.ECPModelView" label="Model Navigator" closeable="true">
+ <menus xsi:type="menu:PopupMenu" xmi:id="_dAsF4JgZEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.popupmenu.navigator" label="Navigator menu">
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_ibQRIJgZEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.handledmenuitem.newProject" label="New Project" command="_ogB3AJgZEeKJoJcmiy2C6w"/>
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_c1wWwJoSEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.handledmenuitem.project.newModelElement" label="New Model Element" command="_StwzEJoSEeKJoJcmiy2C6w"/>
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_eu6RsJrLEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.handledmenuitem.0"/>
+ </menus>
+ <toolbar xmi:id="_uWMcwJoUEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.toolbar.0">
+ <children xsi:type="menu:HandledToolItem" xmi:id="_CPQPoJrKEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.handledtoolitem.1" command="_ogB3AJgZEeKJoJcmiy2C6w"/>
+ </toolbar>
+ </children>
+ </children>
+ <children xsi:type="basic:PartStack" xmi:id="_nrd1QJgTEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.partstack.0">
+ <tags>editorPart</tags>
+ </children>
+ </children>
+ <children xsi:type="basic:PartStack" xmi:id="_wpiYYJoUEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.partstack.1">
+ <children xsi:type="basic:Part" xmi:id="_CJd-EJgUEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.part.repository" contributionURI="bundleclass://org.eclipse.emf.ecp.application.e4/org.eclipse.emf.ecp.e4.view.ECPRepositoryView" label="Repository View">
+ <menus xsi:type="menu:PopupMenu" xmi:id="_WzCwgJgcEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.popupmenu.repository" label="Repo Popup">
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_bKyM0JgcEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.handledmenuitem.checkout" label="Checkout" iconURI="platform:/plugin/org.eclipse.emf.ecp.e4.application/icons/sample.gif" command="_eOWrgJgcEeKJoJcmiy2C6w"/>
+ </menus>
+ </children>
+ </children>
+ </children>
+ <trimBars xmi:id="_MWSIoJgaEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.trimbar.0">
+ <children xsi:type="menu:ToolBar" xmi:id="_M4bMYJgaEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.toolbar.1">
+ <children xsi:type="menu:HandledToolItem" xmi:id="_N5wtkJgaEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.handledtoolitem.0" label="New Project" command="_ogB3AJgZEeKJoJcmiy2C6w"/>
+ </children>
+ </trimBars>
+ </children>
+ <handlers xmi:id="_q5IcYJgZEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.handler.newProject" contributionURI="bundleclass://org.eclipse.emf.ecp.application.e4/org.eclipse.emf.ecp.e4.handlers.NewProjectHandler" command="_ogB3AJgZEeKJoJcmiy2C6w"/>
+ <handlers xmi:id="_fb0kMJgcEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.handler.checkoutProject" contributionURI="bundleclass://org.eclipse.emf.ecp.application.e4/org.eclipse.emf.ecp.e4.handlers.CheckoutProjectHandler" command="_eOWrgJgcEeKJoJcmiy2C6w"/>
+ <handlers xmi:id="_XchBMJoSEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.handler.project.newModelElement" contributionURI="bundleclass://org.eclipse.emf.ecp.application.e4/org.eclipse.emf.ecp.e4.handlers.NewModelElementHandler" command="_StwzEJoSEeKJoJcmiy2C6w"/>
+ <descriptors xmi:id="_5aBzoJgREeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.partdescriptor.editor" label="Editor" tooltip="Editor" allowMultiple="true" category="editorPart" closeable="true" contributionURI="bundleclass://org.eclipse.emf.ecp.application.e4/org.eclipse.emf.ecp.e4.editor.ECPE4Editor"/>
+ <commands xmi:id="_ogB3AJgZEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.command.newProject" commandName="New Project"/>
+ <commands xmi:id="_eOWrgJgcEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.command.checkoutProject" commandName="Checkout"/>
+ <commands xmi:id="_StwzEJoSEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.command.project.newModelElement" commandName="New Model element"/>
+ <commands xmi:id="_X2_JIJoyEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.application.command.repository.emfstore.login" commandName="New Model element"/>
+ <addons xmi:id="_0JoRApgREeKJoJcmiy2C6w" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/>
+ <addons xmi:id="_0JoRA5gREeKJoJcmiy2C6w" elementId="org.eclipse.e4.ui.contexts.service" contributionURI="bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"/>
+ <addons xmi:id="_0JoRBJgREeKJoJcmiy2C6w" elementId="org.eclipse.e4.ui.bindings.service" contributionURI="bundleclass://org.eclipse.e4.ui.bindings/org.eclipse.e4.ui.bindings.BindingServiceAddon"/>
+ <addons xmi:id="_0JoRBZgREeKJoJcmiy2C6w" 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="_0JoRBpgREeKJoJcmiy2C6w" 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="_0JoRB5gREeKJoJcmiy2C6w" elementId="org.eclipse.e4.ui.workbench.bindings.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.swt/org.eclipse.e4.ui.workbench.swt.util.BindingProcessingAddon"/>
+</application:Application>
diff --git a/extra/org.eclipse.emf.ecp.application.e4/META-INF/MANIFEST.MF b/extra/org.eclipse.emf.ecp.application.e4/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..1d14705
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/META-INF/MANIFEST.MF
@@ -0,0 +1,32 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: ECP e4 Application
+Bundle-SymbolicName: org.eclipse.emf.ecp.application.e4;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.emf.ecp.e4.application.Activator
+Require-Bundle: javax.inject;bundle-version="1.0.0",
+ org.eclipse.core.runtime;bundle-version="3.8.0",
+ org.eclipse.swt;bundle-version="3.100.1",
+ org.eclipse.core.databinding;bundle-version="1.4.1",
+ org.eclipse.core.databinding.beans;bundle-version="1.2.200",
+ org.eclipse.jface;bundle-version="3.8.101",
+ org.eclipse.jface.databinding;bundle-version="1.6.0",
+ org.eclipse.e4.ui.services;bundle-version="0.10.2",
+ org.eclipse.e4.ui.workbench;bundle-version="0.10.3",
+ org.eclipse.e4.core.services;bundle-version="1.0.0",
+ org.eclipse.e4.core.di;bundle-version="1.1.0",
+ org.eclipse.e4.ui.di;bundle-version="0.10.1",
+ org.eclipse.e4.core.contexts;bundle-version="1.1.0",
+ org.eclipse.e4.ui.workbench.swt;bundle-version="0.10.2",
+ org.eclipse.core.databinding.property;bundle-version="1.4.100",
+ org.eclipse.e4.ui.css.core;bundle-version="0.10.2",
+ org.w3c.css.sac;bundle-version="1.3.1",
+ org.eclipse.e4.core.commands;bundle-version="0.10.1",
+ org.eclipse.e4.ui.bindings;bundle-version="0.10.1",
+ org.eclipse.emf.ecp.editor;bundle-version="1.0.0",
+ org.eclipse.emf.ecp.ui;bundle-version="1.0.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Import-Package: javax.annotation;version="1.0.0",
+ org.eclipse.emf.ecp.explorereditorbridge.internal;version="1.0.0",
+ org.osgi.framework;version="1.3.0"
+Bundle-ActivationPolicy: lazy
diff --git a/extra/org.eclipse.emf.ecp.application.e4/build.properties b/extra/org.eclipse.emf.ecp.application.e4/build.properties
new file mode 100644
index 0000000..25bc7a6
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/build.properties
@@ -0,0 +1,7 @@
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ Application.e4xmi,\
+ css/default.css
+source.. = src/
diff --git a/extra/org.eclipse.emf.ecp.application.e4/css/default.css b/extra/org.eclipse.emf.ecp.application.e4/css/default.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/css/default.css
diff --git a/extra/org.eclipse.emf.ecp.application.e4/icons/sample.gif b/extra/org.eclipse.emf.ecp.application.e4/icons/sample.gif
new file mode 100644
index 0000000..34fb3c9
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/icons/sample.gif
Binary files differ
diff --git a/extra/org.eclipse.emf.ecp.application.e4/icons/save_edit.gif b/extra/org.eclipse.emf.ecp.application.e4/icons/save_edit.gif
new file mode 100644
index 0000000..499dd0c
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/icons/save_edit.gif
Binary files differ
diff --git a/extra/org.eclipse.emf.ecp.application.e4/org.eclipse.emf.ecp.e4.application.product b/extra/org.eclipse.emf.ecp.application.e4/org.eclipse.emf.ecp.e4.application.product
new file mode 100644
index 0000000..42bbb72
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/org.eclipse.emf.ecp.e4.application.product
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="org.eclipse.emf.ecp.e4.application" uid="org.eclipse.emf.ecp.e4.application.demo" id="org.eclipse.emf.ecp.e4.application.product" application="org.eclipse.e4.ui.workbench.swt.E4Application" version="1.0.0.qualifier" useFeatures="false" includeLaunchers="true">
+
+ <configIni use="default">
+ </configIni>
+
+ <launcherArgs>
+ <programArgs>-clearPersistedState</programArgs>
+ <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
+ </launcherArgs>
+
+ <windowImages/>
+
+ <plugins>
+ <plugin id="com.ibm.icu"/>
+ <plugin id="javax.annotation"/>
+ <plugin id="javax.inject"/>
+ <plugin id="javax.xml"/>
+ <plugin id="org.apache.batik.css"/>
+ <plugin id="org.apache.batik.util"/>
+ <plugin id="org.apache.batik.util.gui"/>
+ <plugin id="org.apache.commons.logging"/>
+ <plugin id="org.eclipse.core.commands"/>
+ <plugin id="org.eclipse.core.contenttype"/>
+ <plugin id="org.eclipse.core.databinding"/>
+ <plugin id="org.eclipse.core.databinding.beans"/>
+ <plugin id="org.eclipse.core.databinding.observable"/>
+ <plugin id="org.eclipse.core.databinding.property"/>
+ <plugin id="org.eclipse.core.expressions"/>
+ <plugin id="org.eclipse.core.filesystem"/>
+ <plugin id="org.eclipse.core.filesystem.aix.ppc" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.hpux.ia64_32" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.linux.ppc" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.linux.x86" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.linux.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.macosx" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.solaris.sparc" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.win32.x86" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.win32.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.core.jobs"/>
+ <plugin id="org.eclipse.core.resources"/>
+ <plugin id="org.eclipse.core.resources.win32.x86" fragment="true"/>
+ <plugin id="org.eclipse.core.runtime"/>
+ <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
+ <plugin id="org.eclipse.e4.core.commands"/>
+ <plugin id="org.eclipse.e4.core.contexts"/>
+ <plugin id="org.eclipse.e4.core.di"/>
+ <plugin id="org.eclipse.e4.core.di.extensions"/>
+ <plugin id="org.eclipse.e4.core.services"/>
+ <plugin id="org.eclipse.e4.ui.bindings"/>
+ <plugin id="org.eclipse.e4.ui.css.core"/>
+ <plugin id="org.eclipse.e4.ui.css.swt"/>
+ <plugin id="org.eclipse.e4.ui.css.swt.theme"/>
+ <plugin id="org.eclipse.e4.ui.di"/>
+ <plugin id="org.eclipse.e4.ui.model.workbench"/>
+ <plugin id="org.eclipse.e4.ui.services"/>
+ <plugin id="org.eclipse.e4.ui.widgets"/>
+ <plugin id="org.eclipse.e4.ui.workbench"/>
+ <plugin id="org.eclipse.e4.ui.workbench.renderers.swt"/>
+ <plugin id="org.eclipse.e4.ui.workbench.renderers.swt.cocoa" fragment="true"/>
+ <plugin id="org.eclipse.e4.ui.workbench.swt"/>
+ <plugin id="org.eclipse.e4.ui.workbench3"/>
+ <plugin id="org.eclipse.emf.common"/>
+ <plugin id="org.eclipse.emf.databinding"/>
+ <plugin id="org.eclipse.emf.databinding.edit"/>
+ <plugin id="org.eclipse.emf.ecore"/>
+ <plugin id="org.eclipse.emf.ecore.change"/>
+ <plugin id="org.eclipse.emf.ecore.xmi"/>
+ <plugin id="org.eclipse.emf.ecp.e4.application"/>
+ <plugin id="org.eclipse.emf.ecp.edit"/>
+ <plugin id="org.eclipse.emf.ecp.editor"/>
+ <plugin id="org.eclipse.emf.edit"/>
+ <plugin id="org.eclipse.equinox.app"/>
+ <plugin id="org.eclipse.equinox.common"/>
+ <plugin id="org.eclipse.equinox.concurrent"/>
+ <plugin id="org.eclipse.equinox.ds"/>
+ <plugin id="org.eclipse.equinox.event"/>
+ <plugin id="org.eclipse.equinox.preferences"/>
+ <plugin id="org.eclipse.equinox.registry"/>
+ <plugin id="org.eclipse.equinox.servletbridge.extensionbundle" fragment="true"/>
+ <plugin id="org.eclipse.equinox.transforms.hook" fragment="true"/>
+ <plugin id="org.eclipse.equinox.util"/>
+ <plugin id="org.eclipse.equinox.weaving.hook" fragment="true"/>
+ <plugin id="org.eclipse.help"/>
+ <plugin id="org.eclipse.jface"/>
+ <plugin id="org.eclipse.jface.databinding"/>
+ <plugin id="org.eclipse.osgi"/>
+ <plugin id="org.eclipse.osgi.services"/>
+ <plugin id="org.eclipse.swt"/>
+ <plugin id="org.eclipse.swt.carbon.macosx" fragment="true"/>
+ <plugin id="org.eclipse.swt.cocoa.macosx" fragment="true"/>
+ <plugin id="org.eclipse.swt.cocoa.macosx.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.aix.ppc" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.aix.ppc64" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.hpux.ia64_32" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.linux.ppc" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.linux.ppc64" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.linux.s390" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.linux.s390x" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.linux.x86" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.linux.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.solaris.sparc" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.solaris.x86" fragment="true"/>
+ <plugin id="org.eclipse.swt.motif.aix.ppc" fragment="true"/>
+ <plugin id="org.eclipse.swt.motif.hpux.ia64_32" fragment="true"/>
+ <plugin id="org.eclipse.swt.motif.linux.x86" fragment="true"/>
+ <plugin id="org.eclipse.swt.motif.solaris.sparc" fragment="true"/>
+ <plugin id="org.eclipse.swt.photon.qnx.x86" fragment="true"/>
+ <plugin id="org.eclipse.swt.win32.win32.x86" fragment="true"/>
+ <plugin id="org.eclipse.swt.win32.win32.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.ui.workbench"/>
+ <plugin id="org.w3c.css.sac"/>
+ <plugin id="org.w3c.dom.smil"/>
+ <plugin id="org.w3c.dom.svg"/>
+ </plugins>
+
+
+</product>
diff --git a/extra/org.eclipse.emf.ecp.application.e4/plugin.xml b/extra/org.eclipse.emf.ecp.application.e4/plugin.xml
new file mode 100644
index 0000000..ee30a0b
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/plugin.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin>
+
+ <extension
+ id="product"
+ point="org.eclipse.core.runtime.products">
+ <product
+ name="org.eclipse.emf.ecp.e4.application"
+ application="org.eclipse.e4.ui.workbench.swt.E4Application">
+ <property
+ name="clearPersistedState"
+ value="true">
+ </property>
+ <property
+ name="applicationCSS"
+ value="platform:/plugin/org.eclipse.emf.ecp.e4.application/css/default.css">
+ </property>
+ <property
+ name="appName"
+ value="org.eclipse.emf.ecp.e4.application">
+ </property>
+ </product>
+ </extension>
+ <extension
+ point="org.eclipse.emf.ecp.ui.modelElementOpener">
+ <ModelElementOpener
+ class="org.eclipse.emf.ecp.e4.editor.E4ModelElementOpener"
+ name="org.eclipse.emf.ecp.e4.application.ModelElementOpener">
+ <staticTester
+ modelElement="org.eclipse.emf.ecore.EObject"
+ priority="2">
+ </staticTester>
+ </ModelElementOpener>
+ </extension>
+
+</plugin>
diff --git a/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/application/Activator.java b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/application/Activator.java
new file mode 100644
index 0000000..990742a
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/application/Activator.java
@@ -0,0 +1,50 @@
+package org.eclipse.emf.ecp.e4.application;
+
+import java.util.Collection;
+
+import org.eclipse.e4.core.contexts.IContextFunction;
+import org.eclipse.e4.ui.internal.workbench.E4Workbench;
+import org.eclipse.e4.ui.services.EContextService;
+import org.eclipse.e4.ui.workbench.modeling.EPartService;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+
+public class Activator implements BundleActivator {
+
+ private static BundleContext context;
+
+ static BundleContext getContext() {
+ return context;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext bundleContext) throws Exception {
+ Activator.context = bundleContext;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext bundleContext) throws Exception {
+ Activator.context = null;
+ }
+
+ public static EPartService getEPartService(){
+ try {
+ ServiceReference<?> service=context.getServiceReferences(IContextFunction.class.getName(),"(service.context.key="+EPartService.class.getName()+")")[0];
+ //TODO a "bit" ugly
+ return (EPartService) ((IContextFunction)context.getService(service)).compute(E4Workbench.getServiceContext());
+ } catch (InvalidSyntaxException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+}
diff --git a/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/editor/E4ModelElementOpener.java b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/editor/E4ModelElementOpener.java
new file mode 100644
index 0000000..71957f4
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/editor/E4ModelElementOpener.java
@@ -0,0 +1,27 @@
+package org.eclipse.emf.ecp.e4.editor;
+
+import javax.inject.Inject;
+
+import org.eclipse.e4.core.contexts.ContextInjectionFactory;
+import org.eclipse.e4.core.di.annotations.Creatable;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+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.ECPProject;
+import org.eclipse.emf.ecp.e4.application.Activator;
+import org.eclipse.emf.ecp.ui.util.ECPModelElementOpener;
+
+
+public class E4ModelElementOpener implements ECPModelElementOpener {
+
+ @Override
+ public void openModelElement(Object modelElement, ECPProject ecpProject) {
+
+// Activator.getEContextService();
+ EPartService partService=Activator.getEPartService();
+ MPart part=partService.createPart("org.eclipse.emf.ecp.e4.application.partdescriptor.editor");
+ partService.showPart(part, PartState.ACTIVATE);
+ }
+
+}
diff --git a/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/editor/ECPE4Editor.java b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/editor/ECPE4Editor.java
new file mode 100644
index 0000000..b8ae938
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/editor/ECPE4Editor.java
@@ -0,0 +1,37 @@
+package org.eclipse.emf.ecp.e4.editor;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.eclipse.e4.core.di.annotations.Optional;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecp.core.ECPProject;
+import org.eclipse.emf.ecp.core.ECPProjectManager;
+import org.eclipse.emf.ecp.core.util.ECPUtil;
+import org.eclipse.emf.ecp.edit.ECPEditorContext;
+import org.eclipse.emf.ecp.editor.EditorFactory;
+import org.eclipse.emf.ecp.editor.IEditorCompositeProvider;
+import org.eclipse.emf.ecp.explorereditorbridge.internal.EditorContext;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+public class ECPE4Editor {
+
+ public ECPE4Editor(){
+
+ }
+
+ @PostConstruct
+ public void construct(Composite composite,@Named(IServiceConstants.ACTIVE_SELECTION) @Optional EObject modelElement){
+// IEditorCompositeProvider compositeProvider=EditorFactory.INSTANCE.getEditorComposite(modelElementContext);
+// Composite editorComposite=compositeProvider.createUI(composite);
+ if(modelElement==null)
+ return;
+ ECPEditorContext editorContext=new EditorContext(modelElement, ECPUtil.getECPProjectManager().getProject(modelElement), composite.getShell());
+ IEditorCompositeProvider editorPageContent = EditorFactory.INSTANCE.getEditorComposite(editorContext);
+ editorPageContent.createUI(composite);
+ }
+}
diff --git a/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/handlers/CheckoutProjectHandler.java b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/handlers/CheckoutProjectHandler.java
new file mode 100644
index 0000000..073809d
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/handlers/CheckoutProjectHandler.java
@@ -0,0 +1,25 @@
+package org.eclipse.emf.ecp.e4.handlers;
+
+import java.util.Collections;
+
+import javax.inject.Named;
+
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.core.di.annotations.Optional;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.emf.ecp.core.util.ECPCheckoutSource;
+import org.eclipse.emf.ecp.internal.ui.util.ECPHandlerHelper;
+import org.eclipse.swt.widgets.Shell;
+
+public class CheckoutProjectHandler {
+
+ @Execute
+ public void execute(Shell shell,@Named(IServiceConstants.ACTIVE_SELECTION) @Optional ECPCheckoutSource checkoutSource){
+ ECPHandlerHelper.checkout(Collections.singletonList(checkoutSource), shell);
+ }
+ @CanExecute
+ public boolean canExecute(){
+ return true;
+ }
+}
diff --git a/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/handlers/NewModelElementHandler.java b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/handlers/NewModelElementHandler.java
new file mode 100644
index 0000000..597d41a
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/handlers/NewModelElementHandler.java
@@ -0,0 +1,25 @@
+package org.eclipse.emf.ecp.e4.handlers;
+
+import javax.inject.Named;
+
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.core.di.annotations.Optional;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.emf.ecp.core.ECPProject;
+import org.eclipse.emf.ecp.internal.ui.util.ECPHandlerHelper;
+import org.eclipse.swt.widgets.Shell;
+
+public class NewModelElementHandler {
+
+ @Execute
+ public void execute(Shell shell,@Named(IServiceConstants.ACTIVE_SELECTION) @Optional ECPProject ecpProject){
+ if(ecpProject==null)
+ return;
+ ECPHandlerHelper.addModelElement(ecpProject, shell, false);
+ }
+ @CanExecute
+ public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION) @Optional ECPProject ecpProject){
+ return ecpProject!=null;
+ }
+}
diff --git a/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/handlers/NewProjectHandler.java b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/handlers/NewProjectHandler.java
new file mode 100644
index 0000000..b7ea8c6
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/handlers/NewProjectHandler.java
@@ -0,0 +1,18 @@
+package org.eclipse.emf.ecp.e4.handlers;
+
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.emf.ecp.internal.ui.util.ECPHandlerHelper;
+import org.eclipse.swt.widgets.Shell;
+
+public class NewProjectHandler {
+
+ @Execute
+ public void execute(Shell shell){
+ ECPHandlerHelper.createProject(shell);
+ }
+ @CanExecute
+ public boolean canExecute(){
+ return true;
+ }
+}
diff --git a/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/view/ECPModelView.java b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/view/ECPModelView.java
new file mode 100644
index 0000000..61a1046
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/view/ECPModelView.java
@@ -0,0 +1,86 @@
+package org.eclipse.emf.ecp.e4.view;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+import org.eclipse.e4.ui.di.Focus;
+import org.eclipse.e4.ui.workbench.modeling.EPartService;
+import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
+import org.eclipse.e4.ui.workbench.swt.modeling.EMenuService;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecp.core.ECPProject;
+import org.eclipse.emf.ecp.core.util.ECPContainer;
+import org.eclipse.emf.ecp.core.util.ECPUtil;
+import org.eclipse.emf.ecp.internal.ui.model.ModelContentProvider;
+import org.eclipse.emf.ecp.internal.ui.util.ECPHandlerHelper;
+import org.eclipse.emf.ecp.ui.common.TreeViewerFactory;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.widgets.Composite;
+
+public class ECPModelView {
+
+ private TreeViewer modelExplorerTree;
+ private ModelContentProvider contentProvider;
+
+ public ECPModelView(){
+
+ }
+
+ @PostConstruct
+ public void create(Composite composite,EMenuService menuService,final ESelectionService selectionService,final EPartService partService){
+ modelExplorerTree = TreeViewerFactory.createModelExplorerViewer(composite, false, null);
+ menuService.registerContextMenu(modelExplorerTree.getTree(), "org.eclipse.emf.ecp.e4.application.popupmenu.navigator");
+ contentProvider=(ModelContentProvider) modelExplorerTree.getContentProvider();
+ modelExplorerTree.addDoubleClickListener(new IDoubleClickListener() {
+
+ @Override
+ public void doubleClick(DoubleClickEvent event) {
+ if (event.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) event.getSelection();
+ Object firstElement = structuredSelection.getFirstElement();
+
+ if (firstElement instanceof ECPProject) {
+ ECPProject project = (ECPProject) firstElement;
+ if (!project.isOpen()) {
+ project.open();
+ }
+ }
+ else if (firstElement instanceof EObject) {
+ ECPContainer context = ECPUtil.getModelContext(contentProvider, structuredSelection.toArray());
+ ECPHandlerHelper.openModelElement(firstElement, (ECPProject) context);
+// MPart part=partService.createPart("org.eclipse.emf.ecp.e4.application.partdescriptor.editor");
+// part.setLabel(modelElement.eClass().getName());
+// partService.showPart(part, PartState.ACTIVATE);
+ }
+ }
+ }
+ });
+ modelExplorerTree.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ ISelection selection=event.getSelection();
+ if(IStructuredSelection.class.isInstance(selection)){
+ IStructuredSelection structuredSelection=(IStructuredSelection) selection;
+ if(!structuredSelection.isEmpty()){
+ selectionService.setSelection(structuredSelection.getFirstElement());
+ }
+ }
+ }
+ });
+ }
+ @Focus
+ public void setFocus(){
+ modelExplorerTree.getTree().setFocus();
+ }
+ @PreDestroy
+ public void dispose(){
+
+ }
+}
diff --git a/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/view/ECPRepositoryView.java b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/view/ECPRepositoryView.java
new file mode 100644
index 0000000..c3f25a6
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.application.e4/src/org/eclipse/emf/ecp/e4/view/ECPRepositoryView.java
@@ -0,0 +1,59 @@
+package org.eclipse.emf.ecp.e4.view;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+import org.eclipse.e4.ui.di.Focus;
+import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
+import org.eclipse.e4.ui.workbench.swt.modeling.EMenuService;
+import org.eclipse.emf.ecp.ui.common.TreeViewerFactory;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.widgets.Composite;
+
+public class ECPRepositoryView {
+
+ private TreeViewer repositoryTree;
+
+ public ECPRepositoryView() {
+
+ }
+
+ @PostConstruct
+ public void create(Composite composite, EMenuService menuService,
+ final ESelectionService selectionService) {
+ repositoryTree = TreeViewerFactory.createRepositoryExplorerViewer(
+ composite, null);
+ menuService.registerContextMenu(repositoryTree.getTree(),
+ "org.eclipse.emf.ecp.e4.application.popupmenu.repository");
+ repositoryTree
+ .addSelectionChangedListener(new ISelectionChangedListener() {
+
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ ISelection selection = event.getSelection();
+ if (IStructuredSelection.class.isInstance(selection)) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+ if (!structuredSelection.isEmpty()) {
+ selectionService
+ .setSelection(structuredSelection
+ .getFirstElement());
+ }
+ }
+ }
+ });
+ }
+
+ @Focus
+ public void setFocus() {
+ repositoryTree.getTree().setFocus();
+ }
+
+ @PreDestroy
+ public void dispose() {
+
+ }
+}
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/.classpath b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/.project b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/.project
new file mode 100644
index 0000000..4eaf619
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.ecp.emfstore.ui.e4</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/.settings/org.eclipse.jdt.core.prefs b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/.settings/org.eclipse.pde.core.prefs b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..f29e940
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/META-INF/MANIFEST.MF b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..28691f0
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Emfstore e4 ui
+Bundle-SymbolicName: org.eclipse.emf.ecp.emfstore.ui.e4;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.emf.ecp.e4.emfstore.Activator
+Require-Bundle: org.eclipse.e4.core.di,
+ javax.inject,
+ org.eclipse.e4.ui.workbench;bundle-version="0.10.3",
+ org.eclipse.emf.emfstore.client.ui;bundle-version="1.0.0",
+ org.eclipse.swt;bundle-version="3.100.1",
+ org.eclipse.e4.ui.services;bundle-version="0.10.2",
+ org.eclipse.emf.ecp.core;bundle-version="1.0.0",
+ org.eclipse.emf.ecp.emfstore.core;bundle-version="1.0.0",
+ org.eclipse.emf.emfstore.client;bundle-version="1.0.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Import-Package: org.osgi.framework;version="1.3.0"
+Bundle-ActivationPolicy: lazy
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/build.properties b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/build.properties
new file mode 100644
index 0000000..7fdfe37
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ fragment.e4xmi,\
+ icons/
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/fragment.e4xmi b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/fragment.e4xmi
new file mode 100644
index 0000000..478254d
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/fragment.e4xmi
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="ASCII"?>
+<fragment:ModelFragments xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:commands="http://www.eclipse.org/ui/2010/UIModel/application/commands" xmlns:fragment="http://www.eclipse.org/ui/2010/UIModel/fragment" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmi:id="_nICRUJoyEeKJoJcmiy2C6w">
+ <fragments xsi:type="fragment:StringModelFragment" xmi:id="_n_mLcJoyEeKJoJcmiy2C6w" featurename="commands" parentElementId="org.eclipse.e4.ide.application">
+ <elements xsi:type="commands:Command" xmi:id="_pCdWoJoyEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.emfstore.command.login" commandName="LogIn"/>
+ <elements xsi:type="commands:Command" xmi:id="_39_5UJpoEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.emfstore.command.logout" commandName="LogOut"/>
+ <elements xsi:type="commands:Command" xmi:id="_IU0E0JprEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.emfstore.command.startLocalServer" commandName="Start Local Server"/>
+ </fragments>
+ <fragments xsi:type="fragment:StringModelFragment" xmi:id="_8oN_0JozEeKJoJcmiy2C6w" featurename="handlers" parentElementId="org.eclipse.e4.ide.application">
+ <elements xsi:type="commands:Handler" xmi:id="_qRumIJoyEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.emfstore.handler.login" contributionURI="bundleclass://org.eclipse.emf.ecp.emfstore.ui.e4/org.eclipse.emf.ecp.e4.emfstore.LogInHandler" command="_pCdWoJoyEeKJoJcmiy2C6w"/>
+ <elements xsi:type="commands:Handler" xmi:id="_517rUJpoEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.emfstore.handler.logout" contributionURI="bundleclass://org.eclipse.emf.ecp.emfstore.ui.e4/org.eclipse.emf.ecp.e4.emfstore.LogOutHandler" command="_39_5UJpoEeKJoJcmiy2C6w"/>
+ <elements xsi:type="commands:Handler" xmi:id="_L67P4JprEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.emfstore.handler.startLocalServer" contributionURI="bundleclass://org.eclipse.emf.ecp.emfstore.ui.e4/org.eclipse.emf.ecp.e4.emfstore.StartLocalServerHandler" command="_IU0E0JprEeKJoJcmiy2C6w"/>
+ </fragments>
+ <fragments xsi:type="fragment:StringModelFragment" xmi:id="__dQ6UJozEeKJoJcmiy2C6w" featurename="children" parentElementId="org.eclipse.emf.ecp.e4.application.popupmenu.repository">
+ <elements xsi:type="menu:HandledMenuItem" xmi:id="_szdjEJoyEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.emfstore.handledmenuitem.login" label="LogIn" iconURI="platform:/plugin/org.eclipse.emf.ecp.emfstore.ui.e4/icons/login.png" command="_pCdWoJoyEeKJoJcmiy2C6w"/>
+ <elements xsi:type="menu:HandledMenuItem" xmi:id="_-I6jcJpoEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.emfstore.handledmenuitem.logout" label="LogOut" iconURI="platform:/plugin/org.eclipse.emf.ecp.emfstore.ui.e4/icons/logout.png" command="_39_5UJpoEeKJoJcmiy2C6w"/>
+ <elements xsi:type="menu:HandledMenuItem" xmi:id="_Qvw34JprEeKJoJcmiy2C6w" elementId="org.eclipse.emf.ecp.e4.emfstore.handledmenuitem.startLocalServer" label="Start Local Server" iconURI="platform:/plugin/org.eclipse.emf.ecp.emfstore.ui.e4/icons/startLocalServer.png" mnemonics="M1+F2" command="_IU0E0JprEeKJoJcmiy2C6w"/>
+ </fragments>
+</fragment:ModelFragments>
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/icons/login.png b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/icons/login.png
new file mode 100644
index 0000000..a471765
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/icons/login.png
Binary files differ
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/icons/logout.png b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/icons/logout.png
new file mode 100644
index 0000000..2ebc4f6
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/icons/logout.png
Binary files differ
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/icons/startLocalServer.png b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/icons/startLocalServer.png
new file mode 100644
index 0000000..540c8e2
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/icons/startLocalServer.png
Binary files differ
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/plugin.xml b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/plugin.xml
new file mode 100644
index 0000000..c422046
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/plugin.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin>
+ <extension
+ id="id1"
+ point="org.eclipse.e4.workbench.model">
+ <fragment
+ uri="fragment.e4xmi">
+ </fragment>
+ </extension>
+
+</plugin>
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/src/org/eclipse/emf/ecp/e4/emfstore/Activator.java b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/src/org/eclipse/emf/ecp/e4/emfstore/Activator.java
new file mode 100644
index 0000000..57b4e72
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/src/org/eclipse/emf/ecp/e4/emfstore/Activator.java
@@ -0,0 +1,30 @@
+package org.eclipse.emf.ecp.e4.emfstore;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+
+ private static BundleContext context;
+
+ static BundleContext getContext() {
+ return context;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext bundleContext) throws Exception {
+ Activator.context = bundleContext;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext bundleContext) throws Exception {
+ Activator.context = null;
+ }
+
+}
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/src/org/eclipse/emf/ecp/e4/emfstore/LogInHandler.java b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/src/org/eclipse/emf/ecp/e4/emfstore/LogInHandler.java
new file mode 100644
index 0000000..7056259
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/src/org/eclipse/emf/ecp/e4/emfstore/LogInHandler.java
@@ -0,0 +1,33 @@
+
+package org.eclipse.emf.ecp.e4.emfstore;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import javax.inject.Named;
+
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.core.di.annotations.Optional;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.emf.ecp.core.ECPProviderRegistry;
+import org.eclipse.emf.ecp.core.ECPRepository;
+import org.eclipse.emf.ecp.core.util.ECPUtil;
+import org.eclipse.emf.ecp.emfstore.core.internal.EMFStoreProvider;
+import org.eclipse.emf.ecp.spi.core.InternalRepository;
+import org.eclipse.emf.emfstore.client.ESServer;
+import org.eclipse.emf.emfstore.internal.client.ui.controller.UILoginSessionController;
+import org.eclipse.swt.widgets.Shell;
+
+@SuppressWarnings("restriction")
+public class LogInHandler {
+ @Execute
+ public void execute(Shell shell, @Named(IServiceConstants.ACTIVE_SELECTION)@Optional ECPRepository ecpRepository) {
+
+ final ESServer serverInfo = ((EMFStoreProvider)ECPUtil.getResolvedElement(ECPUtil.getECPProviderRegistry().getProvider(EMFStoreProvider.NAME))).getServerInfo((InternalRepository) ecpRepository);
+ new UILoginSessionController(shell, serverInfo).execute();
+
+ // ((TreeView)HandlerUtil.getActivePart(event)).getRefreshAction().run();
+ ((InternalRepository) ecpRepository).notifyObjectsChanged((Collection)Collections.singleton(ecpRepository ));
+ }
+
+}
\ No newline at end of file
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/src/org/eclipse/emf/ecp/e4/emfstore/LogOutHandler.java b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/src/org/eclipse/emf/ecp/e4/emfstore/LogOutHandler.java
new file mode 100644
index 0000000..6054e45
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/src/org/eclipse/emf/ecp/e4/emfstore/LogOutHandler.java
@@ -0,0 +1,32 @@
+
+package org.eclipse.emf.ecp.e4.emfstore;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import javax.inject.Named;
+
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.core.di.annotations.Optional;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.emf.ecp.core.ECPProviderRegistry;
+import org.eclipse.emf.ecp.core.ECPRepository;
+import org.eclipse.emf.ecp.core.util.ECPUtil;
+import org.eclipse.emf.ecp.emfstore.core.internal.EMFStoreProvider;
+import org.eclipse.emf.ecp.spi.core.InternalRepository;
+import org.eclipse.emf.emfstore.client.ESServer;
+import org.eclipse.emf.emfstore.internal.client.ui.controller.UILogoutSessionController;
+import org.eclipse.swt.widgets.Shell;
+
+@SuppressWarnings("restriction")
+public class LogOutHandler {
+ @Execute
+ public void execute(Shell shell, @Named(IServiceConstants.ACTIVE_SELECTION)@Optional ECPRepository ecpRepository) {
+
+ final ESServer serverInfo = ((EMFStoreProvider)ECPUtil.getResolvedElement(ECPUtil.getECPProviderRegistry().getProvider(EMFStoreProvider.NAME))).getServerInfo((InternalRepository) ecpRepository);
+ new UILogoutSessionController(shell, serverInfo.getLastUsersession()).execute();
+
+ ((InternalRepository) ecpRepository).notifyObjectsChanged((Collection)Collections.singleton(ecpRepository ));
+ }
+
+}
\ No newline at end of file
diff --git a/extra/org.eclipse.emf.ecp.emfstore.ui.e4/src/org/eclipse/emf/ecp/e4/emfstore/StartLocalServerHandler.java b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/src/org/eclipse/emf/ecp/e4/emfstore/StartLocalServerHandler.java
new file mode 100644
index 0000000..e178c52
--- /dev/null
+++ b/extra/org.eclipse.emf.ecp.emfstore.ui.e4/src/org/eclipse/emf/ecp/e4/emfstore/StartLocalServerHandler.java
@@ -0,0 +1,25 @@
+
+package org.eclipse.emf.ecp.e4.emfstore;
+
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.emf.emfstore.internal.server.EMFStoreController;
+import org.eclipse.emf.emfstore.internal.server.exceptions.FatalESException;
+import org.osgi.service.log.LogService;
+
+@SuppressWarnings("restriction")
+public class StartLocalServerHandler {
+ @Execute
+ public void execute(LogService logService) {
+ try {
+ EMFStoreController.runAsNewThread();
+ } catch (FatalESException e) {
+ logService.log(LogService.LOG_ERROR, e.getMessage(), e);
+ }
+ }
+ @CanExecute
+ public boolean isEnabled(){
+ return EMFStoreController.getInstance()==null;
+ }
+
+}
\ No newline at end of file