Initial contribution of converter and validation service
Change-Id: I460ace5273af49060bf8ece0a7188aa57db8aa72
Signed-off-by: Fauth Dirk <Dirk.Fauth@de.bosch.com>
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..785e40b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+.metadata/
+
+# Eclipse target directories
+bin/
+target/
+
+#pomless tycho fragments
+pom.tycho
\ No newline at end of file
diff --git a/README.TXT b/README.TXT
new file mode 100644
index 0000000..51e5959
--- /dev/null
+++ b/README.TXT
@@ -0,0 +1,17 @@
+This repository contains projects that wrap APP4MC features into REST based services.
+
+- org.eclipse.app4mc.converter.cloud
+ Provides the APP4MC Model Migration as a service.
+ The project is based on OSGi enRoute Maven archetypes and uses JAX-RS Whiteboard.
+ It is recommended to use bndtools for best development experience.
+ You can build the standalone product by executing "mvn clean verify" in the root directory.
+ - Pre-Requisite: The Maven build needs to consume the APP4MC Migration JARs from a Maven repository. As right now APP4MC does not publish to Maven Central, you need to build
+ APP4MC Migration to install into the local repository via "mvn clean install" before running the cloud service build.
+ The build result is located in org.eclipse.app4mc.converter.cloud/converter-app/target/converter-app.jar
+
+- org.eclipse.app4mc.validation.cloud
+ Provides the APP4MC Validation as a service.
+ The project is based on PDE and uses the HTTP Whiteboard because of implicit dependencies to the Eclipse Runtime and Extension Points.
+ You can build the standalone product by executing "mvn clean verify" in the root directory.
+ The build result is located in org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.product/target/products
+ The server port can be changed in the eclipse.ini file.
\ No newline at end of file
diff --git a/org.eclipse.app4mc.converter.cloud/.project b/org.eclipse.app4mc.converter.cloud/.project
new file mode 100644
index 0000000..85e7ff0
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.app4mc.converter.cloud</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.app4mc.converter.cloud/.settings/org.eclipse.core.resources.prefs b/org.eclipse.app4mc.converter.cloud/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.app4mc.converter.cloud/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.app4mc.converter.cloud/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.app4mc.converter.cloud/converter-app/.classpath b/org.eclipse.app4mc.converter.cloud/converter-app/.classpath
new file mode 100644
index 0000000..a5d9509
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-app/.classpath
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ <attribute name="test" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.app4mc.converter.cloud/converter-app/.project b/org.eclipse.app4mc.converter.cloud/converter-app/.project
new file mode 100644
index 0000000..7771c1a
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-app/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>converter-app</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.app4mc.converter.cloud/converter-app/.settings/org.eclipse.core.resources.prefs b/org.eclipse.app4mc.converter.cloud/converter-app/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..abdea9a
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-app/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding/<project>=UTF-8
diff --git a/org.eclipse.app4mc.converter.cloud/converter-app/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.app4mc.converter.cloud/converter-app/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..2f5cc74
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-app/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.app4mc.converter.cloud/converter-app/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.app4mc.converter.cloud/converter-app/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-app/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.app4mc.converter.cloud/converter-app/about.html b/org.eclipse.app4mc.converter.cloud/converter-app/about.html
new file mode 100644
index 0000000..164f781
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-app/about.html
@@ -0,0 +1,36 @@
+<!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>November 30, 2017</p>
+ <h3>License</h3>
+
+ <p>
+ The Eclipse Foundation makes available all content in this plug-in
+ ("Content"). Unless otherwise indicated below, the Content
+ is provided to you under the terms and conditions of the Eclipse
+ Public License Version 2.0 ("EPL"). A copy of the EPL is
+ available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+ For purposes of the EPL, "Program" will mean the Content.
+ </p>
+
+ <p>
+ If you did not receive this Content directly from the Eclipse
+ Foundation, the Content is being redistributed by another party
+ ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor's license that was provided with the Content. If no such
+ license exists, contact the Redistributor. Unless otherwise indicated
+ below, the terms and conditions of the EPL still apply to any source
+ code in the Content and such source code may be obtained at <a
+ href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+ </p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.app4mc.converter.cloud/converter-app/converter-app.bndrun b/org.eclipse.app4mc.converter.cloud/converter-app/converter-app.bndrun
new file mode 100644
index 0000000..a92513f
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-app/converter-app.bndrun
@@ -0,0 +1,64 @@
+index: target/index.xml;name="converter-app"
+
+-standalone: ${index}
+
+-runrequires: \
+ bnd.identity;id='org.eclipse.app4mc.converter-app',\
+ bnd.identity;id='org.eclipse.app4mc.converter-service',\
+ bnd.identity;id='org.eclipse.app4mc.amalthea.converters.071',\
+ bnd.identity;id='org.eclipse.app4mc.amalthea.converters.072',\
+ bnd.identity;id='org.eclipse.app4mc.amalthea.converters.080',\
+ bnd.identity;id='org.eclipse.app4mc.amalthea.converters.081',\
+ bnd.identity;id='org.eclipse.app4mc.amalthea.converters.082',\
+ bnd.identity;id='org.eclipse.app4mc.amalthea.converters.083',\
+ bnd.identity;id='org.eclipse.app4mc.amalthea.converters.090',\
+ bnd.identity;id='org.eclipse.app4mc.amalthea.converters.091',\
+ bnd.identity;id='org.eclipse.app4mc.amalthea.converters.092',\
+ bnd.identity;id='org.eclipse.app4mc.amalthea.converters.093',\
+ bnd.identity;id='org.eclipse.app4mc.amalthea.converters.094',\
+ bnd.identity;id='org.eclipse.app4mc.amalthea.converters.095',\
+ bnd.identity;id='org.eclipse.app4mc.amalthea.converters.096',\
+ bnd.identity;id='org.eclipse.app4mc.amalthea.converters.097',\
+ osgi.identity;filter:='(&(osgi.identity=jaxen)(version>=1.1.6))'
+-runfw: org.eclipse.osgi
+-runee: JavaSE-1.8
+
+-resolve.effective: active
+-resolve: auto
+
+
+-runbundles: \
+ ch.qos.logback.classic;version='[1.2.3,1.2.4)',\
+ ch.qos.logback.core;version='[1.2.3,1.2.4)',\
+ jaxen;version='[1.1.6,1.1.7)',\
+ org.apache.aries.javax.jax.rs-api;version='[1.0.0,1.0.1)',\
+ org.apache.aries.jax.rs.whiteboard;version='[1.0.1,1.0.2)',\
+ org.apache.felix.configadmin;version='[1.9.8,1.9.9)',\
+ org.apache.felix.configurator;version='[1.0.6,1.0.7)',\
+ org.apache.felix.http.jetty;version='[4.0.18,4.0.19)',\
+ org.apache.felix.http.servlet-api;version='[1.1.2,1.1.3)',\
+ org.apache.felix.scr;version='[2.1.10,2.1.11)',\
+ org.apache.servicemix.bundles.jdom;version='[2.0.6,2.0.7)',\
+ org.apache.servicemix.specs.annotation-api-1.3;version='[1.3.0,1.3.1)',\
+ org.eclipse.app4mc.amalthea.converters.071;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.amalthea.converters.072;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.amalthea.converters.080;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.amalthea.converters.081;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.amalthea.converters.082;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.amalthea.converters.083;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.amalthea.converters.090;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.amalthea.converters.091;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.amalthea.converters.092;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.amalthea.converters.093;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.amalthea.converters.094;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.amalthea.converters.095;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.amalthea.converters.096;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.amalthea.converters.097;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.amalthea.converters.common;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.converter-app;version='[0.9.9,0.9.10)',\
+ org.eclipse.app4mc.converter-service;version='[0.9.9,0.9.10)',\
+ org.eclipse.equinox.common;version='[3.12.0,3.12.1)',\
+ org.eclipse.osgi.services;version='[3.8.0,3.8.1)',\
+ org.eclipse.osgi.util;version='[3.5.300,3.5.301)',\
+ org.osgi.service.jaxrs;version='[1.0.0,1.0.1)',\
+ slf4j.api;version='[1.7.25,1.7.26)'
\ No newline at end of file
diff --git a/org.eclipse.app4mc.converter.cloud/converter-app/debug.bndrun b/org.eclipse.app4mc.converter.cloud/converter-app/debug.bndrun
new file mode 100644
index 0000000..f024fe0
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-app/debug.bndrun
@@ -0,0 +1,16 @@
+-include: ~converter-app.bndrun
+
+test-index: target/test-index.xml;name="converter-app Test"
+
+-standalone: ${index},${test-index}
+
+-runproperties: \
+ osgi.console=,\
+ osgi.console.enable.builtin=false
+
+-runrequires.debug: osgi.identity;filter:='(osgi.identity=org.apache.felix.webconsole)',\
+ osgi.identity;filter:='(osgi.identity=org.apache.felix.webconsole.plugins.ds)',\
+ osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.shell)',\
+ osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.runtime)',\
+ osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)'
+
\ No newline at end of file
diff --git a/org.eclipse.app4mc.converter.cloud/converter-app/epl-2.0.html b/org.eclipse.app4mc.converter.cloud/converter-app/epl-2.0.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-app/epl-2.0.html
@@ -0,0 +1,300 @@
+<!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" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Eclipse Public License - Version 2.0</title>
+ <style type="text/css">
+ body {
+ margin: 1.5em 3em;
+ }
+ h1{
+ font-size:1.5em;
+ }
+ h2{
+ font-size:1em;
+ margin-bottom:0.5em;
+ margin-top:1em;
+ }
+ p {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ ul, ol{
+ list-style-type:none;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>Eclipse Public License - v 2.0</h1>
+ <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>
+ <h2 id="definitions">1. DEFINITIONS</h2>
+ <p>“Contribution” means:</p>
+ <ul>
+ <li>a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
+ </li>
+ <li>
+ b) in the case of each subsequent Contributor:
+ <ul>
+ <li>i) changes to the Program, and</li>
+ <li>ii) additions to the Program;</li>
+ </ul>
+ 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 changes or additions to the Program that
+ are not Modified Works.
+ </li>
+ </ul>
+ <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
+ or any Secondary License (as applicable), including Contributors.
+ </p>
+ <p>“Derivative Works” shall mean any work, whether in Source Code or other
+ form, that is based on (or derived from) the Program and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship.
+ </p>
+ <p>“Modified Works” shall mean any work in Source Code or other form that
+ results from an addition to, deletion from, or modification of the
+ contents of the Program, including, for purposes of clarity any new file
+ in Source Code form that contains any contents of the Program. Modified
+ Works shall not include works that contain only declarations, interfaces,
+ types, classes, structures, or files of the Program solely in each case
+ in order to link to, bind by name, or subclass the Program or Modified
+ Works thereof.
+ </p>
+ <p>“Distribute” means the acts of a) distributing or b) making available
+ in any manner that enables the transfer of a copy.
+ </p>
+ <p>“Source Code” means the form of a Program preferred for making
+ modifications, including but not limited to software source code,
+ documentation source, and configuration files.
+ </p>
+ <p>“Secondary License” means either the GNU General Public License,
+ Version 2.0, or any later versions of that license, including any
+ exceptions or additional permissions as identified by the initial
+ Contributor.
+ </p>
+ <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+ <ul>
+ <li>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.
+ </li>
+ <li>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 or other 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.
+ </li>
+ <li>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.
+ </li>
+ <li>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.
+ </li>
+ <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+ makes additional grants to any Recipient (other than those set forth
+ in this Agreement) as a result of such Recipient's receipt of the
+ Program under the terms of a Secondary License (if permitted under
+ the terms of Section 3).
+ </li>
+ </ul>
+ <h2 id="requirements">3. REQUIREMENTS</h2>
+ <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+ <ul>
+ <li>a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
+ </li>
+ <li>
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+ <ul>
+ <li>i) effectively disclaims on behalf of all other 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;
+ </li>
+ <li>ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special, incidental
+ and consequential damages, such as lost profits;
+ </li>
+ <li>iii) does not attempt to limit or alter the recipients' rights in the
+ Source Code under section 3.2; and
+ </li>
+ <li>iv) requires any subsequent distribution of the Program by any party
+ to be under a license that satisfies the requirements of this section 3.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>3.2 When the Program is Distributed as Source Code:</p>
+ <ul>
+ <li>a) it must be made available under this Agreement, or if the Program (i)
+ is combined with other material in a separate file or files made available
+ under a Secondary License, and (ii) the initial Contributor attached to
+ the Source Code the notice described in Exhibit A of this Agreement,
+ then the Program may be made available under the terms of such
+ Secondary Licenses, and
+ </li>
+ <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+ </ul>
+ <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+ attribution notices, disclaimers of warranty, or limitations of liability
+ (‘notices’) contained within the Program from any copy of the Program which
+ they Distribute, provided that Contributors may add their own appropriate
+ notices.
+ </p>
+ <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+ <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>
+ <h2 id="warranty">5. NO WARRANTY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, 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>
+ <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, 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>
+ <h2 id="general">7. GENERAL</h2>
+ <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.
+ </p>
+ <p>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. Nothing in this Agreement is intended
+ to be enforceable by any entity that is not a Contributor or Recipient.
+ No third-party beneficiary rights are created under this Agreement.
+ </p>
+ <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
+ <p>“This Source Code may also be made available under the following
+ Secondary Licenses when the conditions for such availability set forth
+ in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+ version(s), and exceptions or additional permissions here}.”
+ </p>
+ <blockquote>
+ <p>Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+ </p>
+ <p>If it is not possible or desirable to put the notice in a particular file,
+ then You may include the notice in a location (such as a LICENSE file in a
+ relevant directory) where a recipient would be likely to look for
+ such a notice.
+ </p>
+ <p>You may add additional accurate notices of copyright ownership.</p>
+ </blockquote>
+ </body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.app4mc.converter.cloud/converter-app/pom.xml b/org.eclipse.app4mc.converter.cloud/converter-app/pom.xml
new file mode 100644
index 0000000..ec7faaa
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-app/pom.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.app4mc</groupId>
+ <artifactId>org.eclipse.app4mc.converter.cloud</artifactId>
+ <version>0.9.9-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>converter-app</artifactId>
+
+ <description>The org.eclipse.app4mc.converter.cloud application packaging project - using OSGi enRoute R7</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.app4mc</groupId>
+ <artifactId>converter-service</artifactId>
+ <version>0.9.9-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi.enroute</groupId>
+ <artifactId>osgi-api</artifactId>
+ <type>pom</type>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi.enroute</groupId>
+ <artifactId>impl-index</artifactId>
+ <type>pom</type>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi.enroute</groupId>
+ <artifactId>debug-bundles</artifactId>
+ <type>pom</type>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>biz.aQute.bnd</groupId>
+ <artifactId>bnd-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>biz.aQute.bnd</groupId>
+ <artifactId>bnd-indexer-maven-plugin</artifactId>
+ <configuration>
+ <includeJar>true</includeJar>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>biz.aQute.bnd</groupId>
+ <artifactId>bnd-export-maven-plugin</artifactId>
+ <configuration>
+ <bndruns>
+ <bndrun>converter-app.bndrun</bndrun>
+ </bndruns>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>biz.aQute.bnd</groupId>
+ <artifactId>bnd-resolver-maven-plugin</artifactId>
+ <configuration>
+ <bndruns>
+ <bndrun>converter-app.bndrun</bndrun>
+ <bndrun>debug.bndrun</bndrun>
+ </bndruns>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/org.eclipse.app4mc.converter.cloud/converter-app/src/main/java/config/package-info.java b/org.eclipse.app4mc.converter.cloud/converter-app/src/main/java/config/package-info.java
new file mode 100644
index 0000000..e8bdcf3
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-app/src/main/java/config/package-info.java
@@ -0,0 +1,4 @@
+@RequireConfigurator
+package config;
+
+import org.osgi.service.configurator.annotations.RequireConfigurator;
\ No newline at end of file
diff --git a/org.eclipse.app4mc.converter.cloud/converter-app/src/main/resources/OSGI-INF/configurator/configuration.json b/org.eclipse.app4mc.converter.cloud/converter-app/src/main/resources/OSGI-INF/configurator/configuration.json
new file mode 100644
index 0000000..ebfd8c1
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-app/src/main/resources/OSGI-INF/configurator/configuration.json
@@ -0,0 +1,25 @@
+{
+ // Comments are permitted in configuration files, but they should be
+ // minified if they are going to be used as strict JSON
+
+ // Global Settings
+ ":configurator:resource-version" : 1,
+ ":configurator:symbolic-name" : "org.eclipse.app4mc.converter-app.config",
+ ":configurator:version" : "0.9.9-SNAPSHOT",
+
+ /*
+ // This defines a configuration
+ */
+
+ "org.apache.aries.jax.rs.whiteboard.default" : {
+ "osgi.http.whiteboard.servlet.multipart.enabled" : "true"
+ }
+
+ /*
+ // This defines a factory configuration
+
+ "my.factory.configuration.pid~fizzbuzz": {
+ "fizz": "buzz",
+ "foo": "bar"},
+ */
+}
\ No newline at end of file
diff --git a/org.eclipse.app4mc.converter.cloud/converter-service/.classpath b/org.eclipse.app4mc.converter.cloud/converter-service/.classpath
new file mode 100644
index 0000000..5e8a55f
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-service/.classpath
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ <attribute name="test" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.app4mc.converter.cloud/converter-service/.project b/org.eclipse.app4mc.converter.cloud/converter-service/.project
new file mode 100644
index 0000000..c5f0845
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-service/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>converter-service</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.app4mc.converter.cloud/converter-service/.settings/org.eclipse.core.resources.prefs b/org.eclipse.app4mc.converter.cloud/converter-service/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..f9fe345
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-service/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/org.eclipse.app4mc.converter.cloud/converter-service/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.app4mc.converter.cloud/converter-service/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..2f5cc74
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-service/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.app4mc.converter.cloud/converter-service/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.app4mc.converter.cloud/converter-service/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-service/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.app4mc.converter.cloud/converter-service/about.html b/org.eclipse.app4mc.converter.cloud/converter-service/about.html
new file mode 100644
index 0000000..164f781
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-service/about.html
@@ -0,0 +1,36 @@
+<!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>November 30, 2017</p>
+ <h3>License</h3>
+
+ <p>
+ The Eclipse Foundation makes available all content in this plug-in
+ ("Content"). Unless otherwise indicated below, the Content
+ is provided to you under the terms and conditions of the Eclipse
+ Public License Version 2.0 ("EPL"). A copy of the EPL is
+ available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+ For purposes of the EPL, "Program" will mean the Content.
+ </p>
+
+ <p>
+ If you did not receive this Content directly from the Eclipse
+ Foundation, the Content is being redistributed by another party
+ ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor's license that was provided with the Content. If no such
+ license exists, contact the Redistributor. Unless otherwise indicated
+ below, the terms and conditions of the EPL still apply to any source
+ code in the Content and such source code may be obtained at <a
+ href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+ </p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.app4mc.converter.cloud/converter-service/epl-2.0.html b/org.eclipse.app4mc.converter.cloud/converter-service/epl-2.0.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-service/epl-2.0.html
@@ -0,0 +1,300 @@
+<!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" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Eclipse Public License - Version 2.0</title>
+ <style type="text/css">
+ body {
+ margin: 1.5em 3em;
+ }
+ h1{
+ font-size:1.5em;
+ }
+ h2{
+ font-size:1em;
+ margin-bottom:0.5em;
+ margin-top:1em;
+ }
+ p {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ ul, ol{
+ list-style-type:none;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>Eclipse Public License - v 2.0</h1>
+ <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>
+ <h2 id="definitions">1. DEFINITIONS</h2>
+ <p>“Contribution” means:</p>
+ <ul>
+ <li>a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
+ </li>
+ <li>
+ b) in the case of each subsequent Contributor:
+ <ul>
+ <li>i) changes to the Program, and</li>
+ <li>ii) additions to the Program;</li>
+ </ul>
+ 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 changes or additions to the Program that
+ are not Modified Works.
+ </li>
+ </ul>
+ <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
+ or any Secondary License (as applicable), including Contributors.
+ </p>
+ <p>“Derivative Works” shall mean any work, whether in Source Code or other
+ form, that is based on (or derived from) the Program and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship.
+ </p>
+ <p>“Modified Works” shall mean any work in Source Code or other form that
+ results from an addition to, deletion from, or modification of the
+ contents of the Program, including, for purposes of clarity any new file
+ in Source Code form that contains any contents of the Program. Modified
+ Works shall not include works that contain only declarations, interfaces,
+ types, classes, structures, or files of the Program solely in each case
+ in order to link to, bind by name, or subclass the Program or Modified
+ Works thereof.
+ </p>
+ <p>“Distribute” means the acts of a) distributing or b) making available
+ in any manner that enables the transfer of a copy.
+ </p>
+ <p>“Source Code” means the form of a Program preferred for making
+ modifications, including but not limited to software source code,
+ documentation source, and configuration files.
+ </p>
+ <p>“Secondary License” means either the GNU General Public License,
+ Version 2.0, or any later versions of that license, including any
+ exceptions or additional permissions as identified by the initial
+ Contributor.
+ </p>
+ <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+ <ul>
+ <li>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.
+ </li>
+ <li>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 or other 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.
+ </li>
+ <li>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.
+ </li>
+ <li>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.
+ </li>
+ <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+ makes additional grants to any Recipient (other than those set forth
+ in this Agreement) as a result of such Recipient's receipt of the
+ Program under the terms of a Secondary License (if permitted under
+ the terms of Section 3).
+ </li>
+ </ul>
+ <h2 id="requirements">3. REQUIREMENTS</h2>
+ <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+ <ul>
+ <li>a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
+ </li>
+ <li>
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+ <ul>
+ <li>i) effectively disclaims on behalf of all other 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;
+ </li>
+ <li>ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special, incidental
+ and consequential damages, such as lost profits;
+ </li>
+ <li>iii) does not attempt to limit or alter the recipients' rights in the
+ Source Code under section 3.2; and
+ </li>
+ <li>iv) requires any subsequent distribution of the Program by any party
+ to be under a license that satisfies the requirements of this section 3.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>3.2 When the Program is Distributed as Source Code:</p>
+ <ul>
+ <li>a) it must be made available under this Agreement, or if the Program (i)
+ is combined with other material in a separate file or files made available
+ under a Secondary License, and (ii) the initial Contributor attached to
+ the Source Code the notice described in Exhibit A of this Agreement,
+ then the Program may be made available under the terms of such
+ Secondary Licenses, and
+ </li>
+ <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+ </ul>
+ <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+ attribution notices, disclaimers of warranty, or limitations of liability
+ (‘notices’) contained within the Program from any copy of the Program which
+ they Distribute, provided that Contributors may add their own appropriate
+ notices.
+ </p>
+ <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+ <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>
+ <h2 id="warranty">5. NO WARRANTY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, 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>
+ <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, 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>
+ <h2 id="general">7. GENERAL</h2>
+ <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.
+ </p>
+ <p>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. Nothing in this Agreement is intended
+ to be enforceable by any entity that is not a Contributor or Recipient.
+ No third-party beneficiary rights are created under this Agreement.
+ </p>
+ <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
+ <p>“This Source Code may also be made available under the following
+ Secondary Licenses when the conditions for such availability set forth
+ in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+ version(s), and exceptions or additional permissions here}.”
+ </p>
+ <blockquote>
+ <p>Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+ </p>
+ <p>If it is not possible or desirable to put the notice in a particular file,
+ then You may include the notice in a location (such as a LICENSE file in a
+ relevant directory) where a recipient would be likely to look for
+ such a notice.
+ </p>
+ <p>You may add additional accurate notices of copyright ownership.</p>
+ </blockquote>
+ </body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.app4mc.converter.cloud/converter-service/pom.xml b/org.eclipse.app4mc.converter.cloud/converter-service/pom.xml
new file mode 100644
index 0000000..34762ee
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-service/pom.xml
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <artifactId>
+ converter-service
+ </artifactId>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>
+ bnd-maven-plugin
+ </artifactId>
+ <groupId>
+ biz.aQute.bnd
+ </groupId>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <artifactId>
+ enterprise-api
+ </artifactId>
+ <groupId>
+ org.osgi.enroute
+ </groupId>
+ <type>
+ pom
+ </type>
+ </dependency>
+ <dependency>
+ <artifactId>
+ osgi-api
+ </artifactId>
+ <groupId>
+ org.osgi.enroute
+ </groupId>
+ <type>
+ pom
+ </type>
+ </dependency>
+ <dependency>
+ <artifactId>
+ test-bundles
+ </artifactId>
+ <groupId>
+ org.osgi.enroute
+ </groupId>
+ <type>
+ pom
+ </type>
+ </dependency>
+ <!-- APP4MC Migration -->
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.common
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.071
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.072
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.080
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.081
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.082
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.083
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.090
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.091
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.092
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.093
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.094
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.095
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.096
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.app4mc.amalthea.converters.097
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc.converters
+ </groupId>
+ <version>
+ ${app4mc.version}
+ </version>
+ </dependency>
+ <!-- APP4MC Migration Dependencies -->
+ <dependency>
+ <artifactId>
+ jaxen
+ </artifactId>
+ <groupId>
+ jaxen
+ </groupId>
+ <version>
+ 1.1.6
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.apache.servicemix.bundles.jdom
+ </artifactId>
+ <groupId>
+ org.apache.servicemix.bundles
+ </groupId>
+ <version>
+ 2.0.6_1
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.apache.servicemix.specs.jaxp-api-1.4
+ </artifactId>
+ <groupId>
+ org.apache.servicemix.specs
+ </groupId>
+ <version>
+ 2.9.0
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.equinox.common
+ </artifactId>
+ <groupId>
+ org.eclipse.platform
+ </groupId>
+ <version>
+ 3.12.0
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.osgi.services
+ </artifactId>
+ <groupId>
+ org.eclipse.platform
+ </groupId>
+ <version>
+ 3.8.0
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.eclipse.osgi.util
+ </artifactId>
+ <groupId>
+ org.eclipse.platform
+ </groupId>
+ <version>
+ 3.5.300
+ </version>
+ </dependency>
+ </dependencies>
+ <description>
+ The org.eclipse.app4mc.converter.cloud service implementation project - using OSGi enRoute R7
+ </description>
+ <modelVersion>
+ 4.0.0
+ </modelVersion>
+ <parent>
+ <artifactId>
+ org.eclipse.app4mc.converter.cloud
+ </artifactId>
+ <groupId>
+ org.eclipse.app4mc
+ </groupId>
+ <relativePath>
+ ../pom.xml
+ </relativePath>
+ <version>
+ 0.9.9-SNAPSHOT
+ </version>
+ </parent>
+ <properties>
+ <app4mc.version>
+ 0.9.9-SNAPSHOT
+ </app4mc.version>
+ </properties>
+</project>
diff --git a/org.eclipse.app4mc.converter.cloud/converter-service/src/main/java/org/eclipse/app4mc/org/eclipse/app4mc/converter/cloud/MigrationRestService.java b/org.eclipse.app4mc.converter.cloud/converter-service/src/main/java/org/eclipse/app4mc/org/eclipse/app4mc/converter/cloud/MigrationRestService.java
new file mode 100644
index 0000000..d909002
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-service/src/main/java/org/eclipse/app4mc/org/eclipse/app4mc/converter/cloud/MigrationRestService.java
@@ -0,0 +1,267 @@
+/*********************************************************************************
+ * Copyright (c) 2020 Robert Bosch GmbH and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
+ */
+package org.eclipse.app4mc.org.eclipse.app4mc.converter.cloud;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.Part;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
+
+import org.eclipse.app4mc.amalthea.converters.common.MigrationException;
+import org.eclipse.app4mc.amalthea.converters.common.MigrationHelper;
+import org.eclipse.app4mc.amalthea.converters.common.MigrationInputFile;
+import org.eclipse.app4mc.amalthea.converters.common.MigrationProcessor;
+import org.eclipse.app4mc.amalthea.converters.common.MigrationSettings;
+import org.eclipse.app4mc.amalthea.converters.common.MigrationStatusCode;
+import org.eclipse.app4mc.amalthea.converters.common.utils.ModelVersion;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.jaxrs.whiteboard.propertytypes.JaxrsResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Component(service=MigrationRestService.class)
+@JaxrsResource
+@Path("app4mc/converter")
+public class MigrationRestService {
+
+ private static final String TEMP_DIR_PREFIX = "app4mc_migration_";
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(MigrationRestService.class);
+
+ private final String defaultBaseDir = System.getProperty("java.io.tmpdir");
+
+ @Reference
+ MigrationProcessor migrationProcessor;
+
+ @Path("upload")
+ @POST
+ @Consumes(MediaType.MULTIPART_FORM_DATA)
+ @Produces(MediaType.TEXT_HTML)
+ public Response upload(@Context HttpServletRequest request) throws IOException, ServletException {
+
+ Part part = request.getPart("file");
+ if (part != null) {
+ String filename = part.getSubmittedFileName();
+ try (InputStream is = part.getInputStream()) {
+ java.nio.file.Path path = Files.createTempDirectory(TEMP_DIR_PREFIX);
+
+ // extract uuid from pathname
+ String uuid = path.toString().substring(path.toString().lastIndexOf('_') + 1);
+
+ Files.copy(is, Paths.get(path.toString(), filename));
+
+ // return uuid
+ return Response.ok(uuid).build();
+ }
+ }
+
+ return Response.noContent().build();
+ }
+
+ @Path("{uuid}/convert")
+ @PUT
+ public Response convert(@PathParam("uuid") String uuid) throws IOException {
+
+ java.nio.file.Path tempFolderPath = Paths.get(defaultBaseDir, TEMP_DIR_PREFIX + uuid);
+ List<java.nio.file.Path> modelFilePaths =
+ Files.find(tempFolderPath, 1, (path, attrs) -> path.toString().endsWith(".amxmi"))
+ .collect(Collectors.toList());
+
+ if (modelFilePaths.isEmpty()) {
+ return Response
+ .status(Response.Status.NOT_FOUND)
+ .entity("No model file uploaded!")
+ .build();
+ }
+
+ // build up MigrationSettings
+ // same as AmaltheaModelMigrationHandler#collectInput
+
+ String outputModelVersion = ModelVersion.getLatestVersion();
+
+ java.nio.file.Path modelFilePath = modelFilePaths.get(0);
+ try (MigrationSettings migrationSettings = new MigrationSettings()) {
+ migrationSettings.setProject(modelFilePath.getParent().toFile());
+ migrationSettings.setMigrationModelVersion(outputModelVersion);
+
+ // TODO execute in background thread to avoid timeout and provide status resource
+ return convert(Arrays.asList(modelFilePath.toFile()), migrationSettings);
+ }
+ }
+
+ @Path("{uuid}/download")
+ @GET
+ @Produces(MediaType.APPLICATION_OCTET_STREAM)
+ public Response download(@PathParam("uuid") String uuid) throws IOException {
+ java.nio.file.Path tempFolderPath = Paths.get(defaultBaseDir, TEMP_DIR_PREFIX + uuid);
+
+ List<java.nio.file.Path> modelFilePaths =
+ Files.find(tempFolderPath, 1, (path, attrs) -> path.toString().endsWith(".amxmi"))
+ .collect(Collectors.toList());
+
+ if (modelFilePaths.isEmpty()) {
+ return Response
+ .status(Response.Status.NOT_FOUND)
+ .entity("No migrated model file available!")
+ .build();
+ }
+
+ java.nio.file.Path modelFilePath = modelFilePaths.get(0);
+
+ ResponseBuilder response = Response.ok(modelFilePath.toFile());
+ response.header("Content-Disposition", "attachment; filename=\"" + modelFilePath.toFile().getName() + "\"");
+ return response.build();
+ }
+
+ @Path("{uuid}/delete")
+ @DELETE
+ public Response delete(@PathParam("uuid") String uuid) throws IOException {
+ java.nio.file.Path path = Paths.get(defaultBaseDir, TEMP_DIR_PREFIX + uuid);
+
+ Files.walk(path)
+ .sorted(Comparator.reverseOrder())
+ .map(java.nio.file.Path::toFile)
+ .forEach(File::delete);
+
+ return Response.ok().build();
+ }
+
+ /**
+ * Convert the given list of files.
+ * @param inputFiles
+ * @param migrationSettings
+ */
+ private Response convert(List<File> inputFiles, MigrationSettings migrationSettings) {
+
+ // same as ModelLoaderJob
+ try {
+ List<MigrationInputFile> modelFiles = MigrationHelper.populateModels(inputFiles, migrationSettings);
+ migrationSettings.getMigModelFiles().addAll(modelFiles);
+ } catch (Exception e) {
+ LOGGER.error("Failed to load model files", e);
+ return Response
+ .status(Response.Status.BAD_REQUEST)
+ .entity("Failed to load model files")
+ .build();
+ }
+
+ // same as AmaltheaModelMigrationHandler#JobChangeListener
+ try {
+ boolean inputValid = MigrationHelper.isInputModelVersionValid(migrationSettings);
+ if (!inputValid) {
+ LOGGER.error("Model migration stopped in {} as selected model files belong to different versions", migrationSettings.getOutputDirectoryLocation());
+ return Response
+ .status(Response.Status.BAD_REQUEST)
+ .entity("Model migration stopped as selected model files belong to different versions")
+ .build();
+ } else {
+
+ if (migrationSettings.getInputModelVersion() != null
+ && ModelVersion.getLatestVersion().equals(migrationSettings.getInputModelVersion())) {
+
+ LOGGER.error("Selected model is compatible to latest AMALTHEA meta-model version {}.\nIt is not required to migrate the model in {}",
+ ModelVersion.getLatestVersion(),
+ migrationSettings.getOutputDirectoryLocation());
+ return Response
+ .status(Response.Status.BAD_REQUEST)
+ .entity("Selected model is compatible to latest AMALTHEA meta-model version " + ModelVersion.getLatestVersion() + ".\\nIt is not required to migrate the model.")
+ .build();
+ } else {
+ // check if a migration needs to be executed
+ Map<String, String> migStepEntries = MigrationHelper.generateMigrationSteps(
+ migrationSettings.getInputModelVersion(),
+ migrationSettings.getMigrationModelVersion());
+
+ if (migStepEntries.size() == 0) {
+ LOGGER.error("Migration not supported for the selected model versions.\nInput Model version : \"{}\" Output Model Version : \"{}\"",
+ migrationSettings.getInputModelVersion(),
+ migrationSettings.getMigrationModelVersion());
+ return Response
+ .status(Response.Status.BAD_REQUEST)
+ .entity("Migration not supported for the selected model versions.\nInput Model version : "
+ + migrationSettings.getInputModelVersion()
+ + " Output Model Version : "
+ + migrationSettings.getMigrationModelVersion())
+ .build();
+ }
+
+ // set the file parent folder as output location to convert the file at source
+ MigrationInputFile migrationInputFile = migrationSettings.getMigModelFiles().get(0);
+ migrationSettings.setOutputDirectoryLocation(migrationInputFile.getOriginalFile().getParent());
+
+ //now call migration job to migrate the file to latest Amalthea version
+
+ // same as ModelMigrationJob
+ int result = migrationProcessor.execute(migrationSettings, null);
+ switch (result) {
+ case MigrationStatusCode.UNSUPPORTED_MODEL_VERSIONS:
+ LOGGER.error("Migration in "
+ + migrationSettings.getOutputDirectoryLocation()
+ + " not supported for the selected model versions. \nInput Model version : \""
+ + migrationSettings.getInputModelVersion()
+ + "\" Output Model Version : \""
+ + migrationSettings.getMigrationModelVersion() + "\"");
+ return Response
+ .status(Response.Status.BAD_REQUEST)
+ .entity("Migration not supported for the selected model versions.\nInput Model version : "
+ + migrationSettings.getInputModelVersion()
+ + " Output Model Version : "
+ + migrationSettings.getMigrationModelVersion())
+ .build();
+ case MigrationStatusCode.ERROR:
+ LOGGER.error("Error during migration in {}", migrationSettings.getOutputDirectoryLocation());
+ return Response
+ .status(Response.Status.BAD_REQUEST)
+ .entity("Error during migration.")
+ .build();
+ default:
+ LOGGER.info("Model Migration in {} successful !!", migrationSettings.getOutputDirectoryLocation());
+ }
+ }
+ }
+ } catch (MigrationException e) {
+ LOGGER.error("Error during migration in {} : {}", migrationSettings.getOutputDirectoryLocation(), e.getLocalizedMessage());
+ return Response
+ .status(Response.Status.BAD_REQUEST)
+ .entity("Error during migration. " + e.getLocalizedMessage())
+ .build();
+ }
+
+ return Response.ok("Model Migration successful!").build();
+ }
+
+}
diff --git a/org.eclipse.app4mc.converter.cloud/converter-service/src/test/java/org/eclipse/app4mc/org/eclipse/app4mc/converter/cloud/UnitTest.java b/org.eclipse.app4mc.converter.cloud/converter-service/src/test/java/org/eclipse/app4mc/org/eclipse/app4mc/converter/cloud/UnitTest.java
new file mode 100644
index 0000000..dcae481
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/converter-service/src/test/java/org/eclipse/app4mc/org/eclipse/app4mc/converter/cloud/UnitTest.java
@@ -0,0 +1,12 @@
+package org.eclipse.app4mc.org.eclipse.app4mc.converter.cloud;
+
+import org.junit.Test;
+
+public class UnitTest {
+
+ @Test
+ public void testSomething() {
+ //TODO add an implementation
+ }
+
+}
diff --git a/org.eclipse.app4mc.converter.cloud/pom.xml b/org.eclipse.app4mc.converter.cloud/pom.xml
new file mode 100644
index 0000000..6082ec2
--- /dev/null
+++ b/org.eclipse.app4mc.converter.cloud/pom.xml
@@ -0,0 +1,431 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <groupId>
+ org.eclipse.app4mc
+ </groupId>
+ <artifactId>
+ org.eclipse.app4mc.converter.cloud
+ </artifactId>
+ <version>
+ 0.9.9-SNAPSHOT
+ </version>
+ <packaging>
+ pom
+ </packaging>
+ <description>
+ The org.eclipse.app4mc.converter.cloud application - built using OSGi enRoute R7
+ </description>
+ <modelVersion>
+ 4.0.0
+ </modelVersion>
+ <modules>
+ <module>
+ converter-app
+ </module>
+ <module>
+ converter-service
+ </module>
+ </modules>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <!-- Define the version of the baseline plugin we use and
+ avoid failing when no baseline jar exists. (for example before the first
+ release) -->
+ <!-- Define the version of the export plugin we use -->
+ <!-- Define the version of the resolver plugin we use -->
+ <!-- Define the version of the testing plugin that we use -->
+ <!-- Required to make the maven-jar-plugin pick up the bnd
+ generated manifest. Also avoid packaging empty Jars -->
+ <!-- Setup the indexer for running and testing -->
+ <!-- Use the bnd-maven-plugin and assemble the symbolic names -->
+ <plugin>
+ <artifactId>
+ bnd-baseline-maven-plugin
+ </artifactId>
+ <configuration>
+ <failOnMissing>
+ false
+ </failOnMissing>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>
+ baseline
+ </goal>
+ </goals>
+ </execution>
+ </executions>
+ <groupId>
+ biz.aQute.bnd
+ </groupId>
+ <version>
+ ${bnd.version}
+ </version>
+ </plugin>
+ <plugin>
+ <artifactId>
+ bnd-export-maven-plugin
+ </artifactId>
+ <configuration>
+ <failOnChanges>
+ true
+ </failOnChanges>
+ <resolve>
+ true
+ </resolve>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>
+ export
+ </goal>
+ </goals>
+ </execution>
+ </executions>
+ <groupId>
+ biz.aQute.bnd
+ </groupId>
+ <version>
+ ${bnd.version}
+ </version>
+ </plugin>
+ <plugin>
+ <artifactId>
+ bnd-indexer-maven-plugin
+ </artifactId>
+ <configuration>
+ <attach>
+ false
+ </attach>
+ <localURLs>
+ REQUIRED
+ </localURLs>
+ </configuration>
+ <executions>
+ <execution>
+ <configuration>
+ <indexName>
+ ${project.artifactId} Test
+ </indexName>
+ <outputFile>
+ ${project.build.directory}/test-index.xml
+ </outputFile>
+ <scopes>
+ <scope>
+ test
+ </scope>
+ </scopes>
+ </configuration>
+ <goals>
+ <goal>
+ index
+ </goal>
+ </goals>
+ <id>
+ test-index
+ </id>
+ </execution>
+ <execution>
+ <configuration>
+ <indexName>
+ ${project.artifactId}
+ </indexName>
+ </configuration>
+ <goals>
+ <goal>
+ index
+ </goal>
+ </goals>
+ <id>
+ index
+ </id>
+ </execution>
+ </executions>
+ <groupId>
+ biz.aQute.bnd
+ </groupId>
+ <version>
+ ${bnd.version}
+ </version>
+ </plugin>
+ <plugin>
+ <artifactId>
+ bnd-maven-plugin
+ </artifactId>
+ <configuration>
+ <bnd>
+ <![CDATA[
+Bundle-SymbolicName: ${project.groupId}.${project.artifactId}
+-sources: true
+-contract: *
+]]>
+ </bnd>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>
+ bnd-process
+ </goal>
+ </goals>
+ </execution>
+ </executions>
+ <groupId>
+ biz.aQute.bnd
+ </groupId>
+ <version>
+ ${bnd.version}
+ </version>
+ </plugin>
+ <plugin>
+ <artifactId>
+ bnd-resolver-maven-plugin
+ </artifactId>
+ <configuration>
+ <bndruns/>
+ <failOnChanges>
+ false
+ </failOnChanges>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>
+ resolve
+ </goal>
+ </goals>
+ </execution>
+ </executions>
+ <groupId>
+ biz.aQute.bnd
+ </groupId>
+ <version>
+ ${bnd.version}
+ </version>
+ </plugin>
+ <plugin>
+ <artifactId>
+ bnd-testing-maven-plugin
+ </artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>
+ testing
+ </goal>
+ </goals>
+ </execution>
+ </executions>
+ <groupId>
+ biz.aQute.bnd
+ </groupId>
+ <version>
+ ${bnd.version}
+ </version>
+ </plugin>
+ <plugin>
+ <artifactId>
+ maven-jar-plugin
+ </artifactId>
+ <configuration>
+ <archive>
+ <manifestFile>
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+ </manifestFile>
+ </archive>
+ <skipIfEmpty>
+ true
+ </skipIfEmpty>
+ </configuration>
+ <groupId>
+ org.apache.maven.plugins
+ </groupId>
+ <version>
+ 3.0.2
+ </version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <artifactId>
+ debug-bundles
+ </artifactId>
+ <groupId>
+ org.osgi.enroute
+ </groupId>
+ <scope>
+ test
+ </scope>
+ <type>
+ pom
+ </type>
+ <version>
+ 7.0.0
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ enterprise-api
+ </artifactId>
+ <groupId>
+ org.osgi.enroute
+ </groupId>
+ <scope>
+ provided
+ </scope>
+ <type>
+ pom
+ </type>
+ <version>
+ 7.0.0
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ impl-index
+ </artifactId>
+ <groupId>
+ org.osgi.enroute
+ </groupId>
+ <scope>
+ runtime
+ </scope>
+ <type>
+ pom
+ </type>
+ <version>
+ 7.0.0
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ org.apache.felix.http.jetty
+ </artifactId>
+ <groupId>
+ org.apache.felix
+ </groupId>
+ <version>
+ 4.0.18
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ osgi-api
+ </artifactId>
+ <groupId>
+ org.osgi.enroute
+ </groupId>
+ <scope>
+ provided
+ </scope>
+ <type>
+ pom
+ </type>
+ <version>
+ 7.0.0
+ </version>
+ </dependency>
+ <dependency>
+ <artifactId>
+ test-bundles
+ </artifactId>
+ <groupId>
+ org.osgi.enroute
+ </groupId>
+ <scope>
+ test
+ </scope>
+ <type>
+ pom
+ </type>
+ <version>
+ 7.0.0
+ </version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>
+ Bnd Snapshots
+ </id>
+ <name>
+ Bnd Latest build
+ </name>
+ <releases>
+ <enabled>
+ false
+ </enabled>
+ </releases>
+ <snapshots>
+ <enabled>
+ true
+ </enabled>
+ </snapshots>
+ <url>
+ http://bndtools.ci.cloudbees.com/job/bnd.master/lastSuccessfulBuild/artifact/dist/bundles/
+ </url>
+ </pluginRepository>
+ </pluginRepositories>
+ <properties>
+ <bnd.version>
+ 4.3.1
+ </bnd.version>
+ <maven.compiler.source>
+ 1.8
+ </maven.compiler.source>
+ <maven.compiler.target>
+ 1.8
+ </maven.compiler.target>
+ <project.build.sourceEncoding>
+ UTF-8
+ </project.build.sourceEncoding>
+ </properties>
+ <repositories>
+ <repository>
+ <id>
+ Apache Snapshots
+ </id>
+ <releases>
+ <enabled>
+ false
+ </enabled>
+ </releases>
+ <snapshots>
+ <enabled>
+ true
+ </enabled>
+ </snapshots>
+ <url>
+ http://repository.apache.org/content/groups/snapshots/
+ </url>
+ </repository>
+ <repository>
+ <id>
+ OSGi
+ </id>
+ <name>
+ OSGi public binaries
+ </name>
+ <releases>
+ <enabled>
+ true
+ </enabled>
+ </releases>
+ <snapshots>
+ <enabled>
+ true
+ </enabled>
+ </snapshots>
+ <url>
+ http://oss.sonatype.org/content/groups/osgi
+ </url>
+ </repository>
+ </repositories>
+</project>
diff --git a/org.eclipse.app4mc.validation.cloud/.mvn/extensions.xml b/org.eclipse.app4mc.validation.cloud/.mvn/extensions.xml
new file mode 100644
index 0000000..c8b79d9
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/.mvn/extensions.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<extensions>
+ <extension>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-pomless</artifactId>
+ <version>1.7.0</version>
+ </extension>
+</extensions>
\ No newline at end of file
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/.classpath b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/.project b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/.project
new file mode 100644
index 0000000..2a243f8
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.app4mc.validation.cloud.http</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ds.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9f6ece8
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/META-INF/MANIFEST.MF b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6f79912
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: APP4MC Validation HTTP Service
+Bundle-SymbolicName: org.eclipse.app4mc.validation.cloud.http
+Bundle-Version: 0.9.9.qualifier
+Automatic-Module-Name: org.eclipse.app4mc.validation.cloud.http
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: com.fasterxml.jackson.core;version="2.9.9",
+ com.fasterxml.jackson.databind;version="2.9.93",
+ javax.servlet;version="3.1.0",
+ javax.servlet.http;version="3.1.0",
+ org.osgi.service.component.annotations;version="1.3.0";resolution:=optional
+Require-Bundle: org.eclipse.app4mc.amalthea.model;bundle-version="0.9.9",
+ org.eclipse.app4mc.validation.core;bundle-version="0.9.9"
+Bundle-ActivationPolicy: lazy
+Service-Component: OSGI-INF/org.eclipse.app4mc.validation.cloud.http.ValidationServlet.xml
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/OSGI-INF/org.eclipse.app4mc.validation.cloud.http.ValidationServlet.xml b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/OSGI-INF/org.eclipse.app4mc.validation.cloud.http.ValidationServlet.xml
new file mode 100644
index 0000000..fa5c28c
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/OSGI-INF/org.eclipse.app4mc.validation.cloud.http.ValidationServlet.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.3.0" name="org.eclipse.app4mc.validation.cloud.http.ValidationServlet">
+ <property name="osgi.http.whiteboard.servlet.pattern" value="/app4mc/validation/*"/>
+ <property name="osgi.http.whiteboard.servlet.multipart.enabled" value="true"/>
+ <service scope="prototype">
+ <provide interface="javax.servlet.Servlet"/>
+ </service>
+ <reference cardinality="1..1" field="manager" interface="org.eclipse.app4mc.validation.util.ProfileManager" name="manager"/>
+ <implementation class="org.eclipse.app4mc.validation.cloud.http.ValidationServlet"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/about.html b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/about.html
new file mode 100644
index 0000000..f87aeb3
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/about.html
@@ -0,0 +1,36 @@
+<!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" lang="en">
+<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>November 30, 2017</p>
+ <h3>License</h3>
+
+ <p>
+ The Eclipse Foundation makes available all content in this plug-in
+ ("Content"). Unless otherwise indicated below, the Content
+ is provided to you under the terms and conditions of the Eclipse
+ Public License Version 2.0 ("EPL"). A copy of the EPL is
+ available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+ For purposes of the EPL, "Program" will mean the Content.
+ </p>
+
+ <p>
+ If you did not receive this Content directly from the Eclipse
+ Foundation, the Content is being redistributed by another party
+ ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor's license that was provided with the Content. If no such
+ license exists, contact the Redistributor. Unless otherwise indicated
+ below, the terms and conditions of the EPL still apply to any source
+ code in the Content and such source code may be obtained at <a
+ href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+ </p>
+
+</body>
+</html>
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/build.properties b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/build.properties
new file mode 100644
index 0000000..79789f3
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ OSGI-INF/,\
+ about.html,\
+ epl-2.0.html
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/epl-2.0.html b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/epl-2.0.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/epl-2.0.html
@@ -0,0 +1,300 @@
+<!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" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Eclipse Public License - Version 2.0</title>
+ <style type="text/css">
+ body {
+ margin: 1.5em 3em;
+ }
+ h1{
+ font-size:1.5em;
+ }
+ h2{
+ font-size:1em;
+ margin-bottom:0.5em;
+ margin-top:1em;
+ }
+ p {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ ul, ol{
+ list-style-type:none;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>Eclipse Public License - v 2.0</h1>
+ <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>
+ <h2 id="definitions">1. DEFINITIONS</h2>
+ <p>“Contribution” means:</p>
+ <ul>
+ <li>a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
+ </li>
+ <li>
+ b) in the case of each subsequent Contributor:
+ <ul>
+ <li>i) changes to the Program, and</li>
+ <li>ii) additions to the Program;</li>
+ </ul>
+ 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 changes or additions to the Program that
+ are not Modified Works.
+ </li>
+ </ul>
+ <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
+ or any Secondary License (as applicable), including Contributors.
+ </p>
+ <p>“Derivative Works” shall mean any work, whether in Source Code or other
+ form, that is based on (or derived from) the Program and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship.
+ </p>
+ <p>“Modified Works” shall mean any work in Source Code or other form that
+ results from an addition to, deletion from, or modification of the
+ contents of the Program, including, for purposes of clarity any new file
+ in Source Code form that contains any contents of the Program. Modified
+ Works shall not include works that contain only declarations, interfaces,
+ types, classes, structures, or files of the Program solely in each case
+ in order to link to, bind by name, or subclass the Program or Modified
+ Works thereof.
+ </p>
+ <p>“Distribute” means the acts of a) distributing or b) making available
+ in any manner that enables the transfer of a copy.
+ </p>
+ <p>“Source Code” means the form of a Program preferred for making
+ modifications, including but not limited to software source code,
+ documentation source, and configuration files.
+ </p>
+ <p>“Secondary License” means either the GNU General Public License,
+ Version 2.0, or any later versions of that license, including any
+ exceptions or additional permissions as identified by the initial
+ Contributor.
+ </p>
+ <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+ <ul>
+ <li>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.
+ </li>
+ <li>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 or other 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.
+ </li>
+ <li>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.
+ </li>
+ <li>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.
+ </li>
+ <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+ makes additional grants to any Recipient (other than those set forth
+ in this Agreement) as a result of such Recipient's receipt of the
+ Program under the terms of a Secondary License (if permitted under
+ the terms of Section 3).
+ </li>
+ </ul>
+ <h2 id="requirements">3. REQUIREMENTS</h2>
+ <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+ <ul>
+ <li>a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
+ </li>
+ <li>
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+ <ul>
+ <li>i) effectively disclaims on behalf of all other 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;
+ </li>
+ <li>ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special, incidental
+ and consequential damages, such as lost profits;
+ </li>
+ <li>iii) does not attempt to limit or alter the recipients' rights in the
+ Source Code under section 3.2; and
+ </li>
+ <li>iv) requires any subsequent distribution of the Program by any party
+ to be under a license that satisfies the requirements of this section 3.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>3.2 When the Program is Distributed as Source Code:</p>
+ <ul>
+ <li>a) it must be made available under this Agreement, or if the Program (i)
+ is combined with other material in a separate file or files made available
+ under a Secondary License, and (ii) the initial Contributor attached to
+ the Source Code the notice described in Exhibit A of this Agreement,
+ then the Program may be made available under the terms of such
+ Secondary Licenses, and
+ </li>
+ <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+ </ul>
+ <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+ attribution notices, disclaimers of warranty, or limitations of liability
+ (‘notices’) contained within the Program from any copy of the Program which
+ they Distribute, provided that Contributors may add their own appropriate
+ notices.
+ </p>
+ <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+ <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>
+ <h2 id="warranty">5. NO WARRANTY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, 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>
+ <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, 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>
+ <h2 id="general">7. GENERAL</h2>
+ <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.
+ </p>
+ <p>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. Nothing in this Agreement is intended
+ to be enforceable by any entity that is not a Contributor or Recipient.
+ No third-party beneficiary rights are created under this Agreement.
+ </p>
+ <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
+ <p>“This Source Code may also be made available under the following
+ Secondary Licenses when the conditions for such availability set forth
+ in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+ version(s), and exceptions or additional permissions here}.”
+ </p>
+ <blockquote>
+ <p>Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+ </p>
+ <p>If it is not possible or desirable to put the notice in a particular file,
+ then You may include the notice in a location (such as a LICENSE file in a
+ relevant directory) where a recipient would be likely to look for
+ such a notice.
+ </p>
+ <p>You may add additional accurate notices of copyright ownership.</p>
+ </blockquote>
+ </body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/src/org/eclipse/app4mc/validation/cloud/http/ValidationServlet.java b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/src/org/eclipse/app4mc/validation/cloud/http/ValidationServlet.java
new file mode 100644
index 0000000..a18631e
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.http/src/org/eclipse/app4mc/validation/cloud/http/ValidationServlet.java
@@ -0,0 +1,271 @@
+/*********************************************************************************
+ * Copyright (c) 2020 Robert Bosch GmbH and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
+ */
+package org.eclipse.app4mc.validation.cloud.http;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.Part;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.io.AmaltheaLoader;
+import org.eclipse.app4mc.validation.core.IProfile;
+import org.eclipse.app4mc.validation.util.ProfileManager;
+import org.eclipse.app4mc.validation.util.ValidationExecutor;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ServiceScope;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@Component(
+ service=Servlet.class,
+ property= {
+ "osgi.http.whiteboard.servlet.pattern=/app4mc/validation/*",
+ "osgi.http.whiteboard.servlet.multipart.enabled=true"
+ },
+ scope=ServiceScope.PROTOTYPE)
+public class ValidationServlet extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ private static final String TEMP_DIR_PREFIX = "app4mc_validation_";
+
+ private final String defaultBaseDir = System.getProperty("java.io.tmpdir");
+
+ @Reference
+ private ProfileManager manager;
+
+ private String[] validatePath(String pathInfo) {
+ // request to /app4mc/validation
+ if (pathInfo == null || pathInfo.equals("/")){
+ return null;
+ }
+
+ String[] splitPath = pathInfo.split("/");
+
+ if (splitPath.length > 3) {
+ return null;
+ }
+
+ return splitPath;
+ }
+
+ // POST /app4mc/validation/upload
+
+ @Override
+ protected void doPost(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+
+ String[] splitPath = validatePath(request.getPathInfo());
+
+ if (splitPath == null || splitPath.length != 2) {
+ response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid path");
+ return;
+ }
+
+ if ("upload".equals(splitPath[1])){
+ Part part = request.getPart("file");
+ if (part != null) {
+ String filename = part.getSubmittedFileName();
+ try (InputStream is = part.getInputStream()) {
+ Path path = Files.createTempDirectory(TEMP_DIR_PREFIX);
+
+ // extract uuid from pathname
+ String uuid = path.toString().substring(path.toString().lastIndexOf('_') + 1);
+
+ Files.copy(is, Paths.get(path.toString(), filename));
+
+ // return uuid
+ response.setContentType("text/html");
+ response.getWriter().write(uuid);
+ return;
+ }
+ }
+ }
+
+ // no content
+ response.setStatus(HttpServletResponse.SC_NO_CONTENT);
+ return;
+ }
+
+ // PUT /app4mc/validation/{id}/validate
+
+ @Override
+ protected void doPut(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+
+ String[] splitPath = validatePath(request.getPathInfo());
+
+ if (splitPath == null || splitPath.length != 3) {
+ response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid path");
+ return;
+ }
+
+ String uuid = splitPath[1];
+ String action = splitPath[2];
+
+ if ("validate".equals(action)) {
+ // trigger validation
+ Path tempFolderPath = Paths.get(defaultBaseDir, TEMP_DIR_PREFIX + uuid);
+ List<Path> modelFilePaths =
+ Files.find(tempFolderPath, 1, (path, attrs) -> path.toString().endsWith(".amxmi"))
+ .collect(Collectors.toList());
+
+ if (modelFilePaths.isEmpty()) {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND, "No model file uploaded!");
+ return;
+ }
+
+ Path modelFilePath = modelFilePaths.get(0);
+
+ // load uploaded model file
+ Amalthea model = AmaltheaLoader.loadFromFile(modelFilePath.toFile());
+
+ if (model == null) {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND, "Error: No model loaded!");
+ return;
+ }
+
+ // get profile selection out of request
+ String[] profiles = request.getParameterValues("profiles");
+ List<String> selectedProfiles = profiles != null ? Arrays.asList(profiles) : Arrays.asList("Amalthea Standard Validations");
+
+ // get selected profiles from profile manager
+ List<Class<? extends IProfile>> profileList = manager.getRegisteredValidationProfiles().values().stream()
+ .filter(profile -> selectedProfiles.contains(profile.getName()))
+ .map(profile -> profile.getProfileClass())
+ .collect(Collectors.toList());
+
+ // TODO execute in background thread and introduce status resource?
+ ValidationExecutor executor = new ValidationExecutor(profileList);
+ executor.validate(model);
+
+ // dump validation result to file
+ Path resultFile = Files.createFile(Paths.get(tempFolderPath.toString(), "validation-results.txt"));
+ try (PrintStream print = new PrintStream(new FileOutputStream(resultFile.toFile()))) {
+ executor.dumpResultMap(print);
+ }
+
+ response.setStatus(HttpServletResponse.SC_OK);
+ return;
+ }
+
+ // no content
+ response.setStatus(HttpServletResponse.SC_NO_CONTENT);
+ return;
+ }
+
+ // GET /app4mc/validation/profiles
+ // GET /app4mc/validation/{id}/download
+
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+
+ String[] splitPath = validatePath(request.getPathInfo());
+
+ if (splitPath == null) {
+ response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid path");
+ return;
+ }
+
+ if (splitPath.length == 2 && "profiles".equals(splitPath[1])) {
+ response.setContentType("application/json");
+ ObjectMapper objectMapper = new ObjectMapper();
+ try {
+ List<String> availableProfiles = manager.getRegisteredValidationProfiles().values().stream()
+ .sorted((p1, p2) -> p1.getName().compareTo(p2.getName()))
+ .map(profile -> profile.getName())
+ .collect(Collectors.toList());
+ String json = objectMapper.writeValueAsString(availableProfiles);
+ response.getWriter().write(json);
+ } catch (JsonProcessingException e) {
+ response.getWriter().write(objectMapper.writeValueAsString(e));
+ }
+
+ return;
+ } else if (splitPath.length == 3 && "download".equals(splitPath[2])) {
+ Path path = Paths.get(defaultBaseDir, TEMP_DIR_PREFIX + splitPath[1], "validation-results.txt");
+
+ response.setContentType("text/plain");
+ response.setHeader("Content-Disposition","attachment; filename=validation-results.txt");
+
+ try (InputStream in = Files.newInputStream(path);
+ OutputStream out = response.getOutputStream()) {
+
+ byte[] buffer = new byte[4096];
+
+ int numBytesRead;
+ while ((numBytesRead = in.read(buffer)) > 0) {
+ out.write(buffer, 0, numBytesRead);
+ }
+ }
+ }
+
+ // no content
+ response.setStatus(HttpServletResponse.SC_NO_CONTENT);
+ return;
+ }
+
+ // DELETE /app4mc/validation/{id}/delete
+
+ @Override
+ protected void doDelete(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+
+ String[] splitPath = validatePath(request.getPathInfo());
+
+ if (splitPath == null || splitPath.length != 3) {
+ response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid path");
+ return;
+ }
+
+ String uuid = splitPath[1];
+ String action = splitPath[2];
+
+ if ("delete".equals(action)) {
+ Path path = Paths.get(defaultBaseDir, TEMP_DIR_PREFIX + uuid);
+
+ Files.walk(path)
+ .sorted(Comparator.reverseOrder())
+ .map(Path::toFile)
+ .forEach(File::delete);
+
+ response.setStatus(HttpServletResponse.SC_OK);
+ return;
+ }
+
+ // no content
+ response.setStatus(HttpServletResponse.SC_NO_CONTENT);
+ return;
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.product/.project b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.product/.project
new file mode 100644
index 0000000..a3ce0b4
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.product/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.app4mc.validation.cloud.product</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.product/about.html b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.product/about.html
new file mode 100644
index 0000000..164f781
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.product/about.html
@@ -0,0 +1,36 @@
+<!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>November 30, 2017</p>
+ <h3>License</h3>
+
+ <p>
+ The Eclipse Foundation makes available all content in this plug-in
+ ("Content"). Unless otherwise indicated below, the Content
+ is provided to you under the terms and conditions of the Eclipse
+ Public License Version 2.0 ("EPL"). A copy of the EPL is
+ available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+ For purposes of the EPL, "Program" will mean the Content.
+ </p>
+
+ <p>
+ If you did not receive this Content directly from the Eclipse
+ Foundation, the Content is being redistributed by another party
+ ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor's license that was provided with the Content. If no such
+ license exists, contact the Redistributor. Unless otherwise indicated
+ below, the terms and conditions of the EPL still apply to any source
+ code in the Content and such source code may be obtained at <a
+ href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+ </p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.product/epl-2.0.html b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.product/epl-2.0.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.product/epl-2.0.html
@@ -0,0 +1,300 @@
+<!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" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Eclipse Public License - Version 2.0</title>
+ <style type="text/css">
+ body {
+ margin: 1.5em 3em;
+ }
+ h1{
+ font-size:1.5em;
+ }
+ h2{
+ font-size:1em;
+ margin-bottom:0.5em;
+ margin-top:1em;
+ }
+ p {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ ul, ol{
+ list-style-type:none;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>Eclipse Public License - v 2.0</h1>
+ <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>
+ <h2 id="definitions">1. DEFINITIONS</h2>
+ <p>“Contribution” means:</p>
+ <ul>
+ <li>a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
+ </li>
+ <li>
+ b) in the case of each subsequent Contributor:
+ <ul>
+ <li>i) changes to the Program, and</li>
+ <li>ii) additions to the Program;</li>
+ </ul>
+ 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 changes or additions to the Program that
+ are not Modified Works.
+ </li>
+ </ul>
+ <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
+ or any Secondary License (as applicable), including Contributors.
+ </p>
+ <p>“Derivative Works” shall mean any work, whether in Source Code or other
+ form, that is based on (or derived from) the Program and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship.
+ </p>
+ <p>“Modified Works” shall mean any work in Source Code or other form that
+ results from an addition to, deletion from, or modification of the
+ contents of the Program, including, for purposes of clarity any new file
+ in Source Code form that contains any contents of the Program. Modified
+ Works shall not include works that contain only declarations, interfaces,
+ types, classes, structures, or files of the Program solely in each case
+ in order to link to, bind by name, or subclass the Program or Modified
+ Works thereof.
+ </p>
+ <p>“Distribute” means the acts of a) distributing or b) making available
+ in any manner that enables the transfer of a copy.
+ </p>
+ <p>“Source Code” means the form of a Program preferred for making
+ modifications, including but not limited to software source code,
+ documentation source, and configuration files.
+ </p>
+ <p>“Secondary License” means either the GNU General Public License,
+ Version 2.0, or any later versions of that license, including any
+ exceptions or additional permissions as identified by the initial
+ Contributor.
+ </p>
+ <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+ <ul>
+ <li>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.
+ </li>
+ <li>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 or other 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.
+ </li>
+ <li>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.
+ </li>
+ <li>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.
+ </li>
+ <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+ makes additional grants to any Recipient (other than those set forth
+ in this Agreement) as a result of such Recipient's receipt of the
+ Program under the terms of a Secondary License (if permitted under
+ the terms of Section 3).
+ </li>
+ </ul>
+ <h2 id="requirements">3. REQUIREMENTS</h2>
+ <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+ <ul>
+ <li>a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
+ </li>
+ <li>
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+ <ul>
+ <li>i) effectively disclaims on behalf of all other 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;
+ </li>
+ <li>ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special, incidental
+ and consequential damages, such as lost profits;
+ </li>
+ <li>iii) does not attempt to limit or alter the recipients' rights in the
+ Source Code under section 3.2; and
+ </li>
+ <li>iv) requires any subsequent distribution of the Program by any party
+ to be under a license that satisfies the requirements of this section 3.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>3.2 When the Program is Distributed as Source Code:</p>
+ <ul>
+ <li>a) it must be made available under this Agreement, or if the Program (i)
+ is combined with other material in a separate file or files made available
+ under a Secondary License, and (ii) the initial Contributor attached to
+ the Source Code the notice described in Exhibit A of this Agreement,
+ then the Program may be made available under the terms of such
+ Secondary Licenses, and
+ </li>
+ <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+ </ul>
+ <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+ attribution notices, disclaimers of warranty, or limitations of liability
+ (‘notices’) contained within the Program from any copy of the Program which
+ they Distribute, provided that Contributors may add their own appropriate
+ notices.
+ </p>
+ <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+ <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>
+ <h2 id="warranty">5. NO WARRANTY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, 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>
+ <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, 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>
+ <h2 id="general">7. GENERAL</h2>
+ <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.
+ </p>
+ <p>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. Nothing in this Agreement is intended
+ to be enforceable by any entity that is not a Contributor or Recipient.
+ No third-party beneficiary rights are created under this Agreement.
+ </p>
+ <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
+ <p>“This Source Code may also be made available under the following
+ Secondary Licenses when the conditions for such availability set forth
+ in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+ version(s), and exceptions or additional permissions here}.”
+ </p>
+ <blockquote>
+ <p>Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+ </p>
+ <p>If it is not possible or desirable to put the notice in a particular file,
+ then You may include the notice in a location (such as a LICENSE file in a
+ relevant directory) where a recipient would be likely to look for
+ such a notice.
+ </p>
+ <p>You may add additional accurate notices of copyright ownership.</p>
+ </blockquote>
+ </body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.product/validation_service.product b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.product/validation_service.product
new file mode 100644
index 0000000..55b3088
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.product/validation_service.product
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product uid="org.eclipse.app4mc.validation.cloud.product" version="0.9.9.qualifier" useFeatures="false" includeLaunchers="true">
+
+ <configIni use="default">
+ </configIni>
+
+ <launcherArgs>
+ <vmArgs>-Dorg.osgi.service.http.port=8080 -Declipse.ignoreApp=true -Dosgi.noShutdown=true
+ </vmArgs>
+ <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts
+ </vmArgsMac>
+ </launcherArgs>
+
+
+ <launcher>
+ <win useIco="false">
+ <bmp/>
+ </win>
+ </launcher>
+
+ <vm>
+ </vm>
+
+ <plugins>
+ <plugin id="com.fasterxml.jackson.core.jackson-annotations"/>
+ <plugin id="com.fasterxml.jackson.core.jackson-core"/>
+ <plugin id="com.fasterxml.jackson.core.jackson-databind"/>
+ <plugin id="com.google.guava"/>
+ <plugin id="com.ibm.icu"/>
+ <plugin id="javax.servlet"/>
+ <plugin id="javax.xml"/>
+ <plugin id="org.apache.commons.cli"/>
+ <plugin id="org.apache.commons.fileupload"/>
+ <plugin id="org.apache.commons.io"/>
+ <plugin id="org.apache.commons.lang"/>
+ <plugin id="org.apache.commons.logging"/>
+ <plugin id="org.apache.commons.math3"/>
+ <plugin id="org.apache.felix.gogo.command"/>
+ <plugin id="org.apache.felix.gogo.runtime"/>
+ <plugin id="org.apache.felix.gogo.shell"/>
+ <plugin id="org.apache.felix.scr"/>
+ <plugin id="org.apache.xerces"/>
+ <plugin id="org.apache.xml.resolver"/>
+ <plugin id="org.apache.xml.serializer"/>
+ <plugin id="org.eclipse.app4mc.amalthea.model"/>
+ <plugin id="org.eclipse.app4mc.amalthea.validations.inchron"/>
+ <plugin id="org.eclipse.app4mc.amalthea.validations.standard"/>
+ <plugin id="org.eclipse.app4mc.amalthea.validations.ta"/>
+ <plugin id="org.eclipse.app4mc.validation.cloud.http"/>
+ <plugin id="org.eclipse.app4mc.validation.core"/>
+ <plugin id="org.eclipse.core.commands"/>
+ <plugin id="org.eclipse.core.contenttype"/>
+ <plugin id="org.eclipse.core.expressions"/>
+ <plugin id="org.eclipse.core.filesystem"/>
+ <plugin id="org.eclipse.core.jobs"/>
+ <plugin id="org.eclipse.core.resources"/>
+ <plugin id="org.eclipse.core.runtime"/>
+ <plugin id="org.eclipse.emf.common"/>
+ <plugin id="org.eclipse.emf.ecore"/>
+ <plugin id="org.eclipse.emf.ecore.change"/>
+ <plugin id="org.eclipse.emf.ecore.xcore.lib"/>
+ <plugin id="org.eclipse.emf.ecore.xmi"/>
+ <plugin id="org.eclipse.emf.edit"/>
+ <plugin id="org.eclipse.emf.transaction"/>
+ <plugin id="org.eclipse.emf.validation"/>
+ <plugin id="org.eclipse.emf.workspace"/>
+ <plugin id="org.eclipse.equinox.app"/>
+ <plugin id="org.eclipse.equinox.common"/>
+ <plugin id="org.eclipse.equinox.console"/>
+ <plugin id="org.eclipse.equinox.http.jetty"/>
+ <plugin id="org.eclipse.equinox.http.servlet"/>
+ <plugin id="org.eclipse.equinox.preferences"/>
+ <plugin id="org.eclipse.equinox.registry"/>
+ <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.osgi.util"/>
+ <plugin id="org.eclipse.sphinx.emf"/>
+ <plugin id="org.eclipse.sphinx.emf.workspace"/>
+ <plugin id="org.eclipse.sphinx.platform"/>
+ <plugin id="org.eclipse.xtend.lib"/>
+ <plugin id="org.eclipse.xtend.lib.macro"/>
+ <plugin id="org.eclipse.xtext.xbase.lib"/>
+ <plugin id="org.jdom"/>
+ <plugin id="org.slf4j.api"/>
+ </plugins>
+
+ <configurations>
+ <plugin id="org.apache.felix.scr" autoStart="true" startLevel="0" />
+ <plugin id="org.eclipse.equinox.http.jetty" autoStart="true" startLevel="0" />
+ <plugin id="org.eclipse.jetty.server" autoStart="true" startLevel="0" />
+ </configurations>
+
+</product>
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/.project b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/.project
new file mode 100644
index 0000000..10f38f7
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.app4mc.validation.cloud.target</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/about.html b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/about.html
new file mode 100644
index 0000000..164f781
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/about.html
@@ -0,0 +1,36 @@
+<!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>November 30, 2017</p>
+ <h3>License</h3>
+
+ <p>
+ The Eclipse Foundation makes available all content in this plug-in
+ ("Content"). Unless otherwise indicated below, the Content
+ is provided to you under the terms and conditions of the Eclipse
+ Public License Version 2.0 ("EPL"). A copy of the EPL is
+ available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+ For purposes of the EPL, "Program" will mean the Content.
+ </p>
+
+ <p>
+ If you did not receive this Content directly from the Eclipse
+ Foundation, the Content is being redistributed by another party
+ ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor's license that was provided with the Content. If no such
+ license exists, contact the Redistributor. Unless otherwise indicated
+ below, the terms and conditions of the EPL still apply to any source
+ code in the Content and such source code may be obtained at <a
+ href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+ </p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/epl-2.0.html b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/epl-2.0.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/epl-2.0.html
@@ -0,0 +1,300 @@
+<!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" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Eclipse Public License - Version 2.0</title>
+ <style type="text/css">
+ body {
+ margin: 1.5em 3em;
+ }
+ h1{
+ font-size:1.5em;
+ }
+ h2{
+ font-size:1em;
+ margin-bottom:0.5em;
+ margin-top:1em;
+ }
+ p {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ ul, ol{
+ list-style-type:none;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>Eclipse Public License - v 2.0</h1>
+ <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>
+ <h2 id="definitions">1. DEFINITIONS</h2>
+ <p>“Contribution” means:</p>
+ <ul>
+ <li>a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
+ </li>
+ <li>
+ b) in the case of each subsequent Contributor:
+ <ul>
+ <li>i) changes to the Program, and</li>
+ <li>ii) additions to the Program;</li>
+ </ul>
+ 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 changes or additions to the Program that
+ are not Modified Works.
+ </li>
+ </ul>
+ <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
+ or any Secondary License (as applicable), including Contributors.
+ </p>
+ <p>“Derivative Works” shall mean any work, whether in Source Code or other
+ form, that is based on (or derived from) the Program and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship.
+ </p>
+ <p>“Modified Works” shall mean any work in Source Code or other form that
+ results from an addition to, deletion from, or modification of the
+ contents of the Program, including, for purposes of clarity any new file
+ in Source Code form that contains any contents of the Program. Modified
+ Works shall not include works that contain only declarations, interfaces,
+ types, classes, structures, or files of the Program solely in each case
+ in order to link to, bind by name, or subclass the Program or Modified
+ Works thereof.
+ </p>
+ <p>“Distribute” means the acts of a) distributing or b) making available
+ in any manner that enables the transfer of a copy.
+ </p>
+ <p>“Source Code” means the form of a Program preferred for making
+ modifications, including but not limited to software source code,
+ documentation source, and configuration files.
+ </p>
+ <p>“Secondary License” means either the GNU General Public License,
+ Version 2.0, or any later versions of that license, including any
+ exceptions or additional permissions as identified by the initial
+ Contributor.
+ </p>
+ <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+ <ul>
+ <li>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.
+ </li>
+ <li>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 or other 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.
+ </li>
+ <li>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.
+ </li>
+ <li>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.
+ </li>
+ <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+ makes additional grants to any Recipient (other than those set forth
+ in this Agreement) as a result of such Recipient's receipt of the
+ Program under the terms of a Secondary License (if permitted under
+ the terms of Section 3).
+ </li>
+ </ul>
+ <h2 id="requirements">3. REQUIREMENTS</h2>
+ <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+ <ul>
+ <li>a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
+ </li>
+ <li>
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+ <ul>
+ <li>i) effectively disclaims on behalf of all other 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;
+ </li>
+ <li>ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special, incidental
+ and consequential damages, such as lost profits;
+ </li>
+ <li>iii) does not attempt to limit or alter the recipients' rights in the
+ Source Code under section 3.2; and
+ </li>
+ <li>iv) requires any subsequent distribution of the Program by any party
+ to be under a license that satisfies the requirements of this section 3.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>3.2 When the Program is Distributed as Source Code:</p>
+ <ul>
+ <li>a) it must be made available under this Agreement, or if the Program (i)
+ is combined with other material in a separate file or files made available
+ under a Secondary License, and (ii) the initial Contributor attached to
+ the Source Code the notice described in Exhibit A of this Agreement,
+ then the Program may be made available under the terms of such
+ Secondary Licenses, and
+ </li>
+ <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+ </ul>
+ <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+ attribution notices, disclaimers of warranty, or limitations of liability
+ (‘notices’) contained within the Program from any copy of the Program which
+ they Distribute, provided that Contributors may add their own appropriate
+ notices.
+ </p>
+ <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+ <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>
+ <h2 id="warranty">5. NO WARRANTY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, 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>
+ <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, 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>
+ <h2 id="general">7. GENERAL</h2>
+ <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.
+ </p>
+ <p>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. Nothing in this Agreement is intended
+ to be enforceable by any entity that is not a Contributor or Recipient.
+ No third-party beneficiary rights are created under this Agreement.
+ </p>
+ <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
+ <p>“This Source Code may also be made available under the following
+ Secondary Licenses when the conditions for such availability set forth
+ in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+ version(s), and exceptions or additional permissions here}.”
+ </p>
+ <blockquote>
+ <p>Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+ </p>
+ <p>If it is not possible or desirable to put the notice in a particular file,
+ then You may include the notice in a location (such as a LICENSE file in a
+ relevant directory) where a recipient would be likely to look for
+ such a notice.
+ </p>
+ <p>You may add additional accurate notices of copyright ownership.</p>
+ </blockquote>
+ </body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/org.eclipse.app4mc.validation.cloud.target.target b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/org.eclipse.app4mc.validation.cloud.target.target
new file mode 100644
index 0000000..56986e8
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/org.eclipse.app4mc.validation.cloud.target.target
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde?>
+<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --><target name="Amalthea Validation Cloud Target" sequenceNumber="1595339203">
+ <locations>
+ <location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
+ <unit id="org.eclipse.sdk.feature.group" version="4.14.0.v20191210-0610"/>
+ <unit id="org.eclipse.equinox.sdk.feature.group" version="3.20.0.v20191122-2104"/>
+ <unit id="org.eclipse.equinox.compendium.sdk.feature.group" version="3.20.0.v20191107-1453"/>
+ <unit id="org.eclipse.equinox.server.jetty.feature.group" version="1.10.100.v20191122-1941"/>
+ <unit id="javax.xml" version="1.3.4.v201005080400"/>
+ <unit id="org.jdom" version="1.1.1.v201101151400"/>
+ <unit id="com.google.guava" version="27.1.0.v20190517-1946"/>
+ <unit id="com.google.inject" version="3.0.0.v201605172100"/>
+ <unit id="org.slf4j.api" version="1.7.2.v20121108-1250"/>
+ <unit id="org.slf4j.impl.log4j12" version="1.7.2.v20131105-2200"/>
+ <unit id="org.apache.commons.cli" version="1.2.0.v201404270220"/>
+ <unit id="org.apache.commons.lang" version="2.6.0.v201404270220"/>
+ <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
+ <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
+ <unit id="org.apache.xalan" version="2.7.1.v201005080400"/>
+ <unit id="org.apache.xerces" version="2.9.0.v201101211617"/>
+ <unit id="org.apache.xml.resolver" version="1.2.0.v201005080400"/>
+ <unit id="org.apache.xml.serializer" version="2.7.1.v201005080400"/>
+ <unit id="org.apache.felix.gogo.command" version="1.0.2.v20170914-1324"/>
+ <unit id="org.apache.felix.gogo.runtime" version="1.1.0.v20180713-1646"/>
+ <unit id="org.apache.felix.gogo.shell" version="1.1.0.v20180713-1646"/>
+ <unit id="org.eclipse.equinox.console" version="1.4.0.v20190819-1430"/>
+ <unit id="org.eclipse.emf.sdk.feature.group" version="2.20.0.v20191028-0905"/>
+ <unit id="org.eclipse.emf.ecore.xcore.sdk.feature.group" version="1.12.0.v20190924-0817"/>
+ <unit id="org.eclipse.emf.transaction.sdk.feature.group" version="1.12.0.201805140824"/>
+ <unit id="org.eclipse.emf.validation.feature.group" version="1.12.1.201812070911"/>
+ <unit id="org.eclipse.xtend.sdk.feature.group" version="2.20.0.v20191202-1256"/>
+ <unit id="org.eclipse.xtend.lib" version="2.20.0.v20191202-0907"/>
+ <unit id="org.eclipse.xtend.lib.macro" version="2.20.0.v20191202-0907"/>
+ <unit id="org.eclipse.xtext.xbase.lib.feature.group" version="2.20.0.v20191202-0910"/>
+ <repository location="http://download.eclipse.org/releases/2019-12"/>
+ </location>
+ <location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
+ <unit id="org.eclipse.app4mc.amalthea.models.feature.group" version="0.0.0"/>
+ <unit id="org.eclipse.app4mc.validation.feature.group" version="0.0.0"/>
+ <repository location="https://download.eclipse.org/app4mc/updatesites/snapshot/"/>
+ </location>
+ <location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
+ <unit id="org.jaxen" version="1.1.6.v20191106-1554"/>
+ <unit id="org.jdom2" version="2.0.6.v20191125-0928"/>
+ <unit id="org.apache.commons.math" version="2.1.0.v201105210652"/>
+ <unit id="org.apache.commons.math3" version="3.5.0.v20190611-1023"/>
+ <unit id="org.apache.commons.fileupload" version="1.3.2.v20170320-2229"/>
+ <unit id="com.fasterxml.jackson.core.jackson-core" version="2.9.9.v20190906-1522"/>
+ <unit id="com.fasterxml.jackson.core.jackson-databind" version="2.9.93.v20190906-1522"/>
+ <unit id="com.fasterxml.jackson.core.jackson-annotations" version="2.9.9.v20190906-1522"/>
+ <repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository"/>
+ </location>
+ <location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
+ <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.11.2.201802230805"/>
+ <repository location="https://download.eclipse.org/sphinx/updates/0.11.x"/>
+ </location>
+ <location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
+ <unit id="org.eclipse.license.feature.group" version="2.0.2.v20181016-2210"/>
+ <repository location="http://download.eclipse.org/cbi/updates/license"/>
+ </location>
+ </locations>
+</target>
\ No newline at end of file
diff --git a/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/org.eclipse.app4mc.validation.cloud.target.tpd b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/org.eclipse.app4mc.validation.cloud.target.tpd
new file mode 100644
index 0000000..a80451f
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/org.eclipse.app4mc.validation.cloud.target/org.eclipse.app4mc.validation.cloud.target.tpd
@@ -0,0 +1,60 @@
+target "Amalthea Validation Cloud Target"
+
+with source allEnvironments
+
+location "http://download.eclipse.org/releases/2019-12" {
+ org.eclipse.sdk.feature.group
+ org.eclipse.equinox.sdk.feature.group
+ org.eclipse.equinox.compendium.sdk.feature.group
+ org.eclipse.equinox.server.jetty.feature.group
+ javax.xml
+ org.jdom
+ com.google.guava
+ com.google.inject
+ org.slf4j.api [1.7.2,1.7.3)
+ org.slf4j.impl.log4j12 [1.7.2,2.0.0)
+ org.apache.commons.cli
+ org.apache.commons.lang
+ org.apache.commons.logging
+ org.apache.log4j [1.2.15,1.3.0)
+ org.apache.xalan [2.7.1,2.7.2)
+ org.apache.xerces [2.9.0,2.10.0)
+ org.apache.xml.resolver [1.2.0,1.2.1)
+ org.apache.xml.serializer [2.7.1,2.7.2)
+ org.apache.felix.gogo.command [1.0.2,1.1.0)
+ org.apache.felix.gogo.runtime [1.1.0,1.2.0)
+ org.apache.felix.gogo.shell [1.1.0,1.2.0)
+ org.eclipse.equinox.console [1.4.0,1.5.0)
+ org.eclipse.emf.sdk.feature.group
+ org.eclipse.emf.ecore.xcore.sdk.feature.group
+ org.eclipse.emf.transaction.sdk.feature.group
+ org.eclipse.emf.validation.feature.group
+ org.eclipse.xtend.sdk.feature.group
+ org.eclipse.xtend.lib
+ org.eclipse.xtend.lib.macro
+ org.eclipse.xtext.xbase.lib.feature.group
+}
+
+location "https://download.eclipse.org/app4mc/updatesites/snapshot/" {
+ org.eclipse.app4mc.amalthea.models.feature.group
+ org.eclipse.app4mc.validation.feature.group
+}
+
+location "http://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository" {
+ org.jaxen [1.1.6,1.1.7)
+ org.jdom2 [2.0.6,2.0.7)
+ org.apache.commons.math
+ org.apache.commons.math3
+ org.apache.commons.fileupload
+ com.fasterxml.jackson.core.jackson-core
+ com.fasterxml.jackson.core.jackson-databind
+ com.fasterxml.jackson.core.jackson-annotations
+}
+
+location "https://download.eclipse.org/sphinx/updates/0.11.x" {
+ org.eclipse.sphinx.sdk.feature.group
+}
+
+location "http://download.eclipse.org/cbi/updates/license" {
+ org.eclipse.license.feature.group
+}
\ No newline at end of file
diff --git a/org.eclipse.app4mc.validation.cloud/pom.xml b/org.eclipse.app4mc.validation.cloud/pom.xml
new file mode 100644
index 0000000..53f3521
--- /dev/null
+++ b/org.eclipse.app4mc.validation.cloud/pom.xml
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.eclipse.app4mc</groupId>
+ <artifactId>org.eclipse.app4mc.validation.cloud</artifactId>
+ <version>0.9.9-SNAPSHOT</version>
+
+ <packaging>pom</packaging>
+
+ <url>http://projects.eclipse.org/projects/technology.app4mc</url>
+ <name>APP4MC Validation Cloud Service</name>
+
+ <properties>
+ <app4mc.version>0.9.9-SNAPSHOT</app4mc.version>
+
+ <tycho.version>1.7.0</tycho.version>
+
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <maven.build.timestamp.format>yyyyMMdd-HHmmss</maven.build.timestamp.format>
+
+ </properties>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>cbi</id>
+ <url>https://repo.eclipse.org/content/repositories/cbi-releases/</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <modules>
+ <module>org.eclipse.app4mc.validation.cloud.target</module>
+ <module>org.eclipse.app4mc.validation.cloud.http</module>
+ <module>org.eclipse.app4mc.validation.cloud.product</module>
+ </modules>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.cbi.maven.plugins</groupId>
+ <artifactId>eclipse-jarsigner-plugin</artifactId>
+ <version>1.1.3</version>
+ <executions>
+ <execution>
+ <id>sign</id>
+ <phase>package</phase>
+ <goals>
+ <goal>sign</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-packaging-plugin</artifactId>
+ <version>${tycho.version}</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-buildtimestamp-jgit</artifactId>
+ <version>${tycho.version}</version>
+ </dependency>
+ </dependencies>
+
+ <configuration>
+ <timestampProvider>jgit</timestampProvider>
+ <jgit.ignore>pom.xml</jgit.ignore>
+ <jgit.dirtyWorkingTree>ignore</jgit.dirtyWorkingTree>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-repository-plugin</artifactId>
+ <version>${tycho.version}</version>
+ </plugin>
+
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-plugin</artifactId>
+ <version>${tycho.version}</version>
+ </plugin>
+
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-director-plugin</artifactId>
+ <version>${tycho.version}</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>target-platform-configuration</artifactId>
+ <version>${tycho.version}</version>
+
+ <configuration>
+ <environments>
+ <environment>
+ <os>win32</os>
+ <ws>win32</ws>
+ <arch>x86_64</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>
+
+ <target>
+ <artifact>
+ <groupId>org.eclipse.app4mc</groupId>
+ <artifactId>org.eclipse.app4mc.validation.cloud.target</artifactId>
+ <version>${app4mc.version}</version>
+ </artifact>
+ </target>
+ <targetDefinitionIncludeSource>honor</targetDefinitionIncludeSource>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-maven-plugin</artifactId>
+ <version>${tycho.version}</version>
+
+ <extensions>true</extensions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ <version>${tycho.version}</version>
+
+ <executions>
+ <execution>
+ <id>plugin-source</id>
+ <goals>
+ <goal>plugin-source</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-surefire-plugin</artifactId>
+ <version>${tycho.version}</version>
+
+ <configuration>
+ <includes>
+ <forkMode>never</forkMode>
+ <include>**/*Test.java</include>
+ <include>**/*Tests.java</include>
+ </includes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>sign</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.cbi.maven.plugins</groupId>
+ <artifactId>eclipse-jarsigner-plugin</artifactId>
+ <version>1.1.3</version>
+ <executions>
+ <execution>
+ <id>sign</id>
+ <phase>package</phase>
+ <goals>
+ <goal>sign</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
\ No newline at end of file