aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--workflow/README.md16
-rw-r--r--workflow/workflow-bdd/features/VersionState.feature (renamed from workflow/workflow-bdd/features/Version_State.feature)14
-rw-r--r--workflow/workflow-bdd/features/Version_Create_Update.feature53
-rw-r--r--workflow/workflow-bdd/features/Workflow.feature25
-rw-r--r--workflow/workflow-bdd/features/WorkflowList.feature79
-rw-r--r--workflow/workflow-bdd/features/Workflow_Create_Update.feature27
-rw-r--r--workflow/workflow-bdd/pom.xml6
-rw-r--r--workflow/workflow-bdd/resources/json/createWorkflow.json5
-rw-r--r--workflow/workflow-bdd/stepDefinitions/General_Steps.js6
-rw-r--r--workflow/workflow-bdd/stepDefinitions/InputData_steps.js10
-rw-r--r--workflow/workflow-bdd/stepDefinitions/Workflow_Steps.js16
-rw-r--r--workflow/workflow-designer-be/pom.xml12
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/RestUtils.java31
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/SpringBootWebApplication.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/RestConstants.java22
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/WorkflowController.java65
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/WorkflowVersionController.java59
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/exceptionshandlers/CustomizedResponseEntityExceptionHandler.java36
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/CollectionWrapper.java29
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/VersionRequestDto.java11
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/VersionStateDto.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/ArtifactRepository.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/ParameterRepository.java39
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/UniqueValueRepository.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryImpl.java29
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryImpl.java180
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ArtifactEntity.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterEntity.java28
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterPropertyName.java23
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterRole.java24
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterType.java25
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/UniqueValueEntity.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/Workflow.java22
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowElementType.java26
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowProperty.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowVersion.java22
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowVersionState.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/UniqueValueService.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowManager.java21
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowNameComparator.java32
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowVersionManager.java24
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/EntityNotFoundException.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/InvalidArtifactException.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/InvalidPaginationParameterException.java24
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/UniqueValueViolationException.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionCreationException.java22
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionModificationException.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionStateModificationException.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/CollaborationConfiguration.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImpl.java94
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java157
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/VersionMapper.java16
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/VersionStateMapper.java25
-rw-r--r--workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/WorkflowMapper.java23
-rw-r--r--workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/RestPath.java50
-rw-r--r--workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/TestUtil.java19
-rw-r--r--workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/api/WorkflowControllerTest.java198
-rw-r--r--workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/api/WorkflowVersionControllerTest.java9
-rw-r--r--workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryTest.java72
-rw-r--r--workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryTest.java166
-rw-r--r--workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImplTest.java163
-rw-r--r--workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImplTest.java72
-rw-r--r--workflow/workflow-designer-init/src/main/docker/start.sh21
63 files changed, 2140 insertions, 248 deletions
diff --git a/workflow/README.md b/workflow/README.md
index 40b4bbb2..2b6bcbce 100644
--- a/workflow/README.md
+++ b/workflow/README.md
@@ -2,13 +2,25 @@
## 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}`
+`docker run -d -e CS_AUTHENTICATE={CS_AUTHENTICATE} -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`
+running docker with secured Cassandra DB
+
+`docker run -d -e CS_HOST=10.247.41.19 -e CS_AUTHENTICATE=true -e CS_USER=test -e CS_PASSWORD=secret -e CS_PORT=9160
+onap/workflow-init:latest`
+
+running docker with unsecured Cassandra DB
+
+`docker run -d -e CS_HOST=10.247.41.19 -e CS_AUTHENTICATE=false -e CS_PORT=9160 onap/workflow-init:latest`
+
+or
+
+`docker run -d -e CS_HOST=10.247.41.19 -e CS_PORT=9160 onap/workflow-init:latest`
## 2. Start Backend
diff --git a/workflow/workflow-bdd/features/Version_State.feature b/workflow/workflow-bdd/features/VersionState.feature
index 8c1e13fd..c869d146 100644
--- a/workflow/workflow-bdd/features/Version_State.feature
+++ b/workflow/workflow-bdd/features/VersionState.feature
@@ -1,3 +1,17 @@
+# Copyright © 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.
+
Feature: Workflow Version State
Background: Create workflow and first version
diff --git a/workflow/workflow-bdd/features/Version_Create_Update.feature b/workflow/workflow-bdd/features/Version_Create_Update.feature
index 2cb05804..d2a9ec9d 100644
--- a/workflow/workflow-bdd/features/Version_Create_Update.feature
+++ b/workflow/workflow-bdd/features/Version_Create_Update.feature
@@ -1,28 +1,43 @@
+# Copyright © 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.
+
+
Feature: Workflow Versions
Background: Init
Given I want to create a Workflow
- Scenario: Create and get version
+ Scenario: Create first empty version
When I want to create input data
- Then I want to update the input property "description" with value "workflow version description"
- Then I want to create for path "/workflows/{item.id}/versions" with the input data from the context
- Then I want to copy to property "versionId" from response data path "id"
- Then I want to get path "/workflows/{item.id}/versions/{versionId}"
- Then I want to check that property "id" in the response equals to value of saved property "versionId"
-
- When I want to get path "/workflows/{item.id}/versions"
- Then I want to check that element in the response list with "id" equals to value of saved property "versionId" exists
+ And I want to update the input property "description" with value "first empty version"
+ And I want to create for path "/workflows/{item.id}/versions" with the input data from the context
+ And I want to copy to property "item.versionId" from response data path "id"
+ Then I want to get path "/workflows/{item.id}/versions/{item.versionId}"
+ And I want to check that property "id" in the response equals to value of saved property "item.versionId"
+ And I want to get path "/workflows/{item.id}/versions"
+ And I want to check that element in the response list with "id" equals to value of saved property "item.versionId" exists
Scenario: Update version
- When I want to create input data
- Then I want to update the input property "description" with value "workflow version description"
- Then I want to create for path "/workflows/{item.id}/versions" with the input data from the context
- Then I want to copy to property "versionId" from response data path "id"
-
- Then I want to update the input property "description" with value "workflow version description updated"
- Then I want to set property "desc" to value "workflow version description updated"
- Then I want to update for path "/workflows/{item.id}/versions/{versionId}" with the input data from the context
- Then I want to get path "/workflows/{item.id}/versions/{versionId}"
- Then I want to check that property "description" in the response equals to value of saved property "desc" \ No newline at end of file
+ And I want to create input data
+ And I want to update the input property "description" with value "workflow version description"
+ And I want to create for path "/workflows/{item.id}/versions" with the input data from the context
+ And I want to copy to property "item.versionId" from response data path "id"
+
+ When I want to set property "updatedDesc" to value "workflow version description updated"
+ And I want to update the input property "description" with value of property "updatedDesc"
+ And I want to update for path "/workflows/{item.id}/versions/{item.versionId}" with the input data from the context
+
+ Then I want to get path "/workflows/{item.id}/versions/{item.versionId}"
+ And I want to check that property "description" in the response equals to value of saved property "updatedDesc" \ No newline at end of file
diff --git a/workflow/workflow-bdd/features/Workflow.feature b/workflow/workflow-bdd/features/Workflow.feature
new file mode 100644
index 00000000..b234fdb7
--- /dev/null
+++ b/workflow/workflow-bdd/features/Workflow.feature
@@ -0,0 +1,25 @@
+# Copyright © 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.
+
+Feature: Workflow
+
+ Scenario: Create valid
+ When I want to create a Workflow
+
+ Scenario: Update and Get workflow
+ When I want to create a Workflow
+ Then I want to update the input property "description" with value "workflow desc updated"
+ Then I want to update for path "/workflows/{item.id}" with the input data from the context
+ Then I want to get path "/workflows/{item.id}"
+ Then I want to check that property "description" in the response equals to value of saved property "inputData.description"
diff --git a/workflow/workflow-bdd/features/WorkflowList.feature b/workflow/workflow-bdd/features/WorkflowList.feature
new file mode 100644
index 00000000..85261f5c
--- /dev/null
+++ b/workflow/workflow-bdd/features/WorkflowList.feature
@@ -0,0 +1,79 @@
+# Copyright © 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.
+
+
+Feature: List Workflows
+
+ Background: Init - create various workflows in order to test list filter
+ Given I want to create a Workflow
+ And I want to copy to property "noVersionsWorkflowId" from response data path "id"
+
+ Given I want to create a Workflow
+ And I want to copy to property "draftVersionWorkflowId" from response data path "id"
+ And I want to update the input property "description" with value "first version"
+ And I want to create for path "/workflows/{item.id}/versions" with the input data from the context
+
+ Given I want to create a Workflow
+ And I want to copy to property "certifiedVersionWorkflowId" from response data path "id"
+ And I want to update the input property "description" with value "first version"
+ And I want to create for path "/workflows/{item.id}/versions" with the input data from the context
+ And I want to update the input property "name" with value "CERTIFIED"
+ And I want to create for path "/workflows/{item.id}/versions/{responseData.id}/state" with the input data from the context
+
+ Given I want to create a Workflow
+ And I want to copy to property "draftAndCertifiedVersionWorkflowId" from response data path "id"
+ And I want to update the input property "description" with value "first version"
+ And I want to create for path "/workflows/{item.id}/versions" with the input data from the context
+ And I want to copy to property "item.versionId" from response data path "id"
+ And I want to update the input property "name" with value "CERTIFIED"
+ And I want to create for path "/workflows/{item.id}/versions/{item.versionId}/state" with the input data from the context
+ And I want to update the input property "description" with value "second version"
+ And I want to update the input property "baseVersionId" with value of property "item.versionId"
+ And I want to create for path "/workflows/{item.id}/versions" with the input data from the context
+ #And I want to print the context data
+
+ Scenario: List all
+ When I want to get path "/workflows"
+ Then I want to check that element in the response list with "id" equals to value of saved property "noVersionsWorkflowId" exists
+ And I want to check that element in the response list with "id" equals to value of saved property "draftVersionWorkflowId" exists
+ And I want to check that element in the response list with "id" equals to value of saved property "certifiedVersionWorkflowId" exists
+ And I want to check that element in the response list with "id" equals to value of saved property "draftAndCertifiedVersionWorkflowId" exists
+
+ Scenario: List ones with DRAFT version(s)
+ When I want to get path "/workflows?versionState=DRAFT"
+ Then I want to check that element in the response list with "id" equals to value of saved property "noVersionsWorkflowId" does not exist
+ Then I want to check that element in the response list with "id" equals to value of saved property "draftVersionWorkflowId" exists
+ Then I want to check that element in the response list with "id" equals to value of saved property "certifiedVersionWorkflowId" does not exist
+ Then I want to check that element in the response list with "id" equals to value of saved property "draftAndCertifiedVersionWorkflowId" exists
+
+ Scenario: List ones with CERTIFIED version(s)
+ When I want to get path "/workflows?versionState=CERTIFIED"
+ Then I want to check that element in the response list with "id" equals to value of saved property "noVersionsWorkflowId" does not exist
+ Then I want to check that element in the response list with "id" equals to value of saved property "draftVersionWorkflowId" does not exist
+ Then I want to check that element in the response list with "id" equals to value of saved property "certifiedVersionWorkflowId" exists
+ Then I want to check that element in the response list with "id" equals to value of saved property "draftAndCertifiedVersionWorkflowId" exists
+
+ Scenario: List ones with DRAFT/CERTIFIED version(s)
+ When I want to get path "/workflows?versionState=DRAFT,CERTIFIED"
+ Then I want to check that element in the response list with "id" equals to value of saved property "noVersionsWorkflowId" does not exist
+ Then I want to check that element in the response list with "id" equals to value of saved property "draftVersionWorkflowId" exists
+ Then I want to check that element in the response list with "id" equals to value of saved property "certifiedVersionWorkflowId" exists
+ Then I want to check that element in the response list with "id" equals to value of saved property "draftAndCertifiedVersionWorkflowId" exists
+
+ Scenario: List ones with gibberish version(s) = none
+ When I want to get path "/workflows?versionState=gibberish"
+ Then I want to check that element in the response list with "id" equals to value of saved property "noVersionsWorkflowId" does not exist
+ Then I want to check that element in the response list with "id" equals to value of saved property "draftVersionWorkflowId" does not exist
+ Then I want to check that element in the response list with "id" equals to value of saved property "certifiedVersionWorkflowId" does not exist
+ Then I want to check that element in the response list with "id" equals to value of saved property "draftAndCertifiedVersionWorkflowId" does not exist \ No newline at end of file
diff --git a/workflow/workflow-bdd/features/Workflow_Create_Update.feature b/workflow/workflow-bdd/features/Workflow_Create_Update.feature
deleted file mode 100644
index 04a64bf8..00000000
--- a/workflow/workflow-bdd/features/Workflow_Create_Update.feature
+++ /dev/null
@@ -1,27 +0,0 @@
-Feature: Workflow Example File
-
- Scenario: Create and get workflow
- When I want to create input data
- Then I want to update the input property "name" with a random value
- Then I want to update the input property "description" with value "workflow desc"
- Then I want to update the input property "category" with value "workflow category"
-
- Then I want to create for path "/workflows" with the input data from the context
- Then I want to copy to property "workflowId" from response data path "id"
- When I want to get path "/workflows"
- Then I want to check that element in the response list with "id" equals to value of saved property "workflowId" exists
-
-
- Scenario: Update workflow
- When I want to create input data
- Then I want to update the input property "name" with a random value
- Then I want to update the input property "description" with value "workflow desc"
- Then I want to update the input property "category" with value "workflow category"
- Then I want to create for path "/workflows" with the input data from the context
- Then I want to copy to property "workflowId" from response data path "id"
-
- Then I want to update the input property "description" with value "workflow desc updated"
- Then I want to set property "desc" to value "workflow desc updated"
- Then I want to update for path "/workflows/{workflowId}" with the input data from the context
- Then I want to get path "/workflows/{workflowId}"
- Then I want to check that property "description" in the response equals to value of saved property "desc"
diff --git a/workflow/workflow-bdd/pom.xml b/workflow/workflow-bdd/pom.xml
index 3502451c..8ad0584d 100644
--- a/workflow/workflow-bdd/pom.xml
+++ b/workflow/workflow-bdd/pom.xml
@@ -8,12 +8,6 @@
<name>cucumber-report</name>
<version>1.2.0-SNAPSHOT</version>
-<!-- <parent>
- <groupId>org.onap.sdc.sdc-workflow-designer</groupId>
- <artifactId>sdc-workflow-designer</artifactId>
- <version>1.2.0-SNAPSHOT</version>
- </parent>-->
-
<build>
<plugins>
<plugin>
diff --git a/workflow/workflow-bdd/resources/json/createWorkflow.json b/workflow/workflow-bdd/resources/json/createWorkflow.json
index 074899e9..cc200efb 100644
--- a/workflow/workflow-bdd/resources/json/createWorkflow.json
+++ b/workflow/workflow-bdd/resources/json/createWorkflow.json
@@ -1 +1,4 @@
-{"name":"RANDOM","description":"Workflow Description","category":"category"} \ No newline at end of file
+{
+ "name": "RANDOM",
+ "description": "Workflow Description"
+} \ No newline at end of file
diff --git a/workflow/workflow-bdd/stepDefinitions/General_Steps.js b/workflow/workflow-bdd/stepDefinitions/General_Steps.js
index 0550e415..2e74c6ee 100644
--- a/workflow/workflow-bdd/stepDefinitions/General_Steps.js
+++ b/workflow/workflow-bdd/stepDefinitions/General_Steps.js
@@ -151,7 +151,7 @@ Then('I want to check property {string} does not exist', function(string) {
* @module ContextData
* @description Use during development to see what is on the context
* @exampleFile Example_ResponseData_CheckAndManipulation.feature
-* @step I want to print context data
+* @step I want to print the context data
**/
Then('I want to print the context data', function() {
console.log('------------ context ---------------');
@@ -268,13 +268,13 @@ Then('I want to check that element in the response list with {string} equals to
**/
Then('I want to check that element in the response list with {string} equals to value of saved property {string} exists', function(propertyPath, valueProperty) {
const results = this.context.responseData.results;
- assert.notEqual(results.find(result => this.context[valueProperty] === _.get(result, propertyPath)), undefined);
+ assert.notEqual(results.find(result => _.get(this.context, valueProperty) === _.get(result, propertyPath)), undefined);
});
Then('I want to check that property {string} in the response equals to value of saved property {string}', function(propertyPath, valueProperty) {
const results = this.context.responseData;
- assert.equal(results[propertyPath],this.context[valueProperty]);
+ assert.equal(results[propertyPath], _.get(this.context, valueProperty));
});
/**
diff --git a/workflow/workflow-bdd/stepDefinitions/InputData_steps.js b/workflow/workflow-bdd/stepDefinitions/InputData_steps.js
index 73695d0e..6263bb73 100644
--- a/workflow/workflow-bdd/stepDefinitions/InputData_steps.js
+++ b/workflow/workflow-bdd/stepDefinitions/InputData_steps.js
@@ -64,6 +64,16 @@ Then('I want to update the input property {string} with value {string}', functio
/**
* @module InputData
+ * @description sets the property on the input data to the value of the given property
+ * @exampleFile WorkflowList.feature
+ * @step I want to update the input property {string} with value of property {string}
+ **/
+Then('I want to update the input property {string} with value of property {string}', function(string, string2) {
+ _.set(this.context.inputData, string, _.get(this.context, string2));
+});
+
+/**
+ * @module InputData
* @description removes a property from the input data object
* @exampleFile Example_Rest_Calls.feature
* @step I want to remove {string} from the input data
diff --git a/workflow/workflow-bdd/stepDefinitions/Workflow_Steps.js b/workflow/workflow-bdd/stepDefinitions/Workflow_Steps.js
index 59c95d89..aeca5ebb 100644
--- a/workflow/workflow-bdd/stepDefinitions/Workflow_Steps.js
+++ b/workflow/workflow-bdd/stepDefinitions/Workflow_Steps.js
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
/**
* @module WORKFLOW
* @description Creates a new WORKFLOW with a random name and saves the id and versionId on the context item object and the context vlm object<br>
diff --git a/workflow/workflow-designer-be/pom.xml b/workflow/workflow-designer-be/pom.xml
index 92c4c009..ac77e5f7 100644
--- a/workflow/workflow-designer-be/pom.xml
+++ b/workflow/workflow-designer-be/pom.xml
@@ -78,6 +78,18 @@
</dependency>
<dependency>
<groupId>org.openecomp.sdc</groupId>
+ <artifactId>openecomp-sdc-logging-api</artifactId>
+ <version>${onap.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.openecomp.sdc</groupId>
+ <artifactId>openecomp-sdc-logging-core</artifactId>
+ <version>${onap.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.openecomp.sdc</groupId>
<artifactId>openecomp-sdc-versioning-core</artifactId>
<version>${onap.version}</version>
<scope>runtime</scope>
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/RestUtils.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/RestUtils.java
new file mode 100644
index 00000000..b6259ccc
--- /dev/null
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/RestUtils.java
@@ -0,0 +1,31 @@
+package org.onap.sdc.workflow;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Set;
+import java.util.stream.Collectors;
+import org.onap.sdc.workflow.persistence.types.WorkflowVersionState;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
+
+public class RestUtils {
+
+ private RestUtils() {
+ }
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(RestUtils.class);
+
+ public static Set<WorkflowVersionState> mapVersionStateFilter(String versionStateFilter) {
+ Set<WorkflowVersionState> filter;
+ try {
+ filter = versionStateFilter == null ? null :
+ Arrays.stream(versionStateFilter.split(",")).map(WorkflowVersionState::valueOf)
+ .collect(Collectors.toSet());
+ } catch (Exception e) {
+ LOGGER.info(
+ "version state filter value is invalid and cannot be mapped to a set of version states, therefore it is set to empty set");
+ filter = Collections.emptySet();
+ }
+ return filter;
+ }
+}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/SpringBootWebApplication.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/SpringBootWebApplication.java
index b7e3b345..d14ad095 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/SpringBootWebApplication.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/SpringBootWebApplication.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow;
import org.springframework.boot.SpringApplication;
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/RestConstants.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/RestConstants.java
index 8f02be0f..817bebe1 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/RestConstants.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/RestConstants.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.api;
public class RestConstants {
@@ -6,4 +22,10 @@ public class RestConstants {
}
public static final String USER_ID_HEADER_PARAM = "USER_ID";
+ public static final String SIZE_PARAM = "size";
+ public static final String PAGE_PARAM = "page";
+ public static final String SORT_PARAM = "sort";
+ public static final String SORT_FIELD_NAME = "name";
+ public static final int SIZE_DEFAULT = 20;
+ public static final int PAGE_DEFAULT = 0;
}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/WorkflowController.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/WorkflowController.java
index b224e84b..7027985f 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/WorkflowController.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/WorkflowController.java
@@ -1,17 +1,48 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.api;
+import static org.onap.sdc.workflow.RestUtils.mapVersionStateFilter;
+import static org.onap.sdc.workflow.api.RestConstants.SIZE_DEFAULT;
+import static org.onap.sdc.workflow.api.RestConstants.SORT_FIELD_NAME;
+import static org.onap.sdc.workflow.api.RestConstants.SORT_PARAM;
import static org.onap.sdc.workflow.api.RestConstants.USER_ID_HEADER_PARAM;
+import com.google.common.collect.ImmutableSet;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import java.util.Arrays;
+import java.util.Set;
import org.onap.sdc.workflow.api.types.CollectionWrapper;
import org.onap.sdc.workflow.persistence.types.Workflow;
import org.onap.sdc.workflow.services.WorkflowManager;
+import org.onap.sdc.workflow.services.exceptions.InvalidPaginationParameterException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.data.web.SortDefault;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
@@ -19,6 +50,7 @@ import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/workflows")
@@ -35,21 +67,28 @@ public class WorkflowController {
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
@ApiOperation("List workflows")
- public CollectionWrapper<Workflow> list(@RequestHeader(USER_ID_HEADER_PARAM) String user) {
- return new CollectionWrapper<>(workflowManager.list());
+ public CollectionWrapper<Workflow> list(
+ @ApiParam(value = "Filter by version state", allowableValues = "DRAFT,CERTIFIED")
+ @RequestParam(value = "versionState", required = false) String versionStateFilter,
+ @PageableDefault(size = SIZE_DEFAULT)
+ @SortDefault.SortDefaults({@SortDefault(sort = SORT_FIELD_NAME, direction = Sort.Direction.ASC)})
+ Pageable pageable, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ PageRequest pageRequest = createPageRequest(pageable);
+ return new CollectionWrapper<>(pageRequest.getPageSize(), pageRequest.getPageNumber(),
+ workflowManager.list(mapVersionStateFilter(versionStateFilter), pageRequest));
}
@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
@ApiOperation("Create workflow")
- public ResponseEntity<Workflow> create(@RequestBody Workflow workflow,
- @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ public ResponseEntity<Workflow> create(@Validated @RequestBody Workflow workflow,
+ @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);
@@ -58,9 +97,23 @@ public class WorkflowController {
@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;
}
+
+
+ private PageRequest createPageRequest(Pageable pageable) {
+ Set<String> validSortFields = ImmutableSet.of(SORT_FIELD_NAME);
+ Sort sort = pageable.getSort();
+ for (Sort.Order order : sort) {
+ String sortFieldName = order.getProperty();
+ if (!sortFieldName.equalsIgnoreCase(SORT_FIELD_NAME)) {
+ throw new InvalidPaginationParameterException(SORT_PARAM, sortFieldName,
+ "is not supported. Supported values are: " + Arrays.toString(validSortFields.toArray()));
+ }
+ }
+ return PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), sort);
+ }
}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/WorkflowVersionController.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/WorkflowVersionController.java
index 6ae8e34d..d5b94a1b 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/WorkflowVersionController.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/WorkflowVersionController.java
@@ -1,11 +1,28 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.api;
+import static org.onap.sdc.workflow.RestUtils.mapVersionStateFilter;
import static org.onap.sdc.workflow.api.RestConstants.USER_ID_HEADER_PARAM;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
import org.onap.sdc.workflow.api.types.CollectionWrapper;
-import org.onap.sdc.workflow.api.types.VersionRequestDto;
import org.onap.sdc.workflow.api.types.VersionStateDto;
import org.onap.sdc.workflow.persistence.types.ArtifactEntity;
import org.onap.sdc.workflow.persistence.types.WorkflowVersion;
@@ -26,6 +43,7 @@ import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@@ -38,37 +56,40 @@ public class WorkflowVersionController {
@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) {
- return new CollectionWrapper<>(workflowVersionManager.list(workflowId));
+ @ApiParam(value = "Filter by state", allowableValues = "DRAFT,CERTIFIED")
+ @RequestParam(value = "state", required = false) String stateFilter,
+ @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ return new CollectionWrapper<>(workflowVersionManager.list(workflowId, mapVersionStateFilter(stateFilter)));
}
@PostMapping
@ApiOperation("Create workflow version")
- public ResponseEntity<WorkflowVersion> create(@RequestBody VersionRequestDto versionRequest,
- @PathVariable("workflowId") String workflowId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
-
- WorkflowVersion createdVersion = workflowVersionManager.create(workflowId, versionRequest);
+ public ResponseEntity<WorkflowVersion> create(@RequestBody WorkflowVersion version,
+ @PathVariable("workflowId") String workflowId,
+ @RequestParam(value = "baseVersionId", required = false) String baseVersionId,
+ @RequestHeader(USER_ID_HEADER_PARAM) String user) {
+ WorkflowVersion createdVersion = workflowVersionManager.create(workflowId, baseVersionId, version);
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);
}
@@ -76,15 +97,15 @@ public class WorkflowVersionController {
@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());
}
@@ -92,26 +113,26 @@ public class WorkflowVersionController {
@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);
}
}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/exceptionshandlers/CustomizedResponseEntityExceptionHandler.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/exceptionshandlers/CustomizedResponseEntityExceptionHandler.java
index 68fd41a5..c8cae361 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/exceptionshandlers/CustomizedResponseEntityExceptionHandler.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/exceptionshandlers/CustomizedResponseEntityExceptionHandler.java
@@ -1,19 +1,41 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.api.exceptionshandlers;
+import static org.springframework.http.HttpStatus.BAD_REQUEST;
import static org.springframework.http.HttpStatus.FORBIDDEN;
import static org.springframework.http.HttpStatus.NOT_FOUND;
import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY;
import org.onap.sdc.workflow.services.exceptions.EntityNotFoundException;
import org.onap.sdc.workflow.services.exceptions.InvalidArtifactException;
+import org.onap.sdc.workflow.services.exceptions.InvalidPaginationParameterException;
import org.onap.sdc.workflow.services.exceptions.UniqueValueViolationException;
import org.onap.sdc.workflow.services.exceptions.VersionCreationException;
import org.onap.sdc.workflow.services.exceptions.VersionModificationException;
import org.onap.sdc.workflow.services.exceptions.VersionStateModificationException;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.ServletRequestBindingException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice
@@ -32,6 +54,20 @@ public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExce
return new ResponseEntity<>(exception.getMessage(), NOT_FOUND);
}
+ @ExceptionHandler({InvalidPaginationParameterException.class})
+ public final ResponseEntity<String> handlePaginationException(InvalidPaginationParameterException exception) {
+ return new ResponseEntity<>(exception.getMessage(), BAD_REQUEST);
+ }
+
+ //For missing header exceptions
+ @Override
+ public ResponseEntity<Object> handleServletRequestBindingException(ServletRequestBindingException ex,
+ HttpHeaders headers, HttpStatus status,
+ WebRequest request) {
+ return new ResponseEntity<>(ex.getMessage(), BAD_REQUEST);
+ }
+
+
@ExceptionHandler({InvalidArtifactException.class, VersionModificationException.class,
VersionStateModificationException.class})
public final ResponseEntity<String> handleInvalidArtifactException(
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/CollectionWrapper.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/CollectionWrapper.java
index 653b0dcf..1e11bc90 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/CollectionWrapper.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/CollectionWrapper.java
@@ -1,16 +1,41 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.api.types;
import java.util.Collection;
import lombok.Data;
+import lombok.NoArgsConstructor;
@Data
+@NoArgsConstructor
public class CollectionWrapper<T> {
private int total;
- private int limit;
- private int offset;
+ private int size;
+ private int page;
private Collection<T> results;
+ public CollectionWrapper(int size, int page, Collection<T> results) {
+ this.results = results;
+ this.size = size;
+ this.page = page;
+ this.total = results.size();
+ }
+
public CollectionWrapper(Collection<T> results) {
this.results = results;
this.total = results.size();
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/VersionRequestDto.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/VersionRequestDto.java
deleted file mode 100644
index 92ac3a73..00000000
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/VersionRequestDto.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.onap.sdc.workflow.api.types;
-
-import lombok.Data;
-
-@Data
-public class VersionRequestDto {
-
- private String description;
- private String baseVersionId;
-
-}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/VersionStateDto.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/VersionStateDto.java
index 5963a2bf..a7f43cdd 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/VersionStateDto.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/api/types/VersionStateDto.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.api.types;
import java.util.List;
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/ArtifactRepository.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/ArtifactRepository.java
index a473f166..ed9371e6 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/ArtifactRepository.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/ArtifactRepository.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.persistence;
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/ParameterRepository.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/ParameterRepository.java
new file mode 100644
index 00000000..9f7fb1ad
--- /dev/null
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/ParameterRepository.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright © 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.
+ */
+
+package org.onap.sdc.workflow.persistence;
+
+import java.util.Collection;
+import org.onap.sdc.workflow.persistence.types.ParameterEntity;
+import org.onap.sdc.workflow.persistence.types.ParameterRole;
+
+
+public interface ParameterRepository {
+
+ void createStructure(String id, String versionId);
+
+ Collection<ParameterEntity> list(String id, String versionId, ParameterRole role);
+
+ void deleteAll(String id, String versionId, ParameterRole role);
+
+ ParameterEntity get(String id, String versionId, String parameterId);
+
+ void delete(String id, String versionId, String parameterId);
+
+ ParameterEntity create(String id, String versionId , ParameterRole role, ParameterEntity parameter);
+
+ void update(String id, String versionId, ParameterRole role, ParameterEntity parameter);
+}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/UniqueValueRepository.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/UniqueValueRepository.java
index d374a404..cf7b0633 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/UniqueValueRepository.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/UniqueValueRepository.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.persistence;
import org.onap.sdc.workflow.persistence.types.UniqueValueEntity;
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryImpl.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryImpl.java
index 9a449f0d..3c528db1 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryImpl.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryImpl.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.persistence.impl;
import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
@@ -12,14 +28,13 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
-import java.util.Map;
import java.util.Optional;
import org.apache.commons.io.IOUtils;
import org.onap.sdc.workflow.persistence.ArtifactRepository;
import org.onap.sdc.workflow.persistence.types.ArtifactEntity;
+import org.onap.sdc.workflow.persistence.types.WorkflowElementType;
import org.openecomp.core.zusammen.api.ZusammenAdaptor;
import org.openecomp.core.zusammen.api.ZusammenAdaptorFactory;
-import org.openecomp.sdc.datatypes.model.ElementType;
import org.springframework.stereotype.Repository;
@Repository
@@ -33,7 +48,7 @@ public class ArtifactRepositoryImpl implements ArtifactRepository {
@Override
public void update(String id, String versionId, ArtifactEntity artifactEntity) {
- ZusammenElement artifactElement = buildStructuralElement(ElementType.Artifact, Action.UPDATE);
+ ZusammenElement artifactElement = buildStructuralElement(WorkflowElementType.ARTIFACT.name(), Action.UPDATE);
artifactElement.setData(artifactEntity.getArtifactData());
artifactElement.getInfo().addProperty(FILE_NAME_PROPERTY, artifactEntity.getFileName());
@@ -50,7 +65,7 @@ public class ArtifactRepositoryImpl implements ArtifactRepository {
ElementContext elementContext = new ElementContext(id, versionId);
Optional<Element> elementOptional =
- zusammenAdaptor.getElementByName(context, elementContext, null, ElementType.Artifact.name());
+ zusammenAdaptor.getElementByName(context, elementContext, null, WorkflowElementType.ARTIFACT.name());
if (!elementOptional.isPresent() || hasEmptyData(elementOptional.get().getData())) {
return Optional.empty();
@@ -69,7 +84,7 @@ public class ArtifactRepositoryImpl implements ArtifactRepository {
SessionContext context = createSessionContext();
ElementContext elementContext = new ElementContext(id, versionId);
- ZusammenElement artifactElement = buildStructuralElement(ElementType.Artifact, Action.CREATE);
+ ZusammenElement artifactElement = buildStructuralElement(WorkflowElementType.ARTIFACT.name(), Action.CREATE);
artifactElement.setData(new ByteArrayInputStream(EMPTY_DATA.getBytes()));
zusammenAdaptor
@@ -82,12 +97,12 @@ public class ArtifactRepositoryImpl implements ArtifactRepository {
SessionContext context = createSessionContext();
ElementContext elementContext = new ElementContext(id, versionId);
- ZusammenElement artifactElement = buildStructuralElement(ElementType.Artifact, Action.UPDATE);
+ ZusammenElement artifactElement = buildStructuralElement(WorkflowElementType.ARTIFACT.name(), Action.UPDATE);
artifactElement.setData(new ByteArrayInputStream(EMPTY_DATA.getBytes()));
artifactElement.getInfo().getProperties().remove(FILE_NAME_PROPERTY);
zusammenAdaptor
- .saveElement(context, elementContext, artifactElement, "Update WorkflowVersion Artifact Element");
+ .saveElement(context, elementContext, artifactElement, "Delete WorkflowVersion Artifact Data");
}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryImpl.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryImpl.java
new file mode 100644
index 00000000..468e93fe
--- /dev/null
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryImpl.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright © 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.
+ */
+
+package org.onap.sdc.workflow.persistence.impl;
+
+import static org.openecomp.core.zusammen.api.ZusammenUtil.buildElement;
+import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
+import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
+
+import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
+import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
+import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
+import com.amdocs.zusammen.datatypes.Id;
+import com.amdocs.zusammen.datatypes.SessionContext;
+import com.amdocs.zusammen.datatypes.item.Action;
+import com.amdocs.zusammen.datatypes.item.ElementContext;
+import com.amdocs.zusammen.datatypes.item.Info;
+import java.util.Collection;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import org.onap.sdc.workflow.persistence.ParameterRepository;
+import org.onap.sdc.workflow.persistence.types.ParameterEntity;
+import org.onap.sdc.workflow.persistence.types.ParameterPropertyName;
+import org.onap.sdc.workflow.persistence.types.ParameterRole;
+import org.onap.sdc.workflow.persistence.types.ParameterType;
+import org.onap.sdc.workflow.persistence.types.WorkflowElementType;
+import org.openecomp.core.zusammen.api.ZusammenAdaptor;
+import org.openecomp.core.zusammen.api.ZusammenAdaptorFactory;
+import org.openecomp.types.ElementPropertyName;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class ParameterRepositoryImpl implements ParameterRepository {
+
+ private ZusammenAdaptor zusammenAdaptor = ZusammenAdaptorFactory.getInstance().createInterface();
+
+ @Override
+ public void createStructure(String id, String versionId) {
+
+ SessionContext context = createSessionContext();
+ ElementContext elementContext = new ElementContext(id, versionId);
+
+ ZusammenElement inputsElement = buildStructuralElement(WorkflowElementType.INPUTS.name(), Action.CREATE);
+ ZusammenElement outputsElement = buildStructuralElement(WorkflowElementType.OUTPUTS.name(), Action.CREATE);
+
+ zusammenAdaptor.saveElement(context, elementContext, inputsElement, "Create WorkflowVersion INPUTS Element");
+ zusammenAdaptor.saveElement(context, elementContext, outputsElement, "Create WorkflowVersion OUTPUTS Element");
+ }
+
+ @Override
+ public Collection<ParameterEntity> list(String id, String versionId, ParameterRole role) {
+
+ SessionContext context = createSessionContext();
+ ElementContext elementContext = new ElementContext(id, versionId);
+
+ return zusammenAdaptor.listElementsByName(context, elementContext, null, getParentElementType(role)).stream()
+ .map(this::mapElementInfoToParameter).collect(Collectors.toList());
+
+ }
+
+ @Override
+ public void deleteAll(String id, String versionId, ParameterRole role) {
+
+ SessionContext context = createSessionContext();
+ ElementContext elementContext = new ElementContext(id, versionId);
+
+ Optional<ElementInfo> optionalParentElement =
+ zusammenAdaptor.getElementInfoByName(context, elementContext, null, getParentElementType(role));
+
+ if (!optionalParentElement.isPresent()) {
+ return;
+ }
+ ZusammenElement parentElement = buildElement(optionalParentElement.get().getId(), Action.IGNORE);
+ parentElement.setSubElements(optionalParentElement.get().getSubElements().stream()
+ .map(parameter -> buildElement(parameter.getId(),
+ Action.DELETE)).collect(Collectors.toList()));
+
+ zusammenAdaptor.saveElement(context, elementContext, parentElement, "Delete all " + role);
+ }
+
+ @Override
+ public ParameterEntity get(String id, String versionId, String parameterId) {
+
+ SessionContext context = createSessionContext();
+ ElementContext elementContext = new ElementContext(id, versionId);
+
+ Optional<ElementInfo> element = zusammenAdaptor.getElementInfo(context, elementContext, new Id(parameterId));
+
+ return element.map(this::mapElementInfoToParameter).orElse(null);
+ }
+
+ @Override
+ public void delete(String id, String versionId, String parameterId) {
+ SessionContext context = createSessionContext();
+ ElementContext elementContext = new ElementContext(id, versionId);
+
+ ZusammenElement parameterElement = buildElement(new Id(parameterId), Action.DELETE);
+
+ zusammenAdaptor.saveElement(context, elementContext, parameterElement,
+ String.format("Delete Parameter with id %s", parameterId));
+
+ }
+
+ @Override
+ public ParameterEntity create(String id, String versionId, ParameterRole role, ParameterEntity parameter) {
+
+ ZusammenElement parameterElement = parameterToZusammenElement(parameter, role, Action.CREATE);
+ ZusammenElement parentElement = buildStructuralElement(getParentElementType(role), Action.IGNORE);
+ parentElement.addSubElement(parameterElement);
+
+ SessionContext context = createSessionContext();
+ ElementContext elementContext = new ElementContext(id, versionId);
+
+ Element savedElement = zusammenAdaptor.saveElement(context, elementContext, parentElement,
+ "Create WorkflowVersion Parameter Element");
+
+ parameter.setId(savedElement.getSubElements().iterator().next().getElementId().getValue());
+ return parameter;
+ }
+
+ @Override
+ public void update(String id, String versionId, ParameterRole role, ParameterEntity parameter) {
+
+ SessionContext context = createSessionContext();
+ ElementContext elementContext = new ElementContext(id, versionId);
+
+ ZusammenElement parameterElement = parameterToZusammenElement(parameter, role, Action.UPDATE);
+
+ zusammenAdaptor.saveElement(context, elementContext, parameterElement, "Update WorkflowVersion Parameter");
+ }
+
+ private ZusammenElement parameterToZusammenElement(ParameterEntity parameter, ParameterRole role, Action action) {
+
+ ZusammenElement parameterElement =
+ buildElement(parameter.getId() == null ? null : new Id(parameter.getId()), action);
+ Info info = new Info();
+ info.setName(parameter.getName());
+ info.addProperty(ElementPropertyName.elementType.name(), WorkflowElementType.valueOf(role.name()));
+ info.addProperty(ParameterPropertyName.TYPE.name(), parameter.getType());
+ info.addProperty(ParameterPropertyName.mandatory.name(), parameter.isMandatory());
+ parameterElement.setInfo(info);
+
+ return parameterElement;
+ }
+
+ private ParameterEntity mapElementInfoToParameter(ElementInfo elementInfo) {
+ ParameterEntity parameterEntity = new ParameterEntity();
+ parameterEntity.setId(elementInfo.getId().getValue());
+ parameterEntity.setName(elementInfo.getInfo().getName());
+ parameterEntity
+ .setType(ParameterType.valueOf(elementInfo.getInfo().getProperty(ParameterPropertyName.TYPE.name())));
+ parameterEntity.setMandatory(elementInfo.getInfo().getProperty(ParameterPropertyName.mandatory.name()));
+ return parameterEntity;
+ }
+
+ private static String getParentElementType(ParameterRole role) {
+ switch (role) {
+ case INPUT:
+ return WorkflowElementType.INPUTS.name();
+ case OUTPUT:
+ return WorkflowElementType.OUTPUTS.name();
+ default:
+ throw new IllegalArgumentException("Wrong Element Type");
+ }
+ }
+
+}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ArtifactEntity.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ArtifactEntity.java
index 8f24ecc9..287acb45 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ArtifactEntity.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ArtifactEntity.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.persistence.types;
import java.io.InputStream;
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterEntity.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterEntity.java
new file mode 100644
index 00000000..4b57ba71
--- /dev/null
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterEntity.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright © 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.
+ */
+
+package org.onap.sdc.workflow.persistence.types;
+
+import lombok.Data;
+
+@Data
+public class ParameterEntity {
+
+ private String id;
+ private String name;
+ private ParameterType type;
+ private boolean mandatory;
+}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterPropertyName.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterPropertyName.java
new file mode 100644
index 00000000..fa17bf69
--- /dev/null
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterPropertyName.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright © 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.
+ */
+
+package org.onap.sdc.workflow.persistence.types;
+
+public enum ParameterPropertyName {
+
+ TYPE,
+ mandatory
+}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterRole.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterRole.java
new file mode 100644
index 00000000..9f5aacfe
--- /dev/null
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterRole.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright © 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.
+ */
+
+package org.onap.sdc.workflow.persistence.types;
+
+public enum ParameterRole {
+
+ INPUT,
+ OUTPUT
+
+}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterType.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterType.java
new file mode 100644
index 00000000..04d09c01
--- /dev/null
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/ParameterType.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright © 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.
+ */
+
+package org.onap.sdc.workflow.persistence.types;
+
+public enum ParameterType {
+ STRING,
+ INTEGER,
+ FLOAT,
+ BOOLEAN,
+ TIMESTAMP
+}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/UniqueValueEntity.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/UniqueValueEntity.java
index 925ec5cb..ee7172b6 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/UniqueValueEntity.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/UniqueValueEntity.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.persistence.types;
import static org.springframework.data.cassandra.core.cql.PrimaryKeyType.PARTITIONED;
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/Workflow.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/Workflow.java
index 8c66d820..31f949fc 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/Workflow.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/Workflow.java
@@ -1,12 +1,34 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.persistence.types;
+import java.util.Collection;
+import java.util.Set;
+import javax.validation.constraints.NotNull;
import lombok.Data;
@Data
public class Workflow {
private String id;
+ @NotNull
private String name;
private String description;
+ private Set<WorkflowVersionState> versionStates;
+ private Collection<WorkflowVersion> versions;
}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowElementType.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowElementType.java
new file mode 100644
index 00000000..10de37e0
--- /dev/null
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowElementType.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright © 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.
+ */
+
+package org.onap.sdc.workflow.persistence.types;
+
+public enum WorkflowElementType {
+
+ ARTIFACT,
+ INPUTS,
+ OUTPUTS,
+ INPUT,
+ OUTPUT
+}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowProperty.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowProperty.java
index 6c2d804d..90fb3085 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowProperty.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowProperty.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.persistence.types;
public final class WorkflowProperty {
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowVersion.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowVersion.java
index db0999b6..1c828d43 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowVersion.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowVersion.java
@@ -1,5 +1,23 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.persistence.types;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
import lombok.Data;
@@ -11,9 +29,11 @@ public class WorkflowVersion {
private String name;
private String description;
private String baseId;
+ private WorkflowVersionState state;
+ private Collection<ParameterEntity> inputs = Collections.emptyList();
+ private Collection<ParameterEntity> outputs = Collections.emptyList();
private Date creationTime;
private Date modificationTime;
- private WorkflowVersionState state;
public WorkflowVersion(String id) {
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowVersionState.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowVersionState.java
index 9414fa17..2be1d4da 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowVersionState.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/persistence/types/WorkflowVersionState.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.persistence.types;
import java.util.Arrays;
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/UniqueValueService.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/UniqueValueService.java
index a9acb816..0a8b640a 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/UniqueValueService.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/UniqueValueService.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.services;
import java.util.Optional;
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowManager.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowManager.java
index 01c0b053..ca079d42 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowManager.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowManager.java
@@ -1,11 +1,30 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.services;
import java.util.Collection;
+import java.util.Set;
import org.onap.sdc.workflow.persistence.types.Workflow;
+import org.onap.sdc.workflow.persistence.types.WorkflowVersionState;
+import org.springframework.data.domain.Pageable;
public interface WorkflowManager {
- Collection<Workflow> list();
+ Collection<Workflow> list(Set<WorkflowVersionState> versionStatesFilter, Pageable pageable);
Workflow get(Workflow workflow);
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowNameComparator.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowNameComparator.java
new file mode 100644
index 00000000..1cb6cb1d
--- /dev/null
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowNameComparator.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright © 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.
+ */
+
+package org.onap.sdc.workflow.services;
+
+import java.util.Comparator;
+
+import org.onap.sdc.workflow.persistence.types.Workflow;
+
+public class WorkflowNameComparator implements Comparator<Workflow>{
+
+ @Override
+ public int compare(Workflow workflow1, Workflow workflow2) {
+ String workflowName1 = workflow1.getName().toLowerCase();
+ String workflowName2 = workflow2.getName().toLowerCase();
+ //ascending order
+ return workflowName1.compareTo(workflowName2);
+ }
+}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowVersionManager.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowVersionManager.java
index 8b4b8949..8effb647 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowVersionManager.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/WorkflowVersionManager.java
@@ -1,7 +1,23 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.services;
import java.util.Collection;
-import org.onap.sdc.workflow.api.types.VersionRequestDto;
+import java.util.Set;
import org.onap.sdc.workflow.persistence.types.ArtifactEntity;
import org.onap.sdc.workflow.persistence.types.WorkflowVersion;
import org.onap.sdc.workflow.persistence.types.WorkflowVersionState;
@@ -10,11 +26,11 @@ import org.springframework.web.multipart.MultipartFile;
public interface WorkflowVersionManager {
- Collection<WorkflowVersion> list(String workflowId);
+ Collection<WorkflowVersion> list(String workflowId, Set<WorkflowVersionState> stateFilter);
- WorkflowVersion create(String workflowId, VersionRequestDto versionRequest);
+ WorkflowVersion create(String workflowId, String baseVersionId, WorkflowVersion version);
- void update(String id, WorkflowVersion version);
+ void update(String workflowId, WorkflowVersion version);
WorkflowVersion get(String workflowId, String versionId);
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/EntityNotFoundException.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/EntityNotFoundException.java
index 1ed3df5a..7fc3e81c 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/EntityNotFoundException.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/EntityNotFoundException.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.services.exceptions;
public class EntityNotFoundException extends RuntimeException {
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/InvalidArtifactException.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/InvalidArtifactException.java
index 89c5fd5f..c4584179 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/InvalidArtifactException.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/InvalidArtifactException.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.services.exceptions;
public class InvalidArtifactException extends RuntimeException {
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/InvalidPaginationParameterException.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/InvalidPaginationParameterException.java
new file mode 100644
index 00000000..a4d4a5d6
--- /dev/null
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/InvalidPaginationParameterException.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright © 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.
+ */
+
+package org.onap.sdc.workflow.services.exceptions;
+
+public class InvalidPaginationParameterException extends RuntimeException {
+
+ public InvalidPaginationParameterException(String parameterName, String parameterValue, String message) {
+ super(String.format("Requested %s: %s %s", parameterName, parameterValue, message));
+ }
+} \ No newline at end of file
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/UniqueValueViolationException.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/UniqueValueViolationException.java
index 82c97f94..a3046a77 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/UniqueValueViolationException.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/UniqueValueViolationException.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.services.exceptions;
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionCreationException.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionCreationException.java
index af01c68f..31c88923 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionCreationException.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionCreationException.java
@@ -1,12 +1,28 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.services.exceptions;
public class VersionCreationException extends RuntimeException {
private static final String MSG = "Error creating a new version for workflow with id %s";
- private static final String MSG_WITH_BASE_ID = MSG + " based on version %s";
+ private static final String MSG_WITH_BASE_ID = MSG + " based on version %s: %s";
- public VersionCreationException(String workflowId, String baseVersionId) {
- super(String.format(MSG_WITH_BASE_ID, workflowId, baseVersionId));
+ public VersionCreationException(String workflowId, String baseVersionId, String detailedMessage) {
+ super(String.format(MSG_WITH_BASE_ID, workflowId, baseVersionId, detailedMessage));
}
public VersionCreationException(String workflowId) {
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionModificationException.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionModificationException.java
index ff1bf89b..752d6bce 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionModificationException.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionModificationException.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.services.exceptions;
public class VersionModificationException extends RuntimeException {
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionStateModificationException.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionStateModificationException.java
index 6c4606db..87027a58 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionStateModificationException.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/exceptions/VersionStateModificationException.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.services.exceptions;
import org.onap.sdc.workflow.persistence.types.WorkflowVersionState;
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/CollaborationConfiguration.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/CollaborationConfiguration.java
index 2a4cd5aa..80b969cf 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/CollaborationConfiguration.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/CollaborationConfiguration.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.services.impl;
import org.openecomp.sdc.versioning.ItemManager;
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImpl.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImpl.java
index 8ac5025a..52dd8f17 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImpl.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImpl.java
@@ -1,18 +1,48 @@
+/*
+ * Copyright © 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.
+ */
package org.onap.sdc.workflow.services.impl;
+import static org.onap.sdc.workflow.api.RestConstants.SORT_FIELD_NAME;
+
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.onap.sdc.workflow.persistence.types.Workflow;
+import org.onap.sdc.workflow.persistence.types.WorkflowVersionState;
import org.onap.sdc.workflow.services.UniqueValueService;
import org.onap.sdc.workflow.services.WorkflowManager;
+import org.onap.sdc.workflow.services.WorkflowNameComparator;
import org.onap.sdc.workflow.services.exceptions.EntityNotFoundException;
+import org.onap.sdc.workflow.services.impl.mappers.VersionStateMapper;
import org.onap.sdc.workflow.services.impl.mappers.WorkflowMapper;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
import org.openecomp.sdc.versioning.ItemManager;
+import org.openecomp.sdc.versioning.dao.types.VersionStatus;
import org.openecomp.sdc.versioning.types.Item;
import org.openecomp.sdc.versioning.types.ItemStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
@Service("workflowManager")
@@ -21,30 +51,46 @@ public class WorkflowManagerImpl implements WorkflowManager {
public static final String WORKFLOW_TYPE = "WORKFLOW";
private static final String WORKFLOW_NOT_FOUND_ERROR_MSG = "Workflow with id '%s' does not exist";
private static final String WORKFLOW_NAME_UNIQUE_TYPE = "WORKFLOW_NAME";
- static final Predicate<Item> ITEM_PREDICATE = item -> WORKFLOW_TYPE.equals(item.getType());
+ private static final Predicate<Item> WORKFLOW_ITEM_FILTER = item -> WORKFLOW_TYPE.equals(item.getType());
+ private static final Logger LOGGER = LoggerFactory.getLogger(WorkflowManagerImpl.class);
private final ItemManager itemManager;
private final UniqueValueService uniqueValueService;
private final WorkflowMapper workflowMapper;
+ private final VersionStateMapper versionStateMapper;
@Autowired
public WorkflowManagerImpl(ItemManager itemManager,
- @Qualifier("uniqueValueService") UniqueValueService uniqueValueService, WorkflowMapper workflowMapper) {
+ @Qualifier("uniqueValueService") UniqueValueService uniqueValueService, WorkflowMapper workflowMapper,
+ VersionStateMapper versionStateMapper) {
this.itemManager = itemManager;
this.uniqueValueService = uniqueValueService;
this.workflowMapper = workflowMapper;
+ this.versionStateMapper = versionStateMapper;
}
@Override
- public Collection<Workflow> list() {
- return itemManager.list(ITEM_PREDICATE).stream().map(workflowMapper::itemToWorkflow)
- .collect(Collectors.toList());
+ public Collection<Workflow> list(Set<WorkflowVersionState> versionStatesFilter, Pageable pageRequest) {
+ Set<VersionStatus> versionStatusesFilter =
+ versionStatesFilter == null ? null :
+ versionStatesFilter.stream().map(versionStateMapper::workflowVersionStateToVersionStatus)
+ .collect(Collectors.toSet());
+
+
+ List<Workflow> workflows = itemManager.list(getFilter(versionStatusesFilter)).stream()
+ .map(workflowMapper::itemToWorkflow)
+ .sorted(pageRequest.getSort().getOrderFor(SORT_FIELD_NAME).getDirection()
+ == Sort.Direction.ASC ? getWorkflowsComparator() :
+ Collections.reverseOrder(getWorkflowsComparator()))
+ .collect(Collectors.toList());
+ return applyLimitAndOffset(workflows, pageRequest);
}
@Override
public Workflow get(Workflow workflow) {
Item retrievedItem = itemManager.get(workflow.getId());
if (retrievedItem == null) {
+ LOGGER.error(String.format("Workflow with id %s was not found",workflow.getId()));
throw new EntityNotFoundException(String.format(WORKFLOW_NOT_FOUND_ERROR_MSG, workflow.getId()));
}
return this.workflowMapper.itemToWorkflow(retrievedItem);
@@ -56,15 +102,17 @@ public class WorkflowManagerImpl implements WorkflowManager {
item.setStatus(ItemStatus.ACTIVE);
uniqueValueService.validateUniqueValue(WORKFLOW_NAME_UNIQUE_TYPE, new String[] {workflow.getName()});
- workflow.setId(itemManager.create(item).getId());
+ Item createdItem = itemManager.create(item);
uniqueValueService.createUniqueValue(WORKFLOW_NAME_UNIQUE_TYPE, new String[] {workflow.getName()});
- return workflow;
+
+ return workflowMapper.itemToWorkflow(createdItem);
}
@Override
public void update(Workflow workflow) {
Item retrievedItem = itemManager.get(workflow.getId());
if (retrievedItem == null) {
+ LOGGER.error(String.format("Workflow with id %s was not found",workflow.getId()));
throw new EntityNotFoundException(String.format(WORKFLOW_NOT_FOUND_ERROR_MSG, workflow.getId()));
}
@@ -76,4 +124,36 @@ public class WorkflowManagerImpl implements WorkflowManager {
item.setVersionStatusCounters(retrievedItem.getVersionStatusCounters());
itemManager.update(item);
}
+
+ private List<Workflow> applyLimitAndOffset(List<Workflow> workflowList, Pageable pageRequest) {
+ int limit = pageRequest.getPageSize();
+ int offset = pageRequest.getPageNumber();
+ int totalNumOfWorkflows = workflowList.size();
+ List<Workflow> selectedWorkflows;
+ try {
+ if (limit > totalNumOfWorkflows) {
+ limit = totalNumOfWorkflows;
+ }
+ int startIndex = offset * limit;
+ int endIndex = startIndex + limit;
+ if (endIndex > totalNumOfWorkflows) {
+ endIndex = totalNumOfWorkflows;
+ }
+ selectedWorkflows = workflowList.subList(startIndex, endIndex);
+ } catch (IndexOutOfBoundsException | IllegalArgumentException ex) {
+ selectedWorkflows = new ArrayList<>();
+ }
+ return selectedWorkflows;
+ }
+
+ private Comparator<Workflow> getWorkflowsComparator() {
+ //More comparators can be added if required based on sort field name
+ return new WorkflowNameComparator();
+ }
+
+ private static Predicate<Item> getFilter(Set<VersionStatus> versionStatuses) {
+ return WORKFLOW_ITEM_FILTER.and(item -> versionStatuses == null
+ || item.getVersionStatusCounters().keySet().stream()
+ .anyMatch(versionStatuses::contains));
+ }
}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java
index cdfddf34..484c598a 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImpl.java
@@ -1,16 +1,38 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.services.impl;
-import static org.openecomp.sdc.versioning.dao.types.VersionStatus.Certified;
+import static org.onap.sdc.workflow.persistence.types.WorkflowVersionState.CERTIFIED;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
+import java.util.Set;
+import java.util.function.Function;
import java.util.stream.Collectors;
-import org.onap.sdc.workflow.api.types.VersionRequestDto;
import org.onap.sdc.workflow.persistence.ArtifactRepository;
+import org.onap.sdc.workflow.persistence.ParameterRepository;
import org.onap.sdc.workflow.persistence.types.ArtifactEntity;
+import org.onap.sdc.workflow.persistence.types.ParameterEntity;
+import org.onap.sdc.workflow.persistence.types.ParameterRole;
import org.onap.sdc.workflow.persistence.types.WorkflowVersion;
import org.onap.sdc.workflow.persistence.types.WorkflowVersionState;
import org.onap.sdc.workflow.services.WorkflowVersionManager;
@@ -21,8 +43,11 @@ import org.onap.sdc.workflow.services.exceptions.VersionModificationException;
import org.onap.sdc.workflow.services.exceptions.VersionStateModificationException;
import org.onap.sdc.workflow.services.impl.mappers.VersionMapper;
import org.onap.sdc.workflow.services.impl.mappers.VersionStateMapper;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
import org.openecomp.sdc.versioning.VersioningManager;
import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.dao.types.VersionStatus;
import org.openecomp.sdc.versioning.types.VersionCreationMethod;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -35,58 +60,76 @@ public class WorkflowVersionManagerImpl implements WorkflowVersionManager {
private static final String VERSION_NOT_EXIST_MSG = "version with id '%s' does not exist for workflow with id '%s'";
private final VersioningManager versioningManager;
private final ArtifactRepository artifactRepository;
+ private final ParameterRepository parameterRepository;
private final VersionMapper versionMapper;
private final VersionStateMapper versionStateMapper;
-
+ private static final Logger LOGGER = LoggerFactory.getLogger(WorkflowVersionManagerImpl.class);
@Autowired
public WorkflowVersionManagerImpl(VersioningManager versioningManager, ArtifactRepository artifactRepository,
- VersionMapper versionMapper, VersionStateMapper versionStateMapper) {
+ VersionMapper versionMapper, VersionStateMapper versionStateMapper,
+ ParameterRepository parameterRepository) {
this.versioningManager = versioningManager;
this.artifactRepository = artifactRepository;
+ this.parameterRepository = parameterRepository;
this.versionMapper = versionMapper;
this.versionStateMapper = versionStateMapper;
}
@Override
- public Collection<WorkflowVersion> list(String workflowId) {
- return versioningManager.list(workflowId).stream().map(versionMapper::versionToWorkflowVersion)
- .collect(Collectors.toList());
+ public Collection<WorkflowVersion> list(String workflowId, Set<WorkflowVersionState> stateFilter) {
+ Set<VersionStatus> versionStatusFilter =
+ stateFilter == null ? null :
+ stateFilter.stream().map(versionStateMapper::workflowVersionStateToVersionStatus)
+ .collect(Collectors.toSet());
+
+ return versioningManager.list(workflowId).stream()
+ .filter(version -> versionStatusFilter == null || versionStatusFilter.contains(
+ version.getStatus()))
+ .map(versionMapper::versionToWorkflowVersion)
+ .peek(workflowVersion -> loadAndAddParameters(workflowId, workflowVersion))
+ .collect(Collectors.toList());
}
@Override
public WorkflowVersion get(String workflowId, String versionId) {
- return versionMapper.versionToWorkflowVersion(getVersion(workflowId, versionId));
+ WorkflowVersion workflowVersion = versionMapper.versionToWorkflowVersion(getVersion(workflowId, versionId));
+ loadAndAddParameters(workflowId, workflowVersion);
+ return workflowVersion;
}
@Override
- public WorkflowVersion create(String workflowId, VersionRequestDto versionRequest) {
+ public WorkflowVersion create(String workflowId, String baseVersionId, WorkflowVersion workflowVersion) {
List<Version> versions = versioningManager.list(workflowId);
- if (versionRequest.getBaseVersionId() != null) {
- validateVersionExistAndCertified(workflowId, versions, versionRequest.getBaseVersionId());
+ if (baseVersionId != null) {
+ if (!workflowVersion.getInputs().isEmpty() || !workflowVersion.getOutputs().isEmpty()) {
+ throw new VersionCreationException(workflowId, baseVersionId, "Inputs/Outputs should not be supplied");
+ }
+ validateVersionExistAndCertified(workflowId, versions, baseVersionId);
} else if (!versions.isEmpty()) {
throw new VersionCreationException(workflowId);
}
Version version = new Version();
- version.setDescription(versionRequest.getDescription());
- version.setBaseId(versionRequest.getBaseVersionId());
+ version.setDescription(workflowVersion.getDescription());
+ version.setBaseId(baseVersionId);
Version createdVersion = versioningManager.create(workflowId, version, VersionCreationMethod.major);
if (versions.isEmpty()) { // only for first version
artifactRepository.createStructure(workflowId, createdVersion.getId());
- versioningManager.publish(workflowId, createdVersion, "Add workflow structure");
+ parameterRepository.createStructure(workflowId, createdVersion.getId());
+ updateParameters(workflowId, createdVersion.getId(), workflowVersion.getInputs(), workflowVersion.getOutputs());
+ versioningManager.publish(workflowId, createdVersion, "Add initial data");
}
- return versionMapper.versionToWorkflowVersion(createdVersion);
+ return get(workflowId, createdVersion.getId());
}
@Override
public void update(String workflowId, WorkflowVersion workflowVersion) {
Version retrievedVersion = getVersion(workflowId, workflowVersion.getId());
- if (WorkflowVersionState.CERTIFIED
- .equals(versionStateMapper.versionStatusToWorkflowVersionState(retrievedVersion.getStatus()))) {
+ if (CERTIFIED.equals(versionStateMapper.versionStatusToWorkflowVersionState(retrievedVersion.getStatus()))) {
throw new VersionModificationException(workflowId, workflowVersion.getId());
}
@@ -94,6 +137,8 @@ public class WorkflowVersionManagerImpl implements WorkflowVersionManager {
version.setName(retrievedVersion.getName());
version.setStatus(retrievedVersion.getStatus());
+ updateParameters(workflowId, version.getId(), workflowVersion.getInputs(), workflowVersion.getOutputs());
+
versioningManager.updateVersion(workflowId, version);
versioningManager.publish(workflowId, version, "Update version");
}
@@ -105,34 +150,37 @@ public class WorkflowVersionManagerImpl implements WorkflowVersionManager {
@Override
public void updateState(String workflowId, String versionId, WorkflowVersionState state) {
- Version retrievedVersion = getVersion(workflowId, versionId);
WorkflowVersionState retrievedState =
- versionStateMapper.versionStatusToWorkflowVersionState(retrievedVersion.getStatus());
- if (WorkflowVersionState.CERTIFIED.equals(retrievedState) || retrievedState.equals(state)) {
+ versionStateMapper.versionStatusToWorkflowVersionState(getVersion(workflowId, versionId).getStatus());
+
+ if (state == CERTIFIED) {
+ try {
+ versioningManager.submit(workflowId, new Version(versionId),
+ String.format("Update version state to %s", state.name()));
+ } catch (Exception e) {
+ throw new VersionStateModificationException(workflowId, versionId, retrievedState, state);
+ }
+ } else {
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()));
}
@Override
public void uploadArtifact(String workflowId, String versionId, MultipartFile artifact) {
Version retrievedVersion = getVersion(workflowId, versionId);
- if (WorkflowVersionState.CERTIFIED
- .equals(versionStateMapper.versionStatusToWorkflowVersionState(retrievedVersion.getStatus()))) {
+ if (CERTIFIED.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");
} catch (IOException e) {
+ LOGGER.error(String.format("Upload Artifact failed for workflow id %s and version id %s",
+ workflowId, versionId),e);
throw new InvalidArtifactException(e.getMessage());
}
}
@@ -142,8 +190,10 @@ public class WorkflowVersionManagerImpl implements WorkflowVersionManager {
getVersion(workflowId, versionId);
Optional<ArtifactEntity> artifactOptional = artifactRepository.get(workflowId, versionId);
if (!artifactOptional.isPresent()) {
+ LOGGER.error(String.format("Workflow Version Artifact was not found for workflow id %s and version id %s",
+ workflowId, versionId));
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();
}
@@ -151,7 +201,10 @@ public class WorkflowVersionManagerImpl implements WorkflowVersionManager {
@Override
public void deleteArtifact(String workflowId, String versionId) {
WorkflowVersion retrievedVersion = get(workflowId, versionId);
- if (WorkflowVersionState.CERTIFIED.equals(retrievedVersion.getState())) {
+ if (CERTIFIED.equals(retrievedVersion.getState())) {
+ LOGGER.error(String.format(
+ "Workflow Version is certified and can not be edited.Workflow id %s and version id %s", workflowId,
+ versionId));
throw new VersionModificationException(workflowId, versionId);
}
@@ -161,10 +214,10 @@ public class WorkflowVersionManagerImpl implements WorkflowVersionManager {
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);
+ if (CERTIFIED != versionStateMapper.versionStatusToWorkflowVersionState(baseVersion.getStatus())) {
+ throw new VersionCreationException(workflowId, versionId, "base version must be CERTIFIED");
}
}
@@ -176,10 +229,48 @@ public class WorkflowVersionManagerImpl implements WorkflowVersionManager {
}
return version;
} catch (Exception e) {
+ LOGGER.error(String.format(
+ "Workflow Version was not found.Workflow id %s and version id %s", workflowId,
+ versionId),e);
throw new EntityNotFoundException(String.format(VERSION_NOT_EXIST_MSG, versionId, workflowId));
}
}
+ private void updateParameters(String workflowId, String versionId, Collection<ParameterEntity> inputs,
+ Collection<ParameterEntity> outputs) {
+ updateVersionParameters(workflowId, versionId, ParameterRole.INPUT, inputs);
+ updateVersionParameters(workflowId, versionId, ParameterRole.OUTPUT, outputs);
+ }
+
+ private void updateVersionParameters(String workflowId, String versionId, ParameterRole role,
+ Collection<ParameterEntity> parameters) {
+
+ Collection<ParameterEntity> retrievedParams = parameterRepository.list(workflowId, versionId, role);
+ Map<String, ParameterEntity> retrievedParamsByName =
+ retrievedParams.stream().collect(Collectors.toMap(ParameterEntity::getName, Function.identity()));
+
+ Set<String> namesOfParamsToKeep = new HashSet<>();
+ for (ParameterEntity parameter : parameters) {
+
+ ParameterEntity retrievedParam = retrievedParamsByName.get(parameter.getName());
+ if (retrievedParam == null) {
+ parameterRepository.create(workflowId, versionId, role, parameter);
+ } else {
+ parameterRepository.update(workflowId, versionId, role, parameter);
+ namesOfParamsToKeep.add(parameter.getName());
+ }
+ }
+
+ retrievedParams.stream().filter(retrievedParam -> !namesOfParamsToKeep.contains(retrievedParam.getName()))
+ .forEach(retrievedParam -> parameterRepository
+ .delete(workflowId, versionId, retrievedParam.getId()));
+ }
+
+ private void loadAndAddParameters(String workflowId, WorkflowVersion workflowVersion) {
+ workflowVersion.setInputs(parameterRepository.list(workflowId, workflowVersion.getId(), ParameterRole.INPUT));
+ workflowVersion.setOutputs(parameterRepository.list(workflowId, workflowVersion.getId(), ParameterRole.OUTPUT));
+ }
+
private static Optional<Version> findVersion(List<Version> versions, String versionId) {
return versions.stream().filter(version -> versionId.equals(version.getId())).findFirst();
}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/VersionMapper.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/VersionMapper.java
index bcf89661..a3a1cdcc 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/VersionMapper.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/VersionMapper.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.services.impl.mappers;
import org.mapstruct.InheritInverseConfiguration;
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/VersionStateMapper.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/VersionStateMapper.java
index 0c2f5391..45012b57 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/VersionStateMapper.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/VersionStateMapper.java
@@ -1,5 +1,24 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.services.impl.mappers;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.Mapper;
import org.mapstruct.ValueMapping;
@@ -18,5 +37,11 @@ public interface VersionStateMapper {
@InheritInverseConfiguration
VersionStatus workflowVersionStateToVersionStatus(WorkflowVersionState status);
+ default Set<WorkflowVersionState> versionStatusCountersToWorkflowVersionStates(
+ Map<VersionStatus, Integer> versionStatusCounters) {
+ return versionStatusCounters.keySet().stream().map(this::versionStatusToWorkflowVersionState)
+ .collect(Collectors.toSet());
+ }
+
}
diff --git a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/WorkflowMapper.java b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/WorkflowMapper.java
index 34327ce7..5cfcd7ed 100644
--- a/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/WorkflowMapper.java
+++ b/workflow/workflow-designer-be/src/main/java/org/onap/sdc/workflow/services/impl/mappers/WorkflowMapper.java
@@ -1,19 +1,38 @@
+/*
+ * Copyright © 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.
+ */
+
package org.onap.sdc.workflow.services.impl.mappers;
import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
+import org.mapstruct.Mappings;
import org.onap.sdc.workflow.persistence.types.Workflow;
import org.onap.sdc.workflow.services.impl.WorkflowManagerImpl;
import org.openecomp.sdc.versioning.types.Item;
-@Mapper(componentModel = "spring", imports = WorkflowManagerImpl.class)
+@Mapper(componentModel = "spring", imports = WorkflowManagerImpl.class, uses = VersionStateMapper.class)
public interface WorkflowMapper {
+ @Mapping(source = "versionStatusCounters", target = "versionStates")
Workflow itemToWorkflow(Item item);
@InheritInverseConfiguration
- @Mapping(expression = "java(WorkflowManagerImpl.WORKFLOW_TYPE)", target = "type")
+ @Mappings({@Mapping(expression = "java(WorkflowManagerImpl.WORKFLOW_TYPE)", target = "type"),
+ @Mapping(target = "versionStatusCounters", ignore = true)})
Item workflowToItem(Workflow workflow);
}
diff --git a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/RestPath.java b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/RestPath.java
index 266ca91b..7a7e715e 100644
--- a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/RestPath.java
+++ b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/RestPath.java
@@ -1,24 +1,66 @@
package org.onap.sdc.workflow;
+import static org.onap.sdc.workflow.api.RestConstants.SIZE_PARAM;
+import static org.onap.sdc.workflow.api.RestConstants.PAGE_PARAM;
+import static org.onap.sdc.workflow.api.RestConstants.SORT_PARAM;
+
public class RestPath {
+
+ private RestPath() {
+ //Hiding implicit constructor
+ }
+
private static final String WORKFLOWS_URL = "/workflows";
+ public static final String WORKFLOWS_WITH_VERSION_STATE_FILTER_URL = WORKFLOWS_URL + "?versionState=%s";
private static final String WORKFLOW_URL_FORMATTER = WORKFLOWS_URL + "/%s";
private static final String VERSIONS_URL_FORMATTER = WORKFLOWS_URL + "/%s/versions";
private static final String VERSION_URL_FORMATTER = WORKFLOWS_URL + "/%s/versions/%s";
+ private static final String SORT_QUERY_STRING_FORMATTER = SORT_PARAM + "=%s";
+ private static final String SIZE_QUERY_STRING_FORMATTER = SIZE_PARAM + "=%s";
+ private static final String OFFSET_QUERY_STRING_FORMATTER = PAGE_PARAM + "=%s";
+ private static final String WORKFLOW_URL_FORMATTER_QUERY_PARAMS_ALL =
+ WORKFLOWS_URL + "?" + SORT_QUERY_STRING_FORMATTER+ "&" + SIZE_QUERY_STRING_FORMATTER + "&" +
+ OFFSET_QUERY_STRING_FORMATTER;
+ private static final String WORKFLOW_URL_FORMATTER_QUERY_PARAMS_NO_SORT =
+ WORKFLOWS_URL + "?" + SIZE_QUERY_STRING_FORMATTER + "&" + OFFSET_QUERY_STRING_FORMATTER;
+ private static final String WORKFLOW_URL_FORMATTER_QUERY_PARAMS_NO_SORT_AND_SIZE =
+ WORKFLOWS_URL + "?" + OFFSET_QUERY_STRING_FORMATTER;
+ private static final String WORKFLOW_URL_FORMATTER_QUERY_PARAMS_NO_SORT_AND_OFFSET =
+ WORKFLOWS_URL + "?" + SIZE_QUERY_STRING_FORMATTER;
+
+ public static String getWorkflowsPathAllQueryParams(String sort, String size, String offset){
+ return String.format(WORKFLOW_URL_FORMATTER_QUERY_PARAMS_ALL, sort, size, offset);
+ }
+
+ public static String getWorkflowsPathNoSort(String size, String offset){
+ return String.format(WORKFLOW_URL_FORMATTER_QUERY_PARAMS_NO_SORT, size, offset);
+ }
+
+ public static String getWorkflowsPathNoSortAndSize(String offset){
+ return String.format(WORKFLOW_URL_FORMATTER_QUERY_PARAMS_NO_SORT_AND_SIZE, offset);
+ }
- public static String getWorkflowsPath(){
+ public static String getWorkflowsPathNoSortAndOffset(String size){
+ return String.format(WORKFLOW_URL_FORMATTER_QUERY_PARAMS_NO_SORT_AND_OFFSET, size);
+ }
+
+ public static String getWorkflowsPath() {
return WORKFLOWS_URL;
}
- public static String getWorkflowPath(String workflowId){
+ public static String getWorkflowsWithVersionStateFilterPath(String versionState) {
+ return String.format(WORKFLOWS_WITH_VERSION_STATE_FILTER_URL, versionState);
+ }
+
+ public static String getWorkflowPath(String workflowId) {
return String.format(WORKFLOW_URL_FORMATTER, workflowId);
}
- public static String getWorkflowVersions(String workflowId){
+ public static String getWorkflowVersions(String workflowId) {
return String.format(VERSIONS_URL_FORMATTER, workflowId);
}
- public static String getWorkflowVersion(String workflowId, String versionId){
+ public static String getWorkflowVersion(String workflowId, String versionId) {
return String.format(VERSION_URL_FORMATTER, workflowId, versionId);
}
}
diff --git a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/TestUtil.java b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/TestUtil.java
index 47ce060b..e2a566aa 100644
--- a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/TestUtil.java
+++ b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/TestUtil.java
@@ -7,32 +7,29 @@ public class TestUtil {
private static final String WORKFLOW_TYPE = "WORKFLOW";
- public static Workflow createWorkflow(int workflowPropertySuffix, boolean createId) {
+ public static Workflow createWorkflow(int workflowNum, boolean createId) {
Workflow workflow = new Workflow();
if (createId) {
- workflow.setId("workflowId" + workflowPropertySuffix);
+ workflow.setId(String.valueOf(workflowNum));
}
- workflow.setName("workflowName" + workflowPropertySuffix);
- workflow.setDescription("workflowDesc" + workflowPropertySuffix);
+ workflow.setName("Workflow_" + workflowNum);
+ workflow.setDescription("Description_" + workflowNum);
return workflow;
}
- public static Item createItem(int itemNum,boolean setType, boolean setId){
+ public static Item createItem(int itemNum, boolean setType, boolean setId) {
Item item = new Item();
- if(setId) {
- item.setId("workflowId" + itemNum);
+ if (setId) {
+ item.setId(String.valueOf(itemNum));
}
- item.addProperty("category","category_" + itemNum);
item.setName("Workflow_" + itemNum);
item.setDescription("Description_" + itemNum);
- if(setType) {
+ if (setType) {
item.setType(WORKFLOW_TYPE);
}
-
return item;
}
-
}
diff --git a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/api/WorkflowControllerTest.java b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/api/WorkflowControllerTest.java
index 69b25b01..5e7df483 100644
--- a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/api/WorkflowControllerTest.java
+++ b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/api/WorkflowControllerTest.java
@@ -4,10 +4,14 @@ import static org.hamcrest.Matchers.is;
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.onap.sdc.workflow.TestUtil.createWorkflow;
+import static org.onap.sdc.workflow.api.RestConstants.PAGE_DEFAULT;
+import static org.onap.sdc.workflow.api.RestConstants.SIZE_DEFAULT;
+import static org.onap.sdc.workflow.api.RestConstants.SORT_FIELD_NAME;
+import static org.onap.sdc.workflow.api.RestConstants.SORT_PARAM;
import static org.onap.sdc.workflow.api.RestConstants.USER_ID_HEADER_PARAM;
import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
@@ -16,9 +20,15 @@ import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import com.amdocs.zusammen.datatypes.Id;
+import com.amdocs.zusammen.datatypes.item.Item;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.ImmutableSet;
import com.google.gson.Gson;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
+import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -26,13 +36,14 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.onap.sdc.workflow.RestPath;
+import org.onap.sdc.workflow.api.exceptionshandlers.CustomizedResponseEntityExceptionHandler;
+import org.onap.sdc.workflow.api.types.CollectionWrapper;
import org.onap.sdc.workflow.persistence.types.Workflow;
+import org.onap.sdc.workflow.persistence.types.WorkflowVersionState;
import org.onap.sdc.workflow.services.WorkflowManager;
-import org.openecomp.sdc.versioning.types.Item;
-import org.springframework.http.MediaType;
+import org.springframework.data.web.PageableHandlerMethodArgumentResolver;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.web.servlet.MockMvc;
-import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
@RunWith(MockitoJUnitRunner.class)
@@ -42,6 +53,11 @@ public class WorkflowControllerTest {
"Missing request header '%s' for method parameter of type String";
private static final String USER_ID = "userId";
private static final Gson GSON = new Gson();
+ private static final String USER_ID_HEADER = "USER_ID";
+ private static final String INVALID_PAGINATION_PARAMETER_FORMAT = "Requested %s: %s %s";
+ private static final String PAGINATION_PARAMETER_INVALID_SORT_FIELD_SUFFIX =
+ "is not supported. Supported values are: ";
+ private static final String DEFAULT_SORT_VALUE = "name,asc";
private MockMvc mockMvc;
@@ -54,7 +70,9 @@ public class WorkflowControllerTest {
@Before
public void setUp() {
- mockMvc = MockMvcBuilders.standaloneSetup(workflowController).build();
+ mockMvc = MockMvcBuilders.standaloneSetup(workflowController)
+ .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver())
+ .setControllerAdvice(new CustomizedResponseEntityExceptionHandler()).build();
}
@Test
@@ -64,17 +82,17 @@ public class WorkflowControllerTest {
mockMvc.perform(get(RestPath.getWorkflowPath(workflowMock.getId())).contentType(APPLICATION_JSON))
.andDo(print()).andExpect(status().isBadRequest()).andExpect(status().is(400)).andReturn()
.getResponse();
- assertEquals(String.format(MISSING_REQUEST_HEADER_ERRROR_FORMAT, "USER_ID"), response.getErrorMessage());
+ assertEquals(String.format(MISSING_REQUEST_HEADER_ERRROR_FORMAT, USER_ID_HEADER),
+ response.getContentAsString());
}
@Test
public void shouldReturnWorkflowDataWhenRequestPathIsOk() throws Exception {
Workflow workflowMock = createWorkflow(1, true);
doReturn(workflowMock).when(workflowManagerMock).get(any(Workflow.class));
- mockMvc.perform(
- get(RestPath.getWorkflowPath(workflowMock.getId())).header(USER_ID_HEADER_PARAM, USER_ID)
- .contentType(APPLICATION_JSON)).andDo(print())
- .andExpect(status().isOk()).andExpect(jsonPath("$.id", is(workflowMock.getId())))
+ mockMvc.perform(get(RestPath.getWorkflowPath(workflowMock.getId())).header(USER_ID_HEADER_PARAM, USER_ID)
+ .contentType(APPLICATION_JSON))
+ .andDo(print()).andExpect(status().isOk()).andExpect(jsonPath("$.id", is(workflowMock.getId())))
.andExpect(jsonPath("$.name", is(workflowMock.getName())));
}
@@ -83,29 +101,160 @@ public class WorkflowControllerTest {
MockHttpServletResponse response =
mockMvc.perform(get(RestPath.getWorkflowsPath()).contentType(APPLICATION_JSON)).andDo(print())
.andExpect(status().isBadRequest()).andExpect(status().is(400)).andReturn().getResponse();
- assertEquals(String.format(MISSING_REQUEST_HEADER_ERRROR_FORMAT, USER_ID_HEADER_PARAM), response.getErrorMessage());
+ assertEquals(String.format(MISSING_REQUEST_HEADER_ERRROR_FORMAT, USER_ID_HEADER_PARAM),
+ response.getContentAsString());
}
@Test
public void shouldReturn5WorkflowWhen5WorkflowsExists() throws Exception {
int numOfWorkflows = 5;
List<Workflow> workflowMocks = createWorkflows(numOfWorkflows);
- doReturn(workflowMocks).when(workflowManagerMock).list();
+ doReturn(workflowMocks).when(workflowManagerMock).list(any(), any());
mockMvc.perform(
get(RestPath.getWorkflowsPath()).header(USER_ID_HEADER_PARAM, USER_ID).contentType(APPLICATION_JSON))
.andDo(print()).andExpect(status().isOk()).andExpect(jsonPath("$.results", hasSize(numOfWorkflows)));
}
@Test
+ public void listWithValidVersionStateFilter() throws Exception {
+ int numOfWorkflows = 3;
+ List<Workflow> workflows = createWorkflows(numOfWorkflows);
+ doReturn(workflows).when(workflowManagerMock)
+ .list(eq(Collections.singleton(WorkflowVersionState.CERTIFIED)), any());
+ mockMvc.perform(
+ get(RestPath.getWorkflowsWithVersionStateFilterPath("CERTIFIED")).header(USER_ID_HEADER_PARAM, USER_ID)
+ .contentType(APPLICATION_JSON))
+ .andDo(print()).andExpect(status().isOk()).andExpect(jsonPath("$.total", is(numOfWorkflows)))
+ .andExpect(jsonPath("$.results", hasSize(numOfWorkflows)));
+ }
+
+ @Test
+ public void listWithInvalidVersionStateFilter() throws Exception {
+ mockMvc.perform(
+ get(RestPath.getWorkflowsWithVersionStateFilterPath("hasdhf")).header(USER_ID_HEADER_PARAM, USER_ID)
+ .contentType(APPLICATION_JSON))
+ .andDo(print()).andExpect(status().isOk()).andExpect(jsonPath("$.total", is(0)));
+ }
+
+ @Test
+ public void shouldReturnSortedSizeOffsetAppliedWorkflows() throws Exception {
+ List<Workflow> workflowMocks = createSize2AndOffset1For5WorkflowList();
+ doReturn(workflowMocks).when(workflowManagerMock).list(any(), any());
+ mockMvc.perform(get(RestPath.getWorkflowsPathAllQueryParams(DEFAULT_SORT_VALUE, "2", "1"))
+ .header(RestConstants.USER_ID_HEADER_PARAM, USER_ID).contentType(APPLICATION_JSON))
+ .andDo(print()).andExpect(status().isOk()).andExpect(jsonPath("$.results", hasSize(2)));
+ }
+
+ @Test
+ public void shouldReturnResultsWithDefaultWhenSizeIsNegative() throws Exception {
+ List<Workflow> workflowMocks = createSize2AndOffset1For5WorkflowList();
+ doReturn(workflowMocks).when(workflowManagerMock).list(any(), any());
+ MockHttpServletResponse response = mockMvc.perform(
+ get(RestPath.getWorkflowsPathAllQueryParams(DEFAULT_SORT_VALUE, "-2", "1"))
+ .header(RestConstants.USER_ID_HEADER_PARAM, USER_ID).contentType(APPLICATION_JSON))
+ .andDo(print()).andExpect(status().isOk()).andExpect(status().is(200))
+ .andReturn().getResponse();
+ CollectionWrapper workflowListResponse =
+ new ObjectMapper().readValue(response.getContentAsString(), CollectionWrapper.class);
+ assertEquals(SIZE_DEFAULT, workflowListResponse.getSize());
+ assertEquals(1, workflowListResponse.getPage());
+ assertEquals(2, workflowListResponse.getTotal());
+ }
+
+ @Test
+ public void shouldFallbackOnDefaultOffsetWhenOffsetIsNegative() throws Exception {
+ MockHttpServletResponse response = mockMvc.perform(
+ get(RestPath.getWorkflowsPathAllQueryParams(DEFAULT_SORT_VALUE, "2", "-1"))
+ .header(RestConstants.USER_ID_HEADER_PARAM, USER_ID).contentType(APPLICATION_JSON))
+ .andDo(print()).andExpect(status().isOk()).andExpect(status().is(200))
+ .andReturn().getResponse();
+ CollectionWrapper workflowListResponse =
+ new ObjectMapper().readValue(response.getContentAsString(), CollectionWrapper.class);
+ assertEquals(2, workflowListResponse.getSize());
+ assertEquals(PAGE_DEFAULT, workflowListResponse.getPage());
+ assertEquals(0, workflowListResponse.getTotal());
+ }
+
+ @Test
+ public void shouldFallbackOnDefaultSizeWhenSizeIsNotAnInteger() throws Exception {
+ MockHttpServletResponse response = mockMvc.perform(
+ get(RestPath.getWorkflowsPathAllQueryParams(DEFAULT_SORT_VALUE, "abc", "0"))
+ .header(RestConstants.USER_ID_HEADER_PARAM, USER_ID).contentType(APPLICATION_JSON))
+ .andDo(print()).andExpect(status().isOk()).andExpect(status().is(200))
+ .andReturn().getResponse();
+ CollectionWrapper workflowListResponse =
+ new ObjectMapper().readValue(response.getContentAsString(), CollectionWrapper.class);
+ assertEquals(SIZE_DEFAULT, workflowListResponse.getSize());
+ assertEquals(0, workflowListResponse.getPage());
+ assertEquals(0, workflowListResponse.getTotal());
+ }
+
+ @Test
+ public void shouldFallbackOnDefaultOffsetWhenOffsetIsNotAnInteger() throws Exception {
+ MockHttpServletResponse response = mockMvc.perform(
+ get(RestPath.getWorkflowsPathAllQueryParams(DEFAULT_SORT_VALUE, "2", "abc"))
+ .header(RestConstants.USER_ID_HEADER_PARAM, USER_ID).contentType(APPLICATION_JSON))
+ .andDo(print()).andExpect(status().isOk()).andExpect(status().is(200))
+ .andReturn().getResponse();
+ CollectionWrapper workflowListResponse =
+ new ObjectMapper().readValue(response.getContentAsString(), CollectionWrapper.class);
+ assertEquals(2, workflowListResponse.getSize());
+ assertEquals(PAGE_DEFAULT, workflowListResponse.getPage());
+ assertEquals(0, workflowListResponse.getTotal());
+ }
+
+ @Test
+ public void shouldThrowExceptionWhenSortFieldIsInvalid() throws Exception {
+ MockHttpServletResponse response = mockMvc.perform(
+ get(RestPath.getWorkflowsPathAllQueryParams("invalidSortField,asc", "2", "1"))
+ .header(RestConstants.USER_ID_HEADER_PARAM, USER_ID).contentType(APPLICATION_JSON))
+ .andDo(print()).andExpect(status().isBadRequest())
+ .andExpect(status().is(400)).andReturn().getResponse();
+ assertEquals(String.format(INVALID_PAGINATION_PARAMETER_FORMAT, SORT_PARAM, "invalidSortField",
+ PAGINATION_PARAMETER_INVALID_SORT_FIELD_SUFFIX + getSupportedSortFields()),
+ response.getContentAsString());
+ }
+
+ @Test
+ public void shouldReturnAscSortedSizeOffsetAppliedWorkflowsWhenSortIsNotSpecified() throws Exception {
+ List<Workflow> workflowMocks = createSize2AndOffset1For5WorkflowList();
+ doReturn(workflowMocks).when(workflowManagerMock).list(any(), any());
+ mockMvc.perform(
+ get(RestPath.getWorkflowsPathNoSort("2", "1")).header(RestConstants.USER_ID_HEADER_PARAM, USER_ID)
+ .contentType(APPLICATION_JSON)).andDo(print())
+ .andExpect(status().isOk()).andExpect(jsonPath("$.results", hasSize(2)));
+ }
+
+ @Test
+ public void shouldReturnDefaultSizeOffsetAppliedWorkflowsWhenSizeIsNotSpecified() throws Exception {
+ List<Workflow> workflowMocks = createSize2AndOffset1For5WorkflowList();
+ doReturn(workflowMocks).when(workflowManagerMock).list(any(), any());
+ mockMvc.perform(
+ get(RestPath.getWorkflowsPathNoSortAndSize("1")).header(RestConstants.USER_ID_HEADER_PARAM, USER_ID)
+ .contentType(APPLICATION_JSON)).andDo(print())
+ .andExpect(status().isOk()).andExpect(jsonPath("$.results", hasSize(2)));
+ }
+
+ @Test
+ public void shouldReturnDefaultOffsetAppliedWorkflowsWhenOffsetIsNotSpecified() throws Exception {
+ List<Workflow> workflowMocks = createSize1WorkflowList();
+ doReturn(workflowMocks).when(workflowManagerMock).list(any(), any());
+ mockMvc.perform(
+ get(RestPath.getWorkflowsPathNoSortAndOffset("1")).header(RestConstants.USER_ID_HEADER_PARAM, USER_ID)
+ .contentType(APPLICATION_JSON)).andDo(print())
+ .andExpect(status().isOk()).andExpect(jsonPath("$.results", hasSize(1)));
+ }
+
+ @Test
public void shouldCreateWorkflowWhenCallingPostRESTRequest() throws Exception {
Item item = new Item();
- item.setId("abc");
+ item.setId(new Id("abc"));
Workflow reqWorkflow = createWorkflow(1, false);
mockMvc.perform(
post(RestPath.getWorkflowsPath()).header(USER_ID_HEADER_PARAM, USER_ID).contentType(APPLICATION_JSON)
- .content(GSON.toJson(reqWorkflow))).andDo(print()).andExpect(status().isCreated())
- .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE));
- verify(workflowManagerMock, times(1)).create(reqWorkflow);
+ .content(GSON.toJson(reqWorkflow))).andDo(print())
+ .andExpect(status().isCreated());
+ verify(workflowManagerMock).create(reqWorkflow);
}
private List<Workflow> createWorkflows(int numOfWorkflows) {
@@ -117,5 +266,22 @@ public class WorkflowControllerTest {
return workflowList;
}
+ private List<Workflow> createSize2AndOffset1For5WorkflowList() {
+ List<Workflow> workflowList = new ArrayList<>();
+ workflowList.add(createWorkflow(2, true));
+ workflowList.add(createWorkflow(3, true));
+ return workflowList;
+ }
+
+ private List<Workflow> createSize1WorkflowList() {
+ List<Workflow> workflowList = new ArrayList<>();
+ workflowList.add(createWorkflow(0, true));
+ return workflowList;
+ }
+
+
+ private Set<String> getSupportedSortFields() {
+ return ImmutableSet.of(SORT_FIELD_NAME);
+ }
} \ No newline at end of file
diff --git a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/api/WorkflowVersionControllerTest.java b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/api/WorkflowVersionControllerTest.java
index 75b132ad..ee9a56c8 100644
--- a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/api/WorkflowVersionControllerTest.java
+++ b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/api/WorkflowVersionControllerTest.java
@@ -25,7 +25,6 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.onap.sdc.workflow.RestPath;
-import org.onap.sdc.workflow.api.types.VersionRequestDto;
import org.onap.sdc.workflow.persistence.types.WorkflowVersion;
import org.onap.sdc.workflow.services.WorkflowVersionManager;
import org.openecomp.sdc.versioning.dao.types.Version;
@@ -62,28 +61,28 @@ public class WorkflowVersionControllerTest {
@Test
public void shouldReturnWorkflowVersionListWhenCallingVersionGetREST() throws Exception {
- doReturn(versionList).when(workflowVersionManagerMock).list(ITEM1_ID);
+ doReturn(versionList).when(workflowVersionManagerMock).list(ITEM1_ID, null);
mockMvc.perform(get(RestPath.getWorkflowVersions(ITEM1_ID)).header(RestConstants.USER_ID_HEADER_PARAM, USER_ID)
.contentType(APPLICATION_JSON)).andExpect(status().isOk())
.andExpect(jsonPath("$.results", hasSize(2)))
.andExpect(jsonPath("$.results[0].id", equalTo(VERSION1_ID)))
.andExpect(jsonPath("$.results[1].id", equalTo(VERSION2_ID)));
- verify(workflowVersionManagerMock, times(1)).list(ITEM1_ID);
+ verify(workflowVersionManagerMock, times(1)).list(ITEM1_ID, null);
}
@Test
public void shouldCreateWorkflowVersionWhenCallingVersionsPostREST() throws Exception {
- VersionRequestDto version = new VersionRequestDto();
+ WorkflowVersion version = new WorkflowVersion();
version.setDescription("VersionDescription");
mockMvc.perform(post(RestPath.getWorkflowVersions(ITEM1_ID)).header(RestConstants.USER_ID_HEADER_PARAM, USER_ID)
.contentType(APPLICATION_JSON)
.content(GSON.toJson(version)))
.andExpect(status().isCreated());
- verify(workflowVersionManagerMock, times(1)).create(ITEM1_ID, version);
+ verify(workflowVersionManagerMock, times(1)).create(ITEM1_ID, null, version);
}
diff --git a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryTest.java b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryTest.java
index 4bec8b97..b86b14b9 100644
--- a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryTest.java
+++ b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ArtifactRepositoryTest.java
@@ -1,15 +1,40 @@
package org.onap.sdc.workflow.persistence.impl;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.isNull;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.verify;
+import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
+
+import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
+import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
+import com.amdocs.zusammen.datatypes.Id;
+import com.amdocs.zusammen.datatypes.SessionContext;
+import com.amdocs.zusammen.datatypes.item.Action;
+import com.amdocs.zusammen.datatypes.item.ElementContext;
import java.io.IOException;
+import java.io.InputStream;
+import java.util.Optional;
+import org.apache.commons.io.IOUtils;
+import org.junit.Before;
import org.junit.Test;
+import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.sdc.workflow.persistence.types.ArtifactEntity;
+import org.onap.sdc.workflow.persistence.types.WorkflowElementType;
import org.openecomp.core.zusammen.api.ZusammenAdaptor;
+import org.openecomp.sdc.common.session.SessionContextProviderFactory;
+@RunWith(MockitoJUnitRunner.class)
public class ArtifactRepositoryTest {
private static final String FILE_NAME_PROPERTY = "fileName";
- private static final String EMPTY_DATA = "{}";
+ private static final String FILE_NAME = "fileName.txt";
private static final String ITEM1_ID = "item_id_1";
private static final String VERSION1_ID = "version_id_1";
@@ -20,10 +45,55 @@ public class ArtifactRepositoryTest {
@InjectMocks
private ArtifactRepositoryImpl artifactRepository;
+ @Before
+ public void setUp() {
+ SessionContextProviderFactory.getInstance().createInterface().create("test_user", "workflow");
+ }
+
@Test
public void shouldUpdateArtifact() throws IOException {
+ InputStream inputStreamMock = IOUtils.toInputStream("some test data for my input stream", "UTF-8");
+ ArtifactEntity artifactMock = new ArtifactEntity(FILE_NAME, inputStreamMock);
+
+ artifactRepository.update(ITEM1_ID, VERSION1_ID, artifactMock);
+ verify(zusammenAdaptorMock)
+ .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
+ eq("Update WorkflowVersion Artifact Element"));
}
+ @Test
+ public void shouldGetArtifactWhenExist() throws IOException {
+
+ ZusammenElement artifactElement = buildStructuralElement(WorkflowElementType.ARTIFACT.name(), Action.UPDATE);
+ artifactElement.setData(IOUtils.toInputStream("some test data for my input stream", "UTF-8"));
+ artifactElement.getInfo().addProperty(FILE_NAME_PROPERTY, FILE_NAME);
+ Optional<Element> elementOptional = Optional.of(artifactElement);
+
+ doReturn(elementOptional).when(zusammenAdaptorMock)
+ .getElementByName(any(SessionContext.class), any(ElementContext.class), isNull(Id.class),
+ eq(WorkflowElementType.ARTIFACT.name()));
+
+ Optional<ArtifactEntity> result = artifactRepository.get(ITEM1_ID, VERSION1_ID);
+ assertTrue(result.isPresent());
+ assertEquals(FILE_NAME,result.get().getFileName());
+ verify(zusammenAdaptorMock).getElementByName(any(SessionContext.class), any(ElementContext.class), isNull(Id.class),
+ eq(WorkflowElementType.ARTIFACT.name()));
+ }
+
+ @Test
+ public void shouldCreateArtifactStructure() {
+ artifactRepository.createStructure(ITEM1_ID, VERSION1_ID);
+ verify(zusammenAdaptorMock)
+ .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
+ eq("Create WorkflowVersion Artifact Element"));
+ }
+
+ @Test
+ public void shouldDeleteArtifact(){
+ artifactRepository.delete(ITEM1_ID,VERSION1_ID);
+ verify(zusammenAdaptorMock).saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
+ eq("Delete WorkflowVersion Artifact Data"));
+ }
}
diff --git a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryTest.java b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryTest.java
new file mode 100644
index 00000000..07a42658
--- /dev/null
+++ b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/persistence/impl/ParameterRepositoryTest.java
@@ -0,0 +1,166 @@
+package org.onap.sdc.workflow.persistence.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.verify;
+
+import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
+import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
+import com.amdocs.zusammen.datatypes.Id;
+import com.amdocs.zusammen.datatypes.SessionContext;
+import com.amdocs.zusammen.datatypes.item.ElementContext;
+import com.amdocs.zusammen.datatypes.item.Info;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Optional;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mapstruct.ap.internal.util.Collections;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.sdc.workflow.persistence.types.ParameterEntity;
+import org.onap.sdc.workflow.persistence.types.ParameterPropertyName;
+import org.onap.sdc.workflow.persistence.types.ParameterRole;
+import org.onap.sdc.workflow.persistence.types.ParameterType;
+import org.onap.sdc.workflow.persistence.types.WorkflowElementType;
+import org.openecomp.core.zusammen.api.ZusammenAdaptor;
+import org.openecomp.sdc.common.session.SessionContextProviderFactory;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ParameterRepositoryTest {
+
+ private static final String ITEM1_ID = "item_id_1";
+ private static final String VERSION1_ID = "version_id_1";
+ private static final String PARAMETER1_ID = "parameter_id_1";
+ private static final String PARAMETER2_ID = "parameter_id_2";
+ private static final String PARAMETERS_PARENT_ID = "parameters_id";
+
+
+ @Mock
+ private ZusammenAdaptor zusammenAdaptorMock;
+ @Spy
+ @InjectMocks
+ private ParameterRepositoryImpl parameterRepository;
+
+ @Before
+ public void setUp() {
+ SessionContextProviderFactory.getInstance().createInterface().create("test_user", "workflow");
+ }
+
+ @Test
+ public void shouldGetParameterById() {
+
+ ElementInfo element = new ElementInfo();
+ element.setId(new Id(PARAMETER1_ID));
+ Info info = new Info();
+ info.setName("testInput");
+ info.addProperty(ParameterPropertyName.TYPE.name(), ParameterType.FLOAT.name());
+ info.addProperty(ParameterPropertyName.mandatory.name(), true);
+ element.setInfo(info);
+ doReturn(Optional.of(element)).when(zusammenAdaptorMock)
+ .getElementInfo(any(SessionContext.class), any(ElementContext.class),
+ eq(new Id(PARAMETER1_ID)));
+ ParameterEntity result = parameterRepository.get(ITEM1_ID, VERSION1_ID, PARAMETER1_ID);
+ verify(zusammenAdaptorMock)
+ .getElementInfo(any(SessionContext.class), any(ElementContext.class), eq(new Id(PARAMETER1_ID)));
+ assertEquals("testInput", result.getName());
+
+ }
+
+
+ @Test
+ public void shouldUpdateParameter() {
+ ParameterEntity parameterEntityToUpdate = new ParameterEntity();
+ parameterEntityToUpdate.setId(PARAMETER1_ID);
+ parameterEntityToUpdate.setName("Input1");
+ parameterEntityToUpdate.setMandatory(true);
+ parameterEntityToUpdate.setType(ParameterType.STRING);
+
+ parameterRepository.update(ITEM1_ID, VERSION1_ID, ParameterRole.INPUT, parameterEntityToUpdate);
+ verify(zusammenAdaptorMock)
+ .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
+ eq("Update WorkflowVersion Parameter"));
+
+ }
+
+ @Test
+ public void shouldCreateParameterStructure() {
+ parameterRepository.createStructure(ITEM1_ID, VERSION1_ID);
+ verify(zusammenAdaptorMock)
+ .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
+ eq("Create WorkflowVersion INPUTS Element"));
+ verify(zusammenAdaptorMock)
+ .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
+ eq("Create WorkflowVersion OUTPUTS Element"));
+ }
+
+ @Test
+ public void shouldDeleteParameter() {
+ parameterRepository.delete(ITEM1_ID, VERSION1_ID, PARAMETER1_ID);
+ verify(zusammenAdaptorMock)
+ .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
+ eq("Delete Parameter with id parameter_id_1"));
+ }
+
+
+ @Test
+ public void shouldListParametersByType() {
+
+ ElementInfo parameter1 = new ElementInfo();
+ parameter1.setId(new Id(PARAMETER1_ID));
+ Info info1 = new Info();
+ info1.setName("input1");
+ info1.addProperty(ParameterPropertyName.TYPE.name(), "INTEGER");
+ info1.addProperty(ParameterPropertyName.mandatory.name(), true);
+ parameter1.setInfo(info1);
+ ElementInfo parameter2 = new ElementInfo();
+ parameter2.setId(new Id(PARAMETER2_ID));
+ Info info2 = new Info();
+ info2.setName("input2");
+ info2.addProperty(ParameterPropertyName.TYPE.name(), "STRING");
+ info2.addProperty(ParameterPropertyName.mandatory.name(), false);
+ parameter2.setInfo(info2);
+ Collection<ElementInfo> parameters = Collections.asSet(parameter1, parameter2);
+ doReturn(parameters).when(zusammenAdaptorMock)
+ .listElementsByName(any(SessionContext.class), any(ElementContext.class), isNull(),
+ eq(WorkflowElementType.INPUTS.name()));
+ Collection<ParameterEntity> results = parameterRepository.list(ITEM1_ID, VERSION1_ID, ParameterRole.INPUT);
+
+ verify(zusammenAdaptorMock).listElementsByName(any(SessionContext.class), any(ElementContext.class), isNull(),
+ eq(WorkflowElementType.INPUTS.name()));
+ assertTrue(results.stream().anyMatch(parameterEntity -> parameterEntity.getId().equals(PARAMETER1_ID)));
+ assertTrue(results.stream().anyMatch(parameterEntity -> parameterEntity.getId().equals(PARAMETER2_ID)));
+ }
+
+ @Test
+ public void shouldDeleteAllParametersByType() {
+ ElementInfo parameterParentElement = new ElementInfo();
+ parameterParentElement.setId(new Id(PARAMETERS_PARENT_ID));
+ ElementInfo parameter1 = new ElementInfo();
+ parameter1.setId(new Id(PARAMETER1_ID));
+ ElementInfo parameter2 = new ElementInfo();
+ parameter2.setId(new Id(PARAMETER2_ID));
+ parameterParentElement.setSubElements(new ArrayList<>());
+ parameterParentElement.getSubElements().add(parameter1);
+ parameterParentElement.getSubElements().add(parameter2);
+
+ Optional<ElementInfo> elementOptional = Optional.of(parameterParentElement);
+
+ doReturn(elementOptional).when(zusammenAdaptorMock)
+ .getElementInfoByName(any(SessionContext.class), any(ElementContext.class), isNull(),
+ eq(WorkflowElementType.INPUTS.name()));
+
+ parameterRepository.deleteAll(ITEM1_ID, VERSION1_ID, ParameterRole.INPUT);
+ verify(zusammenAdaptorMock)
+ .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
+ eq("Delete all INPUT"));
+ }
+
+}
diff --git a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImplTest.java b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImplTest.java
index 17037d9b..0105fe83 100644
--- a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImplTest.java
+++ b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/services/impl/WorkflowManagerImplTest.java
@@ -1,62 +1,107 @@
package org.onap.sdc.workflow.services.impl;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.onap.sdc.workflow.TestUtil.createItem;
import static org.onap.sdc.workflow.TestUtil.createWorkflow;
+import static org.onap.sdc.workflow.api.RestConstants.SORT_FIELD_NAME;
+import static org.openecomp.sdc.versioning.dao.types.VersionStatus.Certified;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
-import org.junit.Before;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.onap.sdc.workflow.persistence.types.Workflow;
+import org.onap.sdc.workflow.persistence.types.WorkflowVersionState;
import org.onap.sdc.workflow.services.UniqueValueService;
import org.onap.sdc.workflow.services.exceptions.EntityNotFoundException;
+import org.onap.sdc.workflow.services.impl.mappers.VersionStateMapper;
import org.onap.sdc.workflow.services.impl.mappers.WorkflowMapper;
import org.openecomp.sdc.versioning.ItemManager;
import org.openecomp.sdc.versioning.types.Item;
import org.openecomp.sdc.versioning.types.ItemStatus;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
public class WorkflowManagerImplTest {
- private static final String ITEM1_ID = "workflowId1";
+ private static final String ITEM1_ID = "1";
private static final String WORKFLOW_TYPE = "WORKFLOW";
private static final String WORKFLOW_NAME_UNIQUE_TYPE = "WORKFLOW_NAME";
- private List<Item> itemList;
-
- @Mock
- private WorkflowMapper workflowMapperMock;
+ private static final List<Item> ITEMS;
+ private static final List<Workflow> MAPPED_WORKFLOWS;
+
+ static {
+ List<Item> items = new ArrayList<>();
+ List<Workflow> mappedWorkflows = new ArrayList<>();
+ for (int i = 1; i < 6; i++) {
+ items.add(createItem(i, true, true));
+ mappedWorkflows.add(createWorkflow(i, true));
+ }
+ ITEMS = Collections.unmodifiableList(items);
+ MAPPED_WORKFLOWS = Collections.unmodifiableList(mappedWorkflows);
+ }
@Mock
private ItemManager itemManagerMock;
-
@Mock
private UniqueValueService uniqueValueServiceMock;
-
+ @Mock
+ private WorkflowMapper workflowMapperMock;
+ @Mock
+ private VersionStateMapper versionStateMapperMock;
@InjectMocks
private WorkflowManagerImpl workflowManager;
-
- @Before
- public void setUp() {
- itemList = Arrays.asList(createItem(1, true, true), createItem(2, true, true), createItem(3, true, true));
-
- }
-
-
@Test
public void shouldReturnWorkflowVersionList() {
+ doReturn(ITEMS).when(itemManagerMock).list(any());
+ for (int i = 0; i < ITEMS.size(); i++) {
+ doReturn(MAPPED_WORKFLOWS.get(i)).when(workflowMapperMock).itemToWorkflow(ITEMS.get(i));
+ }
+ Collection<Workflow> workflows =
+ workflowManager.list(null, createPageRequest(20, 0, Sort.Direction.ASC, SORT_FIELD_NAME));
+
+ Map<String, Workflow> workflowById =
+ workflows.stream().collect(Collectors.toMap(Workflow::getId, Function.identity()));
+ assertEquals(ITEMS.size(), workflows.size());
+ for (int i = 1; i < ITEMS.size() + 1; i++) {
+ assertTrue(workflowById.containsKey(String.valueOf(i)));
+ }
+ }
- doReturn(itemList).when(itemManagerMock).list(WorkflowManagerImpl.ITEM_PREDICATE);
- workflowManager.list();
- verify(itemManagerMock).list(WorkflowManagerImpl.ITEM_PREDICATE);
+ @Test
+ public void listWithVersionStateFilter() {
+ doReturn(Certified).when(versionStateMapperMock)
+ .workflowVersionStateToVersionStatus(WorkflowVersionState.CERTIFIED);
+ doReturn(Arrays.asList(ITEMS.get(0), ITEMS.get(2))).when(itemManagerMock).list(any());
+ doReturn(MAPPED_WORKFLOWS.get(0)).when(workflowMapperMock).itemToWorkflow(ITEMS.get(0));
+ doReturn(MAPPED_WORKFLOWS.get(2)).when(workflowMapperMock).itemToWorkflow(ITEMS.get(2));
+
+ Collection<Workflow> workflows = workflowManager.list(Collections.singleton(WorkflowVersionState.CERTIFIED),
+ createPageRequest(20, 0, Sort.Direction.ASC, SORT_FIELD_NAME));
+
+ Map<String, Workflow> workflowById =
+ workflows.stream().collect(Collectors.toMap(Workflow::getId, Function.identity()));
+ assertEquals(2, workflows.size());
+ assertTrue(workflowById.containsKey("1"));
+ assertTrue(workflowById.containsKey("3"));
}
@Test(expected = EntityNotFoundException.class)
@@ -76,8 +121,6 @@ public class WorkflowManagerImplTest {
workflowManager.get(workflow);
verify(itemManagerMock).get(ITEM1_ID);
verify(workflowMapperMock).itemToWorkflow(retrievedItem);
-
-
}
@Test
@@ -116,4 +159,82 @@ public class WorkflowManagerImplTest {
workflowManager.update(createWorkflow(1, true));
}
+ @Test
+ public void shouldListAllWorkflowsWhenLimitAndOffsetAreValid() {
+ PageRequest pageRequest = createPageRequest(5, 0, Sort.Direction.ASC, SORT_FIELD_NAME);
+ doReturn(ITEMS).when(itemManagerMock).list(any());
+ for (int i = 0; i < ITEMS.size(); i++) {
+ doReturn(MAPPED_WORKFLOWS.get(i)).when(workflowMapperMock).itemToWorkflow(ITEMS.get(i));
+ }
+ Assert.assertEquals(5, workflowManager.list(null, pageRequest).size());
+ }
+
+ @Test
+ public void shouldListLimitFilteredWorkflowsInFirstOffsetRange() {
+ PageRequest pageRequest = createPageRequest(3, 0, Sort.Direction.ASC, SORT_FIELD_NAME);
+ doReturn(ITEMS).when(itemManagerMock).list(any());
+ for (int i = 0; i < ITEMS.size(); i++) {
+ doReturn(MAPPED_WORKFLOWS.get(i)).when(workflowMapperMock).itemToWorkflow(ITEMS.get(i));
+ }
+ Assert.assertEquals(3, workflowManager.list(null, pageRequest).size());
+ }
+
+ @Test
+ public void shouldListLimitFilteredWorkflowsInSecondOffsetRange() {
+ PageRequest pageRequest = createPageRequest(3, 1, Sort.Direction.ASC, SORT_FIELD_NAME);
+ doReturn(ITEMS).when(itemManagerMock).list(any());
+ for (int i = 0; i < ITEMS.size(); i++) {
+ doReturn(MAPPED_WORKFLOWS.get(i)).when(workflowMapperMock).itemToWorkflow(ITEMS.get(i));
+ }
+ Assert.assertEquals(2, workflowManager.list(null, pageRequest).size());
+ }
+
+ @Test
+ public void shouldListAllWorkflowsWhenLimitGreaterThanTotalRecordsAndOffsetInRange() {
+ PageRequest pageRequest = createPageRequest(10, 0, Sort.Direction.ASC, SORT_FIELD_NAME);
+ doReturn(ITEMS).when(itemManagerMock).list(any());
+ for (int i = 0; i < ITEMS.size(); i++) {
+ doReturn(MAPPED_WORKFLOWS.get(i)).when(workflowMapperMock).itemToWorkflow(ITEMS.get(i));
+ }
+ Assert.assertEquals(5, workflowManager.list(null, pageRequest).size());
+ }
+
+ @Test
+ public void shouldNotListWorkflowsIfOffsetGreaterThanTotalRecords() {
+ PageRequest pageRequest = createPageRequest(3, 6, Sort.Direction.ASC, SORT_FIELD_NAME);
+ doReturn(ITEMS).when(itemManagerMock).list(any());
+ for (int i = 0; i < ITEMS.size(); i++) {
+ doReturn(MAPPED_WORKFLOWS.get(i)).when(workflowMapperMock).itemToWorkflow(ITEMS.get(i));
+ }
+ Assert.assertEquals(0, workflowManager.list(null, pageRequest).size());
+ }
+
+ @Test
+ public void shouldNotListWorkflowsBothLimitAndOffsetGreaterThanTotalRecords() {
+ PageRequest pageRequest = createPageRequest(10, 10, Sort.Direction.ASC, SORT_FIELD_NAME);
+ doReturn(ITEMS).when(itemManagerMock).list(any());
+ for (int i = 0; i < ITEMS.size(); i++) {
+ doReturn(MAPPED_WORKFLOWS.get(i)).when(workflowMapperMock).itemToWorkflow(ITEMS.get(i));
+ }
+ Assert.assertEquals(0, workflowManager.list(null, pageRequest).size());
+ }
+
+ @Test
+ public void shouldListLimitOffsetAppliedWorkflowsSortedInDescOrder() {
+ PageRequest pageRequest = createPageRequest(2, 1, Sort.Direction.DESC, SORT_FIELD_NAME);
+ doReturn(ITEMS).when(itemManagerMock).list(any());
+ for (int i = 0; i < ITEMS.size(); i++) {
+ doReturn(MAPPED_WORKFLOWS.get(i)).when(workflowMapperMock).itemToWorkflow(ITEMS.get(i));
+ }
+ Collection<Workflow> workflows = workflowManager.list(null, pageRequest);
+ Assert.assertEquals(2, workflows.size());
+ Iterator<Workflow> workflowIterator = workflows.iterator();
+ Assert.assertEquals("Workflow_3", workflowIterator.next().getName());
+ Assert.assertEquals("Workflow_2", workflowIterator.next().getName());
+ }
+
+ private PageRequest createPageRequest(int limit, int offset, Sort.Direction sortOrder, String sortField) {
+ return PageRequest.of(offset, limit, sortOrder, sortField);
+ }
+
} \ No newline at end of file
diff --git a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImplTest.java b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImplTest.java
index 144db81e..7dee5245 100644
--- a/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImplTest.java
+++ b/workflow/workflow-designer-be/src/test/java/org/onap/sdc/workflow/services/impl/WorkflowVersionManagerImplTest.java
@@ -1,9 +1,10 @@
package org.onap.sdc.workflow.services.impl;
import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.times;
@@ -13,9 +14,9 @@ import static org.onap.sdc.workflow.persistence.types.WorkflowVersionState.DRAFT
import java.io.IOException;
import java.io.InputStream;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.Date;
import java.util.List;
import java.util.Optional;
import org.apache.commons.io.IOUtils;
@@ -25,10 +26,12 @@ import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentMatcher;
import org.mockito.InjectMocks;
import org.mockito.Mock;
+import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
-import org.onap.sdc.workflow.api.types.VersionRequestDto;
import org.onap.sdc.workflow.persistence.ArtifactRepository;
+import org.onap.sdc.workflow.persistence.ParameterRepository;
import org.onap.sdc.workflow.persistence.types.ArtifactEntity;
+import org.onap.sdc.workflow.persistence.types.ParameterRole;
import org.onap.sdc.workflow.persistence.types.WorkflowVersion;
import org.onap.sdc.workflow.persistence.types.WorkflowVersionState;
import org.onap.sdc.workflow.services.exceptions.EntityNotFoundException;
@@ -52,11 +55,14 @@ public class WorkflowVersionManagerImplTest {
@Mock
private VersioningManager versioningManagerMock;
@Mock
+ private ParameterRepository parameterRepositoryMock;
+ @Mock
private ArtifactRepository artifactRepositoryMock;
@Mock
private VersionMapper versionMapperMock;
@Mock
private VersionStateMapper versionStateMapperMock;
+ @Spy
@InjectMocks
private WorkflowVersionManagerImpl workflowVersionManager;
@@ -70,29 +76,27 @@ public class WorkflowVersionManagerImplTest {
@Test
public void shouldReturnWorkflowVersionWhenExist() {
Version version = new Version(VERSION1_ID);
- doReturn(version).when(versioningManagerMock).get(ITEM1_ID, version);
- workflowVersionManager.get(ITEM1_ID, VERSION1_ID);
- verify(versioningManagerMock).get(ITEM1_ID, version);
+ WorkflowVersion workflowVersion = new WorkflowVersion(VERSION1_ID);
+ doReturn(workflowVersion).when(versionMapperMock).versionToWorkflowVersion(any(Version.class));
+ doReturn(version).when(versioningManagerMock).get(eq(ITEM1_ID),any(Version.class));
+ doReturn(new ArrayList()).when(parameterRepositoryMock).list(eq(ITEM1_ID), eq(VERSION1_ID), any(ParameterRole.class));
+ workflowVersionManager.get(ITEM1_ID,VERSION1_ID);
+ verify(versioningManagerMock).get(ITEM1_ID,version);
}
@Test
public void shouldReturnWorkflowVersionList() {
List<Version> versionList = Arrays.asList(new Version(VERSION1_ID), new Version(VERSION2_ID));
- versionList.forEach(version -> {
- version.setBaseId("baseVersionId");
- version.setDescription("Version description");
- version.setName("name");
- version.setCreationTime(new Date());
- version.setModificationTime(new Date());
- });
doReturn(versionList).when(versioningManagerMock).list(ITEM1_ID);
- workflowVersionManager.list(ITEM1_ID);
+ doReturn(new WorkflowVersion()).when(versionMapperMock).versionToWorkflowVersion(any(Version.class));
+ workflowVersionManager.list(ITEM1_ID, null);
verify(versioningManagerMock).list(ITEM1_ID);
verify(versionMapperMock, times(2)).versionToWorkflowVersion(any(Version.class));
}
@Test
public void shouldUpdateWorkflowVersion() {
+ String updatedDescription = "WorkflowVersion description updated";
Version retrievedVersion = new Version(VERSION1_ID);
retrievedVersion.setName("1.0");
retrievedVersion.setDescription("WorkflowVersion description");
@@ -102,11 +106,13 @@ public class WorkflowVersionManagerImplTest {
WorkflowVersion inputVersion = new WorkflowVersion(VERSION1_ID);
inputVersion.setName("1.0");
- inputVersion.setDescription("WorkflowVersion description updated");
+ inputVersion.setDescription(updatedDescription);
+ inputVersion.setInputs(new ArrayList<>());
+ inputVersion.setOutputs(new ArrayList<>());
Version mappedInputVersion = new Version(VERSION1_ID);
mappedInputVersion.setName("1.0");
- mappedInputVersion.setDescription("WorkflowVersion description updated");
+ mappedInputVersion.setDescription(updatedDescription);
doReturn(mappedInputVersion).when(versionMapperMock).workflowVersionToVersion(inputVersion);
ArgumentCaptor<Version> versionArgCaptor = ArgumentCaptor.forClass(Version.class);
@@ -115,34 +121,37 @@ public class WorkflowVersionManagerImplTest {
verify(versioningManagerMock).updateVersion(eq(ITEM1_ID), versionArgCaptor.capture());
Version captorVersion = versionArgCaptor.getValue();
assertEquals("1.0", captorVersion.getName());
- assertEquals("WorkflowVersion description updated", captorVersion.getDescription());
+ assertEquals(updatedDescription, captorVersion.getDescription());
assertEquals(VersionStatus.Draft, captorVersion.getStatus());
verify(versioningManagerMock).publish(ITEM1_ID, mappedInputVersion, "Update version");
}
+
@Test
- public void shouldCreateWorkflowVersion() {
+ public void shouldCreateWorkflowVersion(){
Version version = new Version(VERSION1_ID);
version.setDescription("version desc");
- doReturn(version).when(versioningManagerMock).create(ITEM1_ID, version, VersionCreationMethod.major);
- VersionRequestDto workflowVersion = new VersionRequestDto();
- workflowVersion.setDescription("version desc");
- workflowVersionManager.create(ITEM1_ID, workflowVersion);
- verify(versioningManagerMock).create(ITEM1_ID, version, VersionCreationMethod.major);
-
+ doReturn(version).when(versioningManagerMock).create(ITEM1_ID,version, VersionCreationMethod.major);
+ WorkflowVersion versionRequest = new WorkflowVersion();
+ versionRequest.setDescription("version desc");
+ versionRequest.setInputs(new ArrayList<>());
+ versionRequest.setOutputs(new ArrayList<>());
+ WorkflowVersion workflowVersion = new WorkflowVersion(VERSION1_ID);
+ doReturn(workflowVersion).when(workflowVersionManager).get(ITEM1_ID,VERSION1_ID);
+ workflowVersionManager.create(ITEM1_ID, null, versionRequest);
+ verify(versioningManagerMock).create(ITEM1_ID,version, VersionCreationMethod.major);
}
@Test(expected = VersionCreationException.class)
public void shouldTrowExceptionWhenDraftVersionExists() {
- VersionRequestDto versionRequestDto = new VersionRequestDto();
- versionRequestDto.setBaseVersionId(VERSION2_ID);
+ WorkflowVersion versionRequestDto = new WorkflowVersion();
Version baseVersion = new Version(VERSION2_ID);
baseVersion.setStatus(VersionStatus.Draft);
List<Version> versions = Collections.singletonList(baseVersion);
doReturn(versions).when(versioningManagerMock).list(ITEM1_ID);
- workflowVersionManager.create(ITEM1_ID, versionRequestDto);
+ workflowVersionManager.create(ITEM1_ID, VERSION2_ID, versionRequestDto);
}
@Test(expected = EntityNotFoundException.class)
@@ -184,6 +193,8 @@ public class WorkflowVersionManagerImplTest {
version.setStatus(VersionStatus.Certified);
doReturn(version).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
doReturn(CERTIFIED).when(versionStateMapperMock).versionStatusToWorkflowVersionState(version.getStatus());
+ doThrow(new RuntimeException()).when(versioningManagerMock)
+ .submit(eq(ITEM1_ID), eqVersion(VERSION1_ID), anyString());
workflowVersionManager.updateState(ITEM1_ID, VERSION1_ID, CERTIFIED);
}
@@ -194,15 +205,10 @@ public class WorkflowVersionManagerImplTest {
retrievedVersion.setStatus(VersionStatus.Draft);
doReturn(retrievedVersion).when(versioningManagerMock).get(eq(ITEM1_ID), eqVersion(VERSION1_ID));
doReturn(DRAFT).when(versionStateMapperMock).versionStatusToWorkflowVersionState(VersionStatus.Draft);
- doReturn(VersionStatus.Certified).when(versionStateMapperMock).workflowVersionStateToVersionStatus(CERTIFIED);
- ArgumentCaptor<Version> versionArgCaptor = ArgumentCaptor.forClass(Version.class);
workflowVersionManager.updateState(ITEM1_ID, VERSION1_ID, CERTIFIED);
- verify(versioningManagerMock).updateVersion(eq(ITEM1_ID), versionArgCaptor.capture());
- assertEquals(VersionStatus.Certified, versionArgCaptor.getValue().getStatus());
- verify(versioningManagerMock)
- .publish(eq(ITEM1_ID), eqVersion(VERSION1_ID), eq("Update version state from DRAFT to CERTIFIED"));
+ verify(versioningManagerMock).submit(eq(ITEM1_ID), eqVersion(VERSION1_ID), anyString());
}
@Test
diff --git a/workflow/workflow-designer-init/src/main/docker/start.sh b/workflow/workflow-designer-init/src/main/docker/start.sh
index ac89d6c0..919277fd 100644
--- a/workflow/workflow-designer-init/src/main/docker/start.sh
+++ b/workflow/workflow-designer-init/src/main/docker/start.sh
@@ -1,11 +1,21 @@
#!/bin/sh
-if [[ -z "${CS_USER}" ]]; then
+is_cs_unauthenticated=1
+FALSE=0
+if [[ -z "${CS_AUTHENTICATE}" || "${CS_AUTHENTICATE}" == "false" ]]; then
+ is_cs_unauthenticated=$FALSE
+fi
+
+if [ $is_cs_unauthenticated -eq $FALSE ]; then
+ echo "Establishing unsecured connection to Cassandra"
+fi
+
+if [[ $is_cs_unauthenticated -eq 1 && -z "${CS_USER}" ]]; then
echo "CS_USER environment variable must be set"
exit 1
fi
-if [[ -z "${CS_PASSWORD}" ]]; then
+if [[ $is_cs_unauthenticated -eq 1 && -z "${CS_PASSWORD}" ]]; then
echo "CS_PASSWORD environment variable must be set"
exit 1
fi
@@ -15,4 +25,9 @@ if [[ -z "${CS_HOST}" ]]; then
exit 1
fi
-cqlsh -u ${CS_USER} -p ${CS_PASSWORD} -f /create_workflow_db.cql ${CS_HOST} ${CS_PORT}
+if [ $is_cs_unauthenticated -eq 1 ]; then
+ cqlsh -u ${CS_USER} -p ${CS_PASSWORD} -f /create_workflow_db.cql ${CS_HOST} ${CS_PORT}
+else
+ cqlsh -f /create_workflow_db.cql ${CS_HOST} ${CS_PORT}
+fi
+