Merge branch 'master' into json
diff --git a/devtools/org.eclipse.emf.parsley.oomph/EMFParsley.setup b/devtools/org.eclipse.emf.parsley.oomph/EMFParsley.setup
index dfbc8de..22b19f4 100644
--- a/devtools/org.eclipse.emf.parsley.oomph/EMFParsley.setup
+++ b/devtools/org.eclipse.emf.parsley.oomph/EMFParsley.setup
@@ -389,6 +389,18 @@
             name="org.eclipse.xtext.xdoc.feature.feature.group"/>
         <requirement
             name="org.eclipse.rap.tools.feature.feature.group"/>
+        <requirement
+            name="org.eclipse.jst.server_adapters.feature.feature.group"/>
+        <requirement
+            name="org.eclipse.jst.server_adapters.ext.feature.feature.group"/>
+        <requirement
+            name="org.eclipse.jst.server_ui.feature.feature.group"/>
+        <requirement
+            name="org.eclipse.jst.enterprise_ui.feature.feature.group"/>
+        <requirement
+            name="org.eclipse.wst.server_adapters.feature.feature.group"/>
+        <requirement
+            name="org.eclipse.jst.web_ui.feature.feature.group"/>
         <sourceLocator
             rootFolder="${git.clone.location}"
             locateNestedProjects="true"/>
diff --git a/devtools/org.eclipse.emf.parsley.targetplatform/mars.target b/devtools/org.eclipse.emf.parsley.targetplatform/mars.target
index 03dcf25..defb355 100644
--- a/devtools/org.eclipse.emf.parsley.targetplatform/mars.target
+++ b/devtools/org.eclipse.emf.parsley.targetplatform/mars.target
@@ -18,6 +18,12 @@
 <unit id="org.eclipse.xpand" version="0.0.0"/>
 <unit id="org.eclipse.xtend" version="0.0.0"/>
 <unit id="org.eclipse.xtend.typesystem.emf" version="0.0.0"/>
+<unit id="org.eclipse.jst.server_adapters.feature.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.jst.server_adapters.ext.feature.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.jst.server_ui.feature.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.jst.enterprise_ui.feature.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.wst.server_adapters.feature.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.jst.web_ui.feature.feature.group" version="0.0.0"/>
 <repository location="http://download.eclipse.org/releases/mars/"/>
 </location>
 <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="false" type="InstallableUnit">
diff --git a/features/org.eclipse.emf.parsley.web.feature/.project b/features/org.eclipse.emf.parsley.web.feature/.project
new file mode 100644
index 0000000..29e51c4
--- /dev/null
+++ b/features/org.eclipse.emf.parsley.web.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.parsley.web.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.emf.parsley.web.feature/about.html b/features/org.eclipse.emf.parsley.web.feature/about.html
new file mode 100644
index 0000000..c258ef5
--- /dev/null
+++ b/features/org.eclipse.emf.parsley.web.feature/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2006</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.emf.parsley.web.feature/build.properties b/features/org.eclipse.emf.parsley.web.feature/build.properties
new file mode 100644
index 0000000..e8a8ba4
--- /dev/null
+++ b/features/org.eclipse.emf.parsley.web.feature/build.properties
@@ -0,0 +1,15 @@
+###############################################################################
+# Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties,\
+               license.html,\
+               about.html,\
+               epl-v10.html
+src.includes = about.html,\
+               epl-v10.html,\
+               license.html
diff --git a/features/org.eclipse.emf.parsley.web.feature/epl-v10.html b/features/org.eclipse.emf.parsley.web.feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/features/org.eclipse.emf.parsley.web.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	
+	}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>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. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>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.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>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. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>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.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>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. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>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; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>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.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>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. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>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.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>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.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>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.</span> </p>
+
+<p><span style='font-size:10.0pt'>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. </span></p>
+
+<p><span style='font-size:10.0pt'>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. </span></p>
+
+<p><span style='font-size:10.0pt'>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.</span> </p>
+
+<p><span style='font-size:10.0pt'>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.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.emf.parsley.web.feature/feature.properties b/features/org.eclipse.emf.parsley.web.feature/feature.properties
new file mode 100644
index 0000000..ed49dee
--- /dev/null
+++ b/features/org.eclipse.emf.parsley.web.feature/feature.properties
@@ -0,0 +1,132 @@
+# "providerName" property - name of the company that provides the feature
+providerName= Eclipse Modeling Project
+copyright=Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.\n\
+\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License\n\
+v1.0 which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html Description here.
+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
diff --git a/features/org.eclipse.emf.parsley.web.feature/feature.xml b/features/org.eclipse.emf.parsley.web.feature/feature.xml
new file mode 100644
index 0000000..703cf8d
--- /dev/null
+++ b/features/org.eclipse.emf.parsley.web.feature/feature.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.emf.parsley.web.feature"
+      label="Emf Parsley Web Feature"
+      version="0.5.2.qualifier"
+      provider-name="%providerName">
+
+   <description url="http://www.eclipse.org/emfparsley">
+      Working with EMF a developer realizes that all the information are available for building basic UI.
+
+A lightweight framework that allows easy and quick development of EMF-based Applications. Can be configured to use all kind of EMF persistence implementations (XMI, Teneo, CDO).
+
+It aims at providing a set of Components like Trees, Tables and Detail Forms that manage the model with the introspective EMF capabilities. Using these components you can easily build forms, viewer or editors. The framework provides basic UI implementations which are customizable with Injection mechanism (based on Google Guice).
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="http://www.eclipse.org/legal/epl-v10.html">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.emf.parsley.sdk"
+         version="0.0.0"/>
+
+   <plugin
+         id="org.eclipse.emf.parsley.web.tools"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf.parsley.web.servlets"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.emf.parsley.web.feature/license.html b/features/org.eclipse.emf.parsley.web.feature/license.html
new file mode 100644
index 0000000..f19c483
--- /dev/null
+++ b/features/org.eclipse.emf.parsley.web.feature/license.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/org.eclipse.emf.parsley.web.feature/pom.xml b/features/org.eclipse.emf.parsley.web.feature/pom.xml
new file mode 100644
index 0000000..7ec8f57
--- /dev/null
+++ b/features/org.eclipse.emf.parsley.web.feature/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<relativePath>../../releng/org.eclipse.emf.parsley.parent/pom.xml</relativePath>
+		<groupId>org.eclipse.emf.parsley</groupId>
+		<artifactId>org.eclipse.emf.parsley.parent</artifactId>
+		<version>0.5.2-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.emf.parsley.web.feature</artifactId>
+	<packaging>eclipse-feature</packaging>
+
+</project>
\ No newline at end of file
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/.classpath b/plugins/org.eclipse.emf.parsley.web.servlets/.classpath
new file mode 100644
index 0000000..bf811b4
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/.classpath
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry including="**/*.java" kind="src" output="target/classes" path="src">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/.project b/plugins/org.eclipse.emf.parsley.web.servlets/.project
new file mode 100644
index 0000000..b698462
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/.project
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.parsley.web.servlets</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<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.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.emf.parsley.web.servlets/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/.settings/org.eclipse.wst.common.component b/plugins/org.eclipse.emf.parsley.web.servlets/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..071d828
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
+    <wb-module deploy-name="org.eclipse.emf.parsley.web.servlets">
+        <wb-resource deploy-path="/" source-path="/src"/>
+    </wb-module>
+</project-modules>
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/.settings/org.eclipse.wst.common.project.facet.core.xml b/plugins/org.eclipse.emf.parsley.web.servlets/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..926884d
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+  <fixed facet="jst.utility"/>
+  <fixed facet="java"/>
+  <installed facet="java" version="1.6"/>
+  <installed facet="jst.utility" version="1.0"/>
+</faceted-project>
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.parsley.web.servlets/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e1274a5
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Servlets
+Bundle-SymbolicName: org.eclipse.emf.parsley.web.servlets;singleton:=true
+Bundle-Version: 0.5.2.qualifier
+Export-Package: org.eclipse.emf.parsley.web.servlets
+Require-Bundle:  com.google.inject,
+ org.eclipse.emf.parsley.runtime,
+ org.eclipse.emf.parsley.runtime.common,
+ org.eclipse.emf.parsley.common,
+ javax.servlet,
+ org.eclipse.emf.edit.ui,
+ org.eclipse.ui,
+ org.eclipse.core.runtime
+Bundle-Activator: org.eclipse.emf.parsley.web.servlets.Activator
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/build.properties b/plugins/org.eclipse.emf.parsley.web.servlets/build.properties
new file mode 100644
index 0000000..286a2e8
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               pom.xml
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/pom.xml b/plugins/org.eclipse.emf.parsley.web.servlets/pom.xml
new file mode 100644
index 0000000..9adbe2a
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/pom.xml
@@ -0,0 +1,27 @@
+<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>
+		<relativePath>../../releng/org.eclipse.emf.parsley.parent/pom.xml</relativePath>
+		<groupId>org.eclipse.emf.parsley</groupId>
+		<artifactId>org.eclipse.emf.parsley.parent</artifactId>
+		<version>0.5.2-SNAPSHOT</version>
+	</parent>
+	
+  <artifactId>org.eclipse.emf.parsley.web.servlets</artifactId>
+  <packaging>eclipse-plugin</packaging>  
+  
+   <dependencies>
+	<dependency>
+		<groupId>com.google.inject.extensions</groupId>
+		<artifactId>guice-servlet</artifactId>
+		<version>4.0</version>
+	</dependency>
+	<dependency>
+		<groupId>com.googlecode.json-simple</groupId>
+		<artifactId>json-simple</artifactId>
+		<version>1.1.1</version>
+	</dependency>
+  </dependencies>
+  
+</project>
\ No newline at end of file
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/Activator.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/Activator.java
new file mode 100644
index 0000000..4d60775
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/Activator.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.web.servlets;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Plug-in Activator
+ * 
+ * @author Vincenzo Caselli
+ * 
+ */
+public class Activator extends AbstractUIPlugin {
+
+    public static final String PLUGIN_ID = "org.eclipse.emf.parsley.web.servlets"; //$NON-NLS-1$
+
+    private static Activator plugin;
+
+    public Activator() {}
+
+    public void start(BundleContext context) throws Exception {
+        super.start(context);
+        plugin = this;
+    }
+
+    public void stop(BundleContext context) throws Exception {
+        plugin = null;
+        super.stop(context);
+    }
+
+    public static Activator getDefault() {
+        return plugin;
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/Application.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/Application.java
new file mode 100644
index 0000000..246a313
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/Application.java
@@ -0,0 +1,180 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.web.servlets;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.parsley.config.Configurator;
+import org.eclipse.emf.parsley.resource.ResourceLoader;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+import com.google.inject.Injector;
+
+/**
+ * A class for handling singletons at JEE application level
+ * 
+ * @author Vincenzo Caselli
+ * 
+ */
+public class Application {
+    // private static final String HTTP_SESSION = "HTTP_SESSION";
+    private static Application application;
+
+    private Map<String, Object> id2objectMap;
+    private Map<Object, String> objec2idtMap;
+
+    private Injector injector;
+    private ResourceSet resourceSet;
+    private Display display;
+    private Shell shell;
+
+    @Inject
+    private Configurator configurator;
+    @Inject
+    private ResourceLoader resourceLoader;
+
+    private Application() {}
+
+    public static synchronized Application getInstance(HttpServletRequest request) {
+        // Application application = (Application)
+        // session.getAttribute(HTTP_SESSION);
+        if (application == null) {
+            // Create and init application object
+            application = new Application();
+            application.id2objectMap = new HashMap<String, Object>();
+            application.objec2idtMap = new HashMap<Object, String>();
+
+            application.injector = (Injector) request.getServletContext().getAttribute(Injector.class.getName());
+            // application.injector = Guice.createInjector(new ParsleyWebGuiceModule(null));
+            application.injector.injectMembers(application);
+            application.resourceSet = new ResourceSetImpl();
+
+            application.display = new Display();
+            application.shell = new Shell(application.display);
+
+            // final CyclicBarrier barrier = new CyclicBarrier(2);
+            // Thread thread = new Thread() {
+            // @Override
+            // public void run() {
+            // try {
+            // application.display = Display.getDefault();
+            // application.shell = new Shell(application.display);
+            // barrier.await();
+            // while (!application.shell.isDisposed()) {
+            // if (!application.display.readAndDispatch()) {
+            // application.display.sleep();
+            // }
+            // }
+            // } catch (Exception e) {
+            // e.printStackTrace();
+            // }
+            // }
+            // };
+            // thread.setDaemon(true);
+            // thread.start();
+            // try {
+            // barrier.await();
+            // } catch (Exception e) {
+            // e.printStackTrace();
+            // }
+            //
+            // Composite composite = new Composite();
+            //
+            // Text text = new Text(composite, 0);
+            //
+            // System.out.println("creato Text");
+
+            // ServletContext servletContext = request.getServletContext();
+            // ApplicationContextImpl applicationContext =
+            // ApplicationContextImpl.getFrom(servletContext);
+            // ServiceContext context = new ServiceContext(request, null, applicationContext);
+            // context.setServiceStore(new ServiceStore());
+            // ContextProvider.setContext(context);
+            // application.display = new Display();
+            // application.shell = new Shell(application.display);
+
+        }
+        return application;
+    }
+
+    public synchronized Resource getResource(String entity) throws IOException {
+        URI uri = configurator.createResourceURI(entity);
+        if (uri != null) {
+            Resource resource = resourceLoader.getResource(resourceSet, uri);
+            return resource;
+        } else {
+            return null;
+        }
+    }
+
+    public synchronized String put(Object object) {
+        String id = objec2idtMap.get(object);
+        if (id == null) {
+            UUID uid = UUID.randomUUID();
+            id = uid.toString();
+            id2objectMap.put(id, object);
+            objec2idtMap.put(object, id);
+        }
+        return id;
+    }
+
+    public synchronized Object get(String id) {
+        return id2objectMap.get(id);
+    }
+
+    // public ParsleyWebGuiceModule getModule() {
+    // return module;
+    // }
+
+    public Injector getInjector() {
+        return injector;
+    }
+
+    public Configurator getConfigurator() {
+        return configurator;
+    }
+
+    public synchronized ResourceLoader getResourceLoader() {
+        return resourceLoader;
+    }
+
+    public synchronized ResourceSet getResourceSet() {
+        return resourceSet;
+    }
+
+    // public AdapterFactoryEditingDomain getAdapterFactoryEditingDomain() {
+    // return adapterFactoryEditingDomain;
+    // }
+
+    public Shell getShell() {
+        return shell;
+    }
+
+    public Display getDisplay() {
+        return display;
+    }
+
+    // public void syncExec(Runnable runnable) {
+    // runnable.run();
+    // }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/DefaultRealm.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/DefaultRealm.java
new file mode 100644
index 0000000..c7891dc
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/DefaultRealm.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2014 RCP Vision (http://www.rcp-vision.com) and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of the Eclipse Public
+ * License v1.0 which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: Lorenzo Bettini - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.web.servlets;
+
+import org.eclipse.core.databinding.observable.Realm;
+
+/**
+ * Simple realm implementation that will set itself as default when constructed, this will be used
+ * for unit testing. Invoke {@link #dispose()} to remove the realm from being the default. Does not
+ * support asyncExec(...).
+ * 
+ * @author Lorenzo Bettini - Initial contribution and API
+ */
+public class DefaultRealm extends Realm {
+    private Realm previousRealm;
+
+    public DefaultRealm() {
+        previousRealm = super.setDefault(this);
+    }
+
+    /**
+     * @return always returns true
+     */
+    @Override
+    public boolean isCurrent() {
+        return true;
+    }
+
+    @Override
+    protected void syncExec(Runnable runnable) {
+        runnable.run();
+    }
+
+    /**
+     * @throws UnsupportedOperationException
+     */
+    @Override
+    public void asyncExec(Runnable runnable) {
+        throw new UnsupportedOperationException("asyncExec is unsupported");
+    }
+
+    /**
+     * Removes the realm from being the current and sets the previous realm to the default.
+     */
+    public void dispose() {
+        if (getDefault() == this) {
+            setDefault(previousRealm);
+        }
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/JsonDetailsServlet.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/JsonDetailsServlet.java
new file mode 100644
index 0000000..6914b29
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/JsonDetailsServlet.java
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.web.servlets;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.List;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.parsley.composite.DialogControlFactory;
+import org.eclipse.emf.parsley.config.Configurator;
+import org.eclipse.emf.parsley.runtime.util.PolymorphicDispatcher;
+import org.eclipse.emf.parsley.ui.provider.FeaturesProvider;
+import org.eclipse.emf.parsley.ui.provider.FormFeatureCaptionProvider;
+import org.eclipse.emf.parsley.ui.provider.ViewerLabelProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.DateTime;
+import org.eclipse.swt.widgets.Text;
+
+import com.google.inject.Injector;
+
+/**
+ * Servlet for handling generation of JSON output to represent the detail of a given EMF object
+ * 
+ * @author Vincenzo Caselli
+ * 
+ */
+public class JsonDetailsServlet extends JsonParsleyServlet {
+    private static final long serialVersionUID = 1L;
+
+    protected void doGet(final HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        Injector injector = Application.getInstance(request).getInjector();
+        Configurator configurator = Application.getInstance(request).getConfigurator();
+        final PrintWriter out = prepareOutput(response);
+
+        String id = request.getParameter(OBJECT_ID_PARAMETER);
+        String entity = request.getParameter(SWITCH_PARAMETER);
+
+        if (id != null) {
+            out.write("{ ");
+            Object element = Application.getInstance(request).get(id);
+            EObject eObject = (EObject) element;
+
+            ViewerLabelProvider labelProvider = (ViewerLabelProvider) injector.getInstance(ILabelProvider.class);
+
+            final DialogControlFactory dialogControlFactory = injector.getInstance(DialogControlFactory.class);
+            FormFeatureCaptionProvider formFeatureCaptionProvider = (FormFeatureCaptionProvider) injector.getInstance(FormFeatureCaptionProvider.class);
+            PolymorphicDispatcher<Object> imageDispatcher = PolymorphicDispatcher.createForSingleTarget("image", 1, 1, labelProvider);
+
+            EClass clazz;
+            List<EStructuralFeature> features;
+            String imagePath;
+            String label;
+            if (eObject != null) {
+                clazz = eObject.eClass();
+                imagePath = (String) imageDispatcher.invoke(element);
+                label = labelProvider.getText(eObject);
+            } else {
+                clazz = configurator.getEClass(entity);
+                imagePath = "";
+                label = "";
+            }
+            features = injector.getInstance(FeaturesProvider.class).getFeatures(clazz);
+            out.write("\"icon\" : \"" + (imagePath != null ? imagePath : "") + "\" ");
+            out.write(", \"label\" : \"" + label + "\" ");
+
+            if (eObject == null) {
+                // Case NEW: TODO refactor and avoid repetition of this
+                // block in JsonSaveServlet!
+                eObject = EcoreUtil.create(clazz);
+                Resource resource = Application.getInstance(request).getResource(entity);
+                resource.getContents().add(eObject);
+                id = Application.getInstance(request).put(eObject);
+            }
+
+            final EObject eObject1 = eObject;
+            // Application.getInstance(request).getDisplay().syncExec(new Runnable() {
+            // @Override
+            // public void run() {
+            // }
+            // });
+                    new DefaultRealm();
+                    dialogControlFactory.init(null, eObject1, Application.getInstance(request).getShell());
+
+            out.write(", \"" + OBJECT_ID_PARAMETER + "\" : \"" + id + "\" ");
+            for (final EStructuralFeature eStructuralFeature : features) {
+                out.write(",");
+                String featureName = eStructuralFeature.getName(); // not used
+                                                                   // since
+                                                                   // FeatureCaptionProvider
+                                                                   // override
+                                                                   // it
+                String featureCaption = formFeatureCaptionProvider.getText(clazz, eStructuralFeature);
+                out.write("\"" + featureName + "\" : {" + "\"caption\": \"" + featureCaption + "\",");
+                // final Wrapper<Control> wrapper = Wrapper.forType(Control.class);
+
+                final String value = labelProvider.getText(eObject.eGet(eStructuralFeature));
+                // Application.getInstance(request).getDisplay().syncExec(new Runnable() {
+                // @Override
+                // public void run() {}
+                // });
+
+                        new DefaultRealm();
+                        Control control = dialogControlFactory.create(eStructuralFeature);
+                        // wrapper.set(control);
+                        // System.out.println(control);
+                        // Control control = wrapper.get();
+                        if (control instanceof Text) {
+                            Text text = (Text) control;
+                            // value = text.getText();
+                            boolean multiLine = (text.getStyle() & SWT.MULTI) > 0;
+                            String type = multiLine ? "textarea" : "text";
+                            out.write(" \"type\": \"" + type + "\",");
+                        } else if (control instanceof Combo) {
+                            String proposalsList = "";
+                            Combo combo = (Combo) control;
+                            String[] proposals = combo.getItems();
+                            // value = combo.getText();
+                            boolean first = true;
+                            for (Object proposal : proposals) {
+                                if (!first) {
+                                    proposalsList += ",";
+                                }
+                                proposalsList += "\"" + proposal + "\"";
+                                first = false;
+                            }
+                            out.write(" \"type\": \"combo\",");
+                            out.write(" \"proposals\": [" + proposalsList + "],");
+                        } else if (control instanceof Button) {
+                            Button button = (Button) control;
+                            // value = "" + button.getSelection();
+                            out.write(" \"type\": \"button\",");
+                        } else if (control instanceof DateTime) {
+                            out.write(" \"type\": \"datetime\",");
+                        }
+                        out.write(" \"value\": \"" + (value == null ? "" : value) + "\"" + "} ");
+
+            }
+            out.write("} ");
+        }
+
+        closeOutput(out);
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/JsonParsleyServlet.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/JsonParsleyServlet.java
new file mode 100644
index 0000000..6958a23
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/JsonParsleyServlet.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.web.servlets;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Super-class Servlet that provides common behaviours
+ * 
+ * @author Vincenzo Caselli
+ * 
+ */
+public class JsonParsleyServlet extends HttpServlet {
+
+    public static final String OBJECT_ID_PARAMETER = "id";
+    public static final String SWITCH_PARAMETER = "s";
+
+    protected PrintWriter prepareOutput(HttpServletResponse response) throws IOException {
+
+        PrintWriter out = response.getWriter();
+        response.setContentType("text/html");
+        response.addHeader("Access-Control-Allow-Origin", "*");
+        return out;
+    }
+
+    protected void closeOutput(PrintWriter out) throws IOException {
+        out.flush();
+        out.close();
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/JsonSaveServlet.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/JsonSaveServlet.java
new file mode 100644
index 0000000..22b678b
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/JsonSaveServlet.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.web.servlets;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.emf.parsley.composite.DialogControlFactory;
+import org.eclipse.emf.parsley.config.Configurator;
+import org.eclipse.emf.parsley.util.FeatureHelper;
+
+import com.google.inject.Injector;
+
+/**
+ * Servlet for handling the submission of a JSON object that will be re-mapped into an EMF object and saved into the EMF Resource when available
+ * 
+ * @author Vincenzo Caselli
+ * 
+ */
+public class JsonSaveServlet extends JsonParsleyServlet {
+    private static final long serialVersionUID = 1L;
+
+    protected void doPut(final HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        final Injector injector = Application.getInstance(request).getInjector();
+        Configurator configurator = Application.getInstance(request).getConfigurator();
+        final DialogControlFactory dialogControlFactory = injector.getInstance(DialogControlFactory.class);
+        final FeatureHelper featureHelper = injector.getInstance(FeatureHelper.class);
+
+        PrintWriter out = prepareOutput(response);
+        // Read from request
+        StringBuilder buffer = new StringBuilder();
+        BufferedReader reader = request.getReader();
+        String line;
+        while ((line = reader.readLine()) != null) {
+            buffer.append(line);
+        }
+        String data = buffer.toString();
+        System.out.println(data);
+        final String entity = request.getParameter(SWITCH_PARAMETER);
+
+        try {
+//            final JSONObject jsonEntity = (JSONObject) new JSONParser().parse(data);
+//            String id = jsonEntity.get(OBJECT_ID_PARAMETER).toString();
+//            System.out.println(id);
+//            EObject eObject = (EObject) Application.getInstance(request).get(id);
+//            System.out.println(eObject);
+//
+//            final ViewerLabelProvider labelProvider = (ViewerLabelProvider) injector.getInstance(ILabelProvider.class);
+//
+//            if (eObject == null) {
+//                EClass clazz = configurator.getEClass(entity);
+//                eObject = EcoreUtil.create(clazz);
+//            }
+//
+//            final EObject eObject1 = eObject;
+            // Application.getInstance(request).getDisplay().syncExec(new Runnable() {
+            // @Override
+            // public void run() {
+            // new DefaultRealm();
+            // dialogControlFactory.init(null, eObject1,
+            // Application.getInstance(request).getShell());
+            // List<EStructuralFeature> features =
+            // injector.getInstance(FeaturesProvider.class).getEObjectFeatures(eObject1);
+            // for (final EStructuralFeature eStructuralFeature : features) {
+            // JSONObject featureObject = (JSONObject) jsonEntity.get(eStructuralFeature.getName());
+            // System.out.println(featureObject);
+            // final String newValue = featureObject.get("value").toString();
+            // System.out.println(newValue);
+            // if (eStructuralFeature instanceof EAttribute) {
+            // if (featureHelper.isBooleanFeature(eStructuralFeature)) {
+            // eObject1.eSet(eStructuralFeature, newValue.equals("true"));
+            // } else {
+            // eObject1.eSet(eStructuralFeature, newValue);
+            // }
+            // } else if (eStructuralFeature instanceof EReference) {
+            // Control control = dialogControlFactory.create(eStructuralFeature);
+            // List<Object> proposalObjects =
+            // dialogControlFactory.getProposalCreator().proposals(eObject1, eStructuralFeature);
+            // if (control instanceof Combo) {
+            // // Combo combo = (Combo) control;
+            // // String[] proposals = combo.getItems();
+            // for (Object proposal : proposalObjects) {
+            // if (labelProvider.getText(proposal).equals(newValue)) {
+            // eObject1.eSet(eStructuralFeature, proposal);
+            // break;
+            // }
+            // }
+            // }
+            // }
+            // }
+            //
+            // try {
+            // Resource resource = Application.getInstance(request).getResource(entity);
+            // resource.save(null);
+            // } catch (IOException e) {
+            // e.printStackTrace();
+            // }
+            // }
+            // });
+
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        closeOutput(out);
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/JsonTableServlet.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/JsonTableServlet.java
new file mode 100644
index 0000000..d26ac0b
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/JsonTableServlet.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.web.servlets;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.List;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.parsley.config.Configurator;
+import org.eclipse.emf.parsley.edit.ui.provider.TableViewerContentProvider;
+import org.eclipse.emf.parsley.edit.ui.provider.TableViewerContentProviderFactory;
+import org.eclipse.emf.parsley.resource.ResourceLoader;
+import org.eclipse.emf.parsley.ui.provider.FeatureCaptionProvider;
+import org.eclipse.emf.parsley.ui.provider.TableFeaturesProvider;
+import org.eclipse.emf.parsley.ui.provider.ViewerLabelProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.ui.IViewPart;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+import com.google.inject.Injector;
+
+
+
+/**
+ * Servlet for handling generation of JSON output to represent a list of EMF objects
+ * 
+ * @author Vincenzo Caselli
+ * 
+ */
+public class JsonTableServlet extends JsonParsleyServlet {
+    private static final long serialVersionUID = 1L;
+
+    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        Injector injector = Application.getInstance(request).getInjector();
+        Configurator configurator = Application.getInstance(request).getConfigurator();
+
+        PrintWriter out = prepareOutput(response);
+        out.write("[");
+
+        String s = request.getParameter(SWITCH_PARAMETER);
+        System.out.println(s);
+
+        IViewPart viewpartClass;
+		try {
+			String partQN = getPartQN(s);
+			viewpartClass = (IViewPart) Class.forName(partQN).newInstance();
+
+			ResourceLoader loader = injector.getInstance(ResourceLoader.class);
+
+			URI uri = configurator.createResourceURI(viewpartClass);
+			AdapterFactoryEditingDomain ed = injector.getProvider(AdapterFactoryEditingDomain.class).get();
+//			ResourceSet resourceSet = ed.getResourceSet();
+//			resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl());
+//			// resourceSet.getPackageRegistry().put(ProductsPackage.eNS_URI, ProductsPackage.eINSTANCE);
+//			resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap().put("dummy",	new XMIResourceFactoryImpl());
+			// Resource resource = loader.getResource(resourceSet, uri);
+			Resource resource = loader.getResource(ed, uri).getResource();
+
+			ResourceLoader resourceLoader = Application.getInstance(request).getResourceLoader();
+			System.out.println(resourceLoader);
+			Resource resource1 = resourceLoader.getResource(ed, uri).getResource();
+		    System.out.println(resource1);    
+			
+	        FeatureCaptionProvider featureCaptionProvider = injector.getInstance(FeatureCaptionProvider.class);
+
+	        EClass clazz = configurator.getEClass(viewpartClass);
+
+	        ViewerLabelProvider labelProvider = (ViewerLabelProvider) injector.getInstance(ILabelProvider.class);
+	        TableViewerContentProvider tvcp = injector.getInstance(TableViewerContentProviderFactory.class).createTableViewerContentProvider(clazz);
+
+	        Object[] contents = tvcp.getElements(resource);
+	        
+	        boolean first = true;
+	        for (Object object : contents) {
+	            EObject eObject = (EObject) object;
+	            if (eObject.eClass().equals(clazz)) {
+	                String id = Application.getInstance(request).put(eObject);
+	                if (!first) {
+	                    out.write(",");
+	                }
+	                List<EStructuralFeature> features = injector.getInstance(TableFeaturesProvider.class).getFeatures(eObject.eClass());
+	                String outString = "{\"$" + OBJECT_ID_PARAMETER + "\" : \"" + id + "\", ";
+	                for (EStructuralFeature eStructuralFeature : features) {
+	                    String featureCaption = featureCaptionProvider.getText(clazz, eStructuralFeature);
+	                    outString += "\"" + featureCaption + "\": \"" + labelProvider.getText(eObject.eGet(eStructuralFeature)) + "\",";
+	                }
+	                outString = outString.substring(0, outString.length() - 1);
+	                outString += "}";
+	                out.write(outString);
+	                first = false;
+	            }
+	        }
+	        
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw new ServletException("Unable to resolve viewPart instance for "+"aa.UsersView"); 
+		}
+
+        out.write("]");
+        closeOutput(out);
+    }
+
+	private String getPartQN(String viewId) throws ParserConfigurationException, SAXException, IOException {
+		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+		DocumentBuilder db = dbf.newDocumentBuilder();
+		//NOTE: plugin.xml must be on the classpath, e.g. into /src folder
+		Document doc = db.parse(getClass().getResourceAsStream("/plugin.xml"));
+		NodeList viewNodes = doc.getElementsByTagName("view");
+		for (int i = 0; i < viewNodes.getLength(); i++) {
+			Node viewNode = viewNodes.item(i);
+			NamedNodeMap attrs = viewNode.getAttributes();
+			if (viewId.equals(attrs.getNamedItem("id").getNodeValue())) {
+				return attrs.getNamedItem("class").getNodeValue().split(":")[1];
+			}
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/WebViewPart.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/WebViewPart.java
new file mode 100644
index 0000000..f072af7
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/emf/parsley/web/servlets/WebViewPart.java
@@ -0,0 +1,76 @@
+package org.eclipse.emf.parsley.web.servlets;
+
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IPropertyListener;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.PartInitException;
+
+public class WebViewPart implements IViewPart {
+
+	@Override
+	public void addPropertyListener(IPropertyListener listener) {
+	}
+
+	@Override
+	public void createPartControl(Composite parent) {
+	}
+
+	@Override
+	public void dispose() {
+	}
+
+	@Override
+	public IWorkbenchPartSite getSite() {
+		return null;
+	}
+
+	@Override
+	public String getTitle() {
+		return null;
+	}
+
+	@Override
+	public Image getTitleImage() {
+		return null;
+	}
+
+	@Override
+	public String getTitleToolTip() {
+		return null;
+	}
+
+	@Override
+	public void removePropertyListener(IPropertyListener listener) {
+	}
+
+	@Override
+	public void setFocus() {
+	}
+
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		return null;
+	}
+
+	@Override
+	public IViewSite getViewSite() {
+		return null;
+	}
+
+	@Override
+	public void init(IViewSite site) throws PartInitException {
+	}
+
+	@Override
+	public void init(IViewSite site, IMemento memento) throws PartInitException {
+	}
+
+	@Override
+	public void saveState(IMemento memento) {
+	}
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/SWT.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/SWT.java
new file mode 100644
index 0000000..7c4759f
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/SWT.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt;
+
+
+public class SWT {
+
+    public static final int NONE = 0;
+    public static final int BEGINNING = 1;
+    public static final int BORDER = 1 << 11;
+    public static final int H_SCROLL = 1 << 8;
+    public static final int V_SCROLL = 1 << 9;
+    public static final int DROP_DOWN = 1 << 2;
+    public static final int SIMPLE = 1 << 6;
+    public static final int READ_ONLY = 1 << 3;
+    public static final int NO_SCROLL = 1 << 4;
+    public static final int SINGLE = 1 << 2;
+    public static final int MULTI = 1 << 1;
+    public static final int FLAT = 1 << 23;
+
+    public static final int ERROR_NULL_ARGUMENT = 4;
+
+    public static final int TRAIL = 1 << 17;
+    public static final int LEAD = 1 << 14;
+
+    public static final int LEFT = LEAD;
+    public static final int RIGHT = TRAIL;
+    public static final int CENTER = 1 << 24;
+
+    public static final int LEFT_TO_RIGHT = 1 << 25;
+    public static final int RIGHT_TO_LEFT = 1 << 26;
+    public static final int NO_TRIM = 1 << 3;
+
+    public static final int ERROR_WIDGET_DISPOSED = 24;
+
+    public static final int SEARCH = 1 << 7;
+    public static final int PASSWORD = 1 << 22;
+    public static final int WRAP = 1 << 6;
+    public static final int CLOSE = 1 << 6;
+    public static final int TITLE = 1 << 5;
+    public static final int MIN = 1 << 7;
+    public static final int MAX = 1 << 10;
+    public static final int RESIZE = 1 << 4;
+    public static final int SHEET = 1 << 28;
+    public static final int ALL = 1 << 0;
+    public static final int ARROW = 1 << 2;
+    public static final int DOWN = 1 << 10;
+    public static final int UP = 1 << 7;
+
+    public static final int MIRRORED = 1 << 27;
+    public static final int TRANSPARENT = 1 << 30;
+    public static final int SYSTEM_MODAL = 1 << 17;
+    public static final int APPLICATION_MODAL = 1 << 16;
+    public static final int NO_FOCUS = 1 << 19;
+    public static final int ERROR_INVALID_RANGE = 6;
+    public static final int ERROR_INVALID_ARGUMENT = 5;
+
+    public static final int PRIMARY_MODAL = 1 << 15;
+
+    public static final int SHELL_TRIM = CLOSE | TITLE | MIN | MAX | RESIZE;
+    public static final int DIALOG_TRIM = TITLE | CLOSE | BORDER;
+
+    public static final int Modify = 24;
+    public static final int Dispose = 12;
+
+    public static final String SKIN_CLASS = "org.eclipse.swt.skin.class"; //$NON-NLS-1$
+    public static final String SKIN_ID = "org.eclipse.swt.skin.id"; //$NON-NLS-1$
+    public static final int KeyDown = 1;
+    public static final int KeyUp = 2;
+    public static final int Verify = 25;
+
+
+    public static final int TOGGLE = 1 << 1;
+    public static final int PUSH = 1 << 3;
+    public static final int RADIO = 1 << 4;
+    public static final int CHECK = 1 << 5;
+    public static final int COMMAND = 1 << 22;
+
+    public static void error(int code) {
+        System.err.println(code); /// +
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/CCombo.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/CCombo.java
new file mode 100644
index 0000000..4d3d9cf
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/CCombo.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.custom;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.TypedListener;
+
+public class CCombo extends Composite {
+
+    Text text;
+    List list;
+    int visibleItemCount = 5;
+    Shell popup;
+    Button arrow;
+    boolean hasFocus;
+    Listener listener, filter;
+    Color foreground, background;
+    Font font;
+    Shell _shell;
+
+    static final String PACKAGE_PREFIX = "org.eclipse.swt.custom."; //$NON-NLS-1$
+
+    public CCombo(Composite parent, int style) {
+        super(parent, style = checkStyle(style));
+        _shell = super.getShell();
+
+        int textStyle = SWT.SINGLE;
+        if ((style & SWT.READ_ONLY) != 0)
+            textStyle |= SWT.READ_ONLY;
+        if ((style & SWT.FLAT) != 0)
+            textStyle |= SWT.FLAT;
+        text = new Text(this, textStyle);
+        int arrowStyle = SWT.ARROW | SWT.DOWN;
+        if ((style & SWT.FLAT) != 0)
+            arrowStyle |= SWT.FLAT;
+        arrow = new Button(this, arrowStyle);
+
+    }
+
+    static int checkStyle(int style) {
+        int mask = SWT.BORDER | SWT.READ_ONLY | SWT.FLAT | SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT;
+        return SWT.NO_FOCUS | (style & mask);
+    }
+
+    public void add(String string) {
+        // checkWidget();
+        if (string == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        list.add(string);
+    }
+
+    public void add(String string, int index) {
+        // checkWidget();
+        if (string == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        list.add(string, index);
+    }
+
+    public void addModifyListener(ModifyListener listener) {
+        // checkWidget();
+        if (listener == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        TypedListener typedListener = new TypedListener(listener);
+        addListener(SWT.Modify, typedListener);
+    }
+
+    public void addSelectionListener(SelectionListener listener) {
+        // checkWidget();
+        if (listener == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        TypedListener typedListener = new TypedListener(listener);
+        // addListener(SWT.Selection, typedListener);
+        // addListener(SWT.DefaultSelection, typedListener);
+        // +
+    }
+
+    public void addVerifyListener(VerifyListener listener) {
+        // checkWidget();
+        if (listener == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        TypedListener typedListener = new TypedListener(listener);
+        addListener(SWT.Verify, typedListener);
+    }
+
+    void arrowEvent(Event event) {}
+
+    public void clearSelection() {
+        // checkWidget();
+        text.clearSelection();
+        // list.deselectAll();
+        /// +
+    }
+
+
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/SashForm.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/SashForm.java
new file mode 100644
index 0000000..d5345e0
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/SashForm.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.custom;
+
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+
+public class SashForm extends Composite {
+
+
+    public SashForm(Composite parent, int style) {
+        super(parent, checkStyle(style));
+    }
+
+    static int checkStyle(int style) {
+        int mask = SWT.BORDER | SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT;
+        return style & mask;
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/ScrolledComposite.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/ScrolledComposite.java
new file mode 100644
index 0000000..49723b7
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/ScrolledComposite.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.custom;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+
+public class ScrolledComposite extends Composite {
+
+
+    public ScrolledComposite(Composite parent, int style) {
+        super(parent, checkStyle(style));
+    }
+
+    static int checkStyle(int style) {
+        int mask = SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT;
+        return style & mask;
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/StyledText.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/StyledText.java
new file mode 100644
index 0000000..c4d49c2
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/StyledText.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.custom;
+
+
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+
+public class StyledText extends Canvas {
+
+    public StyledText(Composite parent, int style) {
+        super(parent, checkStyle(style));
+    }
+
+    static int checkStyle(int style) {
+        // if ((style & SWT.SINGLE) != 0) {
+        // style &= ~(SWT.H_SCROLL | SWT.V_SCROLL | SWT.WRAP | SWT.MULTI);
+        // } else {
+        // style |= SWT.MULTI;
+        // if ((style & SWT.WRAP) != 0) {
+        // style &= ~SWT.H_SCROLL;
+        // }
+        // }
+        // style |= SWT.NO_REDRAW_RESIZE | SWT.DOUBLE_BUFFERED | SWT.NO_BACKGROUND;
+        // /* Clear SWT.CENTER to avoid the conflict with SWT.EMBEDDED */
+        // return style & ~SWT.CENTER;
+        return style;
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/TableTree.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/TableTree.java
new file mode 100644
index 0000000..652d0b8
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/TableTree.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.custom;
+
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.events.TreeListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TypedListener;
+
+@Deprecated
+public class TableTree extends Composite {
+    Table table;
+    TableTreeItem[] items = EMPTY_ITEMS;
+    Image plusImage, minusImage, sizeImage;
+    Listener listener;
+
+    boolean inDispose = false;
+
+    static final TableTreeItem[] EMPTY_ITEMS = new TableTreeItem[0];
+    static final String[] EMPTY_TEXTS = new String[0];
+    static final Image[] EMPTY_IMAGES = new Image[0];
+    static final String ITEMID = "TableTreeItemID"; //$NON-NLS-1$
+
+    public TableTree(Composite parent, int style) {
+        super(parent, checkStyle(style));
+        table = new Table(this, style);
+    }
+
+
+    int addItem(TableTreeItem item, int index) {
+        if (index < 0 || index > items.length)
+            SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+        TableTreeItem[] newItems = new TableTreeItem[items.length + 1];
+        System.arraycopy(items, 0, newItems, 0, index);
+        newItems[index] = item;
+        System.arraycopy(items, index, newItems, index + 1, items.length - index);
+        items = newItems;
+
+        /* Return the index in the table where this table should be inserted */
+        if (index == items.length - 1)
+            return table.getItemCount();
+        else
+            return table.indexOf(items[index + 1].tableItem);
+    }
+
+
+    public void addSelectionListener(SelectionListener listener) {
+        // checkWidget();
+        if (listener == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        TypedListener typedListener = new TypedListener(listener);
+        // addListener(SWT.Selection, typedListener);
+        // addListener(SWT.DefaultSelection, typedListener);
+    }
+
+    public void addTreeListener(TreeListener listener) {
+        // checkWidget();
+        if (listener == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        TypedListener typedListener = new TypedListener(listener);
+        // addListener(SWT.Expand, typedListener);
+        // addListener(SWT.Collapse, typedListener);
+    }
+
+    private static int checkStyle(int style) {
+        int mask = SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT;
+        style = style & mask;
+        return style;
+    }
+
+    public int getItemCount() {
+        // checkWidget();
+        return items.length;
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/TableTreeItem.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/TableTreeItem.java
new file mode 100644
index 0000000..8db71bc
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/custom/TableTreeItem.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.custom;
+
+
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Item;
+import org.eclipse.swt.widgets.TableItem;
+
+/**
+ * A TableTreeItem is a selectable user interface object that represents an item in a hierarchy of
+ * items in a TableTree.
+ * 
+ * @deprecated As of 3.1 use Tree, TreeItem and TreeColumn
+ */
+@Deprecated
+public class TableTreeItem extends Item {
+    TableItem tableItem;
+    TableTree parent;
+    TableTreeItem parentItem;
+    TableTreeItem[] items = TableTree.EMPTY_ITEMS;
+    String[] texts = TableTree.EMPTY_TEXTS;
+    Image[] images = TableTree.EMPTY_IMAGES;
+    Color background;
+    Color foreground;
+    Font font;
+    boolean expanded;
+    boolean checked;
+    boolean grayed;
+
+    public TableTreeItem(TableTree parent, int style) {
+        this(parent, style, parent.getItemCount());
+    }
+
+    public TableTreeItem(TableTree parent, int style, int index) {
+        this(parent, null, style, index);
+    }
+
+    public TableTreeItem(TableTreeItem parent, int style) {
+        this(parent, style, parent.getItemCount());
+    }
+
+    public TableTreeItem(TableTreeItem parent, int style, int index) {
+        this(parent.getParent(), parent, style, index);
+    }
+
+    TableTreeItem(TableTree parent, TableTreeItem parentItem, int style, int index) {
+        super(parent, style);
+        this.parent = parent;
+        this.parentItem = parentItem;
+        // if (parentItem == null) {
+        //
+        // /* Root items are visible immediately */
+        // int tableIndex = parent.addItem(this, index);
+        // tableItem = new TableItem(parent.getTable(), style, tableIndex);
+        // tableItem.setData(TableTree.ITEMID, this);
+        // addCheck();
+        // /*
+        // * Feature in the Table. The table uses the first image that is inserted into the table
+        // * to size the table rows. If the user is allowed to insert the first image, this will
+        // * cause the +/- images to be scaled. The fix is to insert a dummy image to force the
+        // * size.
+        // */
+        // if (parent.sizeImage == null) {
+        // int itemHeight = parent.getItemHeight();
+        // parent.sizeImage = new Image(parent.getDisplay(), itemHeight, itemHeight);
+        // GC gc = new GC(parent.sizeImage);
+        // gc.setBackground(parent.getBackground());
+        // gc.fillRectangle(0, 0, itemHeight, itemHeight);
+        // gc.dispose();
+        // tableItem.setImage(0, parent.sizeImage);
+        // }
+        // } else {
+        // parentItem.addItem(this, index);
+        // }
+    }
+
+    public TableTree getParent() {
+        // checkWidget();
+        return parent;
+    }
+
+    public int getItemCount() {
+        // checkWidget();
+        return items.length;
+    }
+
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/dnd/DragSourceListener.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/dnd/DragSourceListener.java
new file mode 100644
index 0000000..6de80c3
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/dnd/DragSourceListener.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.dnd;
+
+import java.awt.dnd.DragSourceEvent;
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+public interface DragSourceListener extends SWTEventListener {
+
+    public void dragStart(DragSourceEvent event);
+
+    public void dragSetData(DragSourceEvent event);
+
+    public void dragFinished(DragSourceEvent event);
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/dnd/DropTargetListener.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/dnd/DropTargetListener.java
new file mode 100644
index 0000000..15f016b
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/dnd/DropTargetListener.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.dnd;
+
+import java.awt.dnd.DropTargetEvent;
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+public interface DropTargetListener extends SWTEventListener {
+
+    public void dragEnter(DropTargetEvent event);
+
+    public void dragLeave(DropTargetEvent event);
+
+    public void dragOperationChanged(DropTargetEvent event);
+
+    public void dragOver(DropTargetEvent event);
+
+    public void drop(DropTargetEvent event);
+
+    public void dropAccept(DropTargetEvent event);
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/DisposeEvent.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/DisposeEvent.java
new file mode 100644
index 0000000..c546eea
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/DisposeEvent.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.widgets.Event;
+
+/**
+ * Instances of this class are sent as a result of widgets being disposed.
+ *
+ * @see DisposeListener
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class DisposeEvent extends TypedEvent {
+
+    static final long serialVersionUID = 3257566187633521206L;
+
+    /**
+     * Constructs a new instance of this class based on the information in the given untyped event.
+     *
+     * @param e the untyped event containing the information
+     */
+    public DisposeEvent(Event e) {
+        super(e);
+    }
+
+}
+
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/DisposeListener.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/DisposeListener.java
new file mode 100644
index 0000000..298c01e
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/DisposeListener.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * Classes which implement this interface provide a method that deals with the event that is
+ * generated when a widget is disposed.
+ * <p>
+ * After creating an instance of a class that implements this interface it can be added to a widget
+ * using the <code>addDisposeListener</code> method and removed using the
+ * <code>removeDisposeListener</code> method. When a widget is disposed, the widgetDisposed method
+ * will be invoked.
+ * </p>
+ *
+ * @see DisposeEvent
+ */
+public interface DisposeListener extends SWTEventListener {
+
+    /**
+     * Sent when the widget is disposed.
+     *
+     * @param e an event containing information about the dispose
+     */
+    public void widgetDisposed(DisposeEvent e);
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/HelpEvent.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/HelpEvent.java
new file mode 100644
index 0000000..b0da8ba
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/HelpEvent.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.widgets.Event;
+
+/**
+ * Instances of this class are sent as a result of help being requested for a widget.
+ *
+ * @see HelpListener
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class HelpEvent extends TypedEvent {
+
+    static final long serialVersionUID = 3257001038606251315L;
+
+    /**
+     * Constructs a new instance of this class based on the information in the given untyped event.
+     *
+     * @param e the untyped event containing the information
+     */
+    public HelpEvent(Event e) {
+        super(e);
+    }
+
+}
+
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/HelpListener.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/HelpListener.java
new file mode 100644
index 0000000..e1a2df0
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/HelpListener.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * Classes which implement this interface provide a method that deals with the event that is
+ * generated when help is requested for a control, typically when the user presses F1.
+ * <p>
+ * After creating an instance of a class that implements this interface it can be added to a control
+ * using the <code>addHelpListener</code> method and removed using the
+ * <code>removeHelpListener</code> method. When help is requested for a control, the helpRequested
+ * method will be invoked.
+ * </p>
+ *
+ * @see HelpEvent
+ */
+public interface HelpListener extends SWTEventListener {
+
+    /**
+     * Sent when help is requested for a control, typically when the user presses F1.
+     *
+     * @param e an event containing information about the help
+     */
+    public void helpRequested(HelpEvent e);
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/KeyEvent.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/KeyEvent.java
new file mode 100644
index 0000000..d75922b
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/KeyEvent.java
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.widgets.Event;
+
+/**
+ * Instances of this class are sent as a result of keys being pressed and released on the keyboard.
+ * <p>
+ * When a key listener is added to a control, the control will take part in widget traversal. By
+ * default, all traversal keys (such as the tab key and so on) are delivered to the control. In
+ * order for a control to take part in traversal, it should listen for traversal events. Otherwise,
+ * the user can traverse into a control but not out. Note that native controls such as table and
+ * tree implement key traversal in the operating system. It is not necessary to add traversal
+ * listeners for these controls, unless you want to override the default traversal.
+ * </p>
+ *
+ * @see KeyListener
+ * @see TraverseListener
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public class KeyEvent extends TypedEvent {
+
+    /**
+     * the character represented by the key that was typed. This is the final character that results
+     * after all modifiers have been applied. For example, when the user types Ctrl+A, the character
+     * value is 0x01. It is important that applications do not attempt to modify the character value
+     * based on a stateMask (such as SWT.CTRL) or the resulting character will not be correct.
+     */
+    public char character;
+
+    /**
+     * the key code of the key that was typed, as defined by the key code constants in class
+     * <code>SWT</code>. When the character field of the event is ambiguous, this field contains the
+     * unicode value of the original character. For example, typing Ctrl+M or Return both result in
+     * the character '\r' but the keyCode field will also contain '\r' when Return was typed.
+     * 
+     * @see org.eclipse.swt.SWT
+     */
+    public int keyCode;
+
+    /**
+     * depending on the event, the location of key specified by the keyCode or character. The
+     * possible values for this field are <code>SWT.LEFT</code>, <code>SWT.RIGHT</code>,
+     * <code>SWT.KEYPAD</code>, or <code>SWT.NONE</code> representing the main keyboard area.
+     * <p>
+     * The location field can be used to differentiate key events that have the same key code and
+     * character but are generated by different keys on the keyboard. For example, a key down event
+     * with the key code equal to SWT.SHIFT can be generated by the left and the right shift keys on
+     * the keyboard.
+     * </p>
+     * <p>
+     * The location field can only be used to determine the location of the key code or character in
+     * the current event. It does not include information about the location of modifiers in the
+     * state mask.
+     * </p>
+     * 
+     * @see org.eclipse.swt.SWT#LEFT
+     * @see org.eclipse.swt.SWT#RIGHT
+     * @see org.eclipse.swt.SWT#KEYPAD
+     * 
+     * @since 3.6
+     */
+    public int keyLocation;
+
+    /**
+     * the state of the keyboard modifier keys and mouse masks at the time the event was generated.
+     * 
+     * @see org.eclipse.swt.SWT#MODIFIER_MASK
+     * @see org.eclipse.swt.SWT#BUTTON_MASK
+     */
+    public int stateMask;
+
+    /**
+     * A flag indicating whether the operation should be allowed. Setting this field to
+     * <code>false</code> will cancel the operation.
+     */
+    public boolean doit;
+
+    static final long serialVersionUID = 3256442491011412789L;
+
+    /**
+     * Constructs a new instance of this class based on the information in the given untyped event.
+     *
+     * @param e the untyped event containing the information
+     */
+    public KeyEvent(Event e) {
+        super(e);
+        this.character = e.character;
+        this.keyCode = e.keyCode;
+        this.keyLocation = e.keyLocation;
+        this.stateMask = e.stateMask;
+        this.doit = e.doit;
+    }
+
+    /**
+     * Returns a string containing a concise, human-readable description of the receiver.
+     *
+     * @return a string representation of the event
+     */
+    @Override
+    public String toString() {
+        String string = super.toString();
+        return string.substring(0, string.length() - 1) // remove trailing '}'
+                        + " character='" + ((character == 0) ? "\\0" : String.valueOf(character)) + "'=0x" + Integer.toHexString(character) + " keyCode=0x" + Integer.toHexString(keyCode)
+                        + " keyLocation=0x" + Integer.toHexString(keyLocation) + " stateMask=0x" + Integer.toHexString(stateMask) + " doit=" + doit + "}";
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/KeyListener.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/KeyListener.java
new file mode 100644
index 0000000..3d2fee2
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/KeyListener.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * Classes which implement this interface provide methods that deal with the events that are
+ * generated as keys are pressed on the system keyboard.
+ * <p>
+ * After creating an instance of a class that implements this interface it can be added to a control
+ * using the <code>addKeyListener</code> method and removed using the <code>removeKeyListener</code>
+ * method. When a key is pressed or released, the appropriate method will be invoked.
+ * </p>
+ *
+ * @see KeyAdapter
+ * @see KeyEvent
+ */
+public interface KeyListener extends SWTEventListener {
+
+    /**
+     * Sent when a key is pressed on the system keyboard.
+     *
+     * @param e an event containing information about the key press
+     */
+    public void keyPressed(KeyEvent e);
+
+    /**
+     * Sent when a key is released on the system keyboard.
+     *
+     * @param e an event containing information about the key release
+     */
+    public void keyReleased(KeyEvent e);
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/ModifyEvent.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/ModifyEvent.java
new file mode 100644
index 0000000..e73a917
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/ModifyEvent.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.widgets.Event;
+
+/**
+ * Instances of this class are sent as a result of text being modified.
+ *
+ * @see ModifyListener
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class ModifyEvent extends TypedEvent {
+
+    static final long serialVersionUID = 3258129146227011891L;
+
+    /**
+     * Constructs a new instance of this class based on the information in the given untyped event.
+     *
+     * @param e the untyped event containing the information
+     */
+    public ModifyEvent(Event e) {
+        super(e);
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/ModifyListener.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/ModifyListener.java
new file mode 100644
index 0000000..f13924c
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/ModifyListener.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * Classes which implement this interface provide a method that deals with the events that are
+ * generated when text is modified.
+ * <p>
+ * After creating an instance of a class that implements this interface it can be added to a text
+ * widget using the <code>addModifyListener</code> method and removed using the
+ * <code>removeModifyListener</code> method. When the text is modified, the modifyText method will
+ * be invoked.
+ * </p>
+ *
+ * @see ModifyEvent
+ */
+public interface ModifyListener extends SWTEventListener {
+
+    /**
+     * Sent when the text is modified.
+     *
+     * @param e an event containing information about the modify
+     */
+    public void modifyText(ModifyEvent e);
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/MouseAdapter.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/MouseAdapter.java
new file mode 100644
index 0000000..6894746
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/MouseAdapter.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+/**
+ * This adapter class provides default implementations for the methods described by the
+ * <code>MouseListener</code> interface.
+ * <p>
+ * Classes that wish to deal with <code>MouseEvent</code>s which occur as mouse buttons are pressed
+ * and released can extend this class and override only the methods which they are interested in.
+ * </p>
+ *
+ * @see MouseListener
+ * @see MouseEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public abstract class MouseAdapter implements MouseListener {
+
+    /**
+     * Sent when a mouse button is pressed twice within the (operating system specified) double
+     * click period. The default behavior is to do nothing.
+     *
+     * @param e an event containing information about the mouse double click
+     *
+     * @see org.eclipse.swt.widgets.Display#getDoubleClickTime()
+     */
+    public void mouseDoubleClick(MouseEvent e) {}
+
+    /**
+     * Sent when a mouse button is pressed. The default behavior is to do nothing.
+     *
+     * @param e an event containing information about the mouse button press
+     */
+    public void mouseDown(MouseEvent e) {}
+
+    /**
+     * Sent when a mouse button is released. The default behavior is to do nothing.
+     *
+     * @param e an event containing information about the mouse button release
+     */
+    public void mouseUp(MouseEvent e) {}
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/MouseEvent.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/MouseEvent.java
new file mode 100644
index 0000000..96b8599
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/MouseEvent.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+import org.eclipse.swt.widgets.Event;
+
+public class MouseEvent extends TypedEvent {
+
+    /**
+     * the button that was pressed or released;
+     * <ul>
+     * <li>1 for the first button (usually 'left')</li>
+     * <li>2 for the second button (usually 'middle')</li>
+     * <li>3 for the third button (usually 'right')</li>
+     * <li>etc.</li>
+     */
+    public int button;
+
+    /**
+     * the state of the keyboard modifier keys and mouse masks at the time the event was generated.
+     * 
+     * @see org.eclipse.swt.SWT#MODIFIER_MASK
+     * @see org.eclipse.swt.SWT#BUTTON_MASK
+     */
+    public int stateMask;
+
+    /**
+     * the widget-relative, x coordinate of the pointer at the time the mouse button was pressed or
+     * released
+     */
+    public int x;
+
+    /**
+     * the widget-relative, y coordinate of the pointer at the time the mouse button was pressed or
+     * released
+     */
+    public int y;
+
+    /**
+     * the number times the mouse has been clicked, as defined by the operating system; 1 for the
+     * first click, 2 for the second click and so on.
+     * 
+     * @since 3.3
+     */
+    public int count;
+
+    static final long serialVersionUID = 3257288037011566898L;
+
+    /**
+     * Constructs a new instance of this class based on the information in the given untyped event.
+     *
+     * @param e the untyped event containing the information
+     */
+    public MouseEvent(Event e) {
+        super(e);
+        this.x = e.x;
+        this.y = e.y;
+        this.button = e.button;
+        this.stateMask = e.stateMask;
+        this.count = e.count;
+    }
+
+    /**
+     * Returns a string containing a concise, human-readable description of the receiver.
+     *
+     * @return a string representation of the event
+     */
+    @Override
+    public String toString() {
+        String string = super.toString();
+        return string.substring(0, string.length() - 1) // remove trailing '}'
+                        + " button=" + button + " stateMask=0x" + Integer.toHexString(stateMask) + " x=" + x + " y=" + y + " count=" + count + "}";
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/MouseListener.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/MouseListener.java
new file mode 100644
index 0000000..30c3150
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/MouseListener.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+public interface MouseListener extends SWTEventListener {
+
+    /**
+     * Sent when a mouse button is pressed twice within the (operating system specified) double
+     * click period.
+     *
+     * @param e an event containing information about the mouse double click
+     *
+     * @see org.eclipse.swt.widgets.Display#getDoubleClickTime()
+     */
+    public void mouseDoubleClick(MouseEvent e);
+
+    /**
+     * Sent when a mouse button is pressed.
+     *
+     * @param e an event containing information about the mouse button press
+     */
+    public void mouseDown(MouseEvent e);
+
+    /**
+     * Sent when a mouse button is released.
+     *
+     * @param e an event containing information about the mouse button release
+     */
+    public void mouseUp(MouseEvent e);
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/SelectionAdapter.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/SelectionAdapter.java
new file mode 100644
index 0000000..555c1bb
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/SelectionAdapter.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+/**
+ * This adapter class provides default implementations for the methods described by the
+ * <code>SelectionListener</code> interface.
+ * <p>
+ * Classes that wish to deal with <code>SelectionEvent</code>s can extend this class and override
+ * only the methods which they are interested in.
+ * </p>
+ *
+ * @see SelectionListener
+ * @see SelectionEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public abstract class SelectionAdapter implements SelectionListener {
+
+    /**
+     * Sent when selection occurs in the control. The default behavior is to do nothing.
+     *
+     * @param e an event containing information about the selection
+     */
+    public void widgetSelected(SelectionEvent e) {}
+
+    /**
+     * Sent when default selection occurs in the control. The default behavior is to do nothing.
+     *
+     * @param e an event containing information about the default selection
+     */
+    public void widgetDefaultSelected(SelectionEvent e) {}
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/SelectionEvent.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/SelectionEvent.java
new file mode 100644
index 0000000..1581171
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/SelectionEvent.java
@@ -0,0 +1,150 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * Instances of this class are sent as a result of widgets being selected.
+ * <p>
+ * Note: The fields that are filled in depend on the widget.
+ * </p>
+ *
+ * @see SelectionListener
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public class SelectionEvent extends TypedEvent {
+
+    /**
+     * The item that was selected.
+     */
+    public Widget item;
+
+    /**
+     * Extra detail information about the selection, depending on the widget.
+     * 
+     * <p>
+     * <b>Sash</b>
+     * <ul>
+     * <li>{@link org.eclipse.swt.SWT#DRAG}</li>
+     * </ul>
+     * </p>
+     * <p>
+     * <b>ScrollBar and Slider</b>
+     * <ul>
+     * <li>{@link org.eclipse.swt.SWT#DRAG}</li>
+     * <li>{@link org.eclipse.swt.SWT#HOME}</li>
+     * <li>{@link org.eclipse.swt.SWT#END}</li>
+     * <li>{@link org.eclipse.swt.SWT#ARROW_DOWN}</li>
+     * <li>{@link org.eclipse.swt.SWT#ARROW_UP}</li>
+     * <li>{@link org.eclipse.swt.SWT#PAGE_DOWN}</li>
+     * <li>{@link org.eclipse.swt.SWT#PAGE_UP}</li>
+     * </ul>
+     * </p>
+     * <p>
+     * <b>Table and Tree</b>
+     * <ul>
+     * <li>{@link org.eclipse.swt.SWT#CHECK}</li>
+     * </ul>
+     * </p>
+     * <p>
+     * <b>Text</b>
+     * <ul>
+     * <li>{@link org.eclipse.swt.SWT#CANCEL}</li>
+     * </ul>
+     * </p>
+     * <p>
+     * <b>CoolItem and ToolItem</b>
+     * <ul>
+     * <li>{@link org.eclipse.swt.SWT#ARROW}</li>
+     * </ul>
+     * </p>
+     */
+    public int detail;
+
+    /**
+     * The x location of the selected area.
+     */
+    public int x;
+
+    /**
+     * The y location of selected area.
+     */
+    public int y;
+
+    /**
+     * The width of selected area.
+     */
+    public int width;
+
+    /**
+     * The height of selected area.
+     */
+    public int height;
+
+    /**
+     * The state of the keyboard modifier keys at the time the event was generated.
+     */
+    public int stateMask;
+
+    /**
+     * The text of the hyperlink that was selected. This will be either the text of the hyperlink or
+     * the value of its HREF, if one was specified.
+     * 
+     * @see org.eclipse.swt.widgets.Link#setText(String)
+     * @since 3.1
+     */
+    public String text;
+
+    /**
+     * A flag indicating whether the operation should be allowed. Setting this field to
+     * <code>false</code> will cancel the operation, depending on the widget.
+     */
+    public boolean doit;
+
+    static final long serialVersionUID = 3976735856884987953L;
+
+    /**
+     * Constructs a new instance of this class based on the information in the given untyped event.
+     *
+     * @param e the untyped event containing the information
+     */
+    public SelectionEvent(Event e) {
+        super(e);
+        this.item = e.item;
+        this.x = e.x;
+        this.y = e.y;
+        this.width = e.width;
+        this.height = e.height;
+        this.detail = e.detail;
+        this.stateMask = e.stateMask;
+        this.text = e.text;
+        this.doit = e.doit;
+    }
+
+    /**
+     * Returns a string containing a concise, human-readable description of the receiver.
+     *
+     * @return a string representation of the event
+     */
+    @Override
+    public String toString() {
+        String string = super.toString();
+        return string.substring(0, string.length() - 1) // remove trailing '}'
+                        + " item=" + item + " detail=" + detail + " x=" + x + " y=" + y + " width=" + width + " height=" + height + " stateMask=0x" + Integer.toHexString(stateMask) + " text=" + text
+                        + " doit=" + doit + "}";
+    }
+}
+
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/SelectionListener.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/SelectionListener.java
new file mode 100644
index 0000000..d796a98
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/SelectionListener.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * Classes which implement this interface provide methods that deal with the events that are
+ * generated when selection occurs in a control.
+ * <p>
+ * After creating an instance of a class that implements this interface it can be added to a control
+ * using the <code>addSelectionListener</code> method and removed using the
+ * <code>removeSelectionListener</code> method. When selection occurs in a control the appropriate
+ * method will be invoked.
+ * </p>
+ *
+ * @see SelectionAdapter
+ * @see SelectionEvent
+ */
+public interface SelectionListener extends SWTEventListener {
+
+    /**
+     * Sent when selection occurs in the control.
+     * <p>
+     * For example, selection occurs in a List when the user selects an item or items with the
+     * keyboard or mouse. On some platforms, the event occurs when a mouse button or key is pressed.
+     * On others, it happens when the mouse or key is released. The exact key or mouse gesture that
+     * causes this event is platform specific.
+     * </p>
+     *
+     * @param e an event containing information about the selection
+     */
+    public void widgetSelected(SelectionEvent e);
+
+    /**
+     * Sent when default selection occurs in the control.
+     * <p>
+     * For example, on some platforms default selection occurs in a List when the user double-clicks
+     * an item or types return in a Text. On some platforms, the event occurs when a mouse button or
+     * key is pressed. On others, it happens when the mouse or key is released. The exact key or
+     * mouse gesture that causes this event is platform specific.
+     * </p>
+     *
+     * @param e an event containing information about the default selection
+     */
+    public void widgetDefaultSelected(SelectionEvent e);
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/ShellEvent.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/ShellEvent.java
new file mode 100644
index 0000000..0a0e37d
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/ShellEvent.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.widgets.Event;
+
+/**
+ * Instances of this class are sent as a result of operations being performed on shells.
+ *
+ * @see ShellListener
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class ShellEvent extends TypedEvent {
+
+    /**
+     * A flag indicating whether the operation should be allowed. Setting this field to
+     * <code>false</code> will cancel the operation.
+     */
+    public boolean doit;
+
+    static final long serialVersionUID = 3257569490479888441L;
+
+    /**
+     * Constructs a new instance of this class based on the information in the given untyped event.
+     *
+     * @param e the untyped event containing the information
+     */
+    public ShellEvent(Event e) {
+        super(e);
+        this.doit = e.doit;
+    }
+
+    /**
+     * Returns a string containing a concise, human-readable description of the receiver.
+     *
+     * @return a string representation of the event
+     */
+    @Override
+    public String toString() {
+        String string = super.toString();
+        return string.substring(0, string.length() - 1) // remove trailing '}'
+                        + " doit=" + doit + "}";
+    }
+}
+
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/ShellListener.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/ShellListener.java
new file mode 100644
index 0000000..a48314f
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/ShellListener.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+public interface ShellListener extends SWTEventListener {
+
+    /**
+     * Sent when a shell becomes the active window.
+     *
+     * @param e an event containing information about the activation
+     */
+    public void shellActivated(ShellEvent e);
+
+    /**
+     * Sent when a shell is closed.
+     *
+     * @param e an event containing information about the close
+     */
+    public void shellClosed(ShellEvent e);
+
+    /**
+     * Sent when a shell stops being the active window.
+     *
+     * @param e an event containing information about the deactivation
+     */
+    public void shellDeactivated(ShellEvent e);
+
+    /**
+     * Sent when a shell is un-minimized.
+     *
+     * @param e an event containing information about the un-minimization
+     */
+    public void shellDeiconified(ShellEvent e);
+
+    /**
+     * Sent when a shell is minimized.
+     *
+     * @param e an event containing information about the minimization
+     */
+    public void shellIconified(ShellEvent e);
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/TreeEvent.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/TreeEvent.java
new file mode 100644
index 0000000..ac4a95e
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/TreeEvent.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.widgets.Event;
+
+/**
+ * Instances of this class are sent as a result of trees being expanded and collapsed.
+ *
+ * @see TreeListener
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class TreeEvent extends SelectionEvent {
+
+    static final long serialVersionUID = 3257282548009677109L;
+
+    /**
+     * Constructs a new instance of this class based on the information in the given untyped event.
+     *
+     * @param e the untyped event containing the information
+     */
+    public TreeEvent(Event e) {
+        super(e);
+    }
+
+}
+
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/TreeListener.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/TreeListener.java
new file mode 100644
index 0000000..3244370
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/TreeListener.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * Classes which implement this interface provide methods that deal with the expanding and
+ * collapsing of tree branches.
+ * <p>
+ * After creating an instance of a class that implements this interface it can be added to a tree
+ * control using the <code>addTreeListener</code> method and removed using the
+ * <code>removeTreeListener</code> method. When a branch of the tree is expanded or collapsed, the
+ * appropriate method will be invoked.
+ * </p>
+ *
+ * @see TreeAdapter
+ * @see TreeEvent
+ */
+public interface TreeListener extends SWTEventListener {
+
+    /**
+     * Sent when a tree branch is collapsed.
+     *
+     * @param e an event containing information about the tree operation
+     */
+    public void treeCollapsed(TreeEvent e);
+
+    /**
+     * Sent when a tree branch is expanded.
+     *
+     * @param e an event containing information about the tree operation
+     */
+    public void treeExpanded(TreeEvent e);
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/TypedEvent.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/TypedEvent.java
new file mode 100644
index 0000000..132a8a9
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/TypedEvent.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.internal.SWTEventObject;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Widget;
+
+public class TypedEvent extends SWTEventObject {
+
+    /**
+     * the display where the event occurred
+     * 
+     * @since 2.0
+     */
+    public Display display;
+
+    /**
+     * the widget that issued the event
+     */
+    public Widget widget;
+
+    /**
+     * the time that the event occurred.
+     * 
+     * NOTE: This field is an unsigned integer and should be AND'ed with 0xFFFFFFFFL so that it can
+     * be treated as a signed long.
+     */
+    public int time;
+
+    /**
+     * a field for application use
+     */
+    public Object data;
+
+    static final long serialVersionUID = 3257285846578377524L;
+
+    /**
+     * Constructs a new instance of this class.
+     *
+     * @param object the object that fired the event
+     */
+    public TypedEvent(Object object) {
+        super(object);
+    }
+
+    /**
+     * Constructs a new instance of this class based on the information in the argument.
+     *
+     * @param e the low level event to initialize the receiver with
+     */
+    public TypedEvent(Event e) {
+        super(e.widget);
+        this.display = e.display;
+        this.widget = e.widget;
+        this.time = e.time;
+        this.data = e.data;
+    }
+
+    /**
+     * Returns the name of the event. This is the name of the class without the package name.
+     *
+     * @return the name of the event
+     */
+    String getName() {
+        String string = getClass().getName();
+        int index = string.lastIndexOf('.');
+        if (index == -1)
+            return string;
+        return string.substring(index + 1, string.length());
+    }
+
+    /**
+     * Returns a string containing a concise, human-readable description of the receiver.
+     *
+     * @return a string representation of the event
+     */
+    @Override
+    public String toString() {
+        return getName() + "{" + widget + " time=" + time + " data=" + data + "}";
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/VerifyEvent.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/VerifyEvent.java
new file mode 100644
index 0000000..c62a6b5
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/VerifyEvent.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+
+import org.eclipse.swt.widgets.Event;
+
+/**
+ * Instances of this class are sent as a result of widgets handling keyboard events
+ *
+ * @see VerifyListener
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class VerifyEvent extends KeyEvent {
+
+    /**
+     * the range of text being modified. Setting these fields has no effect.
+     */
+    public int start, end;
+
+    /**
+     * the new text that will be inserted. Setting this field will change the text that is about to
+     * be inserted or deleted.
+     */
+    public String text;
+
+    static final long serialVersionUID = 3257003246269577014L;
+
+    /**
+     * Constructs a new instance of this class based on the information in the given untyped event.
+     *
+     * @param e the untyped event containing the information
+     */
+    public VerifyEvent(Event e) {
+        super(e);
+        this.start = e.start;
+        this.end = e.end;
+        this.text = e.text;
+    }
+
+    /**
+     * Returns a string containing a concise, human-readable description of the receiver.
+     *
+     * @return a string representation of the event
+     */
+    @Override
+    public String toString() {
+        String string = super.toString();
+        return string.substring(0, string.length() - 1) // remove trailing '}'
+                        + " start=" + start + " end=" + end + " text=" + text + "}";
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/VerifyListener.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/VerifyListener.java
new file mode 100644
index 0000000..7531af3
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/events/VerifyListener.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+public interface VerifyListener extends SWTEventListener {
+
+    /**
+     * Sent when the text is about to be modified.
+     * <p>
+     * A verify event occurs after the user has done something to modify the text (typically typed a
+     * key), but before the text is modified. The doit field in the verify event indicates whether
+     * or not to modify the text.
+     * </p>
+     *
+     * @param e an event containing information about the verify
+     */
+    public void verifyText(VerifyEvent e);
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Color.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Color.java
new file mode 100644
index 0000000..8c57934
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Color.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+public final class Color {
+
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Device.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Device.java
new file mode 100644
index 0000000..62e3678
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Device.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+public abstract class Device {
+    public Device() {
+        this(null);
+    }
+
+    public Device(DeviceData data) {}
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/DeviceData.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/DeviceData.java
new file mode 100644
index 0000000..175c9e4
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/DeviceData.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+
+public class DeviceData {
+    public boolean debug;
+    public boolean tracking;
+    public Error[] errors;
+    public Object[] objects;
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Drawable.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Drawable.java
new file mode 100644
index 0000000..2f7982c
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Drawable.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+public interface Drawable {
+
+    public long /* int */ internal_new_GC(GCData data);
+
+    public void internal_dispose_GC(long /* int */ handle, GCData data);
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Font.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Font.java
new file mode 100644
index 0000000..2e6421f
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Font.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+public final class Font {
+
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/FontMetrics.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/FontMetrics.java
new file mode 100644
index 0000000..9a596c5
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/FontMetrics.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+public final class FontMetrics {
+
+    FontMetrics() {}
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/GCData.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/GCData.java
new file mode 100644
index 0000000..04ec5e2
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/GCData.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+public final class GCData {
+    public Device device;
+    public int style, state = -1;
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Image.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Image.java
new file mode 100644
index 0000000..daa8c9c
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Image.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+public final class Image extends Resource implements Drawable {
+
+    Image(Device device) {
+        super(device);
+    }
+
+    public Image(Device device, int width, int height) {
+        super(device);
+    }
+    /// +
+
+    public long /* int */ internal_new_GC(GCData data) {
+        return 0; /// +
+    }
+
+    @Override
+    public void internal_dispose_GC(long handle, GCData data) {}
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Point.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Point.java
new file mode 100644
index 0000000..fd28f9c
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Point.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+public final class Point {
+
+    public int x;
+
+    public int y;
+
+    public Point(int x, int y) {
+        this.x = x;
+        this.y = y;
+    }
+
+
+}
+
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Rectangle.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Rectangle.java
new file mode 100644
index 0000000..78a3e9c
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Rectangle.java
@@ -0,0 +1,353 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.internal.SerializableCompatibility;
+
+/**
+ * Instances of this class represent rectangular areas in an (x, y) coordinate system. The top left
+ * corner of the rectangle is specified by its x and y values, and the extent of the rectangle is
+ * specified by its width and height.
+ * <p>
+ * The coordinate space for rectangles and points is considered to have increasing values downward
+ * and to the right from its origin making this the normal, computer graphics oriented notion of (x,
+ * y) coordinates rather than the strict mathematical one.
+ * </p>
+ * <p>
+ * The hashCode() method in this class uses the values of the public fields to compute the hash
+ * value. When storing instances of the class in hashed collections, do not modify these fields
+ * after the object has been inserted.
+ * </p>
+ * <p>
+ * Application code does <em>not</em> need to explicitly release the resources managed by each
+ * instance when those instances are no longer required, and thus no <code>dispose()</code> method
+ * is provided.
+ * </p>
+ *
+ * @see Point
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class Rectangle implements SerializableCompatibility {
+
+    /**
+     * the x coordinate of the rectangle
+     */
+    public int x;
+
+    /**
+     * the y coordinate of the rectangle
+     */
+    public int y;
+
+    /**
+     * the width of the rectangle
+     */
+    public int width;
+
+    /**
+     * the height of the rectangle
+     */
+    public int height;
+
+    static final long serialVersionUID = 3256439218279428914L;
+
+    /**
+     * Construct a new instance of this class given the x, y, width and height values.
+     *
+     * @param x the x coordinate of the origin of the rectangle
+     * @param y the y coordinate of the origin of the rectangle
+     * @param width the width of the rectangle
+     * @param height the height of the rectangle
+     */
+    public Rectangle(int x, int y, int width, int height) {
+        this.x = x;
+        this.y = y;
+        this.width = width;
+        this.height = height;
+    }
+
+    /**
+     * Destructively replaces the x, y, width and height values in the receiver with ones which
+     * represent the union of the rectangles specified by the receiver and the given rectangle.
+     * <p>
+     * The union of two rectangles is the smallest single rectangle that completely covers both of
+     * the areas covered by the two given rectangles.
+     * </p>
+     *
+     * @param rect the rectangle to merge with the receiver
+     *
+     * @exception IllegalArgumentException
+     *            <ul>
+     *            <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+     *            </ul>
+     */
+    public void add(Rectangle rect) {
+        if (rect == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        int left = x < rect.x ? x : rect.x;
+        int top = y < rect.y ? y : rect.y;
+        int lhs = x + width;
+        int rhs = rect.x + rect.width;
+        int right = lhs > rhs ? lhs : rhs;
+        lhs = y + height;
+        rhs = rect.y + rect.height;
+        int bottom = lhs > rhs ? lhs : rhs;
+        x = left;
+        y = top;
+        width = right - left;
+        height = bottom - top;
+    }
+
+    /**
+     * Returns <code>true</code> if the point specified by the arguments is inside the area
+     * specified by the receiver, and <code>false</code> otherwise.
+     *
+     * @param x the x coordinate of the point to test for containment
+     * @param y the y coordinate of the point to test for containment
+     * @return <code>true</code> if the rectangle contains the point and <code>false</code>
+     *         otherwise
+     */
+    public boolean contains(int x, int y) {
+        return (x >= this.x) && (y >= this.y) && x < (this.x + width) && y < (this.y + height);
+    }
+
+    /**
+     * Returns <code>true</code> if the given point is inside the area specified by the receiver,
+     * and <code>false</code> otherwise.
+     *
+     * @param pt the point to test for containment
+     * @return <code>true</code> if the rectangle contains the point and <code>false</code>
+     *         otherwise
+     *
+     * @exception IllegalArgumentException
+     *            <ul>
+     *            <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+     *            </ul>
+     */
+    public boolean contains(Point pt) {
+        if (pt == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        return contains(pt.x, pt.y);
+    }
+
+    /**
+     * Compares the argument to the receiver, and returns true if they represent the <em>same</em>
+     * object using a class specific comparison.
+     *
+     * @param object the object to compare with this object
+     * @return <code>true</code> if the object is the same as this object and <code>false</code>
+     *         otherwise
+     *
+     * @see #hashCode()
+     */
+    @Override
+    public boolean equals(Object object) {
+        if (object == this)
+            return true;
+        if (!(object instanceof Rectangle))
+            return false;
+        Rectangle r = (Rectangle) object;
+        return (r.x == this.x) && (r.y == this.y) && (r.width == this.width) && (r.height == this.height);
+    }
+
+    /**
+     * Returns an integer hash code for the receiver. Any two objects that return <code>true</code>
+     * when passed to <code>equals</code> must return the same value for this method.
+     *
+     * @return the receiver's hash
+     *
+     * @see #equals(Object)
+     */
+    @Override
+    public int hashCode() {
+        return x ^ y ^ width ^ height;
+    }
+
+    /**
+     * Destructively replaces the x, y, width and height values in the receiver with ones which
+     * represent the intersection of the rectangles specified by the receiver and the given
+     * rectangle.
+     *
+     * @param rect the rectangle to intersect with the receiver
+     *
+     * @exception IllegalArgumentException
+     *            <ul>
+     *            <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+     *            </ul>
+     * 
+     *            since 3.0
+     */
+    public void intersect(Rectangle rect) {
+        if (rect == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        if (this == rect)
+            return;
+        int left = x > rect.x ? x : rect.x;
+        int top = y > rect.y ? y : rect.y;
+        int lhs = x + width;
+        int rhs = rect.x + rect.width;
+        int right = lhs < rhs ? lhs : rhs;
+        lhs = y + height;
+        rhs = rect.y + rect.height;
+        int bottom = lhs < rhs ? lhs : rhs;
+        x = right < left ? 0 : left;
+        y = bottom < top ? 0 : top;
+        width = right < left ? 0 : right - left;
+        height = bottom < top ? 0 : bottom - top;
+    }
+
+    /**
+     * Returns a new rectangle which represents the intersection of the receiver and the given
+     * rectangle.
+     * <p>
+     * The intersection of two rectangles is the rectangle that covers the area which is contained
+     * within both rectangles.
+     * </p>
+     *
+     * @param rect the rectangle to intersect with the receiver
+     * @return the intersection of the receiver and the argument
+     *
+     * @exception IllegalArgumentException
+     *            <ul>
+     *            <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+     *            </ul>
+     */
+    public Rectangle intersection(Rectangle rect) {
+        if (rect == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        if (this == rect)
+            return new Rectangle(x, y, width, height);
+        int left = x > rect.x ? x : rect.x;
+        int top = y > rect.y ? y : rect.y;
+        int lhs = x + width;
+        int rhs = rect.x + rect.width;
+        int right = lhs < rhs ? lhs : rhs;
+        lhs = y + height;
+        rhs = rect.y + rect.height;
+        int bottom = lhs < rhs ? lhs : rhs;
+        return new Rectangle(right < left ? 0 : left, bottom < top ? 0 : top, right < left ? 0 : right - left, bottom < top ? 0 : bottom - top);
+    }
+
+    /**
+     * Returns <code>true</code> if the rectangle described by the arguments intersects with the
+     * receiver and <code>false</code> otherwise.
+     * <p>
+     * Two rectangles intersect if the area of the rectangle representing their intersection is not
+     * empty.
+     * </p>
+     *
+     * @param x the x coordinate of the origin of the rectangle
+     * @param y the y coordinate of the origin of the rectangle
+     * @param width the width of the rectangle
+     * @param height the height of the rectangle
+     * @return <code>true</code> if the rectangle intersects with the receiver, and
+     *         <code>false</code> otherwise
+     *
+     * @exception IllegalArgumentException
+     *            <ul>
+     *            <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+     *            </ul>
+     *
+     * @see #intersection(Rectangle)
+     * @see #isEmpty()
+     * 
+     * @since 3.0
+     */
+    public boolean intersects(int x, int y, int width, int height) {
+        return (x < this.x + this.width) && (y < this.y + this.height) && (x + width > this.x) && (y + height > this.y);
+    }
+
+    /**
+     * Returns <code>true</code> if the given rectangle intersects with the receiver and
+     * <code>false</code> otherwise.
+     * <p>
+     * Two rectangles intersect if the area of the rectangle representing their intersection is not
+     * empty.
+     * </p>
+     *
+     * @param rect the rectangle to test for intersection
+     * @return <code>true</code> if the rectangle intersects with the receiver, and
+     *         <code>false</code> otherwise
+     *
+     * @exception IllegalArgumentException
+     *            <ul>
+     *            <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+     *            </ul>
+     *
+     * @see #intersection(Rectangle)
+     * @see #isEmpty()
+     */
+    public boolean intersects(Rectangle rect) {
+        if (rect == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        return rect == this || intersects(rect.x, rect.y, rect.width, rect.height);
+    }
+
+    /**
+     * Returns <code>true</code> if the receiver does not cover any area in the (x, y) coordinate
+     * plane, and <code>false</code> if the receiver does cover some area in the plane.
+     * <p>
+     * A rectangle is considered to <em>cover area</em> in the (x, y) coordinate plane if both its
+     * width and height are non-zero.
+     * </p>
+     *
+     * @return <code>true</code> if the receiver is empty, and <code>false</code> otherwise
+     */
+    public boolean isEmpty() {
+        return (width <= 0) || (height <= 0);
+    }
+
+    /**
+     * Returns a string containing a concise, human-readable description of the receiver.
+     *
+     * @return a string representation of the rectangle
+     */
+    @Override
+    public String toString() {
+        return "Rectangle {" + x + ", " + y + ", " + width + ", " + height + "}"; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+    }
+
+    /**
+     * Returns a new rectangle which represents the union of the receiver and the given rectangle.
+     * <p>
+     * The union of two rectangles is the smallest single rectangle that completely covers both of
+     * the areas covered by the two given rectangles.
+     * </p>
+     *
+     * @param rect the rectangle to perform union with
+     * @return the union of the receiver and the argument
+     *
+     * @exception IllegalArgumentException
+     *            <ul>
+     *            <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+     *            </ul>
+     *
+     * @see #add(Rectangle)
+     */
+    public Rectangle union(Rectangle rect) {
+        if (rect == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        int left = x < rect.x ? x : rect.x;
+        int top = y < rect.y ? y : rect.y;
+        int lhs = x + width;
+        int rhs = rect.x + rect.width;
+        int right = lhs > rhs ? lhs : rhs;
+        lhs = y + height;
+        rhs = rect.y + rect.height;
+        int bottom = lhs > rhs ? lhs : rhs;
+        return new Rectangle(left, top, right - left, bottom - top);
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Resource.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Resource.java
new file mode 100644
index 0000000..feb1ab7
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/graphics/Resource.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+public abstract class Resource {
+
+    Device device;
+
+    public Resource() {}
+
+    Resource(Device device) {
+        this.device = device;
+    }
+
+
+    public Device getDevice() {
+        Device device = this.device;
+        return device;
+    }
+
+
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/internal/SWTEventListener.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/internal/SWTEventListener.java
new file mode 100644
index 0000000..be24943
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/internal/SWTEventListener.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.internal;
+
+import java.util.EventListener;
+
+public interface SWTEventListener extends EventListener {
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/internal/SWTEventObject.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/internal/SWTEventObject.java
new file mode 100644
index 0000000..674e771
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/internal/SWTEventObject.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.internal;
+
+
+import java.util.EventObject;
+
+/**
+ * This class is the cross-platform version of the java.util.EventObject class.
+ * <p>
+ * It is part of our effort to provide support for both J2SE and J2ME platforms. Under this scheme,
+ * classes need to extend SWTEventObject instead of java.util.EventObject.
+ * </p>
+ * <p>
+ * Note: java.util.EventObject is not part of CDC and CLDC.
+ * </p>
+ */
+public class SWTEventObject extends EventObject {
+
+    static final long serialVersionUID = 3258125873411470903L;
+
+    /**
+     * Constructs a new instance of this class.
+     *
+     * @param source the object which fired the event
+     */
+    public SWTEventObject(Object source) {
+        super(source);
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/internal/SerializableCompatibility.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/internal/SerializableCompatibility.java
new file mode 100644
index 0000000..cc20b23
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/internal/SerializableCompatibility.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.internal;
+
+
+import java.io.Serializable;
+
+/**
+ * This interface is the cross-platform version of the java.io.Serializable interface.
+ * <p>
+ * It is part of our effort to provide support for both J2SE and J2ME platforms. Under this scheme,
+ * classes need to implement SerializableCompatibility instead of java.io.Serializable.
+ * </p>
+ * <p>
+ * Note: java.io.Serializable is not part of CLDC.
+ * </p>
+ */
+public interface SerializableCompatibility extends Serializable {
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/internal/win32/OS.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/internal/win32/OS.java
new file mode 100644
index 0000000..33a7aa4
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/internal/win32/OS.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.internal.win32;
+
+public class OS {
+
+    public static final boolean IsWinCE = false;
+
+    public static final int TVGN_ROOT = 0x0;
+    public static final long /* int */ TVI_LAST = -0x0FFFE;
+    public static final long /* int */ TVI_FIRST = -0x0FFFF;
+    public static final int TVM_GETNEXTITEM = 0x110a;
+    public static final int TVGN_CHILD = 0x4;
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/layout/FillLayout.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/layout/FillLayout.java
new file mode 100644
index 0000000..5fb33c3
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/layout/FillLayout.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.layout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Layout;
+
+public final class FillLayout extends Layout {
+
+    @Override
+    protected void layout(Composite composite, boolean flushCache) {}
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/layout/GridData.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/layout/GridData.java
new file mode 100644
index 0000000..65641d1
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/layout/GridData.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.layout;
+
+import org.eclipse.swt.SWT;
+
+public final class GridData {
+    public static final int BEGINNING = SWT.BEGINNING;
+    public int verticalAlignment = CENTER;
+    public int horizontalAlignment = BEGINNING;
+    public static final int CENTER = 2;
+
+
+    public GridData() {
+        super();
+    }
+
+    public GridData(int style) {
+        super();
+        // if ((style & VERTICAL_ALIGN_BEGINNING) != 0)
+        // verticalAlignment = BEGINNING;
+        // if ((style & VERTICAL_ALIGN_CENTER) != 0)
+        // verticalAlignment = CENTER;
+        // if ((style & VERTICAL_ALIGN_FILL) != 0)
+        // verticalAlignment = FILL;
+        // if ((style & VERTICAL_ALIGN_END) != 0)
+        // verticalAlignment = END;
+        // if ((style & HORIZONTAL_ALIGN_BEGINNING) != 0)
+        // horizontalAlignment = BEGINNING;
+        // if ((style & HORIZONTAL_ALIGN_CENTER) != 0)
+        // horizontalAlignment = CENTER;
+        // if ((style & HORIZONTAL_ALIGN_FILL) != 0)
+        // horizontalAlignment = FILL;
+        // if ((style & HORIZONTAL_ALIGN_END) != 0)
+        // horizontalAlignment = END;
+        // grabExcessHorizontalSpace = (style & GRAB_HORIZONTAL) != 0;
+        // grabExcessVerticalSpace = (style & GRAB_VERTICAL) != 0;
+        /// +
+    }
+
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/layout/GridLayout.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/layout/GridLayout.java
new file mode 100644
index 0000000..f54a83f
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/layout/GridLayout.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.layout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Layout;
+
+public final class GridLayout extends Layout {
+
+    public GridLayout() {}
+
+    public GridLayout(int numColumns, boolean makeColumnsEqualWidth) {}
+
+    @Override
+    protected void layout(Composite composite, boolean flushCache) {}
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Button.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Button.java
new file mode 100644
index 0000000..8003c01
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Button.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+
+public class Button extends Control {
+    private boolean selected;
+    static /* final */ boolean COMMAND_LINK = false;
+    String text = "", message = "";
+    Image image, image2, disabledImage;
+
+    public Button(Composite parent, int style) {
+        super(parent, checkStyle(style));
+    }
+
+
+    public void setText(String string) {
+        // checkWidget();
+        if (string == null)
+            error(SWT.ERROR_NULL_ARGUMENT);
+        if ((style & SWT.ARROW) != 0)
+            return;
+        text = string;
+        /* This code is intentionally commented */
+        // if (OS.COMCTL32_MAJOR < 6) {
+        // if (text.length () == 0 && image != null) {
+        // _setImage (image);
+        // return;
+        // }
+        // }
+        _setText(string);
+    }
+
+    public void setSelection(boolean selected) {
+        System.out.println("Button.setSelection(" + selected + ")");
+        this.selected = selected;
+    }
+
+    static int checkStyle(int style) {
+        style = checkBits(style, SWT.PUSH, SWT.ARROW, SWT.CHECK, SWT.RADIO, SWT.TOGGLE, COMMAND_LINK ? SWT.COMMAND : 0);
+        if ((style & (SWT.PUSH | SWT.TOGGLE)) != 0) {
+            return checkBits(style, SWT.CENTER, SWT.LEFT, SWT.RIGHT, 0, 0, 0);
+        }
+        if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
+            return checkBits(style, SWT.LEFT, SWT.RIGHT, SWT.CENTER, 0, 0, 0);
+        }
+        if ((style & SWT.ARROW) != 0) {
+            style |= SWT.NO_FOCUS;
+            return checkBits(style, SWT.UP, SWT.DOWN, SWT.LEFT, SWT.RIGHT, 0, 0);
+        }
+        return style;
+    }
+
+    void _setText(String text) {
+        System.out.println(text);
+        // int oldBits = OS.GetWindowLong(handle, OS.GWL_STYLE), newBits = oldBits;
+        // if (OS.COMCTL32_MAJOR >= 6) {
+        // newBits &= ~(OS.BS_LEFT | OS.BS_CENTER | OS.BS_RIGHT);
+        // if ((style & SWT.LEFT) != 0)
+        // newBits |= OS.BS_LEFT;
+        // if ((style & SWT.CENTER) != 0)
+        // newBits |= OS.BS_CENTER;
+        // if ((style & SWT.RIGHT) != 0)
+        // newBits |= OS.BS_RIGHT;
+        // if (imageList != null) {
+        // BUTTON_IMAGELIST buttonImageList = new BUTTON_IMAGELIST();
+        // buttonImageList.himl = imageList.getHandle();
+        // if (text.length() == 0) {
+        // if ((style & SWT.LEFT) != 0)
+        // buttonImageList.uAlign = OS.BUTTON_IMAGELIST_ALIGN_LEFT;
+        // if ((style & SWT.CENTER) != 0)
+        // buttonImageList.uAlign = OS.BUTTON_IMAGELIST_ALIGN_CENTER;
+        // if ((style & SWT.RIGHT) != 0)
+        // buttonImageList.uAlign = OS.BUTTON_IMAGELIST_ALIGN_RIGHT;
+        // } else {
+        // buttonImageList.uAlign = OS.BUTTON_IMAGELIST_ALIGN_LEFT;
+        // buttonImageList.margin_left = computeLeftMargin();
+        // buttonImageList.margin_right = MARGIN;
+        // newBits &= ~(OS.BS_CENTER | OS.BS_RIGHT);
+        // newBits |= OS.BS_LEFT;
+        // }
+        // OS.SendMessage(handle, OS.BCM_SETIMAGELIST, 0, buttonImageList);
+        // }
+        // } else {
+        // newBits &= ~(OS.BS_BITMAP | OS.BS_ICON);
+        // }
+        // if (newBits != oldBits) {
+        // OS.SetWindowLong(handle, OS.GWL_STYLE, newBits);
+        // OS.InvalidateRect(handle, null, true);
+        // }
+        // /*
+        // * Bug in Windows. When a Button control is right-to-left and is disabled, the first pixel
+        // * of the text is clipped. The fix is to append a space to the text.
+        // */
+        // if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+        // if (OS.COMCTL32_MAJOR < 6 || !OS.IsAppThemed()) {
+        // text = OS.IsWindowEnabled(handle) ? text : text + " ";
+        // }
+        // }
+        // TCHAR buffer = new TCHAR(getCodePage(), text, true);
+        // OS.SetWindowText(handle, buffer);
+        // if ((state & HAS_AUTO_DIRECTION) != 0) {
+        // updateTextDirection(AUTO_TEXT_DIRECTION);
+        // }
+    }
+
+    public void setImage(Image image) {
+        System.out.println("Button.setImage()");
+        // checkWidget ();
+        // if (image != null && image.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+        // if ((style & SWT.ARROW) != 0) return;
+        // this.image = image;
+        // /* This code is intentionally commented */
+        // // if (OS.COMCTL32_MAJOR < 6) {
+        //// if (image == null || text.length () != 0) {
+        //// _setText (text);
+        //// return;
+        //// }
+        // // }
+        // _setImage (image);
+        /// +
+    }
+
+    public boolean getSelection() {
+        System.out.println();
+        return selected;
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Canvas.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Canvas.java
new file mode 100644
index 0000000..2a497ee
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Canvas.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+public class Canvas extends Composite {
+    Canvas() {}
+
+    public Canvas(Composite parent, int style) {
+        super(parent, style);
+    }
+
+
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Combo.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Combo.java
new file mode 100644
index 0000000..310c4a9
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Combo.java
@@ -0,0 +1,145 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+
+public class Combo extends Composite {
+    List<String> items = new ArrayList<String>();
+
+    public Combo(Composite parent, int style) {
+        super(parent, checkStyle(style));
+        /* This code is intentionally commented */
+        // if ((style & SWT.H_SCROLL) != 0) this.style |= SWT.H_SCROLL;
+        this.style |= SWT.H_SCROLL;
+    }
+
+    static int checkStyle(int style) {
+        style &= ~SWT.BORDER;
+
+        style &= ~(SWT.H_SCROLL | SWT.V_SCROLL);
+        style = checkBits(style, SWT.DROP_DOWN, SWT.SIMPLE, 0, 0, 0, 0);
+        if ((style & SWT.SIMPLE) != 0)
+            return style & ~SWT.READ_ONLY;
+        return style;
+    }
+
+    public String[] getItems() {
+        String[] result;
+        int count = getItemCount();
+        result = new String[count];
+        for (int i = 0; i < count; i++)
+            result[i] = getItem(i);
+        return result;
+    }
+
+    public int getItemCount() {
+        return items.size(); /// +
+    }
+
+    public String getItem(int index) {
+        return items.get(index);
+    }
+
+    public int getSelectionIndex() {
+        // checkWidget ();
+        // if (noSelection) return -1;
+        // return (int)/*64*/OS.SendMessage (handle, OS.CB_GETCURSEL, 0, 0);
+        return -1; /// +
+    }
+
+    public void clearSelection() {
+        // checkWidget ();
+        // OS.SendMessage (handle, OS.CB_SETEDITSEL, 0, -1);
+        /// +
+    }
+
+    public void deselectAll() {
+        // checkWidget();
+        // OS.SendMessage(handle, OS.CB_SETCURSEL, -1, 0);
+        // sendEvent(SWT.Modify);
+        // // widget could be disposed at this point
+        // clearSegments(false);
+        // clearSegmentsCount--;
+        /// +
+    }
+
+    public void removeAll() {
+        // checkWidget ();
+        // OS.SendMessage (handle, OS.CB_RESETCONTENT, 0, 0);
+        // sendEvent (SWT.Modify);
+        // if (isDisposed ()) return;
+        // if ((style & SWT.H_SCROLL) != 0) setScrollWidth (0);
+        /// +
+    }
+
+    public void setItems(String[] items) {
+        System.out.println();
+        this.items = Arrays.asList(items);
+        System.out.println(this.items);
+        // checkWidget ();
+        // if (items == null) error (SWT.ERROR_NULL_ARGUMENT);
+        // for (int i=0; i<items.length; i++) {
+        // if (items [i] == null) error (SWT.ERROR_INVALID_ARGUMENT);
+        // }
+        // RECT rect = null;
+        // long /*int*/ hDC = 0, oldFont = 0, newFont = 0;
+        // int newWidth = 0;
+        // if ((style & SWT.H_SCROLL) != 0) {
+        // rect = new RECT ();
+        // hDC = OS.GetDC (handle);
+        // newFont = OS.SendMessage (handle, OS.WM_GETFONT, 0, 0);
+        // if (newFont != 0) oldFont = OS.SelectObject (hDC, newFont);
+        // setScrollWidth (0);
+        // }
+        // OS.SendMessage (handle, OS.CB_RESETCONTENT, 0, 0);
+        // int codePage = getCodePage ();
+        // for (int i=0; i<items.length; i++) {
+        // String string = items [i];
+        // TCHAR buffer = new TCHAR (codePage, string, true);
+        // int code = (int)/*64*/OS.SendMessage (handle, OS.CB_ADDSTRING, 0, buffer);
+        // if (code == OS.CB_ERR) error (SWT.ERROR_ITEM_NOT_ADDED);
+        // if (code == OS.CB_ERRSPACE) error (SWT.ERROR_ITEM_NOT_ADDED);
+        // if ((style & SWT.H_SCROLL) != 0) {
+        // int flags = OS.DT_CALCRECT | OS.DT_SINGLELINE | OS.DT_NOPREFIX;
+        // OS.DrawText (hDC, buffer, -1, rect, flags);
+        // newWidth = Math.max (newWidth, rect.right - rect.left);
+        // }
+        // }
+        // if ((style & SWT.H_SCROLL) != 0) {
+        // if (newFont != 0) OS.SelectObject (hDC, oldFont);
+        // OS.ReleaseDC (handle, hDC);
+        // setScrollWidth (newWidth + 3);
+        // }
+        // sendEvent (SWT.Modify);
+        // // widget could be disposed at this point
+        /// +
+    }
+
+    public void select(int index) {
+        // checkWidget ();
+        // int count = (int)/*64*/OS.SendMessage (handle, OS.CB_GETCOUNT, 0, 0);
+        // if (0 <= index && index < count) {
+        // int selection = (int)/*64*/OS.SendMessage (handle, OS.CB_GETCURSEL, 0, 0);
+        // int code = (int)/*64*/OS.SendMessage (handle, OS.CB_SETCURSEL, index, 0);
+        // if (code != OS.CB_ERR && code != selection) {
+        // sendEvent (SWT.Modify);
+        // // widget could be disposed at this point
+        // }
+        // }
+        System.out.println("Combo.select(" + index + ")");
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Composite.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Composite.java
new file mode 100644
index 0000000..9117854
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Composite.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+public class Composite extends Scrollable {
+    Layout layout;
+
+    Composite() {}
+
+    public Composite(Composite parent, int style) {
+        super(parent, style);
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Control.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Control.java
new file mode 100644
index 0000000..4da54f3
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Control.java
@@ -0,0 +1,169 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.KeyListener;
+
+public abstract class Control extends Widget {
+
+    Composite parent;
+    public long /* int */ handle;
+    int drawCount, foreground, background, backgroundAlpha = 255;
+    Object layoutData;
+
+    Control() {}
+
+    public Control(Composite parent, int style) {
+        super(parent, style);
+        this.parent = parent;
+    }
+
+    long /* int */ widgetParent() {
+        return parent.handle;
+    }
+
+    void createHandle() {
+        // long /* int */ hwndParent = widgetParent();
+        // handle = OS.CreateWindowEx(widgetExtStyle(), windowClass(), null, widgetStyle(),
+        // OS.CW_USEDEFAULT, 0, OS.CW_USEDEFAULT, 0, hwndParent, 0, OS.GetModuleHandle(null),
+        // widgetCreateStruct());
+        // if (handle == 0)
+        // error(SWT.ERROR_NO_HANDLES);
+        // int bits = OS.GetWindowLong(handle, OS.GWL_STYLE);
+        // if ((bits & OS.WS_CHILD) != 0) {
+        // OS.SetWindowLongPtr(handle, OS.GWLP_ID, handle);
+        // }
+        // if (OS.IsDBLocale && hwndParent != 0) {
+        // long /* int */ hIMC = OS.ImmGetContext(hwndParent);
+        // OS.ImmAssociateContext(handle, hIMC);
+        // OS.ImmReleaseContext(hwndParent, hIMC);
+        // }
+        /// +
+    }
+
+    void createWidget() {
+        state |= DRAG_DETECT;
+        foreground = background = -1;
+        checkOrientation(parent);
+        createHandle();
+        /// +
+        // checkBackground();
+        // checkBuffered();
+        // checkComposited();
+        // register();
+        // subclass();
+        // setDefaultFont();
+        // checkMirrored();
+        // checkBorder();
+        // checkGesture();
+        // if ((state & PARENT_BACKGROUND) != 0) {
+        // setBackground();
+        // }
+    }
+
+    public void setEnabled(boolean enabled) {
+        // checkWidget ();
+        // Control control = null;
+        // boolean fixFocus = false;
+        // if (!enabled) {
+        // if (display.focusEvent != SWT.FocusOut) {
+        // control = display.getFocusControl ();
+        // fixFocus = isFocusAncestor (control);
+        // }
+        // }
+        // enableWidget (enabled);
+        // if (fixFocus) fixFocus (control);
+        /// +
+    }
+
+    public boolean getEnabled() {
+        // checkWidget();
+        // return OS.IsWindowEnabled(handle);
+        return true; /// +
+    }
+
+    public boolean isEnabled() {
+        // checkWidget ();
+        // return getEnabled() && parent.isEnabled();
+        return true; /// +
+    }
+
+    public void setLayoutData(Object layoutData) {
+        // checkWidget ();
+        this.layoutData = layoutData;
+    }
+
+    public Object getLayoutData () {
+//    	checkWidget ();
+    	return layoutData;
+    }
+
+    public void addKeyListener(KeyListener listener) {
+        // checkWidget();
+        if (listener == null)
+            error(SWT.ERROR_NULL_ARGUMENT);
+        TypedListener typedListener = new TypedListener(listener);
+        addListener(SWT.KeyUp, typedListener);
+        addListener(SWT.KeyDown, typedListener);
+    }
+
+    public Shell getShell() {
+        // checkWidget();
+        return parent.getShell();
+    }
+
+    public void addDisposeListener(DisposeListener listener) {
+        // checkWidget();
+        if (listener == null)
+            error(SWT.ERROR_NULL_ARGUMENT);
+        TypedListener typedListener = new TypedListener(listener);
+        addListener(SWT.Dispose, typedListener);
+    }
+
+
+    public void setRedraw(boolean redraw) {
+        // checkWidget ();
+        // if (drawCount == 0) {
+        // int bits = OS.GetWindowLong (handle, OS.GWL_STYLE);
+        // if ((bits & OS.WS_VISIBLE) == 0) state |= HIDDEN;
+        // }
+        // if (redraw) {
+        // if (--drawCount == 0) {
+        // long /*int*/ topHandle = topHandle ();
+        // OS.SendMessage (topHandle, OS.WM_SETREDRAW, 1, 0);
+        // if (handle != topHandle) OS.SendMessage (handle, OS.WM_SETREDRAW, 1, 0);
+        // if ((state & HIDDEN) != 0) {
+        // state &= ~HIDDEN;
+        // OS.ShowWindow (topHandle, OS.SW_HIDE);
+        // if (handle != topHandle) OS.ShowWindow (handle, OS.SW_HIDE);
+        // } else {
+        // if (OS.IsWinCE) {
+        // OS.InvalidateRect (topHandle, null, true);
+        // if (handle != topHandle) OS.InvalidateRect (handle, null, true);
+        // } else {
+        // int flags = OS.RDW_ERASE | OS.RDW_FRAME | OS.RDW_INVALIDATE | OS.RDW_ALLCHILDREN;
+        // OS.RedrawWindow (topHandle, null, 0, flags);
+        // }
+        // }
+        // }
+        // } else {
+        // if (drawCount++ == 0) {
+        // long /*int*/ topHandle = topHandle ();
+        // OS.SendMessage (topHandle, OS.WM_SETREDRAW, 0, 0);
+        // if (handle != topHandle) OS.SendMessage (handle, OS.WM_SETREDRAW, 0, 0);
+        // }
+        // }
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/DateTime.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/DateTime.java
new file mode 100644
index 0000000..d80983c
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/DateTime.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+public class DateTime extends Composite {
+
+    public DateTime(Composite parent, int style) {
+        super(parent, checkStyle(style));
+    }
+
+    static int checkStyle(int style) {
+        // style &= ~(SWT.H_SCROLL | SWT.V_SCROLL);
+        // style = checkBits(style, SWT.DATE, SWT.TIME, SWT.CALENDAR, 0, 0, 0);
+        // style = checkBits(style, SWT.MEDIUM, SWT.SHORT, SWT.LONG, 0, 0, 0);
+        // if ((style & SWT.DATE) == 0)
+        // style &= ~SWT.DROP_DOWN;
+        return style; /// +
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Decorations.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Decorations.java
new file mode 100644
index 0000000..255bfb4
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Decorations.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+
+public class Decorations extends Canvas {
+
+    Decorations() {}
+
+    public Decorations(Composite parent, int style) {
+        super(parent, checkStyle(style));
+    }
+
+    static int checkStyle(int style) {
+        return style;
+    }
+
+    void createWidget() {
+        super.createWidget();
+        // swFlags = OS.IsWinCE ? OS.SW_SHOWMAXIMIZED : OS.SW_SHOWNOACTIVATE;
+        // hAccel = -1;
+        /// +
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Display.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Display.java
new file mode 100644
index 0000000..35c266f
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Display.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+
+import org.eclipse.swt.graphics.Device;
+import org.eclipse.swt.graphics.DeviceData;
+
+@SuppressWarnings("rawtypes")
+public class Display extends Device {
+    static Display Default;
+    boolean disposed;
+    static final int GROW_SIZE = 1024;
+
+    /* Skinning support */
+    Widget[] skinList = new Widget[GROW_SIZE];
+    int skinCount;
+
+    public Display() {
+        this(null);
+        this.Default = this;
+    }
+
+    public Display(DeviceData data) {
+        super(data);
+    }
+
+    public static Display getCurrent() {
+        // return findDisplay (Thread.currentThread ());
+        return getDefault(); /// +
+    }
+
+    public static Display getDefault() {
+        synchronized (Device.class) {
+            if (Default == null)
+                Default = new Display();
+            return Default;
+        }
+    }
+
+    public boolean isDisposed() {
+        synchronized (Device.class) {
+            return disposed;
+        }
+    }
+
+    void addSkinnableWidget(Widget widget) {
+        if (skinCount >= skinList.length) {
+            Widget[] newSkinWidgets = new Widget[skinList.length + GROW_SIZE];
+            System.arraycopy(skinList, 0, newSkinWidgets, 0, skinList.length);
+            skinList = newSkinWidgets;
+        }
+        skinList[skinCount++] = widget;
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Event.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Event.java
new file mode 100644
index 0000000..3a0b051
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Event.java
@@ -0,0 +1,259 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.awt.Rectangle;
+
+
+public class Event {
+
+    /**
+     * the display where the event occurred
+     * 
+     * @since 2.0
+     */
+    public Display display;
+
+    /**
+     * the widget that issued the event
+     */
+    public Widget widget;
+
+    /**
+     * the type of event, as defined by the event type constants in class <code>SWT</code>
+     *
+     * @see org.eclipse.swt.SWT
+     */
+    public int type;
+
+    /**
+     * the event specific detail field, as defined by the detail constants in class <code>SWT</code>
+     * 
+     * @see org.eclipse.swt.SWT
+     */
+    public int detail;
+
+    /**
+     * the item that the event occurred in (can be null)
+     */
+    public Widget item;
+
+    /**
+     * the index of the item where the event occurred
+     * 
+     * @since 3.2
+     */
+    public int index;
+
+    /**
+     * the graphics context to use when painting that is configured to use the colors, font and
+     * damaged region of the control. It is valid only during the paint and must not be disposed
+     */
+    // public GC gc;
+
+    /**
+     * depending on the event type, the x offset of the bounding rectangle of the region that
+     * requires painting or the widget-relative, x coordinate of the pointer at the time the mouse
+     * button was pressed or released
+     */
+    public int x;
+
+    /**
+     * depending on the event type, the y offset of the bounding rectangle of the region that
+     * requires painting or the widget-relative, y coordinate of the pointer at the time the mouse
+     * button was pressed or released
+     */
+    public int y;
+
+    /**
+     * the width of the bounding rectangle of the region that requires painting
+     */
+    public int width;
+
+    /**
+     * the height of the bounding rectangle of the region that requires painting
+     */
+    public int height;
+
+    /**
+     * depending on the event type, the number of following paint events that are pending which may
+     * always be zero on some platforms, or the number of lines or pages to scroll using the mouse
+     * wheel, or the number of times the mouse has been clicked
+     */
+    public int count;
+
+    /**
+     * the time that the event occurred.
+     * 
+     * NOTE: This field is an unsigned integer and should be AND'ed with 0xFFFFFFFFL so that it can
+     * be treated as a signed long.
+     */
+    public int time;
+
+    /**
+     * the button that was pressed or released; 1 for the first button, 2 for the second button, and
+     * 3 for the third button, etc.
+     */
+    public int button;
+
+    /**
+     * depending on the event, the character represented by the key that was typed. This is the
+     * final character that results after all modifiers have been applied. For example, when the
+     * user types Ctrl+A, the character value is 0x01 (ASCII SOH). It is important that applications
+     * do not attempt to modify the character value based on a stateMask (such as SWT.CTRL) or the
+     * resulting character will not be correct.
+     */
+    public char character;
+
+    /**
+     * depending on the event, the key code of the key that was typed, as defined by the key code
+     * constants in class <code>SWT</code>. When the character field of the event is ambiguous, this
+     * field contains the unaffected value of the original character. For example, typing Ctrl+M or
+     * Enter both result in the character '\r' but the keyCode field will also contain '\r' when
+     * Enter was typed and 'm' when Ctrl+M was typed.
+     * 
+     * @see org.eclipse.swt.SWT
+     */
+    public int keyCode;
+
+    /**
+     * depending on the event, the location of key specified by the keyCode or character. The
+     * possible values for this field are <code>SWT.LEFT</code>, <code>SWT.RIGHT</code>,
+     * <code>SWT.KEYPAD</code>, or <code>SWT.NONE</code> representing the main keyboard area.
+     * <p>
+     * The location field can be used to differentiate key events that have the same key code and
+     * character but are generated by different keys in the keyboard. For example, a key down event
+     * with the key code equals to SWT.SHIFT can be generated by the left and the right shift keys
+     * in the keyboard. The location field can only be used to determine the location of the key
+     * code or character in the current event. It does not include information about the location of
+     * modifiers in state mask.
+     * </p>
+     * 
+     * @see org.eclipse.swt.SWT#LEFT
+     * @see org.eclipse.swt.SWT#RIGHT
+     * @see org.eclipse.swt.SWT#KEYPAD
+     * 
+     * @since 3.6
+     */
+    public int keyLocation;
+
+    /**
+     * depending on the event, the state of the keyboard modifier keys and mouse masks at the time
+     * the event was generated.
+     * 
+     * @see org.eclipse.swt.SWT#MODIFIER_MASK
+     * @see org.eclipse.swt.SWT#BUTTON_MASK
+     */
+    public int stateMask;
+
+    /**
+     * depending on the event, the range of text being modified. Setting these fields only has
+     * effect during ImeComposition events.
+     */
+    public int start, end;
+
+    /**
+     * depending on the event, the new text that will be inserted. Setting this field will change
+     * the text that is about to be inserted or deleted.
+     */
+    public String text;
+
+    /**
+     * Bidi segment offsets
+     * 
+     * @since 3.8
+     */
+    public int[] segments;
+
+    /**
+     * Characters to be applied on the segment boundaries
+     * 
+     * @since 3.8
+     */
+    public char[] segmentsChars;
+
+    /**
+     * depending on the event, a flag indicating whether the operation should be allowed. Setting
+     * this field to false will cancel the operation.
+     */
+    public boolean doit = true;
+
+    /**
+     * a field for application use
+     */
+    public Object data;
+
+
+
+    /**
+     * If nonzero, a positive value indicates a swipe to the right, and a negative value indicates a
+     * swipe to the left.
+     *
+     * @since 3.7
+     */
+    public int xDirection;
+
+    /**
+     * If nonzero, a positive value indicates a swipe in the up direction, and a negative value
+     * indicates a swipe in the down direction.
+     *
+     * @since 3.7
+     */
+    public int yDirection;
+
+    /**
+     * The change in magnification. This value should be added to the current scaling of an item to
+     * get the new scale factor.
+     *
+     * @since 3.7
+     */
+    public double magnification;
+
+    /**
+     * The number of degrees rotated on the track pad.
+     *
+     * @since 3.7
+     */
+    public double rotation;
+
+
+    /**
+     * Gets the bounds.
+     * 
+     * @return a rectangle that is the bounds.
+     */
+    public Rectangle getBounds() {
+        return new Rectangle(x, y, width, height);
+    }
+
+    /**
+     * Sets the bounds.
+     * 
+     * @param rect the new rectangle
+     */
+    public void setBounds(Rectangle rect) {
+        this.x = rect.x;
+        this.y = rect.y;
+        this.width = rect.width;
+        this.height = rect.height;
+    }
+
+    /**
+     * Returns a string containing a concise, human-readable description of the receiver.
+     *
+     * @return a string representation of the event
+     */
+    @Override
+    public String toString() {
+        return "Event {type=" + type + " " + widget + " time=" + time + " data=" + data + " x=" + x + " y=" + y + " width=" + width + " height=" + height + " detail=" + detail + "}"; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Item.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Item.java
new file mode 100644
index 0000000..84df0bf
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Item.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+
+import java.awt.Image;
+
+public abstract class Item extends Widget {
+    String text;
+    Image image;
+
+    public Item(Widget parent, int style) {
+        super(parent, style);
+        text = "";
+    }
+
+    public Item(Widget parent, int style, int index) {
+        this(parent, style);
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Label.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Label.java
new file mode 100644
index 0000000..f9f3ed5
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Label.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+
+public class Label extends Control {
+
+    public Label(Composite parent, int style) {
+        super(parent, SWT.NONE);
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Layout.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Layout.java
new file mode 100644
index 0000000..86a0ca6
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Layout.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+public abstract class Layout {
+
+    protected boolean flushCache(Control control) {
+        return false;
+    }
+
+    protected abstract void layout(Composite composite, boolean flushCache);
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/List.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/List.java
new file mode 100644
index 0000000..a268416
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/List.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionListener;
+
+public class List extends Scrollable {
+    static final int INSET = 3;
+    // static final long /* int */ ListProc;
+    // static final TCHAR ListClass = new TCHAR(0, "LISTBOX", true);
+    boolean addedUCC = false; // indicates whether Bidi UCC were added; 'state & HAS_AUTO_DIRECTION'
+                              // isn't a sufficient indicator
+
+    public List(Composite parent, int style) {
+        super(parent, checkStyle(style));
+    }
+
+    public void add(String string) {
+        // checkWidget();
+        if (string == null)
+            error(SWT.ERROR_NULL_ARGUMENT);
+        // TCHAR buffer = new TCHAR(getCodePage(), string, true);
+        // int result = (int) /* 64 */OS.SendMessage(handle, OS.LB_ADDSTRING, 0, buffer);
+        // if (result == OS.LB_ERR)
+        // error(SWT.ERROR_ITEM_NOT_ADDED);
+        // if (result == OS.LB_ERRSPACE)
+        // error(SWT.ERROR_ITEM_NOT_ADDED);
+        // if ((style & SWT.H_SCROLL) != 0)
+        // setScrollWidth(buffer, true);
+        /// +
+    }
+
+    public void add(String string, int index) {
+        // checkWidget();
+        if (string == null)
+            error(SWT.ERROR_NULL_ARGUMENT);
+        // if (index == -1)
+        // error(SWT.ERROR_INVALID_RANGE);
+        // TCHAR buffer = new TCHAR(getCodePage(), string, true);
+        // int result = (int) /* 64 */OS.SendMessage(handle, OS.LB_INSERTSTRING, index, buffer);
+        // if (result == OS.LB_ERRSPACE)
+        // error(SWT.ERROR_ITEM_NOT_ADDED);
+        // if (result == OS.LB_ERR) {
+        // int count = (int) /* 64 */OS.SendMessage(handle, OS.LB_GETCOUNT, 0, 0);
+        // if (0 <= index && index <= count) {
+        // error(SWT.ERROR_ITEM_NOT_ADDED);
+        // } else {
+        // error(SWT.ERROR_INVALID_RANGE);
+        // }
+        // }
+        // if ((style & SWT.H_SCROLL) != 0)
+        // setScrollWidth(buffer, true);
+        /// +
+    }
+
+    public void addSelectionListener(SelectionListener listener) {
+        // checkWidget();
+        if (listener == null)
+            error(SWT.ERROR_NULL_ARGUMENT);
+        TypedListener typedListener = new TypedListener(listener);
+        // addListener(SWT.Selection, typedListener);
+        // addListener(SWT.DefaultSelection, typedListener);
+        /// +
+    }
+
+
+    static int checkStyle(int style) {
+        return checkBits(style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0);
+    }
+
+
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Listener.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Listener.java
new file mode 100644
index 0000000..11058e9
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Listener.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+
+public interface Listener {
+
+    /**
+     * Sent when an event that the receiver has registered for occurs.
+     *
+     * @param event the event which occurred
+     */
+    void handleEvent(Event event);
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Monitor.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Monitor.java
new file mode 100644
index 0000000..b0ab4ca
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Monitor.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.graphics.Rectangle;
+
+/**
+ * Instances of this class are descriptions of monitors.
+ *
+ * @see Display
+ * @see <a href="http://www.eclipse.org/swt/snippets/#monitor">Monitor snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.0
+ */
+public final class Monitor {
+    long /* int */ handle;
+    int x, y, width, height;
+    int clientX, clientY, clientWidth, clientHeight;
+
+    /**
+     * Prevents uninitialized instances from being created outside the package.
+     */
+    Monitor() {}
+
+    /**
+     * Compares the argument to the receiver, and returns true if they represent the <em>same</em>
+     * object using a class specific comparison.
+     *
+     * @param object the object to compare with this object
+     * @return <code>true</code> if the object is the same as this object and <code>false</code>
+     *         otherwise
+     *
+     * @see #hashCode()
+     */
+    @Override
+    public boolean equals(Object object) {
+        if (object == this)
+            return true;
+        if (!(object instanceof Monitor))
+            return false;
+        Monitor monitor = (Monitor) object;
+        return handle == monitor.handle;
+    }
+
+    /**
+     * Returns a rectangle describing the receiver's size and location relative to its device. Note
+     * that on multi-monitor systems the origin can be negative.
+     *
+     * @return the receiver's bounding rectangle
+     */
+    public Rectangle getBounds() {
+        return new Rectangle(x, y, width, height);
+    }
+
+    /**
+     * Returns a rectangle which describes the area of the receiver which is capable of displaying
+     * data.
+     * 
+     * @return the client area
+     */
+    public Rectangle getClientArea() {
+        return new Rectangle(clientX, clientY, clientWidth, clientHeight);
+    }
+
+    /**
+     * Returns an integer hash code for the receiver. Any two objects that return <code>true</code>
+     * when passed to <code>equals</code> must return the same value for this method.
+     *
+     * @return the receiver's hash
+     *
+     * @see #equals(Object)
+     */
+    @Override
+    public int hashCode() {
+        return (int) /* 64 */handle;
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Scrollable.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Scrollable.java
new file mode 100644
index 0000000..a757b4f
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Scrollable.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+public abstract class Scrollable extends Control {
+
+    Scrollable() {}
+
+    public Scrollable(Composite parent, int style) {
+        super(parent, style);
+    }
+
+    void createWidget() {
+        super.createWidget();
+        // if ((style & SWT.H_SCROLL) != 0)
+        // horizontalBar = createScrollBar(SWT.H_SCROLL);
+        // if ((style & SWT.V_SCROLL) != 0)
+        // verticalBar = createScrollBar(SWT.V_SCROLL);
+        /// +
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Shell.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Shell.java
new file mode 100644
index 0000000..bbb5aa2
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Shell.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.internal.win32.OS;
+
+public class Shell extends Decorations {
+    boolean showWithParent, fullScreen, wasMaximized, modified, center;
+
+    public Shell() {
+        this((Display) null);
+    }
+
+    public Shell(int style) {
+        this((Display) null, style);
+    }
+
+    public Shell(Display display) {
+        this(display, OS.IsWinCE ? SWT.NONE : SWT.SHELL_TRIM);
+    }
+
+    public Shell(Display display, int style) {
+        this(display, null, style, 0, false);
+        System.out.println();
+    }
+
+    public Shell(Shell parent) {
+        // this(parent, OS.IsWinCE ? SWT.NONE : SWT.DIALOG_TRIM);
+        System.out.println();
+    }
+
+    public Shell(Shell parent, int style) {
+        // this(parent != null ? parent.display : null, parent, style, 0, false);
+        System.out.println();
+    }
+
+    public static Shell win32_new(Display display, long /* int */ handle) {
+        System.out.println();
+        return new Shell(display, null, SWT.NO_TRIM, handle, true);
+    }
+
+    public static Shell internal_new(Display display, long /* int */ handle) {
+        System.out.println();
+        return new Shell(display, null, SWT.NO_TRIM, handle, false);
+    }
+
+
+    Shell(Display display, Shell parent, int style, long /* int */ handle, boolean embedded) {
+        super();
+        // checkSubclass(); ///+
+        if (display == null)
+            display = Display.getCurrent();
+        if (display == null)
+            display = Display.getDefault();
+        // if (!display.isValidThread()) {
+        // error(SWT.ERROR_THREAD_INVALID_ACCESS);
+        // }
+        // if (parent != null && parent.isDisposed()) {
+        // error(SWT.ERROR_INVALID_ARGUMENT);
+        // }
+        this.center = parent != null && (style & SWT.SHEET) != 0;
+        this.style = checkStyle(parent, style);
+        this.parent = parent;
+        this.display = display;
+        this.handle = handle;
+        if (handle != 0 && !embedded) {
+            state |= FOREIGN_HANDLE;
+        }
+        reskinWidget();
+        createWidget();
+    }
+
+    static int checkStyle(Shell parent, int style) {
+        style = Decorations.checkStyle(style);
+        style &= ~SWT.TRANSPARENT;
+        int mask = SWT.SYSTEM_MODAL | SWT.APPLICATION_MODAL | SWT.PRIMARY_MODAL;
+        if ((style & SWT.SHEET) != 0) {
+            style &= ~SWT.SHEET;
+            style |= parent == null ? SWT.SHELL_TRIM : SWT.DIALOG_TRIM;
+            if ((style & mask) == 0) {
+                style |= parent == null ? SWT.APPLICATION_MODAL : SWT.PRIMARY_MODAL;
+            }
+        }
+        int bits = style & ~mask;
+        if ((style & SWT.SYSTEM_MODAL) != 0)
+            return bits | SWT.SYSTEM_MODAL;
+        if ((style & SWT.APPLICATION_MODAL) != 0)
+            return bits | SWT.APPLICATION_MODAL;
+        if ((style & SWT.PRIMARY_MODAL) != 0)
+            return bits | SWT.PRIMARY_MODAL;
+        return bits;
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Table.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Table.java
new file mode 100644
index 0000000..055f8d5
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Table.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+
+public class Table extends Composite {
+    TableItem[] items;
+    int[] keys;
+    TableColumn[] columns;
+    int columnCount, customCount, keyCount;
+
+    public Table(Composite parent, int style) {
+        super(parent, checkStyle(style));
+    }
+
+    static int checkStyle(int style) {
+        if ((style & SWT.NO_SCROLL) == 0) {
+            style |= SWT.H_SCROLL | SWT.V_SCROLL;
+        }
+        return checkBits(style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0);
+    }
+
+    public int getItemCount() {
+        return 1; /// +
+    }
+
+    void createItem(TableItem item, int index) {}
+
+    public int getColumnCount() {
+        return columnCount;
+    }
+
+    void createItem(TableColumn column, int index) {}
+
+    public int indexOf(TableItem item) {
+        // checkWidget();
+        if (item == null)
+            error(SWT.ERROR_NULL_ARGUMENT);
+        // TODO - find other loops that can be optimized
+        // if (keys == null) {
+        // int count = (int) /* 64 */OS.SendMessage(handle, OS.LVM_GETITEMCOUNT, 0, 0);
+        // if (1 <= lastIndexOf && lastIndexOf < count - 1) {
+        // if (_getItem(lastIndexOf, false) == item)
+        // return lastIndexOf;
+        // if (_getItem(lastIndexOf + 1, false) == item)
+        // return ++lastIndexOf;
+        // if (_getItem(lastIndexOf - 1, false) == item)
+        // return --lastIndexOf;
+        // }
+        // if (lastIndexOf < count / 2) {
+        // for (int i = 0; i < count; i++) {
+        // if (_getItem(i, false) == item)
+        // return lastIndexOf = i;
+        // }
+        // } else {
+        // for (int i = count - 1; i >= 0; --i) {
+        // if (_getItem(i, false) == item)
+        // return lastIndexOf = i;
+        // }
+        // }
+        // } else {
+        // for (int i = 0; i < keyCount; i++) {
+        // if (items[i] == item)
+        // return keys[i];
+        // }
+        // }
+        return -1; /// +
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/TableColumn.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/TableColumn.java
new file mode 100644
index 0000000..42d04bd
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/TableColumn.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+
+public class TableColumn extends Item {
+    Table parent;
+    boolean resizable, moveable;
+    String toolTipText;
+    int id;
+
+    public TableColumn(Table parent, int style) {
+        super(parent, checkStyle(style));
+        resizable = true;
+        this.parent = parent;
+        parent.createItem(this, parent.getColumnCount());
+    }
+
+    static int checkStyle(int style) {
+        return checkBits(style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/TableItem.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/TableItem.java
new file mode 100644
index 0000000..4bd5e55
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/TableItem.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+
+public class TableItem extends Item {
+    Table parent;
+
+    public TableItem(Table parent, int style) {
+        this(parent, style, checkNull(parent).getItemCount(), true);
+    }
+
+
+    TableItem(Table parent, int style, int index, boolean create) {
+        super(parent, style);
+        this.parent = parent;
+        if (create)
+            parent.createItem(this, index);
+    }
+
+    static Table checkNull(Table control) {
+        if (control == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        return control;
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Text.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Text.java
new file mode 100644
index 0000000..44b84a7
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Text.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+
+public class Text extends Scrollable {
+
+    public Text(Composite parent, int style) {
+        super(parent, checkStyle(style));
+    }
+
+    public int getStyle() {
+        return style;
+    }
+
+    public void setText(String text) {
+        this.value = text;
+    }
+
+    public String getText() {
+        return this.value;
+    }
+
+    static int checkStyle(int style) {
+        if ((style & SWT.SEARCH) != 0) {
+            style |= SWT.SINGLE | SWT.BORDER;
+            style &= ~SWT.PASSWORD;
+            /*
+             * NOTE: ICON_CANCEL has the same value as H_SCROLL and ICON_SEARCH has the same value
+             * as V_SCROLL so they are cleared because SWT.SINGLE is set.
+             */
+        }
+        if ((style & SWT.SINGLE) != 0 && (style & SWT.MULTI) != 0) {
+            style &= ~SWT.MULTI;
+        }
+        style = checkBits(style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+        if ((style & SWT.SINGLE) != 0)
+            style &= ~(SWT.H_SCROLL | SWT.V_SCROLL | SWT.WRAP);
+        if ((style & SWT.WRAP) != 0) {
+            style |= SWT.MULTI;
+            style &= ~SWT.H_SCROLL;
+        }
+        if ((style & SWT.MULTI) != 0)
+            style &= ~SWT.PASSWORD;
+        if ((style & (SWT.SINGLE | SWT.MULTI)) != 0)
+            return style;
+        if ((style & (SWT.H_SCROLL | SWT.V_SCROLL)) != 0)
+            return style | SWT.MULTI;
+        return style | SWT.SINGLE;
+    }
+
+    public void setEditable(boolean editable) {}
+
+    public void addModifyListener(ModifyListener listener) {
+        // checkWidget();
+        if (listener == null)
+            error(SWT.ERROR_NULL_ARGUMENT);
+        TypedListener typedListener = new TypedListener(listener);
+        addListener(SWT.Modify, typedListener);
+    }
+
+    public int getCaretPosition() {
+        return 0; /// +
+    }
+
+    public void clearSelection() {
+        // checkWidget ();
+        // if (OS.IsWinCE) {
+        // int[] end = new int[1];
+        // OS.SendMessage(handle, OS.EM_GETSEL, (int[]) null, end);
+        // OS.SendMessage(handle, OS.EM_SETSEL, end[0], end[0]);
+        // } else {
+        // OS.SendMessage(handle, OS.EM_SETSEL, -1, 0);
+        // }
+        /// +
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Tree.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Tree.java
new file mode 100644
index 0000000..d828d60
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Tree.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+
+import org.eclipse.swt.SWT;
+
+public class Tree extends Composite {
+    public Tree(Composite parent, int style) {
+        super(parent, checkStyle(style));
+    }
+
+    static int checkStyle(int style) {
+        /*
+         * Feature in Windows. Even when WS_HSCROLL or WS_VSCROLL is not specified, Windows creates
+         * trees and tables with scroll bars. The fix is to set H_SCROLL and V_SCROLL.
+         * 
+         * NOTE: This code appears on all platforms so that applications have consistent scroll bar
+         * behavior.
+         */
+        if ((style & SWT.NO_SCROLL) == 0) {
+            style |= SWT.H_SCROLL | SWT.V_SCROLL;
+        }
+        /*
+         * Note: Windows only supports TVS_NOSCROLL and TVS_NOHSCROLL.
+         */
+        if ((style & SWT.H_SCROLL) != 0 && (style & SWT.V_SCROLL) == 0) {
+            style |= SWT.V_SCROLL;
+        }
+        return checkBits(style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0);
+    }
+
+
+    void createItem(TreeItem item, long /* int */ hParent, long /* int */ hInsertAfter, long /* int */ hItem) {
+        /// +
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/TreeItem.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/TreeItem.java
new file mode 100644
index 0000000..62e12e3
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/TreeItem.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.internal.win32.OS;
+
+public class TreeItem extends Item {
+    public long /* int */ handle;
+    Tree parent;
+    String[] strings;
+    Image[] images;
+    Font font;
+    Font[] cellFont;
+    boolean cached;
+    int background = -1, foreground = -1;
+    int[] cellBackground, cellForeground;
+
+    public TreeItem(Tree parent, int style) {
+        this(parent, style, OS.TVGN_ROOT, OS.TVI_LAST, 0);
+    }
+
+    public TreeItem(Tree parent, int style, int index) {
+        this(parent, style, OS.TVGN_ROOT, findPrevious(parent, index), 0);
+    }
+
+    public TreeItem(TreeItem parentItem, int style) {
+        this(checkNull(parentItem).parent, style, parentItem.handle, OS.TVI_LAST, 0);
+    }
+
+    public TreeItem(TreeItem parentItem, int style, int index) {
+        this(checkNull(parentItem).parent, style, parentItem.handle, findPrevious(parentItem, index), 0);
+    }
+
+    TreeItem(Tree parent, int style, long /* int */ hParent, long /* int */ hInsertAfter, long /* int */ hItem) {
+        super(parent, style);
+        this.parent = parent;
+        parent.createItem(this, hParent, hInsertAfter, hItem);
+    }
+
+    static TreeItem checkNull(TreeItem item) {
+        if (item == null)
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+        return item;
+    }
+
+    static long /* int */ findPrevious(TreeItem parentItem, int index) {
+        if (parentItem == null)
+            return 0;
+        if (index < 0)
+            SWT.error(SWT.ERROR_INVALID_RANGE);
+        if (index == 0)
+            return OS.TVI_FIRST;
+        Tree parent = parentItem.parent;
+        long /* int */ hwnd = parent.handle, hParent = parentItem.handle;
+        // long /* int */ hFirstItem = OS.SendMessage(hwnd, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD,
+        // hParent);
+        // long /* int */ hItem = parent.findItem(hFirstItem, index - 1);
+        // if (hItem == 0)
+        // SWT.error(SWT.ERROR_INVALID_RANGE);
+        // return hItem;
+        return 0; /// +
+    }
+
+    static long /* int */ findPrevious(Tree parent, int index) {
+        if (parent == null)
+            return 0;
+        if (index < 0)
+            SWT.error(SWT.ERROR_INVALID_RANGE);
+        if (index == 0)
+            return OS.TVI_FIRST;
+        long /* int */ hwnd = parent.handle;
+        // long /*int*/ hFirstItem = OS.SendMessage (hwnd, OS.TVM_GETNEXTITEM, OS.TVGN_ROOT, 0);
+        // long /*int*/ hItem = parent.findItem (hFirstItem, index - 1);
+        // if (hItem == 0) SWT.error (SWT.ERROR_INVALID_RANGE);
+        // return hItem;
+        return 0; /// +
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/TypedListener.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/TypedListener.java
new file mode 100644
index 0000000..40f05e1
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/TypedListener.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * Instances of this class are <em>internal SWT implementation</em> objects which provide a mapping
+ * between the typed and untyped listener mechanisms that SWT supports.
+ * <p>
+ * <b>IMPORTANT:</b> This class is <em>not</em> part of the SWT public API. It is marked public only
+ * so that it can be shared within the packages provided by SWT. It should never be referenced from
+ * application code.
+ * </p>
+ *
+ * @see Listener
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public class TypedListener implements Listener {
+
+    /**
+     * The receiver's event listener
+     */
+    protected SWTEventListener eventListener;
+
+    /**
+     * Constructs a new instance of this class for the given event listener.
+     * <p>
+     * <b>IMPORTANT:</b> This method is <em>not</em> part of the SWT public API. It is marked public
+     * only so that it can be shared within the packages provided by SWT. It should never be
+     * referenced from application code.
+     * </p>
+     *
+     * @param listener the event listener to store in the receiver
+     * 
+     * @noreference This method is not intended to be referenced by clients.
+     */
+    public TypedListener(SWTEventListener listener) {
+        eventListener = listener;
+    }
+
+    /**
+     * Returns the receiver's event listener.
+     * <p>
+     * <b>IMPORTANT:</b> This method is <em>not</em> part of the SWT public API. It is marked public
+     * only so that it can be shared within the packages provided by SWT. It should never be
+     * referenced from application code.
+     * </p>
+     *
+     * @return the receiver's event listener
+     * 
+     * @noreference This method is not intended to be referenced by clients.
+     */
+    public SWTEventListener getEventListener() {
+        return eventListener;
+    }
+
+    /**
+     * Handles the given event.
+     * <p>
+     * <b>IMPORTANT:</b> This method is <em>not</em> part of the SWT public API. It is marked public
+     * only so that it can be shared within the packages provided by SWT. It should never be
+     * referenced from application code.
+     * </p>
+     * 
+     * @param e the event to handle
+     * 
+     * @noreference This method is not intended to be referenced by clients.
+     */
+    public void handleEvent(Event e) {
+        /// +
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Widget.java b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Widget.java
new file mode 100644
index 0000000..1d01f4a
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.servlets/src/org/eclipse/swt/widgets/Widget.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ * 
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+
+public abstract class Widget {
+    Display display;
+    int style, state;
+    Object data;
+    protected String value;
+
+    /* Global state flags */
+    static final int DISPOSED = 1 << 0;
+    static final int CANVAS = 1 << 1;
+    static final int KEYED_DATA = 1 << 2;
+    static final int DISABLED = 1 << 3;
+    static final int HIDDEN = 1 << 4;
+
+    /* More global widget state flags */
+    static final int TRACK_MOUSE = 1 << 13;
+    static final int FOREIGN_HANDLE = 1 << 14;
+    static final int DRAG_DETECT = 1 << 15;
+
+    /* Notify of the opportunity to skin this widget */
+    static final int SKIN_NEEDED = 1 << 21;
+
+    Widget() {}
+
+    public Widget(Widget parent, int style) {
+        this.style = style;
+        display = parent.display;
+    }
+
+    static int checkBits(int style, int int0, int int1, int int2, int int3, int int4, int int5) {
+        int mask = int0 | int1 | int2 | int3 | int4 | int5;
+        if ((style & mask) == 0)
+            style |= int0;
+        if ((style & int0) != 0)
+            style = (style & ~mask) | int0;
+        if ((style & int1) != 0)
+            style = (style & ~mask) | int1;
+        if ((style & int2) != 0)
+            style = (style & ~mask) | int2;
+        if ((style & int3) != 0)
+            style = (style & ~mask) | int3;
+        if ((style & int4) != 0)
+            style = (style & ~mask) | int4;
+        if ((style & int5) != 0)
+            style = (style & ~mask) | int5;
+        return style;
+    }
+
+    public Display getDisplay() {
+        Display display = this.display;
+        if (display == null)
+            error(SWT.ERROR_WIDGET_DISPOSED);
+        return display;
+    }
+
+    void error(int code) {
+        SWT.error(code);
+    }
+
+    public boolean isDisposed() {
+        return (state & DISPOSED) != 0;
+    }
+
+    void reskinWidget() {
+        if ((state & SKIN_NEEDED) != SKIN_NEEDED) {
+            this.state |= SKIN_NEEDED;
+            display.addSkinnableWidget(this);
+        }
+    }
+
+    void checkOrientation(Widget parent) {
+        style &= ~SWT.MIRRORED;
+        if ((style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT)) == 0) {
+            if (parent != null) {
+                if ((parent.style & SWT.LEFT_TO_RIGHT) != 0)
+                    style |= SWT.LEFT_TO_RIGHT;
+                if ((parent.style & SWT.RIGHT_TO_LEFT) != 0)
+                    style |= SWT.RIGHT_TO_LEFT;
+            }
+        }
+        style = checkBits(style, SWT.LEFT_TO_RIGHT, SWT.RIGHT_TO_LEFT, 0, 0, 0, 0);
+    }
+
+    public void addListener(int eventType, Listener listener) {
+        // checkWidget();
+        if (listener == null)
+            error(SWT.ERROR_NULL_ARGUMENT);
+        // _addListener(eventType, listener);
+        /// +
+    }
+
+    public void setData(Object data) {
+        // checkWidget();
+        if ((state & KEYED_DATA) != 0) {
+            ((Object[]) this.data)[0] = data;
+        } else {
+            this.data = data;
+        }
+    }
+
+    public void setData(String key, Object value) {
+        // checkWidget();
+        if (key == null)
+            error(SWT.ERROR_NULL_ARGUMENT);
+        int index = 1;
+        Object[] table = null;
+        if ((state & KEYED_DATA) != 0) {
+            table = (Object[]) data;
+            while (index < table.length) {
+                if (key.equals(table[index]))
+                    break;
+                index += 2;
+            }
+        }
+        if (value != null) {
+            if ((state & KEYED_DATA) != 0) {
+                if (index == table.length) {
+                    Object[] newTable = new Object[table.length + 2];
+                    System.arraycopy(table, 0, newTable, 0, table.length);
+                    data = table = newTable;
+                }
+            } else {
+                table = new Object[3];
+                table[0] = data;
+                data = table;
+                state |= KEYED_DATA;
+            }
+            table[index] = key;
+            table[index + 1] = value;
+        } else {
+            if ((state & KEYED_DATA) != 0) {
+                if (index != table.length) {
+                    int length = table.length - 2;
+                    if (length == 1) {
+                        data = table[0];
+                        state &= ~KEYED_DATA;
+                    } else {
+                        Object[] newTable = new Object[length];
+                        System.arraycopy(table, 0, newTable, 0, index);
+                        System.arraycopy(table, index + 2, newTable, index, length - index);
+                        data = newTable;
+                    }
+                }
+            }
+        }
+        if (key.equals(SWT.SKIN_CLASS) || key.equals(SWT.SKIN_ID))
+            this.reskin(SWT.ALL);
+    }
+
+
+    public void reskin(int flags) {
+        // checkWidget();
+        reskinWidget();
+        if ((flags & SWT.ALL) != 0)
+            reskinChildren(flags);
+    }
+
+    void reskinChildren(int flags) {}
+
+    public Object getData() {
+        // checkWidget();
+        return (state & KEYED_DATA) != 0 ? ((Object[]) data)[0] : data;
+    }
+
+    public Object getData(String key) {
+        // checkWidget();
+        if (key == null)
+            error(SWT.ERROR_NULL_ARGUMENT);
+        if ((state & KEYED_DATA) != 0) {
+            Object[] table = (Object[]) data;
+            for (int i = 1; i < table.length; i += 2) {
+                if (key.equals(table[i]))
+                    return table[i + 1];
+            }
+        }
+        return null;
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/.classpath b/plugins/org.eclipse.emf.parsley.web.tools/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/.project b/plugins/org.eclipse.emf.parsley.web.tools/.project
new file mode 100644
index 0000000..fdf9923
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.parsley.web.tools</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.parsley.web.tools/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..8fcbc45
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/META-INF/MANIFEST.MF
@@ -0,0 +1,33 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Web
+Bundle-SymbolicName: org.eclipse.emf.parsley.web.tools;singleton:=true
+Bundle-Version: 0.5.2.qualifier
+Bundle-Activator: org.eclipse.emf.parsley.web.tools.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.wst.common.project.facet.core,
+ org.eclipse.wst.common.project.facet.ui,
+ org.eclipse.wst.common.modulecore,
+ org.eclipse.jst.j2ee.web,
+ org.eclipse.jst.j2ee,
+ org.eclipse.jst.j2ee.core,
+ org.eclipse.emf.common,
+ org.eclipse.emf.ecore,
+ org.eclipse.jem,
+ org.eclipse.emf.parsley.web.servlets,
+ org.eclipse.xtext.ui,
+ org.eclipse.jdt.core,
+ org.eclipse.jdt.launching,
+ org.eclipse.jem.workbench,
+ org.eclipse.jst.servlet.ui,
+ org.eclipse.wst.web.ui,
+ org.eclipse.wst.common.frameworks,
+ org.eclipse.jst.j2ee.ui,
+ org.eclipse.wst.server.core,
+ org.eclipse.wst.common.core,
+ org.eclipse.jem.util,
+ org.eclipse.wst.server.http.core
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/build.properties b/plugins/org.eclipse.emf.parsley.web.tools/build.properties
new file mode 100644
index 0000000..3337a4a
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               templates/,\
+               icons/
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/icons/share16.png b/plugins/org.eclipse.emf.parsley.web.tools/icons/share16.png
new file mode 100644
index 0000000..0124c4b
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/icons/share16.png
Binary files differ
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/plugin.xml b/plugins/org.eclipse.emf.parsley.web.tools/plugin.xml
new file mode 100644
index 0000000..dce7df7
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/plugin.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+<extension point="org.eclipse.wst.common.project.facet.core.facets">
+
+  <category
+        id="org.eclipse.emf.parsley.web.tools.category">
+     <label>
+        EMF Parsley Web
+     </label>
+  </category>
+
+  <project-facet id="parsleyweb.core">
+    <label>EMF Parsley Web Server</label>
+    <description>
+      Enables generation of EMF Parsley server.
+    </description>
+    <member
+          category="org.eclipse.emf.parsley.web.tools.category">
+    </member>
+  </project-facet>
+
+  <project-facet id="parsleyweb.ui.angularjs">
+    <label>UI AngularJS client</label>
+    <description>
+      Enables generation of AngularJS UI.
+    </description>
+    <member
+          category="org.eclipse.emf.parsley.web.tools.category">
+    </member>
+  </project-facet>
+
+  <project-facet-version
+        facet="parsleyweb.core"
+        version="0.5">
+     <constraint>
+      <requires facet="jst.web"/>
+    </constraint>
+     <action
+           id="parsleyweb.core.install"
+           type="install">
+	    <delegate
+	          class="org.eclipse.emf.parsley.web.tools.ParsleyWebFacetInstallDelegate">
+	    </delegate>
+     <config-factory
+           class="org.eclipse.emf.parsley.web.tools.ParsleyWebFacetInstallConfig$Factory">
+     </config-factory>
+     </action>
+  </project-facet-version>
+
+  <project-facet-version
+        facet="parsleyweb.ui.angularjs"
+        version="0.5">
+     <constraint>
+      <requires facet="jst.web"/>
+    </constraint>
+     <action
+           id="parsleyweb.ui.angularjs"
+           type="install">
+        <delegate
+              class="org.eclipse.emf.parsley.web.tools.ui.angularjs.ParsleyWebFacetUiAngularDelegate">
+        </delegate>
+     </action>
+  </project-facet-version>
+  
+</extension>
+
+<extension
+      point="org.eclipse.wst.common.project.facet.ui.images">
+   <image
+         category="org.eclipse.emf.parsley.web.tools.category"
+         path="icons/share16.png">
+   </image>
+</extension>
+<extension
+      point="org.eclipse.wst.common.project.facet.ui.wizardPages">
+   <wizard-pages
+         action="parsleyweb.core.install">
+      <page
+            class="org.eclipse.emf.parsley.web.tools.ParsleyWebFacetInstallPage">
+      </page>
+   </wizard-pages>
+</extension>
+<extension
+      point="org.eclipse.wst.common.project.facet.core.runtimes">
+   <supported>
+      <facet
+            id="parsleyweb.core">
+      </facet>
+      <facet
+            id="parsleyweb.ui.angularjs">
+      </facet>
+      <runtime-component
+            any="true">
+      </runtime-component>
+   </supported>
+</extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/pom.xml b/plugins/org.eclipse.emf.parsley.web.tools/pom.xml
new file mode 100644
index 0000000..108354d
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/pom.xml
@@ -0,0 +1,14 @@
+<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>
+		<relativePath>../../releng/org.eclipse.emf.parsley.parent/pom.xml</relativePath>
+		<groupId>org.eclipse.emf.parsley</groupId>
+		<artifactId>org.eclipse.emf.parsley.parent</artifactId>
+		<version>0.5.2-SNAPSHOT</version>
+	</parent>
+	
+  <artifactId>org.eclipse.emf.parsley.web.tools</artifactId>
+  <packaging>eclipse-plugin</packaging>  
+
+</project>
\ No newline at end of file
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/Activator.java b/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/Activator.java
new file mode 100644
index 0000000..6c469e6
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/Activator.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.web.tools;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Plug-in Activator
+ * 
+ * @author Vincenzo Caselli
+ * 
+ */
+public class Activator extends AbstractUIPlugin {
+
+    public static final String PLUGIN_ID = "org.eclipse.emf.parsley.web.tools"; //$NON-NLS-1$
+
+    private static Activator plugin;
+
+    public Activator() {}
+
+    public void start(BundleContext context) throws Exception {
+        super.start(context);
+        plugin = this;
+    }
+
+    public void stop(BundleContext context) throws Exception {
+        plugin = null;
+        super.stop(context);
+    }
+
+    public static Activator getDefault() {
+        return plugin;
+    }
+
+    public static IStatus createErrorStatus(final String msg) {
+        return createErrorStatus(msg, null);
+    }
+
+    public static IStatus createErrorStatus(final String msg, final Exception e) {
+        return new Status(IStatus.ERROR, PLUGIN_ID, 0, msg, e);
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/ParsleyWebFacetInstallConfig.java b/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/ParsleyWebFacetInstallConfig.java
new file mode 100644
index 0000000..ee6d949
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/ParsleyWebFacetInstallConfig.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.web.tools;
+
+import org.eclipse.wst.common.project.facet.core.IActionConfigFactory;
+
+/**
+ * Wizard class for holding user choices
+ * 
+ * @author Vincenzo Caselli
+ * 
+ */
+public class ParsleyWebFacetInstallConfig {
+
+    public enum PERSISTENCE_OPTION {
+        NONE, TENEO, CDO
+    };
+
+    private PERSISTENCE_OPTION persistenceOption;
+
+    public static final class Factory implements IActionConfigFactory {
+        public Object create() {
+            return new ParsleyWebFacetInstallConfig();
+        }
+    }
+
+    public PERSISTENCE_OPTION getPersistenceOption() {
+        return persistenceOption;
+    }
+
+    public void setPersistenceOption(PERSISTENCE_OPTION persistenceOption) {
+        this.persistenceOption = persistenceOption;
+    }
+
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/ParsleyWebFacetInstallDelegate.java b/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/ParsleyWebFacetInstallDelegate.java
new file mode 100644
index 0000000..2e5da97
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/ParsleyWebFacetInstallDelegate.java
@@ -0,0 +1,407 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.web.tools;
+
+
+import java.util.Arrays;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.parsley.web.tools.ParsleyWebFacetInstallConfig.PERSISTENCE_OPTION;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jst.j2ee.web.componentcore.util.WebArtifactEdit;
+import org.eclipse.jst.j2ee.webapplication.WebApp;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.common.componentcore.internal.ComponentcoreFactory;
+import org.eclipse.wst.common.componentcore.internal.ProjectComponents;
+import org.eclipse.wst.common.componentcore.internal.ReferencedComponent;
+import org.eclipse.wst.common.componentcore.internal.StructureEdit;
+import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
+import org.eclipse.wst.common.project.facet.core.IDelegate;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.xtext.ui.XtextProjectHelper;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+
+import com.google.common.base.Strings;
+
+/**
+* Wizard class for execution of actions for the core Parsley-JEE project creation
+* 
+* @author Vincenzo Caselli
+* 
+*/
+public class ParsleyWebFacetInstallDelegate implements IDelegate {
+
+
+    @Override
+    public void execute(final IProject iProject, final IProjectFacetVersion fv, final Object config, final IProgressMonitor monitor) throws CoreException {
+        monitor.beginTask("Processing EMF Parsley Web facet", 2);
+
+        final ParsleyWebFacetInstallConfig wizardUserOptions = (ParsleyWebFacetInstallConfig) config;
+
+        setWebModuleDependencies(iProject, monitor, wizardUserOptions);
+
+        final IFolder webInfLib = Utils.getFolder(iProject, "WEB-INF/lib");
+
+        // Utils.copyFromPluginToWorkspace(org.eclipse.emf.parsley.hwt.Activator.getDefault().getBundle(),
+        // new Path("/target/org.eclipse.emf.parsley.hwt-0.0.1-SNAPSHOT.jar"),
+        // webInfLib.getFile("org.eclipse.emf.parsley.hwt.jar"));
+
+//        Utils.copyFromPluginToWorkspace(org.eclipse.emf.parsley.web.servlets.Activator.getDefault().getBundle(), new Path("/target/org.eclipse.emf.parsley.web.servlets-0.0.1-SNAPSHOT.jar"),
+//                        webInfLib.getFile("emf.parsley.web-core.jar"));
+
+        Utils.copyFile(iProject, monitor, "/templates/pom.xml", iProject.getFile("pom.xml"), new Properties());
+
+        addProjectNature(iProject, monitor, XtextProjectHelper.NATURE_ID);
+        addProjectNature(iProject, monitor, "org.eclipse.m2e.core.maven2Nature"); //TODO should take it from a predefined Maven plugin constant
+
+        Properties replaceStrings;
+        String projectName = iProject.getName();
+        IPackageFragment pack = JavaCore.create(iProject).getPackageFragmentRoot(iProject.getFolder("src")).createPackageFragment(projectName, true, monitor);
+        IFolder folder = iProject.getFolder(pack.getPath().removeFirstSegments(1));
+
+        replaceStrings = new Properties();
+        replaceStrings.setProperty("org.eclipse.emf.parsley.web.tools.servlets", projectName);
+        Utils.copyFile(iProject, monitor, "/templates/module.parsley", iProject.getFolder("src").getFile("module.parsley"), replaceStrings);
+
+        replaceStrings = new Properties();
+        replaceStrings.setProperty("org.eclipse.emf.parsley.web.tools.templates", projectName);
+        Utils.copyFile(iProject, monitor, "/templates/ParsleyWebGuiceModule.java", folder.getFile("ParsleyWebGuiceModule.java"), replaceStrings);
+
+        replaceStrings = new Properties();
+        replaceStrings.setProperty("org.eclipse.emf.parsley.web.tools.templates", projectName);
+        Utils.copyFile(iProject, monitor, "/templates/ParsleyGuiceServletContextListener.java", folder.getFile("ParsleyGuiceServletContextListener.java"), replaceStrings);
+
+        replaceStrings = new Properties();
+
+        replaceStrings.setProperty("org.eclipse.emf.parsley.web.tools.templates", projectName);
+
+        Utils.copyFile(iProject, monitor, "/templates/ParsleyContextListener.java", folder.getFile("ParsleyContextListener.java"), replaceStrings);
+
+        setupWebInfXml(iProject);
+
+        ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.CLEAN_BUILD, monitor);
+        
+        monitor.done();
+    }
+
+
+    private void setWebModuleDependencies(final IProject iProject, final IProgressMonitor monitor, ParsleyWebFacetInstallConfig wizardUserOptions) {
+        Set<String> pluginJarSet = getPluginJarSet(wizardUserOptions);
+        Map<String, Object> pluginInstalledPathMap = getInstalledPluginPathMap(pluginJarSet, monitor);
+
+        StructureEdit se = StructureEdit.getStructureEditForWrite(iProject);
+        ProjectComponents root = se.getComponentModelRoot();
+        WorkbenchComponent firstComponent = (WorkbenchComponent) root.getComponents().get(0);
+
+        addDependentModules(iProject, pluginInstalledPathMap, firstComponent, wizardUserOptions, monitor);
+
+        addMavenDependentModule(iProject, "guice-servlet-4.0.jar", "com/google/inject/extensions/guice-servlet/4.0", firstComponent, monitor);
+        addMavenDependentModule(iProject, "json-simple-1.1.1.jar", "com/googlecode/json-simple/json-simple/1.1.1", firstComponent, monitor);
+
+        se.save(monitor);
+    }
+
+    private void addProjectNature(final IProject iProject, final IProgressMonitor monitor, String natureId) throws CoreException {
+        IProjectDescription description = iProject.getDescription();
+        String[] currentNatures = description.getNatureIds();
+        String[] newNatures = Arrays.copyOf(currentNatures, currentNatures.length + 1);
+        newNatures[currentNatures.length] = natureId;
+        description.setNatureIds(newNatures);
+        iProject.setDescription(description, monitor);
+    }
+
+    private Set<String> getPluginJarSet(final ParsleyWebFacetInstallConfig wizardUserOptions) {
+        return new LinkedHashSet<String>() {
+            {
+                add("com.google.guava");
+                add("com.google.inject");
+                add("javax.inject");
+                add("javax.persistence");
+                add("org.apache.commons.logging");
+                add("org.apache.log4j");
+                add("org.eclipse.jface");
+                add("org.eclipse.core.commands");
+                add("org.eclipse.core.databinding");
+                add("org.eclipse.core.databinding.observable");
+                add("org.eclipse.core.databinding.property");
+                add("org.eclipse.jface.databinding");
+                add("org.eclipse.ui.workbench");
+                add("org.eclipse.equinox.common");
+                add("org.eclipse.ui.views");
+                add("org.eclipse.ui.forms");
+                // add("org.eclipse.swt.win32.win32.x86_64");
+                add("org.eclipse.emf");
+                add("org.eclipse.emf.common");
+                add("org.eclipse.emf.common.ui");
+                add("org.eclipse.emf.databinding");
+                add("org.eclipse.emf.ecore");
+                add("org.eclipse.emf.ecore.edit");
+                add("org.eclipse.emf.ecore.xmi");
+                add("org.eclipse.emf.edit");
+                add("org.eclipse.emf.edit.ui");
+                add("org.eclipse.equinox.registry");
+                add("org.eclipse.emf.parsley.common");
+                add("org.eclipse.emf.parsley.runtime.common");
+                add("org.eclipse.emf.parsley.web.servlets");
+
+
+                if (wizardUserOptions.getPersistenceOption().equals(PERSISTENCE_OPTION.TENEO)) {
+                    // Just in case Teneo is installed, then its needed plugins are referenced
+                    // in plugins
+                    add("org.eclipse.emf.teneo.hibernate.mapper");
+                    add("org.eclipse.emf.teneo.annotations");
+                    add("org.eclipse.emf.teneo.hibernate");
+                    add("org.eclipse.emf.teneo");
+                    // Deps of org.hibernate
+                    add("antlr");
+                    add("hibernate-commons-annotations");
+                    add("hibernate-core");
+                    add("jboss-logging");
+                    add("jboss-transaction-api_1.2_spec");
+                    // Deps of org.eclipse.m2e.archetype.common
+                    add("dom4j");
+                }
+            }
+        };
+    }
+
+    private Map<String, Object> getInstalledPluginPathMap(Set<String> pluginJarSet, final IProgressMonitor monitor) {
+        Map<String, Object> map = new HashMap<String, Object>();
+        try {
+            BundleContext ctx = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
+            Bundle[] bundles = ctx.getBundles();
+            for (Bundle bundle : bundles) {
+                String pluginId = bundle.getSymbolicName();
+//                if (bundle.getLocation().indexOf("/plugins/") > -1 && pluginId.indexOf("parsley") > -1) {
+                if (bundle.getLocation().indexOf("/plugins/") > -1 ) {
+                    if (pluginJarSet.contains(pluginId)) {
+                        map.put(pluginId, bundle);
+                        logAdded(pluginId, "plugins", bundle.getLocation());
+                    } else {
+                        Dictionary<String, String> deps = bundle.getHeaders();
+                        Enumeration<String> keysEnum = deps.keys();
+                        while (keysEnum.hasMoreElements()) {
+                            String depKey = keysEnum.nextElement();
+                            String depsValues = deps.get(depKey);
+                            // System.out.println("\t\t" + depKey + ": " + depsValues);
+                            if ("Embedded-Artifacts".equals(depKey)) {
+                                String[] depsArray = depsValues.split(";");
+                                /*
+                                 * Structure has the following pattern:
+                                 * 
+                                 * archetype-common-2.3.jar, g="org.apache.maven.archetype",
+                                 * a="archetype-common", v="2.3",
+                                 * 
+                                 * dom4j-1.6.1.jar, g="dom4j", a="dom4j", v="1.6.1",
+                                 */
+                                for (int j = 0; j < depsArray.length; j++) {
+                                    // System.out.println("depsArray[" + j + "] = " + depsArray[j]);
+                                    if (depsArray[j].startsWith("a=\"")) {
+                                        String depId = depsArray[j].substring(3, depsArray[j].length() - 1);
+                                        // System.out.println(depId);
+                                        if (pluginJarSet.contains(depId)) {
+                                            String depIdWithVersion = depsArray[j - 2].split(",")[1];
+                                            map.put(depIdWithVersion, bundle.getSymbolicName() + "_" + bundle.getVersion() + "/" + depIdWithVersion);
+                                            logAdded(depIdWithVersion, "Embedded-Artifacts", bundle.getSymbolicName() + "_" + bundle.getVersion() + "/" + depIdWithVersion);
+                                            break;
+                                        }
+                                    }
+                                }
+                                // System.out.println(depsArray);
+                                break;
+                            }
+                            if ("Bundle-ClassPath".equals(depKey)) {
+                                if (!depsValues.equals(".")) {
+                                    String[] depsArray = depsValues.split(",");
+                                    // System.out.println(depsValues);
+                                    /*
+                                     * Structure has the following pattern:
+                                     * 
+                                     * antlr-2.7.7.jar,c3p0-0.9.2.1.jar,dom4j-1.6.1.jar,ehcache-core
+                                     * -2.4 .3.jar, ...
+                                     */
+                                    for (int j = 0; j < depsArray.length; j++) {
+                                        // System.out.println("depsArray[" + j + "] = " +
+                                        // depsArray[j]);
+                                        if (!depsArray[j].equals(".") && depsArray[j].lastIndexOf(".jar") > -1) {
+                                            String depId = depsArray[j].substring(0, depsArray[j].lastIndexOf(".jar"));
+                                            // System.out.println(depId);
+                                            depId = stripVersionIfExists(depId);
+                                            // String depId = depsArray[j].substring(0,
+                                            // depsArray[j].lastIndexOf("-"));
+                                            // System.out.println(depId);
+                                            if (pluginJarSet.contains(depId)) {
+                                                map.put(depsArray[j], bundle.getSymbolicName() + "_" + bundle.getVersion() + "/" + depsArray[j]);
+                                                logAdded(depsArray[j], "Bundle-ClassPath", bundle.getSymbolicName() + "_" + bundle.getVersion() + "/" + depsArray[j]);
+                                            }
+                                        }
+                                    }
+                                    // System.out.println(depsArray);
+                                }
+                                break;
+                            }
+                        }
+                    }
+                    // Enumeration<String> keys = bundle.getHeaders().keys();
+                    // while (keys.hasMoreElements()) {
+                    // String key = keys.nextElement();
+                    // System.out.println(key + "\t\t" + bundle.getHeaders().get(key));
+                    // }
+                }
+
+            }
+
+            monitor.worked(1);
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return map;
+    }
+
+    private void logAdded(String pluginId, String from, String location) {
+        System.out.println("Added  " + Strings.padEnd(pluginId, 50, ' ') + from + "\t\t" + location);
+    }
+
+
+    private String stripVersionIfExists(String depId) {
+        int posLastDot = depId.lastIndexOf('.');
+        int posLastDash = depId.lastIndexOf('-');
+        if (posLastDot > -1 && posLastDash > -1) {
+            return depId.substring(0, posLastDash);
+        }
+        return depId;
+    }
+
+
+    private void addDependentModules(IProject iProject, Map<String, Object> pluginInstalledPathMap, WorkbenchComponent firstComponent, ParsleyWebFacetInstallConfig wizardUserOptions,
+                    IProgressMonitor monitor) {
+        for (String pluginId : pluginInstalledPathMap.keySet()) {
+            Object obj = pluginInstalledPathMap.get(pluginId);
+            String archiveName;
+            String bundleIdVersionJar;
+            String bundleUri = null;
+            if (obj instanceof Bundle) {
+                Bundle bundle = (Bundle) obj;
+//                System.out.println(bundle.getLocation());
+                if (("org.eclipse.emf.parsley.common".equals(pluginId) || "org.eclipse.emf.parsley.runtime.common".equals(pluginId)) 
+                		&& !bundle.getLocation().endsWith(".jar")) {
+                	checkForImportedPlugins(pluginId, bundle);
+                	//EMF Parsley Project development case
+                	bundleUri = "module:/resource/"+pluginId+"/"+pluginId;
+                	//archiveName="org.eclipse.emf.parsley.runtime.common.jar"
+                	//"module:/resource/org.eclipse.emf.parsley.runtime.common/org.eclipse.emf.parsley.runtime.common"
+                }
+//                bundleIdVersionJar = bundle.getSymbolicName() + "_" + bundle.getVersion() + ".jar";
+                bundleIdVersionJar = bundle.getLocation().substring("reference:/file:".length());
+                archiveName = bundle.getSymbolicName() + ".jar";
+            } else {
+                // String => Bundle dependency
+                bundleIdVersionJar = (String) obj;
+                archiveName = pluginId;
+            }
+            ReferencedComponent refC = ComponentcoreFactory.eINSTANCE.createReferencedComponent();
+            URI uri;
+            //"module:/classpath/lib/C:/Users/Vincenzo/.p2/pool/plugins/org.apache.batik.pdf_1.6.0.v201105071520.jar"
+            if (bundleUri!=null) {
+            	//EMF Parsley Project development case
+            	uri = URI.createURI(bundleUri);
+            } else {
+//            	uri = URI.createURI("module:/classpath/var/ECLIPSE_HOME/plugins/" + bundleIdVersionJar);
+            	uri = URI.createURI("module:/classpath/lib/" + bundleIdVersionJar);
+            }
+            refC.setHandle(uri);
+            refC.setArchiveName(archiveName);
+            Path newPath = new Path("/WEB-INF/lib");
+            refC.setRuntimePath(newPath);
+            firstComponent.getReferencedComponents().add(refC);
+        }
+
+    }
+
+    private void checkForImportedPlugins(final String pluginId, final Bundle bundle) {
+    	IProject[] workspaceProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+    	boolean found = false;
+    	for (IProject iProject : workspaceProjects) {
+			if (iProject.getName().equals(pluginId) && iProject.isOpen()) {
+				found = true;
+				break;
+			}
+		}
+		if (!found) {
+			PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					String importPath = bundle.getLocation().substring("reference:file:".length()+1);
+					MessageDialog.openError(null, "Error", "Please import (or open) plugin '"+pluginId+"' from EMF Parsley first instance environment!\n"
+							+ "Path: "+importPath);
+				}
+			});
+		}
+	}
+
+
+	// private void addModelDependentModule(IProject iProject, String modelPlugin,
+    // WorkbenchComponent firstComponent, IProgressMonitor monitor) {
+    // ReferencedComponent refC = ComponentcoreFactory.eINSTANCE.createReferencedComponent();
+    // URI uri = URI.createURI("module:/resource/" + modelPlugin + "/" + modelPlugin);
+    // refC.setHandle(uri);
+    // refC.setArchiveName(modelPlugin + ".jar");
+    // Path newPath = new Path("/WEB-INF/lib");
+    // refC.setRuntimePath(newPath);
+    // firstComponent.getReferencedComponents().add(refC);
+    // }
+
+    private void addMavenDependentModule(IProject iProject, String jarName, String jarPathInMavenRepo, WorkbenchComponent firstComponent, IProgressMonitor monitor) {
+        ReferencedComponent refC = ComponentcoreFactory.eINSTANCE.createReferencedComponent();
+        URI uri = URI.createURI("module:/classpath/var/M2_REPO/" + jarPathInMavenRepo + "/" + jarName);
+        refC.setHandle(uri);
+        refC.setArchiveName(jarName);
+        Path newPath = new Path("/WEB-INF/lib");
+        refC.setRuntimePath(newPath);
+        firstComponent.getReferencedComponents().add(refC);
+    }
+
+    private void setupWebInfXml(final IProject iProject) {
+        final WebArtifactEdit artifact = WebArtifactEdit.getWebArtifactEditForWrite(iProject);
+        final WebApp webAppRoot = artifact.getWebApp();
+        try {
+            Utils.registerServlet(iProject, webAppRoot, "JsonTableServlet", "org.eclipse.emf.parsley.web.servlets.JsonTableServlet", "/JsonTableServlet");
+            Utils.registerServlet(iProject, webAppRoot, "JsonDetailsServlet", "org.eclipse.emf.parsley.web.servlets.JsonDetailsServlet", "/JsonDetailsServlet");
+            Utils.registerServlet(iProject, webAppRoot, "JsonSaveServlet", "org.eclipse.emf.parsley.web.servlets.JsonSaveServlet", "/JsonSaveServlet");
+
+            artifact.saveIfNecessary(null);
+        } finally {
+            artifact.dispose();
+        }
+    }
+
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/ParsleyWebFacetInstallPage.java b/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/ParsleyWebFacetInstallPage.java
new file mode 100644
index 0000000..8a709bb
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/ParsleyWebFacetInstallPage.java
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.web.tools;
+
+
+import org.eclipse.emf.parsley.web.tools.ParsleyWebFacetInstallConfig.PERSISTENCE_OPTION;
+import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.wst.common.project.facet.ui.AbstractFacetWizardPage;
+
+/**
+* Wizard page for the Parsley-JEE project custom options
+* 
+* @author Vincenzo Caselli
+* 
+*/
+public class ParsleyWebFacetInstallPage extends AbstractFacetWizardPage {
+    private Image imageCd = FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_CONTENT_PROPOSAL).getImage();
+
+    private ParsleyWebFacetInstallConfig config;
+
+    public ParsleyWebFacetInstallPage() {
+        super("parsleyweb.core.facet.install.page");
+
+        setTitle("EMF Parsley Web project options");
+        setDescription("Configure the EMF Parsley Web project options.");
+    }
+
+    public void createControl(final Composite parent) {
+        final Composite composite = new Composite(parent, SWT.NONE);
+
+        setControl(composite);
+        composite.setLayout(new GridLayout(1, false));
+
+        Group grpPersistenceOptions = new Group(composite, SWT.NONE);
+        RowLayout rl_grpPersistenceOptions = new RowLayout(SWT.VERTICAL);
+        rl_grpPersistenceOptions.marginTop = 20;
+        rl_grpPersistenceOptions.marginLeft = 20;
+        rl_grpPersistenceOptions.spacing = 20;
+        rl_grpPersistenceOptions.justify = true;
+        grpPersistenceOptions.setLayout(rl_grpPersistenceOptions);
+        grpPersistenceOptions.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
+        grpPersistenceOptions.setText("Persistence options");
+
+        Button btnPersistenceNone = new Button(grpPersistenceOptions, SWT.RADIO);
+        btnPersistenceNone.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+
+            }
+        });
+        btnPersistenceNone.setSelection(true);
+        config.setPersistenceOption(PERSISTENCE_OPTION.NONE);
+        btnPersistenceNone.setText("None");
+
+        Button btnPersistenceTeneo = new Button(grpPersistenceOptions, SWT.RADIO);
+        btnPersistenceTeneo.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                config.setPersistenceOption(PERSISTENCE_OPTION.TENEO);
+            }
+        });
+        btnPersistenceTeneo.setText("Teneo");
+
+        Button btnPersistenceCdo = new Button(grpPersistenceOptions, SWT.RADIO);
+        btnPersistenceCdo.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                config.setPersistenceOption(PERSISTENCE_OPTION.CDO);
+            }
+        });
+        btnPersistenceCdo.setText("CDO");
+    }
+
+    public void setConfig(final Object config) {
+        this.config = (ParsleyWebFacetInstallConfig) config;
+    }
+
+    public void transferStateToConfig() {
+        // this.config.setModelsList(this.modelsList.getItems());
+    }
+
+}
+
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/Utils.java b/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/Utils.java
new file mode 100644
index 0000000..00cc799
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/Utils.java
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.web.tools;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.InterfaceAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Enumeration;
+import java.util.Properties;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jst.j2ee.webapplication.Filter;
+import org.eclipse.jst.j2ee.webapplication.FilterMapping;
+import org.eclipse.jst.j2ee.webapplication.Servlet;
+import org.eclipse.jst.j2ee.webapplication.ServletMapping;
+import org.eclipse.jst.j2ee.webapplication.ServletType;
+import org.eclipse.jst.j2ee.webapplication.WebApp;
+import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.ServerCore;
+import org.eclipse.wst.server.core.ServerPort;
+import org.osgi.framework.Bundle;
+
+/**
+* Utility class for the wizard
+* 
+* @author Vincenzo Caselli
+* 
+*/
+public final class Utils {
+
+    public static IFolder getFolder(final IProject pj, String folderPath) {
+        final IVirtualComponent vc = ComponentCore.createComponent(pj);
+        final IVirtualFolder vf = vc.getRootFolder().getFolder(folderPath);
+        return (IFolder) vf.getUnderlyingFolder();
+    }
+
+    public static String getLocalAddress() {
+        try {
+            Enumeration<NetworkInterface> net = NetworkInterface.getNetworkInterfaces();
+            while (net.hasMoreElements()) {
+                for (InterfaceAddress ia : net.nextElement().getInterfaceAddresses()) {
+                    if (ia.getAddress().isSiteLocalAddress())
+                        return ia.getAddress().getHostAddress();
+                }
+            }
+        } catch (SocketException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static int getDefaultServerHttpPort() {
+        IServer[] servers = ServerCore.getServers();
+        for (IServer iServer : servers) {
+            ServerPort[] ports = iServer.getServerPorts(null);
+            for (ServerPort serverPort : ports) {
+                if ("HTTP".equals(serverPort.getProtocol())) {
+                    return serverPort.getPort();
+                }
+            }
+        }
+        return 8080;
+    }
+
+    public static void copyFile(final IProject iProject, IProgressMonitor monitor, String originFilePath, IFile iFile, Properties replaceStrings) throws CoreException {
+        try {
+            final InputStream in = FileLocator.openStream(Activator.getDefault().getBundle(), new Path(originFilePath), false);
+            BufferedReader rdr = new BufferedReader(new InputStreamReader(in));
+            StringBuffer out = new StringBuffer();
+            String line = null;
+            while ((line = rdr.readLine()) != null) {
+                Set<String> originStringSet = replaceStrings.stringPropertyNames();
+                for (String originString : originStringSet) {
+                    String targetString = replaceStrings.getProperty(originString);
+                    line = line.replaceAll(originString, targetString);
+                }
+                out.append(line + System.getProperty("line.separator"));
+            }
+            InputStream in2 = new ByteArrayInputStream(out.toString().getBytes("UTF-8"));
+            iFile.create(in2, true, null);
+        } catch (IOException e) {
+            throw new CoreException(Activator.createErrorStatus(e.getMessage(), e));
+        }
+    }
+
+    public static void copyFromPluginToWorkspace(final Bundle bundle, final IPath src, final IFile dest) throws CoreException {
+        try {
+            final InputStream in = FileLocator.openStream(bundle, src, false);
+            dest.create(in, true, null);
+        } catch (IOException e) {
+            throw new CoreException(Activator.createErrorStatus(e.getMessage(), e));
+        }
+    }
+
+    public static void copyFileToWorkspace(final File file, final IFile dest) throws CoreException {
+        try {
+            final InputStream in = new FileInputStream(file);
+            dest.create(in, true, null);
+        } catch (IOException e) {
+            throw new CoreException(Activator.createErrorStatus(e.getMessage(), e));
+        }
+    }
+
+    public static void registerServlet(final IProject pj, WebApp webAppRoot, final String servletName, final String servletClassName, final String urlPattern) {
+        final Servlet servlet = WebapplicationFactory.eINSTANCE.createServlet();
+        final ServletType servletType = WebapplicationFactory.eINSTANCE.createServletType();
+        servletType.setClassName(servletClassName);
+        servlet.setWebType(servletType);
+        servlet.setServletName(servletName);
+        webAppRoot.getServlets().add(servlet);
+
+        final ServletMapping mapping = WebapplicationFactory.eINSTANCE.createServletMapping();
+        mapping.setServlet(servlet);
+        mapping.setUrlPattern(urlPattern);
+        webAppRoot.getServletMappings().add(mapping);
+    }
+
+    public static void registerFilter(IProject iProject, WebApp webAppRoot, String filterName, String filterClassName, String urlPattern) {
+        Filter filter = WebapplicationFactory.eINSTANCE.createFilter();
+        filter.setName(filterName);
+        filter.setFilterClassName(filterClassName);
+        webAppRoot.getFilters().add(filter);
+
+        FilterMapping filterMapping = WebapplicationFactory.eINSTANCE.createFilterMapping();
+        filterMapping.setFilter(filter);
+        filterMapping.setUrlPattern(urlPattern);
+        webAppRoot.getFilterMappings().add(filterMapping);
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/ui/angularjs/ParsleyWebFacetUiAngularDelegate.java b/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/ui/angularjs/ParsleyWebFacetUiAngularDelegate.java
new file mode 100644
index 0000000..b84775b
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/src/org/eclipse/emf/parsley/web/tools/ui/angularjs/ParsleyWebFacetUiAngularDelegate.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ * Vincenzo Caselli - Initial contribution and API
+ *******************************************************************************/
+package org.eclipse.emf.parsley.web.tools.ui.angularjs;
+
+import java.util.Properties;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.parsley.web.tools.Activator;
+import org.eclipse.emf.parsley.web.tools.Utils;
+import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
+import org.eclipse.jst.j2ee.internal.web.operations.WebPropertiesUtil;
+import org.eclipse.wst.common.project.facet.core.IDelegate;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+
+
+/**
+* Wizard class for execution of actions for the AngularJS UI component creation
+* 
+* @author Vincenzo Caselli
+* 
+*/
+public class ParsleyWebFacetUiAngularDelegate implements IDelegate {
+
+    @Override
+    public void execute(final IProject iProject, final IProjectFacetVersion fv, final Object config, final IProgressMonitor monitor) throws CoreException {
+        monitor.beginTask("Processing EMF Parsley UI AngularJS", 2);
+
+        // String webInfLib =
+        // WebPropertiesUtil.getWebLibFolder(iProject).getProjectRelativePath().toPortableString();
+        String webContentFolder = WebPropertiesUtil.getModuleServerRoot(iProject).getProjectRelativePath().toPortableString();
+        System.out.println("webContentFolder): " + webContentFolder);
+        String serverContentRoot = J2EEProjectUtilities.getServerContextRoot(iProject);
+        System.out.println("serverContentRoot: " + serverContentRoot);
+
+        Properties replaceStrings = new Properties();
+        Utils.copyFile(iProject, monitor, "/templates/ui/angularjs/table.html", iProject.getFolder(webContentFolder).getFile("table.html"), replaceStrings);
+        Utils.copyFile(iProject, monitor, "/templates/ui/angularjs/details.html", iProject.getFolder(webContentFolder).getFile("details.html"), replaceStrings);
+        Utils.copyFromPluginToWorkspace(Activator.getDefault().getBundle(), new Path("/templates/ui/angularjs/add.png"), iProject.getFolder(webContentFolder).getFile("add.png"));
+
+    }
+
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/templates/ParsleyContextListener.java b/plugins/org.eclipse.emf.parsley.web.tools/templates/ParsleyContextListener.java
new file mode 100644
index 0000000..6c68cea
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/templates/ParsleyContextListener.java
@@ -0,0 +1,20 @@
+package org.eclipse.emf.parsley.web.tools.templates;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+import javax.servlet.annotation.WebListener;
+
+@WebListener
+public class ParsleyContextListener implements ServletContextListener {
+    private ServletContext context = null;
+
+    public void contextInitialized(ServletContextEvent event) {
+        this.context = event.getServletContext();
+    }
+
+    public void contextDestroyed(ServletContextEvent event) {
+        this.context = null;
+    }
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/templates/ParsleyGuiceServletContextListener.java b/plugins/org.eclipse.emf.parsley.web.tools/templates/ParsleyGuiceServletContextListener.java
new file mode 100644
index 0000000..90710ce
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/templates/ParsleyGuiceServletContextListener.java
@@ -0,0 +1,19 @@
+package org.eclipse.emf.parsley.web.tools.templates;
+
+import javax.servlet.annotation.WebListener;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.servlet.GuiceServletContextListener;
+
+import org.eclipse.emf.parsley.web.tools.templates.ParsleyWebGuiceModule;
+
+@WebListener
+public class ParsleyGuiceServletContextListener extends GuiceServletContextListener {
+
+    @Override
+    protected Injector getInjector() {
+        return Guice.createInjector(new ParsleyWebGuiceModule(null));
+    }
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/templates/ParsleyWebGuiceModule.java b/plugins/org.eclipse.emf.parsley.web.tools/templates/ParsleyWebGuiceModule.java
new file mode 100644
index 0000000..1a146b9
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/templates/ParsleyWebGuiceModule.java
@@ -0,0 +1,20 @@
+package org.eclipse.emf.parsley.web.tools.templates;
+
+import org.eclipse.emf.parsley.edit.ui.provider.TableViewerContentProvider;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+public class ParsleyWebGuiceModule extends EmfParsleyGuiceModuleGen {
+
+    public ParsleyWebGuiceModule() {
+        super(null);
+    }
+
+    public ParsleyWebGuiceModule(AbstractUIPlugin plugin) {
+        super(plugin);
+    }
+
+    public Class<? extends IContentProvider> bindIContentProvider() {
+        return TableViewerContentProvider.class;
+    }
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/templates/module.parsley b/plugins/org.eclipse.emf.parsley.web.tools/templates/module.parsley
new file mode 100644
index 0000000..a344a0a
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/templates/module.parsley
@@ -0,0 +1,5 @@
+import org.eclipse.emf.parsley.EmfParsleyJavaGuiceModule
+
+module org.eclipse.emf.parsley.web.tools.servlets extends EmfParsleyJavaGuiceModule {
+	
+}
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/templates/pom.xml b/plugins/org.eclipse.emf.parsley.web.tools/templates/pom.xml
new file mode 100644
index 0000000..713506d
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/templates/pom.xml
@@ -0,0 +1,21 @@
+<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>
+
+  <groupId>org.eclipse.emf.parsley</groupId>
+  <artifactId>org.eclipse.emf.parsley.web.servlets.dependencies</artifactId>  
+  
+   <dependencies>
+	<dependency>
+		<groupId>com.google.inject.extensions</groupId>
+		<artifactId>guice-servlet</artifactId>
+		<version>4.0</version>
+	</dependency>
+	<dependency>
+		<groupId>com.googlecode.json-simple</groupId>
+		<artifactId>json-simple</artifactId>
+		<version>1.1.1</version>
+	</dependency>
+  </dependencies>
+  
+   <version>1.0.0</version>
+</project>
\ No newline at end of file
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/templates/ui/angularjs/add.png b/plugins/org.eclipse.emf.parsley.web.tools/templates/ui/angularjs/add.png
new file mode 100644
index 0000000..1f277fa
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/templates/ui/angularjs/add.png
Binary files differ
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/templates/ui/angularjs/details.html b/plugins/org.eclipse.emf.parsley.web.tools/templates/ui/angularjs/details.html
new file mode 100644
index 0000000..bd5301b
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/templates/ui/angularjs/details.html
@@ -0,0 +1,161 @@
+<html ng-app="app">
+<head><title></title>
+<style>
+
+input[type=text], textarea, select {
+  -webkit-transition: all 0.30s ease-in-out;
+  -moz-transition: all 0.30s ease-in-out;
+  -ms-transition: all 0.30s ease-in-out;
+  -o-transition: all 0.30s ease-in-out;
+  outline: none;
+  padding: 3px 0px 3px 3px;
+  margin: 5px 1px 3px 0px;
+  border: 1px solid #DDDDDD;
+}
+ 
+input[type=text]:focus, textarea:focus, select:focus {
+  box-shadow: 0 0 5px rgba(81, 203, 238, 1);
+  padding: 3px 0px 3px 3px;
+  margin: 5px 1px 3px 0px;
+  border: 1px solid rgba(81, 203, 238, 1);
+}
+
+body {
+	font-family: Helvetica, Arial, sans-serif;
+	font-size: 16px;
+	background: #e3edf2;
+}
+
+td {
+	font-family: Helvetica, Arial, sans-serif;
+	font-size: 12px;
+}
+
+input {
+	font-family: Helvetica, Arial, sans-serif;
+	font-size: 14px;
+	width: 200px;
+	height: 25px;
+}
+
+textarea {
+	font-family: Helvetica, Arial, sans-serif;
+	font-size: 14px;
+	width: 200px;
+}
+
+select {
+	font-family: Helvetica, Arial, sans-serif;
+	font-size: 14px;
+	width: 200px;
+	height: 25px;
+}
+
+button {
+	font-family: Helvetica, Arial, sans-serif;
+	font-size: 14px;
+}
+	
+</style>
+
+<script type="text/javascript">
+var parseQueryString = function() {
+
+    var str = window.location.search;
+    var objURL = {};
+
+    str.replace(
+        new RegExp( "([^?=&]+)(=([^&]*))?", "g" ),
+        function( $0, $1, $2, $3 ){
+            objURL[ $1 ] = $3;
+        }
+    );
+    return objURL;
+};
+</script>
+
+<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js"></script>
+
+<script type="text/javascript">
+	var app = angular.module('app', []);
+	
+	app.controller('detailController', function($scope,$http,$location) {
+		
+		$scope.save = function(s) {
+			//alert(s.id);
+			var url="JsonSaveServlet?s="+$scope.sName;
+			$http.put(url, s).success( 
+					function(response) { 
+						$scope.sDetail = response; 
+						window.location = 'table.html?s='+$scope.sName;
+					});
+		};
+
+		$scope.keys = function(obj){
+			  return obj? Object.keys(obj) : [];
+		};
+		
+		var params = parseQueryString();
+		$scope.sName = params["s"];
+		$scope.sId = params["id"];
+		var url="JsonDetailsServlet?s="+$scope.sName+"&id="+$scope.sId;
+		$http.get(url).success( 
+				function(response) { 
+	                $scope.sDetail = response; 
+				});
+	});
+	
+	</script>
+
+</head>
+
+<body >
+	<div ng-controller="detailController">
+		<P>
+		<P>
+		<B>{{sDetail.label}}</B>
+		<!-- 
+		<P>{{sDetail.id}}
+		<P>************ {{sDetail}} ***********************
+		 -->
+		<p>
+		<table>
+			<tr ng-repeat="(index,key) in keys(sDetail) | filter: '!icon' | filter: '!label' | filter: '!id'">
+				<td>{{sDetail[key].caption}}</td>
+				<td align="left">
+					<div ng-switch on="sDetail[key].type">
+							<!-- 
+							<div ng-repeat="proposal in sDetail[key].proposals">
+								{{proposal}}
+							</div>
+							<b>{{sDetail[key].value}}</b>
+							-->
+						<div ng-switch-when="combo">
+							<select ng-model="sDetail[key].value" 
+							ng-options="proposal for proposal in sDetail[key].proposals" value="proposal">
+							</select>
+						</div>
+						<div ng-switch-when="button">
+							<input type="checkbox" data-ng-model="sDetail[key].value"  ng-true-value="true" ng-false-value="false"/>
+						</div>
+						<div ng-switch-when="textarea">
+							<textarea data-ng-model="sDetail[key].value"></textarea> 
+						</div>
+						<div ng-switch-when="datetime">
+							<input type="date" data-ng-model="sDetail[key].value"/>
+						</div>
+						<div ng-switch-default>
+							<input type="text" data-ng-model="sDetail[key].value" >
+						</div>
+					</div>
+				</td>
+			</tr>
+		</table>
+		<p>
+		<button ng-click="save(sDetail)">Save</button>
+	</div>
+	
+
+</body>
+
+</html>
diff --git a/plugins/org.eclipse.emf.parsley.web.tools/templates/ui/angularjs/table.html b/plugins/org.eclipse.emf.parsley.web.tools/templates/ui/angularjs/table.html
new file mode 100644
index 0000000..09b46a7
--- /dev/null
+++ b/plugins/org.eclipse.emf.parsley.web.tools/templates/ui/angularjs/table.html
@@ -0,0 +1,154 @@
+<html ng-app="app">
+<head><title></title>
+<style>
+
+input[type=text], textarea {
+  -webkit-transition: all 0.30s ease-in-out;
+  -moz-transition: all 0.30s ease-in-out;
+  -ms-transition: all 0.30s ease-in-out;
+  -o-transition: all 0.30s ease-in-out;
+  outline: none;
+  padding: 3px 0px 3px 3px;
+  margin: 5px 1px 3px 0px;
+  border: 1px solid #DDDDDD;
+}
+ 
+input[type=text]:focus, textarea:focus {
+  box-shadow: 0 0 5px rgba(81, 203, 238, 1);
+  padding: 3px 0px 3px 3px;
+  margin: 5px 1px 3px 0px;
+  border: 1px solid rgba(81, 203, 238, 1);
+}
+
+table { 
+	color: #333;
+	font-family: Helvetica, Arial, sans-serif;
+	border-collapse: 
+	collapse; border-spacing: 0; 
+}
+
+td, th { 
+	border: 1px solid white; 
+	height: 30px; 
+	transition: all 0.1s;  /* Simple transition for hover effect */
+}
+
+th {
+	background: #097ec1;
+	color: #ffffff;
+	font-weight: bold;
+}
+
+td {
+	background: #FAFAFA;
+	text-align: center;
+}
+
+th:first-child {
+    border-radius: 6px 0 0 0;
+}
+
+th:last-child {
+    border-radius: 0 6px 0 0;
+}
+
+th:only-child{
+    border-radius: 6px 6px 0 0;
+}
+/* Cells in even rows (2,4,6...) are one color */ 
+tr:nth-child(even) td { background: #e3edf2; }   
+
+/* Cells in odd rows (1,3,5...) are another (excludes header cells)  */ 
+tr:nth-child(odd) td { background: #FEFEFE; }  
+
+tr td:hover { background: #666; color: #FFF; } /* Hover cell effect! */
+
+body {
+	font-family: Helvetica, Arial, sans-serif;
+}
+	
+</style>
+
+<script type="text/javascript">
+var parseQueryString = function() {
+
+    var str = window.location.search;
+    var objURL = {};
+
+    str.replace(
+        new RegExp( "([^?=&]+)(=([^&]*))?", "g" ),
+        function( $0, $1, $2, $3 ){
+            objURL[ $1 ] = $3;
+        }
+    );
+    return objURL;
+};
+</script>
+
+<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js"></script>
+
+<script type="text/javascript">
+	var app = angular.module('app', []);
+	
+	app.controller('listController', function($scope,$http,$location) {
+		$scope.selectedItem = function(s,$location,$window) {
+			window.location = 'details.html?s='+$scope.sName+'&id='+s.$id;
+		};
+		
+		$scope.keys = function(obj){
+			  return obj? Object.keys(obj) : [];
+		};
+		
+		var params = parseQueryString();
+		$scope.sName = params["s"];
+		var url="JsonTableServlet"+window.location.search;
+		$http.get(url).success( 
+				function(response) { 
+	                           $scope.sList = response; 
+				});
+	});
+	
+	</script>
+
+</head>
+
+<body >
+		<div ng-controller="listController">
+		<!-- 
+		{{sList}}
+		 -->
+			<div align="left">
+				<B>{{sName}}</B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+				Search:<input type="text" data-ng-model="filterText" >
+			</div>
+		
+		<table>
+			<tr>
+				<th ng-repeat="key in keys(sList[0]) | filter: '!$$hashKey' | filter: '!$id'"  style="width: 200px; ">{{key}}</th>
+			</tr>
+			<tr ng-repeat="s in sList | filter: filterText" ng-dblclick="selectedItem(s)">
+				<td ng-repeat="key in keys(s) | filter: '!$$hashKey' | filter: '!$id'"  style="width: 200px; " >
+					
+					<div ng-switch on="s[key]">
+						<div ng-switch-when="true">
+							<input type="checkbox" checked onclick="javascript: return false;">
+						</div>
+						<div ng-switch-when="false">
+							<input type="checkbox" onclick="javascript: return false;">
+						</div>
+						<div ng-switch-default>
+							{{s[key]}}
+						</div>
+					</div>
+					
+				</td>
+			</tr>
+		</table>
+	
+		<img src="add.png" height="40" ng-click="selectedItem('0')">
+	</div>
+	
+
+</body>
+
+</html>
diff --git a/releng/org.eclipse.emf.parsley.parent/pom.xml b/releng/org.eclipse.emf.parsley.parent/pom.xml
index c901a3d..244a8a2 100644
--- a/releng/org.eclipse.emf.parsley.parent/pom.xml
+++ b/releng/org.eclipse.emf.parsley.parent/pom.xml
@@ -180,6 +180,9 @@
 				<module>../../plugins/org.eclipse.emf.parsley</module>
 				<module>../../plugins/org.eclipse.emf.parsley.junit4</module>
 
+				<module>../../plugins/org.eclipse.emf.parsley.web.servlets</module>
+				<module>../../plugins/org.eclipse.emf.parsley.web.tools</module>
+
 				<module>../../tests/org.eclipse.emf.parsley.tests.models</module>
 				<module>../../tests/org.eclipse.emf.parsley.tests</module>
 				<module>../../tests/org.eclipse.emf.parsley.tests.views</module>
@@ -210,6 +213,7 @@
 				<module>../../features/org.eclipse.emf.parsley.dsl.feature</module>
 				<module>../../features/org.eclipse.emf.parsley.cdo.feature</module>
 				<module>../../features/org.eclipse.emf.parsley.sdk</module>
+				<module>../../features/org.eclipse.emf.parsley.web.feature</module>
 		
 				<!-- These examples are used in swtbot tests -->
 				<module>../../examples/org.eclipse.emf.parsley.examples.library</module>
diff --git a/releng/org.eclipse.emf.parsley.repository/category.xml b/releng/org.eclipse.emf.parsley.repository/category.xml
index 0d5a5e9..1e95981 100644
--- a/releng/org.eclipse.emf.parsley.repository/category.xml
+++ b/releng/org.eclipse.emf.parsley.repository/category.xml
@@ -15,6 +15,9 @@
    <feature id="org.eclipse.emf.parsley.sdk">
       <category name="emfparsley.category"/>
    </feature>
+   <feature id="org.eclipse.emf.parsley.web.feature">
+      <category name="emfparsley.category"/>
+   </feature>
    <feature id="org.eclipse.emf.parsley.junit4.feature">
       <category name="emfparsley.category"/>
    </feature>
@@ -34,6 +37,9 @@
    <feature id="org.eclipse.emf.parsley.sdk.source">
       <category name="emfparsley.category.source"/>
    </feature>
+   <feature id="org.eclipse.emf.parsley.web.feature.source">
+      <category name="emfparsley.category.source"/>
+   </feature>
    <feature id="org.eclipse.emf.parsley.junit4.feature.source">
       <category name="emfparsley.category.source"/>
    </feature>