parallel ip - initial checkin
Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
diff --git a/.project b/.project
new file mode 100644
index 0000000..f08e986
--- /dev/null
+++ b/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.vaadin.emf.aggregator</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
diff --git a/about.html b/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 1, 2016</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/jenkins.build.config.xml b/jenkins.build.config.xml
new file mode 100644
index 0000000..17a1471
--- /dev/null
+++ b/jenkins.build.config.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--#======================================================================= -->
+<!--# Copyright (c) 2016 - Loetz GmbH&Co.KG -->
+<!--# 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: -->
+<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
+<!--#======================================================================= -->
+<!--# Module specific parameters for the Jenkins Job -->
+<!--#======================================================================= -->
+
+<jenkins>
+
+ <!-- DO NOT EDIT BELOW THIS LINE -->
+ <jenkins.build.dependencies>
+ <jenkins.build.dependency>org.eclipse.osbp.runtime.web</jenkins.build.dependency>
+ </jenkins.build.dependencies>
+</jenkins>
diff --git a/notice.html b/notice.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/notice.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+ repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
+Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+ href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+ in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+ Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+ the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+ indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/org.eclipse.osbp.vaadin.emf.api/.project b/org.eclipse.osbp.vaadin.emf.api/.project
new file mode 100644
index 0000000..e54c90f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/.project
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.vaadin.emf.api</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <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.babel.editor.rbeBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.babel.editor.rbeNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.vaadin.emf.api/LICENSE.txt b/org.eclipse.osbp.vaadin.emf.api/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.emf.api/META-INF/MANIFEST.MF b/org.eclipse.osbp.vaadin.emf.api/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..15aaa52
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.vaadin.emf.api
+Bundle-SymbolicName: org.eclipse.osbp.vaadin.emf.api
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.e4.ui.model.workbench,
+ org.eclipse.emf.common,
+ org.eclipse.emf.edit
+Export-Package: org.eclipse.osbp.vaadin.emf.api;version="0.9.0"
diff --git a/org.eclipse.osbp.vaadin.emf.api/about.html b/org.eclipse.osbp.vaadin.emf.api/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 1, 2016</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.emf.api/about.ini b/org.eclipse.osbp.vaadin.emf.api/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/about.ini
@@ -0,0 +1,17 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+welcomePage=
diff --git a/org.eclipse.osbp.vaadin.emf.api/about.mappings b/org.eclipse.osbp.vaadin.emf.api/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=qualifier
diff --git a/org.eclipse.osbp.vaadin.emf.api/about.properties b/org.eclipse.osbp.vaadin.emf.api/about.properties
new file mode 100644
index 0000000..e248307
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/about.properties
@@ -0,0 +1,26 @@
+#
+# Copyright (c) 2012, 2016 - Loetz GmbH&Co.KG (Heidelberg)
+# 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:
+# Loetz GmbH&Co.KG - initial API and implementation
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+featureName=org.eclipse.osbp.vaadin.emf.api
+
+################ blurb property ####################################
+featureText=\
+Copyright (c) 2012-2016 - Loetz GmbH&Co.KG \n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+ Loetz GmbH&Co.KG - implementation\n
+################ end of blurb property ####################################
diff --git a/org.eclipse.osbp.vaadin.emf.api/build.properties b/org.eclipse.osbp.vaadin.emf.api/build.properties
new file mode 100644
index 0000000..5364007
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/build.properties
@@ -0,0 +1,8 @@
+source.. = src/
+output.. = target/classes/
+bin.includes = about.properties, about.mappings, about.ini, about.html, META-INF/,\
+ .,\
+ license.html,\
+ LICENSE.txt
+src.includes = about.properties, about.mappings, about.ini, about.html, LICENSE.txt,\
+ license.html
diff --git a/org.eclipse.osbp.vaadin.emf.api/epl-v10.html b/org.eclipse.osbp.vaadin.emf.api/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+ body {
+ size: 8.5in 11.0in;
+ margin: 0.25in 0.5in 0.25in 0.5in;
+ tab-interval: 0.5in;
+ }
+ p {
+ margin-left: auto;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ p.list {
+ margin-left: 0.5in;
+ margin-top: 0.05em;
+ margin-bottom: 0.05em;
+ }
+ </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.emf.api/license.html b/org.eclipse.osbp.vaadin.emf.api/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/license.html
@@ -0,0 +1,164 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse Foundation
+source code
+ repository ("Repository") in software modules ("Modules") and made
+available as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to
+facilitate delivering, extending, and upgrading the Content. Typical
+modules may include plug-ins ("Plug-ins"), plug-in fragments
+("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or
+Fragments and associated material. Each Feature may be packaged as a
+sub-directory in a directory named "features". Within a Feature, files
+named "feature.xml" may contain a list of the names and version numbers
+of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features ("Included
+Features"). Within a Feature, files named "feature.xml" may contain a
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and
+Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the
+Feature Update License should either provide you with the terms and
+conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be
+found in the "license" property of files named "feature.properties"
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+ SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software,
+examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager ("Provisioning Technology") for the purpose of
+allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This
+capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning
+Technology
+ in accordance with the Specification. By using Provisioning
+Technology in such a manner and making it available in accordance with
+the
+ Specification, you further acknowledge your agreement to, and the
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur ("Provisioning Process") in
+which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") with the intent of installing,
+extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology
+may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user
+the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such Installable
+Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable
+Software Agreement must inform the user of the terms and conditions that
+ govern
+ the Installable Software and must solicit acceptance by the end
+user in the manner prescribed in such Installable Software Agreement.
+Upon such
+ indication of agreement by the user, the provisioning Technology
+will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use,
+and/or re-export to
+ another country, of encryption software. BEFORE using any encryption
+software, please check the country's laws, regulations and policies
+concerning the import,
+ possession, or use, and re-export of encryption software, to see if
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.emf.api/pom.xml b/org.eclipse.osbp.vaadin.emf.api/pom.xml
new file mode 100644
index 0000000..05f56ce
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/pom.xml
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--#======================================================================= -->
+<!--# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) -->
+<!--# 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: -->
+<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
+<!--#======================================================================= -->
+
+<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>
+ <parent>
+ <groupId>org.eclipse.osbp.vaadin.emf</groupId>
+ <artifactId>org.eclipse.osbp.vaadin.emf.aggregator</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>org.eclipse.osbp.vaadin.emf.api</artifactId>
+ <packaging>eclipse-plugin</packaging>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <vaadin-version>${vaadin.version}</vaadin-version>
+ <vaadin.plugin.version>${vaadin.version}</vaadin.plugin.version>
+ <jdkVersion>1.8</jdkVersion>
+ </properties>
+
+ <dependencies>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>src</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>src</directory>
+ <!-- <excludes> -->
+ <!-- <exclude>**/*.java</exclude> -->
+ <!-- </excludes> -->
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>nl.geodienstencentrum.maven</groupId>
+ <artifactId>sass-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>process-sources</phase>
+ <!-- <goals> -->
+ <!-- <goal>update-stylesheets</goal> -->
+ <!-- </goals> -->
+ </execution>
+ </executions>
+ <configuration>
+ <resources>
+ <resource>
+ <source>
+ <directory>${basedir}/scss</directory>
+ <includes>
+ <include>styles.scss</include>
+ </includes>
+ <excludes>
+ <!-- <exclude>_addons.scss</exclude> -->
+ <!-- <exclude>_variables.scss</exclude> -->
+ <!-- <exclude>osbee.scss</exclude> -->
+ <!-- <exclude>style_notes.scss</exclude> -->
+ <!-- <exclude>scss/removed_files/*</exclude> -->
+ <!-- <exclude>**/osbp_legacy/*</exclude> -->
+ <!-- <exclude>**/osbp_legacy/icons/*</exclude> -->
+ <!-- <exclude>**/fontello.scss</exclude> -->
+ </excludes>
+ </source>
+ <relativeOutputDirectory/>
+ <destination>${basedir}/VAADIN/themes/osbee2</destination>
+ </resource>
+ </resources>
+ <sassOptions>
+ <always_update>true</always_update>
+ <style>:compressed</style>
+ <debug_info>true</debug_info>
+ </sassOptions>
+ <!-- <rubyVersion>2.0</rubyVersion> -->
+ <!-- <useCompass>true</useCompass> -->
+ </configuration>
+ </plugin>
+
+ <!-- <plugin> -->
+ <!-- <groupId>org.jasig.maven</groupId> -->
+ <!-- <artifactId>sass-maven-plugin</artifactId> -->
+ <!-- <version>1.1.1</version> -->
+ <!-- <executions> -->
+ <!-- <execution> -->
+ <!-- <id>package</id> -->
+ <!-- <phase>generate-sources</phase> -->
+ <!-- <goals> -->
+ <!-- <goal>update-stylesheets</goal> -->
+ <!-- </goals> -->
+ <!-- </execution> -->
+ <!-- </executions> -->
+ <!-- <configuration> -->
+ <!-- <resources> -->
+ <!-- <resource> -->
+ <!-- <source> -->
+ <!-- <directory>${basedir}/scss</directory> -->
+ <!-- </source> -->
+ <!-- <destination>${basedir}/VAADIN/themes/orgOsbeeDefaultTheme</destination> -->
+ <!-- </resource> -->
+ <!-- </resources> -->
+ <!-- <useCompass>true</useCompass> -->
+ <!-- </configuration> -->
+ <!-- </plugin> -->
+ <!-- As we are doing "inplace" GWT compilation, ensure the widgetset -->
+ <!-- directory is cleaned properly -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <version>2.19</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <!--This plugin's configuration is used to store Eclipse m2e settings
+ only. It has no influence on the Maven build itself. -->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-maven-plugin</artifactId>
+ <versionRange>[2.3.0-1,)</versionRange>
+ <goals>
+ <goal>resources</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore/>
+ </action>
+ </pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-maven-plugin</artifactId>
+ <versionRange>[1.0.2,)</versionRange>
+ <goals>
+ <goal>update-widgetset</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore/>
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+</project>
diff --git a/org.eclipse.osbp.vaadin.emf.api/src/org/eclipse/osbp/vaadin/emf/api/EmfModelElementClickEvent.java b/org.eclipse.osbp.vaadin.emf.api/src/org/eclipse/osbp/vaadin/emf/api/EmfModelElementClickEvent.java
new file mode 100644
index 0000000..4129236
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/src/org/eclipse/osbp/vaadin/emf/api/EmfModelElementClickEvent.java
@@ -0,0 +1,67 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.api;
+
+import org.eclipse.emf.ecore.EObject;
+
+// TODO: Auto-generated Javadoc - check the links in the description
+/**
+ * This class is a Vaadin session singleton and allows parties to enable the
+ * layout click event dispatching by event admin.<br>
+ * If activated, several components of the modeled workbench will send click
+ * events. See { link #TOPIC} and { link EventData} for details.
+ *
+ * @Scope(session-singleton)
+ * @NoImplementByClients
+ */
+public class EmfModelElementClickEvent {
+
+ /** The ui element. */
+ private final Object uiElement;
+
+ /** The model element. */
+ private final EObject modelElement;
+
+ /**
+ * Instantiates a new emf model element click event.
+ *
+ * @param uiElement
+ * the ui element
+ * @param modelElement
+ * the model element
+ */
+ public EmfModelElementClickEvent(Object uiElement, EObject modelElement) {
+ this.uiElement = uiElement;
+ this.modelElement = modelElement;
+ }
+
+ /**
+ * The UI element that was clicked.
+ *
+ * @return the ui element
+ */
+ public Object getUiElement() {
+ return uiElement;
+ }
+
+ /**
+ * The model element associated with the ui element.
+ *
+ * @return the model element
+ */
+ public EObject getModelElement() {
+ return modelElement;
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.emf.api/src/org/eclipse/osbp/vaadin/emf/api/ICommandStack.java b/org.eclipse.osbp.vaadin.emf.api/src/org/eclipse/osbp/vaadin/emf/api/ICommandStack.java
new file mode 100644
index 0000000..b706c61
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/src/org/eclipse/osbp/vaadin/emf/api/ICommandStack.java
@@ -0,0 +1,35 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.api;
+
+import java.util.List;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface ICommandStack.
+ */
+public interface ICommandStack extends CommandStack {
+
+ /**
+ * Returns all commands contained in the command stack.
+ *
+ * @return the all commands
+ */
+ List<Command> getAllCommands();
+
+}
diff --git a/org.eclipse.osbp.vaadin.emf.api/src/org/eclipse/osbp/vaadin/emf/api/IModelingConstants.java b/org.eclipse.osbp.vaadin.emf.api/src/org/eclipse/osbp/vaadin/emf/api/IModelingConstants.java
new file mode 100644
index 0000000..4230227
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/src/org/eclipse/osbp/vaadin/emf/api/IModelingConstants.java
@@ -0,0 +1,29 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.api;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface IModelingConstants.
+ */
+public interface IModelingConstants {
+
+ /**
+ * Sends the clicked UI element and the associated model element by this
+ * topic in event admin.
+ */
+ public static final String TOPIC__ELEMENT_CLICKED = "osbee/vaadin/emf/elementClicked";
+
+}
diff --git a/org.eclipse.osbp.vaadin.emf.api/src/org/eclipse/osbp/vaadin/emf/api/IModelingContext.java b/org.eclipse.osbp.vaadin.emf.api/src/org/eclipse/osbp/vaadin/emf/api/IModelingContext.java
new file mode 100644
index 0000000..1f5a25c
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.api/src/org/eclipse/osbp/vaadin/emf/api/IModelingContext.java
@@ -0,0 +1,118 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.api;
+
+import java.util.List;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.domain.EditingDomain;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A design context is a vaaclipse session singleton. It is accessible the the
+ * eclipse context and returns important information about the designer
+ * environment.
+ *
+ * @Scope(session-singleton)
+ * @NoImplementByClients
+ */
+public interface IModelingContext {
+
+ /**
+ * Sends events by the event admin about the state of the modeling context.
+ * Data is Boolean.TRUE or Boolean.FALSE.
+ */
+ public static final String TOPIC_STATE = "osbee/vaadin/emf/modeling/state";
+
+ /**
+ * Returns the model element for the given UI.
+ *
+ * @param component
+ * the component
+ * @return the model for ui
+ */
+ EObject getModelForUi(Object component);
+
+ /**
+ * Loads the given resource.
+ *
+ * @param uri
+ * the uri
+ */
+ public abstract void loadPerspective(URI uri);
+
+ /**
+ * Loads the given resource.
+ *
+ * @param uri
+ * the new perspective
+ */
+ public abstract void setPerspective(URI uri);
+
+ /**
+ * Returns the editing domain.
+ *
+ * @return the editing domain
+ */
+ public abstract EditingDomain getEditingDomain();
+
+ /**
+ * Returns the adapter factory.
+ *
+ * @return the adapter factory
+ */
+ public abstract AdapterFactory getAdapterFactory();
+
+ /**
+ * Returns the command stack.
+ *
+ * @return the command stack
+ */
+ public abstract CommandStack getCommandStack();
+
+ /**
+ * Returns true, if the design mode is active.
+ *
+ * @return true, if is design mode
+ */
+ public boolean isDesignMode();
+
+ /**
+ * Activate the design mode.
+ *
+ * @param value
+ * the new design mode
+ */
+ void setDesignMode(boolean value);
+
+ /**
+ * The Interface CommandStack.
+ */
+ public interface CommandStack extends
+ org.eclipse.emf.common.command.CommandStack {
+
+ /**
+ * Returns all commands contained in the command stack.
+ *
+ * @return the all commands
+ */
+ List<Command> getAllCommands();
+
+ }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.emf.feature/.project b/org.eclipse.osbp.vaadin.emf.feature/.project
new file mode 100644
index 0000000..2a08da6
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.feature/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.vaadin.widgetset.feature</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.FeatureBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.pde.FeatureNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.vaadin.emf.feature/LICENSE.txt b/org.eclipse.osbp.vaadin.emf.feature/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.feature/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.emf.feature/build.properties b/org.eclipse.osbp.vaadin.emf.feature/build.properties
new file mode 100644
index 0000000..2969796
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.feature/build.properties
@@ -0,0 +1,6 @@
+bin.includes = epl-v10.html, feature.xml,\
+ feature.properties,\
+ LICENSE.txt,\
+ license.html
+src.includes = epl-v10.html, license.html,\
+ LICENSE.txt
diff --git a/org.eclipse.osbp.vaadin.emf.feature/epl-v10.html b/org.eclipse.osbp.vaadin.emf.feature/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.feature/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+ body {
+ size: 8.5in 11.0in;
+ margin: 0.25in 0.5in 0.25in 0.5in;
+ tab-interval: 0.5in;
+ }
+ p {
+ margin-left: auto;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ p.list {
+ margin-left: 0.5in;
+ margin-top: 0.05em;
+ margin-bottom: 0.05em;
+ }
+ </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.emf.feature/feature.properties b/org.eclipse.osbp.vaadin.emf.feature/feature.properties
new file mode 100644
index 0000000..561ee2a
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.feature/feature.properties
@@ -0,0 +1,169 @@
+###############################################################################
+# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany).
+# 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:
+# Cristiano Gavião - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName =OSBP: EMF for Vaadin
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse OSBP
+
+# "description" property - description of the feature
+description=This feature provides the bundles for the OSBP Vaadin Widgetset.
+
+# "updateSiteName" property - label for the update site
+updateSiteName=
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) \n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+################ end of copyright property ####################################
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+February 1, 2011\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+ - Content may be structured and packaged into modules to facilitate delivering,\n\
+ extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+ plug-in fragments ("Fragments"), and features ("Features").\n\
+ - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+ in a directory named "plugins".\n\
+ - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+ Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+ Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+ numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+ - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+ named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+ - The top-level (root) directory\n\
+ - Plug-in and Fragment directories\n\
+ - Inside Plug-ins and Fragments packaged as JARs\n\
+ - Sub-directories of the directory named "src" of certain Plug-ins\n\
+ - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+ - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+ - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+ - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+ - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+ - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+ - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+ 1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+ the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+ extending or updating the functionality of an Eclipse-based product.\n\
+ 2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+ Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+ 3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+ govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+ Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+ with the Specification. Such Installable Software Agreement must inform the user of the\n\
+ terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+ the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+ indication of agreement by the user, the provisioning Technology will complete installation\n\
+ of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/org.eclipse.osbp.vaadin.emf.feature/feature.xml b/org.eclipse.osbp.vaadin.emf.feature/feature.xml
new file mode 100644
index 0000000..5850c7f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.feature/feature.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--#======================================================================= -->
+<!--# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) -->
+<!--# 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: -->
+<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
+<!--#======================================================================= -->
+
+<feature
+ id="org.eclipse.osbp.vaadin.emf.feature"
+ label="%featureName"
+ version="0.9.0.qualifier"
+ provider-name="%providerName">
+
+ <description>
+ %description
+ </description>
+
+ <copyright>
+ %copyright
+ </copyright>
+
+ <license url="%licenseURL">
+ %license
+ </license>
+
+ <plugin
+ id="org.eclipse.osbp.vaadin.emf"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osbp.vaadin.emf.api"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+</feature>
diff --git a/org.eclipse.osbp.vaadin.emf.feature/license.html b/org.eclipse.osbp.vaadin.emf.feature/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.feature/license.html
@@ -0,0 +1,164 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse Foundation
+source code
+ repository ("Repository") in software modules ("Modules") and made
+available as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to
+facilitate delivering, extending, and upgrading the Content. Typical
+modules may include plug-ins ("Plug-ins"), plug-in fragments
+("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or
+Fragments and associated material. Each Feature may be packaged as a
+sub-directory in a directory named "features". Within a Feature, files
+named "feature.xml" may contain a list of the names and version numbers
+of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features ("Included
+Features"). Within a Feature, files named "feature.xml" may contain a
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and
+Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the
+Feature Update License should either provide you with the terms and
+conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be
+found in the "license" property of files named "feature.properties"
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+ SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software,
+examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager ("Provisioning Technology") for the purpose of
+allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This
+capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning
+Technology
+ in accordance with the Specification. By using Provisioning
+Technology in such a manner and making it available in accordance with
+the
+ Specification, you further acknowledge your agreement to, and the
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur ("Provisioning Process") in
+which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") with the intent of installing,
+extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology
+may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user
+the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such Installable
+Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable
+Software Agreement must inform the user of the terms and conditions that
+ govern
+ the Installable Software and must solicit acceptance by the end
+user in the manner prescribed in such Installable Software Agreement.
+Upon such
+ indication of agreement by the user, the provisioning Technology
+will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use,
+and/or re-export to
+ another country, of encryption software. BEFORE using any encryption
+software, please check the country's laws, regulations and policies
+concerning the import,
+ possession, or use, and re-export of encryption software, to see if
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.emf.feature/pom.xml b/org.eclipse.osbp.vaadin.emf.feature/pom.xml
new file mode 100644
index 0000000..2abe6be
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.feature/pom.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--#======================================================================= -->
+<!--# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany). -->
+<!--# 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: -->
+<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
+<!--#======================================================================= -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.osbp.vaadin.emf</groupId>
+ <artifactId>org.eclipse.osbp.vaadin.emf.aggregator</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>org.eclipse.osbp.vaadin.emf.feature</artifactId>
+ <packaging>eclipse-feature</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-source-feature-plugin</artifactId>
+ <version>${tychoExtrasVersion}</version>
+ <executions>
+ <execution>
+ <id>source-feature</id>
+ <phase>package</phase>
+ <goals>
+ <goal>source-feature</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <labelSuffix> (source)</labelSuffix>
+ <excludes>
+ <plugin id="dcharts"/>
+ <plugin id="com.vaadin.theme-compiler"/>
+ <plugin id="com.vaadin.client-compiled"/>
+ <plugin id="com.vaadin.server"/>
+ <plugin id="com.vaadin.shared"/>
+ <plugin id="com.vaadin.shared.deps"/>
+ <plugin id="com.vaadin.themes"/>
+ </excludes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <!-- workaround while bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=398250
+ is not fixed -->
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <executions>
+ <execution>
+ <id>attached-p2-metadata</id>
+ <phase>package</phase>
+ <goals>
+ <goal>p2-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>javadoc-jar</id>
+ <phase>package</phase>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ </dependencies>
+
+</project>
diff --git a/org.eclipse.osbp.vaadin.emf.feature/src/main/javadoc/README.txt b/org.eclipse.osbp.vaadin.emf.feature/src/main/javadoc/README.txt
new file mode 100644
index 0000000..831da7e
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.feature/src/main/javadoc/README.txt
@@ -0,0 +1 @@
+Resource folder for javadoc resources.
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.emf.feature/src/overview.html b/org.eclipse.osbp.vaadin.emf.feature/src/overview.html
new file mode 100644
index 0000000..33010ee
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf.feature/src/overview.html
@@ -0,0 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <title>OSBP runtime web vaadin components feature Overview</title>
+</head>
+<body>
+<p>The <b>OSBP feature</b> provides the bundles for the OSBP Vaadin Widgetset..</p>
+
+<p> </p>
+</body>
+</html>
diff --git a/org.eclipse.osbp.vaadin.emf/.project b/org.eclipse.osbp.vaadin.emf/.project
new file mode 100644
index 0000000..8ed7490
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/.project
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.vaadin.emf</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <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.babel.editor.rbeBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ds.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.babel.editor.rbeNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.vaadin.emf/LICENSE.txt b/org.eclipse.osbp.vaadin.emf/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.emf/META-INF/MANIFEST.MF b/org.eclipse.osbp.vaadin.emf/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..042294c
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/META-INF/MANIFEST.MF
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.vaadin.emf
+Bundle-SymbolicName: org.eclipse.osbp.vaadin.emf;singleton:=true
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.osbp.vaadin.emf.api;bundle-version="[0.9.0,0.10.0)";visibility:=reexport,
+ com.vaadin.server,
+ org.eclipse.emf.ecore,
+ com.vaadin.shared,
+ org.eclipse.emf.edit,
+ org.eclipse.osbp.runtime.web.vaadin.common;bundle-version="[0.9.0,0.10.0)",
+ org.jsoup;bundle-version="1.8.3",
+ org.eclipse.xtext.common.types;bundle-version="[2.7.3,2.8.0)",
+ org.eclipse.xtext.xbase.lib;bundle-version="[2.7.3,2.8.0)",
+ org.eclipse.core.runtime;bundle-version="3.10.0"
+Import-Package: org.slf4j
+Export-Package: org.eclipse.osbp.vaadin.emf.actions;version="0.9.0",
+ org.eclipse.osbp.vaadin.emf.commands,
+ org.eclipse.osbp.vaadin.emf.data;version="0.9.0",
+ org.eclipse.osbp.vaadin.emf.data.fields;version="0.9.0",
+ org.eclipse.osbp.vaadin.emf.views;version="0.9.0"
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.osbp.vaadin.emf/about.html b/org.eclipse.osbp.vaadin.emf/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 1, 2016</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.emf/about.ini b/org.eclipse.osbp.vaadin.emf/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/about.ini
@@ -0,0 +1,17 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+welcomePage=
diff --git a/org.eclipse.osbp.vaadin.emf/about.mappings b/org.eclipse.osbp.vaadin.emf/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=qualifier
diff --git a/org.eclipse.osbp.vaadin.emf/about.properties b/org.eclipse.osbp.vaadin.emf/about.properties
new file mode 100644
index 0000000..6c0d648
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/about.properties
@@ -0,0 +1,26 @@
+#
+# Copyright (c) 2012, 2016 - Loetz GmbH&Co.KG (Heidelberg)
+# 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:
+# Loetz GmbH&Co.KG - initial API and implementation
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+featureName=org.eclipse.osbp.vaadin.emf
+
+################ blurb property ####################################
+featureText=\
+Copyright (c) 2012-2016 - Loetz GmbH&Co.KG \n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+ Loetz GmbH&Co.KG - implementation\n
+################ end of blurb property ####################################
diff --git a/org.eclipse.osbp.vaadin.emf/build.properties b/org.eclipse.osbp.vaadin.emf/build.properties
new file mode 100644
index 0000000..e184d66
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/build.properties
@@ -0,0 +1,8 @@
+source.. = src/
+output.. = target/classes/
+bin.includes = about.properties, about.mappings, about.ini, about.html, META-INF/,\
+ .,\
+ LICENSE.txt,\
+ license.html
+src.includes = about.properties, about.mappings, about.ini, about.html, LICENSE.txt,\
+ license.html
diff --git a/org.eclipse.osbp.vaadin.emf/epl-v10.html b/org.eclipse.osbp.vaadin.emf/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+ body {
+ size: 8.5in 11.0in;
+ margin: 0.25in 0.5in 0.25in 0.5in;
+ tab-interval: 0.5in;
+ }
+ p {
+ margin-left: auto;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ p.list {
+ margin-left: 0.5in;
+ margin-top: 0.05em;
+ margin-bottom: 0.05em;
+ }
+ </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.emf/images/LICENSE b/org.eclipse.osbp.vaadin.emf/images/LICENSE
new file mode 100644
index 0000000..7266bb4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/images/LICENSE
@@ -0,0 +1 @@
+Icons from org.eclipse.jdt.ui (EPL)
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.emf/images/class_obj.gif b/org.eclipse.osbp.vaadin.emf/images/class_obj.gif
new file mode 100644
index 0000000..e4c2a83
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/images/class_obj.gif
Binary files differ
diff --git a/org.eclipse.osbp.vaadin.emf/images/field_public_obj.gif b/org.eclipse.osbp.vaadin.emf/images/field_public_obj.gif
new file mode 100644
index 0000000..d4cb425
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/images/field_public_obj.gif
Binary files differ
diff --git a/org.eclipse.osbp.vaadin.emf/license.html b/org.eclipse.osbp.vaadin.emf/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/license.html
@@ -0,0 +1,164 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse Foundation
+source code
+ repository ("Repository") in software modules ("Modules") and made
+available as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to
+facilitate delivering, extending, and upgrading the Content. Typical
+modules may include plug-ins ("Plug-ins"), plug-in fragments
+("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or
+Fragments and associated material. Each Feature may be packaged as a
+sub-directory in a directory named "features". Within a Feature, files
+named "feature.xml" may contain a list of the names and version numbers
+of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features ("Included
+Features"). Within a Feature, files named "feature.xml" may contain a
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and
+Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the
+Feature Update License should either provide you with the terms and
+conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be
+found in the "license" property of files named "feature.properties"
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+ SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software,
+examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager ("Provisioning Technology") for the purpose of
+allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This
+capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning
+Technology
+ in accordance with the Specification. By using Provisioning
+Technology in such a manner and making it available in accordance with
+the
+ Specification, you further acknowledge your agreement to, and the
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur ("Provisioning Process") in
+which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") with the intent of installing,
+extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology
+may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user
+the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such Installable
+Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable
+Software Agreement must inform the user of the terms and conditions that
+ govern
+ the Installable Software and must solicit acceptance by the end
+user in the manner prescribed in such Installable Software Agreement.
+Upon such
+ indication of agreement by the user, the provisioning Technology
+will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use,
+and/or re-export to
+ another country, of encryption software. BEFORE using any encryption
+software, please check the country's laws, regulations and policies
+concerning the import,
+ possession, or use, and re-export of encryption software, to see if
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.emf/pom.xml b/org.eclipse.osbp.vaadin.emf/pom.xml
new file mode 100644
index 0000000..a9729ed
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/pom.xml
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--#======================================================================= -->
+<!--# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) -->
+<!--# 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: -->
+<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
+<!--#======================================================================= -->
+
+<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>
+ <parent>
+ <groupId>org.eclipse.osbp.vaadin.emf</groupId>
+ <artifactId>org.eclipse.osbp.vaadin.emf.aggregator</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>org.eclipse.osbp.vaadin.emf</artifactId>
+ <packaging>eclipse-plugin</packaging>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <vaadin-version>${vaadin.version}</vaadin-version>
+ <vaadin.plugin.version>${vaadin.version}</vaadin.plugin.version>
+ <jdkVersion>1.8</jdkVersion>
+ </properties>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>rubygems-releases</id>
+ <url>http://rubygems-proxy.torquebox.org/releases</url>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <dependencies>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>src</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>src</directory>
+ <!-- <excludes> -->
+ <!-- <exclude>**/*.java</exclude> -->
+ <!-- </excludes> -->
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>nl.geodienstencentrum.maven</groupId>
+ <artifactId>sass-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>process-sources</phase>
+ <!-- <goals> -->
+ <!-- <goal>update-stylesheets</goal> -->
+ <!-- </goals> -->
+ </execution>
+ </executions>
+ <configuration>
+ <resources>
+ <resource>
+ <source>
+ <directory>${basedir}/scss</directory>
+ <includes>
+ <include>styles.scss</include>
+ </includes>
+ <excludes>
+ <!-- <exclude>_addons.scss</exclude> -->
+ <!-- <exclude>_variables.scss</exclude> -->
+ <!-- <exclude>osbee.scss</exclude> -->
+ <!-- <exclude>style_notes.scss</exclude> -->
+ <!-- <exclude>scss/removed_files/*</exclude> -->
+ <!-- <exclude>**/osbp_legacy/*</exclude> -->
+ <!-- <exclude>**/osbp_legacy/icons/*</exclude> -->
+ <!-- <exclude>**/fontello.scss</exclude> -->
+ </excludes>
+ </source>
+ <relativeOutputDirectory/>
+ <destination>${basedir}/VAADIN/themes/osbee2</destination>
+ </resource>
+ </resources>
+ <sassOptions>
+ <always_update>true</always_update>
+ <style>:compressed</style>
+ <debug_info>true</debug_info>
+ </sassOptions>
+ <!-- <rubyVersion>2.0</rubyVersion> -->
+ <!-- <useCompass>true</useCompass> -->
+ </configuration>
+ </plugin>
+
+ <!-- <plugin> -->
+ <!-- <groupId>org.jasig.maven</groupId> -->
+ <!-- <artifactId>sass-maven-plugin</artifactId> -->
+ <!-- <version>1.1.1</version> -->
+ <!-- <executions> -->
+ <!-- <execution> -->
+ <!-- <id>package</id> -->
+ <!-- <phase>generate-sources</phase> -->
+ <!-- <goals> -->
+ <!-- <goal>update-stylesheets</goal> -->
+ <!-- </goals> -->
+ <!-- </execution> -->
+ <!-- </executions> -->
+ <!-- <configuration> -->
+ <!-- <resources> -->
+ <!-- <resource> -->
+ <!-- <source> -->
+ <!-- <directory>${basedir}/scss</directory> -->
+ <!-- </source> -->
+ <!-- <destination>${basedir}/VAADIN/themes/orgOsbeeDefaultTheme</destination> -->
+ <!-- </resource> -->
+ <!-- </resources> -->
+ <!-- <useCompass>true</useCompass> -->
+ <!-- </configuration> -->
+ <!-- </plugin> -->
+ <plugin>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-maven-plugin</artifactId>
+ <version>${vaadin.plugin.version}</version>
+ <configuration>
+ <extraJvmArgs>-Xmx1024M -Xss1024k</extraJvmArgs>
+ <!-- <runTarget>mobilemail</runTarget> -->
+ <!-- We are doing "inplace" but into subdir VAADIN/widgetsets. This
+ way compatible with Vaadin eclipse plugin. -->
+ <webappDirectory>${basedir}/VAADIN/widgetsets
+ </webappDirectory>
+ <hostedWebapp>${basedir}/VAADIN/widgetsets
+ </hostedWebapp>
+ <noServer>true</noServer>
+ <gwtSdkFirstInClasspath>true</gwtSdkFirstInClasspath>
+ <!-- Remove draftCompile when project is ready -->
+ <draftCompile>true</draftCompile>
+ <strict>true</strict>
+ <compileReport>false</compileReport>
+ <style>PRETTY</style>
+ <runTarget>http://localhost:8080/</runTarget>
+ <!-- Remove these when going to release dependencies -->
+ <force>true</force>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>resources</goal>
+ <goal>compile</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <!-- As we are doing "inplace" GWT compilation, ensure the widgetset -->
+ <!-- directory is cleaned properly -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>3.0.0</version>
+ <configuration>
+ <filesets>
+ <fileset>
+ <directory>VAADIN/gwt-unitCache</directory>
+ </fileset>
+ <fileset>
+ <directory>VAADIN/widgetsets</directory>
+ </fileset>
+ </filesets>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <version>2.19</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <!--This plugin's configuration is used to store Eclipse m2e settings
+ only. It has no influence on the Maven build itself. -->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-maven-plugin</artifactId>
+ <versionRange>[2.3.0-1,)</versionRange>
+ <goals>
+ <goal>resources</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore/>
+ </action>
+ </pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-maven-plugin</artifactId>
+ <versionRange>[1.0.2,)</versionRange>
+ <goals>
+ <goal>update-widgetset</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore/>
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>nl.geodienstencentrum.maven</groupId>
+ <artifactId>sass-maven-plugin</artifactId>
+ <version>2.16</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+</project>
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/actions/EObjectActionHandler.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/actions/EObjectActionHandler.java
new file mode 100644
index 0000000..5724049
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/actions/EObjectActionHandler.java
@@ -0,0 +1,194 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.actions;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.command.CommandParameter;
+import org.eclipse.emf.edit.command.CreateChildCommand;
+import org.eclipse.emf.edit.command.RemoveCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
+import org.eclipse.osbp.vaadin.emf.data.EmfModelTreeContainer;
+
+import com.vaadin.event.Action;
+import com.vaadin.server.Resource;
+import com.vaadin.ui.AbstractSelect;
+
+/**
+ * A Vaadin ActionHandler that is aware about all containment references that
+ * can be created for a single EObject.
+ */
+@SuppressWarnings("serial")
+public class EObjectActionHandler implements Action.Handler {
+
+ private EditCallback callback;
+ private IModelingContext modelingContext;
+ private IResourceProvider resourceProvider;
+
+ public EObjectActionHandler(IModelingContext modelingContext,
+ IResourceProvider resourceProvider, EditCallback callback) {
+ this.modelingContext = modelingContext;
+ this.resourceProvider = resourceProvider;
+ this.callback = callback;
+ }
+
+ /**
+ * Gets the list of actions applicable to this handler.
+ *
+ * @param target
+ * the target handler to list actions for. For item containers
+ * this is the item id.
+ * @param sender
+ * the party that would be sending the actions. Most of this is
+ * the action container.
+ * @return the list of Action
+ */
+ @SuppressWarnings("unchecked")
+ public Action[] getActions(Object target, Object sender) {
+
+ List<CustomAction> result = new ArrayList<>();
+ if (target != null) {
+ CustomAction editAction = new CustomAction(Commands.EDIT_DIALOG,
+ "Edit", null, null);
+ editAction.modelElement = (EObject) target;
+ result.add(editAction);
+
+ result.add(new CustomAction(Commands.REFRESH_NODE, "Refresh", null,
+ null));
+
+ if (canDelete(target)) {
+ result.add(new CustomAction(Commands.DELETE, "Delete", null,
+ null));
+ }
+
+ if (modelingContext.getCommandStack().canUndo()) {
+ result.add(new CustomAction(Commands.UNDO, "Undo", null, null));
+ }
+
+ if (modelingContext.getCommandStack().canRedo()) {
+ result.add(new CustomAction(Commands.REDO, "Redo", null, null));
+ }
+ }
+
+ return result.toArray(new Action[result.size()]);
+ }
+
+ private boolean canDelete(Object target) {
+ Command command = RemoveCommand.create(
+ modelingContext.getEditingDomain(), target);
+ return command.canExecute();
+ }
+
+ /**
+ * Handles an action for the given target. The handler method may just
+ * discard the action if it's not suitable.
+ *
+ * @param action
+ * the action to be handled.
+ * @param sender
+ * the sender of the action. This is most often the action
+ * container.
+ * @param target
+ * the target of the action. For item containers this is the item
+ * id.
+ */
+ public void handleAction(Action action, Object sender, Object target) {
+ CustomAction customAction = (CustomAction) action;
+
+ EditingDomain domain = modelingContext.getEditingDomain();
+ if (customAction.getCommand() == Commands.CREATE_CHILD) {
+ CommandParameter executeParam = new CommandParameter(target,
+ customAction.getParam().getFeature(),
+ customAction.getParam());
+ Command command = domain.createCommand(CreateChildCommand.class,
+ executeParam);
+ domain.getCommandStack().execute(command);
+ } else if (customAction.getCommand() == Commands.DELETE) {
+ domain.getCommandStack().execute(
+ RemoveCommand.create(domain, target));
+ } else if (customAction.getCommand() == Commands.UNDO) {
+ domain.getCommandStack().undo();
+ } else if (customAction.getCommand() == Commands.REDO) {
+ domain.getCommandStack().redo();
+ } else if (customAction.getCommand() == Commands.REFRESH_NODE) {
+ AbstractSelect select = (AbstractSelect) sender;
+ EmfModelTreeContainer container = (EmfModelTreeContainer) select
+ .getContainerDataSource();
+ container.refreshNode(target);
+ } else if (customAction.getCommand() == Commands.EDIT_DIALOG) {
+ callback.edit(customAction.modelElement);
+ }
+ }
+
+ /**
+ * Custom action wraps CommandParameter.
+ */
+ private static class CustomAction extends Action {
+
+ private final Commands command;
+ private final CommandParameter param;
+ private final EStructuralFeature feature;
+ private EObject modelElement;
+
+ public CustomAction(Commands command, String caption, Resource icon,
+ CommandParameter param) {
+ super(caption, icon);
+ this.command = command;
+ this.param = param;
+ this.feature = null;
+ }
+
+ public CustomAction(Commands command, String caption, Resource icon,
+ CommandParameter param, EStructuralFeature feature) {
+ super(caption, icon);
+ this.command = command;
+ this.param = param;
+ this.feature = feature;
+ }
+
+ public CustomAction(Commands command, String caption, Resource icon) {
+ super(caption, icon);
+ this.command = command;
+ this.param = null;
+ this.feature = null;
+ }
+
+ public CommandParameter getParam() {
+ return param;
+ }
+
+ public Commands getCommand() {
+ return command;
+ }
+
+ public EStructuralFeature getFeature() {
+ return feature;
+ }
+
+ }
+
+ enum Commands {
+ EDIT_DIALOG, CREATE_CHILD, DELETE, UNDO, REDO, COPY, PASTE, REFRESH_NODE
+ }
+
+ public interface EditCallback {
+ void edit(EObject model);
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/actions/EmfTreeDndHandler.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/actions/EmfTreeDndHandler.java
new file mode 100644
index 0000000..859c973
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/actions/EmfTreeDndHandler.java
@@ -0,0 +1,171 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
+ *
+ */
+ package org.eclipse.osbp.vaadin.emf.actions;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CompoundCommand;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.command.AddCommand;
+import org.eclipse.emf.edit.command.MoveCommand;
+import org.eclipse.emf.edit.command.RemoveCommand;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropHandler;
+import com.vaadin.event.dd.acceptcriteria.AcceptAll;
+import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.shared.ui.dd.VerticalDropLocation;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Tree.TreeTargetDetails;
+
+@SuppressWarnings("serial")
+public class EmfTreeDndHandler implements DropHandler {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(EmfTreeDndHandler.class);
+
+ private final IModelingContext modelingContext;
+ private final Tree tree;
+
+ public EmfTreeDndHandler(IModelingContext modelingContext, Tree tree) {
+ super();
+ this.modelingContext = modelingContext;
+ this.tree = tree;
+ }
+
+ @Override
+ public AcceptCriterion getAcceptCriterion() {
+ return AcceptAll.get();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void drop(DragAndDropEvent event) {
+ DataBoundTransferable t = (DataBoundTransferable) event
+ .getTransferable();
+
+ // Make sure the drag source is the same tree
+ if (t.getSourceComponent() != tree)
+ return;
+
+ TreeTargetDetails target = (TreeTargetDetails) event.getTargetDetails();
+
+ // Get ids of the dragged item and the target item
+ EObject sourceItemId = (EObject) t.getData("itemId");
+ EObject targetItemId = (EObject) target.getItemIdOver();
+ if (sourceItemId == null || targetItemId == null) {
+ return;
+ }
+
+ // On which side of the target the item was dropped
+ VerticalDropLocation location = target.getDropLocation();
+
+ EStructuralFeature feature = sourceItemId.eContainingFeature();
+ boolean isMany = feature.isMany();
+ EObject targetParent = null;
+ EObject sourceParent = sourceItemId.eContainer();
+
+ int targetIndex = -1;
+ // Drop right on an item -> make it a child
+ if (location == VerticalDropLocation.MIDDLE) {
+ if (targetItemId.eContainer() == sourceItemId.eContainer()) {
+ targetParent = targetItemId.eContainer();
+ if (isMany) {
+ List<EObject> collection = (List<EObject>) targetParent
+ .eGet(feature);
+ targetIndex = collection.indexOf(targetItemId) + 1;
+ }
+ } else {
+ targetParent = targetItemId;
+ targetIndex = -1;
+ }
+ } else if (location == VerticalDropLocation.TOP
+ || location == VerticalDropLocation.BOTTOM) {
+ if(targetItemId.eClass().getEAllStructuralFeatures().contains(feature)) {
+ // we drop it in the targetItemId
+ targetParent = targetItemId;
+ if (isMany && targetParent.eGet(feature) instanceof List) {
+ if (location == VerticalDropLocation.TOP) {
+// targetIndex = index > 0 ? index - 1 : -1;
+ } else if (location == VerticalDropLocation.BOTTOM) {
+ targetIndex = -1;
+ }
+ }
+ }else{
+ targetParent = targetItemId.eContainer();
+
+ if (isMany && targetParent.eGet(feature) instanceof List) {
+ List<EObject> collection = (List<EObject>) targetParent
+ .eGet(feature);
+ int index = collection.indexOf(targetItemId);
+ if (location == VerticalDropLocation.TOP) {
+ targetIndex = index > 0 ? index - 1 : -1;
+ } else if (location == VerticalDropLocation.BOTTOM) {
+ targetIndex = index;
+ }
+ }
+ }
+ }
+
+ if (!targetParent.eClass().getEAllStructuralFeatures()
+ .contains(feature)) {
+ LOGGER.error("Feature " + feature.getName()
+ + " is not contained in droptarget "
+ + targetParent.eClass().getName());
+ return;
+ }
+
+ boolean isMove = targetParent == sourceParent;
+ if (isMany) {
+ if (isMove) {
+ // move if same parent
+ Command command = MoveCommand.create(
+ modelingContext.getEditingDomain(), targetParent,
+ feature, sourceItemId, targetIndex);
+ if (command.canExecute()) {
+ modelingContext.getCommandStack().execute(command);
+ }
+ } else {
+ // remove and add if new parent
+ Command remove = RemoveCommand.create(
+ modelingContext.getEditingDomain(),
+ Collections.singletonList(sourceItemId));
+ Command add = AddCommand.create(
+ modelingContext.getEditingDomain(), targetParent,
+ feature, sourceItemId, targetIndex);
+ CompoundCommand command = new CompoundCommand();
+ command.append(remove);
+ command.append(add);
+ if (command.canExecute()) {
+ modelingContext.getCommandStack().execute(command);
+ }
+ }
+ } else {
+ Command command = SetCommand.create(
+ modelingContext.getEditingDomain(), targetParent, feature,
+ sourceItemId);
+ if (command.canExecute()) {
+ modelingContext.getCommandStack().execute(command);
+ }
+ }
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/commands/ChangeCommand.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/commands/ChangeCommand.java
new file mode 100644
index 0000000..45bac7c
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/commands/ChangeCommand.java
@@ -0,0 +1,118 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.commands;
+
+import org.eclipse.emf.common.command.AbstractCommand;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Uses the {@link ChangeCommand} to record notifications.
+ */
+public abstract class ChangeCommand extends AbstractCommand {
+
+ /** The notifier. */
+ private Notifier notifier;
+
+ /** The recorder. */
+ private ChangedRecorder recorder;
+
+ /**
+ * Instantiates a new change command.
+ *
+ * @param name
+ * the name
+ * @param resource
+ * the resource
+ */
+ public ChangeCommand(String name, Resource resource) {
+ super(name);
+ this.notifier = resource;
+
+ if (resource == null) {
+ throw new IllegalArgumentException("resource must not be null!");
+ }
+ }
+
+ /**
+ * Instantiates a new change command.
+ *
+ * @param name
+ * the name
+ * @param notifier
+ * the notifier
+ */
+ public ChangeCommand(String name, EObject notifier) {
+ super(name);
+ this.notifier = notifier;
+
+ if (notifier == null) {
+ throw new IllegalArgumentException("notifier must not be null!");
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.emf.common.command.Command#execute()
+ */
+ @Override
+ public void execute() {
+ recorder.start();
+
+ doExecute();
+
+ recorder.stop();
+ }
+
+ /**
+ * Execute your operations.
+ */
+ protected abstract void doExecute();
+
+ /* (non-Javadoc)
+ * @see org.eclipse.emf.common.command.Command#redo()
+ */
+ @Override
+ public void redo() {
+ recorder.redo();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.emf.common.command.AbstractCommand#prepare()
+ */
+ @Override
+ protected boolean prepare() {
+ recorder = new ChangedRecorder(notifier);
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.emf.common.command.AbstractCommand#undo()
+ */
+ @Override
+ public void undo() {
+ recorder.undo();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.emf.common.command.AbstractCommand#canUndo()
+ */
+ @Override
+ public boolean canUndo() {
+ return super.canUndo();
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/commands/ChangedRecorder.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/commands/ChangedRecorder.java
new file mode 100644
index 0000000..f42b22e
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/commands/ChangedRecorder.java
@@ -0,0 +1,201 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.commands;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Implementation of {@link EContentAdapter} that records all notifications. And
+ * implements logic to {@link #undo()} and {@link #redo()} the changes.
+ */
+public class ChangedRecorder extends EContentAdapter {
+
+ /** The notifier. */
+ private final Notifier notifier;
+
+ /** The notifications. */
+ private List<Notification> notifications = new ArrayList<Notification>();
+
+ /**
+ * Instantiates a new changed recorder.
+ *
+ * @param notifier
+ * the notifier
+ */
+ public ChangedRecorder(Notifier notifier) {
+ super();
+ this.notifier = notifier;
+ }
+
+ /**
+ * Starts the recording.
+ */
+ public void start() {
+ setTarget(notifier);
+ }
+
+ /**
+ * Stops the recording.
+ */
+ public void stop() {
+ unsetTarget(notifier);
+ }
+
+ /**
+ * Returns all notifications recorded.
+ *
+ * @return the notifications
+ */
+ public List<Notification> getNotifications() {
+ return notifications;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.emf.ecore.util.EContentAdapter#notifyChanged(org.eclipse.emf.common.notify.Notification)
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ super.notifyChanged(notification);
+
+ if (notification.isTouch()) {
+ return;
+ }
+
+ if (notification.getEventType() == Notification.REMOVING_ADAPTER) {
+ return;
+ }
+
+ if (notification.getEventType() == Notification.RESOLVE) {
+ return;
+ }
+
+ notifications.add(notification);
+ }
+
+ /**
+ * Undos all notifications.
+ */
+ public void undo() {
+ for (int i = notifications.size() - 1; i >= 0; i--) {
+ Notification change = notifications.get(i);
+ undo(change);
+ }
+ }
+
+ /**
+ * Redos all notifications.
+ */
+ public void redo() {
+ for (int i = 0; i < notifications.size(); i++) {
+ Notification change = notifications.get(i);
+ redo(change);
+ }
+ }
+
+ /**
+ * Undo.
+ *
+ * @param change
+ * the change
+ */
+ @SuppressWarnings("unchecked")
+ protected void undo(Notification change) {
+ EObject notifier = (EObject) change.getNotifier();
+ switch (change.getEventType()) {
+ case Notification.ADD: {
+ List<Object> list = (List<Object>) notifier
+ .eGet((EStructuralFeature) change.getFeature());
+ list.remove(change.getNewValue());
+ }
+ break;
+ case Notification.ADD_MANY:
+ throw new IllegalStateException("Implement me");
+ case Notification.MOVE:
+ throw new IllegalStateException("Implement me");
+ case Notification.REMOVE: {
+ List<Object> list = (List<Object>) notifier
+ .eGet((EStructuralFeature) change.getFeature());
+ if (change.getPosition() > 0) {
+ list.add(change.getPosition(), change.getOldValue());
+ } else {
+ list.add(change.getOldValue());
+ }
+ }
+ break;
+ case Notification.REMOVE_MANY:
+ throw new IllegalStateException("Implement me");
+ case Notification.SET: {
+ Object value = change.getOldValue();
+ notifier.eSet((EStructuralFeature) change.getFeature(), value);
+ }
+ break;
+ case Notification.UNSET: {
+ Object value = change.getOldValue();
+ notifier.eSet((EStructuralFeature) change.getFeature(), value);
+ }
+ break;
+ }
+ }
+
+ /**
+ * Redo.
+ *
+ * @param change
+ * the change
+ */
+ @SuppressWarnings("unchecked")
+ protected void redo(Notification change) {
+ EObject notifier = (EObject) change.getNotifier();
+ switch (change.getEventType()) {
+ case Notification.ADD: {
+ List<Object> list = (List<Object>) notifier
+ .eGet((EStructuralFeature) change.getFeature());
+ if (change.getPosition() > 0) {
+ list.add(change.getPosition(), change.getNewValue());
+ } else {
+ list.add(change.getNewValue());
+ }
+ }
+ break;
+ case Notification.ADD_MANY:
+ throw new IllegalStateException("Implement me");
+ case Notification.MOVE:
+ throw new IllegalStateException("Implement me");
+ case Notification.REMOVE: {
+ List<Object> list = (List<Object>) notifier
+ .eGet((EStructuralFeature) change.getFeature());
+ list.remove(change.getOldValue());
+ }
+ break;
+ case Notification.REMOVE_MANY:
+ throw new IllegalStateException("Implement me");
+ case Notification.SET: {
+ Object value = change.getNewValue();
+ notifier.eSet((EStructuralFeature) change.getFeature(), value);
+ }
+ case Notification.UNSET: {
+ notifier.eUnset((EStructuralFeature) change.getFeature());
+ }
+ }
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfItemPropertyDescritor.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfItemPropertyDescritor.java
new file mode 100644
index 0000000..faf5958
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfItemPropertyDescritor.java
@@ -0,0 +1,261 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.data;
+
+import java.util.Collection;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor.PropertyValueWrapper;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A wrapper class that holds the {@link EObject} and its
+ * {@link IItemPropertyDescriptor} in a common context.<br>
+ * And provides delegate methods to the {@link IItemPropertyDescriptor}.
+ */
+public class EmfItemPropertyDescritor {
+
+ /** The e object. */
+ private final EObject eObject;
+
+ /** The descriptor. */
+ private final IItemPropertyDescriptor descriptor;
+
+ /**
+ * Instantiates a new emf item property descritor.
+ *
+ * @param eObject
+ * the e object
+ * @param descriptor
+ * the descriptor
+ */
+ public EmfItemPropertyDescritor(EObject eObject,
+ IItemPropertyDescriptor descriptor) {
+ super();
+ this.eObject = eObject;
+ this.descriptor = descriptor;
+ }
+
+ /**
+ * Gets the e object.
+ *
+ * @return the e object
+ */
+ public EObject getEObject() {
+ return eObject;
+ }
+
+ /**
+ * Gets the descriptor.
+ *
+ * @return the descriptor
+ */
+ public IItemPropertyDescriptor getDescriptor() {
+ return descriptor;
+ }
+
+ /**
+ * Returns the String representation.
+ *
+ * @return the text
+ */
+ public String getText() {
+ ItemPropertyDescriptor.PropertyValueWrapper value = (PropertyValueWrapper) descriptor
+ .getPropertyValue(eObject);
+ return value != null ? value.getText(eObject) : "";
+ }
+
+ /**
+ * Returns the editable value representation.
+ *
+ * @return the editable value
+ */
+ public Object getEditableValue() {
+ ItemPropertyDescriptor.PropertyValueWrapper value = (PropertyValueWrapper) descriptor
+ .getPropertyValue(eObject);
+ return value != null ? value.getEditableValue(eObject) : null;
+ }
+
+ /**
+ * Gets the property value.
+ *
+ * @return the property value
+ */
+ public Object getPropertyValue() {
+ return descriptor.getPropertyValue(eObject);
+ }
+
+ /**
+ * Checks if is property set.
+ *
+ * @return true, if is property set
+ */
+ public boolean isPropertySet() {
+ return descriptor.isPropertySet(eObject);
+ }
+
+ /**
+ * Can set property.
+ *
+ * @return true, if successful
+ */
+ public boolean canSetProperty() {
+ return descriptor.canSetProperty(eObject);
+ }
+
+ /**
+ * Reset property value.
+ */
+ public void resetPropertyValue() {
+ descriptor.resetPropertyValue(eObject);
+ }
+
+ /**
+ * Sets the property value.
+ *
+ * @param value
+ * the new property value
+ */
+ public void setPropertyValue(Object value) {
+ descriptor.setPropertyValue(eObject, value);
+ }
+
+ /**
+ * Gets the category.
+ *
+ * @return the category
+ */
+ public String getCategory() {
+ return descriptor.getCategory(eObject);
+ }
+
+ /**
+ * Gets the description.
+ *
+ * @return the description
+ */
+ public String getDescription() {
+ return descriptor.getDescription(eObject);
+ }
+
+ /**
+ * Gets the display name.
+ *
+ * @return the display name
+ */
+ public String getDisplayName() {
+ return descriptor.getDisplayName(eObject);
+ }
+
+ /**
+ * Gets the filter flags.
+ *
+ * @return the filter flags
+ */
+ public String[] getFilterFlags() {
+ return descriptor.getFilterFlags(eObject);
+ }
+
+ /**
+ * Gets the help context ids.
+ *
+ * @return the help context ids
+ */
+ public Object getHelpContextIds() {
+ return descriptor.getHelpContextIds(eObject);
+ }
+
+ /**
+ * Gets the id.
+ *
+ * @return the id
+ */
+ public String getId() {
+ return descriptor.getId(eObject);
+ }
+
+ /**
+ * Gets the label provider.
+ *
+ * @return the label provider
+ */
+ public IItemLabelProvider getLabelProvider() {
+ return descriptor.getLabelProvider(eObject);
+ }
+
+ /**
+ * Checks if is compatible with.
+ *
+ * @param anotherObject
+ * the another object
+ * @param anotherPropertyDescriptor
+ * the another property descriptor
+ * @return true, if is compatible with
+ */
+ public boolean isCompatibleWith(Object anotherObject,
+ IItemPropertyDescriptor anotherPropertyDescriptor) {
+ return descriptor.isCompatibleWith(eObject, anotherObject,
+ anotherPropertyDescriptor);
+ }
+
+ /**
+ * Gets the feature.
+ *
+ * @return the feature
+ */
+ public Object getFeature() {
+ return descriptor.getFeature(eObject);
+ }
+
+ /**
+ * Checks if is many.
+ *
+ * @return true, if is many
+ */
+ public boolean isMany() {
+ return descriptor.isMany(eObject);
+ }
+
+ /**
+ * Gets the choice of values.
+ *
+ * @return the choice of values
+ */
+ public Collection<?> getChoiceOfValues() {
+ return descriptor.getChoiceOfValues(eObject);
+ }
+
+ /**
+ * Checks if is multi line.
+ *
+ * @return true, if is multi line
+ */
+ public boolean isMultiLine() {
+ return descriptor.isMultiLine(eObject);
+ }
+
+ /**
+ * Checks if is sort choices.
+ *
+ * @return true, if is sort choices
+ */
+ public boolean isSortChoices() {
+ return descriptor.isSortChoices(eObject);
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfItemPropertyDescritorLabelConverter.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfItemPropertyDescritorLabelConverter.java
new file mode 100644
index 0000000..0f81d58
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfItemPropertyDescritorLabelConverter.java
@@ -0,0 +1,65 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.data;
+
+import java.util.Locale;
+
+import com.vaadin.data.util.converter.Converter;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A converter to convert from EmfItemPropertyDescritor to its String value.
+ */
+@SuppressWarnings("serial")
+public class EmfItemPropertyDescritorLabelConverter implements
+ Converter<String, EmfItemPropertyDescritor> {
+
+ /* (non-Javadoc)
+ * @see com.vaadin.data.util.converter.Converter#convertToModel(java.lang.Object, java.lang.Class, java.util.Locale)
+ */
+ @Override
+ public EmfItemPropertyDescritor convertToModel(String value,
+ Class<? extends EmfItemPropertyDescritor> targetType, Locale locale)
+ throws com.vaadin.data.util.converter.Converter.ConversionException {
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.data.util.converter.Converter#convertToPresentation(java.lang.Object, java.lang.Class, java.util.Locale)
+ */
+ @Override
+ public String convertToPresentation(EmfItemPropertyDescritor value,
+ Class<? extends String> targetType, Locale locale)
+ throws com.vaadin.data.util.converter.Converter.ConversionException {
+ return value.getDisplayName();
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.data.util.converter.Converter#getModelType()
+ */
+ @Override
+ public Class<EmfItemPropertyDescritor> getModelType() {
+ return EmfItemPropertyDescritor.class;
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.data.util.converter.Converter#getPresentationType()
+ */
+ @Override
+ public Class<String> getPresentationType() {
+ return String.class;
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfItemPropertyDescritorValueConverter.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfItemPropertyDescritorValueConverter.java
new file mode 100644
index 0000000..8b6b834
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfItemPropertyDescritorValueConverter.java
@@ -0,0 +1,65 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.data;
+
+import java.util.Locale;
+
+import com.vaadin.data.util.converter.Converter;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A converter to convert from EmfItemPropertyDescritor to its String value.
+ */
+@SuppressWarnings("serial")
+public class EmfItemPropertyDescritorValueConverter implements
+ Converter<String, EmfItemPropertyDescritor> {
+
+ /* (non-Javadoc)
+ * @see com.vaadin.data.util.converter.Converter#convertToModel(java.lang.Object, java.lang.Class, java.util.Locale)
+ */
+ @Override
+ public EmfItemPropertyDescritor convertToModel(String value,
+ Class<? extends EmfItemPropertyDescritor> targetType, Locale locale)
+ throws com.vaadin.data.util.converter.Converter.ConversionException {
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.data.util.converter.Converter#convertToPresentation(java.lang.Object, java.lang.Class, java.util.Locale)
+ */
+ @Override
+ public String convertToPresentation(EmfItemPropertyDescritor value,
+ Class<? extends String> targetType, Locale locale)
+ throws com.vaadin.data.util.converter.Converter.ConversionException {
+ return value.getText();
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.data.util.converter.Converter#getModelType()
+ */
+ @Override
+ public Class<EmfItemPropertyDescritor> getModelType() {
+ return EmfItemPropertyDescritor.class;
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.data.util.converter.Converter#getPresentationType()
+ */
+ @Override
+ public Class<String> getPresentationType() {
+ return String.class;
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfModelTreeContainer.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfModelTreeContainer.java
new file mode 100644
index 0000000..363d6d5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfModelTreeContainer.java
@@ -0,0 +1,401 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.data;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
+import org.eclipse.osbp.vaadin.emf.views.UiSync;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.server.Resource;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The base container to provide eObject hierarchy and their values based on
+ * emf.edit. It registers a change notifier on the model to refresh items on the
+ * fly.
+ * <p>
+ * ATTENTION: This container MUST be disposed!
+ */
+@SuppressWarnings("serial")
+public class EmfModelTreeContainer extends HierarchicalContainer {
+
+ /** The Constant ICON. */
+ private static final String ICON = "icon";
+
+ /** The Constant LABEL. */
+ private static final String LABEL = "label";
+
+ /** The root element. */
+ private EObject rootElement;
+
+ /** The editing domain. */
+ private final EditingDomain editingDomain;
+
+ /** The adapter factory. */
+ private final AdapterFactory adapterFactory;
+
+ /** The ui sync. */
+ private final UiSync uiSync;
+
+ /** The resolved. */
+ private Set<Object> resolved = new HashSet<Object>();
+
+ /** The resource provider. */
+ private IResourceProvider resourceProvider;
+
+ /** The change listener. */
+ private INotifyChangedListener changeListener;
+
+ /**
+ * Instantiates a new emf model tree container.
+ *
+ * @param modelingContext
+ * the modeling context
+ * @param resourceProvider
+ * the resource provider
+ * @param uiSync
+ * the ui sync
+ */
+ public EmfModelTreeContainer(IModelingContext modelingContext,
+ IResourceProvider resourceProvider, UiSync uiSync) {
+ this.resourceProvider = resourceProvider;
+ this.editingDomain = modelingContext.getEditingDomain();
+ this.adapterFactory = modelingContext.getAdapterFactory();
+ this.uiSync = uiSync;
+
+ addContainerProperty(LABEL, String.class, "");
+ addContainerProperty(ICON, Resource.class, null);
+
+ IChangeNotifier notifier = (IChangeNotifier) modelingContext
+ .getAdapterFactory();
+ notifier.addListener(getModelChangeListener());
+ }
+
+ /**
+ * Gets the root element.
+ *
+ * @return the root element
+ */
+ public EObject getRootElement() {
+ return rootElement;
+ }
+
+ /**
+ * Sets the root element.
+ *
+ * @param rootElement
+ * the new root element
+ */
+ public void setRootElement(EObject rootElement) {
+ if (this.rootElement == rootElement) {
+ return;
+ }
+
+ removeAllItems();
+ resolved.clear();
+
+ this.rootElement = rootElement;
+
+ loadRootElements();
+ }
+
+ /**
+ * Load root elements.
+ */
+ private void loadRootElements() {
+ if (rootElement != null) {
+ doAddItem(null, rootElement, -1);
+ resolveChildren(rootElement);
+ }
+ }
+
+ /**
+ * Resolve children.
+ *
+ * @param itemId
+ * the item id
+ */
+ public void resolveChildren(Object itemId) {
+ // if children are allowed and they have not been resolved so far
+ if (areChildrenAllowed(itemId)
+ && (getChildren(itemId) == null || getChildren(itemId)
+ .isEmpty())) {
+ resolved.add(itemId);
+
+ ITreeItemContentProvider parentTreeProvider = (ITreeItemContentProvider) adapterFactory
+ .adapt(itemId, ITreeItemContentProvider.class);
+
+ // resolve children
+ for (Object newChild : parentTreeProvider.getChildren(itemId)) {
+ doAddItem(itemId, (EObject) newChild, -1);
+ }
+ }
+ }
+
+ /**
+ * Refreshes the given node.
+ *
+ * @param itemId
+ * the item id
+ */
+ public void refreshNode(Object itemId) {
+ for (Object child : new ArrayList<>(getChildren(itemId))) {
+ removeItemRecursively(child);
+ }
+ resolved.remove(itemId);
+ resolveChildren(itemId);
+ }
+
+ /**
+ * Adds a new item.
+ *
+ * @param parent
+ * the parent
+ * @param newChild
+ * the new child
+ * @param index
+ * pass -1 for last index
+ */
+ @SuppressWarnings("unchecked")
+ private void doAddItem(Object parent, EObject newChild, int index) {
+ if (newChild == null || (parent != null && !containsId(parent))) {
+ return;
+ }
+ Item item;
+ if (index >= 0) {
+ item = addItemAt(index, newChild);
+ } else {
+ item = addItem(newChild);
+ }
+ if(item == null) {
+ // TODO handle same EObject instances
+ return;
+ }
+ IItemLabelProvider labelProvider = (IItemLabelProvider) adapterFactory
+ .adapt(newChild, IItemLabelProvider.class);
+ item.getItemProperty(LABEL).setValue(labelProvider.getText(newChild));
+
+ // parse the platform uri
+ URL url = ((URL) labelProvider.getImage(newChild));
+ item.getItemProperty(ICON).setValue(
+ resourceProvider.getResource(url.toString()));
+
+ // calculate children allowed
+ // ITreeItemContentProvider treeProvider = (ITreeItemContentProvider)
+ // adapterFactory
+ // .adapt(newChild, ITreeItemContentProvider.class);
+ // setChildrenAllowed(newChild, treeProvider.hasChildren(newChild));
+
+ // if the newChild is not root and the container is available in the
+ // tree
+ if (newChild.eContainer() != null && containsId(newChild.eContainer())) {
+ setParent(newChild, newChild.eContainer());
+ // the new parent may have children again
+ // setChildrenAllowed(newChild.eContainer(), true);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.data.util.HierarchicalContainer#hasChildren(java.lang.Object)
+ */
+ @Override
+ public boolean hasChildren(Object itemId) {
+ boolean result = super.hasChildren(itemId);
+ if (!result) {
+ // calculate children allowed
+ ITreeItemContentProvider treeProvider = (ITreeItemContentProvider) adapterFactory
+ .adapt(itemId, ITreeItemContentProvider.class);
+ result = treeProvider.hasChildren(itemId);
+ }
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.data.util.HierarchicalContainer#areChildrenAllowed(java.lang.Object)
+ */
+ @Override
+ public boolean areChildrenAllowed(Object itemId) {
+ // calculate children allowed
+ ITreeItemContentProvider treeProvider = (ITreeItemContentProvider) adapterFactory
+ .adapt(itemId, ITreeItemContentProvider.class);
+ return treeProvider.hasChildren(itemId);
+ }
+
+ /**
+ * Gets the model change listener.
+ *
+ * @return the model change listener
+ */
+ private INotifyChangedListener getModelChangeListener() {
+ this.changeListener = e -> handleNotification(e);
+ return changeListener;
+ }
+
+ /**
+ * Refreshes the item with the given eObject.
+ *
+ * @param notification
+ * the notification
+ */
+ protected void handleNotification(Notification notification) {
+ if (notification.isTouch()) {
+ return;
+ }
+
+ switch (notification.getEventType()) {
+ case Notification.ADD:
+ uiSync.sync(new Runnable() {
+ @Override
+ public void run() {
+ if (notification.getNewValue() instanceof EObject) {
+ EObject addItem = (EObject) notification.getNewValue();
+ doAddItem(addItem.eContainer(), addItem,
+ notification.getPosition());
+ }
+ }
+ });
+ break;
+ case Notification.REMOVE:
+ uiSync.sync(new Runnable() {
+ @Override
+ public void run() {
+ if (notification.getOldValue() instanceof EObject) {
+ EObject removeItem = (EObject) notification
+ .getOldValue();
+ removeItemRecursively(removeItem);
+ }
+ }
+ });
+ break;
+ case Notification.MOVE:
+ EObject moveItem = (EObject) notification.getNewValue();
+ EStructuralFeature feature = moveItem.eContainingFeature();
+ if (feature.isMany()) {
+ EObject container = moveItem.eContainer();
+ // if the parent is not visible, then leave
+ if (!containsId(container)) {
+ return;
+ }
+ uiSync.sync(new Runnable() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public void run() {
+ List<EObject> eObjects = (List<EObject>) container
+ .eGet(feature);
+ EObject previousSibling = null;
+ if (notification.getPosition() > 0) {
+ previousSibling = eObjects.get(notification
+ .getPosition() - 1);
+ moveAfterSibling(moveItem, previousSibling);
+ }
+ }
+ });
+ }
+ break;
+ case Notification.SET:
+ // update the property with the changed value
+ uiSync.sync(new Runnable() {
+ @Override
+ public void run() {
+ EObject notifier = (EObject) notification.getNotifier();
+ if (notification.getNewValue() instanceof EObject) {
+ EObject itemId = (EObject) notification.getNewValue();
+ // the containment reference was set
+ if (itemId.eContainingFeature() == notification
+ .getFeature()) {
+ removeItem(itemId);
+ doAddItem(itemId.eContainer(), itemId, -1);
+ } else {
+ refreshLabel(notifier);
+ }
+ } else {
+ refreshLabel(notifier);
+ }
+ }
+
+ @SuppressWarnings({ "unchecked" })
+ private void refreshLabel(EObject notifier) {
+ Item item = getItem(notifier);
+ if (item != null) {
+ IItemLabelProvider labelProvider = (IItemLabelProvider) adapterFactory
+ .adapt(notifier, IItemLabelProvider.class);
+ item.getItemProperty(LABEL).setValue(
+ labelProvider.getText(notifier));
+ }
+ }
+ });
+ break;
+ case Notification.ADD_MANY:
+ uiSync.sync(new Runnable() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public void run() {
+ if (notification.getOldValue() instanceof Collection) {
+ Collection<Object> elements = (Collection<Object>) notification
+ .getNewValue();
+ for (Object element : elements) {
+ EObject addItem = (EObject) element;
+ doAddItem(addItem.eContainer(), addItem,
+ notification.getPosition());
+ }
+ }
+ }
+ });
+ break;
+ case Notification.REMOVE_MANY:
+ uiSync.sync(new Runnable() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public void run() {
+ if (notification.getOldValue() instanceof Collection) {
+ Collection<Object> elements = (Collection<Object>) notification
+ .getOldValue();
+ for (Object element : elements) {
+ EObject removeItem = (EObject) element;
+ removeItemRecursively(removeItem);
+ }
+ }
+ }
+ });
+ break;
+ }
+ }
+
+ /**
+ * This container MUST be disposed!.
+ */
+ public void dispose() {
+ IChangeNotifier notifier = (IChangeNotifier) adapterFactory;
+ notifier.removeListener(changeListener);
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfPropertiesContainer.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfPropertiesContainer.java
new file mode 100644
index 0000000..e80028a
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/EmfPropertiesContainer.java
@@ -0,0 +1,112 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.data;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+
+// TODO: Auto-generated Javadoc
+/***
+ * The base container to provide property descriptors and their values based on
+ * emf.edit.
+ */
+@SuppressWarnings("serial")
+public class EmfPropertiesContainer extends IndexedContainer {
+
+ /** The Constant ICON. */
+ public static final String ICON = "icon";
+
+ /** The Constant KEY. */
+ public static final String KEY = "key";
+
+ /** The Constant VALUE. */
+ public static final String VALUE = "value";
+
+ /** The root element. */
+ private EObject rootElement;
+
+ /** The editing domain. */
+ @SuppressWarnings("unused")
+ private final EditingDomain editingDomain;
+
+ /** The adapter factory. */
+ private final AdapterFactory adapterFactory;
+
+ /**
+ * Instantiates a new emf properties container.
+ *
+ * @param modelingContext
+ * the modeling context
+ * @param resourceProvider
+ * the resource provider
+ */
+ public EmfPropertiesContainer(IModelingContext modelingContext,
+ IResourceProvider resourceProvider) {
+ this.editingDomain = modelingContext.getEditingDomain();
+ this.adapterFactory = modelingContext.getAdapterFactory();
+
+ addContainerProperty(KEY, String.class, "");
+ addContainerProperty(VALUE, EmfItemPropertyDescritor.class, null);
+ }
+
+ /**
+ * Gets the root element.
+ *
+ * @return the root element
+ */
+ public EObject getRootElement() {
+ return rootElement;
+ }
+
+ /**
+ * Sets the root element.
+ *
+ * @param rootElement
+ * the new root element
+ */
+ @SuppressWarnings("unchecked")
+ public void setRootElement(EObject rootElement) {
+ if (this.rootElement == rootElement) {
+ return;
+ }
+
+ this.rootElement = rootElement;
+
+ removeAllItems();
+
+ if (rootElement != null) {
+ IItemPropertySource propertiesProvider = (IItemPropertySource) adapterFactory
+ .adapt(rootElement, IItemLabelProvider.class);
+ for (IItemPropertyDescriptor element : propertiesProvider
+ .getPropertyDescriptors(rootElement)) {
+ Item item = addItem(element);
+ item.getItemProperty(KEY).setValue(
+ element.getDisplayName(rootElement));
+
+ item.getItemProperty(VALUE).setValue(
+ new EmfItemPropertyDescritor(rootElement, element));
+ }
+ }
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/JvmSubTypesContainer.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/JvmSubTypesContainer.java
new file mode 100644
index 0000000..37982dd
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/JvmSubTypesContainer.java
@@ -0,0 +1,132 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.data;
+
+import java.net.URL;
+import java.util.Set;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
+import org.eclipse.xtext.common.types.JvmDeclaredType;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.server.Resource;
+
+/**
+ * The base container to provide SubTypes for a given type
+ * <p>
+ * ATTENTION: This container MUST be disposed!
+ */
+@SuppressWarnings("serial")
+public class JvmSubTypesContainer extends IndexedContainer {
+
+ /** The Constant ICON. */
+ public static final String ICON = "icon";
+
+ /** The Constant KEY. */
+ public static final String LABEL = "LABEL";
+
+ /** The root element. */
+ private JvmDeclaredType rootElement;
+
+ /** The editing domain. */
+ @SuppressWarnings("unused")
+ private final EditingDomain editingDomain;
+
+ /** The adapter factory. */
+ private final AdapterFactory adapterFactory;
+
+ private final IResourceProvider resourceProvider;
+
+ private final SubTypesCallback callback;
+
+ /**
+ * Instantiates a new emf properties container.
+ *
+ * @param modelingContext
+ * the modeling context
+ * @param resourceProvider
+ * the resource provider
+ */
+ public JvmSubTypesContainer(IModelingContext modelingContext,
+ IResourceProvider resourceProvider, SubTypesCallback callback) {
+ this.editingDomain = modelingContext.getEditingDomain();
+ this.adapterFactory = modelingContext.getAdapterFactory();
+ this.resourceProvider = resourceProvider;
+ this.callback = callback;
+
+ addContainerProperty(LABEL, String.class, "");
+ addContainerProperty(ICON, Resource.class, null);
+ }
+
+ /**
+ * Gets the root element.
+ *
+ * @return the root element
+ */
+ public EObject getRootElement() {
+ return rootElement;
+ }
+
+ /**
+ * Sets the root element.
+ *
+ * @param rootElement
+ * the new root element
+ */
+ @SuppressWarnings("unchecked")
+ public void setRootElement(JvmDeclaredType rootElement) {
+ if (this.rootElement == rootElement) {
+ return;
+ }
+
+ this.rootElement = rootElement;
+
+ removeAllItems();
+
+ if (rootElement != null) {
+ for (JvmDeclaredType subType : callback.getSubTypes(rootElement)) {
+ IItemLabelProvider labelProvider = (IItemLabelProvider) adapterFactory
+ .adapt(subType, IItemLabelProvider.class);
+ Item item = addItem(subType);
+ item.getItemProperty(LABEL).setValue(
+ labelProvider.getText(subType));
+ URL url = ((URL) labelProvider.getImage(subType));
+ item.getItemProperty(ICON).setValue(
+ resourceProvider.getResource(url.toString()));
+ }
+ }
+ }
+
+ /**
+ * Returns a set with sub types for the given root type.
+ */
+ public interface SubTypesCallback {
+
+ /**
+ * Returns a set with sub types for the given root type.
+ *
+ * @param type
+ * @return
+ */
+ Set<JvmDeclaredType> getSubTypes(JvmDeclaredType type);
+
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/JvmTypeProperties.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/JvmTypeProperties.java
new file mode 100644
index 0000000..a3d250b
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/JvmTypeProperties.java
@@ -0,0 +1,703 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+
+package org.eclipse.osbp.vaadin.emf.data;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.xtext.common.types.JvmAnnotationReference;
+import org.eclipse.xtext.common.types.JvmAnnotationType;
+import org.eclipse.xtext.common.types.JvmDeclaredType;
+import org.eclipse.xtext.common.types.JvmFeature;
+import org.eclipse.xtext.common.types.JvmField;
+import org.eclipse.xtext.common.types.JvmOperation;
+import org.eclipse.xtext.common.types.JvmParameterizedTypeReference;
+import org.eclipse.xtext.common.types.JvmPrimitiveType;
+import org.eclipse.xtext.common.types.JvmType;
+import org.eclipse.xtext.common.types.JvmVisibility;
+import org.eclipse.xtext.common.types.util.RawSuperTypes;
+import org.eclipse.xtext.xbase.lib.StringExtensions;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Helper class to collect all properties for a given JvmType.
+ */
+@SuppressWarnings("restriction")
+public class JvmTypeProperties {
+
+ /**
+ * Normalizes the method name.
+ *
+ * @param simpleName
+ * the simple name
+ * @return the string
+ */
+ public static String toPropertyName(String simpleName) {
+ if (simpleName == null) {
+ return null;
+ }
+ String tempName = null;
+ if (isSetter(simpleName)) {
+ tempName = StringExtensions.toFirstLower(simpleName.replaceFirst(
+ "set", ""));
+ } else if (isGetter(simpleName)) {
+ if (simpleName.startsWith("get")) {
+ tempName = StringExtensions.toFirstLower(simpleName
+ .replaceFirst("get", ""));
+ } else {
+ tempName = StringExtensions.toFirstLower(simpleName
+ .replaceFirst("is", ""));
+ }
+ }
+ return tempName;
+ }
+
+ /**
+ * Checks if is getter.
+ *
+ * @param simpleName
+ * the simple name
+ * @return true, if is getter
+ */
+ public static boolean isGetter(String simpleName) {
+ if (simpleName == null) {
+ return false;
+ }
+ return simpleName.startsWith("get") || simpleName.startsWith("is");
+ }
+
+ /**
+ * Checks if is setter.
+ *
+ * @param simpleName
+ * the simple name
+ * @return true, if is setter
+ */
+ public static boolean isSetter(String simpleName) {
+ return simpleName != null && simpleName.startsWith("set");
+ }
+
+ /**
+ * Calculates the operation infos for the given type.
+ *
+ * @param type
+ * the type
+ * @return the operation infos
+ */
+ public static Map<String, Info> getOperationInfos(JvmDeclaredType type) {
+ return getOperationInfos(type, null);
+ }
+
+ /**
+ * Calculates the operation infos for the given info.
+ *
+ * @param root
+ * the root
+ * @return the operation infos
+ */
+ public static Map<String, Info> getOperationInfos(Info root) {
+
+ JvmType type = null;
+ if (root.isMany()) {
+ type = root.getParameterizedType();
+ } else {
+ type = root.getType();
+ }
+
+ Map<String, Info> result = null;
+ if (type instanceof JvmDeclaredType) {
+ result = getOperationInfos((JvmDeclaredType) type);
+ } else {
+ result = new HashMap<String, JvmTypeProperties.Info>();
+ }
+ // apply the info as a parent
+ for (Info temp : result.values()) {
+ temp.setParent(root);
+ }
+
+ return result;
+ }
+
+ /**
+ * Calculates the operation infos for the given type.
+ *
+ * @param type
+ * the type
+ * @param filterName
+ * - is used to filter only methods property names matching the
+ * filter name.
+ * @return the operation infos
+ */
+ public static Map<String, Info> getOperationInfos(JvmDeclaredType type,
+ String filterName) {
+ Map<String, Info> infos = new HashMap<String, Info>();
+ for (JvmFeature feature : type.getAllFeatures()) {
+ if (!(feature instanceof JvmOperation)) {
+ continue;
+ }
+
+ JvmOperation operation = (JvmOperation) feature;
+ if (operation.getVisibility() != JvmVisibility.PUBLIC) {
+ continue;
+ }
+
+ if (!isSetter(operation.getSimpleName())
+ && operation.getParameters().size() > 1) {
+ continue;
+ }
+
+ String propertyName = toPropertyName(operation.getSimpleName());
+ if (propertyName == null) {
+ continue;
+ }
+
+ if (filterName != null && !filterName.equals(propertyName)) {
+ continue;
+ }
+
+ if (operation.getSimpleName().equals("getClass")) {
+ continue;
+ }
+
+ if (!isGetter(operation.getSimpleName())
+ && !isSetter(operation.getSimpleName())) {
+ continue;
+ }
+
+ String id = calcId(operation.getDeclaringType(),
+ operation.getSimpleName());
+ if (!infos.containsKey(id)) {
+ Info info = new Info();
+ info.id = id;
+ info.name = propertyName;
+ infos.put(id, info);
+ }
+
+ Info info = infos.get(id);
+ if (isGetter(operation.getSimpleName())) {
+ info.getter = operation;
+ } else {
+ if (!propertyName.equals("dirty")) {
+ info.setter = operation;
+ }
+ }
+ }
+
+ // apply readonly and create descriptions
+ for (Info info : infos.values()) {
+ if (info.getter == null) {
+ continue;
+ }
+ if (info.setter == null) {
+ info.readonly = true;
+ }
+
+ // TODO Pirchner - remove this workaround
+ if (info.name.equals("id") || info.name.equals("uuid")) {
+ info.idProperty = true;
+ }
+ }
+
+ for (JvmFeature member : type.getAllFeatures()) {
+ if (member instanceof JvmField) {
+ JvmField field = (JvmField) member;
+ String id = calcFieldId(field.getDeclaringType(),
+ field.getSimpleName());
+ if (infos.containsKey(id)) {
+ Info info = infos.get(id);
+ info.setField(field);
+ info.type = field.getType().getType();
+ info.primitive = info.type instanceof JvmPrimitiveType
+ || info.type.getQualifiedName().equals(
+ String.class.getName());
+
+ // collect all super types and check if collection is part
+ // of them
+ Set<String> superTypes = new RawSuperTypes()
+ .collectNames(info.type);
+ for (String typeName : superTypes) {
+ if (typeName.equals(Collection.class.getName())) {
+ info.many = true;
+ break;
+ }
+ }
+
+ if (info.many) {
+ JvmParameterizedTypeReference typeRef = (JvmParameterizedTypeReference) field
+ .getType();
+ if (!typeRef.getArguments().isEmpty()) {
+ info.parameterizedType = typeRef.getArguments()
+ .get(0).getType();
+ }
+ }
+ }
+ }
+ }
+ return infos;
+ }
+
+ /**
+ * Normalizes the name.
+ *
+ * @param declaringType
+ * the declaring type
+ * @param simpleName
+ * the simple name
+ * @return the string
+ */
+ public static String calcId(JvmDeclaredType declaringType, String simpleName) {
+ String tempName = toPropertyName(simpleName);
+ if (tempName == null) {
+ return null;
+ }
+
+ return declaringType.getQualifiedName() + ":" + tempName;
+ }
+
+ /**
+ * Normalizes the name.
+ *
+ * @param declaringType
+ * the declaring type
+ * @param simpleName
+ * the simple name
+ * @return the string
+ */
+ public static String calcFieldId(JvmDeclaredType declaringType,
+ String simpleName) {
+ return declaringType.getQualifiedName() + ":" + simpleName;
+ }
+
+ /**
+ * The Class Info.
+ */
+ public static class Info implements Comparable<Info> {
+
+ /**
+ * Can by any object that requested the info. For instance a YBeanSlot,
+ * an Entity, a JvmField,... The root should only be set for the top
+ * most parent.
+ */
+ private Object root;
+ /**
+ * The parent which requested this instance of info.
+ */
+ private Info parent;
+
+ /** The id. */
+ private String id;
+
+ /** The name. */
+ private String name;
+
+ /** The readonly. */
+ private boolean readonly;
+
+ /** The primitive. */
+ private boolean primitive;
+
+ /** The getter. */
+ private JvmOperation getter;
+
+ /** The setter. */
+ private JvmOperation setter;
+
+ /** The field. */
+ private JvmField field;
+
+ /** The type. */
+ private JvmType type;
+
+ /** The parameterized type. */
+ private JvmType parameterizedType;
+
+ /** The many. */
+ private boolean many;
+
+ /** The id property. */
+ private boolean idProperty;
+
+ /** The children. */
+ private List<Info> children = new ArrayList<>();
+
+ /**
+ * Gets the parent which requested this instance of info.
+ *
+ * @return the parent which requested this instance of info
+ */
+ public Info getParent() {
+ return parent;
+ }
+
+ /**
+ * Gets the children.
+ *
+ * @return the children
+ */
+ public List<Info> getChildren() {
+ return children;
+ }
+
+ /**
+ * Adds the child info.
+ *
+ * @param temp
+ * the temp
+ */
+ public void addChildInfo(Info temp) {
+ children.add(temp);
+ }
+
+ /**
+ * Sets the parent which requested this instance of info.
+ *
+ * @param parent
+ * the new parent which requested this instance of info
+ */
+ public void setParent(Info parent) {
+ this.parent = parent;
+ parent.addChildInfo(this);
+ }
+
+ /**
+ * Gets the top parent.
+ *
+ * @return the top parent
+ */
+ public Info getTopParent() {
+ if (getParent() != null) {
+ return getParent().getTopParent();
+ }
+ return this;
+ }
+
+ /**
+ * Gets the can by any object that requested the info.
+ *
+ * @return the can by any object that requested the info
+ */
+ public Object getRoot() {
+ if (this.root == null && getParent() != null) {
+ return getParent().getRoot();
+ }
+ return root;
+ }
+
+ /**
+ * Sets the can by any object that requested the info.
+ *
+ * @param root
+ * the new can by any object that requested the info
+ */
+ public void setRoot(Object root) {
+ this.root = root;
+ }
+
+ /**
+ * Gets the id.
+ *
+ * @return the id
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * Sets the id.
+ *
+ * @param id
+ * the new id
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ /**
+ * Gets the name.
+ *
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Sets the name.
+ *
+ * @param name
+ * the new name
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * Checks if is readonly.
+ *
+ * @return true, if is readonly
+ */
+ public boolean isReadonly() {
+ return readonly;
+ }
+
+ /**
+ * Sets the readonly.
+ *
+ * @param readonly
+ * the new readonly
+ */
+ public void setReadonly(boolean readonly) {
+ this.readonly = readonly;
+ }
+
+ /**
+ * Gets the getter.
+ *
+ * @return the getter
+ */
+ public JvmOperation getGetter() {
+ return getter;
+ }
+
+ /**
+ * Sets the getter.
+ *
+ * @param getter
+ * the new getter
+ */
+ public void setGetter(JvmOperation getter) {
+ this.getter = getter;
+ }
+
+ /**
+ * Gets the setter.
+ *
+ * @return the setter
+ */
+ public JvmOperation getSetter() {
+ return setter;
+ }
+
+ /**
+ * Sets the setter.
+ *
+ * @param setter
+ * the new setter
+ */
+ public void setSetter(JvmOperation setter) {
+ this.setter = setter;
+ }
+
+ /**
+ * Gets the field.
+ *
+ * @return the field
+ */
+ public JvmField getField() {
+ return field;
+ }
+
+ /**
+ * The jvm type containing the field.
+ *
+ * @return the declaring type
+ */
+ public JvmDeclaredType getDeclaringType() {
+ return field.getDeclaringType();
+ }
+
+ /**
+ * Sets the field.
+ *
+ * @param field
+ * the new field
+ */
+ public void setField(JvmField field) {
+ this.field = field;
+ }
+
+ /**
+ * Checks if is primitive.
+ *
+ * @return true, if is primitive
+ */
+ public boolean isPrimitive() {
+ return primitive;
+ }
+
+ /**
+ * Sets the primitive.
+ *
+ * @param primitive
+ * the new primitive
+ */
+ public void setPrimitive(boolean primitive) {
+ this.primitive = primitive;
+ }
+
+ /**
+ * Gets the type.
+ *
+ * @return the type
+ */
+ public JvmType getType() {
+ return type;
+ }
+
+ /**
+ * Sets the type.
+ *
+ * @param type
+ * the new type
+ */
+ public void setType(JvmType type) {
+ this.type = type;
+ }
+
+ /**
+ * Checks if is many.
+ *
+ * @return true, if is many
+ */
+ public boolean isMany() {
+ return many;
+ }
+
+ /**
+ * Checks if is id property.
+ *
+ * @return true, if is id property
+ */
+ public boolean isIdProperty() {
+ return idProperty;
+ }
+
+ /**
+ * Sets the many.
+ *
+ * @param many
+ * the new many
+ */
+ public void setMany(boolean many) {
+ this.many = many;
+ }
+
+ /**
+ * Gets the parameterized type.
+ *
+ * @return the parameterized type
+ */
+ public JvmType getParameterizedType() {
+ return parameterizedType;
+ }
+
+ /**
+ * Sets the parameterized type.
+ *
+ * @param parameterizedType
+ * the new parameterized type
+ */
+ public void setParameterizedType(JvmType parameterizedType) {
+ this.parameterizedType = parameterizedType;
+ }
+
+ /**
+ * Returns true, if the info has an annotation matching the given
+ * annotationType.
+ *
+ * @param annotationType
+ * the annotation type
+ * @return true, if successful
+ */
+ public boolean hasAnnotation(Class<?> annotationType) {
+ if (field == null) {
+ return false;
+ }
+ for (JvmAnnotationReference annotation : field.getAnnotations()) {
+ if (annotation.getAnnotation().getQualifiedName()
+ .equals(annotationType.getName())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns the JvmAnnotationType instance or null.
+ *
+ * @param annotationType
+ * the annotation type
+ * @return true, if successful
+ */
+ public JvmAnnotationType getAnnotation(Class<?> annotationType) {
+ if (!hasAnnotation(annotationType)) {
+ return null;
+ }
+ for (JvmAnnotationReference annotation : field.getAnnotations()) {
+ if (annotation.getAnnotation().getQualifiedName()
+ .equals(annotationType.getName())) {
+ return annotation.getAnnotation();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the dot'ed attribute path for this info and its parents. For
+ * instance <code>person.address.name</code>.
+ *
+ * @return the attribute path
+ */
+ public String getAttributePath() {
+ return getAttributePath(parent, name);
+ }
+
+ /**
+ * Gets the attribute path.
+ *
+ * @param parent
+ * the parent
+ * @param postFix
+ * the post fix
+ * @return the attribute path
+ */
+ protected String getAttributePath(Info parent, String postFix) {
+ if (parent != null) {
+ String temp = parent.getAttributePath();
+ return temp + "." + postFix;
+ } else {
+ return postFix;
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+ @Override
+ public int compareTo(Info other) {
+ if (name == null || other == null) {
+ return -1;
+ }
+ return name.compareTo(other.getName());
+ }
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/JvmTypePropertiesTreeContainer.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/JvmTypePropertiesTreeContainer.java
new file mode 100644
index 0000000..8642eca
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/JvmTypePropertiesTreeContainer.java
@@ -0,0 +1,499 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.data;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.xtext.common.types.JvmDeclaredType;
+import org.eclipse.xtext.common.types.JvmGenericType;
+import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
+import org.eclipse.osbp.vaadin.emf.data.JvmTypeProperties.Info;
+import org.eclipse.osbp.vaadin.emf.views.UiSync;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.server.Resource;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The base container to provide all properties for a given JvmType.
+ * <p>
+ * ATTENTION: This container MUST be disposed!
+ */
+@SuppressWarnings("serial")
+public class JvmTypePropertiesTreeContainer extends HierarchicalContainer {
+
+ /** The Constant ICON. */
+ private static final String ICON = "icon";
+
+ /** The Constant LABEL. */
+ private static final String LABEL = "label";
+
+ /** The root element. */
+ private EObject rootElement;
+
+ /** The editing domain. */
+ @SuppressWarnings("unused")
+ private final EditingDomain editingDomain;
+
+ /** The adapter factory. */
+ private final AdapterFactory adapterFactory;
+
+ /** The ui sync. */
+ private final UiSync uiSync;
+
+ /** The resolved. */
+ private Set<Object> resolved = new HashSet<Object>();
+
+ /** The resource provider. */
+ private IResourceProvider resourceProvider;
+
+ /** The change listener. */
+ private INotifyChangedListener changeListener;
+
+ /**
+ * Instantiates a new jvm type properties tree container.
+ *
+ * @param modelingContext
+ * the modeling context
+ * @param resourceProvider
+ * the resource provider
+ * @param uiSync
+ * the ui sync
+ */
+ public JvmTypePropertiesTreeContainer(IModelingContext modelingContext,
+ IResourceProvider resourceProvider, UiSync uiSync) {
+ this.resourceProvider = resourceProvider;
+ this.editingDomain = modelingContext.getEditingDomain();
+ this.adapterFactory = modelingContext.getAdapterFactory();
+ this.uiSync = uiSync;
+
+ addContainerProperty(LABEL, String.class, "");
+ addContainerProperty(ICON, Resource.class, null);
+
+ // IChangeNotifier notifier = (IChangeNotifier) modelingContext
+ // .getAdapterFactory();
+ // notifier.addListener(getModelChangeListener());
+ }
+
+ /**
+ * Gets the root element.
+ *
+ * @return the root element
+ */
+ public EObject getRootElement() {
+ return rootElement;
+ }
+
+ /**
+ * Sets the root element.
+ *
+ * @param rootElement
+ * the new root element
+ */
+ public void setRootElement(JvmGenericType rootElement) {
+ if (this.rootElement == rootElement) {
+ return;
+ }
+
+ removeAllItems();
+ resolved.clear();
+
+ this.rootElement = rootElement;
+
+ loadRootElements();
+ }
+
+ /**
+ * Load root elements.
+ */
+ private void loadRootElements() {
+ if (rootElement != null) {
+ doAddItem(null, rootElement, -1);
+ resolveChildren(rootElement);
+ }
+ }
+
+ /**
+ * Resolve children.
+ *
+ * @param itemId
+ * the item id
+ */
+ public void resolveChildren(Object itemId) {
+ // if children are allowed and they have not been resolved so far
+ if (areChildrenAllowed(itemId)
+ && (getChildren(itemId) == null || getChildren(itemId)
+ .isEmpty())) {
+ resolved.add(itemId);
+
+ // resolve children
+ if (itemId instanceof JvmDeclaredType) {
+ List<Info> children = createPropertyInfos((JvmDeclaredType) itemId);
+ for (Info newChild : children) {
+ doAddItem(itemId, newChild, -1);
+ }
+ } else {
+ JvmTypeProperties.Info info = (Info) itemId;
+ List<Info> children = createPropertyInfos(info);
+ for (Info newChild : children) {
+ doAddItem(info, newChild, -1);
+ }
+ }
+ }
+ }
+
+ /**
+ * Creates the property infos.
+ *
+ * @param type
+ * the type
+ * @return the list
+ */
+ private List<JvmTypeProperties.Info> createPropertyInfos(
+ JvmDeclaredType type) {
+ List<JvmTypeProperties.Info> result = new ArrayList<JvmTypeProperties.Info>(
+ JvmTypeProperties.getOperationInfos(type).values());
+ Collections.sort(result);
+ return result;
+ }
+
+ /**
+ * Creates the property infos.
+ *
+ * @param info
+ * the info
+ * @return the list
+ */
+ private List<JvmTypeProperties.Info> createPropertyInfos(
+ JvmTypeProperties.Info info) {
+ List<JvmTypeProperties.Info> result = new ArrayList<JvmTypeProperties.Info>(
+ JvmTypeProperties.getOperationInfos(info).values());
+ Collections.sort(result);
+ return result;
+ }
+
+ /**
+ * Refreshes the given node.
+ *
+ * @param itemId
+ * the item id
+ */
+ public void refreshNode(Object itemId) {
+ for (Object child : new ArrayList<>(getChildren(itemId))) {
+ removeItemRecursively(child);
+ }
+ resolved.remove(itemId);
+ resolveChildren(itemId);
+ }
+
+ /**
+ * Adds a new item.
+ *
+ * @param parent
+ * the parent
+ * @param newChild
+ * the new child
+ * @param index
+ * pass -1 for last index
+ */
+ @SuppressWarnings("unchecked")
+ private void doAddItem(Object parent, EObject newChild, int index) {
+ if (newChild == null) {
+ return;
+ }
+ Item item;
+ if (index >= 0) {
+ item = addItemAt(index, newChild);
+ } else {
+ item = addItem(newChild);
+ }
+ IItemLabelProvider labelProvider = (IItemLabelProvider) adapterFactory
+ .adapt(newChild, IItemLabelProvider.class);
+ item.getItemProperty(LABEL).setValue(labelProvider.getText(newChild));
+
+ // parse the platform uri
+ item.getItemProperty(ICON)
+ .setValue(
+ resourceProvider
+ .getResource("platform:/plugin/org.eclipse.osbp.vaadin.emf/images/class_obj.gif"));
+
+ // if the newChild is not root and the container is available in the
+ // tree
+ if (parent != null && containsId(parent)) {
+ setParent(newChild, parent);
+ // the new parent may have children again
+ // setChildrenAllowed(newChild.eContainer(), true);
+ }
+ }
+
+ /**
+ * Adds a new item.
+ *
+ * @param parent
+ * the parent
+ * @param newChild
+ * the new child
+ * @param index
+ * pass -1 for last index
+ */
+ @SuppressWarnings("unchecked")
+ private void doAddItem(Object parent, JvmTypeProperties.Info newChild,
+ int index) {
+ if (newChild == null) {
+ return;
+ }
+ Item item;
+ if (index >= 0) {
+ item = addItemAt(index, newChild);
+ } else {
+ item = addItem(newChild);
+ }
+
+ item.getItemProperty(LABEL).setValue(getText(newChild));
+ item.getItemProperty(ICON)
+ .setValue(
+ resourceProvider
+ .getResource("platform:/plugin/org.eclipse.osbp.vaadin.emf/images/field_public_obj.gif"));
+
+ // if the newChild is not root and the container is available in the
+ // tree
+ if (parent != null && containsId(parent)) {
+ setParent(newChild, parent);
+ }
+ }
+
+ /**
+ * Gets the text.
+ *
+ * @param newChild
+ * the new child
+ * @return the text
+ */
+ private String getText(Info newChild) {
+ String result = newChild.getName();
+
+ if (newChild.getType() != null) {
+ if (newChild.isMany()) {
+ result += "[*]";
+ result += " : ";
+ if (newChild.getParameterizedType() != null) {
+ result += newChild.getParameterizedType()
+ .getQualifiedName();
+ }
+ } else {
+ result += " : ";
+ result += newChild.getType().getQualifiedName();
+ }
+ }
+
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.data.util.HierarchicalContainer#hasChildren(java.lang.Object)
+ */
+ @Override
+ public boolean hasChildren(Object itemId) {
+ boolean result = super.hasChildren(itemId);
+ if (!result) {
+ if (itemId instanceof EObject) {
+ // calculate children allowed
+ ITreeItemContentProvider treeProvider = (ITreeItemContentProvider) adapterFactory
+ .adapt(itemId, ITreeItemContentProvider.class);
+ result = treeProvider.hasChildren(itemId);
+ } else {
+ JvmTypeProperties.Info info = (Info) itemId;
+ return !info.isMany() && !info.isPrimitive();
+ }
+ }
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.data.util.HierarchicalContainer#areChildrenAllowed(java.lang.Object)
+ */
+ @Override
+ public boolean areChildrenAllowed(Object itemId) {
+ // calculate children allowed
+
+ if (itemId instanceof EObject) {
+ ITreeItemContentProvider treeProvider = (ITreeItemContentProvider) adapterFactory
+ .adapt(itemId, ITreeItemContentProvider.class);
+ return treeProvider.hasChildren(itemId);
+ } else {
+ JvmTypeProperties.Info info = (Info) itemId;
+ try {
+ return !info.isMany() && !info.isPrimitive();
+ } catch (Exception e) {
+ System.out.println("");
+ }
+ return false;
+ }
+ }
+
+ // private INotifyChangedListener getModelChangeListener() {
+ // this.changeListener = e -> handleNotification(e);
+ // return changeListener;
+ // }
+
+ // /**
+ // * Refreshes the item with the given eObject.
+ // *
+ // * @param eObject
+ // */
+ // protected void handleNotification(Notification notification) {
+ // if (notification.isTouch()) {
+ // return;
+ // }
+ //
+ // switch (notification.getEventType()) {
+ // case Notification.ADD:
+ // uiSync.sync(new Runnable() {
+ // @Override
+ // public void run() {
+ // if (notification.getNewValue() instanceof EObject) {
+ // EObject addItem = (EObject) notification.getNewValue();
+ // doAddItem(addItem, notification.getPosition());
+ // }
+ // }
+ // });
+ // break;
+ // case Notification.REMOVE:
+ // uiSync.sync(new Runnable() {
+ // @Override
+ // public void run() {
+ // if (notification.getOldValue() instanceof EObject) {
+ // EObject removeItem = (EObject) notification
+ // .getOldValue();
+ // removeItemRecursively(removeItem);
+ // }
+ // }
+ // });
+ // break;
+ // case Notification.MOVE:
+ // EObject moveItem = (EObject) notification.getNewValue();
+ // EStructuralFeature feature = moveItem.eContainingFeature();
+ // if (feature.isMany()) {
+ // EObject container = moveItem.eContainer();
+ // // if the parent is not visible, then leave
+ // if (!containsId(container)) {
+ // return;
+ // }
+ // uiSync.sync(new Runnable() {
+ // @SuppressWarnings("unchecked")
+ // @Override
+ // public void run() {
+ // List<EObject> eObjects = (List<EObject>) container
+ // .eGet(feature);
+ // EObject previousSibling = null;
+ // if (notification.getPosition() > 0) {
+ // previousSibling = eObjects.get(notification
+ // .getPosition() - 1);
+ // moveAfterSibling(moveItem, previousSibling);
+ // }
+ // }
+ // });
+ // }
+ // break;
+ // case Notification.SET:
+ // // update the property with the changed value
+ // uiSync.sync(new Runnable() {
+ // @Override
+ // public void run() {
+ // EObject notifier = (EObject) notification.getNotifier();
+ // if (notification.getNewValue() instanceof EObject) {
+ // EObject itemId = (EObject) notification.getNewValue();
+ // // the containment reference was set
+ // if (itemId.eContainingFeature() == notification
+ // .getFeature()) {
+ // removeItem(itemId);
+ // doAddItem(itemId, -1);
+ // } else {
+ // refreshLabel(notifier);
+ // }
+ // } else {
+ // refreshLabel(notifier);
+ // }
+ // }
+ //
+ // @SuppressWarnings({ "unchecked" })
+ // private void refreshLabel(EObject notifier) {
+ // Item item = getItem(notifier);
+ // if (item != null) {
+ // IItemLabelProvider labelProvider = (IItemLabelProvider) adapterFactory
+ // .adapt(notifier, IItemLabelProvider.class);
+ // item.getItemProperty(LABEL).setValue(
+ // labelProvider.getText(notifier));
+ // }
+ // }
+ // });
+ // break;
+ // case Notification.ADD_MANY:
+ // uiSync.sync(new Runnable() {
+ // @SuppressWarnings("unchecked")
+ // @Override
+ // public void run() {
+ // if (notification.getOldValue() instanceof Collection) {
+ // Collection<Object> elements = (Collection<Object>) notification
+ // .getNewValue();
+ // for (Object element : elements) {
+ // EObject addItem = (EObject) element;
+ // doAddItem(addItem, notification.getPosition());
+ // }
+ // }
+ // }
+ // });
+ // break;
+ // case Notification.REMOVE_MANY:
+ // uiSync.sync(new Runnable() {
+ // @SuppressWarnings("unchecked")
+ // @Override
+ // public void run() {
+ // if (notification.getOldValue() instanceof Collection) {
+ // Collection<Object> elements = (Collection<Object>) notification
+ // .getOldValue();
+ // for (Object element : elements) {
+ // EObject removeItem = (EObject) element;
+ // removeItemRecursively(removeItem);
+ // }
+ // }
+ // }
+ // });
+ // break;
+ // }
+ // }
+
+ /**
+ * This container MUST be disposed!.
+ */
+ public void dispose() {
+ IChangeNotifier notifier = (IChangeNotifier) adapterFactory;
+ notifier.removeListener(changeListener);
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/EEnumComboBox.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/EEnumComboBox.java
new file mode 100644
index 0000000..1fe17a9
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/EEnumComboBox.java
@@ -0,0 +1,145 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.data.fields;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomField;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A combobox to select {@link EEnumLiteral}.
+ */
+@SuppressWarnings("serial")
+public class EEnumComboBox extends CustomField<EEnumLiteral> {
+
+ /** The adapter factory. */
+ private final AdapterFactory adapterFactory;
+
+ /** The combobox. */
+ private ComboBox combobox;
+
+ /** The property. */
+ private ObjectProperty<EEnumLiteral> property;
+
+ /**
+ * Instantiates a new e enum combo box.
+ *
+ * @param caption
+ * the caption
+ * @param adapterFactory
+ * the adapter factory
+ */
+ public EEnumComboBox(String caption, AdapterFactory adapterFactory) {
+ setCaption(caption);
+ this.adapterFactory = adapterFactory;
+
+ // eager init
+ initContent();
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.ui.CustomField#initContent()
+ */
+ @Override
+ protected Component initContent() {
+ if (combobox != null) {
+ return combobox;
+ }
+
+ combobox = new ComboBox();
+ combobox.setWidth("100%");
+ combobox.setItemCaptionPropertyId("name");
+
+ combobox.addContainerProperty("name", String.class, "");
+
+ property = new ObjectProperty<EEnumLiteral>(null, EEnumLiteral.class);
+ combobox.setPropertyDataSource(property);
+
+ property.addValueChangeListener(e -> {
+ super.setValue((EEnumLiteral) e.getProperty().getValue());
+ });
+
+ return combobox;
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.ui.AbstractField#getType()
+ */
+ @Override
+ public Class<EEnumLiteral> getType() {
+ return EEnumLiteral.class;
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.ui.AbstractField#setInternalValue(java.lang.Object)
+ */
+ @Override
+ protected void setInternalValue(EEnumLiteral newValue) {
+ super.setInternalValue(newValue);
+
+ if (property != null) {
+ property.setValue(newValue);
+ }
+ }
+
+ /**
+ * Sets the type which should be used to find all literals.
+ *
+ * @param eenum
+ * the new type
+ */
+ @SuppressWarnings("unchecked")
+ public void setType(EEnum eenum) {
+ initContent();
+
+ combobox.removeAllItems();
+
+ for (EEnumLiteral lit : eenum.getELiterals()) {
+ if (lit == null) {
+ continue;
+ }
+
+ IItemLabelProvider provider = (IItemLabelProvider) adapterFactory
+ .adapt(lit, IItemLabelProvider.class);
+ Item item = combobox.addItem(lit);
+ String name = provider.getText(lit);
+ item.getItemProperty("name").setValue(name);
+ }
+ }
+
+ /**
+ * Is used to filter all available literals.
+ */
+ public static interface Filter {
+
+ /**
+ * Returns true, if feature should be available.
+ *
+ * @param feature
+ * the feature
+ * @return true, if successful
+ */
+ boolean matches(EStructuralFeature feature);
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/EObjectComboBox.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/EObjectComboBox.java
new file mode 100644
index 0000000..37db0af
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/EObjectComboBox.java
@@ -0,0 +1,150 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.data.fields;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomField;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A combobox to select referenced EObjects.
+ */
+@SuppressWarnings("serial")
+public class EObjectComboBox extends CustomField<EObject> {
+
+ /** The adapter factory. */
+ private final AdapterFactory adapterFactory;
+
+ /** The combobox. */
+ private ComboBox combobox;
+
+ /** The property. */
+ private ObjectProperty<EObject> property;
+
+ /**
+ * Instantiates a new e object combo box.
+ *
+ * @param adapterFactory
+ * the adapter factory
+ */
+ public EObjectComboBox(AdapterFactory adapterFactory) {
+ this.adapterFactory = adapterFactory;
+
+ // eager init
+ initContent();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.ui.CustomField#initContent()
+ */
+ @Override
+ protected Component initContent() {
+ if (combobox != null) {
+ return combobox;
+ }
+
+ combobox = new ComboBox();
+ combobox.setWidth("100%");
+ combobox.setItemCaptionPropertyId("name");
+
+ combobox.addContainerProperty("name", String.class, "");
+
+ property = new ObjectProperty<EObject>(null, EObject.class);
+ combobox.setPropertyDataSource(property);
+
+ property.addValueChangeListener(e -> {
+ super.setValue((EObject) e.getProperty().getValue());
+ });
+
+ return combobox;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.ui.AbstractField#getType()
+ */
+ @Override
+ public Class<EObject> getType() {
+ return EObject.class;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.ui.AbstractField#setInternalValue(java.lang.Object)
+ */
+ @Override
+ protected void setInternalValue(EObject newValue) {
+ super.setInternalValue(newValue);
+
+ if (property != null) {
+ property.setValue(newValue);
+ }
+ }
+
+ /**
+ * Gets the collection.
+ *
+ * @return the collection
+ */
+ @SuppressWarnings("unchecked")
+ public Collection<EObject> getCollection() {
+ return (Collection<EObject>) combobox.getItemIds();
+ }
+
+ /**
+ * Sets the collection.
+ *
+ * @param eObjects
+ * the new collection
+ */
+ @SuppressWarnings("unchecked")
+ public void setCollection(Collection<? extends EObject> eObjects) {
+ initContent();
+
+ combobox.removeAllItems();
+
+ for (EObject eObject : eObjects) {
+ if (eObject == null) {
+ continue;
+ }
+ IItemLabelProvider provider = (IItemLabelProvider) adapterFactory
+ .adapt(eObject, IItemLabelProvider.class);
+ if (provider != null) {
+ Item item = combobox.addItem(eObject);
+ item.getItemProperty("name")
+ .setValue(provider.getText(eObject));
+ } else if (eObject.eClass().getEStructuralFeature("name") != null) {
+ Item item = combobox.addItem(eObject);
+ item.getItemProperty("name").setValue(
+ eObject.eGet(eObject.eClass().getEStructuralFeature(
+ "name")));
+ }
+ }
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/EStructuralFeatureComboBox.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/EStructuralFeatureComboBox.java
new file mode 100644
index 0000000..5db0e7c
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/EStructuralFeatureComboBox.java
@@ -0,0 +1,160 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.data.fields;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomField;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A combobox to select referenced EObjects.
+ */
+@SuppressWarnings("serial")
+public class EStructuralFeatureComboBox extends CustomField<EStructuralFeature> {
+
+ /** The adapter factory. */
+ private final AdapterFactory adapterFactory;
+
+ /** The combobox. */
+ private ComboBox combobox;
+
+ /** The property. */
+ private ObjectProperty<EStructuralFeature> property;
+
+ /** The filter. */
+ private Filter filter;
+
+ /**
+ * Instantiates a new e structural feature combo box.
+ *
+ * @param caption
+ * the caption
+ * @param adapterFactory
+ * the adapter factory
+ */
+ public EStructuralFeatureComboBox(String caption,
+ AdapterFactory adapterFactory) {
+ setCaption(caption);
+ this.adapterFactory = adapterFactory;
+
+ // eager init
+ initContent();
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.ui.CustomField#initContent()
+ */
+ @Override
+ protected Component initContent() {
+ if (combobox != null) {
+ return combobox;
+ }
+
+ combobox = new ComboBox();
+ combobox.setWidth("100%");
+ combobox.setItemCaptionPropertyId("name");
+
+ combobox.addContainerProperty("name", String.class, "");
+
+ property = new ObjectProperty<EStructuralFeature>(null,
+ EStructuralFeature.class);
+ combobox.setPropertyDataSource(property);
+
+ property.addValueChangeListener(e -> {
+ super.setValue((EStructuralFeature) e.getProperty().getValue());
+ });
+
+ return combobox;
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.ui.AbstractField#getType()
+ */
+ @Override
+ public Class<EStructuralFeature> getType() {
+ return EStructuralFeature.class;
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.ui.AbstractField#setInternalValue(java.lang.Object)
+ */
+ @Override
+ protected void setInternalValue(EStructuralFeature newValue) {
+ super.setInternalValue(newValue);
+
+ if (property != null) {
+ property.setValue(newValue);
+ }
+ }
+
+ /**
+ * Sets the type which should be used to find all features.
+ *
+ * @param eClass
+ * the e class
+ * @param filter
+ * the filter to filter features before displaying
+ */
+ @SuppressWarnings("unchecked")
+ public void setType(EClass eClass, Filter filter) {
+ this.filter = filter;
+ initContent();
+
+ combobox.removeAllItems();
+
+ for (EStructuralFeature feature : eClass.getEAllStructuralFeatures()) {
+ if (feature == null) {
+ continue;
+ }
+
+ if (filter != null && !filter.matches(feature)) {
+ continue;
+ }
+
+ IItemLabelProvider provider = (IItemLabelProvider) adapterFactory
+ .adapt(feature, IItemLabelProvider.class);
+ Item item = combobox.addItem(feature);
+
+ String name = provider.getText(feature);
+ if (feature.isMany()) {
+ name += "[*]";
+ }
+ item.getItemProperty("name").setValue(name);
+ }
+ }
+
+ /**
+ * Is used to filter all available features.
+ */
+ public static interface Filter {
+
+ /**
+ * Returns true, if feature should be available.
+ *
+ * @param feature
+ * the feature
+ * @return true, if successful
+ */
+ boolean matches(EStructuralFeature feature);
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/EmfItemPropertyEditorField.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/EmfItemPropertyEditorField.java
new file mode 100644
index 0000000..328d53b
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/EmfItemPropertyEditorField.java
@@ -0,0 +1,397 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.data.fields;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
+import org.eclipse.osbp.vaadin.emf.data.EmfItemPropertyDescritor;
+
+import com.vaadin.data.Validator.InvalidValueException;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.data.util.TransactionalPropertyWrapper;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomField;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+// TODO: Auto-generated Javadoc
+/**
+ * This field is used in the property view to show different kind of datatypes.
+ */
+@SuppressWarnings("serial")
+public class EmfItemPropertyEditorField extends
+ CustomField<EmfItemPropertyDescritor> {
+
+ /** The domain. */
+ private final EditingDomain domain;
+
+ /** The adapter factory. */
+ private final AdapterFactory adapterFactory;
+
+ /** The main layout. */
+ private VerticalLayout mainLayout;
+
+ /** The text field. */
+ // sources for datatransfer
+ private TextSource textField;
+
+ /** The boolean field. */
+ private BooleanSource booleanField;
+
+ /** The e object combo. */
+ private EObjectComboBoxSource eObjectCombo;
+
+ /** The active source. */
+ private Source<?> activeSource;
+
+ /**
+ * Instantiates a new emf item property editor field.
+ *
+ * @param modelingContext
+ * the modeling context
+ */
+ public EmfItemPropertyEditorField(IModelingContext modelingContext) {
+ this.domain = modelingContext.getEditingDomain();
+ this.adapterFactory = modelingContext.getAdapterFactory();
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.ui.CustomField#initContent()
+ */
+ @Override
+ protected Component initContent() {
+ mainLayout = new VerticalLayout();
+ textField = new TextSource();
+ booleanField = new BooleanSource();
+ eObjectCombo = new EObjectComboBoxSource();
+
+ return mainLayout;
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.ui.AbstractField#getType()
+ */
+ @Override
+ public Class<EmfItemPropertyDescritor> getType() {
+ return EmfItemPropertyDescritor.class;
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.ui.AbstractField#setInternalValue(java.lang.Object)
+ */
+ @Override
+ protected void setInternalValue(EmfItemPropertyDescritor newValue) {
+ super.setInternalValue(newValue);
+
+ switchFieldType(newValue);
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.ui.AbstractField#commit()
+ */
+ @Override
+ public void commit() throws SourceException, InvalidValueException {
+ super.commit();
+
+ if (activeSource != null) {
+ activeSource.commit();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.ui.AbstractField#discard()
+ */
+ @Override
+ public void discard() throws SourceException {
+ super.discard();
+
+ if (activeSource != null) {
+ activeSource.rollback();
+ }
+ }
+
+ /**
+ * Switch field type.
+ *
+ * @param newValue
+ * the new value
+ */
+ private void switchFieldType(EmfItemPropertyDescritor newValue) {
+ if (newValue == null) {
+ return;
+ }
+ EStructuralFeature eFeature = (EStructuralFeature) newValue
+ .getFeature();
+ if (eFeature instanceof EAttribute) {
+ EAttribute eAttribute = (EAttribute) eFeature;
+ EDataType eAttType = eAttribute.getEAttributeType();
+ if (eAttType.getInstanceClass() == Boolean.TYPE) {
+ activateSource(booleanField, newValue);
+ } else {
+ if (eAttribute.isMany()) {
+ newValue.getChoiceOfValues();
+ } else {
+ activateSource(textField, newValue);
+ }
+
+ }
+ } else {
+ EReference eReference = (EReference) eFeature;
+ if (eReference.isMany()) {
+
+ } else {
+ activateSource(eObjectCombo, newValue);
+ }
+ }
+ }
+
+ /**
+ * Activate source.
+ *
+ * @param source
+ * the source
+ * @param descritor
+ * the descritor
+ */
+ private void activateSource(Source<?> source,
+ EmfItemPropertyDescritor descritor) {
+
+ activeSource = source;
+ // setup collections,...
+ activeSource.initialize();
+ activeSource.setValue(descritor);
+
+ mainLayout.removeAllComponents();
+ mainLayout.addComponent(source.field);
+ }
+
+ /**
+ * A source is a wrapper that wraps important parts.
+ * <p>
+ * The main issue using sources is to decouple the active field. Depending
+ * on the {@link EmfItemPropertyDescritor descriptor}, a CheckBox, a
+ * TextField, a ComboBox,... need to used as an input field. The sources
+ * encapsulate the different types. There is one Source for each field type.
+ * <p>
+ * Additionally it is used as a grid editor. So it need transactional
+ * behavior. Input may only be forwarded to the
+ * {@link EmfItemPropertyDescritor descriptor}, if "save" is pressed in the
+ * grid editor. Each field comes with its own property. This property is
+ * wrapped by a {@link TransactionalPropertyWrapper} which ensures, that
+ * inputs are not forwarded to the descriptor before commit was fired.<br>
+ * If commit was fired, the value will be forwarded to the property and a
+ * value change listener will trigger the set operation to the descriptor.
+ *
+ * @param <F>
+ * the generic type
+ */
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ private abstract class Source<F extends Field> {
+
+ /** The field. */
+ protected final F field;
+
+ /** The txn property. */
+ protected final TransactionalPropertyWrapper txnProperty;
+
+ /** The descriptor. */
+ protected EmfItemPropertyDescritor descriptor;
+
+ /**
+ * Instantiates a new source.
+ *
+ * @param field
+ * the field
+ * @param property
+ * the property
+ */
+ Source(F field, ObjectProperty property) {
+ this.field = field;
+ txnProperty = new TransactionalPropertyWrapper(property);
+ field.setPropertyDataSource(txnProperty);
+ }
+
+ /**
+ * Sets the value.
+ *
+ * @param descriptor
+ * the new value
+ */
+ public void setValue(EmfItemPropertyDescritor descriptor) {
+ this.descriptor = descriptor;
+ if (descriptor != null) {
+ field.setValue(descriptor.getEditableValue());
+ } else {
+ field.clear();
+ }
+ }
+
+ /**
+ * Commit.
+ */
+ public void commit() {
+ if (field.isAttached()) {
+ txnProperty.commit();
+
+ doCommit();
+ }
+ }
+
+ /**
+ * Do commit.
+ */
+ protected abstract void doCommit();
+
+ /**
+ * Rollback.
+ */
+ public void rollback() {
+ if (field.isAttached()) {
+ txnProperty.rollback();
+ }
+ }
+
+ /**
+ * A good place to initialize collections,...
+ */
+ public void initialize() {
+
+ }
+
+ /**
+ * Creates the set command.
+ *
+ * @return the sets the command
+ */
+ protected SetCommand createSetCommand() {
+ SetCommand command = new SetCommand(domain,
+ descriptor.getEObject(),
+ (EStructuralFeature) descriptor.getFeature(),
+ txnProperty.getValue());
+ return command;
+ }
+
+ /**
+ * Execute command.
+ *
+ * @param command
+ * the command
+ */
+ protected void executeCommand(Command command) {
+ domain.getCommandStack().execute(createSetCommand());
+ }
+ }
+
+ /**
+ * The Class BooleanSource.
+ */
+ private class BooleanSource extends Source<CheckBox> {
+
+ /**
+ * Instantiates a new boolean source.
+ */
+ BooleanSource() {
+ super(new CheckBox(), new ObjectProperty<Boolean>(false,
+ Boolean.class));
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.vaadin.emf.data.fields.EmfItemPropertyEditorField.Source#doCommit()
+ */
+ @Override
+ protected void doCommit() {
+ executeCommand(createSetCommand());
+ }
+ }
+
+ /**
+ * The Class TextSource.
+ */
+ private class TextSource extends Source<TextField> {
+
+ /**
+ * Instantiates a new text source.
+ */
+ TextSource() {
+ super(new TextField(), new ObjectProperty<String>("", String.class));
+ field.setNullRepresentation("");
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.vaadin.emf.data.fields.EmfItemPropertyEditorField.Source#doCommit()
+ */
+ @Override
+ protected void doCommit() {
+ executeCommand(createSetCommand());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.vaadin.emf.data.fields.EmfItemPropertyEditorField.Source#setValue(org.eclipse.osbp.vaadin.emf.data.EmfItemPropertyDescritor)
+ */
+ public void setValue(EmfItemPropertyDescritor descriptor) {
+ this.descriptor = descriptor;
+ if (descriptor != null) {
+ field.setValue(String.valueOf(descriptor.getEditableValue()));
+ } else {
+ field.clear();
+ }
+ }
+ }
+
+ /**
+ * The Class EObjectComboBoxSource.
+ */
+ private class EObjectComboBoxSource extends Source<EObjectComboBox> {
+
+ /**
+ * Instantiates a new e object combo box source.
+ */
+ EObjectComboBoxSource() {
+ super(new EObjectComboBox(adapterFactory),
+ new ObjectProperty<EObject>(null, EObject.class));
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.vaadin.emf.data.fields.EmfItemPropertyEditorField.Source#initialize()
+ */
+ @SuppressWarnings("unchecked")
+ public void initialize() {
+ if (descriptor != null) {
+ field.setCollection((Collection<EObject>) descriptor
+ .getChoiceOfValues());
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.vaadin.emf.data.fields.EmfItemPropertyEditorField.Source#doCommit()
+ */
+ @Override
+ protected void doCommit() {
+ executeCommand(createSetCommand());
+ }
+ }
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/JvmSubTypesComboBox.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/JvmSubTypesComboBox.java
new file mode 100644
index 0000000..8cd8c5d
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/data/fields/JvmSubTypesComboBox.java
@@ -0,0 +1,142 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.data.fields;
+
+import java.util.Collection;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
+import org.eclipse.osbp.vaadin.emf.data.JvmSubTypesContainer;
+import org.eclipse.osbp.vaadin.emf.data.JvmSubTypesContainer.SubTypesCallback;
+import org.eclipse.xtext.common.types.JvmDeclaredType;
+
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CustomField;
+
+/**
+ * A combobox to select referenced JvmDeclaredType.
+ */
+@SuppressWarnings("serial")
+public class JvmSubTypesComboBox extends CustomField<JvmDeclaredType> {
+
+ /** The combobox. */
+ private ComboBox combobox;
+
+ /** The property. */
+ private ObjectProperty<JvmDeclaredType> property;
+
+ JvmSubTypesContainer container;
+
+ /**
+ * Instantiates a new e object combo box.
+ *
+ * @param adapterFactory
+ * the adapter factory
+ */
+ public JvmSubTypesComboBox(IModelingContext modelingContext,
+ IResourceProvider resourceProvider, SubTypesCallback callback) {
+ container = new JvmSubTypesContainer(modelingContext, resourceProvider,
+ callback);
+
+ // eager init
+ initContent();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.ui.CustomField#initContent()
+ */
+ @Override
+ protected Component initContent() {
+ if (combobox != null) {
+ return combobox;
+ }
+
+ combobox = new ComboBox();
+ combobox.setWidth("100%");
+
+ combobox.setContainerDataSource(container);
+
+ combobox.setItemCaptionPropertyId(JvmSubTypesContainer.LABEL);
+ combobox.setItemIconPropertyId(JvmSubTypesContainer.ICON);
+
+ property = new ObjectProperty<JvmDeclaredType>(null,
+ JvmDeclaredType.class);
+ combobox.setPropertyDataSource(property);
+
+ property.addValueChangeListener(e -> {
+ super.setValue((JvmDeclaredType) e.getProperty().getValue());
+ });
+
+ return combobox;
+ }
+
+ /**
+ * Returns the root type.
+ *
+ * @return
+ */
+ public EObject getRootType() {
+ return container.getRootElement();
+ }
+
+ /**
+ * Sets the root type.
+ *
+ * @param rootElement
+ */
+ public void setRootType(JvmDeclaredType rootElement) {
+ container.setRootElement(rootElement);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.ui.AbstractField#getType()
+ */
+ @Override
+ public Class<JvmDeclaredType> getType() {
+ return JvmDeclaredType.class;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.ui.AbstractField#setInternalValue(java.lang.Object)
+ */
+ @Override
+ protected void setInternalValue(JvmDeclaredType newValue) {
+ super.setInternalValue(newValue);
+
+ if (property != null) {
+ property.setValue(newValue);
+ }
+ }
+
+ /**
+ * Gets the collection.
+ *
+ * @return the collection
+ */
+ @SuppressWarnings("unchecked")
+ public Collection<JvmDeclaredType> getCollection() {
+ return (Collection<JvmDeclaredType>) combobox.getItemIds();
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/EmfCommandStackTableViewer.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/EmfCommandStackTableViewer.java
new file mode 100644
index 0000000..9e5fdee
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/EmfCommandStackTableViewer.java
@@ -0,0 +1,113 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.views;
+
+import java.util.EventObject;
+import java.util.List;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStackListener;
+import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
+
+import com.vaadin.data.Item;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class EmfCommandStackTableViewer.
+ */
+@SuppressWarnings({ "serial", "restriction" })
+public class EmfCommandStackTableViewer extends CustomComponent implements
+ CommandStackListener {
+
+ /** The Constant EVENT_TYPE_NAME. */
+ public static final String EVENT_TYPE_NAME = "eventType";
+
+ /** The table. */
+ private Table table;
+
+ /** The modeling context. */
+ private IModelingContext modelingContext;
+
+ /**
+ * Instantiates a new emf command stack table viewer.
+ *
+ * @param modelingContext
+ * the modeling context
+ */
+ public EmfCommandStackTableViewer(IModelingContext modelingContext) {
+ this.modelingContext = modelingContext;
+
+ modelingContext.getCommandStack().addCommandStackListener(this);
+
+ Panel mainLayout = new Panel();
+ mainLayout.setSizeFull();
+ setCompositionRoot(mainLayout);
+
+ VerticalLayout scrollArea = new VerticalLayout();
+ scrollArea.setMargin(true);
+ mainLayout.setContent(scrollArea);
+
+ table = new Table();
+ table.setSizeFull();
+ scrollArea.addComponent(table);
+
+ table.addContainerProperty("name", String.class, "");
+ // table.addContainerProperty("can undo", CheckBox.class, "");
+ // table.addContainerProperty("can redo", CheckBox.class, "");
+
+ fillTable();
+
+ table.setItemCaptionPropertyId("name");
+ }
+
+ /**
+ * Fill table.
+ */
+ @SuppressWarnings("unchecked")
+ private void fillTable() {
+ table.removeAllItems();
+
+ List<Command> commands = modelingContext.getCommandStack()
+ .getAllCommands();
+ for (int i = commands.size() - 1; i >= 0; i--) {
+ Item item = table.addItem(commands.get(i));
+ item.getItemProperty("name").setValue(commands.get(i).getLabel());
+ }
+
+ table.select(modelingContext.getCommandStack().getMostRecentCommand());
+ table.setValue(modelingContext.getCommandStack().getMostRecentCommand());
+ }
+
+ /**
+ * Is required to be called.
+ */
+ public void dispose() {
+ table = null;
+ modelingContext.getCommandStack().removeCommandStackListener(this);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.emf.common.command.CommandStackListener#commandStackChanged(java.util.EventObject)
+ */
+ @Override
+ public void commandStackChanged(EventObject event) {
+ fillTable();
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/EmfModelTreeViewer.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/EmfModelTreeViewer.java
new file mode 100644
index 0000000..47aeeb0
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/EmfModelTreeViewer.java
@@ -0,0 +1,191 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.views;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+import org.eclipse.osbp.vaadin.emf.actions.EObjectActionHandler;
+import org.eclipse.osbp.vaadin.emf.actions.EmfTreeDndHandler;
+import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
+import org.eclipse.osbp.vaadin.emf.data.EmfModelTreeContainer;
+
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Tree.TreeDragMode;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Shows any emfmodel in a tree viewer style.
+ * <p>
+ * ATTENTION: This viewer MUST be disposed!
+ */
+@SuppressWarnings("serial")
+public class EmfModelTreeViewer extends CustomComponent {
+
+ /** The tree. */
+ private Tree tree;
+
+ /** The container. */
+ private EmfModelTreeContainer container;
+
+ // private ContextMenu contextMenu;
+
+ /**
+ * Instantiates a new emf model tree viewer.
+ *
+ * @param modelingContext
+ * the modeling context
+ * @param resourceProvider
+ * the resource provider
+ * @param callback
+ * the callback
+ */
+ public EmfModelTreeViewer(IModelingContext modelingContext,
+ IResourceProvider resourceProvider,
+ EObjectActionHandler.EditCallback callback) {
+ Panel mainLayout = new Panel();
+ mainLayout.setSizeFull();
+ setCompositionRoot(mainLayout);
+
+ VerticalLayout scrollArea = new VerticalLayout();
+ mainLayout.setContent(scrollArea);
+
+ tree = new Tree();
+ tree.setSizeFull();
+
+ // contextMenu = new ContextMenu(tree, false);
+ // contextMenu.addContextMenuOpenListener(e -> contextMenuOpens(e));
+
+ tree.setDragMode(TreeDragMode.NODE);
+ tree.setDropHandler(new EmfTreeDndHandler(modelingContext, tree));
+
+ tree.addActionHandler(new EObjectActionHandler(modelingContext,
+ resourceProvider, callback));
+ // resolve by ui request. Otherwise exception
+ tree.addExpandListener(e -> container.resolveChildren(e.getItemId()));
+ scrollArea.addComponent(tree);
+
+ container = new EmfModelTreeContainer(modelingContext,
+ resourceProvider, new UiSync(UI.getCurrent()));
+ tree.setContainerDataSource(container);
+
+ tree.setItemCaptionPropertyId("label");
+ tree.setItemIconPropertyId("icon");
+ }
+
+ // private void contextMenuOpens(ContextMenuOpenEvent event) {
+ // event.getContextClickEvent().getComponent();
+ // }
+
+ /**
+ * Adds the item click listener.
+ *
+ * @param listener
+ * the listener
+ */
+ public void addItemClickListener(ItemClickListener listener) {
+ tree.addItemClickListener(listener);
+ }
+
+ /**
+ * Removes the item click listener.
+ *
+ * @param listener
+ * the listener
+ */
+ public void removeItemClickListener(ItemClickListener listener) {
+ tree.removeItemClickListener(listener);
+ }
+
+ /**
+ * Gets the selection.
+ *
+ * @return the selection
+ */
+ public EObject getSelection() {
+ return (EObject) tree.getValue();
+ }
+
+ /**
+ * Sets the selection.
+ *
+ * @param selection
+ * the new selection
+ */
+ public void setSelection(EObject selection) {
+ tree.setValue(selection);
+ }
+
+ /**
+ * Gets the root element.
+ *
+ * @return the root element
+ */
+ public EObject getRootElement() {
+ return container.getRootElement();
+ }
+
+ /**
+ * Sets the root element.
+ *
+ * @param rootElement
+ * the new root element
+ */
+ public void setRootElement(EObject rootElement) {
+ container.setRootElement(rootElement);
+ }
+
+ /**
+ * Expand.
+ *
+ * @param element
+ * the element
+ */
+ public void expand(EObject element) {
+ if(element == null) {
+ return;
+ }
+ if (tree.containsId(element)) {
+ tree.expandItem(element);
+
+ // expand parent up to the root
+ if (!tree.isRoot(element)) {
+ expand(element.eContainer());
+ }
+ } else if (element.eContainer() != null) {
+ // expand parent
+ expand(element.eContainer());
+
+ // now expand child
+ if (tree.containsId(element)) {
+ tree.expandItem(element);
+ }
+ }
+ }
+
+ /**
+ * Is required to be called.
+ */
+ public void dispose() {
+ tree = null;
+ container.dispose();
+ container = null;
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/EmfPropertyViewer.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/EmfPropertyViewer.java
new file mode 100644
index 0000000..ebc58f6
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/EmfPropertyViewer.java
@@ -0,0 +1,82 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.views;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
+import org.eclipse.osbp.vaadin.emf.data.EmfItemPropertyDescritorValueConverter;
+import org.eclipse.osbp.vaadin.emf.data.EmfPropertiesContainer;
+import org.eclipse.osbp.vaadin.emf.data.fields.EmfItemPropertyEditorField;
+
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Show properties for any given EObject.
+ */
+@SuppressWarnings("serial")
+public class EmfPropertyViewer extends CustomComponent {
+
+ /** The grid. */
+ private Grid grid;
+
+ /** The container. */
+ private EmfPropertiesContainer container;
+
+ /**
+ * Instantiates a new emf property viewer.
+ *
+ * @param modelingContext
+ * the modeling context
+ * @param resourceProvider
+ * the resource provider
+ */
+ public EmfPropertyViewer(IModelingContext modelingContext,
+ IResourceProvider resourceProvider) {
+
+ VerticalLayout mainLayout = new VerticalLayout();
+ mainLayout.setSizeFull();
+ setCompositionRoot(mainLayout);
+
+ grid = new Grid();
+ grid.setSizeFull();
+ grid.setEditorEnabled(true);
+ mainLayout.addComponent(grid);
+
+ container = new EmfPropertiesContainer(modelingContext, resourceProvider);
+ grid.setContainerDataSource(container);
+
+ grid.getColumn(EmfPropertiesContainer.KEY)
+ .setEditorField(new TextField()).setEditable(false);
+ grid.getColumn(EmfPropertiesContainer.VALUE)
+ .setConverter(new EmfItemPropertyDescritorValueConverter())
+ .setEditorField(new EmfItemPropertyEditorField(modelingContext));
+ }
+
+ /**
+ * Sets the root element.
+ *
+ * @param rootElement
+ * the new root element
+ */
+ public void setRootElement(EObject rootElement) {
+ container.setRootElement(rootElement);
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/JvmTypePropertiesTreeViewer.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/JvmTypePropertiesTreeViewer.java
new file mode 100644
index 0000000..96b7b9f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/JvmTypePropertiesTreeViewer.java
@@ -0,0 +1,210 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.views;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.common.types.JvmGenericType;
+import org.eclipse.xtext.common.types.access.IJvmTypeProvider;
+import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
+import org.eclipse.osbp.vaadin.emf.data.JvmTypePropertiesTreeContainer;
+
+import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.Tree.TreeDragMode;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Shows any {@link JvmGenericType} in a tree viewer style. Only properties
+ * (getter and setter available) are shown as details.
+ * <p>
+ * ATTENTION: This viewer MUST be disposed!
+ */
+@SuppressWarnings({ "serial", "restriction" })
+public class JvmTypePropertiesTreeViewer extends CustomComponent {
+
+ /** The tree. */
+ private Tree tree;
+
+ /** The container. */
+ private JvmTypePropertiesTreeContainer container;
+
+ /** The type provider. */
+ private IJvmTypeProvider typeProvider;
+
+ /**
+ * Instantiates a new jvm type properties tree viewer.
+ *
+ * @param modelingContext
+ * the modeling context
+ * @param resourceProvider
+ * the resource provider
+ * @param typeProvider
+ * the type provider
+ */
+ public JvmTypePropertiesTreeViewer(IModelingContext modelingContext,
+ IResourceProvider resourceProvider, IJvmTypeProvider typeProvider) {
+ this.typeProvider = typeProvider;
+ Panel mainLayout = new Panel();
+ mainLayout.setSizeFull();
+ setCompositionRoot(mainLayout);
+
+ VerticalLayout scrollArea = new VerticalLayout();
+ scrollArea.setMargin(true);
+ mainLayout.setContent(scrollArea);
+
+ tree = new Tree();
+ tree.setSizeFull();
+
+ tree.setDragMode(TreeDragMode.NODE);
+ // tree.setDropHandler(new EmfTreeDndHandler(modelingContext, tree));
+
+ // tree.addActionHandler(new EObjectActionHandler(modelingContext,
+ // resourceProvider));
+ // resolve by ui request. Otherwise exception
+ tree.addExpandListener(e -> container.resolveChildren(e.getItemId()));
+ scrollArea.addComponent(tree);
+
+ container = new JvmTypePropertiesTreeContainer(modelingContext,
+ resourceProvider, new UiSync(UI.getCurrent()));
+ tree.setContainerDataSource(container);
+
+ tree.setItemCaptionPropertyId("label");
+ tree.setItemIconPropertyId("icon");
+ }
+
+ // private void contextMenuOpens(ContextMenuOpenEvent event) {
+ // event.getContextClickEvent().getComponent();
+ // }
+
+ /**
+ * Adds the item click listener.
+ *
+ * @param listener
+ * the listener
+ */
+ public void addItemClickListener(ItemClickListener listener) {
+ tree.addItemClickListener(listener);
+ }
+
+ /**
+ * Removes the item click listener.
+ *
+ * @param listener
+ * the listener
+ */
+ public void removeItemClickListener(ItemClickListener listener) {
+ tree.removeItemClickListener(listener);
+ }
+
+ /**
+ * Gets the selection.
+ *
+ * @return the selection
+ */
+ public EObject getSelection() {
+ return (EObject) tree.getValue();
+ }
+
+ /**
+ * Sets the value.
+ *
+ * @param selection
+ * the new value
+ */
+ public void setValue(EObject selection) {
+ tree.setValue(selection);
+ }
+
+ /**
+ * Gets the root element.
+ *
+ * @return the root element
+ */
+ public JvmGenericType getRootElement() {
+ return (JvmGenericType) container.getRootElement();
+ }
+
+ /**
+ * Sets the root element.
+ *
+ * @param rootElement
+ * the new root element
+ */
+ public void setRootElement(JvmGenericType rootElement) {
+ container.setRootElement(rootElement);
+ }
+
+ /**
+ * Sets the root element.
+ *
+ * @param rootElement
+ * the new root element
+ */
+ public void setRootElement(Class<?> rootElement) {
+ container.setRootElement((JvmGenericType) typeProvider
+ .findTypeByName(rootElement.getName()));
+ }
+
+ /**
+ * Sets the root element.
+ *
+ * @param className
+ * the new root element
+ */
+ public void setRootElement(String className) {
+ container.setRootElement((JvmGenericType) typeProvider
+ .findTypeByName(className));
+ }
+
+ /**
+ * Expand.
+ *
+ * @param element
+ * the element
+ */
+ public void expand(EObject element) {
+ if (tree.containsId(element)) {
+ tree.expandItem(element);
+
+ // expand parent up to the root
+ if (!tree.isRoot(element)) {
+ expand(element.eContainer());
+ }
+ } else if (element.eContainer() != null) {
+ // expand parent
+ expand(element.eContainer());
+
+ // now expand child
+ if (tree.containsId(element)) {
+ tree.expandItem(element);
+ }
+ }
+ }
+
+ /**
+ * Is required to be called.
+ */
+ public void dispose() {
+ tree = null;
+ container.dispose();
+ container = null;
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/PaletteViewer.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/PaletteViewer.java
new file mode 100644
index 0000000..e60fcaf
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/PaletteViewer.java
@@ -0,0 +1,69 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.views;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
+import org.eclipse.osbp.vaadin.emf.api.IModelingContext;
+import org.eclipse.osbp.vaadin.emf.data.EmfModelTreeContainer;
+
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.VerticalLayout;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Shows any emfmodel in a tree viewer style.
+ */
+@SuppressWarnings("serial")
+public class PaletteViewer extends CustomComponent {
+
+ /** The tree. */
+ private Tree tree;
+
+ /** The container. */
+ private EmfModelTreeContainer container;
+
+ /**
+ * Instantiates a new palette viewer.
+ *
+ * @param modelingContext
+ * the modeling context
+ * @param resourceProvider
+ * the resource provider
+ */
+ public PaletteViewer(IModelingContext modelingContext,
+ IResourceProvider resourceProvider) {
+ Panel mainLayout = new Panel();
+ mainLayout.setSizeFull();
+ setCompositionRoot(mainLayout);
+
+ VerticalLayout scrollArea = new VerticalLayout();
+ mainLayout.setContent(scrollArea);
+
+ }
+
+ /**
+ * Sets the selected element.
+ *
+ * @param rootElement
+ * the new selected element
+ */
+ public void setSelectedElement(EObject rootElement) {
+ container.setRootElement(rootElement);
+ }
+
+}
diff --git a/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/UiSync.java b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/UiSync.java
new file mode 100644
index 0000000..2ecdeeb
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.emf/src/org/eclipse/osbp/vaadin/emf/views/UiSync.java
@@ -0,0 +1,50 @@
+/*
+ *
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * 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:
+ * Florian Pirchner - Initial implementation
+ * Loetz GmbH&Co.KG
+ *
+ */
+package org.eclipse.osbp.vaadin.emf.views;
+
+import com.vaadin.ui.UI;
+
+// TODO: Auto-generated Javadoc
+/**
+ * An abstraction to sync changes with the UI. Is required to sync model changes
+ * with the UI, since the model could also become modified in a NON-UI-Thread.
+ */
+public class UiSync {
+
+ /** The ui. */
+ private final UI ui;
+
+ /**
+ * Instantiates a new ui sync.
+ *
+ * @param ui
+ * the ui
+ */
+ public UiSync(UI ui) {
+ super();
+ this.ui = ui;
+ }
+
+ /**
+ * Syncs the runnable with the UI-Thread.
+ *
+ * @param runnable
+ * the runnable
+ */
+ public void sync(Runnable runnable) {
+ ui.accessSynchronously(runnable);
+ }
+
+}
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..f79a07e
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--#======================================================================= -->
+<!--# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany). -->
+<!--# 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: -->
+<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
+<!--#======================================================================= -->
+<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>
+
+ <parent>
+ <groupId>org.eclipse.osbp.releng.maven</groupId>
+ <artifactId>org.eclipse.osbp.releng.maven.parent.tycho</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>org.eclipse.osbp.vaadin.emf</groupId>
+ <artifactId>org.eclipse.osbp.vaadin.emf.aggregator</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <url>${osbp.site.repository.url}</url>
+ <scm>
+ <url>${osbp.scm.url}</url>
+ <connection>${osbp.scm.connection}</connection>
+ <developerConnection>${osbp.scm.connection.dev}</developerConnection>
+ <tag>HEAD</tag>
+ </scm>
+ <distributionManagement>
+ <site>
+ <id>gh-pages</id>
+ <name>OSBP GitHub Pages</name>
+ <url>${distribution.site.url}</url>
+ </site>
+ </distributionManagement>
+
+ <properties>
+ <osbp.releng.version>0.12.5-SNAPSHOT</osbp.releng.version>
+ <osbp.gitrepo.name>${project.groupId}</osbp.gitrepo.name>
+ </properties>
+
+ <modules>
+ <module>org.eclipse.osbp.vaadin.emf</module>
+ <module>org.eclipse.osbp.vaadin.emf.api</module>
+ <module>org.eclipse.osbp.vaadin.emf.feature</module>
+ </modules>
+
+ <profiles>
+ <profile>
+ <!-- switch off jarsigner if not properly configured in settings.xml -->
+ <id>donotsign</id>
+ <activation>
+ <property>
+ <name>!maven-jarsigner-plugin.keystore</name>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jarsigner-plugin</artifactId>
+ <version>1.3.2</version>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>nl.geodienstencentrum.maven</groupId>
+ <artifactId>sass-maven-plugin</artifactId>
+ <version>2.13</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </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>win32</os>
+ <ws>win32</ws>
+ <arch>x86_64</arch>
+ </environment>
+ <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>macosx</os>
+ <ws>cocoa</ws>
+ <arch>x86_64</arch>
+ </environment>
+ </environments>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>