1. Implemented workflow init container.
2. Implemented workflow backend container.
3. Added a placeholder for frontend module container.
4. Modifiled directory structure and POM files.
5. Added a ReadMe with sample commands to detail how to run the containers.
Change-Id: Ib110fcc104ce72ff28fce514a1475a032cc2d82b
Issue-ID: SDC-1482
Signed-off-by: priyanshu <pagarwal@amdocs.com>
Signed-off-by: vempo <vitaliy.emporopulo@amdocs.com>
Signed-off-by: priyanshu <pagarwal@amdocs.com>
+++ /dev/null
-server.servlet.context-path=/wf
-server.port=8080
-
-#CASSANDRA
-spring.data.cassandra.contact-points=localhost
-spring.data.cassandra.keyspace-name=workflow
-spring.data.cassandra.port=9042
\ No newline at end of file
--- /dev/null
+# Steps to run the Workflow application on Docker
+
+## 1. Initialize Workflow Database
+
+`docker run -d -e CS_HOST={HOST} -e CS_PORT={PORT} -e CS_USER={USER} -e CS_PASSWORD={PASSWORD} {INIT_IMAGE}`
+
+This is done only once to initialize the DB schema.
+
+**Example**
+
+`docker run -d -e CS_HOST=10.247.41.19 -e CS_USER=test -e CS_PASSWORD=secret -e CS_PORT=9160 onap/workflow-init:latest`
+
+## 2. Start Backend
+
+`docker run -d -e JAVA_OPTIONS={JAVA_OPTIONS} -e CS_HOSTS={COMMA_SEPARATED_HOSTS} -e CS_PORT={PORT}
+-e CS_USER={USER} -e CS_PASSWORD={PASSWORD} -p {HOST_PORT}:{APPLICATION_PORT} {BACKEND_IMAGE}`
+
+or, if Cassandra authentication is not required
+
+`docker run -d -e JAVA_OPTIONS={JAVA_OPTIONS} -e CS_HOSTS={COMMA_SEPARATED_HOSTS} -e CS_PORT={PORT}
+-e CS_AUTHENTICATE=false -p {HOST_PORT}:{APPLICATION_PORT} {BACKEND_IMAGE}`
+
+The server listens on 8080 by default, but it is possible to change the application port by passing
+`-e SERVER_PORT={PORT}` to Docker _run_ command.
+
+**Example**
+
+`docker run -d -e JAVA_OPTIONS="-Xmx128m -Xms128m -Xss1m" -e CS_HOSTS=10.247.41.19,10.247.41.20
+-e CS_PORT=9042 -e CS_AUTHENTICATE=false -p 8080:8080 onap/workflow-backend:latest`
\ No newline at end of file
--- /dev/null
+<project
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ 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.onap.sdc.workflow_designer</groupId>
+ <artifactId>workflow-designer-parent</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <onap.version>1.3.0-SNAPSHOT</onap.version>
+ <mvn.docker.version>0.23.0</mvn.docker.version>
+ <docker.optimize>true</docker.optimize>
+ <docker.username>docker</docker.username>
+ <docker.password>docker</docker.password>
+ <nexus.registry>nexus3.onap.org:10001</nexus.registry>
+ <nexus.proxy>https://nexus.onap.org</nexus.proxy>
+ <sitePath>/content/sites/site/org/onap/sdc/workflow/${project.version}</sitePath>
+ </properties>
+
+ <modules>
+ <module>workflow-designer-init</module>
+ <module>workflow-designer-be</module>
+ <module>workflow-designer-ui</module>
+ </modules>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>io.fabric8</groupId>
+ <artifactId>docker-maven-plugin</artifactId>
+ <version>${mvn.docker.version}</version>
+ <configuration>
+ <verbose>false</verbose>
+ <registry>${nexus.registry}</registry>
+ <authConfig>
+ <pull>
+ <username>${docker.username}</username>
+ <password>${docker.password}</password>
+ </pull>
+ </authConfig>
+ </configuration>
+ <executions>
+ <execution>
+ <id>docker-build</id>
+ <phase>install</phase>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>push-images</id>
+ <phase>deploy</phase>
+ <goals>
+ <goal>push</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <repositories>
+ <repository>
+ <id>ecomp-releases</id>
+ <name>Release Repository</name>
+ <url>${nexus.proxy}/content/repositories/releases/</url>
+ </repository>
+ <repository>
+ <id>ecomp-snapshots</id>
+ <name>Snapshots Repository</name>
+ <url>${nexus.proxy}/content/repositories/snapshots/</url>
+ </repository>
+ <repository>
+ <id>ecomp-public</id>
+ <name>Public Repository</name>
+ <url>${nexus.proxy}/content/repositories/public/</url>
+ </repository>
+ </repositories>
+ <distributionManagement>
+ <repository>
+ <id>ecomp-releases</id>
+ <name>Release Repository</name>
+ <url>${nexus.proxy}/content/repositories/releases/</url>
+ </repository>
+ <snapshotRepository>
+ <id>ecomp-snapshots</id>
+ <name>Snapshot Repository</name>
+ <url>${nexus.proxy}/content/repositories/snapshots/</url>
+ </snapshotRepository>
+ <site>
+ <id>ecomp-site</id>
+ <url>dav:${nexus.proxy}${sitePath}</url>
+ </site>
+ </distributionManagement>
+
+</project>
\ No newline at end of file
<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.onap.sdc.workflow</groupId>
- <artifactId>workflow-be</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <artifactId>workflow-designer-be</artifactId>
+
<parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.0.2.RELEASE</version>
+ <groupId>org.onap.sdc.workflow_designer</groupId>
+ <artifactId>workflow-designer-parent</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
</parent>
+
<properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <java.version>1.8</java.version>
- <onap.version>1.3.0-SNAPSHOT</onap.version>
- <org.mapstruct.version>1.2.0.Final</org.mapstruct.version>
- <org.projectlombok.version>1.18.0</org.projectlombok.version>
+ <maven.compiler.source>1.8</maven.compiler.source>
+ <maven.compiler.target>1.8</maven.compiler.target>
+ <spring.boot.version>2.0.3.RELEASE</spring.boot.version>
+ <mapstruct.version>1.2.0.Final</mapstruct.version>
+ <lombok.version>1.18.0</lombok.version>
+ <springfox.version>2.8.0</springfox.version>
</properties>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-dependencies</artifactId>
+ <version>${spring.boot.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
-
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-cassandra</artifactId>
</dependency>
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>${org.projectlombok.version}</version>
- <scope>provided</scope>
- </dependency>
-
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
+ <scope>runtime</scope>
</dependency>
-
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
-
-
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
- <version>2.8.0</version>
- <scope>compile</scope>
+ <version>${springfox.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
- <version>2.8.0</version>
- <scope>compile</scope>
+ <version>${springfox.version}</version>
</dependency>
<dependency>
<groupId>org.openecomp.sdc</groupId>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
- <version>${org.mapstruct.version}</version>
+ <version>${mapstruct.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.mapstruct</groupId>
+ <artifactId>mapstruct-processor</artifactId>
+ <version>${mapstruct.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ <version>${lombok.version}</version>
+ <scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
- <configuration>
- <source>${java.version}</source>
- <target>${java.version}</target>
- <annotationProcessorPaths>
- <path>
- <groupId>org.mapstruct</groupId>
- <artifactId>mapstruct-processor</artifactId>
- <version>${org.mapstruct.version}</version>
- </path>
- <path>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>${lombok.version}</version>
- </path>
- </annotationProcessorPaths>
- </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-maven-plugin</artifactId>
+ <version>${spring.boot.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>repackage</goal>
+ </goals>
+ </execution>
+ </executions>
</plugin>
</plugins>
</build>
+
+ <profiles>
+ <profile>
+ <id>docker</id>
+ <activation>
+ <activeByDefault>false</activeByDefault>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.fabric8</groupId>
+ <artifactId>docker-maven-plugin</artifactId>
+ <configuration>
+ <images>
+ <image>
+ <name>onap/workflow-backend</name>
+ <build>
+ <tags>
+ <tag>${project.version}</tag>
+ </tags>
+ <from>openjdk:8-jdk-alpine</from>
+ <user>root</user>
+ <assembly>
+ <descriptorRef>artifact</descriptorRef>
+ <targetDir>/</targetDir>
+ </assembly>
+ <entryPoint>java ${JAVA_OPTIONS} -jar /${project.build.finalName}.jar</entryPoint>
+ </build>
+ </image>
+ </images>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
</project>
@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
@ApiOperation("Create workflow")
public ResponseEntity<Workflow> create(@RequestBody Workflow workflow,
- @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ @RequestHeader(USER_ID_HEADER_PARAM) String user) {
return new ResponseEntity<>(workflowManager.create(workflow), HttpStatus.CREATED);
}
@GetMapping(path = "/{workflowId}")
@ApiOperation("Get workflow")
public Workflow get(@PathVariable("workflowId") String workflowId,
- @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ @RequestHeader(USER_ID_HEADER_PARAM) String user) {
Workflow workflow = new Workflow();
workflow.setId(workflowId);
return workflowManager.get(workflow);
@PutMapping(path = "/{workflowId}", consumes = MediaType.APPLICATION_JSON_VALUE)
@ApiOperation("Update workflow")
public Workflow update(@RequestBody Workflow workflow, @PathVariable("workflowId") String workflowId,
- @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ @RequestHeader(USER_ID_HEADER_PARAM) String user) {
workflow.setId(workflowId);
workflowManager.update(workflow);
return workflow;
@Autowired
public WorkflowVersionController(
- @Qualifier("workflowVersionManager") WorkflowVersionManager workflowVersionManager) {
+ @Qualifier("workflowVersionManager") WorkflowVersionManager workflowVersionManager) {
this.workflowVersionManager = workflowVersionManager;
}
@GetMapping
@ApiOperation("List workflow versions")
public CollectionWrapper<WorkflowVersion> list(@PathVariable("workflowId") String workflowId,
- @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ @RequestHeader(USER_ID_HEADER_PARAM) String user) {
return new CollectionWrapper<>(workflowVersionManager.list(workflowId));
}
@PostMapping
@ApiOperation("Create workflow version")
public ResponseEntity<WorkflowVersion> create(@RequestBody VersionRequestDto versionRequest,
- @PathVariable("workflowId") String workflowId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ @PathVariable("workflowId") String workflowId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
WorkflowVersion createdVersion = workflowVersionManager.create(workflowId, versionRequest);
return new ResponseEntity<>(createdVersion, HttpStatus.CREATED);
@GetMapping("/{versionId}")
@ApiOperation("Get workflow version")
public WorkflowVersion get(@PathVariable("workflowId") String workflowId,
- @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
return workflowVersionManager.get(workflowId, versionId);
}
@PutMapping("/{versionId}")
@ApiOperation("Update workflow version")
public void update(@RequestBody WorkflowVersion version, @PathVariable("workflowId") String workflowId,
- @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
version.setId(versionId);
workflowVersionManager.update(workflowId, version);
}
@GetMapping("/{versionId}/state")
@ApiOperation("Get workflow version state")
public VersionStateDto getState(@PathVariable("workflowId") String workflowId,
- @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
return new VersionStateDto(workflowVersionManager.getState(workflowId, versionId));
}
@PostMapping("/{versionId}/state")
@ApiOperation("Update workflow version state")
public VersionStateDto updateState(@RequestBody VersionStateDto state,
- @PathVariable("workflowId") String workflowId, @PathVariable("versionId") String versionId,
- @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ @PathVariable("workflowId") String workflowId, @PathVariable("versionId") String versionId,
+ @RequestHeader(USER_ID_HEADER_PARAM) String user) {
workflowVersionManager.updateState(workflowId, versionId, state.getName());
return new VersionStateDto(state.getName());
}
@PutMapping("/{versionId}/artifact")
@ApiOperation("Create/update artifact of a version")
public void uploadArtifact(@RequestBody MultipartFile fileToUpload, @PathVariable("workflowId") String workflowId,
- @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
workflowVersionManager.uploadArtifact(workflowId, versionId, fileToUpload);
}
@GetMapping("/{versionId}/artifact")
@ApiOperation("Download workflow version artifact")
public ResponseEntity<Resource> getArtifact(@PathVariable("workflowId") String workflowId,
- @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
ArtifactEntity artifact = workflowVersionManager.getArtifact(workflowId, versionId);
return ResponseEntity.ok()
- .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + artifact.getFileName())
- .contentType(MediaType.APPLICATION_OCTET_STREAM)
- .body(new InputStreamResource(artifact.getArtifactData()));
+ .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + artifact.getFileName())
+ .contentType(MediaType.APPLICATION_OCTET_STREAM)
+ .body(new InputStreamResource(artifact.getArtifactData()));
}
@DeleteMapping("/{versionId}/artifact")
@ApiOperation("Delete workflow version artifact")
public void deleteArtifact(@PathVariable("workflowId") String workflowId,
- @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
workflowVersionManager.deleteArtifact(workflowId, versionId);
}
}
void deleteArtifact(String workflowId, String versionId);
void uploadArtifact(String workflowId, String versionId, MultipartFile artifact);
-}
+}
\ No newline at end of file
public VersionModificationException(String workflowId, String versionId) {
super(String.format(
- "Error while trying to modify version %s of workflow %s: Version is CERTIFIED and can not be edited",
- versionId, workflowId));
+ "Error while trying to modify version %s of workflow %s: Version is CERTIFIED and can not be edited",
+ versionId, workflowId));
}
-}
+}
\ No newline at end of file
@Autowired
public WorkflowVersionManagerImpl(VersioningManager versioningManager, ArtifactRepository artifactRepository,
- VersionMapper versionMapper, VersionStateMapper versionStateMapper) {
+ VersionMapper versionMapper, VersionStateMapper versionStateMapper) {
this.versioningManager = versioningManager;
this.artifactRepository = artifactRepository;
this.versionMapper = versionMapper;
@Override
public Collection<WorkflowVersion> list(String workflowId) {
return versioningManager.list(workflowId).stream().map(versionMapper::versionToWorkflowVersion)
- .collect(Collectors.toList());
+ .collect(Collectors.toList());
}
@Override
public void update(String workflowId, WorkflowVersion workflowVersion) {
Version retrievedVersion = getVersion(workflowId, workflowVersion.getId());
if (WorkflowVersionState.CERTIFIED
- .equals(versionStateMapper.versionStatusToWorkflowVersionState(retrievedVersion.getStatus()))) {
+ .equals(versionStateMapper.versionStatusToWorkflowVersionState(retrievedVersion.getStatus()))) {
throw new VersionModificationException(workflowId, workflowVersion.getId());
}
public void updateState(String workflowId, String versionId, WorkflowVersionState state) {
Version retrievedVersion = getVersion(workflowId, versionId);
WorkflowVersionState retrievedState =
- versionStateMapper.versionStatusToWorkflowVersionState(retrievedVersion.getStatus());
+ versionStateMapper.versionStatusToWorkflowVersionState(retrievedVersion.getStatus());
if (WorkflowVersionState.CERTIFIED.equals(retrievedState) || retrievedState.equals(state)) {
throw new VersionStateModificationException(workflowId, versionId, retrievedState, state);
}
retrievedVersion.setStatus(versionStateMapper.workflowVersionStateToVersionStatus(state));
versioningManager.updateVersion(workflowId, retrievedVersion);
versioningManager.publish(workflowId, retrievedVersion,
- String.format("Update version state from %s to %s", retrievedState.name(), state.name()));
+ String.format("Update version state from %s to %s", retrievedState.name(), state.name()));
}
@Override
public void uploadArtifact(String workflowId, String versionId, MultipartFile artifact) {
Version retrievedVersion = getVersion(workflowId, versionId);
if (WorkflowVersionState.CERTIFIED
- .equals(versionStateMapper.versionStatusToWorkflowVersionState(retrievedVersion.getStatus()))) {
+ .equals(versionStateMapper.versionStatusToWorkflowVersionState(retrievedVersion.getStatus()))) {
throw new VersionModificationException(workflowId, versionId);
}
try (InputStream artifactData = artifact.getInputStream()) {
ArtifactEntity artifactEntity =
- new ArtifactEntity(StringUtils.cleanPath(artifact.getOriginalFilename()), artifactData);
+ new ArtifactEntity(StringUtils.cleanPath(artifact.getOriginalFilename()), artifactData);
artifactRepository.update(workflowId, versionId, artifactEntity);
versioningManager.publish(workflowId, new Version(versionId), "Update Artifact");
Optional<ArtifactEntity> artifactOptional = artifactRepository.get(workflowId, versionId);
if (!artifactOptional.isPresent()) {
throw new EntityNotFoundException(
- String.format("Artifact for workflow id %S version id %S was not found", workflowId, versionId));
+ String.format("Artifact for workflow id %S version id %S was not found", workflowId, versionId));
}
return artifactOptional.get();
}
private void validateVersionExistAndCertified(String workflowId, List<Version> versions, String versionId) {
Version baseVersion = findVersion(versions, versionId).orElseThrow(
- () -> new EntityNotFoundException(String.format(VERSION_NOT_EXIST_MSG, versionId, workflowId)));
+ () -> new EntityNotFoundException(String.format(VERSION_NOT_EXIST_MSG, versionId, workflowId)));
if (!Certified.equals(baseVersion.getStatus())) {
throw new VersionCreationException(workflowId, versionId);
private static Optional<Version> findVersion(List<Version> versions, String versionId) {
return versions.stream().filter(version -> versionId.equals(version.getId())).findFirst();
}
-}
+}
\ No newline at end of file
--- /dev/null
+server.servlet.context-path=/wf
+server.port=${SERVER_PORT:8080}
+
+#CASSANDRA
+spring.data.cassandra.contact-points=${CS_HOSTS}
+spring.data.cassandra.keyspace-name=workflow
+spring.data.cassandra.port=${CS_PORT:9042}
+spring.data.cassandra.username=${CS_USER:}
+spring.data.cassandra.password=${CS_PASSWORD:}
+zusammen.cassandra.isAuthenticate=${CS_AUTHENTICATE:true}
\ No newline at end of file
workflowManager.update(createWorkflow(1, true));
}
-}
+}
\ No newline at end of file
}
}
-}
+}
\ No newline at end of file
return workflowVersion;
}
-}
+}
\ No newline at end of file
versionStateMapper.workflowVersionStateToVersionStatus(WorkflowVersionState.DRAFT);
assertEquals(VersionStatus.Draft, mappedVersionStatus);
}
-}
+}
\ No newline at end of file
--- /dev/null
+<project
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>workflow-designer-init</artifactId>
+ <packaging>pom</packaging>
+
+ <parent>
+ <groupId>org.onap.sdc.workflow_designer</groupId>
+ <artifactId>workflow-designer-parent</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ </parent>
+
+ <profiles>
+ <profile>
+ <id>docker</id>
+ <activation>
+ <activeByDefault>false</activeByDefault>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.fabric8</groupId>
+ <artifactId>docker-maven-plugin</artifactId>
+ <configuration>
+ <images>
+ <image>
+ <name>onap/workflow-init</name>
+ <build>
+ <tags>
+ <tag>${project.version}</tag>
+ </tags>
+ <dockerFile>Dockerfile</dockerFile>
+ </build>
+ </image>
+ </images>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
\ No newline at end of file
--- /dev/null
+FROM alpine:3.7
+
+RUN apk add --no-cache 'python<3' py-pip && pip install cqlsh==4.0.1
+
+COPY create_workflow_db.cql .
+COPY start.sh .
+
+RUN chmod 744 start.sh
+
+ENTRYPOINT ["./start.sh"]
\ No newline at end of file
--- /dev/null
+CREATE KEYSPACE IF NOT EXISTS WORKFLOW
+WITH DURABLE_WRITES = TRUE
+AND REPLICATION = {
+ 'class' : 'SimpleStrategy',
+ 'replication_factor' : 1
+};
+
+USE WORKFLOW;
+
+CREATE TABLE IF NOT EXISTS UNIQUE_VALUE (
+ TYPE TEXT,
+ VALUE TEXT,
+ PRIMARY KEY (( TYPE, VALUE ))
+);
+
+CREATE KEYSPACE IF NOT EXISTS ZUSAMMEN_WORKFLOW
+WITH REPLICATION = {
+ 'class' : 'SimpleStrategy',
+ 'replication_factor' : 1
+};
+
+USE ZUSAMMEN_WORKFLOW;
+
+CREATE TABLE IF NOT EXISTS ITEM (
+ ITEM_ID TEXT PRIMARY KEY,
+ ITEM_INFO TEXT,
+ CREATION_TIME TIMESTAMP,
+ MODIFICATION_TIME TIMESTAMP
+);
+
+CREATE TABLE IF NOT EXISTS VERSION (
+ SPACE TEXT,
+ ITEM_ID TEXT,
+ VERSION_ID TEXT,
+ BASE_VERSION_ID TEXT,
+ INFO TEXT,
+ RELATIONS TEXT,
+ CREATION_TIME TIMESTAMP,
+ MODIFICATION_TIME TIMESTAMP,
+ PRIMARY KEY (( SPACE, ITEM_ID ), VERSION_ID)
+);
+
+CREATE TABLE IF NOT EXISTS VERSION_ELEMENTS (
+ SPACE TEXT,
+ ITEM_ID TEXT,
+ VERSION_ID TEXT,
+ REVISION_ID TEXT,
+ ELEMENT_IDS MAP<TEXT, TEXT>,
+ DIRTY_ELEMENT_IDS SET<TEXT>,
+ STAGE_ELEMENT_IDS SET<TEXT>,
+ CONFLICT_ELEMENT_IDS SET<TEXT>,
+ PUBLISH_TIME TIMESTAMP,
+ USER TEXT,
+ MESSAGE TEXT,
+ PRIMARY KEY (( SPACE, ITEM_ID, VERSION_ID ), REVISION_ID)
+);
+
+CREATE TABLE IF NOT EXISTS ELEMENT_NAMESPACE (
+ ITEM_ID TEXT,
+ ELEMENT_ID TEXT,
+ NAMESPACE TEXT,
+ PRIMARY KEY (( ITEM_ID, ELEMENT_ID ))
+);
+
+CREATE TABLE IF NOT EXISTS ELEMENT (
+ SPACE TEXT,
+ ITEM_ID TEXT,
+ VERSION_ID TEXT,
+ ELEMENT_ID TEXT,
+ REVISION_ID TEXT,
+ PARENT_ID TEXT,
+ NAMESPACE TEXT,
+ INFO TEXT,
+ RELATIONS TEXT,
+ DATA BLOB,
+ SEARCHABLE_DATA BLOB,
+ VISUALIZATION BLOB,
+ SUB_ELEMENT_IDS SET<TEXT>,
+ ELEMENT_HASH TEXT,
+ PRIMARY KEY (( SPACE, ITEM_ID, VERSION_ID, ELEMENT_ID ), REVISION_ID)
+);
+
+CREATE TABLE IF NOT EXISTS ELEMENT_SYNCHRONIZATION_STATE (
+ SPACE TEXT,
+ ITEM_ID TEXT,
+ VERSION_ID TEXT,
+ ELEMENT_ID TEXT,
+ REVISION_ID TEXT,
+ PUBLISH_TIME TIMESTAMP,
+ DIRTY BOOLEAN,
+ PRIMARY KEY (( SPACE, ITEM_ID, VERSION_ID ), ELEMENT_ID, REVISION_ID)
+);
+
+CREATE TABLE IF NOT EXISTS ELEMENT_STAGE (
+ SPACE TEXT,
+ ITEM_ID TEXT,
+ VERSION_ID TEXT,
+ ELEMENT_ID TEXT,
+ PARENT_ID TEXT,
+ NAMESPACE TEXT,
+ INFO TEXT,
+ RELATIONS TEXT,
+ DATA BLOB,
+ SEARCHABLE_DATA BLOB,
+ VISUALIZATION BLOB,
+ SUB_ELEMENT_IDS SET<TEXT>,
+ ELEMENT_HASH TEXT,
+ PUBLISH_TIME TIMESTAMP,
+ ACTION TEXT,
+ CONFLICTED BOOLEAN,
+ CONFLICT_DEPENDENT_IDS SET<TEXT>,
+ PRIMARY KEY (( SPACE, ITEM_ID, VERSION_ID, ELEMENT_ID ))
+);
+
+CREATE TABLE IF NOT EXISTS VERSION_STAGE (
+ SPACE TEXT,
+ ITEM_ID TEXT,
+ VERSION_ID TEXT,
+ BASE_VERSION_ID TEXT,
+ CREATION_TIME TIMESTAMP,
+ MODIFICATION_TIME TIMESTAMP,
+ PUBLISH_TIME TIMESTAMP,
+ ACTION TEXT,
+ PRIMARY KEY (( SPACE, ITEM_ID ), VERSION_ID)
+);
\ No newline at end of file
--- /dev/null
+#!/bin/sh
+
+if [[ -z "${CS_USER}" ]]; then
+ echo "CS_USER environment variable must be set"
+ exit 1
+fi
+
+if [[ -z "${CS_PASSWORD}" ]]; then
+ echo "CS_PASSWORD environment variable must be set"
+ exit 1
+fi
+
+if [[ -z "${CS_HOST}" ]]; then
+ echo "CS_HOST environment variable must be set"
+ exit 1
+fi
+
+cqlsh -u ${CS_USER} -p ${CS_PASSWORD} -f /create_workflow_db.cql ${CS_HOST} ${CS_PORT}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright © 2016-2018 European Support Limited
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>workflow-designer-ui</artifactId>
+ <packaging>pom</packaging>
+
+ <parent>
+ <groupId>org.onap.sdc.workflow_designer</groupId>
+ <artifactId>workflow-designer-parent</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ </parent>
+
+</project>
+