This repository contains projects that wrap APP4MC features into REST based services.

- org.eclipse.app4mc.cloud.migration
  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.cloud.migration/migration-app/target/migration-app.jar
  
- org.eclipse.app4mc.cloud.validation
  Provides the APP4MC Validation 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 Model and Validation JARs from a Maven repository. As right now APP4MC does not publish to Maven Central, you need to build
    APP4MC Platform 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.cloud.validation/validation-app/target/validation-app.jar
  
- org.eclipse.app4mc.cloud.amlt2systemc
  Provides the APP4MC AMLT2SystemC transformation 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 Model, Transformation and Amlt2SystemC JARs from a Maven repository. As right now APP4MC does not publish to Maven Central, you need to build
    APP4MC Platform, APP4MC Transformation and APP4MC Amlt2SystemC 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.cloud.amlt2systemc/amlt2systemc-app/target/amlt2systemc-app.jar

- manager
  Spring Boot application to manage a complete workflow to process an Amalthea model.
  It is recommended to use Spring Toolsuite for best development experience.
  The server can be started from the Toolsuite in the Boot Dashboard or by executing "mvn spring-boot:run" on the command line.
  The server port can be changed in manager/app4mc-cloud-manager-app/src/main/resources/application.properties.