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
+		(&quot;Content&quot;). Unless otherwise indicated below, the Content
+		is provided to you under the terms and conditions of the Eclipse
+		Public License Version 2.0 (&quot;EPL&quot;). 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, &quot;Program&quot; will mean the Content.
+	</p>
+
+	<p>
+		If you did not receive this Content directly from the Eclipse
+		Foundation, the Content is being redistributed by another party
+		(&quot;Redistributor&quot;) and different terms and conditions may
+		apply to your use of any object code in the Content. Check the
+		Redistributor's license that was provided with the Content. If no such
+		license exists, contact the Redistributor. Unless otherwise indicated
+		below, the terms and conditions of the EPL still apply to any source
+		code in the Content and such source code may be obtained at <a
+			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+	</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.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 (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; 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
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; 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>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; 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>&ldquo;Modified Works&rdquo; 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>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; 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>&ldquo;Secondary License&rdquo; 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&#039;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&#039;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&#039; 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
+      (&lsquo;notices&rsquo;) 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 (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) 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&#039;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 &ldquo;AS IS&rdquo; 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&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;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&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;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 &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;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}.&rdquo;
+    </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
+		(&quot;Content&quot;). Unless otherwise indicated below, the Content
+		is provided to you under the terms and conditions of the Eclipse
+		Public License Version 2.0 (&quot;EPL&quot;). 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, &quot;Program&quot; will mean the Content.
+	</p>
+
+	<p>
+		If you did not receive this Content directly from the Eclipse
+		Foundation, the Content is being redistributed by another party
+		(&quot;Redistributor&quot;) and different terms and conditions may
+		apply to your use of any object code in the Content. Check the
+		Redistributor's license that was provided with the Content. If no such
+		license exists, contact the Redistributor. Unless otherwise indicated
+		below, the terms and conditions of the EPL still apply to any source
+		code in the Content and such source code may be obtained at <a
+			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+	</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.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 (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; 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
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; 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>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; 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>&ldquo;Modified Works&rdquo; 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>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; 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>&ldquo;Secondary License&rdquo; 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&#039;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&#039;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&#039; 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
+      (&lsquo;notices&rsquo;) 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 (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) 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&#039;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 &ldquo;AS IS&rdquo; 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&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;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&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;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 &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;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}.&rdquo;
+    </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
+		(&quot;Content&quot;). Unless otherwise indicated below, the Content
+		is provided to you under the terms and conditions of the Eclipse
+		Public License Version 2.0 (&quot;EPL&quot;). 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, &quot;Program&quot; will mean the Content.
+	</p>
+
+	<p>
+		If you did not receive this Content directly from the Eclipse
+		Foundation, the Content is being redistributed by another party
+		(&quot;Redistributor&quot;) and different terms and conditions may
+		apply to your use of any object code in the Content. Check the
+		Redistributor's license that was provided with the Content. If no such
+		license exists, contact the Redistributor. Unless otherwise indicated
+		below, the terms and conditions of the EPL still apply to any source
+		code in the Content and such source code may be obtained at <a
+			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+	</p>
+
+</body>
+</html>
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 (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; 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
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; 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>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; 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>&ldquo;Modified Works&rdquo; 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>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; 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>&ldquo;Secondary License&rdquo; 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&#039;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&#039;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&#039; 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
+      (&lsquo;notices&rsquo;) 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 (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) 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&#039;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 &ldquo;AS IS&rdquo; 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&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;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&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;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 &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;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}.&rdquo;
+    </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
+		(&quot;Content&quot;). Unless otherwise indicated below, the Content
+		is provided to you under the terms and conditions of the Eclipse
+		Public License Version 2.0 (&quot;EPL&quot;). 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, &quot;Program&quot; will mean the Content.
+	</p>
+
+	<p>
+		If you did not receive this Content directly from the Eclipse
+		Foundation, the Content is being redistributed by another party
+		(&quot;Redistributor&quot;) and different terms and conditions may
+		apply to your use of any object code in the Content. Check the
+		Redistributor's license that was provided with the Content. If no such
+		license exists, contact the Redistributor. Unless otherwise indicated
+		below, the terms and conditions of the EPL still apply to any source
+		code in the Content and such source code may be obtained at <a
+			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+	</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.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 (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; 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
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; 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>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; 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>&ldquo;Modified Works&rdquo; 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>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; 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>&ldquo;Secondary License&rdquo; 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&#039;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&#039;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&#039; 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
+      (&lsquo;notices&rsquo;) 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 (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) 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&#039;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 &ldquo;AS IS&rdquo; 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&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;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&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;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 &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;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}.&rdquo;
+    </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
+		(&quot;Content&quot;). Unless otherwise indicated below, the Content
+		is provided to you under the terms and conditions of the Eclipse
+		Public License Version 2.0 (&quot;EPL&quot;). 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, &quot;Program&quot; will mean the Content.
+	</p>
+
+	<p>
+		If you did not receive this Content directly from the Eclipse
+		Foundation, the Content is being redistributed by another party
+		(&quot;Redistributor&quot;) and different terms and conditions may
+		apply to your use of any object code in the Content. Check the
+		Redistributor's license that was provided with the Content. If no such
+		license exists, contact the Redistributor. Unless otherwise indicated
+		below, the terms and conditions of the EPL still apply to any source
+		code in the Content and such source code may be obtained at <a
+			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+	</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.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 (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; 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
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; 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>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; 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>&ldquo;Modified Works&rdquo; 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>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; 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>&ldquo;Secondary License&rdquo; 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&#039;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&#039;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&#039; 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
+      (&lsquo;notices&rsquo;) 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 (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) 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&#039;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 &ldquo;AS IS&rdquo; 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&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;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&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;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 &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;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}.&rdquo;
+    </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