Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRalf Mollik2017-08-28 15:37:57 +0000
committerRalf Mollik2017-08-28 15:37:57 +0000
commit48489c5014308777a87a3b10332d1f9debca4057 (patch)
treefedf303525f44949788886c34d906c9a0a456640
downloadorg.eclipse.osbp.vaaclipse.tools-48489c5014308777a87a3b10332d1f9debca4057.tar.gz
org.eclipse.osbp.vaaclipse.tools-48489c5014308777a87a3b10332d1f9debca4057.tar.xz
org.eclipse.osbp.vaaclipse.tools-48489c5014308777a87a3b10332d1f9debca4057.zip
parallel ip - initial checkin
Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
-rw-r--r--.project22
-rw-r--r--LICENSE.txt161
-rw-r--r--README.md4
-rw-r--r--about.html28
-rw-r--r--jenkins.build.config.xml20
-rw-r--r--notice.html107
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/.project51
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/LICENSE.txt161
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/META-INF/MANIFEST.MF27
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.html28
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.ini17
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.mappings6
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.properties26
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/build.properties15
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/plugin.xml38
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/pom.xml24
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/EditorFeature.java58
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/EditorPartDescriptorEditor.java291
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/EditorPartDescriptorEditorDesc.java38
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VEditorPartDescriptor.java232
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VPreferencesCategoryDescriptor.java231
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VaaclipseApplicationEditor.java110
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VaaclipseApplicationEditorDesc.java38
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.feature.ide/.project34
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.feature.ide/LICENSE.txt161
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.feature.ide/build.properties5
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.feature.ide/epl-v10.html259
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.feature.ide/feature.properties169
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.feature.ide/feature.xml67
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.feature.ide/license.html164
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.feature.ide/pom.xml73
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.feature.ide/src/main/javadoc/README.txt1
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.feature.ide/src/overview.html13
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/.project51
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/LICENSE.txt161
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/META-INF/MANIFEST.MF28
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/about.html28
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/about.ini17
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/about.mappings6
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/about.properties26
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/build.properties9
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/plugin.xml16
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/pom.xml23
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/ToolsPlugin.java185
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/E4NewProjectWizard.java623
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/E4NewProjectWizardPage.java49
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/NewApplicationWizardPage.java698
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/PluginContentPage.java432
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/ResourceLocator.java89
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/TemplateOperation.java540
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/$projectName$.product121
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/Application.e4xmi41
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/icons/sample.gifbin0 -> 983 bytes
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/icons/save_edit.gifbin0 -> 639 bytes
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/icons/vaaclipse.pngbin0 -> 726 bytes
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/plugin.xml58
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/templates/css/main.css0
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/handlers/AboutHandler.java12
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/handlers/QuitHandler.java13
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/login/LoginProvider.java78
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/views/FirstView.java15
-rw-r--r--org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/views/SecondView.java15
-rw-r--r--pom.xml93
63 files changed, 6106 insertions, 0 deletions
diff --git a/.project b/.project
new file mode 100644
index 0000000..4d66c75
--- /dev/null
+++ b/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.vaaclipse.tools</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation. \ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..35b9391
--- /dev/null
+++ b/README.md
@@ -0,0 +1,4 @@
+vaaclipse-tools
+===============
+
+Vaaclipse Tools
diff --git a/about.html b/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 1, 2016</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&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/jenkins.build.config.xml b/jenkins.build.config.xml
new file mode 100644
index 0000000..fdf6c4e
--- /dev/null
+++ b/jenkins.build.config.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--#======================================================================= -->
+<!--# Copyright (c) 2016 - Loetz GmbH&Co.KG -->
+<!--# All rights reserved. This program and the accompanying materials -->
+<!--# are made available under the terms of the Eclipse Public License v1.0 -->
+<!--# which accompanies this distribution, and is available at -->
+<!--# http://www.eclipse.org/legal/epl-v10.html -->
+<!--# -->
+<!--# Contributors: -->
+<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
+<!--#======================================================================= -->
+<!--# Module specific parameters for the Jenkins Job -->
+<!--#======================================================================= -->
+
+<jenkins>
+ <!-- DO NOT EDIT BELOW THIS LINE -->
+ <jenkins.build.dependencies>
+ <jenkins.build.dependency>org.eclipse.osbp.vaaclipse</jenkins.build.dependency>
+ </jenkins.build.dependencies>
+</jenkins>
diff --git a/notice.html b/notice.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/notice.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY &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>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+ other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+ href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+ in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+ Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+ on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+ Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+ the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+ indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/.project b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/.project
new file mode 100644
index 0000000..c48e884
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/.project
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.vaaclipse.tools.e4tools.extension</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.babel.editor.rbeBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.babel.editor.rbeNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/LICENSE.txt b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation. \ No newline at end of file
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/META-INF/MANIFEST.MF b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..af01d61
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/META-INF/MANIFEST.MF
@@ -0,0 +1,27 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.vaaclipse.tools.e4tools.extension
+Bundle-SymbolicName: org.eclipse.osbp.vaaclipse.tools.e4tools.extension;singleton:=true
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.e4.core.di;bundle-version="1.1.0",
+ org.eclipse.e4.core.services;bundle-version="1.2.0",
+ org.eclipse.e4.tools;bundle-version="0.12.0",
+ org.eclipse.e4.tools.emf.editor3x;bundle-version="0.12.0",
+ org.eclipse.e4.tools.emf.liveeditor;bundle-version="0.12.0",
+ org.eclipse.e4.tools.emf.ui;bundle-version="0.12.0",
+ org.eclipse.e4.ui.services;bundle-version="1.1.0",
+ org.eclipse.e4.ui.workbench;bundle-version="1.1.0",
+ org.eclipse.osbp.e4modelextension;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.emf.databinding;bundle-version="1.2.0",
+ org.eclipse.emf.databinding.edit;bundle-version="1.2.0",
+ org.eclipse.core.databinding.property;bundle-version="1.4.100",
+ org.eclipse.jface;bundle-version="3.8.101",
+ org.eclipse.jface.databinding;bundle-version="1.6.0",
+ org.eclipse.core.resources;bundle-version="3.8.1",
+ org.eclipse.e4.core.contexts;bundle-version="1.3.100"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: javax.inject;version="1.0.0",
+ javax.annotation
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.html b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 1, 2016</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&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/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.ini b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.ini
@@ -0,0 +1,17 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+welcomePage=
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.mappings b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=qualifier
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.properties b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.properties
new file mode 100644
index 0000000..65a723a
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/about.properties
@@ -0,0 +1,26 @@
+#
+# Copyright (c) 2012, 2016 - Loetz GmbH&Co.KG (Heidelberg)
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Loetz GmbH&Co.KG - initial API and implementation
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+featureName=org.eclipse.osbp.vaaclipse.tools.e4tools.extension
+
+################ blurb property ####################################
+featureText=\
+Copyright (c) 2012-2016 - Loetz GmbH&Co.KG \n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+ Loetz GmbH&Co.KG - implementation\n
+################ end of blurb property ####################################
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/build.properties b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/build.properties
new file mode 100644
index 0000000..2e0a3ad
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/build.properties
@@ -0,0 +1,15 @@
+source.. = src/
+output.. = target/classes/
+bin.includes = about.properties,\
+ about.mappings,\
+ about.ini,\
+ about.html,\
+ META-INF/,\
+ .,\
+ plugin.xml,\
+ LICENSE.txt
+src.includes = about.properties,\
+ about.mappings,\
+ about.ini,\
+ about.html,\
+ LICENSE.txt
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/plugin.xml b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/plugin.xml
new file mode 100644
index 0000000..1ab47fb
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/plugin.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.e4.tools.emf.ui.editors">
+ <editor
+ descriptorClass="org.eclipse.osbp.e4tools.extension.EditorPartDescriptorEditorDesc">
+ </editor>
+ <virtualeditor
+ class="org.eclipse.osbp.e4tools.extension.VEditorPartDescriptor"
+ id="org.eclipse.osbp.e4tools.extension.VaaclipseApplicationEditor.EDITOR_DESCRIPTORS">
+ </virtualeditor>
+ <editor
+ descriptorClass="org.eclipse.osbp.e4tools.extension.VaaclipseApplicationEditorDesc">
+ </editor>
+ <editorfeature
+ class="org.eclipse.osbp.e4tools.extension.EditorFeature">
+ </editorfeature>
+ </extension>
+
+ <extension
+ point="org.eclipse.e4.tools.emf.ui.editors">
+ <editor
+ descriptorClass="org.eclipse.osbp.e4tools.extension.EditorPartDescriptorEditorDesc">
+ </editor>
+ <virtualeditor
+ class="org.eclipse.osbp.e4tools.extension.VEditorPartDescriptor"
+ id="org.eclipse.osbp.e4tools.extension.VaaclipseApplicationEditor.EDITOR_DESCRIPTORS">
+ </virtualeditor>
+ <editor
+ descriptorClass="org.eclipse.osbp.e4tools.extension.VaaclipseApplicationEditorDesc">
+ </editor>
+ <editorfeature
+ class="org.eclipse.osbp.e4tools.extension.EditorFeature">
+ </editorfeature>
+ </extension>
+
+</plugin>
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/pom.xml b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/pom.xml
new file mode 100644
index 0000000..66e6455
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/pom.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*******************************************************************************
+ * Copyright (c) 2012 Rushan R. Gilmullin 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:
+ * Rushan R. Gilmullin - initial API and implementation
+ *******************************************************************************/
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>org.eclipse.osbp.vaaclipse.tools.e4tools.extension</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <parent>
+ <groupId>org.eclipse.osbp.vaaclipse.tools</groupId>
+ <artifactId>org.eclipse.osbp.vaaclipse.tools</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+</project>
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/EditorFeature.java b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/EditorFeature.java
new file mode 100644
index 0000000..44f749f
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/EditorFeature.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2013 Rushan Gilmullin, Florian Pirchner, Sopot Scela 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:
+ * Rushan Gilmullin - Initial implementation
+ */
+
+package org.eclipse.osbp.e4tools.extension;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.e4.tools.emf.ui.common.IEditorFeature;
+import org.eclipse.e4.ui.model.fragment.impl.FragmentPackageImpl;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.osbp.vaaclipse.ui.preferences.model.metadata.PreferencesPackage;
+
+import e4modelextension.E4modelextensionPackage;
+
+/**
+ * The Class EditorFeature.
+ */
+@SuppressWarnings("restriction")
+public class EditorFeature implements IEditorFeature {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.IEditorFeature#getFeatureClasses(org.eclipse.emf.ecore.EClass, org.eclipse.emf.ecore.EStructuralFeature)
+ */
+ @Override
+ public List<FeatureClass> getFeatureClasses(EClass eClass,
+ EStructuralFeature feature) {
+ if (eClass == FragmentPackageImpl.Literals.MODEL_FRAGMENT) {
+ if (feature == FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS) {
+ List<FeatureClass> features = new ArrayList<FeatureClass>(3);
+ features.add(new FeatureClass(
+ E4modelextensionPackage.Literals.EDITOR_PART_DESCRIPTOR
+ .getName(),
+ E4modelextensionPackage.Literals.EDITOR_PART_DESCRIPTOR));
+ features.add(new FeatureClass(
+ PreferencesPackage.Literals.PREFERENCES_CATEGORY
+ .getName(),
+ PreferencesPackage.Literals.PREFERENCES_CATEGORY));
+ features.add(new FeatureClass(
+ PreferencesPackage.Literals.PREFERENCES_PAGE.getName(),
+ PreferencesPackage.Literals.PREFERENCES_PAGE));
+ return features;
+ }
+ }
+ return Collections.emptyList();
+ }
+
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/EditorPartDescriptorEditor.java b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/EditorPartDescriptorEditor.java
new file mode 100644
index 0000000..0a1f730
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/EditorPartDescriptorEditor.java
@@ -0,0 +1,291 @@
+/**
+ * Copyright (c) 2013 Rushan Gilmullin, Florian Pirchner, Sopot Scela 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:
+ * Rushan Gilmullin - Initial implementation
+ */
+
+ package org.eclipse.osbp.e4tools.extension;
+
+import javax.inject.Inject;
+
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.core.di.annotations.Optional;
+import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
+import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.ContributionClassDialog;
+import org.eclipse.e4.ui.model.application.descriptor.basic.MPartDescriptor;
+import org.eclipse.e4.ui.model.application.descriptor.basic.impl.BasicPackageImpl;
+import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
+import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
+import org.eclipse.emf.databinding.EMFDataBindingContext;
+import org.eclipse.emf.databinding.edit.EMFEditProperties;
+import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
+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.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import e4modelextension.E4modelextensionPackage;
+import e4modelextension.EditorPartDescriptor;
+
+/**
+ * The Class EditorPartDescriptorEditor.
+ */
+public class EditorPartDescriptorEditor extends AbstractComponentEditor {
+
+ /** The composite. */
+ private Composite composite;
+
+ /** The context. */
+ private EMFDataBindingContext context;
+
+ /** The project. */
+ @Inject
+ @Optional
+ private IProject project;
+
+ /** The eclipse context. */
+ @Inject
+ private IEclipseContext eclipseContext;
+
+ /**
+ * Instantiates a new editor part descriptor editor.
+ */
+ @Inject
+ public EditorPartDescriptorEditor() {
+ super();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#getLabel(java.lang.Object)
+ */
+ @Override
+ public String getLabel(Object element) {
+ return "Editor Descriptor";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#getDetailLabel(java.lang.Object)
+ */
+ @Override
+ public String getDetailLabel(Object element) {
+ EditorPartDescriptor desc = (EditorPartDescriptor) element;
+ return desc.getLabel();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#getDescription(java.lang.Object)
+ */
+ @Override
+ public String getDescription(Object element) {
+ return "Editor Descriptor is a template for editor parts";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#doGetEditor(org.eclipse.swt.widgets.Composite, java.lang.Object)
+ */
+ @Override
+ public Composite doGetEditor(Composite parent, Object object) {
+ if (composite == null) {
+ context = new EMFDataBindingContext();
+ composite = createForm(parent, context, getMaster());
+ }
+ getMaster().setValue(object);
+ return composite;
+ }
+
+ /**
+ * Creates the form.
+ *
+ * @param parent
+ * the parent
+ * @param context
+ * the context
+ * @param master
+ * the master
+ * @return the composite
+ */
+ protected Composite createForm(Composite parent,
+ EMFDataBindingContext context, IObservableValue master) {
+ parent = new Composite(parent, SWT.NONE);
+ parent.setLayout(new GridLayout(3, false));
+
+ IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+
+ // ------------------------------------------------------------
+ {
+ Label l = new Label(parent, SWT.NONE);
+ l.setText("Id");
+
+ Text t = new Text(parent, SWT.BORDER);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan = 2;
+ t.setLayoutData(gd);
+ context.bindValue(
+ textProp.observeDelayed(200, t),
+ EMFEditProperties
+ .value(getEditingDomain(),
+ ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID)
+ .observeDetail(master));
+ }
+
+ // ------------------------------------------------------------
+ {
+ Label l = new Label(parent, SWT.NONE);
+ l.setText("Label");
+
+ Text t = new Text(parent, SWT.BORDER);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan = 2;
+ t.setLayoutData(gd);
+ context.bindValue(
+ textProp.observeDelayed(200, t),
+ EMFEditProperties.value(getEditingDomain(),
+ UiPackageImpl.Literals.UI_LABEL__LABEL)
+ .observeDetail(master));
+ }
+
+ // ------------------------------------------------------------
+ {
+ Label l = new Label(parent, SWT.NONE);
+ l.setText("Tooltip");
+
+ Text t = new Text(parent, SWT.BORDER);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan = 2;
+ t.setLayoutData(gd);
+ context.bindValue(
+ textProp.observeDelayed(200, t),
+ EMFEditProperties.value(getEditingDomain(),
+ UiPackageImpl.Literals.UI_LABEL__TOOLTIP)
+ .observeDetail(master));
+ }
+
+ // ------------------------------------------------------------
+ {
+ Label l = new Label(parent, SWT.NONE);
+ l.setText("Icon URI");
+
+ Text t = new Text(parent, SWT.BORDER);
+ t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ context.bindValue(
+ textProp.observeDelayed(200, t),
+ EMFEditProperties.value(getEditingDomain(),
+ UiPackageImpl.Literals.UI_LABEL__ICON_URI)
+ .observeDetail(master));
+
+ Button b = new Button(parent, SWT.PUSH | SWT.FLAT);
+ b.setImage(createImage(ResourceProvider.IMG_Obj16_zoom));
+ b.setText("Find");
+ }
+
+ // ------------------------------------------------------------
+ {
+ Label l = new Label(parent, SWT.NONE);
+ l.setText("Content Filter");
+
+ Text t = new Text(parent, SWT.BORDER);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan = 2;
+ t.setLayoutData(gd);
+ context.bindValue(
+ textProp.observeDelayed(200, t),
+ EMFEditProperties
+ .value(getEditingDomain(),
+ E4modelextensionPackage.Literals.EDITOR_PART_DESCRIPTOR__URI_FILTER)
+ .observeDetail(master));
+ }
+
+ // ------------------------------------------------------------
+ {
+ Label l = new Label(parent, SWT.NONE);
+ l.setText("Class URI");
+
+ Text t = new Text(parent, SWT.BORDER);
+ t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ context.bindValue(
+ textProp.observeDelayed(200, t),
+ EMFEditProperties
+ .value(getEditingDomain(),
+ BasicPackageImpl.Literals.PART_DESCRIPTOR__CONTRIBUTION_URI)
+ .observeDetail(master));
+
+ final Button b = new Button(parent, SWT.PUSH | SWT.FLAT);
+ b.setImage(createImage(ResourceProvider.IMG_Obj16_zoom));
+ b.setText("Find");
+ b.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ContributionClassDialog dialog = new ContributionClassDialog(
+ b.getShell(),
+ eclipseContext,
+ getEditingDomain(),
+ (MPartDescriptor) getMaster().getValue(),
+ BasicPackageImpl.Literals.PART_DESCRIPTOR__CONTRIBUTION_URI,
+ Messages);
+ dialog.open();
+ }
+ });
+ }
+
+ // ------------------------------------------------------------
+ {
+ Label l = new Label(parent, SWT.NONE);
+ l.setText("Part Adding Logic");
+
+ Text t = new Text(parent, SWT.BORDER);
+ t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ context.bindValue(
+ textProp.observeDelayed(200, t),
+ EMFEditProperties
+ .value(getEditingDomain(),
+ E4modelextensionPackage.Literals.EDITOR_PART_DESCRIPTOR__PART_ADDING_LOGIC_URI)
+ .observeDetail(master));
+
+ final Button b = new Button(parent, SWT.PUSH | SWT.FLAT);
+ b.setImage(createImage(ResourceProvider.IMG_Obj16_zoom));
+ b.setText("Find");
+ b.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ContributionClassDialog dialog = new ContributionClassDialog(
+ b.getShell(),
+ eclipseContext,
+ getEditingDomain(),
+ (MPartDescriptor) getMaster().getValue(),
+ E4modelextensionPackage.Literals.EDITOR_PART_DESCRIPTOR__PART_ADDING_LOGIC_URI,
+ Messages);
+ dialog.open();
+ }
+ });
+ }
+
+ return parent;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#getChildList(java.lang.Object)
+ */
+ @Override
+ public IObservableList getChildList(Object element) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/EditorPartDescriptorEditorDesc.java b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/EditorPartDescriptorEditorDesc.java
new file mode 100644
index 0000000..3efa8a2
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/EditorPartDescriptorEditorDesc.java
@@ -0,0 +1,38 @@
+/**
+ * Copyright (c) 2013 Rushan Gilmullin, Florian Pirchner, Sopot Scela 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:
+ * Rushan Gilmullin - Initial implementation
+ */
+
+ package org.eclipse.osbp.e4tools.extension;
+
+import org.eclipse.e4.tools.emf.ui.common.IEditorDescriptor;
+import org.eclipse.emf.ecore.EClass;
+
+import e4modelextension.E4modelextensionPackage;
+
+/**
+ * The Class EditorPartDescriptorEditorDesc.
+ */
+public class EditorPartDescriptorEditorDesc implements IEditorDescriptor {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.IEditorDescriptor#getEClass()
+ */
+ public EClass getEClass() {
+ return E4modelextensionPackage.Literals.EDITOR_PART_DESCRIPTOR;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.IEditorDescriptor#getEditorClass()
+ */
+ public Class<?> getEditorClass() {
+ return EditorPartDescriptorEditor.class;
+ }
+
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VEditorPartDescriptor.java b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VEditorPartDescriptor.java
new file mode 100644
index 0000000..36c58b4
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VEditorPartDescriptor.java
@@ -0,0 +1,232 @@
+/**
+ * Copyright (c) 2013 Rushan Gilmullin, Florian Pirchner, Sopot Scela 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:
+ * Rushan Gilmullin - Initial implementation
+ */
+ package org.eclipse.osbp.e4tools.extension;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.observable.value.WritableValue;
+import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.ObservableColumnLabelProvider;
+import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
+import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
+import org.eclipse.e4.ui.model.application.commands.MHandler;
+import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.databinding.EMFDataBindingContext;
+import org.eclipse.emf.databinding.edit.EMFEditProperties;
+import org.eclipse.emf.databinding.edit.IEMFEditValueProperty;
+import org.eclipse.emf.edit.command.AddCommand;
+import org.eclipse.emf.edit.command.RemoveCommand;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+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.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+
+import e4modelextension.E4modelextensionFactory;
+import e4modelextension.E4modelextensionPackage;
+import e4modelextension.EditorPartDescriptor;
+
+/**
+ * The Class VEditorPartDescriptor.
+ */
+public class VEditorPartDescriptor extends AbstractComponentEditor{
+
+ /** The composite. */
+ private Composite composite;
+
+ /** The context. */
+ private EMFDataBindingContext context;
+
+ /** The viewer. */
+ private TableViewer viewer;
+
+ /**
+ * Instantiates a new v editor part descriptor.
+ */
+ @Inject
+ public VEditorPartDescriptor() {
+ super();
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#getLabel(java.lang.Object)
+ */
+ @Override
+ public String getLabel(Object element) {
+ return "Editor Part Descriptors";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#getDetailLabel(java.lang.Object)
+ */
+ @Override
+ public String getDetailLabel(Object element) {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#getDescription(java.lang.Object)
+ */
+ @Override
+ public String getDescription(Object element) {
+ return "Editor Part Descriptors Bla Bla Bla Bla";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#doGetEditor(org.eclipse.swt.widgets.Composite, java.lang.Object)
+ */
+ @Override
+ public Composite doGetEditor(Composite parent, Object object) {
+ if( composite == null ) {
+ context = new EMFDataBindingContext();
+ composite = createForm(parent,context, getMaster());
+ }
+ VirtualEntry<?> o = (VirtualEntry<?>)object;
+ viewer.setInput(o.getList());
+ getMaster().setValue(o.getOriginalParent());
+ return composite;
+ }
+
+ /**
+ * Creates the form.
+ *
+ * @param parent
+ * the parent
+ * @param context
+ * the context
+ * @param master
+ * the master
+ * @return the composite
+ */
+ private Composite createForm(Composite parent, EMFDataBindingContext context,
+ WritableValue master) {
+ parent = new Composite(parent,SWT.NONE);
+ parent.setLayout(new GridLayout(3, false));
+
+ {
+ Label l = new Label(parent, SWT.NONE);
+ l.setText("Descriptors");
+ l.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+
+ viewer = new TableViewer(parent);
+ ObservableListContentProvider cp = new ObservableListContentProvider();
+ viewer.setContentProvider(cp);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.heightHint = 300;
+ viewer.getControl().setLayoutData(gd);
+ viewer.getTable().setHeaderVisible(true);
+
+ {
+ IEMFEditValueProperty prop = EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__LABEL);
+
+ TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
+ column.getColumn().setText("Name");
+ column.getColumn().setWidth(200);
+ column.setLabelProvider(new ObservableColumnLabelProvider<MHandler>(prop.observeDetail(cp.getKnownElements())));
+ }
+
+ Composite buttonComp = new Composite(parent, SWT.NONE);
+ buttonComp.setLayoutData(new GridData(GridData.FILL,GridData.END,false,false));
+ GridLayout gl = new GridLayout();
+ gl.marginLeft=0;
+ gl.marginRight=0;
+ gl.marginWidth=0;
+ gl.marginHeight=0;
+ buttonComp.setLayout(gl);
+
+ Button b;
+
+ b = new Button(buttonComp, SWT.PUSH | SWT.FLAT);
+ b.setText("Add ...");
+ b.setImage(createImage(ResourceProvider.IMG_Obj16_table_add));
+ b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
+ b.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ handleAdd();
+ }
+ });
+
+ b = new Button(buttonComp, SWT.PUSH | SWT.FLAT);
+ b.setText("Remove");
+ b.setImage(createImage(ResourceProvider.IMG_Obj16_table_delete));
+ b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
+ b.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if( ! viewer.getSelection().isEmpty() ) {
+ List<?> commands = ((IStructuredSelection)viewer.getSelection()).toList();
+ Command cmd = RemoveCommand.create(getEditingDomain(), getMaster().getValue(), E4modelextensionPackage.Literals.VAACLIPSE_APPLICATION__EDITOR_DESCRIPTORS, commands);
+ if( cmd.canExecute() ) {
+ getEditingDomain().getCommandStack().execute(cmd);
+ }
+ }
+ }
+ });
+ }
+
+ return parent;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#getChildList(java.lang.Object)
+ */
+ @Override
+ public IObservableList getChildList(Object element) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#getActions(java.lang.Object)
+ */
+ @Override
+ public List<Action> getActions(Object element) {
+ ArrayList<Action> actions = new ArrayList<Action>(super.getActions(element));
+ actions.add(new Action("Add Editor descriptor part") {
+ @Override
+ public void run() {
+ handleAdd();
+ }
+ });
+ return actions;
+ }
+
+ /**
+ * Handle add.
+ */
+ private void handleAdd() {
+ EditorPartDescriptor obj = E4modelextensionFactory.eINSTANCE.createEditorPartDescriptor();
+ Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), E4modelextensionPackage.Literals.VAACLIPSE_APPLICATION__EDITOR_DESCRIPTORS, obj);
+
+ if( cmd.canExecute() ) {
+ getEditingDomain().getCommandStack().execute(cmd);
+//TODO Need to abstract this editor.setSelection(command);
+ }
+ }
+
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VPreferencesCategoryDescriptor.java b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VPreferencesCategoryDescriptor.java
new file mode 100644
index 0000000..83e2643
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VPreferencesCategoryDescriptor.java
@@ -0,0 +1,231 @@
+/**
+ * Copyright (c) 2013 Rushan Gilmullin, Florian Pirchner, Sopot Scela 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:
+ * Rushan Gilmullin - Initial implementation
+ */
+ package org.eclipse.osbp.e4tools.extension;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.observable.value.WritableValue;
+import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.ObservableColumnLabelProvider;
+import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
+import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
+import org.eclipse.e4.ui.model.application.commands.MHandler;
+import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.databinding.EMFDataBindingContext;
+import org.eclipse.emf.databinding.edit.EMFEditProperties;
+import org.eclipse.emf.databinding.edit.IEMFEditValueProperty;
+import org.eclipse.emf.edit.command.AddCommand;
+import org.eclipse.emf.edit.command.RemoveCommand;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+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.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+
+import e4modelextension.E4modelextensionFactory;
+import e4modelextension.E4modelextensionPackage;
+import e4modelextension.EditorPartDescriptor;
+
+/**
+ * The Class VPreferencesCategoryDescriptor.
+ */
+public class VPreferencesCategoryDescriptor extends AbstractComponentEditor{
+
+ /** The composite. */
+ private Composite composite;
+
+ /** The context. */
+ private EMFDataBindingContext context;
+
+ /** The viewer. */
+ private TableViewer viewer;
+
+ /**
+ * Instantiates a new v preferences category descriptor.
+ */
+ @Inject
+ public VPreferencesCategoryDescriptor() {
+ super();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#getLabel(java.lang.Object)
+ */
+ @Override
+ public String getLabel(Object element) {
+ return "Preference category";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#getDetailLabel(java.lang.Object)
+ */
+ @Override
+ public String getDetailLabel(Object element) {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#getDescription(java.lang.Object)
+ */
+ @Override
+ public String getDescription(Object element) {
+ return "Preference category";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#doGetEditor(org.eclipse.swt.widgets.Composite, java.lang.Object)
+ */
+ @Override
+ public Composite doGetEditor(Composite parent, Object object) {
+ if( composite == null ) {
+ context = new EMFDataBindingContext();
+ composite = createForm(parent,context, getMaster());
+ }
+ VirtualEntry<?> o = (VirtualEntry<?>)object;
+ viewer.setInput(o.getList());
+ getMaster().setValue(o.getOriginalParent());
+ return composite;
+ }
+
+ /**
+ * Creates the form.
+ *
+ * @param parent
+ * the parent
+ * @param context
+ * the context
+ * @param master
+ * the master
+ * @return the composite
+ */
+ private Composite createForm(Composite parent, EMFDataBindingContext context,
+ WritableValue master) {
+ parent = new Composite(parent,SWT.NONE);
+ parent.setLayout(new GridLayout(3, false));
+
+ {
+ Label l = new Label(parent, SWT.NONE);
+ l.setText("Descriptors");
+ l.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+
+ viewer = new TableViewer(parent);
+ ObservableListContentProvider cp = new ObservableListContentProvider();
+ viewer.setContentProvider(cp);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.heightHint = 300;
+ viewer.getControl().setLayoutData(gd);
+ viewer.getTable().setHeaderVisible(true);
+
+ {
+ IEMFEditValueProperty prop = EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_LABEL__LABEL);
+
+ TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
+ column.getColumn().setText("Name");
+ column.getColumn().setWidth(200);
+ column.setLabelProvider(new ObservableColumnLabelProvider<MHandler>(prop.observeDetail(cp.getKnownElements())));
+ }
+
+ Composite buttonComp = new Composite(parent, SWT.NONE);
+ buttonComp.setLayoutData(new GridData(GridData.FILL,GridData.END,false,false));
+ GridLayout gl = new GridLayout();
+ gl.marginLeft=0;
+ gl.marginRight=0;
+ gl.marginWidth=0;
+ gl.marginHeight=0;
+ buttonComp.setLayout(gl);
+
+ Button b;
+
+ b = new Button(buttonComp, SWT.PUSH | SWT.FLAT);
+ b.setText("Add ...");
+ b.setImage(createImage(ResourceProvider.IMG_Obj16_table_add));
+ b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
+ b.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ handleAdd();
+ }
+ });
+
+ b = new Button(buttonComp, SWT.PUSH | SWT.FLAT);
+ b.setText("Remove");
+ b.setImage(createImage(ResourceProvider.IMG_Obj16_table_delete));
+ b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
+ b.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if( ! viewer.getSelection().isEmpty() ) {
+ List<?> commands = ((IStructuredSelection)viewer.getSelection()).toList();
+ Command cmd = RemoveCommand.create(getEditingDomain(), getMaster().getValue(), E4modelextensionPackage.Literals.VAACLIPSE_APPLICATION__EDITOR_DESCRIPTORS, commands);
+ if( cmd.canExecute() ) {
+ getEditingDomain().getCommandStack().execute(cmd);
+ }
+ }
+ }
+ });
+ }
+
+ return parent;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#getChildList(java.lang.Object)
+ */
+ @Override
+ public IObservableList getChildList(Object element) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor#getActions(java.lang.Object)
+ */
+ @Override
+ public List<Action> getActions(Object element) {
+ ArrayList<Action> actions = new ArrayList<Action>(super.getActions(element));
+ actions.add(new Action("Add preference category") {
+ @Override
+ public void run() {
+ handleAdd();
+ }
+ });
+ return actions;
+ }
+
+ /**
+ * Handle add.
+ */
+ private void handleAdd() {
+ EditorPartDescriptor obj = E4modelextensionFactory.eINSTANCE.createEditorPartDescriptor();
+ Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), E4modelextensionPackage.Literals.VAACLIPSE_APPLICATION__PREFERENCES_CATEGORIES, obj);
+
+ if( cmd.canExecute() ) {
+ getEditingDomain().getCommandStack().execute(cmd);
+//TODO Need to abstract this editor.setSelection(command);
+ }
+ }
+
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VaaclipseApplicationEditor.java b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VaaclipseApplicationEditor.java
new file mode 100644
index 0000000..2fde556
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VaaclipseApplicationEditor.java
@@ -0,0 +1,110 @@
+/**
+ * Copyright (c) 2013 Rushan Gilmullin, Florian Pirchner, Sopot Scela 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:
+ * Rushan Gilmullin - Initial implementation
+ */
+
+ package org.eclipse.osbp.e4tools.extension;
+
+import javax.inject.Inject;
+
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.property.list.IListProperty;
+import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
+import org.eclipse.e4.tools.emf.ui.internal.common.component.ApplicationEditor;
+import org.eclipse.emf.databinding.EMFProperties;
+
+import e4modelextension.E4modelextensionPackage;
+
+/**
+ * The Class VaaclipseApplicationEditor.
+ */
+@SuppressWarnings("restriction")
+public class VaaclipseApplicationEditor extends ApplicationEditor {
+
+ /** The Constant EDITOR_DESCRIPTORS_ID. */
+ private static final String EDITOR_DESCRIPTORS_ID = VaaclipseApplicationEditor.class
+ .getName() + ".EDITOR_DESCRIPTORS";
+
+ /** The editor descriptors. */
+ private IListProperty EDITOR_DESCRIPTORS = EMFProperties
+ .list(E4modelextensionPackage.Literals.VAACLIPSE_APPLICATION__EDITOR_DESCRIPTORS);
+
+ /** The Constant PREFERENCE_CATEGORIES_ID. */
+ private static final String PREFERENCE_CATEGORIES_ID = VaaclipseApplicationEditor.class
+ .getName() + ".PREFERENCE_CATEGORIES";
+
+ /** The preference categories. */
+ private IListProperty PREFERENCE_CATEGORIES = EMFProperties
+ .list(E4modelextensionPackage.Literals.VAACLIPSE_APPLICATION__PREFERENCES_CATEGORIES);
+
+ /** The Constant PREFERENCE_PAGES_ID. */
+ private static final String PREFERENCE_PAGES_ID = VaaclipseApplicationEditor.class
+ .getName() + ".PREFERENCE_PAGES";
+
+ /** The preference pages. */
+ private IListProperty PREFERENCE_PAGES = EMFProperties
+ .list(E4modelextensionPackage.Literals.VAACLIPSE_APPLICATION__PREFERENCES_PAGES);
+
+ /**
+ * Instantiates a new vaaclipse application editor.
+ */
+ @Inject
+ public VaaclipseApplicationEditor() {
+ super();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.internal.common.component.ApplicationEditor#getLabel(java.lang.Object)
+ */
+ @Override
+ public String getLabel(Object element) {
+ return "Vaaclipse Application";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.internal.common.component.ApplicationEditor#getChildList(java.lang.Object)
+ */
+ @Override
+ public IObservableList getChildList(Object element) {
+
+ IObservableList list = super.getChildList(element);
+
+ VirtualEntry<Object> v = new VirtualEntry<Object>(
+ EDITOR_DESCRIPTORS_ID, EDITOR_DESCRIPTORS, element,
+ "Editor Part Descriptors") {
+ @Override
+ protected boolean accepted(Object o) {
+ return true;
+ }
+ };
+ list.add(v);
+
+ VirtualEntry<Object> v2 = new VirtualEntry<Object>(
+ PREFERENCE_CATEGORIES_ID, PREFERENCE_CATEGORIES, element,
+ "Preference Categories") {
+ @Override
+ protected boolean accepted(Object o) {
+ return true;
+ }
+ };
+ list.add(v2);
+
+ VirtualEntry<Object> v3 = new VirtualEntry<Object>(PREFERENCE_PAGES_ID,
+ PREFERENCE_PAGES, element, "Preference Pages") {
+ @Override
+ protected boolean accepted(Object o) {
+ return true;
+ }
+ };
+ list.add(v3);
+
+ return list;
+ }
+
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VaaclipseApplicationEditorDesc.java b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VaaclipseApplicationEditorDesc.java
new file mode 100644
index 0000000..9c430cb
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.e4tools.extension/src/org/eclipse/osbp/e4tools/extension/VaaclipseApplicationEditorDesc.java
@@ -0,0 +1,38 @@
+/**
+ * Copyright (c) 2013 Rushan Gilmullin, Florian Pirchner, Sopot Scela 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:
+ * Rushan Gilmullin - Initial implementation
+ */
+
+ package org.eclipse.osbp.e4tools.extension;
+
+import org.eclipse.e4.tools.emf.ui.common.IEditorDescriptor;
+import org.eclipse.emf.ecore.EClass;
+
+import e4modelextension.E4modelextensionPackage;
+
+/**
+ * The Class VaaclipseApplicationEditorDesc.
+ */
+public class VaaclipseApplicationEditorDesc implements IEditorDescriptor {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.IEditorDescriptor#getEClass()
+ */
+ public EClass getEClass() {
+ return E4modelextensionPackage.Literals.VAACLIPSE_APPLICATION;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.tools.emf.ui.common.IEditorDescriptor#getEditorClass()
+ */
+ public Class<?> getEditorClass() {
+ return VaaclipseApplicationEditor.class;
+ }
+
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.feature.ide/.project b/org.eclipse.osbp.vaaclipse.tools.feature.ide/.project
new file mode 100644
index 0000000..9964346
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.feature.ide/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.vaaclipse.tools.feature.ide</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.FeatureBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.pde.FeatureNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.vaaclipse.tools.feature.ide/LICENSE.txt b/org.eclipse.osbp.vaaclipse.tools.feature.ide/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.feature.ide/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation. \ No newline at end of file
diff --git a/org.eclipse.osbp.vaaclipse.tools.feature.ide/build.properties b/org.eclipse.osbp.vaaclipse.tools.feature.ide/build.properties
new file mode 100644
index 0000000..1d71880
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.feature.ide/build.properties
@@ -0,0 +1,5 @@
+bin.includes = license.html,\
+ feature.xml,\
+ feature.properties,\
+ LICENSE.txt
+src.includes = license.html, LICENSE.txt
diff --git a/org.eclipse.osbp.vaaclipse.tools.feature.ide/epl-v10.html b/org.eclipse.osbp.vaaclipse.tools.feature.ide/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.feature.ide/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+ body {
+ size: 8.5in 11.0in;
+ margin: 0.25in 0.5in 0.25in 0.5in;
+ tab-interval: 0.5in;
+ }
+ p {
+ margin-left: auto;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ p.list {
+ margin-left: 0.5in;
+ margin-top: 0.05em;
+ margin-bottom: 0.05em;
+ }
+ </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+
+
+</body></html> \ No newline at end of file
diff --git a/org.eclipse.osbp.vaaclipse.tools.feature.ide/feature.properties b/org.eclipse.osbp.vaaclipse.tools.feature.ide/feature.properties
new file mode 100644
index 0000000..e99819d
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.feature.ide/feature.properties
@@ -0,0 +1,169 @@
+###############################################################################
+# Copyright (c) 2013 Rushan Gilmullin, Florian Pirchner, Sopot Scela 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:
+# Rushan Gilmullin, Florian Pirchner, Sopot Scela - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName = Vaaclipse IDE tools
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse OSBP
+
+# "description" property - description of the feature
+description=.
+
+# "updateSiteName" property - label for the update site
+updateSiteName=
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2013 Rushan Gilmullin, Florian Pirchner, Sopot Scela and others\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n
+################ end of copyright property ####################################
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+February 1, 2011\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+ - Content may be structured and packaged into modules to facilitate delivering,\n\
+ extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+ plug-in fragments ("Fragments"), and features ("Features").\n\
+ - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+ in a directory named "plugins".\n\
+ - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+ Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+ Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+ numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+ - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+ named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+ - The top-level (root) directory\n\
+ - Plug-in and Fragment directories\n\
+ - Inside Plug-ins and Fragments packaged as JARs\n\
+ - Sub-directories of the directory named "src" of certain Plug-ins\n\
+ - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+ - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+ - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+ - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+ - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+ - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+ - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+ 1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+ the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+ extending or updating the functionality of an Eclipse-based product.\n\
+ 2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+ Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+ 3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+ govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+ Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+ with the Specification. Such Installable Software Agreement must inform the user of the\n\
+ terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+ the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+ indication of agreement by the user, the provisioning Technology will complete installation\n\
+ of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/org.eclipse.osbp.vaaclipse.tools.feature.ide/feature.xml b/org.eclipse.osbp.vaaclipse.tools.feature.ide/feature.xml
new file mode 100644
index 0000000..9e4ca2c
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.feature.ide/feature.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--#======================================================================= -->
+<!--# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) -->
+<!--# All rights reserved. This program and the accompanying materials -->
+<!--# are made available under the terms of the Eclipse Public License v1.0 -->
+<!--# which accompanies this distribution, and is available at -->
+<!--# http://www.eclipse.org/legal/epl-v10.html -->
+<!--# -->
+<!--# Contributors: -->
+<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
+<!--#======================================================================= -->
+
+<feature
+ id="org.eclipse.osbp.vaaclipse.tools.feature.ide"
+ label="%featureName"
+ version="0.9.0.qualifier"
+ provider-name="%providerName">
+
+ <description>
+ %description
+ </description>
+
+ <copyright>
+ %copyright
+ </copyright>
+
+ <license url="%licenseURL">
+ %license
+ </license>
+
+ <plugin
+ id="org.eclipse.osbp.vaaclipse.tools.e4tools.extension"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osbp.vaaclipse.tools.wizards"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osbp.e4modelextension"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+
+ <plugin
+ id="org.eclipse.osbp.vaaclipse.ui.preferences.model"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osbp.vaaclipse.ui.preferences.addon"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+</feature>
diff --git a/org.eclipse.osbp.vaaclipse.tools.feature.ide/license.html b/org.eclipse.osbp.vaaclipse.tools.feature.ide/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.feature.ide/license.html
@@ -0,0 +1,164 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse Foundation
+source code
+ repository ("Repository") in software modules ("Modules") and made
+available as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to
+facilitate delivering, extending, and upgrading the Content. Typical
+modules may include plug-ins ("Plug-ins"), plug-in fragments
+("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&#8482; ARchive) in a directory named "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or
+Fragments and associated material. Each Feature may be packaged as a
+sub-directory in a directory named "features". Within a Feature, files
+named "feature.xml" may contain a list of the names and version numbers
+of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features ("Included
+Features"). Within a Feature, files named "feature.xml" may contain a
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and
+Included Features should be contained in files named "license.html"
+("Feature Licenses"). Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the
+Feature Update License should either provide you with the terms and
+conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be
+found in the "license" property of files named "feature.properties"
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+ SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software,
+examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager ("Provisioning Technology") for the purpose of
+allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This
+capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning
+Technology
+ in accordance with the Specification. By using Provisioning
+Technology in such a manner and making it available in accordance with
+the
+ Specification, you further acknowledge your agreement to, and the
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur ("Provisioning Process") in
+which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") with the intent of installing,
+extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology
+may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user
+the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such Installable
+Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable
+Software Agreement must inform the user of the terms and conditions that
+ govern
+ the Installable Software and must solicit acceptance by the end
+user in the manner prescribed in such Installable Software Agreement.
+Upon such
+ indication of agreement by the user, the provisioning Technology
+will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use,
+and/or re-export to
+ another country, of encryption software. BEFORE using any encryption
+software, please check the country's laws, regulations and policies
+concerning the import,
+ possession, or use, and re-export of encryption software, to see if
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+
+
+</body></html> \ No newline at end of file
diff --git a/org.eclipse.osbp.vaaclipse.tools.feature.ide/pom.xml b/org.eclipse.osbp.vaaclipse.tools.feature.ide/pom.xml
new file mode 100644
index 0000000..c1bc9f0
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.feature.ide/pom.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*******************************************************************************
+ * Copyright (c) 2012 Rushan R. Gilmullin 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:
+ * Rushan R. Gilmullin - initial API and implementation
+ *******************************************************************************/
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.osbp.vaaclipse.tools</groupId>
+ <artifactId>org.eclipse.osbp.vaaclipse.tools</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.osbp.vaaclipse.tools.feature.ide</artifactId>
+ <packaging>eclipse-feature</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-source-feature-plugin</artifactId>
+ <version>${tychoExtrasVersion}</version>
+ <executions>
+ <execution>
+ <id>source-feature</id>
+ <phase>package</phase>
+ <goals>
+ <goal>source-feature</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <labelSuffix> (source)</labelSuffix>
+ </configuration>
+ </plugin>
+ <plugin>
+ <!-- workaround while bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=398250
+ is not fixed -->
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <executions>
+ <execution>
+ <id>attached-p2-metadata</id>
+ <phase>package</phase>
+ <goals>
+ <goal>p2-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>javadoc-jar</id>
+ <phase>package</phase>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/org.eclipse.osbp.vaaclipse.tools.feature.ide/src/main/javadoc/README.txt b/org.eclipse.osbp.vaaclipse.tools.feature.ide/src/main/javadoc/README.txt
new file mode 100644
index 0000000..831da7e
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.feature.ide/src/main/javadoc/README.txt
@@ -0,0 +1 @@
+Resource folder for javadoc resources. \ No newline at end of file
diff --git a/org.eclipse.osbp.vaaclipse.tools.feature.ide/src/overview.html b/org.eclipse.osbp.vaaclipse.tools.feature.ide/src/overview.html
new file mode 100644
index 0000000..893d29b
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.feature.ide/src/overview.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <title>OSBP Tools Graphical Entity</title>
+</head>
+<body>
+<p>The <strong>OSBP&nbsp;Vaaclips Tools </strong>provides ...</p>
+
+<p>&nbsp;</p>
+
+<p>&nbsp;</p>
+</body>
+</html>
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/.project b/org.eclipse.osbp.vaaclipse.tools.wizards/.project
new file mode 100644
index 0000000..f5a5db3
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/.project
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.vaaclipse.tools.wizards</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.babel.editor.rbeBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.babel.editor.rbeNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/LICENSE.txt b/org.eclipse.osbp.vaaclipse.tools.wizards/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation. \ No newline at end of file
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/META-INF/MANIFEST.MF b/org.eclipse.osbp.vaaclipse.tools.wizards/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..247a16d
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/META-INF/MANIFEST.MF
@@ -0,0 +1,28 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.vaaclipse.tools.wizards
+Bundle-SymbolicName: org.eclipse.osbp.vaaclipse.tools.wizards;singleton:=true
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.eclipse.ui;bundle-version="3.6.0",
+ org.eclipse.pde.core;bundle-version="3.6.0",
+ org.eclipse.pde.ui;bundle-version="3.6.0",
+ org.eclipse.core.runtime;bundle-version="3.6.0",
+ org.eclipse.e4.ui.model.workbench;bundle-version="0.9.1",
+ org.eclipse.core.resources;bundle-version="3.6.0",
+ org.eclipse.jdt.core;bundle-version="3.6.0",
+ org.eclipse.jdt.launching;bundle-version="3.5.100",
+ org.eclipse.ui.ide;bundle-version="3.6.0",
+ org.eclipse.core.databinding;bundle-version="1.3.100",
+ org.eclipse.core.databinding.beans;bundle-version="1.2.100",
+ org.eclipse.jface.databinding;bundle-version="1.4.0",
+ org.eclipse.core.databinding.property;bundle-version="1.3.0",
+ org.eclipse.jdt.ui;bundle-version="3.6.0",
+ org.eclipse.emf.ecore
+Bundle-Activator: org.eclipse.osbp.vaaclipse.wizards.ToolsPlugin
+Import-Package: org.eclipse.e4.internal.tools.wizards.project,
+ javax.inject;version="1.0.0",
+ javax.annotation
+Export-Package: org.eclipse.osbp.vaaclipse.wizards.project;version="0.9.0"
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/about.html b/org.eclipse.osbp.vaaclipse.tools.wizards/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 1, 2016</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&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/org.eclipse.osbp.vaaclipse.tools.wizards/about.ini b/org.eclipse.osbp.vaaclipse.tools.wizards/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/about.ini
@@ -0,0 +1,17 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+welcomePage=
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/about.mappings b/org.eclipse.osbp.vaaclipse.tools.wizards/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=qualifier
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/about.properties b/org.eclipse.osbp.vaaclipse.tools.wizards/about.properties
new file mode 100644
index 0000000..474d1a3
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/about.properties
@@ -0,0 +1,26 @@
+#
+# Copyright (c) 2012, 2016 - Loetz GmbH&Co.KG (Heidelberg)
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Loetz GmbH&Co.KG - initial API and implementation
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+featureName=org.eclipse.osbp.vaaclipse.tools.wizards
+
+################ blurb property ####################################
+featureText=\
+Copyright (c) 2012-2016 - Loetz GmbH&Co.KG \n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+ Loetz GmbH&Co.KG - implementation\n
+################ end of blurb property ####################################
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/build.properties b/org.eclipse.osbp.vaaclipse.tools.wizards/build.properties
new file mode 100644
index 0000000..67e4b72
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/build.properties
@@ -0,0 +1,9 @@
+source.. = src/
+output.. = target/classes/
+bin.includes = about.properties, about.mappings, about.ini, about.html, META-INF/,\
+ .,\
+ plugin.xml,\
+ src/,\
+ templates/,\
+ LICENSE.txt
+src.includes = about.properties, about.mappings, about.ini, about.html, LICENSE.txt
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/plugin.xml b/org.eclipse.osbp.vaaclipse.tools.wizards/plugin.xml
new file mode 100644
index 0000000..db893f5
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/plugin.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.ui.newWizards">
+ <wizard
+ category="org.eclipse.e4.tools"
+ class="org.eclipse.osbp.vaaclipse.wizards.project.E4NewProjectWizard"
+ icon="platform:/plugin/org.eclipse.pde.ui/icons/etool16/newpprj_wiz.gif"
+ id="org.eclipse.e4.tools.E4NewProjectWizard"
+ name="Eclipse 4 Vaadin Application Project"
+ project="true">
+ </wizard>
+ </extension>
+
+</plugin>
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/pom.xml b/org.eclipse.osbp.vaaclipse.tools.wizards/pom.xml
new file mode 100644
index 0000000..42ed7ca
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/pom.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--#======================================================================= -->
+<!--# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) -->
+<!--# All rights reserved. This program and the accompanying materials -->
+<!--# are made available under the terms of the Eclipse Public License v1.0 -->
+<!--# which accompanies this distribution, and is available at -->
+<!--# http://www.eclipse.org/legal/epl-v10.html -->
+<!--# -->
+<!--# Contributors: -->
+<!--# Christophe Loetz (Loetz GmbH&Co.KG) - initial API and implementation -->
+<!--#======================================================================= -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>org.eclipse.osbp.vaaclipse.tools.wizards</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <parent>
+ <groupId>org.eclipse.osbp.vaaclipse.tools</groupId>
+ <artifactId>org.eclipse.osbp.vaaclipse.tools</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+</project>
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/ToolsPlugin.java b/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/ToolsPlugin.java
new file mode 100644
index 0000000..4a303c1
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/ToolsPlugin.java
@@ -0,0 +1,185 @@
+/**
+ * Copyright (c) 2013 Rushan Gilmullin, Florian Pirchner, Sopot Scela 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:
+ * Rushan Gilmullin - Initial implementation
+ */
+
+ package org.eclipse.osbp.vaaclipse.wizards;
+
+import java.net.URL;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The Class ToolsPlugin.
+ */
+public class ToolsPlugin extends AbstractUIPlugin {
+
+ /** The Constant PLUGIN_ID. */
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.osbp.vaaclipse.wizards"; //$NON-NLS-1$
+
+ /** The plugin. */
+ private static ToolsPlugin plugin;
+
+ /** The resource locator. */
+ private ResourceLocator resourceLocator;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
+ * )
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
+ * )
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance.
+ *
+ * @return the shared instance
+ */
+ public static ToolsPlugin getDefault() {
+ return plugin;
+ }
+
+ /**
+ * Gets the resource locator.
+ *
+ * @return the resource locator
+ */
+ public ResourceLocator getResourceLocator() {
+ if (resourceLocator == null) {
+ resourceLocator = new ResourceLocator() {
+
+ public String getString(String key, Object[] substitutions,
+ boolean translate) {
+ return null;
+ }
+
+ public String getString(String key, Object[] substitutions) {
+ return null;
+ }
+
+ public String getString(String key, boolean translate) {
+ return null;
+ }
+
+ public String getString(String key) {
+ return null;
+ }
+
+ public Object getImage(String key) {
+ return null;
+ }
+
+ public URL getBaseURL() {
+ return null;
+ }
+ };
+ }
+ return resourceLocator;
+ }
+
+ /**
+ * Log.
+ *
+ * @param status
+ * the status
+ * @param nesting
+ * the nesting
+ * @param appendLogger
+ * the append logger
+ */
+ public static void log(IStatus status, int nesting, boolean appendLogger) {
+ getDefault().getLog().log(status);
+ }
+
+ /**
+ * Log Throwable Error.
+ *
+ * @param t
+ * the t
+ */
+ public static void logError(Throwable t) {
+ logError(t, 0, true);
+ }
+
+ /**
+ * Log error.
+ *
+ * @param t
+ * the t
+ * @param appendLogger
+ * the append logger
+ */
+ public static void logError(Throwable t, boolean appendLogger) {
+ logError(t, 0, appendLogger);
+ }
+
+ /**
+ * Log error.
+ *
+ * @param t
+ * the t
+ * @param nesting
+ * the nesting
+ */
+ public static void logError(Throwable t, int nesting) {
+ logError(t, nesting, true);
+ }
+
+ /**
+ * Log error.
+ *
+ * @param t
+ * the t
+ * @param nesting
+ * the nesting
+ * @param appendLogger
+ * the append logger
+ */
+ public static void logError(Throwable t, int nesting, boolean appendLogger) {
+ log(newStatus(IStatus.ERROR, t.getMessage(), t), nesting, appendLogger);
+ }
+
+ /**
+ * Create an IStatus.
+ *
+ * @param severity
+ * the severity
+ * @param message
+ * the message
+ * @param exception
+ * the exception
+ * @return a new IStatus
+ */
+ public static IStatus newStatus(int severity, String message,
+ Throwable exception) {
+ return new Status(severity, PLUGIN_ID, 0, message, exception);
+ }
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/E4NewProjectWizard.java b/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/E4NewProjectWizard.java
new file mode 100644
index 0000000..0dc88f0
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/E4NewProjectWizard.java
@@ -0,0 +1,623 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2012 Soyatec(http://www.soyatec.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:
+ * Soyatec - initial API and implementation
+ * IBM Corporation - ongoing enhancements
+ * Sopot Cela - ongoing enhancements
+ * Lars Vogel - ongoing enhancements
+ * Wim Jongman - ongoing enhancements
+ * Rushan Gilmullin - adapt to vaaclipse
+ *******************************************************************************/
+package org.eclipse.osbp.vaaclipse.wizards.project;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.StringBufferInputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.e4.ui.model.application.commands.MBindingContext;
+import org.eclipse.e4.ui.model.application.commands.MBindingTable;
+import org.eclipse.e4.ui.model.application.commands.MCommand;
+import org.eclipse.e4.ui.model.application.commands.MCommandsFactory;
+import org.eclipse.e4.ui.model.application.commands.MHandler;
+import org.eclipse.e4.ui.model.application.commands.MKeyBinding;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.internal.compiler.ast.InstanceOfExpression;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.pde.core.build.IBuildEntry;
+import org.eclipse.pde.core.plugin.IMatchRules;
+import org.eclipse.pde.core.plugin.IPluginElement;
+import org.eclipse.pde.core.plugin.IPluginExtension;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.plugin.IPluginReference;
+import org.eclipse.pde.internal.core.ICoreConstants;
+import org.eclipse.pde.internal.core.build.WorkspaceBuildModel;
+import org.eclipse.pde.internal.core.bundle.BundlePlugin;
+import org.eclipse.pde.internal.core.bundle.BundlePluginBase;
+import org.eclipse.pde.internal.core.bundle.WorkspaceBundleModel;
+import org.eclipse.pde.internal.core.bundle.WorkspaceBundlePluginModel;
+import org.eclipse.pde.internal.core.ibundle.IBundlePluginModelBase;
+import org.eclipse.pde.internal.core.ibundle.IManifestHeader;
+import org.eclipse.pde.internal.core.plugin.WorkspacePluginModelBase;
+import org.eclipse.pde.internal.core.project.PDEProject;
+import org.eclipse.pde.internal.core.text.bundle.BundleSymbolicNameHeader;
+import org.eclipse.pde.internal.core.util.CoreUtility;
+import org.eclipse.pde.internal.ui.PDEPlugin;
+import org.eclipse.pde.internal.ui.PDEUIMessages;
+import org.eclipse.pde.internal.ui.wizards.IProjectProvider;
+import org.eclipse.pde.internal.ui.wizards.plugin.NewPluginProjectWizard;
+import org.eclipse.pde.internal.ui.wizards.plugin.NewProjectCreationOperation;
+import org.eclipse.pde.internal.ui.wizards.plugin.PluginFieldData;
+import org.eclipse.pde.ui.IBundleContentWizard;
+import org.eclipse.pde.ui.IFieldData;
+import org.eclipse.pde.ui.templates.PluginReference;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkingSet;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.FileEditorInput;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
+import org.osgi.framework.Version;
+
+/**
+ * The Class E4NewProjectWizard.
+ *
+ * @author jin.liu (jin.liu@soyatec.com)
+ */
+public class E4NewProjectWizard extends NewPluginProjectWizard {
+
+ /** The Constant PLUGIN_XML. */
+ private static final String PLUGIN_XML = "plugin.xml";
+
+ /** The Constant MODEL_EDITOR_ID. */
+ private static final String MODEL_EDITOR_ID = "org.eclipse.e4.tools.emf.editor3x.e4wbm";
+
+ /** The Constant APPLICATION_MODEL. */
+ private static final String APPLICATION_MODEL = "Application.e4xmi";
+
+ /** The plugin data. */
+ private PluginFieldData fPluginData;
+
+ /** The application page. */
+ private NewApplicationWizardPage fApplicationPage;
+
+ /** The project provider. */
+ private IProjectProvider fProjectProvider;
+
+ /** The content page. */
+ private PluginContentPage fContentPage;
+
+ /** The is minimalist. */
+ private boolean isMinimalist;
+
+ /**
+ * Instantiates a new e4 new project wizard.
+ */
+ public E4NewProjectWizard() {
+ fPluginData = new PluginFieldData();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.ui.wizards.plugin.NewPluginProjectWizard#addPages()
+ */
+ public void addPages() {
+ fMainPage = new E4NewProjectWizardPage(
+ "main", fPluginData, false, getSelection()); //$NON-NLS-1$
+ fMainPage.setTitle(PDEUIMessages.NewProjectWizard_MainPage_title);
+ fMainPage.setDescription(PDEUIMessages.NewProjectWizard_MainPage_desc);
+ String pname = getDefaultValue(DEF_PROJECT_NAME);
+ if (pname != null)
+ fMainPage.setInitialProjectName(pname);
+ addPage(fMainPage);
+
+ fProjectProvider = new IProjectProvider() {
+ public String getProjectName() {
+ return fMainPage.getProjectName();
+ }
+
+ public IProject getProject() {
+ return fMainPage.getProjectHandle();
+ }
+
+ public IPath getLocationPath() {
+ return fMainPage.getLocationPath();
+ }
+ };
+
+ fContentPage = new PluginContentPage(
+ "page2", fProjectProvider, fMainPage, fPluginData); //$NON-NLS-1$
+
+ fApplicationPage = new NewApplicationWizardPage(fProjectProvider,
+ fPluginData);
+
+ addPage(fContentPage);
+ addPage(fApplicationPage);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.ui.wizards.plugin.NewPluginProjectWizard#performFinish()
+ */
+ @SuppressWarnings("restriction")
+ public boolean performFinish() {
+ try {
+ fMainPage.updateData();
+ fContentPage.updateData();
+ IDialogSettings settings = getDialogSettings();
+ if (settings != null) {
+ fMainPage.saveSettings(settings);
+ fContentPage.saveSettings(settings);
+ }
+
+// BundleContext context = ToolsPlugin.getDefault().getBundle().getBundleContext();
+// ServiceReference ref = context.getServiceReference(IBundleProjectService.class.getName());
+// if (ref != null)
+// {
+// IBundleProjectService projectService = (IBundleProjectService)context.getService(ref);
+// if (projectService != null)
+// {
+// IBundleProjectDescription description = projectService.getDescription(fProjectProvider.getProject());
+// if (description != null)
+// description.setSingleton(true);
+// }
+// context.ungetService(ref);
+// }
+
+ // Create the project
+ getContainer().run(
+ false,
+ true,
+ new NewProjectCreationOperation(fPluginData,
+ fProjectProvider, new ContentWizard()) {
+ private WorkspacePluginModelBase model;
+
+ @Override
+ protected void setPluginLibraries(
+ WorkspacePluginModelBase model)
+ throws CoreException {
+ this.model = model;
+ super.setPluginLibraries(model);
+ }
+ });
+
+ // Add Project to working set
+ IWorkingSet[] workingSets = fMainPage.getSelectedWorkingSets();
+ if (workingSets.length > 0)
+ getWorkbench().getWorkingSetManager().addToWorkingSets(
+ fProjectProvider.getProject(), workingSets);
+
+ this.createApplicationResources(fProjectProvider.getProject(), new NullProgressMonitor());
+
+ updateSingleton(fProjectProvider.getProject(), true);
+
+ // Add the resources to build.properties
+ adjustBuildPropertiesFile(fProjectProvider.getProject());
+
+ // Open the model editor
+ openEditorForApplicationModel();
+
+ return true;
+ } catch (InvocationTargetException e) {
+ PDEPlugin.logException(e);
+ } catch (InterruptedException e) {
+ } catch (CoreException e) {
+ PDEPlugin.logException(e);
+ }
+ return false;
+ }
+
+ /**
+ * Opens the model editor after the project was created.
+ *
+ * @throws PartInitException
+ * the part init exception
+ */
+ private void openEditorForApplicationModel() throws PartInitException {
+ IFile file = fProjectProvider.getProject().getFile(APPLICATION_MODEL);
+ if (file != null) {
+ FileEditorInput input = new FileEditorInput(file);
+ IWorkbenchWindow window = PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow();
+ IWorkbenchPage page = window.getActivePage();
+ page.openEditor(input, MODEL_EDITOR_ID);
+ }
+ }
+
+ /**
+ * Adds other resources to the build.properties file.
+ *
+ * @param project
+ * the project
+ * @throws CoreException
+ * the core exception
+ */
+ private void adjustBuildPropertiesFile(IProject project)
+ throws CoreException {
+ IFile file = PDEProject.getBuildProperties(project);
+ if (file.exists()) {
+ WorkspaceBuildModel model = new WorkspaceBuildModel(file);
+ IBuildEntry e = model.getBuild().getEntry(IBuildEntry.BIN_INCLUDES);
+
+ e.addToken(PLUGIN_XML);
+ e.addToken(APPLICATION_MODEL);
+
+ // Event though an icons directory is always created
+ // it seems appropriate to only add it if it contains
+ // some content
+ if (!isMinimalist) {
+ e.addToken("icons/");
+ }
+
+ model.save();
+ }
+ }
+
+ /**
+ * Update singleton.
+ *
+ * @param project
+ * the project
+ * @param singleton
+ * the singleton
+ */
+ protected void updateSingleton(IProject project, boolean singleton) {
+ IFile man = project.getFile(ICoreConstants.BUNDLE_FILENAME_DESCRIPTOR);
+
+ try {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(man.getContents()));
+ String line = null;
+ StringBuffer manBuf = new StringBuffer();
+
+ while ((line = reader.readLine()) != null) {
+ manBuf.append(line + System.lineSeparator());
+ }
+
+ int i = manBuf.indexOf(Constants.BUNDLE_SYMBOLICNAME);
+ if (i >= 0)
+ {
+ int ls = manBuf.indexOf(System.lineSeparator(), i);
+ if (ls >= 0)
+ {
+ manBuf.insert(ls, ";singleton:=true");
+ }
+ }
+
+ man.setContents(new StringBufferInputStream(manBuf.toString()), IResource.FORCE, new NullProgressMonitor());
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * create products extension detail.
+ *
+ * @param project
+ * the project
+ * @param monitor
+ * the monitor
+ */
+ @SuppressWarnings("restriction")
+ public void createApplicationResources(IProject project,
+ IProgressMonitor monitor) {
+ Map<String, String> map = fApplicationPage.getData();
+ isMinimalist = !map.get(NewApplicationWizardPage.richSample)
+ .equalsIgnoreCase("TRUE");
+ if (map == null
+ || map.get(NewApplicationWizardPage.PRODUCT_NAME) == null)
+ return;
+
+ // If the project has invalid characters, the plug-in name would replace
+ // them with underscores, product name does the same
+ String pluginName = map.get(NewApplicationWizardPage.PRODUCT_NAME);
+
+ // If there's no Activator created we create default package
+ if (!fPluginData.doGenerateClass()) {
+ String packageName = fPluginData.getId();
+ IPath path = new Path(packageName.replace('.', '/'));
+ if (fPluginData.getSourceFolderName().trim().length() > 0)
+ path = new Path(fPluginData.getSourceFolderName()).append(path);
+
+ try {
+ CoreUtility.createFolder(project.getFolder(path));
+ } catch (CoreException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ IJavaProject javaProject = JavaCore.create(project);
+ IPackageFragment fragment = null;
+
+ try {
+ for (IPackageFragment element : javaProject.getPackageFragments()) {
+ if (element.getKind() == IPackageFragmentRoot.K_SOURCE) {
+ fragment = element;
+ }
+ }
+ } catch (JavaModelException e1) {
+ e1.printStackTrace();
+ }
+
+ IFile file = project.getFile("css/main.css");
+
+ try {
+ prepareFolder(file.getParent(), monitor);
+
+ URL corePath = ResourceLocator
+ .getProjectTemplateFiles("css/main.css");
+ file.create(corePath.openStream(), true, monitor);
+ } catch (Exception e) {
+ PDEPlugin.logException(e);
+ }
+
+ String template_id = "common";
+ Set<String> binaryExtentions = new HashSet<String>();
+ binaryExtentions.add(".gif");
+ binaryExtentions.add(".png");
+
+ Map<String, String> keys = new HashMap<String, String>();
+ keys.put("projectName", pluginName);
+ String elementName = fragment.getElementName();
+ keys.put("handlersPackageName", (elementName.equals("") ? "" : elementName
+ + ".")
+ + "handlers");
+ keys.put("loginPackageName", (elementName.equals("") ? "" : elementName
+ + ".")
+ + "login");
+ keys.put("viewsPackageName", (elementName.equals("") ? "" : elementName
+ + ".")
+ + "views");
+ keys.put(
+ "programArgs",
+ "true".equalsIgnoreCase(map.get(NewApplicationWizardPage.CLEAR_PERSISTED_STATE)) ? "-clearPersistedState" : "");
+ keys.put(
+ "contextPath",
+ !map.get(NewApplicationWizardPage.CONTEXT_PATH).trim().isEmpty() ? map.get(NewApplicationWizardPage.CONTEXT_PATH)
+ : "vaaclipse");
+
+ keys.put(
+ "port",
+ !map.get(NewApplicationWizardPage.PORT).trim().isEmpty() ? map.get(NewApplicationWizardPage.PORT)
+ : "8080");
+
+ try {
+ URL corePath = ResourceLocator.getProjectTemplateFiles(template_id);
+ IRunnableWithProgress op = new TemplateOperation(corePath, project,
+ keys, binaryExtentions, isMinimalist);
+ getContainer().run(false, true, op);
+ } catch (Exception e) {
+ PDEPlugin.logException(e);
+ }
+ if (!isMinimalist) {
+ try {
+ URL corePath = ResourceLocator.getProjectTemplateFiles("src");
+ IRunnableWithProgress op = new TemplateOperation(corePath,
+ (IContainer) fragment.getResource(), keys,
+ binaryExtentions, isMinimalist);
+ getContainer().run(false, true, op);
+ } catch (Exception e) {
+ PDEPlugin.logException(e);
+ }
+ }
+ }
+
+ /**
+ * Creates the command.
+ *
+ * @param commandId
+ * the command id
+ * @param name
+ * the name
+ * @param className
+ * the class name
+ * @param keyBinding
+ * the key binding
+ * @param projectName
+ * the project name
+ * @param fragment
+ * the fragment
+ * @param application
+ * the application
+ * @return the m command
+ */
+ private MCommand createCommand(String commandId, String name,
+ String className, String keyBinding, String projectName,
+ IPackageFragment fragment, MApplication application) {
+ MCommand command = MCommandsFactory.INSTANCE.createCommand();
+ command.setCommandName(name);
+ command.setElementId(commandId);
+ application.getCommands().add(command);
+ {
+ // Create Quit handler for command
+ MHandler quitHandler = MCommandsFactory.INSTANCE.createHandler();
+ quitHandler.setCommand(command);
+ String elementName = fragment.getElementName();
+ quitHandler.setContributionURI("bundleclass://" + projectName + "/"
+ + (elementName.equals("") ? "" : elementName + ".")
+ + "handlers." + className);
+ application.getHandlers().add(quitHandler);
+
+ MKeyBinding binding = MCommandsFactory.INSTANCE.createKeyBinding();
+ binding.setKeySequence(keyBinding);
+ binding.setCommand(command);
+ List<MBindingTable> tables = application.getBindingTables();
+ if (tables.size() == 0) {
+ MBindingContext rootContext = null;
+ if (application.getRootContext().size() > 0) {
+ rootContext = application.getRootContext().get(0);
+ } else {
+ rootContext = MCommandsFactory.INSTANCE
+ .createBindingContext();
+ rootContext
+ .setElementId("org.eclipse.ui.contexts.dialogAndWindow");
+ rootContext.setName("In Dialog and Windows");
+ application.getRootContext().add(rootContext);
+ }
+ MBindingTable table = MCommandsFactory.INSTANCE
+ .createBindingTable();
+ table.setBindingContext(rootContext);
+ tables.add(table);
+ }
+ tables.get(0).getBindings().add(binding);
+ }
+ return command;
+ }
+
+ /**
+ * Prepare folder.
+ *
+ * @param container
+ * the container
+ * @param monitor
+ * the monitor
+ * @throws CoreException
+ * the core exception
+ */
+ private void prepareFolder(IContainer container, IProgressMonitor monitor)
+ throws CoreException {
+ IContainer parent = container.getParent();
+ if (parent instanceof IFolder) {
+ prepareFolder((IFolder) parent, monitor);
+ }
+ if (!container.exists() && container instanceof IFolder) {
+ IFolder folder = (IFolder) container;
+ folder.create(true, true, monitor);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.ui.wizards.plugin.NewPluginProjectWizard#getPluginId()
+ */
+ public String getPluginId() {
+ return fPluginData.getId();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.ui.wizards.plugin.NewPluginProjectWizard#getPluginVersion()
+ */
+ public String getPluginVersion() {
+ return fPluginData.getVersion();
+ }
+
+ /**
+ * The Class ContentWizard.
+ */
+ private class ContentWizard extends Wizard implements IBundleContentWizard {
+
+ /** The dependencies. */
+ String[] dependencies = new String[] {
+ "javax.inject",
+ "org.eclipse.e4.core.di",
+ "org.eclipse.e4.core.contexts",
+ "com.vaadin.server",
+ "com.vaadin.shared",
+ "com.vaadin.shared.deps",
+ "org.eclipse.e4.ui.model.workbench",
+ "org.eclipse.e4.ui.workbench",
+ "org.eclipse.osbp.e4modelextension",
+ "org.eclipse.osbp.e4extension",
+ "org.eclipse.osbp.vaaclipse.publicapi",
+ "org.eclipse.e4.core.services",
+ "org.eclipse.osbp.vaaclipse.theme",
+ "org.eclipse.osgi.services",
+ "org.eclipse.e4.core.di.extensions"
+ };
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.ui.IPluginContentWizard#init(org.eclipse.pde.ui.IFieldData)
+ */
+ public void init(IFieldData data) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.ui.IPluginContentWizard#getDependencies(java.lang.String)
+ */
+ public IPluginReference[] getDependencies(String schemaVersion) {
+ ArrayList<IPluginReference> result = new ArrayList<IPluginReference>(
+ dependencies.length);
+ for (String dependency : dependencies) {
+ Bundle bundle = Platform.getBundle(dependency);
+ String versionString = "0.0.0";
+ if (bundle != null) {
+ Version version = bundle.getVersion();
+ versionString = version.getMajor() + "."
+ + version.getMinor() + "." + version.getMicro();
+ }
+ result.add(new PluginReference(dependency, versionString,
+ IMatchRules.GREATER_OR_EQUAL));
+ }
+ return result.toArray(new IPluginReference[0]);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.ui.IPluginContentWizard#getNewFiles()
+ */
+ public String[] getNewFiles() {
+ return new String[0];
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.ui.IPluginContentWizard#performFinish(org.eclipse.core.resources.IProject, org.eclipse.pde.core.plugin.IPluginModelBase, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public boolean performFinish(IProject project, IPluginModelBase model,
+ IProgressMonitor monitor) {
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.ui.IBundleContentWizard#getImportPackages()
+ */
+ public String[] getImportPackages() {
+ return new String[] { "javax.annotation;version=\"1.0.0\"" };
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.wizard.Wizard#performFinish()
+ */
+ @Override
+ public boolean performFinish() {
+ return true;
+ }
+
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/E4NewProjectWizardPage.java b/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/E4NewProjectWizardPage.java
new file mode 100644
index 0000000..fe16145
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/E4NewProjectWizardPage.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 Soyatec(http://www.soyatec.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:
+ * Soyatec - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osbp.vaaclipse.wizards.project;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.pde.internal.ui.wizards.plugin.AbstractFieldData;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * The Class E4NewProjectWizardPage.
+ */
+public class E4NewProjectWizardPage extends org.eclipse.pde.internal.ui.wizards.plugin.NewProjectCreationPage {
+
+ /**
+ * Instantiates a new e4 new project wizard page.
+ *
+ * @param pageName
+ * the page name
+ * @param data
+ * the data
+ * @param fragment
+ * the fragment
+ * @param selection
+ * the selection
+ */
+ public E4NewProjectWizardPage(String pageName, AbstractFieldData data, boolean fragment, IStructuredSelection selection) {
+ super(pageName, data, fragment, selection);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.ui.wizards.plugin.NewProjectCreationPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createControl(Composite parent) {
+ super.createControl(parent);
+ fOSGIButton.setSelection(true);
+ fEclipseButton.setEnabled(false);
+ fEclipseCombo.setEnabled(false);
+ }
+}
+
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/NewApplicationWizardPage.java b/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/NewApplicationWizardPage.java
new file mode 100644
index 0000000..2ed6e04
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/NewApplicationWizardPage.java
@@ -0,0 +1,698 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2012 Soyatec (http://www.soyatec.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:
+ * Soyatec - initial API and implementation
+ * IBM Corporation - ongoing enhancements
+ * Lars Vogel, vogella GmbH - ongoing enhancements
+ * Sopot Cela - ongoing enhancements
+ * Rushan Gilmullin - adapt to vaaclipse
+ *******************************************************************************/
+package org.eclipse.osbp.vaaclipse.wizards.project;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.pde.internal.ui.wizards.IProjectProvider;
+import org.eclipse.pde.internal.ui.wizards.plugin.AbstractFieldData;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.ColorDialog;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.branding.IProductConstants;
+
+/**
+ * The Class NewApplicationWizardPage.
+ *
+ * @author jin.liu (jin.liu@soyatec.com)
+ */
+public class NewApplicationWizardPage extends WizardPage {
+
+ /** The Constant THEME_CONTRIBUTION_RESOURCE_PATH. */
+ public static final String THEME_CONTRIBUTION_RESOURCE_PATH = "mainThemeContributionResourcePath";
+
+ /** The Constant PRODUCT_NAME. */
+ public static final String PRODUCT_NAME = "productName";
+
+ /** The Constant CLEAR_PERSISTED_STATE. */
+ public static final String CLEAR_PERSISTED_STATE = "clearPersistedState";
+
+ /** The Constant CONTEXT_PATH. */
+ public static final String CONTEXT_PATH = "contextPath";
+
+ /** The Constant PORT. */
+ public static final String PORT = "port";
+
+ /** The Constant EOL. */
+ public static final String EOL = System.getProperty("line.separator");
+
+ /** The Constant richSample. */
+ public static final String richSample = "RICH_SAMPLE";
+
+ /** The data. */
+ private final Map<String, String> data;
+
+ /** The project. */
+ private IProject project;
+
+ /** The project provider. */
+ private IProjectProvider projectProvider;
+
+/** The context path text. */
+// private Text proNameText;
+ private Text contextPathText;
+
+ /** The port text. */
+ private Text portText;
+
+ /** The property group. */
+ private Group propertyGroup;
+
+ /** The plugin data. */
+ private AbstractFieldData pluginData;
+
+ /** The properties. */
+ private PropertyData[] PROPERTIES;
+
+ /**
+ * Instantiates a new new application wizard page.
+ *
+ * @param projectProvider
+ * the project provider
+ * @param pluginData
+ * the plugin data
+ */
+ protected NewApplicationWizardPage(IProjectProvider projectProvider,
+ AbstractFieldData pluginData) {
+ super("New Eclipse 4 Vaadin Application Wizard Page");
+ this.projectProvider = projectProvider;
+ this.pluginData = pluginData;
+ data = new HashMap<String, String>();
+ data.put(richSample, "TRUE");// minimalist by default
+ setTitle("Eclipse 4 Vaadin Application");
+ setMessage("Configure application with special values.");
+ }
+
+ /**
+ * Gets the project.
+ *
+ * @return the project
+ */
+ public IProject getProject() {
+ if (project == null && projectProvider != null) {
+ project = projectProvider.getProject();
+ }
+ return project;
+ }
+
+ /**
+ * Sets the project.
+ *
+ * @param project
+ * the new project
+ */
+ public void setProject(IProject project) {
+ this.project = project;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
+ * .Composite)
+ */
+ public void createControl(Composite parent) {
+ Composite control = new Composite(parent, SWT.NONE);
+ control.setLayout(new GridLayout());
+
+// Group productGroup = createProductGroup(control);
+// productGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ Group webAppGroup = createWebAppGroup(control);
+ webAppGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ propertyGroup = createPropertyGroup(control);
+ propertyGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+// Group templateGroup = createTemplateGroup(control);
+// templateGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ setControl(control);
+ }
+
+// private Group createTemplateGroup(Composite parent) {
+// Group group = new Group(parent, SWT.NONE);
+// group.setLayout(new GridLayout(1, false));
+// group.setText("Template option");
+//
+// richSampleCheckbox = new Button(group, SWT.CHECK);
+//
+// richSampleCheckbox.setSelection(false);
+// richSampleCheckbox.addSelectionListener(new SelectionAdapter() {
+// public void widgetSelected(SelectionEvent e) {
+// data.put(richSample, richSampleCheckbox.getSelection() ? "TRUE"
+// : "FALSE");
+// }
+// });
+// richSampleCheckbox.setText("Create sample content (parts, menu etc.)");
+// return group;
+// }
+
+ /**
+ * The Class PropertyData.
+ */
+static class PropertyData {
+
+ /** The name. */
+ private String name;
+
+ /** The label. */
+ private String label;
+
+ /** The extra tooltip info. */
+ private String extraTooltipInfo;
+
+ /** The value. */
+ private String value;
+
+ /** The type. */
+ private Class<?> type;
+
+ /** The editable. */
+ private boolean editable;
+
+ /**
+ * Instantiates a new property data.
+ *
+ * @param name
+ * the name
+ * @param label
+ * the label
+ * @param value
+ * the value
+ * @param type
+ * the type
+ * @param editable
+ * the editable
+ */
+ public PropertyData(String name, String label, String value,
+ Class<?> type, boolean editable) {
+ this.name = name;
+ this.value = value;
+ this.label = label;
+ this.type = type;
+ this.editable = editable;
+ }
+
+ /**
+ * Instantiates a new property data.
+ *
+ * @param name
+ * the name
+ * @param label
+ * the label
+ * @param value
+ * the value
+ * @param type
+ * the type
+ * @param editable
+ * the editable
+ * @param extraTooltipInfo
+ * the extra tooltip info
+ */
+ public PropertyData(String name, String label, String value,
+ Class<?> type, boolean editable, String extraTooltipInfo) {
+ this.name = name;
+ this.value = value;
+ this.label = label;
+ this.type = type;
+ this.editable = editable;
+ this.extraTooltipInfo = extraTooltipInfo;
+ }
+
+ /**
+ * Gets the name.
+ *
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Gets the value.
+ *
+ * @return the value
+ */
+ public String getValue() {
+ return value;
+ }
+
+ /**
+ * Gets the type.
+ *
+ * @return the type
+ */
+ public Class<?> getType() {
+ return type;
+ }
+
+ /**
+ * Checks if is editable.
+ *
+ * @return true, if is editable
+ */
+ public boolean isEditable() {
+ return editable;
+ }
+
+ /**
+ * Gets the label.
+ *
+ * @return the label
+ */
+ public String getLabel() {
+ return label;
+ }
+
+ /**
+ * Gets the extra tooltip info.
+ *
+ * @return the extra tooltip info
+ */
+ public String getExtraTooltipInfo() {
+ return extraTooltipInfo;
+ }
+
+ }
+
+ /**
+ * Creates the property group.
+ *
+ * @param control
+ * the control
+ * @return the group
+ */
+ private Group createPropertyGroup(Composite control) {
+ Group group = new Group(control, SWT.NONE);
+ group.setText("Properties");
+
+ group.setLayout(new GridLayout(3, false));
+
+ return group;
+ }
+
+ /**
+ * Creates the property item.
+ *
+ * @param parent
+ * the parent
+ * @param property
+ * the property
+ */
+ private void createPropertyItem(final Composite parent,
+ final PropertyData property) {
+
+
+ if (property.getType() == Boolean.class) {
+ final Button button = new Button(parent, SWT.CHECK);
+ button.setSelection("true".equalsIgnoreCase(property.getValue()));
+ button.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ handleCheckBoxEvent(property.getName(),
+ button.getSelection());
+ }
+ });
+ button.setText(property.getLabel());
+ new Label(parent, SWT.NONE);
+ } else {
+ createLabelForField(parent, property);
+ final Text valueText = new Text(parent, SWT.BORDER);
+ valueText.setText(property.getValue());
+ GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+ valueText.setLayoutData(gridData);
+ if (!property.isEditable()) {
+ valueText.setEditable(false);
+ }
+ valueText.addListener(SWT.Modify, new Listener() {
+ public void handleEvent(Event event) {
+ handleTextEvent(property.getName(), valueText);
+ }
+ });
+
+ if (property.getType() == Color.class
+ || property.getType() == Rectangle.class) {
+ Button button = new Button(parent, SWT.PUSH);
+ button.setText("...");
+ button.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ handleLinkEvent(property, valueText, parent.getShell());
+ }
+ });
+ } else {
+ new Label(parent, SWT.NONE);
+ }
+ }
+ data.put(property.getName(), property.getValue());
+ }
+
+ /**
+ * Creates the label for field.
+ *
+ * @param parent
+ * the parent
+ * @param property
+ * the property
+ */
+ private void createLabelForField(final Composite parent,
+ final PropertyData property) {
+ Label label = new Label(parent, SWT.NONE);
+ label.setText(property.getLabel());
+ label.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_BLUE));
+ label.setToolTipText("Property \"" + property.getName() + "\"");
+ if (property.getExtraTooltipInfo() != null) {
+ label.setToolTipText(label.getToolTipText() + EOL
+ + property.getExtraTooltipInfo());
+ }
+ }
+
+ /**
+ * Handle link event.
+ *
+ * @param property
+ * the property
+ * @param valueText
+ * the value text
+ * @param shell
+ * the shell
+ */
+ private void handleLinkEvent(PropertyData property, Text valueText,
+ Shell shell) {
+ if (property == null || valueText == null || valueText.isDisposed()) {
+ return;
+ }
+ if (property.getType() == Color.class) {
+ ColorDialog colorDialog = new ColorDialog(shell);
+ RGB selectRGB = colorDialog.open();
+ if (selectRGB != null) {
+ valueText.setText((this.hexColorConvert(Integer
+ .toHexString(selectRGB.blue))
+ + this.hexColorConvert(Integer
+ .toHexString(selectRGB.green)) + this
+ .hexColorConvert(Integer.toHexString(selectRGB.red)))
+ .toUpperCase());
+ }
+ } else if (property.getType() == Rectangle.class) {
+ this.createRectDialog(shell, valueText).open();
+ }
+ }
+
+ /**
+ * exchange the color pattern of hex numeric.
+ *
+ * @param color
+ * the color
+ * @return the string
+ */
+ public String hexColorConvert(String color) {
+ if (color.length() == 1) {
+ return "0" + color;
+ }
+ return color;
+ }
+
+ /**
+ * create Rect Set dialog.
+ *
+ * @param parent
+ * the parent
+ * @param valueText
+ * the value text
+ * @return the dialog
+ */
+ public Dialog createRectDialog(final Composite parent, final Text valueText) {
+ return new Dialog(parent.getShell()) {
+ Text xPointText, yPointText, widthText, heightText;
+
+ @Override
+ protected Button createButton(Composite parent, int id,
+ String label, boolean defaultButton) {
+ return super.createButton(parent, id, label, defaultButton);
+ }
+
+ @Override
+ protected Control createDialogArea(final Composite parent) {
+ Composite composite = (Composite) super
+ .createDialogArea(parent);
+ composite.getShell().setText("Set Rect");
+ Group group = new Group(composite, SWT.NONE);
+ group.setText("Rect");
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.numColumns = 4;
+ group.setLayout(gridLayout);
+
+ Label xPointLabel = new Label(group, SWT.NONE);
+ xPointLabel.setText("X:");
+ xPointText = new Text(group, SWT.BORDER);
+ VerifyListener verifyListener = createVerifyListener(parent
+ .getShell());
+ xPointText.addVerifyListener(verifyListener);
+ Label yPointLabel = new Label(group, SWT.NONE);
+ yPointLabel.setText("Y:");
+ yPointText = new Text(group, SWT.BORDER);
+ yPointText.addVerifyListener(verifyListener);
+ Label widthLabel = new Label(group, SWT.NONE);
+ widthLabel.setText("Width:");
+ widthText = new Text(group, SWT.BORDER);
+ widthText.addVerifyListener(verifyListener);
+ Label heighttLabel = new Label(group, SWT.NONE);
+ heighttLabel.setText("Height:");
+ heightText = new Text(group, SWT.BORDER);
+ heightText.addVerifyListener(verifyListener);
+
+ return composite;
+ }
+
+ @Override
+ protected void buttonPressed(int buttonId) {
+ if (IDialogConstants.OK_ID == buttonId) {
+ String xPoint = xPointText.getText();
+ String yPoint = yPointText.getText();
+ String width = widthText.getText();
+ String height = heightText.getText();
+ if (xPoint.length() == 0 || yPoint.length() == 0
+ || width.length() == 0 || height.length() == 0) {
+ MessageDialog.openWarning(parent.getShell(),
+ "Input value empty",
+ "Value shoud not be empty!");
+ } else {
+ valueText.setText(xPoint + "," + yPoint + "," + width
+ + "," + height);
+ okPressed();
+ }
+ } else if (IDialogConstants.CANCEL_ID == buttonId) {
+ cancelPressed();
+ }
+ }
+ };
+ }
+
+ /**
+ * create verify Listener.
+ *
+ * @param shell
+ * the shell
+ * @return the verify listener
+ */
+ public VerifyListener createVerifyListener(final Shell shell) {
+ return new VerifyListener() {
+ public void verifyText(VerifyEvent e) {
+ char c = e.character;
+ if ("0123456789".indexOf(c) == -1) {
+ e.doit = false;
+ MessageDialog.openWarning(shell, "Input value error",
+ "Only numeric is allowed!");
+ return;
+ }
+ }
+ };
+ }
+
+ /**
+ * Handle text event.
+ *
+ * @param property
+ * the property
+ * @param valueText
+ * the value text
+ */
+ private void handleTextEvent(String property, Text valueText) {
+ if (property == null || valueText == null || valueText.isDisposed()) {
+ return;
+ }
+ String value = valueText.getText();
+ if (value.equals("")) {
+ value = null;
+ }
+ data.put(property, value);
+ }
+
+ /**
+ * Handle check box event.
+ *
+ * @param property
+ * the property
+ * @param selection
+ * the selection
+ */
+ protected void handleCheckBoxEvent(String property, boolean selection) {
+ if (property == null) {
+ return;
+ }
+ data.put(property, Boolean.toString(selection));
+ }
+
+// private Group createProductGroup(Composite control) {
+// Group proGroup = new Group(control, SWT.NONE);
+// proGroup.setText("Product");
+//
+// proGroup.setLayout(new GridLayout(2, false));
+//
+// Label proNameLabel = new Label(proGroup, SWT.NONE);
+// proNameLabel.setText("Name:");
+//
+// proNameText = new Text(proGroup, SWT.BORDER);
+// proNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+//
+// proNameText.addListener(SWT.Modify, new Listener() {
+// public void handleEvent(Event event) {
+// handleTextEvent(PRODUCT_NAME, proNameText);
+// }
+// });
+// return proGroup;
+// }
+
+ /**
+ * Creates the web app group.
+ *
+ * @param control
+ * the control
+ * @return the group
+ */
+private Group createWebAppGroup(Composite control) {
+ Group webAppGroup = new Group(control, SWT.NONE);
+ webAppGroup.setText("Web application parameters:");
+
+ webAppGroup.setLayout(new GridLayout(2, false));
+
+ Label contextPathLabel = new Label(webAppGroup, SWT.NONE);
+ contextPathLabel.setText("Context Path:");
+
+ contextPathText = new Text(webAppGroup, SWT.BORDER);
+ contextPathText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ contextPathText.addListener(SWT.Modify, new Listener() {
+ public void handleEvent(Event event) {
+ handleTextEvent(CONTEXT_PATH, contextPathText);
+ }
+ });
+
+ Label portLabel = new Label(webAppGroup, SWT.NONE);
+ portLabel.setText("Port:");
+
+ portText = new Text(webAppGroup, SWT.BORDER);
+ portText.setText("8080");
+ portText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ portText.addListener(SWT.Modify, new Listener() {
+ public void handleEvent(Event event) {
+ handleTextEvent(PORT, portText);
+ }
+ });
+
+ return webAppGroup;
+ }
+
+ /**
+ * Gets the property data.
+ *
+ * @return the property data
+ */
+ protected PropertyData[] getPropertyData() {
+ if (PROPERTIES == null) {
+ PROPERTIES = new PropertyData[] {
+ new PropertyData(
+ IProductConstants.PREFERENCE_CUSTOMIZATION,
+ "Preference Customization:", "", String.class, true),
+ new PropertyData(CLEAR_PERSISTED_STATE,
+ "Enable development mode for application model",
+ "true", Boolean.class, true,
+ "Add option -clearPersistedState to the Product's Program Arguments") }; // plugin_customization.ini
+ }
+ return PROPERTIES;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean)
+ */
+ @Override
+ public void setVisible(boolean visible) {
+ if (visible && PROPERTIES == null) {
+ String contextPath = pluginData.getId().replace('.', '-');
+ contextPathText.setText(contextPath);
+
+ for (PropertyData property : getPropertyData()) {
+ createPropertyItem(propertyGroup, property);
+ }
+ propertyGroup.getParent().layout();
+ }
+ super.setVisible(visible);
+ }
+
+ /**
+ * Gets the data.
+ *
+ * @return the data
+ */
+ public Map<String, String> getData() {
+ if (PROPERTIES == null) {
+ for (PropertyData property : getPropertyData()) {
+ data.put(property.getName(), property.getValue());
+ }
+ }
+
+ data.put(PRODUCT_NAME, pluginData.getId());
+ data.put(CONTEXT_PATH, contextPathText.getText());
+ data.put(PORT, portText.getText());
+
+ Map<String, String> map = new HashMap<String, String>();
+ map.putAll(data);
+ return map;
+ }
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/PluginContentPage.java b/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/PluginContentPage.java
new file mode 100644
index 0000000..26467c5
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/PluginContentPage.java
@@ -0,0 +1,432 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2012 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ * Soyatec - port to e4
+ * Lars Vogel, vogella GmbH - ongoing enhancements
+ *******************************************************************************/
+package org.eclipse.osbp.vaaclipse.wizards.project;
+
+import java.util.Locale;
+import java.util.TreeSet;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.core.JavaConventions;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.pde.internal.core.util.PDEJavaHelper;
+import org.eclipse.pde.internal.core.util.VMUtil;
+import org.eclipse.pde.internal.ui.IHelpContextIds;
+import org.eclipse.pde.internal.ui.PDEUIMessages;
+import org.eclipse.pde.internal.ui.SWTFactory;
+import org.eclipse.pde.internal.ui.wizards.IProjectProvider;
+import org.eclipse.pde.internal.ui.wizards.plugin.AbstractFieldData;
+import org.eclipse.pde.internal.ui.wizards.plugin.ContentPage;
+import org.eclipse.pde.internal.ui.wizards.plugin.NewProjectCreationPage;
+import org.eclipse.pde.internal.ui.wizards.plugin.PluginFieldData;
+import org.eclipse.pde.internal.ui.wizards.plugin.TemplateListSelectionPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.PreferencesUtil;
+import org.osgi.framework.Version;
+
+/**
+ * Content wizard page for the New Plugin Project wizard (page 2).
+ */
+public class PluginContentPage extends ContentPage {
+
+ /** The class text. */
+ private Text fClassText;
+
+ /** The generate activator. */
+ protected Button fGenerateActivator;
+
+ /** The UI plugin. */
+ protected Button fUIPlugin;
+
+ /** The class label. */
+ private Label fClassLabel;
+
+ /** The EE label. */
+ private Label fEELabel;
+
+ /** The exe env button. */
+ private Button fExeEnvButton;
+
+ /** The EE choice. */
+ private Combo fEEChoice;
+
+ /** Button to enable API analysis for the project during project creation. */
+ private Button fApiAnalysisButton;
+
+ /** Dialog settings constants. */
+ private final static String S_GENERATE_ACTIVATOR = "generateActivator"; //$NON-NLS-1$
+
+ /** The Constant S_UI_PLUGIN. */
+ private final static String S_UI_PLUGIN = "uiPlugin"; //$NON-NLS-1$
+
+ /** The Constant S_RCP_PLUGIN. */
+ private final static String S_RCP_PLUGIN = "rcpPlugin"; //$NON-NLS-1$
+
+ /** The Constant S_API_ANALYSIS. */
+ private final static String S_API_ANALYSIS = "apiAnalysis"; //$NON-NLS-1$
+
+ /** The Constant P_CLASS_GROUP. */
+ protected final static int P_CLASS_GROUP = 2;
+
+ /** The Constant NO_EXECUTION_ENVIRONMENT. */
+ private final static String NO_EXECUTION_ENVIRONMENT = PDEUIMessages.PluginContentPage_noEE;
+
+ /** default tText modify listener. */
+ private ModifyListener classListener = new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ if (fInitialized)
+ fChangedGroups |= P_CLASS_GROUP;
+ validatePage();
+ }
+ };
+
+ /**
+ * Constructor.
+ *
+ * @param pageName
+ * the page name
+ * @param provider
+ * the provider
+ * @param page
+ * the page
+ * @param data
+ * the data
+ */
+ public PluginContentPage(String pageName, IProjectProvider provider, NewProjectCreationPage page, AbstractFieldData data) {
+ super(pageName, provider, page, data);
+ setTitle(PDEUIMessages.ContentPage_title);
+ setDescription(PDEUIMessages.ContentPage_desc);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.ui.wizards.plugin.ContentPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ public void createControl(Composite parent) {
+ Composite container = new Composite(parent, SWT.NONE);
+ container.setLayout(new GridLayout());
+
+ createPluginPropertiesGroup(container);
+ createPluginClassGroup(container);
+
+ Dialog.applyDialogFont(container);
+ setControl(container);
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.NEW_PROJECT_REQUIRED_DATA);
+ }
+
+ /**
+ * Creates all of the plugin properties widgets.
+ *
+ * @param container
+ * the container
+ */
+ private void createPluginPropertiesGroup(Composite container) {
+ Group propertiesGroup = SWTFactory.createGroup(container, PDEUIMessages.ContentPage_pGroup, 3, 1, GridData.FILL_HORIZONTAL);
+
+ Label label = new Label(propertiesGroup, SWT.NONE);
+ label.setText(PDEUIMessages.ContentPage_pid);
+ fIdText = createText(propertiesGroup, propertiesListener, 2);
+
+ label = new Label(propertiesGroup, SWT.NONE);
+ label.setText(PDEUIMessages.ContentPage_pversion);
+ fVersionText = createText(propertiesGroup, propertiesListener, 2);
+
+ label = new Label(propertiesGroup, SWT.NONE);
+ label.setText(PDEUIMessages.ContentPage_pname);
+ fNameText = createText(propertiesGroup, propertiesListener, 2);
+
+ label = new Label(propertiesGroup, SWT.NONE);
+ label.setText(PDEUIMessages.ContentPage_pprovider);
+ fProviderCombo = createProviderCombo(propertiesGroup, propertiesListener, 2);
+
+ createExecutionEnvironmentControls(propertiesGroup);
+ }
+
+ /**
+ * Creates all of the EE widgets.
+ *
+ * @param container
+ * the container
+ */
+ private void createExecutionEnvironmentControls(Composite container) {
+ // Create label
+ fEELabel = new Label(container, SWT.NONE);
+ fEELabel.setText(PDEUIMessages.NewProjectCreationPage_executionEnvironments_label);
+
+ // Create combo
+ fEEChoice = new Combo(container, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER);
+ fEEChoice.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ // Gather EEs
+ IExecutionEnvironment[] exeEnvs = VMUtil.getExecutionEnvironments();
+ TreeSet availableEEs = new TreeSet();
+ for (int i = 0; i < exeEnvs.length; i++) {
+ availableEEs.add(exeEnvs[i].getId());
+ }
+ availableEEs.add(NO_EXECUTION_ENVIRONMENT);
+
+ // Set data
+ fEEChoice.setItems((String[]) availableEEs.toArray(new String[availableEEs.size() - 1]));
+ fEEChoice.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ validatePage();
+ }
+ });
+
+ // Set default EE based on strict match to default VM
+ IVMInstall defaultVM = JavaRuntime.getDefaultVMInstall();
+ String[] EEChoices = fEEChoice.getItems();
+ for (int i = 0; i < EEChoices.length; i++) {
+ if (!EEChoices[i].equals(NO_EXECUTION_ENVIRONMENT)) {
+ if (VMUtil.getExecutionEnvironment(EEChoices[i]).isStrictlyCompatible(defaultVM)) {
+ fEEChoice.select(i);
+ break;
+ }
+ }
+ }
+
+ // Create button
+ fExeEnvButton = new Button(container, SWT.PUSH);
+ fExeEnvButton.setLayoutData(new GridData());
+ fExeEnvButton.setText(PDEUIMessages.NewProjectCreationPage_environmentsButton);
+ fExeEnvButton.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(Event event) {
+ PreferencesUtil.createPreferenceDialogOn(getShell(), "org.eclipse.jdt.debug.ui.jreProfiles", //$NON-NLS-1$
+ new String[] {"org.eclipse.jdt.debug.ui.jreProfiles"}, null).open(); //$NON-NLS-1$
+ }
+ });
+ }
+
+ /**
+ * Creates all of the plugin options widgets.
+ *
+ * @param container
+ * the container
+ */
+ protected void createPluginClassGroup(Composite container) {
+ Group classGroup = SWTFactory.createGroup(container, PDEUIMessages.ContentPage_pClassGroup, 2, 1, GridData.FILL_HORIZONTAL);
+
+ IDialogSettings settings = getDialogSettings();
+
+ fGenerateActivator = SWTFactory.createCheckButton(classGroup, PDEUIMessages.ContentPage_generate, null, false, 2);
+ fGenerateActivator.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ fClassLabel.setEnabled(fGenerateActivator.getSelection());
+ fClassText.setEnabled(fGenerateActivator.getSelection());
+ updateData();
+ validatePage();
+ }
+ });
+
+ fClassLabel = new Label(classGroup, SWT.NONE);
+ fClassLabel.setText(PDEUIMessages.ContentPage_classname);
+ GridData gd = new GridData();
+ gd.horizontalIndent = 20;
+ fClassLabel.setLayoutData(gd);
+ fClassText = createText(classGroup, classListener);
+
+ fUIPlugin = SWTFactory.createCheckButton(classGroup, PDEUIMessages.ContentPage_uicontribution, null, (settings != null) ? !settings.getBoolean(S_UI_PLUGIN) : true, 2);
+ fUIPlugin.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ updateData();
+ validatePage();
+ }
+ });
+
+ fApiAnalysisButton = SWTFactory.createCheckButton(classGroup, PDEUIMessages.PluginContentPage_enable_api_analysis, null, false, 2);
+ fApiAnalysisButton.setSelection((settings != null) ? settings.getBoolean(S_API_ANALYSIS) : false);
+ fApiAnalysisButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ updateData();
+ validatePage();
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.ui.wizards.plugin.ContentPage#updateData()
+ */
+ public void updateData() {
+ super.updateData();
+ PluginFieldData data = (PluginFieldData) fData;
+ data.setClassname(fClassText.getText().trim());
+ data.setUIPlugin(fUIPlugin.getSelection());
+ data.setDoGenerateClass(fGenerateActivator.getSelection());
+ data.setRCPApplicationPlugin(!fData.isSimple() && !isPureOSGi());
+ data.setEnableAPITooling(fApiAnalysisButton.getSelection());
+ if (fEEChoice.isEnabled() && !fEEChoice.getText().equals(NO_EXECUTION_ENVIRONMENT)) {
+ fData.setExecutionEnvironment(fEEChoice.getText().trim());
+ } else {
+ fData.setExecutionEnvironment(null);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.ui.wizards.plugin.ContentPage#setVisible(boolean)
+ */
+ public void setVisible(boolean visible) {
+ if (visible) {
+ fMainPage.updateData();
+
+ boolean wasGenActivatorEnabled = fGenerateActivator.isEnabled();
+ fGenerateActivator.setEnabled(!fData.isSimple());
+ // if fGenerateActivator is disabled, set selection to false
+ if (!fGenerateActivator.isEnabled()) {
+ fGenerateActivator.setSelection(false);
+ }
+ // if the fGenerateActivator was disabled and is now enabled, then set the selection to true
+ else if (!wasGenActivatorEnabled) {
+ fGenerateActivator.setSelection(true);
+ }
+ fClassLabel.setEnabled(!fData.isSimple() && fGenerateActivator.getSelection());
+ fClassText.setEnabled(!fData.isSimple() && fGenerateActivator.getSelection());
+ boolean wasUIPluginEnabled = fUIPlugin.isEnabled();
+ fUIPlugin.setEnabled(!fData.isSimple() && !isPureOSGi());
+ // if fUIPlugin is disabled, set selection to false
+ if (!fUIPlugin.isEnabled()) {
+ fUIPlugin.setSelection(false);
+ }
+ // if the fUIPlugin was disabled and is now enabled, then set the selection to true
+ else if (!wasUIPluginEnabled) {
+ fUIPlugin.setSelection(true);
+ }
+
+ // plugin class group
+ if (((fChangedGroups & P_CLASS_GROUP) == 0)) {
+ int oldfChanged = fChangedGroups;
+ fClassText.setText(computeId().replaceAll("-", "_").toLowerCase(Locale.ENGLISH) + ".Activator"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ fChangedGroups = oldfChanged;
+ }
+
+ boolean allowEESelection = !fData.isSimple() && fData.hasBundleStructure();
+ fEELabel.setEnabled(allowEESelection);
+ fEEChoice.setEnabled(allowEESelection);
+ fExeEnvButton.setEnabled(allowEESelection);
+ // API tooling only works for osgi bundles with java natures
+ fApiAnalysisButton.setEnabled(allowEESelection);
+ if (allowEESelection && getDialogSettings() != null) {
+ fApiAnalysisButton.setSelection(getDialogSettings().getBoolean(S_API_ANALYSIS));
+ } else {
+ fApiAnalysisButton.setSelection(false);
+ }
+ }
+ super.setVisible(visible);
+ }
+
+ /**
+ * Checks if is pure os gi.
+ *
+ * @return if the field data is using the OSGi framework
+ */
+ private boolean isPureOSGi() {
+ return ((PluginFieldData) fData).getOSGiFramework() != null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.ui.wizards.plugin.ContentPage#validatePage()
+ */
+ protected void validatePage() {
+ String errorMessage = validateProperties();
+ if (errorMessage == null && fGenerateActivator.getSelection()) {
+ IStatus status = JavaConventions.validateJavaTypeName(fClassText.getText().trim(), PDEJavaHelper.getJavaSourceLevel(null), PDEJavaHelper.getJavaComplianceLevel(null));
+ if (status.getSeverity() == IStatus.ERROR) {
+ errorMessage = status.getMessage();
+ } else if (status.getSeverity() == IStatus.WARNING) {
+ setMessage(status.getMessage(), IMessageProvider.WARNING);
+ }
+ }
+ if (errorMessage == null) {
+ String eeid = fEEChoice.getText();
+ if (fEEChoice.isEnabled()) {
+ IExecutionEnvironment ee = VMUtil.getExecutionEnvironment(eeid);
+ if (ee != null && ee.getCompatibleVMs().length == 0) {
+ errorMessage = PDEUIMessages.NewProjectCreationPage_invalidEE;
+ }
+ }
+ }
+ setErrorMessage(errorMessage);
+ setPageComplete(errorMessage == null);
+ }
+
+ /**
+ * Saves the current state of widgets of interest in the dialog settings for
+ * the wizard.
+ *
+ * @param settings
+ * the settings
+ */
+ public void saveSettings(IDialogSettings settings) {
+ if (fGenerateActivator.isEnabled()) {
+ settings.put(S_GENERATE_ACTIVATOR, !fGenerateActivator.getSelection());
+ }
+ if (fUIPlugin.isEnabled()) {
+ settings.put(S_UI_PLUGIN, !fUIPlugin.getSelection());
+ }
+ if (fApiAnalysisButton.isEnabled()) {
+ settings.put(S_API_ANALYSIS, fApiAnalysisButton.getSelection());
+ }
+ settings.put(S_RCP_PLUGIN, true);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.wizard.WizardPage#canFlipToNextPage()
+ */
+ public boolean canFlipToNextPage() {
+ if (getNextPage() instanceof TemplateListSelectionPage) {
+ TemplateListSelectionPage templatePage = (TemplateListSelectionPage) getNextPage();
+ return super.canFlipToNextPage() && templatePage.isAnyTemplateAvailable();
+ }
+ return super.canFlipToNextPage();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.ui.wizards.plugin.ContentPage#computeId()
+ */
+ protected String computeId() {
+ String id = super.computeId();
+ // In addition to removed illegal characters, the xmi model does not recognize plug-in uris if they end in a version number
+ // See PlatformURLPluginConnection.parse()
+ int underScore = id.lastIndexOf('_');
+ Version version;
+ while (underScore >= 0) {
+ try {
+ version = Version.parseVersion(id.substring(underScore + 1));
+ // name cannot end with a valid version, remove it
+ id = id.substring(0, underScore);
+ } catch (IllegalArgumentException iae) {
+ // valid name so far, continue to next underscore
+ }
+ underScore = id.lastIndexOf('_', underScore - 1);
+
+ }
+ return id;
+ }
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/ResourceLocator.java b/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/ResourceLocator.java
new file mode 100644
index 0000000..ffded78
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/ResourceLocator.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.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:
+ * Soyatec - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osbp.vaaclipse.wizards.project;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.osbp.vaaclipse.wizards.ToolsPlugin;
+
+/**
+ * The Class ResourceLocator.
+ */
+public class ResourceLocator {
+
+ /** The Constant TEMPLATE_FOLDER. */
+ private static final String TEMPLATE_FOLDER = "templates";
+
+ /** The instance. */
+ private static ResourceLocator instance = new ResourceLocator();
+
+ /**
+ * Instantiates a new resource locator.
+ */
+ private ResourceLocator() {
+ }
+
+ /**
+ * Gets the single instance of ResourceLocator.
+ *
+ * @return single instance of ResourceLocator
+ */
+ public static ResourceLocator getInstance() {
+ return instance;
+ }
+
+ /**
+ * Gets the project template files.
+ *
+ * @param folder
+ * the folder
+ * @return the project template files
+ * @throws IOException
+ * Signals that an I/O exception has occurred.
+ */
+ public static URL getProjectTemplateFiles(String folder)
+ throws IOException {
+ Plugin plugin = getResorucePlugin();
+ URL installURL = plugin.getBundle().getEntry(
+ "/" + TEMPLATE_FOLDER + "/" + folder);
+ // FileLocator.toFileURL(installURL);
+ URL corePath = FileLocator.resolve(installURL);
+ return corePath;
+ }
+
+ /**
+ * Gets the file.
+ *
+ * @param relativePath
+ * the relative path
+ * @return the file
+ * @throws IOException
+ * Signals that an I/O exception has occurred.
+ */
+ public static URL getFile(String relativePath) throws IOException {
+ Plugin plugin = getResorucePlugin();
+ URL installURL = plugin.getBundle().getEntry(relativePath);
+ URL corePath = FileLocator.resolve(installURL);
+ return corePath;
+ }
+
+ /**
+ * Gets the resoruce plugin.
+ *
+ * @return the resoruce plugin
+ */
+ public static Plugin getResorucePlugin() {
+ return ToolsPlugin.getDefault();
+ }
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/TemplateOperation.java b/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/TemplateOperation.java
new file mode 100644
index 0000000..1e34bed
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/src/org/eclipse/osbp/vaaclipse/wizards/project/TemplateOperation.java
@@ -0,0 +1,540 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.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:
+ * Soyatec - initial API and implementation
+ * Sopot Cela - ongoing enhancements
+ *******************************************************************************/
+package org.eclipse.osbp.vaaclipse.wizards.project;
+
+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.lang.reflect.InvocationTargetException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.pde.internal.ui.PDEUIMessages;
+import org.eclipse.pde.ui.templates.IVariableProvider;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.osbp.vaaclipse.wizards.ToolsPlugin;
+
+/**
+ * The Class TemplateOperation.
+ */
+public class TemplateOperation extends WorkspaceModifyOperation implements
+ IVariableProvider {
+
+ /** The template directory. */
+ private final URL templateDirectory;
+
+ /** The target. */
+ private final IContainer target;
+
+ /** The keys. */
+ private final Map<String, String> keys;
+
+ /** The binary extentions. */
+ private final Set<String> binaryExtentions;
+
+ /** The is minimalist. */
+ private boolean isMinimalist;
+
+ /**
+ * Instantiates a new template operation.
+ *
+ * @param source
+ * the source
+ * @param target
+ * the target
+ * @param keys
+ * the keys
+ * @param binaryExtentions
+ * the binary extentions
+ * @param justProduct
+ * the just product
+ */
+ public TemplateOperation(URL source, IContainer target,
+ Map<String, String> keys, Set<String> binaryExtentions, boolean justProduct) {
+ templateDirectory = source;
+ this.binaryExtentions = binaryExtentions;
+ this.target = target;
+ this.keys = keys;
+ this.isMinimalist = justProduct;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.actions.WorkspaceModifyOperation#execute(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ protected void execute(IProgressMonitor monitor) throws CoreException,
+ InvocationTargetException, InterruptedException {
+ monitor.setTaskName(PDEUIMessages.AbstractTemplateSection_generating);
+
+ if ("jar".equals(templateDirectory.getProtocol())) { //$NON-NLS-1$
+ String file = templateDirectory.getFile();
+ int exclamation = file.indexOf('!');
+ if (exclamation < 0)
+ return;
+ URL fileUrl = null;
+ try {
+ fileUrl = new URL(file.substring(0, exclamation));
+ } catch (MalformedURLException mue) {
+ ToolsPlugin.logError(mue);
+ return;
+ }
+ File pluginJar = new File(fileUrl.getFile());
+ if (!pluginJar.exists())
+ return;
+ String templateDirectory = file.substring(exclamation + 1); // "/some/path/"
+ IPath path = new Path(templateDirectory);
+ ZipFile zipFile = null;
+ try {
+ zipFile = new ZipFile(pluginJar);
+ generateFiles(zipFile, path, target, monitor);
+ } catch (ZipException ze) {
+ } catch (IOException ioe) {
+ } finally {
+ if (zipFile != null) {
+ try {
+ zipFile.close();
+ } catch (IOException e) {
+ }
+ }
+ }
+ } else if ("file".equals(templateDirectory.getProtocol())) { //$NON-NLS-1$
+ File directory = new File(templateDirectory.getFile());
+ if (!directory.exists())
+ return;
+ generateFiles(directory, target, true, monitor);
+ }
+ }
+
+ /**
+ * Generate files.
+ *
+ * @param src
+ * the src
+ * @param dst
+ * the dst
+ * @param firstLevel
+ * the first level
+ * @param monitor
+ * the monitor
+ * @throws CoreException
+ * the core exception
+ */
+ private void generateFiles(File src, IContainer dst, boolean firstLevel,
+ IProgressMonitor monitor) throws CoreException {
+ if ((!firstLevel)&&(isMinimalist))
+ return;
+ File[] members = src.listFiles();
+
+ for (int i = 0; i < members.length; i++) {
+ File member = members[i];
+ String name = member.getName();
+ if (member.isDirectory()) {
+ if (".svn".equals(name) || "cvs".equalsIgnoreCase(name))
+ continue;
+ IContainer dstContainer = null;
+
+ if (dstContainer == null) {
+ String folderName = getProcessedString(name, name);
+ dstContainer = dst.getFolder(new Path(folderName));
+ }
+ if (dstContainer != null && !dstContainer.exists())
+ ((IFolder) dstContainer).create(true, true, monitor);
+
+ generateFiles(member, dstContainer, false, monitor);
+ } else {
+ InputStream in = null;
+ try {
+ in = new FileInputStream(member);
+ copyFile(name, in, dst, monitor);
+ } catch (IOException ioe) {
+ } finally {
+ if (in != null)
+ try {
+ in.close();
+ } catch (IOException ioe2) {
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Generate files.
+ *
+ * @param zipFile
+ * the zip file
+ * @param path
+ * the path
+ * @param dst
+ * the dst
+ * @param monitor
+ * the monitor
+ * @throws CoreException
+ * the core exception
+ */
+ private void generateFiles(ZipFile zipFile, IPath path, IContainer dst,
+ IProgressMonitor monitor) throws CoreException {
+ int pathLength = path.segmentCount();
+ // Immidiate children
+ Map childZipEntries = new HashMap(); // "dir/" or "dir/file.java"
+
+ for (Enumeration zipEntries = zipFile.entries(); zipEntries
+ .hasMoreElements();) {
+ ZipEntry zipEntry = (ZipEntry) zipEntries.nextElement();
+ IPath entryPath = new Path(zipEntry.getName());
+ if (entryPath.segmentCount() <= pathLength) {
+ // ancestor or current directory
+ continue;
+ }
+ if (!path.isPrefixOf(entryPath)) {
+ // not a descendant
+ continue;
+ }
+ if (entryPath.segmentCount() == pathLength + 1) {
+ childZipEntries.put(zipEntry.getName(), zipEntry);
+ } else {
+ String name = entryPath.uptoSegment(pathLength + 1)
+ .addTrailingSeparator().toString();
+ if (!childZipEntries.containsKey(name)) {
+ ZipEntry dirEntry = new ZipEntry(name);
+ childZipEntries.put(name, dirEntry);
+ }
+ }
+ }
+
+ for (Iterator it = childZipEntries.values().iterator(); it.hasNext();) {
+ ZipEntry zipEnry = (ZipEntry) it.next();
+ String name = new Path(zipEnry.getName()).lastSegment().toString();
+ if (zipEnry.isDirectory()) {
+ IContainer dstContainer = null;
+
+ if (dstContainer == null) {
+ String folderName = getProcessedString(name, name);
+ dstContainer = dst.getFolder(new Path(folderName));
+ }
+ if (dstContainer != null && !dstContainer.exists())
+ ((IFolder) dstContainer).create(true, true, monitor);
+ generateFiles(zipFile, path.append(name), dstContainer, monitor);
+ } else {
+ InputStream in = null;
+ try {
+ in = zipFile.getInputStream(zipEnry);
+ copyFile(name, in, dst, monitor);
+ } catch (IOException ioe) {
+ } finally {
+ if (in != null)
+ try {
+ in.close();
+ } catch (IOException ioe2) {
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Copy file.
+ *
+ * @param fileName
+ * the file name
+ * @param input
+ * the input
+ * @param dst
+ * the dst
+ * @param monitor
+ * the monitor
+ * @throws CoreException
+ * the core exception
+ */
+ private void copyFile(String fileName, InputStream input, IContainer dst,
+ IProgressMonitor monitor) throws CoreException {
+ String targetFileName = getProcessedString(fileName, fileName);
+
+ monitor.subTask(targetFileName);
+ IFile dstFile = dst.getFile(new Path(targetFileName));
+
+ try {
+ InputStream stream = isBinary(fileName) ? input
+ : getProcessedStream(fileName, input);
+ if (dstFile.exists()) {
+ dstFile.setContents(stream, true, true, monitor);
+ } else {
+ dstFile.create(stream, true, monitor);
+ }
+ stream.close();
+
+ } catch (IOException e) {
+ }
+ }
+
+ /**
+ * Copy file.
+ *
+ * @param fileName
+ * the file name
+ * @param input
+ * the input
+ * @param dst
+ * the dst
+ * @param destPath
+ * the dest path
+ * @param monitor
+ * the monitor
+ * @throws CoreException
+ * the core exception
+ */
+ protected void copyFile(String fileName, InputStream input, IContainer dst,
+ final String destPath, IProgressMonitor monitor)
+ throws CoreException {
+ String targetFileName = null;
+ if (destPath == null) {
+ targetFileName = getProcessedString(fileName, fileName);
+ } else {
+ targetFileName = destPath;
+ }
+
+ monitor.subTask(targetFileName);
+ IFile dstFile = dst.getFile(new Path(targetFileName));
+
+ try {
+ InputStream stream = isBinary(fileName) ? input
+ : getProcessedStream(fileName, input);
+ if (dstFile.exists()) {
+ dstFile.setContents(stream, true, true, monitor);
+ } else {
+ dstFile.create(stream, true, monitor);
+ }
+ stream.close();
+
+ } catch (IOException e) {
+ }
+ }
+
+ /**
+ * Copy file.
+ *
+ * @param fileName
+ * the file name
+ * @param input
+ * the input
+ * @param dst
+ * the dst
+ * @param basePath
+ * the base path
+ * @param destName
+ * the dest name
+ * @param monitor
+ * the monitor
+ * @throws CoreException
+ * the core exception
+ */
+ public void copyFile(String fileName, InputStream input, IContainer dst,
+ final String basePath, final String destName,
+ IProgressMonitor monitor) throws CoreException {
+ if (basePath == null || basePath.equals("")) {
+ copyFile(fileName, input, dst, monitor);
+ }
+
+ String targetFileName = destName == null ? getProcessedString(fileName,
+ fileName) : destName;
+
+ monitor.subTask(targetFileName);
+ IFile dstFile = dst.getFile(new Path(basePath + targetFileName));
+
+ try {
+ InputStream stream = isBinary(fileName) ? input
+ : getProcessedStream(fileName, input);
+ if (dstFile.exists()) {
+ dstFile.setContents(stream, true, true, monitor);
+ } else {
+ dstFile.create(stream, true, monitor);
+ }
+ stream.close();
+
+ } catch (IOException e) {
+ }
+ }
+
+ /**
+ * Checks if is binary.
+ *
+ * @param fileName
+ * the file name
+ * @return true, if is binary
+ */
+ private boolean isBinary(String fileName) {
+ if (binaryExtentions == null) {
+ return false;
+ }
+
+ String ext = getfileExtention(fileName);
+ if (ext == null)
+ return false;
+ return binaryExtentions.contains(ext);
+ }
+
+ /**
+ * Gets the file extention.
+ *
+ * @param name
+ * the name
+ * @return the file extention
+ */
+ private String getfileExtention(String name) {
+ int indexOf = name.lastIndexOf('.');
+ if (indexOf == -1)
+ return null;
+ return name.substring(indexOf);
+ }
+
+ /**
+ * Gets the processed stream.
+ *
+ * @param fileName
+ * the file name
+ * @param stream
+ * the stream
+ * @return the processed stream
+ * @throws IOException
+ * Signals that an I/O exception has occurred.
+ * @throws CoreException
+ * the core exception
+ */
+ private InputStream getProcessedStream(String fileName, InputStream stream)
+ throws IOException, CoreException {
+ InputStreamReader reader = new InputStreamReader(stream);
+ int bufsize = 1024;
+ char[] cbuffer = new char[bufsize];
+ int read = 0;
+ StringBuffer keyBuffer = new StringBuffer();
+ StringBuffer outBuffer = new StringBuffer();
+
+ boolean replacementMode = false;
+ boolean almostReplacementMode = false;
+ boolean escape = false;
+ while (read != -1) {
+ read = reader.read(cbuffer);
+ for (int i = 0; i < read; i++) {
+ char c = cbuffer[i];
+
+ if (escape) {
+ StringBuffer buf = outBuffer;
+ buf.append(c);
+ escape = false;
+ continue;
+ }
+
+ if (c == '@') {
+ if (replacementMode && almostReplacementMode) {
+ almostReplacementMode = false;
+ } else if (replacementMode) {
+ replacementMode = false;
+ String key = keyBuffer.toString();
+ String value = key.length() == 0 ? "@@" //$NON-NLS-1$
+ : getReplacementString(key);
+ outBuffer.append(value);
+ keyBuffer.delete(0, keyBuffer.length());
+ } else if (almostReplacementMode) {
+ replacementMode = true;
+ } else {
+ almostReplacementMode = true;
+ }
+ } else {
+ if (replacementMode)
+ keyBuffer.append(c);
+ else {
+ if (almostReplacementMode)
+ outBuffer.append('@');
+ outBuffer.append(c);
+ almostReplacementMode = false;
+ }
+ }
+ }
+ }
+ return new ByteArrayInputStream(outBuffer.toString().getBytes());
+ // return new
+ // ByteArrayInputStream(outBuffer.toString().getBytes(project.
+ // getDefaultCharset()));
+ }
+
+ /**
+ * Gets the processed string.
+ *
+ * @param fileName
+ * the file name
+ * @param source
+ * the source
+ * @return the processed string
+ */
+ private String getProcessedString(String fileName, String source) {
+ if (source.indexOf('$') == -1)
+ return source;
+ int loc = -1;
+ StringBuffer buffer = new StringBuffer();
+ boolean replacementMode = false;
+ for (int i = 0; i < source.length(); i++) {
+ char c = source.charAt(i);
+ if (c == '$') {
+ if (replacementMode) {
+ String key = source.substring(loc, i);
+ String value = key.length() == 0 ? "$" : getReplacementString(key); //$NON-NLS-1$
+ buffer.append(value);
+ replacementMode = false;
+ } else {
+ replacementMode = true;
+ loc = i + 1;
+ continue;
+ }
+ } else if (!replacementMode)
+ buffer.append(c);
+ }
+ return buffer.toString();
+ }
+
+ /**
+ * Gets the replacement string.
+ *
+ * @param key
+ * the key
+ * @return the replacement string
+ */
+ public String getReplacementString(String key) {
+ String result = keys.get(key);
+ return result != null ? result : key;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.ui.templates.IVariableProvider#getValue(java.lang.String)
+ */
+ public Object getValue(String variable) {
+ return getReplacementString(variable);
+ }
+
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/$projectName$.product b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/$projectName$.product
new file mode 100644
index 0000000..4005735
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/$projectName$.product
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="@@projectName@@.product" id="@@projectName@@.product" application="org.eclipse.osbp.vaaclipse.app.application" version="1.0.0.qualifier" useFeatures="false" includeLaunchers="true">
+
+ <configIni use="default">
+ </configIni>
+
+ <launcherArgs>
+ <programArgs>@@programArgs@@</programArgs>
+ <vmArgs>-Dorg.eclipse.equinox.http.jetty.context.path=/@@contextPath@@ -Dorg.osgi.service.http.port=@@port@@</vmArgs>
+ <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
+ </launcherArgs>
+
+ <windowImages/>
+
+ <launcher>
+ <solaris/>
+ <win useIco="false">
+ <bmp/>
+ </win>
+ </launcher>
+
+ <vm>
+ </vm>
+
+ <plugins>
+ <plugin id="com.ibm.icu"/>
+ <plugin id="com.vaadin"/>
+ <plugin id="javax.annotation"/>
+ <plugin id="javax.inject"/>
+ <plugin id="javax.servlet"/>
+ <plugin id="javax.xml"/>
+ <plugin id="org.eclipse.core.commands"/>
+ <plugin id="org.eclipse.core.contenttype"/>
+ <plugin id="org.eclipse.core.databinding"/>
+ <plugin id="org.eclipse.core.databinding.beans"/>
+ <plugin id="org.eclipse.core.databinding.observable"/>
+ <plugin id="org.eclipse.core.databinding.property"/>
+ <plugin id="org.eclipse.core.expressions"/>
+ <plugin id="org.eclipse.core.filesystem"/>
+ <plugin id="org.eclipse.core.filesystem.aix.ppc" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.hpux.ia64_32" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.linux.ppc" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.linux.x86" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.linux.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.macosx" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.solaris.sparc" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.win32.x86" fragment="true"/>
+ <plugin id="org.eclipse.core.filesystem.win32.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.core.jobs"/>
+ <plugin id="org.eclipse.core.resources"/>
+ <plugin id="org.eclipse.core.resources.win32.x86" fragment="true"/>
+ <plugin id="org.eclipse.core.runtime"/>
+ <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
+ <plugin id="org.eclipse.core.variables"/>
+ <plugin id="org.eclipse.e4.core.commands"/>
+ <plugin id="org.eclipse.e4.core.contexts"/>
+ <plugin id="org.eclipse.e4.core.di"/>
+ <plugin id="org.eclipse.e4.core.di.extensions"/>
+ <plugin id="org.eclipse.e4.core.services"/>
+ <plugin id="org.eclipse.e4.ui.di"/>
+ <plugin id="org.eclipse.e4.ui.model.workbench"/>
+ <plugin id="org.eclipse.e4.ui.services"/>
+ <plugin id="org.eclipse.e4.ui.workbench"/>
+ <plugin id="org.eclipse.emf.common"/>
+ <plugin id="org.eclipse.emf.databinding"/>
+ <plugin id="org.eclipse.emf.ecore"/>
+ <plugin id="org.eclipse.emf.ecore.change"/>
+ <plugin id="org.eclipse.emf.ecore.xmi"/>
+ <plugin id="org.eclipse.equinox.app"/>
+ <plugin id="org.eclipse.equinox.common"/>
+ <plugin id="org.eclipse.equinox.concurrent"/>
+ <plugin id="org.eclipse.equinox.ds"/>
+ <plugin id="org.eclipse.equinox.event"/>
+ <plugin id="org.eclipse.equinox.http.jetty"/>
+ <plugin id="org.eclipse.equinox.http.registry"/>
+ <plugin id="org.eclipse.equinox.http.servlet"/>
+ <plugin id="org.eclipse.equinox.preferences"/>
+ <plugin id="org.eclipse.equinox.registry"/>
+ <plugin id="org.eclipse.equinox.util"/>
+ <plugin id="org.eclipse.jetty.continuation"/>
+ <plugin id="org.eclipse.jetty.http"/>
+ <plugin id="org.eclipse.jetty.io"/>
+ <plugin id="org.eclipse.jetty.security"/>
+ <plugin id="org.eclipse.jetty.server"/>
+ <plugin id="org.eclipse.jetty.servlet"/>
+ <plugin id="org.eclipse.jetty.util"/>
+ <plugin id="org.eclipse.osgi"/>
+ <plugin id="org.eclipse.osgi.services"/>
+ <plugin id="org.eclipse.osbp.commons"/>
+ <plugin id="org.eclipse.osbp.e4.injector.objectsuppliers"/>
+ <plugin id="org.eclipse.osbp.e4extension"/>
+ <plugin id="org.eclipse.osbp.e4modelextension"/>
+ <plugin id="org.eclipse.osbp.vaaclipse.api"/>
+ <plugin id="org.eclipse.osbp.vaaclipse.app"/>
+ <plugin id="org.eclipse.osbp.vaaclipse.behaviour"/>
+ <plugin id="org.eclipse.osbp.vaaclipse.contributions"/>
+ <plugin id="org.eclipse.osbp.vaaclipse.presentation"/>
+ <plugin id="org.eclipse.osbp.vaaclipse.publicapi"/>
+ <plugin id="org.eclipse.osbp.vaaclipse.resources" fragment="true"/>
+ <plugin id="org.eclipse.osbp.vaaclipse.theme"/>
+ <plugin id="org.eclipse.osbp.vaaclipse.util"/>
+ <plugin id="org.eclipse.osbp.vaaclipse.vaadinaddons"/>
+ <plugin id="@@projectName@@"/>
+ <plugin id="org.eclipse.osbp.vaadin"/>
+ <plugin id="org.eclipse.osbp.vaadin.osgi.staticres"/>
+ </plugins>
+
+ <configurations>
+ <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="0" />
+ <plugin id="org.eclipse.e4.ui.services" autoStart="true" startLevel="1" />
+ <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />
+ <plugin id="org.eclipse.equinox.ds" autoStart="true" startLevel="1" />
+ <plugin id="org.eclipse.equinox.http.jetty" autoStart="true" startLevel="0" />
+ <plugin id="org.eclipse.osgi" autoStart="true" startLevel="0" />
+ <plugin id="org.eclipse.osbp.vaaclipse.app" autoStart="false" startLevel="2" />
+ <plugin id="org.eclipse.osbp.vaadin.osgi.staticres" autoStart="true" startLevel="0" />
+ </configurations>
+
+</product>
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/Application.e4xmi b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/Application.e4xmi
new file mode 100644
index 0000000..ac10356
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/Application.e4xmi
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<e4modelextension:VaaclipseApplication xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:advanced="http://www.eclipse.org/ui/2010/UIModel/application/ui/advanced" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/ui/basic" xmlns:e4modelextension="http://www.semanticsoft.org/ExtensionUI/e4modelextension" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmi:id="_KosWgDjEEeKcQPOnIbNSoQ" elementId="org.eclipse.e4.ide.application">
+ <children xsi:type="basic:TrimmedWindow" xmi:id="_KosWlzjEEeKcQPOnIbNSoQ" elementId="@@projectName@@.window.main" label="@@projectName@@" width="500" height="400">
+ <tags>mainWindow</tags>
+ <children xsi:type="advanced:PerspectiveStack" xmi:id="_KosWnzjEEeKcQPOnIbNSoQ" elementId="@@projectName@@.perspectivestack">
+ <children xsi:type="advanced:Perspective" xmi:id="_KosWoDjEEeKcQPOnIbNSoQ" elementId="@@projectName@@.perspective.0">
+ <children xsi:type="basic:PartSashContainer" xmi:id="_KosWoTjEEeKcQPOnIbNSoQ" elementId="@@projectName@@.sashcontainer.0" horizontal="true">
+ <children xsi:type="basic:PartStack" xmi:id="_KosWojjEEeKcQPOnIbNSoQ" elementId="@@projectName@@.partstack.left" containerData="50">
+ <children xsi:type="basic:Part" xmi:id="_Ls9AEDmZEeKcQPOnIbNSoQ" elementId="@@projectName@@.part.first" contributionURI="bundleclass://@@projectName@@/@@projectName@@.views.FirstView" label="First" tooltip="First"/>
+ </children>
+ <children xsi:type="basic:PartStack" xmi:id="_HRRcwDmKEeKcQPOnIbNSoQ" elementId="@@projectName@@.partstack.right" containerData="50">
+ <children xsi:type="basic:Part" xmi:id="_3U12cDmjEeKcQPOnIbNSoQ" elementId="@@projectName@@.part.second" contributionURI="bundleclass://@@projectName@@/@@projectName@@.views.SecondView" label="Second" tooltip="Second"/>
+ </children>
+ </children>
+ </children>
+ </children>
+ <mainMenu xmi:id="_KosWmDjEEeKcQPOnIbNSoQ" elementId="menu:org.eclipse.ui.main.menu">
+ <children xsi:type="menu:Menu" xmi:id="_KosWmTjEEeKcQPOnIbNSoQ" label="File">
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_KosWnDjEEeKcQPOnIbNSoQ" label="Quit" command="_KosWijjEEeKcQPOnIbNSoQ"/>
+ </children>
+ <children xsi:type="menu:Menu" xmi:id="_KosWnTjEEeKcQPOnIbNSoQ" label="Help">
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_KosWnjjEEeKcQPOnIbNSoQ" label="About" command="_KosWlDjEEeKcQPOnIbNSoQ"/>
+ </children>
+ </mainMenu>
+ <trimBars xmi:id="_KosWozjEEeKcQPOnIbNSoQ">
+ <children xsi:type="menu:ToolBar" xmi:id="_KosWpDjEEeKcQPOnIbNSoQ" elementId="toolbar:org.eclipse.ui.main.toolbar">
+ <children xsi:type="menu:HandledToolItem" xmi:id="_KosWpTjEEeKcQPOnIbNSoQ" iconURI="platform:/plugin/@@projectName@@/icons/sample.gif" command="_KosWlDjEEeKcQPOnIbNSoQ"/>
+ </children>
+ </trimBars>
+ </children>
+ <handlers xmi:id="_KosWizjEEeKcQPOnIbNSoQ" contributionURI="bundleclass://@@projectName@@/@@projectName@@.handlers.QuitHandler" command="_KosWijjEEeKcQPOnIbNSoQ"/>
+ <handlers xmi:id="_KosWlTjEEeKcQPOnIbNSoQ" contributionURI="bundleclass://@@projectName@@/@@projectName@@.handlers.AboutHandler" command="_KosWlDjEEeKcQPOnIbNSoQ"/>
+ <commands xmi:id="_KosWijjEEeKcQPOnIbNSoQ" elementId="org.eclipse.ui.file.exit" commandName="quitCommand"/>
+ <commands xmi:id="_KosWlDjEEeKcQPOnIbNSoQ" elementId="org.eclipse.ui.help.aboutAction" commandName="aboutCommand"/>
+ <addons xmi:id="_KosWhDjEEeKcQPOnIbNSoQ" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/>
+ <addons xmi:id="_KosWhTjEEeKcQPOnIbNSoQ" elementId="org.eclipse.e4.ui.contexts.service" contributionURI="bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"/>
+ <addons xmi:id="_KosWhjjEEeKcQPOnIbNSoQ" elementId="org.eclipse.e4.ui.bindings.service" contributionURI="bundleclass://org.eclipse.e4.ui.bindings/org.eclipse.e4.ui.bindings.BindingServiceAddon"/>
+ <addons xmi:id="_KosWhzjEEeKcQPOnIbNSoQ" elementId="org.eclipse.e4.ui.workbench.commands.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.CommandProcessingAddon"/>
+ <addons xmi:id="_KosWiDjEEeKcQPOnIbNSoQ" elementId="org.eclipse.e4.ui.workbench.contexts.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.ContextProcessingAddon"/>
+ <addons xmi:id="_KosWiTjEEeKcQPOnIbNSoQ" elementId="org.eclipse.e4.ui.workbench.bindings.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.swt/org.eclipse.e4.ui.workbench.swt.util.BindingProcessingAddon"/>
+</e4modelextension:VaaclipseApplication>
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/icons/sample.gif b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/icons/sample.gif
new file mode 100644
index 0000000..34fb3c9
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/icons/sample.gif
Binary files differ
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/icons/save_edit.gif b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/icons/save_edit.gif
new file mode 100644
index 0000000..499dd0c
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/icons/save_edit.gif
Binary files differ
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/icons/vaaclipse.png b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/icons/vaaclipse.png
new file mode 100644
index 0000000..2779af1
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/icons/vaaclipse.png
Binary files differ
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/plugin.xml b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/plugin.xml
new file mode 100644
index 0000000..a1cb07b
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/common/plugin.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin>
+
+ <extension
+ id="product"
+ point="org.eclipse.core.runtime.products">
+ <product
+ name="@@projectName@@.product"
+ application="org.eclipse.osbp.vaaclipse.app.application">
+ <property
+ name="appName"
+ value="@@projectName@@">
+ </property>
+ <property
+ name="applicationXMI"
+ value="@@projectName@@/Application.e4xmi">
+ </property>
+ <property
+ name="cssTheme"
+ value="reindeer">
+ </property>
+ <property
+ name="applicationHeaderIcon"
+ value="platform:/plugin/@@projectName@@/icons/vaaclipse.png">
+ </property>
+ <property
+ name="applicationAuthenticationProvider"
+ value="bundleclass://@@projectName@@/@@projectName@@.login.LoginProvider">
+ </property>
+ </product>
+ </extension>
+ <extension
+ point="org.eclipse.osbp.vaaclipse.theme">
+ <themecontribution
+ cssUri="platform:/plugin/org.eclipse.osbp.vaaclipse.resources/VAADIN/themes/vaaclipse_default_theme/styles.css"
+ id="org.eclipse.osbp.vaaclipse.resources"
+ insertPosition="after=MAIN_CSS">
+ <resourceLocationUri
+ uri="platform:/plugin/org.eclipse.osbp.vaaclipse.resources/VAADIN/themes/vaaclipse_default_theme/">
+ </resourceLocationUri>
+ <themeid
+ refid="reindeer">
+ </themeid>
+ </themecontribution>
+ <themecontribution
+ cssUri="css/main.css"
+ id="@@projectName@@.maincontrib"
+ insertPosition="after=MAIN_CSS">
+ <resourceLocationUri
+ uri="icons/">
+ </resourceLocationUri>
+ <themeid
+ refid="reindeer">
+ </themeid>
+ </themecontribution>
+ </extension>
+
+</plugin>
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/templates/css/main.css b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/css/main.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/css/main.css
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/handlers/AboutHandler.java b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/handlers/AboutHandler.java
new file mode 100644
index 0000000..caabcad
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/handlers/AboutHandler.java
@@ -0,0 +1,12 @@
+package @@handlersPackageName@@;
+
+import org.eclipse.e4.core.di.annotations.Execute;
+
+import com.vaadin.Application;
+
+public class AboutHandler {
+ @Execute
+ public void execute(Application vaadinApp) {
+ vaadinApp.getMainWindow().showNotification("Vaadin E4 Application");
+ }
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/handlers/QuitHandler.java b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/handlers/QuitHandler.java
new file mode 100644
index 0000000..6cbd9db
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/handlers/QuitHandler.java
@@ -0,0 +1,13 @@
+package @@handlersPackageName@@;
+
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.ui.workbench.IWorkbench;
+
+public class QuitHandler {
+
+ @Execute
+ public void execute(IWorkbench workbench)
+ {
+ workbench.close();
+ }
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/login/LoginProvider.java b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/login/LoginProvider.java
new file mode 100644
index 0000000..d6bb6a5
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/login/LoginProvider.java
@@ -0,0 +1,78 @@
+/**
+ *
+ */
+package @@loginPackageName@@;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+
+import org.eclipse.e4.core.services.events.IEventBroker;
+import org.eclipse.osbp.vaaclipse.publicapi.authentication.AuthenticationConstants;
+import org.eclipse.osbp.vaaclipse.publicapi.authentication.User;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.LoginForm;
+import com.vaadin.ui.LoginForm.LoginEvent;
+import com.vaadin.ui.LoginForm.LoginListener;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class LoginProvider
+{
+ @Inject
+ IEventBroker eventBroker;
+
+ @Inject
+ Application vaadinApp;
+
+ @PostConstruct
+ public void init(VerticalLayout parent)
+ {
+ //Set the caption of login page (window)
+ vaadinApp.getMainWindow().setCaption("Login to @@contextPath@@ application");
+
+ Panel loginPanel = new Panel("Login");
+ loginPanel.setWidth("250px");
+ parent.addComponent(loginPanel);
+
+ parent.setComponentAlignment(loginPanel, Alignment.MIDDLE_CENTER);
+
+ LoginForm login = new LoginForm();
+ loginPanel.addComponent(login);
+
+ login.addListener(new LoginListener() {
+
+ @Override
+ public void onLogin(LoginEvent event)
+ {
+ String username = event.getLoginParameter("username");
+ String password = event.getLoginParameter("password");
+
+ if (username.trim().isEmpty())
+ username = null;
+
+ if (username == null)
+ username = "guest";
+
+ //Here you check username and password and if user with given password exists
+ //send message AuthenticationConstants.Events.Authentication with User object:
+ if (check(username, password))
+ {
+ User user = new User(username);
+ eventBroker.send(AuthenticationConstants.Events.Authentication, user);
+ }
+ else
+ {
+ vaadinApp.getMainWindow().showNotification("User does not exist", Window.Notification.TYPE_WARNING_MESSAGE);
+ }
+ }
+ });
+ };
+
+ private boolean check(String username, String password)
+ {
+ return true;
+ }
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/views/FirstView.java b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/views/FirstView.java
new file mode 100644
index 0000000..5e97115
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/views/FirstView.java
@@ -0,0 +1,15 @@
+package @@viewsPackageName@@;
+
+import javax.inject.Inject;
+
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.Label;
+
+public class FirstView
+{
+ @Inject
+ public FirstView(ComponentContainer parent)
+ {
+ parent.addComponent(new Label("First View"));
+ }
+}
diff --git a/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/views/SecondView.java b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/views/SecondView.java
new file mode 100644
index 0000000..e52be4b
--- /dev/null
+++ b/org.eclipse.osbp.vaaclipse.tools.wizards/templates/src/views/SecondView.java
@@ -0,0 +1,15 @@
+package @@viewsPackageName@@;
+
+import javax.inject.Inject;
+
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.Label;
+
+public class SecondView
+{
+ @Inject
+ public SecondView(ComponentContainer parent)
+ {
+ parent.addComponent(new Label("Second view"));
+ }
+}
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..f906dbd
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*******************************************************************************
+ * Copyright (c) 2012 Rushan R. Gilmullin 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:
+ * Rushan R. Gilmullin - initial API and implementation
+ *******************************************************************************/
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.osbp.releng.maven</groupId>
+ <artifactId>org.eclipse.osbp.releng.maven.parent.tycho</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.eclipse.osbp.vaaclipse.tools</groupId>
+ <artifactId>org.eclipse.osbp.vaaclipse.tools</artifactId>
+ <packaging>pom</packaging>
+
+ <prerequisites>
+ <maven>3.0</maven>
+ </prerequisites>
+
+ <properties>
+ <tycho-version>0.21.0</tycho-version>
+ <tychoExtrasVersion>0.21.0</tychoExtrasVersion>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <shiro-version>1.2.1</shiro-version>
+ <vaadin-icepush-version>0.5.4</vaadin-icepush-version>
+ <icepush-version>3.0.1</icepush-version>
+ <icepush-gwt-version>1.0.0</icepush-gwt-version>
+ </properties>
+
+<!-- <repositories> -->
+<!-- <repository> -->
+<!-- <id>e4tools</id> -->
+<!-- <url>http://download.eclipse.org/e4/downloads/drops/S-0.17-201501051100/repository</url> -->
+<!-- <layout>p2</layout> -->
+<!-- </repository> -->
+<!-- </repositories> -->
+
+ <modules>
+ <module>org.eclipse.osbp.vaaclipse.tools.e4tools.extension</module>
+ <module>org.eclipse.osbp.vaaclipse.tools.feature.ide</module>
+ <module>org.eclipse.osbp.vaaclipse.tools.wizards</module>
+ </modules>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>target-platform-configuration</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <resolver>p2</resolver>
+ <pomDependencies>consider</pomDependencies>
+ <environments>
+ <environment>
+ <os>win32</os>
+ <ws>win32</ws>
+ <arch>x86_64</arch>
+ </environment>
+ <environment>
+ <os>linux</os>
+ <ws>gtk</ws>
+ <arch>x86</arch>
+ </environment>
+ <environment>
+ <os>linux</os>
+ <ws>gtk</ws>
+ <arch>x86_64</arch>
+ </environment>
+ <environment>
+ <os>macosx</os>
+ <ws>cocoa</ws>
+ <arch>x86_64</arch>
+ </environment>
+ </environments>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+</project>

Back to the top