Merge "Add a certificate in communication with VNFM"
authorSeshu Kumar M <seshu.kumar.m@huawei.com>
Mon, 13 Jul 2020 12:21:47 +0000 (12:21 +0000)
committerGerrit Code Review <gerrit@onap.org>
Mon, 13 Jul 2020 12:21:47 +0000 (12:21 +0000)
142 files changed:
adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/inventory/CreateAAIInventory.java
adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeApi.java
adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeImpl.java
adapters/mso-openstack-adapters/src/test/java/org/onap/so/heatbridge/HeatBridgeImplTest.java
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/ExecuteBuildingBlock.java
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/WorkflowResourceIds.java
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildingBlockRainyDay.java
bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java
bpmn/so-bpmn-tasks/pom.xml
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/buildingblock/SniroHomingV2.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/mapper/GCTopologyOperationRequestMapper.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/mapper/GCTopologyOperationRequestMapper.java with 99% similarity]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/mapper/GeneralTopologyObjectMapper.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/mapper/GeneralTopologyObjectMapper.java with 99% similarity]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/mapper/NetworkTopologyOperationRequestMapper.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/mapper/NetworkTopologyOperationRequestMapper.java with 99% similarity]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/mapper/ServiceTopologyOperationMapper.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/mapper/ServiceTopologyOperationMapper.java with 98% similarity]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/mapper/VfModuleTopologyOperationRequestMapper.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/mapper/VfModuleTopologyOperationRequestMapper.java with 99% similarity]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/mapper/VnfTopologyOperationRequestMapper.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/mapper/VnfTopologyOperationRequestMapper.java with 99% similarity]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ConfigBuildingBlocksDataObject.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ReplaceInstanceRelatedInformation.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/SDNCConfigurationResources.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/SDNCNetworkResources.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/SDNCServiceInstanceResources.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/SDNCVfModuleResources.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/SDNCVnfResources.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/mapper/GCTopologyOperationRequestMapperTest.java [moved from bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/sdnc/mapper/GCTopologyOperationRequestMapperTest.java with 54% similarity]
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/mapper/GeneralTopologyObjectMapperTest.java [moved from bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/sdnc/mapper/GeneralTopologyObjectMapperTest.java with 99% similarity]
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/mapper/NetworkTopologyOperationRequestMapperTest.java [moved from bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/sdnc/mapper/NetworkTopologyOperationRequestMapperTest.java with 98% similarity]
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/mapper/ServiceTopologyOperationMapperTest.java [moved from bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/sdnc/mapper/ServiceTopologyOperationMapperTest.java with 96% similarity]
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/mapper/VfModuleTopologyOperationRequestMapperTest.java [moved from bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/sdnc/mapper/VfModuleTopologyOperationRequestMapperTest.java with 98% similarity]
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/sdnc/mapper/VnfTopologyOperationRequestMapperTest.java [moved from bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/sdnc/mapper/VnfTopologyOperationRequestMapperTest.java with 97% similarity]
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasksTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/SDNCConfigurationResourcesTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/SDNCNetworkResourcesTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/SDNCServiceInstanceResourcesTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/SDNCVfModuleResourcesTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/SDNCVnfResourcesTest.java
common/src/main/java/org/onap/so/client/exception/BadResponseException.java [moved from bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/BadResponseException.java with 100% similarity]
common/src/main/java/org/onap/so/client/exception/MapperException.java [moved from bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/MapperException.java with 100% similarity]
graph-inventory/fluent-builder-maven-plugin/src/main/java/org/onap/graphinventory/generate/FluentGenerator.java
graph-inventory/fluent-builder-maven-plugin/src/main/java/org/onap/graphinventory/generate/Patterns.java
graph-inventory/fluent-builder-maven-plugin/src/main/java/org/onap/graphinventory/generate/SwaggerConverter.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/WorkflowSpecificationsHandler.java
mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/WorkflowSpecificationsHandlerTest.java
mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/WorkflowSpecificationsForService.json [new file with mode: 0644]
mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/WorkflowSpecificationsForServiceWorkflows_Response.json [new file with mode: 0644]
pom.xml
so-optimization-clients/pom.xml [new file with mode: 0644]
so-optimization-clients/src/main/java/org/onap/so/client/oof/OofClient.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/OofClient.java with 98% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/oof/OofValidator.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/OofValidator.java with 98% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/oof/beans/LicenseDemand.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/beans/LicenseDemand.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/oof/beans/LicenseInfo.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/beans/LicenseInfo.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/oof/beans/ModelInfo.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/beans/ModelInfo.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/oof/beans/OofProperties.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/beans/OofProperties.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/oof/beans/OofRequest.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/beans/OofRequest.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/oof/beans/OofRequestParameters.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/beans/OofRequestParameters.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/oof/beans/PlacementDemand.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/beans/PlacementDemand.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/oof/beans/PlacementInfo.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/beans/PlacementInfo.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/oof/beans/RequestInfo.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/beans/RequestInfo.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/oof/beans/Resource.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/beans/Resource.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/oof/beans/ResourceModelInfo.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/beans/ResourceModelInfo.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/oof/beans/ServiceInfo.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/beans/ServiceInfo.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/oof/beans/SubscriberInfo.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/oof/beans/SubscriberInfo.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/SniroClient.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/SniroClient.java with 92% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/SniroValidator.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/SniroValidator.java with 99% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/Candidate.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/Candidate.java with 96% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/CandidateType.java [new file with mode: 0644]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/ConductorProperties.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/ConductorProperties.java with 59% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/Demand.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/Demand.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/LicenseInfo.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/LicenseInfo.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/ManagerProperties.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/ManagerProperties.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/ModelInfo.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/ModelInfo.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/PlacementInfo.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/PlacementInfo.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/RequestInfo.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/RequestInfo.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/Resource.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/Resource.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/ServiceInfo.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/ServiceInfo.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/SniroConductorRequest.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/SniroConductorRequest.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/SniroManagerRequest.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/SniroManagerRequest.java with 100% similarity]
so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/SubscriberInfo.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/SubscriberInfo.java with 100% similarity]
so-optimization-clients/src/test/java/org/onap/so/BaseIntegrationTest.java [new file with mode: 0644]
so-optimization-clients/src/test/java/org/onap/so/EmbeddedMariaDbConfig.java [new file with mode: 0644]
so-optimization-clients/src/test/java/org/onap/so/IntegrationTestSuite.java [new file with mode: 0644]
so-optimization-clients/src/test/java/org/onap/so/TestApplication.java [new file with mode: 0644]
so-optimization-clients/src/test/java/org/onap/so/client/oof/OofClientTestIT.java [moved from bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/oof/OofClientTestIT.java with 99% similarity]
so-optimization-clients/src/test/java/org/onap/so/client/sniro/SniroClientTestIT.java [moved from bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/sniro/SniroClientTestIT.java with 100% similarity]
so-optimization-clients/src/test/resources/application-test.yaml [new file with mode: 0644]
so-optimization-clients/src/test/resources/schema.sql [new file with mode: 0644]
so-sdn-clients/pom.xml [new file with mode: 0644]
so-sdn-clients/src/main/java/org/onap/so/client/sdnc/SDNCClient.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/SDNCClient.java with 100% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdnc/SdnCommonTasks.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/SdnCommonTasks.java with 100% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdnc/beans/SDNCProperties.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/beans/SDNCProperties.java with 100% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdnc/beans/SDNCRequest.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/beans/SDNCRequest.java with 100% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdnc/beans/SDNCSvcAction.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/beans/SDNCSvcAction.java with 100% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdnc/beans/SDNCSvcOperation.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/beans/SDNCSvcOperation.java with 100% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdnc/endpoint/SDNCTopology.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdnc/endpoint/SDNCTopology.java with 100% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdno/SDNOHealthCheckClient.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdno/SDNOHealthCheckClient.java with 100% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdno/SDNOValidator.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdno/SDNOValidator.java with 76% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdno/SDNOValidatorImpl.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdno/SDNOValidatorImpl.java with 90% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdno/beans/AAIParamList.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdno/beans/AAIParamList.java with 100% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdno/beans/Body.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdno/beans/Body.java with 100% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdno/beans/Input.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdno/beans/Input.java with 100% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdno/beans/RequestHdCustom.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdno/beans/RequestHdCustom.java with 100% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdno/beans/RequestHealthDiagnostic.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdno/beans/RequestHealthDiagnostic.java with 100% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdno/beans/ResultInfo.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdno/beans/ResultInfo.java with 100% similarity]
so-sdn-clients/src/main/java/org/onap/so/client/sdno/beans/SDNO.java [moved from bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sdno/beans/SDNO.java with 100% similarity]
so-sdn-clients/src/test/java/org/onap/so/BaseIntegrationTest.java [new file with mode: 0644]
so-sdn-clients/src/test/java/org/onap/so/EmbeddedMariaDbConfig.java [new file with mode: 0644]
so-sdn-clients/src/test/java/org/onap/so/IntegrationTestSuite.java [new file with mode: 0644]
so-sdn-clients/src/test/java/org/onap/so/TestApplication.java [new file with mode: 0644]
so-sdn-clients/src/test/java/org/onap/so/UnitTestSuite.java [new file with mode: 0644]
so-sdn-clients/src/test/java/org/onap/so/client/sdn/common/SdnCommonTasksTest.java [moved from bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/sdn/common/SdnCommonTasksTest.java with 100% similarity]
so-sdn-clients/src/test/java/org/onap/so/client/sdnc/SDNCClientIT.java [moved from bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/sdnc/SDNCClientIT.java with 100% similarity]
so-sdn-clients/src/test/java/org/onap/so/client/sdno/SDNOHealthCheckClientTest.java [moved from bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/sdno/SDNOHealthCheckClientTest.java with 97% similarity]
so-sdn-clients/src/test/java/org/onap/so/client/sdno/SDNOValidatorIT.java [moved from bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/sdno/SDNOValidatorIT.java with 98% similarity]
so-sdn-clients/src/test/java/org/onap/so/client/sdno/SDNOValidatorImplTest.java [moved from bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/sdno/SDNOValidatorImplTest.java with 100% similarity]
so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiEcompModelInformation.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiNetworkOperationInformation.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiNetworkOperationInformationNoNetworkName.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiNetworkOperationInformationUnAssign.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiVfModuleOperationInformationAssign.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiVfModuleOperationInformationUnassign.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/SDNCClientGetResponse.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/SDNCClientPrelaodDataResponse.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/SDNCClientPrelaodDataResponseWithInvalidAdditionalAndExtVmData.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/SDNCClientPrelaodDataResponseWithInvalidData.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/SDNCClientPrelaodDataResponseWithInvalidVnfParamsTag.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/SDNCClientPut200Response.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/SDNCClientPut200ResponseNotFinal.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/SDNCClientPut404Response.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/SDNCClientResponseIncorrectPath.json [new file with mode: 0644]
so-sdn-clients/src/test/resources/__files/sdno/client/output-failure.json [moved from bpmn/so-bpmn-tasks/src/test/resources/org/onap/so/client/sdno/output-failure.json with 100% similarity]
so-sdn-clients/src/test/resources/__files/sdno/client/output-success.json [moved from bpmn/so-bpmn-tasks/src/test/resources/org/onap/so/client/sdno/output-success.json with 100% similarity]
so-sdn-clients/src/test/resources/__files/sdno/client/response.json [moved from bpmn/so-bpmn-tasks/src/test/resources/org/onap/so/client/sdno/response.json with 100% similarity]
so-sdn-clients/src/test/resources/__files/sdno/health-check/custom-lport-mirror-post-check-request.json [moved from bpmn/so-bpmn-tasks/src/test/resources/org/onap/so/client/sdno/health-check/custom-lport-mirror-post-check-request.json with 100% similarity]
so-sdn-clients/src/test/resources/__files/sdno/health-check/custom-lport-mirror-pre-check-request.json [moved from bpmn/so-bpmn-tasks/src/test/resources/org/onap/so/client/sdno/health-check/custom-lport-mirror-pre-check-request.json with 100% similarity]
so-sdn-clients/src/test/resources/__files/sdno/health-check/custom-port-mirror-post-check-request.json [moved from bpmn/so-bpmn-tasks/src/test/resources/org/onap/so/client/sdno/health-check/custom-port-mirror-post-check-request.json with 100% similarity]
so-sdn-clients/src/test/resources/__files/sdno/health-check/custom-port-mirror-pre-check-request.json [moved from bpmn/so-bpmn-tasks/src/test/resources/org/onap/so/client/sdno/health-check/custom-port-mirror-pre-check-request.json with 100% similarity]
so-sdn-clients/src/test/resources/application-test.yaml [new file with mode: 0644]
so-sdn-clients/src/test/resources/dmaap.properties [new file with mode: 0644]
so-sdn-clients/src/test/resources/schema.sql [new file with mode: 0644]

index eab0451..df4229c 100644 (file)
@@ -108,7 +108,8 @@ public class CreateAAIInventory {
             if (!CollectionUtils.isEmpty(oobMgtNetNames)) {
                 oobMgtNetIds = heatBridgeClient.extractNetworkIds(oobMgtNetNames);
             }
-            heatBridgeClient.buildAddVserverLInterfacesToAaiAction(stackResources, oobMgtNetIds);
+            heatBridgeClient.buildAddVserverLInterfacesToAaiAction(stackResources, oobMgtNetIds,
+                    cloudInformation.getOwner());
             logger.debug(
                     "Successfully queried neutron resources and built AAI actions to add l-interfaces to vservers.");
 
index d0ca87d..9c09886 100644 (file)
@@ -134,8 +134,10 @@ public interface HeatBridgeApi {
      *
      * @param stackResources Openstack Heat stack resource list
      * @param oobMgtNetIds List of OOB network IDs list
+     * @param cloudOwner
      */
-    void buildAddVserverLInterfacesToAaiAction(List<Resource> stackResources, List<String> oobMgtNetIds);
+    void buildAddVserverLInterfacesToAaiAction(List<Resource> stackResources, List<String> oobMgtNetIds,
+            String cloudOwner);
 
     /**
      * Query and build AAI actions for Openstack Compute resources to AAI's pserver and pinterface objects
index 53736e9..f375553 100644 (file)
@@ -79,6 +79,7 @@ import org.onap.so.heatbridge.openstack.factory.OpenstackClientFactoryImpl;
 import org.onap.so.heatbridge.utils.HeatBridgeUtils;
 import org.onap.so.logger.LoggingAnchor;
 import org.onap.so.logger.MessageEnum;
+import org.onap.so.spring.SpringContextHelper;
 import org.openstack4j.model.compute.Server;
 import org.openstack4j.model.heat.Resource;
 import org.openstack4j.model.network.IP;
@@ -87,6 +88,7 @@ import org.openstack4j.model.network.NetworkType;
 import org.openstack4j.model.network.Port;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.core.env.Environment;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableMap;
@@ -109,6 +111,8 @@ public class HeatBridgeImpl implements HeatBridgeApi {
     private String tenantId;
     private AaiHelper aaiHelper = new AaiHelper();
     private CloudIdentity cloudIdentity;
+    private Environment env;
+
 
     public HeatBridgeImpl(AAIResourcesClient resourcesClient, final CloudIdentity cloudIdentity,
             @Nonnull final String cloudOwner, @Nonnull final String cloudRegionId, @Nonnull final String regionId,
@@ -124,7 +128,10 @@ public class HeatBridgeImpl implements HeatBridgeApi {
         this.regionId = regionId;
         this.tenantId = tenantId;
         this.resourcesClient = resourcesClient;
-        this.transaction = resourcesClient.beginSingleTransaction();
+        if (resourcesClient != null)
+            this.transaction = resourcesClient.beginSingleTransaction();
+        if (SpringContextHelper.getAppContext() != null)
+            this.env = SpringContextHelper.getAppContext().getEnvironment();
     }
 
     public HeatBridgeImpl() {
@@ -253,7 +260,7 @@ public class HeatBridgeImpl implements HeatBridgeApi {
 
     @Override
     public void buildAddVserverLInterfacesToAaiAction(final List<Resource> stackResources,
-            final List<String> oobMgtNetIds) {
+            final List<String> oobMgtNetIds, String cloudOwner) {
         Objects.requireNonNull(osClient, ERR_MSG_NULL_OS_CLIENT);
         List<String> portIds =
                 extractStackResourceIdsByResourceType(stackResources, HeatBridgeConstants.OS_PORT_RESOURCE_TYPE);
@@ -283,7 +290,9 @@ public class HeatBridgeImpl implements HeatBridgeApi {
             }
             lIf.setL2Multicasting(isL2Multicast);
             updateLInterfaceIps(port, lIf);
-            updateLInterfaceVlan(port, lIf);
+            if (cloudOwner.equals(env.getProperty("mso.cloudOwner.included", ""))) {
+                updateLInterfaceVlan(port, lIf);
+            }
 
             // Update l-interface to the vserver
             transaction.create(AAIUriFactory.createResourceUri(AAIObjectType.L_INTERFACE, cloudOwner, cloudRegionId,
index 464a17d..de40f1e 100644 (file)
@@ -42,6 +42,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.doReturn;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
@@ -58,7 +59,9 @@ import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
+import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.Spy;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.aai.domain.yang.LInterface;
 import org.onap.aai.domain.yang.PInterface;
@@ -85,6 +88,7 @@ import org.openstack4j.model.network.NetworkType;
 import org.openstack4j.model.network.Port;
 import org.openstack4j.openstack.heat.domain.HeatResource;
 import org.openstack4j.openstack.heat.domain.HeatResource.Resources;
+import org.springframework.core.env.Environment;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.ImmutableMap;
 
@@ -104,16 +108,20 @@ public class HeatBridgeImplTest {
 
     @Mock
     private AAIResourcesClient resourcesClient;
+
     @Mock
     private AAISingleTransactionClient transaction;
 
-    private HeatBridgeImpl heatbridge;
+    @Mock
+    private Environment env;
+
+    @InjectMocks
+    private HeatBridgeImpl heatbridge =
+            new HeatBridgeImpl(resourcesClient, cloudIdentity, CLOUD_OWNER, REGION_ID, REGION_ID, TENANT_ID);
 
     @Before
     public void setUp() throws HeatBridgeException, OpenstackClientException, BulkProcessFailed {
-
         when(resourcesClient.beginSingleTransaction()).thenReturn(transaction);
-        heatbridge = new HeatBridgeImpl(resourcesClient, cloudIdentity, CLOUD_OWNER, REGION_ID, REGION_ID, TENANT_ID);
     }
 
     @Ignore
@@ -396,7 +404,6 @@ public class HeatBridgeImplTest {
         verify(transaction, times(2)).createIfNotExists(any(AAIResourceUri.class), any(Optional.class));
     }
 
-    @Ignore
     @Test
     public void testUpdateVserverLInterfacesToAai() throws HeatBridgeException {
         // Arrange
@@ -430,9 +437,10 @@ public class HeatBridgeImplTest {
         PInterface pIf = mock(PInterface.class);
         when(pIf.getInterfaceName()).thenReturn("test-port-id");
         when(resourcesClient.get(eq(PInterface.class), any(AAIResourceUri.class))).thenReturn(Optional.of(pIf));
+        when(env.getProperty("mso.cloudOwner.included", "")).thenReturn("CloudOwner");
 
         // Act
-        heatbridge.buildAddVserverLInterfacesToAaiAction(stackResources, Arrays.asList("1", "2"));
+        heatbridge.buildAddVserverLInterfacesToAaiAction(stackResources, Arrays.asList("1", "2"), "CloudOwner");
 
         // Assert
         verify(transaction, times(5)).create(any(AAIResourceUri.class), any(LInterface.class));
@@ -440,6 +448,48 @@ public class HeatBridgeImplTest {
         verify(osClient, times(5)).getNetworkById(anyString());
     }
 
+    @Test
+    public void testUpdateVserverLInterfacesToAai_skipVlans() throws HeatBridgeException {
+        // Arrange
+        List<Resource> stackResources = (List<Resource>) extractTestStackResources();
+        Port port = mock(Port.class);
+        when(port.getId()).thenReturn("test-port-id");
+        when(port.getName()).thenReturn("test-port-name");
+        when(port.getvNicType()).thenReturn(HeatBridgeConstants.OS_SRIOV_PORT_TYPE);
+        when(port.getMacAddress()).thenReturn("78:4f:43:68:e2:78");
+        when(port.getNetworkId()).thenReturn("890a203a-23gg-56jh-df67-731656a8f13a");
+        when(port.getDeviceId()).thenReturn("test-device-id");
+        when(port.getVifDetails()).thenReturn(ImmutableMap.of(HeatBridgeConstants.OS_VLAN_NETWORK_KEY, "2345"));
+        String pfPciId = "0000:08:00.0";
+        when(port.getProfile()).thenReturn(ImmutableMap.of(HeatBridgeConstants.OS_PCI_SLOT_KEY, pfPciId,
+                HeatBridgeConstants.OS_PHYSICAL_NETWORK_KEY, "physical_network_id"));
+
+        Network network = mock(Network.class);
+        when(network.getId()).thenReturn("test-network-id");
+        when(network.getNetworkType()).thenReturn(NetworkType.VLAN);
+        when(network.getProviderSegID()).thenReturn("2345");
+
+        when(osClient.getPortById("212a203a-9764-4f42-84ea-731536a8f13a")).thenReturn(port);
+        when(osClient.getPortById("387e3904-8948-43d1-8635-b6c2042b54da")).thenReturn(port);
+        when(osClient.getPortById("70a09dfd-f1c5-4bc8-bd8f-dc539b8d662a")).thenReturn(port);
+        when(osClient.getPortById("12f88b4d-c8a4-4fbd-bcb4-7e36af02430b")).thenReturn(port);
+        when(osClient.getPortById("c54b9f45-b413-4937-bbe4-3c8a5689cfc9")).thenReturn(port);
+
+        SriovPf sriovPf = new SriovPf();
+        sriovPf.setPfPciId(pfPciId);
+        PInterface pIf = mock(PInterface.class);
+        when(pIf.getInterfaceName()).thenReturn("test-port-id");
+        when(resourcesClient.get(eq(PInterface.class), any(AAIResourceUri.class))).thenReturn(Optional.of(pIf));
+
+        // Act
+        heatbridge.buildAddVserverLInterfacesToAaiAction(stackResources, Arrays.asList("1", "2"), "CloudOwner");
+
+        // Assert
+        verify(transaction, times(5)).create(any(AAIResourceUri.class), any(LInterface.class));
+        verify(osClient, times(5)).getPortById(anyString());
+        verify(osClient, times(0)).getNetworkById(anyString());
+    }
+
     private List<? extends Resource> extractTestStackResources() {
         List<HeatResource> stackResources = null;
         try {
@@ -463,4 +513,6 @@ public class HeatBridgeImplTest {
         }
         return content;
     }
+
+
 }
index e867b67..e458111 100644 (file)
@@ -28,6 +28,7 @@ public class ExecuteBuildingBlock extends BuildingBlockBase<ExecuteBuildingBlock
     private BuildingBlock buildingBlock;
     private ConfigurationResourceKeys configurationResourceKeys;
     private Boolean homing = false;
+    private String oldVolumeGroupName;
     private static final long serialVersionUID = 3L;
 
     public BuildingBlock getBuildingBlock() {
@@ -56,4 +57,13 @@ public class ExecuteBuildingBlock extends BuildingBlockBase<ExecuteBuildingBlock
         this.configurationResourceKeys = configurationResourceKeys;
         return this;
     }
+
+    public String getOldVolumeGroupName() {
+        return oldVolumeGroupName;
+    }
+
+    public ExecuteBuildingBlock setOldVolumeGroupName(String oldVolumeGroupName) {
+        this.oldVolumeGroupName = oldVolumeGroupName;
+        return this;
+    }
 }
index e8be273..508709e 100644 (file)
@@ -41,14 +41,33 @@ public class WorkflowResourceIds implements Serializable {
     private String configurationId;
     private String instanceGroupId;
 
+
+    public WorkflowResourceIds() {
+        super();
+    }
+
+    public WorkflowResourceIds(WorkflowResourceIds workflowResourceIds) {
+        this.serviceInstanceId = workflowResourceIds.serviceInstanceId;
+        this.pnfId = workflowResourceIds.pnfId;
+        this.vnfId = workflowResourceIds.vnfId;
+        this.networkId = workflowResourceIds.networkId;
+        this.volumeGroupId = workflowResourceIds.volumeGroupId;
+        this.vfModuleId = workflowResourceIds.vfModuleId;
+        this.networkCollectionId = workflowResourceIds.networkCollectionId;
+        this.configurationId = workflowResourceIds.configurationId;
+        this.instanceGroupId = workflowResourceIds.instanceGroupId;
+    }
+
+
     @Override
     public String toString() {
         return new ToStringBuilder(this).append("serviceInstanceId", serviceInstanceId).append("pnfId", pnfId)
                 .append("vnfId", vnfId).append("networkId", networkId).append("volumeGroupId", volumeGroupId)
                 .append("vfModuleId", vfModuleId).append("networkCollectionId", networkCollectionId)
-                .append("configurationId", configurationId).toString();
+                .append("configurationId", configurationId).append("instanceGroupId", instanceGroupId).toString();
     }
 
+
     public String getServiceInstanceId() {
         return serviceInstanceId;
     }
index bfa7721..0cdf8a6 100644 (file)
@@ -750,6 +750,10 @@ public class BBInputSetup implements JavaDelegate {
                         parameter.getInstanceName(), generatedVnfType, parameter.getInstanceParams());
                 vnf.getVolumeGroups().add(volumeGroup);
                 if (parameter.getIsReplace()) {
+                    if (parameter.getExecuteBB().getOldVolumeGroupName() != null
+                            && !parameter.getExecuteBB().getOldVolumeGroupName().isEmpty()) {
+                        volumeGroup.setVolumeGroupName(parameter.getExecuteBB().getOldVolumeGroupName());
+                    }
                     mapCatalogVolumeGroup(volumeGroup, parameter.getModelInfo(),
                             parameter.getServiceModel().getNewService(), replaceVnfModelCustomizationUUID);
                 } else {
@@ -1699,20 +1703,8 @@ public class BBInputSetup implements JavaDelegate {
                 && bbName.equalsIgnoreCase(AssignFlows.SERVICE_INSTANCE.toString())) {
             throw new Exception("Request invalid missing: RequestInfo:InstanceName");
         } else {
-            org.onap.aai.domain.yang.ServiceInstance serviceInstanceAAI = null;
-            if (aLaCarte && bbName.equalsIgnoreCase(AssignFlows.SERVICE_INSTANCE.toString())) {
-                serviceInstanceAAI = bbInputSetupUtils
-                        .getAAIServiceInstanceByName(requestDetails.getRequestInfo().getInstanceName(), customer);
-            }
-            if (serviceInstanceId != null && serviceInstanceAAI == null) {
-                if (customer != null && customer.getServiceSubscription() != null) {
-                    serviceInstanceAAI =
-                            bbInputSetupUtils.getAAIServiceInstanceByIdAndCustomer(customer.getGlobalCustomerId(),
-                                    customer.getServiceSubscription().getServiceType(), serviceInstanceId);
-                } else {
-                    serviceInstanceAAI = bbInputSetupUtils.getAAIServiceInstanceById(serviceInstanceId);
-                }
-            }
+            org.onap.aai.domain.yang.ServiceInstance serviceInstanceAAI;
+            serviceInstanceAAI = getServiceInstanceAAI(requestDetails, customer, serviceInstanceId, aLaCarte, bbName);
             if (serviceInstanceAAI != null) {
                 lookupKeyMap.put(ResourceKey.SERVICE_INSTANCE_ID, serviceInstanceId);
                 return this.getExistingServiceInstance(serviceInstanceAAI);
@@ -1722,6 +1714,25 @@ public class BBInputSetup implements JavaDelegate {
         }
     }
 
+    private org.onap.aai.domain.yang.ServiceInstance getServiceInstanceAAI(RequestDetails requestDetails,
+            Customer customer, String serviceInstanceId, boolean aLaCarte, String bbName) throws Exception {
+        org.onap.aai.domain.yang.ServiceInstance serviceInstanceAAI = null;
+        if (aLaCarte && bbName.equalsIgnoreCase(AssignFlows.SERVICE_INSTANCE.toString())) {
+            serviceInstanceAAI = bbInputSetupUtils
+                    .getAAIServiceInstanceByName(requestDetails.getRequestInfo().getInstanceName(), customer);
+        }
+        if (serviceInstanceId != null && serviceInstanceAAI == null) {
+            if (customer != null && customer.getServiceSubscription() != null) {
+                serviceInstanceAAI =
+                        bbInputSetupUtils.getAAIServiceInstanceByIdAndCustomer(customer.getGlobalCustomerId(),
+                                customer.getServiceSubscription().getServiceType(), serviceInstanceId);
+            } else {
+                serviceInstanceAAI = bbInputSetupUtils.getAAIServiceInstanceById(serviceInstanceId);
+            }
+        }
+        return serviceInstanceAAI;
+    }
+
     protected ServiceInstance createServiceInstance(RequestDetails requestDetails, Project project,
             OwningEntity owningEntity, Map<ResourceKey, String> lookupKeyMap, String serviceInstanceId) {
         ServiceInstance serviceInstance = new ServiceInstance();
@@ -1833,13 +1844,12 @@ public class BBInputSetup implements JavaDelegate {
         AAIResultWrapper serviceInstanceWrapper = new AAIResultWrapper(
                 new AAICommonObjectMapperProvider().getMapper().writeValueAsString(serviceInstanceAAI));
         Optional<Relationships> relationshipsOp = serviceInstanceWrapper.getRelationships();
-        Relationships relationships = null;
         if (relationshipsOp.isPresent()) {
-            relationships = relationshipsOp.get();
-        } else {
-            return;
+            mapRelationship(serviceInstance, relationshipsOp.get());
         }
+    }
 
+    private void mapRelationship(ServiceInstance serviceInstance, Relationships relationships) {
         this.mapProject(relationships.getByType(AAIObjectType.PROJECT), serviceInstance);
         this.mapOwningEntity(relationships.getByType(AAIObjectType.OWNING_ENTITY), serviceInstance);
         this.mapL3Networks(relationships.getRelatedAAIUris(AAIObjectType.L3_NETWORK), serviceInstance.getNetworks());
@@ -1945,14 +1955,10 @@ public class BBInputSetup implements JavaDelegate {
             AAIResultWrapper lineOfBusinessWrapper = lineOfBusinesses.get(0);
             Optional<org.onap.aai.domain.yang.LineOfBusiness> aaiLineOfBusinessOp =
                     lineOfBusinessWrapper.asBean(org.onap.aai.domain.yang.LineOfBusiness.class);
-            org.onap.aai.domain.yang.LineOfBusiness aaiLineOfBusiness = null;
-            if (!aaiLineOfBusinessOp.isPresent()) {
-                return;
+            if (aaiLineOfBusinessOp.isPresent()) {
+                LineOfBusiness lineOfBusiness = this.mapperLayer.mapAAILineOfBusiness(aaiLineOfBusinessOp.get());
+                genericVnf.setLineOfBusiness(lineOfBusiness);
             }
-            aaiLineOfBusiness = aaiLineOfBusinessOp.get();
-
-            LineOfBusiness lineOfBusiness = this.mapperLayer.mapAAILineOfBusiness(aaiLineOfBusiness);
-            genericVnf.setLineOfBusiness(lineOfBusiness);
         }
     }
 
@@ -1961,14 +1967,10 @@ public class BBInputSetup implements JavaDelegate {
             AAIResultWrapper platformWrapper = platforms.get(0);
             Optional<org.onap.aai.domain.yang.Platform> aaiPlatformOp =
                     platformWrapper.asBean(org.onap.aai.domain.yang.Platform.class);
-            org.onap.aai.domain.yang.Platform aaiPlatform = null;
-            if (!aaiPlatformOp.isPresent()) {
-                return;
+            if (aaiPlatformOp.isPresent()) {
+                Platform platform = this.mapperLayer.mapAAIPlatform(aaiPlatformOp.get());
+                genericVnf.setPlatform(platform);
             }
-            aaiPlatform = aaiPlatformOp.get();
-
-            Platform platform = this.mapperLayer.mapAAIPlatform(aaiPlatform);
-            genericVnf.setPlatform(platform);
         }
     }
 
@@ -1977,34 +1979,36 @@ public class BBInputSetup implements JavaDelegate {
             AAIResultWrapper collectionWrapper = collections.get(0);
             Optional<org.onap.aai.domain.yang.Collection> aaiCollectionOp =
                     collectionWrapper.asBean(org.onap.aai.domain.yang.Collection.class);
-            org.onap.aai.domain.yang.Collection aaiCollection = null;
-            if (!aaiCollectionOp.isPresent()) {
-                return;
-            }
-            aaiCollection = aaiCollectionOp.get();
-
-            Collection collection = this.mapperLayer.mapAAICollectionIntoCollection(aaiCollection);
-            NetworkCollectionResourceCustomization collectionResourceCust = bbInputSetupUtils
-                    .getCatalogNetworkCollectionResourceCustByID(aaiCollection.getCollectionCustomizationId());
-            collection.setModelInfoCollection(mapperLayer.mapCatalogCollectionToCollection(collectionResourceCust,
-                    collectionResourceCust.getCollectionResource()));
-            Optional<Relationships> relationshipsOp = collectionWrapper.getRelationships();
-            Relationships relationships = null;
-            if (relationshipsOp.isPresent()) {
-                relationships = relationshipsOp.get();
-            } else {
-                serviceInstance.setCollection(collection);
-                return;
-            }
-            List<InstanceGroup> instanceGroupsList =
-                    mapInstanceGroups(relationships.getByType(AAIObjectType.INSTANCE_GROUP));
-            if (!instanceGroupsList.isEmpty()) {
-                collection.setInstanceGroup(instanceGroupsList.get(0));
-            }
-            serviceInstance.setCollection(collection);
+            aaiCollectionOp.ifPresent(
+                    collection -> serviceInstanceSetCollection(serviceInstance, collectionWrapper, collection));
+        }
+    }
+
+    private void serviceInstanceSetCollection(ServiceInstance serviceInstance, AAIResultWrapper collectionWrapper,
+            org.onap.aai.domain.yang.Collection aaiCollection) {
+        Collection collection = getCollection(aaiCollection);
+        Optional<Relationships> relationshipsOp = collectionWrapper.getRelationships();
+        relationshipsOp.ifPresent(relationships -> setInstanceGroupForCollection(collection, relationships));
+        serviceInstance.setCollection(collection);
+    }
+
+    private void setInstanceGroupForCollection(Collection collection, Relationships relationships) {
+        List<InstanceGroup> instanceGroupsList =
+                mapInstanceGroups(relationships.getByType(AAIObjectType.INSTANCE_GROUP));
+        if (!instanceGroupsList.isEmpty()) {
+            collection.setInstanceGroup(instanceGroupsList.get(0));
         }
     }
 
+    private Collection getCollection(org.onap.aai.domain.yang.Collection aaiCollection) {
+        Collection collection = this.mapperLayer.mapAAICollectionIntoCollection(aaiCollection);
+        NetworkCollectionResourceCustomization collectionResourceCust = bbInputSetupUtils
+                .getCatalogNetworkCollectionResourceCustByID(aaiCollection.getCollectionCustomizationId());
+        collection.setModelInfoCollection(mapperLayer.mapCatalogCollectionToCollection(collectionResourceCust,
+                collectionResourceCust.getCollectionResource()));
+        return collection;
+    }
+
     protected void mapL3Networks(List<AAIResourceUri> list, List<L3Network> l3Networks) {
         for (AAIResourceUri aaiResourceUri : list) {
             l3Networks.add(this.mapL3Network(aaiResourceUri));
@@ -2080,14 +2084,10 @@ public class BBInputSetup implements JavaDelegate {
             AAIResultWrapper owningEntityWrapper = owningEntities.get(0);
             Optional<org.onap.aai.domain.yang.OwningEntity> aaiOwningEntityOp =
                     owningEntityWrapper.asBean(org.onap.aai.domain.yang.OwningEntity.class);
-            org.onap.aai.domain.yang.OwningEntity aaiOwningEntity = null;
-            if (!aaiOwningEntityOp.isPresent()) {
-                return;
+            if (aaiOwningEntityOp.isPresent()) {
+                OwningEntity owningEntity = this.mapperLayer.mapAAIOwningEntity(aaiOwningEntityOp.get());
+                serviceInstance.setOwningEntity(owningEntity);
             }
-            aaiOwningEntity = aaiOwningEntityOp.get();
-
-            OwningEntity owningEntity = this.mapperLayer.mapAAIOwningEntity(aaiOwningEntity);
-            serviceInstance.setOwningEntity(owningEntity);
         }
     }
 
@@ -2096,14 +2096,10 @@ public class BBInputSetup implements JavaDelegate {
             AAIResultWrapper projectWrapper = projects.get(0);
             Optional<org.onap.aai.domain.yang.Project> aaiProjectOp =
                     projectWrapper.asBean(org.onap.aai.domain.yang.Project.class);
-            org.onap.aai.domain.yang.Project aaiProject = null;
-            if (!aaiProjectOp.isPresent()) {
-                return;
+            if (aaiProjectOp.isPresent()) {
+                Project project = this.mapperLayer.mapAAIProject(aaiProjectOp.get());
+                serviceInstance.setProject(project);
             }
-            aaiProject = aaiProjectOp.get();
-
-            Project project = this.mapperLayer.mapAAIProject(aaiProject);
-            serviceInstance.setProject(project);
         }
     }
 
index 5a52e3a..4206596 100644 (file)
@@ -104,7 +104,7 @@ public class ExecuteBuildingBlockRainyDay {
                 handlingCode = "Abort";
             } else {
                 try {
-                    if (gBBInput.getCustomer().getServiceSubscription() != null) {
+                    if (gBBInput.getCustomer() != null && gBBInput.getCustomer().getServiceSubscription() != null) {
                         serviceType = gBBInput.getCustomer().getServiceSubscription().getServiceInstances().get(0)
                                 .getModelInfoServiceInstance().getServiceType();
                     }
@@ -119,7 +119,7 @@ public class ExecuteBuildingBlockRainyDay {
                 String vnfType = ASTERISK;
                 String vnfName = ASTERISK;
                 try {
-                    if (gBBInput.getCustomer().getServiceSubscription() != null) {
+                    if (gBBInput.getCustomer() != null && gBBInput.getCustomer().getServiceSubscription() != null) {
                         for (GenericVnf vnf : gBBInput.getCustomer().getServiceSubscription().getServiceInstances()
                                 .get(0).getVnfs()) {
                             if (vnf.getVnfId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID))) {
@@ -173,7 +173,7 @@ public class ExecuteBuildingBlockRainyDay {
 
                 String serviceRole = ASTERISK;
                 try {
-                    if (gBBInput.getCustomer().getServiceSubscription() != null) {
+                    if (gBBInput.getCustomer() != null && gBBInput.getCustomer().getServiceSubscription() != null) {
                         serviceRole = gBBInput.getCustomer().getServiceSubscription().getServiceInstances().get(0)
                                 .getModelInfoServiceInstance().getServiceRole();
                     }
index 458919c..9e9c6f3 100644 (file)
@@ -815,6 +815,26 @@ public class BBInputSetupTest {
         assertThat(actual, sameBeanAs(expected));
     }
 
+    @Test
+    public void testGetServiceInstanceHelperCreateScenarioExistingWithName() throws Exception {
+        RequestDetails requestDetails = new RequestDetails();
+        RequestInfo requestInfo = new RequestInfo();
+        requestDetails.setRequestInfo(requestInfo);
+        ServiceSubscription serviceSub = new ServiceSubscription();
+        Customer customer = new Customer();
+        customer.setServiceSubscription(serviceSub);
+        ServiceInstance expected = new ServiceInstance();
+        expected.setServiceInstanceId("serviceInstanceId");
+        org.onap.aai.domain.yang.ServiceInstance serviceInstanceAAI = new org.onap.aai.domain.yang.ServiceInstance();
+        serviceInstanceAAI.setServiceInstanceId("serviceInstanceId");
+
+        doReturn(serviceInstanceAAI).when(SPY_bbInputSetupUtils).getAAIServiceInstanceByIdAndCustomer(Mockito.any(),
+                Mockito.any(), Mockito.any());
+        ServiceInstance actual = SPY_bbInputSetup.getServiceInstanceHelper(requestDetails, customer, null, null,
+                new HashMap<>(), "SharansInstanceId", false, new Service(), "ActivateServiceInstanceBB");
+        assertThat(actual, sameBeanAs(expected));
+    }
+
     @Test(expected = Exception.class)
     public void testGetServiceInstanceHelperCreateScenarioExistingNoNameButWithIdExceptionThrown() throws Exception {
         RequestDetails requestDetails = new RequestDetails();
index f7a4e5e..d1245ce 100644 (file)
       <artifactId>mso-adapter-utils</artifactId>
       <version>${project.version}</version>
     </dependency>
-    <dependency>
-      <groupId>org.onap.sdnc.northbound</groupId>
-      <artifactId>generic-resource-api-client</artifactId>
-      <version>${sdnc.northbound.version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>javax.ws.rs</groupId>
-          <artifactId>jsr311-api</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>io.swagger</groupId>
-          <artifactId>swagger-annotations</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>io.swagger</groupId>
-          <artifactId>swagger-models</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
     <dependency>
       <groupId>ch.vorburger.mariaDB4j</groupId>
       <artifactId>mariaDB4j</artifactId>
       <version>${grpc.version}</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.onap.so</groupId>
+      <artifactId>so-optimization-clients</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.so</groupId>
+      <artifactId>so-sdn-clients</artifactId>
+      <version>${project.version}</version>
+    </dependency>
   </dependencies>
 </project>
index f10b503..71ea9fa 100644 (file)
@@ -440,7 +440,8 @@ public class SniroHomingV2 {
         if (!candidates.isEmpty()) {
             for (Candidate c : candidates) {
                 org.onap.so.client.sniro.beans.Candidate can = new org.onap.so.client.sniro.beans.Candidate();
-                can.setIdentifierType(c.getIdentifierType());
+                can.setIdentifierType(
+                        org.onap.so.client.sniro.beans.CandidateType.valueOf(c.getIdentifierType().name()));
                 can.setIdentifiers(c.getIdentifiers());
                 can.setCloudOwner(c.getCloudOwner());
                 candidateList.add(can);
index e154375..7f754e3 100644 (file)
@@ -20,7 +20,6 @@
 
 package org.onap.so.bpmn.infrastructure.workflow.tasks;
 
-import java.util.List;
 import org.camunda.bpm.engine.delegate.DelegateExecution;
 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlockBase;
 import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
@@ -38,6 +37,7 @@ public class ConfigBuildingBlocksDataObject extends BuildingBlockBase<ConfigBuil
     private List<OrchestrationFlow> orchFlows;
     private Resource resourceKey;
     private ServiceInstancesRequest sIRequest;
+    private ReplaceInstanceRelatedInformation replaceInformation;
 
     public ServiceInstancesRequest getsIRequest() {
         return sIRequest;
@@ -75,6 +75,15 @@ public class ConfigBuildingBlocksDataObject extends BuildingBlockBase<ConfigBuil
         return this;
     }
 
+    public ReplaceInstanceRelatedInformation getReplaceInformation() {
+        return replaceInformation;
+    }
+
+    public ConfigBuildingBlocksDataObject setReplaceInformation(ReplaceInstanceRelatedInformation replaceInformation) {
+        this.replaceInformation = replaceInformation;
+        return this;
+    }
+
 
 
 }
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ReplaceInstanceRelatedInformation.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ReplaceInstanceRelatedInformation.java
new file mode 100644 (file)
index 0000000..d9e8fa5
--- /dev/null
@@ -0,0 +1,16 @@
+package org.onap.so.bpmn.infrastructure.workflow.tasks;
+
+public class ReplaceInstanceRelatedInformation {
+
+    private String oldVolumeGroupName;
+
+    public String getOldVolumeGroupName() {
+        return oldVolumeGroupName;
+    }
+
+    public ReplaceInstanceRelatedInformation setOldVolumeGroupName(String oldVolumeGroupName) {
+        this.oldVolumeGroupName = oldVolumeGroupName;
+        return this;
+    }
+
+}
index 9200d99..1a49e3a 100644 (file)
@@ -144,6 +144,7 @@ public class WorkflowAction {
     private static final String VOLUMEGROUP_DELETE_PATTERN = "(Un|De)(.*)Volume(.*)";
     private static final String VOLUMEGROUP_CREATE_PATTERN = "(A|C)(.*)Volume(.*)";
     private static final String CONTROLLER = "Controller";
+    private static final String DEFAULT_CLOUD_OWNER = "org.onap.so.cloud-owner";
 
     @Autowired
     protected BBInputSetup bbInputSetup;
@@ -159,10 +160,8 @@ public class WorkflowAction {
     private WorkflowActionExtractResourcesAAI workflowActionUtils;
     @Autowired
     private VrfValidation vrfValidation;
-
     @Autowired
     private Environment environment;
-    private String defaultCloudOwner = "org.onap.so.cloud-owner";
 
     public void setBbInputSetupUtils(BBInputSetupUtils bbInputSetupUtils) {
         this.bbInputSetupUtils = bbInputSetupUtils;
@@ -223,19 +222,20 @@ public class WorkflowAction {
                     }
                     Resource resourceKey = getResourceKey(sIRequest, resourceType);
 
+                    ReplaceInstanceRelatedInformation replaceInfo = new ReplaceInstanceRelatedInformation();
                     if ((requestAction.equalsIgnoreCase(REPLACEINSTANCE)
                             || requestAction.equalsIgnoreCase(REPLACEINSTANCERETAINASSIGNMENTS))
                             && resourceType.equals(WorkflowType.VFMODULE)) {
                         logger.debug("Build a BB list for replacing BB modules");
-                        orchFlows = getVfModuleReplaceBuildingBlocks(
-                                new ConfigBuildingBlocksDataObject().setsIRequest(sIRequest).setOrchFlows(orchFlows)
-                                        .setRequestId(requestId).setResourceKey(resourceKey).setApiVersion(apiVersion)
-                                        .setResourceId(resourceId).setRequestAction(requestAction).setaLaCarte(true)
-                                        .setVnfType(vnfType).setWorkflowResourceIds(workflowResourceIds)
-                                        .setRequestDetails(requestDetails).setExecution(execution));
+                        orchFlows = getVfModuleReplaceBuildingBlocks(new ConfigBuildingBlocksDataObject()
+                                .setsIRequest(sIRequest).setOrchFlows(orchFlows).setRequestId(requestId)
+                                .setResourceKey(resourceKey).setApiVersion(apiVersion).setResourceId(resourceId)
+                                .setRequestAction(requestAction).setaLaCarte(true).setVnfType(vnfType)
+                                .setWorkflowResourceIds(workflowResourceIds).setRequestDetails(requestDetails)
+                                .setExecution(execution).setReplaceInformation(replaceInfo));
                         for (OrchestrationFlow orchFlow : orchFlows) {
                             if (orchFlow.getFlowName().contains(CONFIGURATION)) {
-                                List<OrchestrationFlow> configOrchFlows = new ArrayList<OrchestrationFlow>();
+                                List<OrchestrationFlow> configOrchFlows = new ArrayList<>();
                                 configOrchFlows.add(orchFlow);
                                 List<ExecuteBuildingBlock> configBuildingBlocks =
                                         getConfigBuildingBlocks(new ConfigBuildingBlocksDataObject()
@@ -244,12 +244,13 @@ public class WorkflowAction {
                                                 .setApiVersion(apiVersion).setResourceId(resourceId)
                                                 .setRequestAction(requestAction).setaLaCarte(true).setVnfType(vnfType)
                                                 .setWorkflowResourceIds(workflowResourceIds)
-                                                .setRequestDetails(requestDetails).setExecution(execution));
+                                                .setRequestDetails(requestDetails).setExecution(execution)
+                                                .setReplaceInformation(replaceInfo));
                                 flowsToExecute.addAll(configBuildingBlocks);
                             } else {
                                 ExecuteBuildingBlock ebb = buildExecuteBuildingBlock(orchFlow, requestId, resourceKey,
                                         apiVersion, resourceId, requestAction, true, vnfType, workflowResourceIds,
-                                        requestDetails, false, null, null, false);
+                                        requestDetails, false, null, null, false, replaceInfo);
                                 flowsToExecute.add(ebb);
                             }
                         }
@@ -272,7 +273,7 @@ public class WorkflowAction {
                         for (OrchestrationFlow orchFlow : orchFlows) {
                             ExecuteBuildingBlock ebb = buildExecuteBuildingBlock(orchFlow, requestId, resourceKey,
                                     apiVersion, resourceId, requestAction, true, vnfType, workflowResourceIds,
-                                    requestDetails, false, null, null, false);
+                                    requestDetails, false, null, null, false, replaceInfo);
                             flowsToExecute.add(ebb);
                         }
                     }
@@ -287,11 +288,8 @@ public class WorkflowAction {
                         if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
                             List<Map<String, Object>> userParams =
                                     sIRequest.getRequestDetails().getRequestParameters().getUserParams();
-                            for (Map<String, Object> params : userParams) {
-                                if (params.containsKey(USERPARAMSERVICE)) {
-                                    containsService = true;
-                                }
-                            }
+                            containsService =
+                                    userParams.stream().anyMatch(param -> param.containsKey(USERPARAMSERVICE));
                             if (containsService) {
                                 traverseUserParamsService(execution, resourceList, sIRequest, requestAction);
                             }
@@ -309,11 +307,8 @@ public class WorkflowAction {
                         if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
                             List<Map<String, Object>> userParams =
                                     sIRequest.getRequestDetails().getRequestParameters().getUserParams();
-                            for (Map<String, Object> params : userParams) {
-                                if (params.containsKey(USERPARAMSERVICE)) {
-                                    containsService = true;
-                                }
-                            }
+                            containsService =
+                                    userParams.stream().anyMatch(param -> param.containsKey(USERPARAMSERVICE));
                         }
                         if (containsService) {
                             foundRelated = traverseUserParamsService(execution, resourceList, sIRequest, requestAction);
@@ -341,13 +336,13 @@ public class WorkflowAction {
                     } else {
                         buildAndThrowException(execution, "Current Macro Request is not supported");
                     }
-                    String foundObjects = "";
+                    StringBuilder foundObjects = new StringBuilder();
                     for (WorkflowType type : WorkflowType.values()) {
-                        foundObjects = foundObjects + type + " - " + resourceList.stream()
-                                .filter(x -> type.equals(x.getResourceType())).collect(Collectors.toList()).size()
-                                + "    ";
+                        foundObjects.append(type).append(" - ").append(
+                                (int) resourceList.stream().filter(x -> type.equals(x.getResourceType())).count())
+                                .append("    ");
                     }
-                    logger.info("Found {}", foundObjects);
+                    logger.info("Found {}", foundObjects.toString());
 
                     if (orchFlows == null || orchFlows.isEmpty()) {
                         orchFlows = queryNorthBoundRequestCatalogDb(execution, requestAction, resourceType, isALaCarte,
@@ -367,8 +362,7 @@ public class WorkflowAction {
                     // By default, enable homing at VNF level for CREATEINSTANCE and ASSIGNINSTANCE
                     if (resourceType == WorkflowType.SERVICE
                             && (requestAction.equals(CREATEINSTANCE) || requestAction.equals(ASSIGNINSTANCE))
-                            && !resourceList.stream().filter(x -> WorkflowType.VNF.equals(x.getResourceType()))
-                                    .collect(Collectors.toList()).isEmpty()) {
+                            && resourceList.stream().anyMatch(x -> WorkflowType.VNF.equals(x.getResourceType()))) {
                         execution.setVariable("homing", true);
                         execution.setVariable("calledHoming", false);
                     }
@@ -389,11 +383,7 @@ public class WorkflowAction {
                         sIRequest.getRequestDetails().getRequestParameters().getUserParams();
                 for (Map<String, Object> params : userParams) {
                     if (params.containsKey(HOMINGSOLUTION)) {
-                        if ("none".equals(params.get(HOMINGSOLUTION))) {
-                            execution.setVariable("homing", false);
-                        } else {
-                            execution.setVariable("homing", true);
-                        }
+                        execution.setVariable("homing", !"none".equals(params.get(HOMINGSOLUTION)));
                     }
                 }
             }
@@ -448,7 +438,7 @@ public class WorkflowAction {
             return cloudConfiguration.getCloudOwner();
         }
         logger.warn("cloud owner value not found in request details, it will be set as default");
-        return environment.getProperty(defaultCloudOwner);
+        return environment.getProperty(DEFAULT_CLOUD_OWNER);
     }
 
     protected <T> List<T> getRelatedResourcesInVfModule(String vnfId, String vfModuleId, Class<T> resultClass,
@@ -514,7 +504,7 @@ public class WorkflowAction {
         String vfModuleId = dataObj.getWorkflowResourceIds().getVfModuleId();
 
         String vnfCustomizationUUID = bbInputSetupUtils.getAAIGenericVnf(vnfId).getModelCustomizationId();
-        String vfModuleCustomizationUUID = "";
+        String vfModuleCustomizationUUID;
         org.onap.aai.domain.yang.VfModule aaiVfModule = bbInputSetupUtils.getAAIVfModule(vnfId, vfModuleId);
 
         if (aaiVfModule == null) {
@@ -549,10 +539,11 @@ public class WorkflowAction {
                                 + ": VnfcName does not exist or is null while there is a configuration for the vfModule",
                                 new Exception("Vnfc and Configuration do not match"));
                     }
-                    ExecuteBuildingBlock ebb = buildExecuteBuildingBlock(orchFlow, dataObj.getRequestId(),
-                            dataObj.getResourceKey(), dataObj.getApiVersion(), dataObj.getResourceId(),
-                            dataObj.getRequestAction(), dataObj.isaLaCarte(), dataObj.getVnfType(),
-                            dataObj.getWorkflowResourceIds(), dataObj.getRequestDetails(), false, null, vnfcName, true);
+                    ExecuteBuildingBlock ebb =
+                            buildExecuteBuildingBlock(orchFlow, dataObj.getRequestId(), dataObj.getResourceKey(),
+                                    dataObj.getApiVersion(), dataObj.getResourceId(), dataObj.getRequestAction(),
+                                    dataObj.isaLaCarte(), dataObj.getVnfType(), dataObj.getWorkflowResourceIds(),
+                                    dataObj.getRequestDetails(), false, null, vnfcName, true, null);
                     flowsToExecuteConfigs.add(ebb);
                 }
             }
@@ -575,17 +566,18 @@ public class WorkflowAction {
         boolean rebuildVolumeGroups = false;
         if (dataObj.getRequestDetails().getRequestParameters() != null
                 && dataObj.getRequestDetails().getRequestParameters().getRebuildVolumeGroups() != null) {
-            rebuildVolumeGroups =
-                    dataObj.getRequestDetails().getRequestParameters().getRebuildVolumeGroups().booleanValue();
+            rebuildVolumeGroups = dataObj.getRequestDetails().getRequestParameters().getRebuildVolumeGroups();
         }
-
+        String volumeGroupName = "";
         Optional<VolumeGroup> volumeGroupFromVfModule =
                 bbInputSetupUtils.getRelatedVolumeGroupFromVfModule(vnfId, vfModuleId);
         if (volumeGroupFromVfModule.isPresent()) {
             String volumeGroupId = volumeGroupFromVfModule.get().getVolumeGroupId();
+            volumeGroupName = volumeGroupFromVfModule.get().getVolumeGroupName();
             logger.debug("Volume group id of the existing volume group is: " + volumeGroupId);
             volumeGroupExisted = true;
             dataObj.getWorkflowResourceIds().setVolumeGroupId(volumeGroupId);
+            dataObj.getReplaceInformation().setOldVolumeGroupName(volumeGroupName);
         }
 
         List<OrchestrationFlow> orchFlows = dataObj.getOrchFlows();
@@ -598,6 +590,7 @@ public class WorkflowAction {
             if (!volumeGroupExisted) {
                 String newVolumeGroupId = UUID.randomUUID().toString();
                 dataObj.getWorkflowResourceIds().setVolumeGroupId(newVolumeGroupId);
+                dataObj.getReplaceInformation().setOldVolumeGroupName(volumeGroupName);
                 logger.debug("newVolumeGroupId: " + newVolumeGroupId);
             }
         }
@@ -629,7 +622,7 @@ public class WorkflowAction {
         }
         Relationships relationships = relationshipsOp.get();
         List<AAIResultWrapper> vnfcResultWrappers = relationships.getByType(AAIObjectType.VNFC);
-        if (vnfcResultWrappers.size() > 1 || vnfcResultWrappers.isEmpty()) {
+        if (vnfcResultWrappers.size() != 1) {
             logger.debug("Too many vnfcs or no vnfc found that are related to configuration");
         }
         Optional<Vnfc> vnfcOp = vnfcResultWrappers.get(0).asBean(Vnfc.class);
@@ -667,11 +660,10 @@ public class WorkflowAction {
             logger.debug(pair.getValue0() + ", " + pair.getValue1());
         }
 
-        Arrays.stream(WorkflowType.values()).filter(type -> !type.equals(WorkflowType.SERVICE)).forEach(type -> {
-            resourceList.stream().filter(resource -> type.equals(resource.getResourceType()))
-                    .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource.getResourceId(),
-                            retrieveAAIResourceId(aaiResourceIds, type), null, serviceInstanceId));
-        });
+        Arrays.stream(WorkflowType.values()).filter(type -> !type.equals(WorkflowType.SERVICE))
+                .forEach(type -> resourceList.stream().filter(resource -> type.equals(resource.getResourceType()))
+                        .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource.getResourceId(),
+                                retrieveAAIResourceId(aaiResourceIds, type), null, serviceInstanceId)));
     }
 
     private String retrieveAAIResourceId(List<Pair<WorkflowType, String>> aaiResourceIds, WorkflowType resource) {
@@ -688,11 +680,10 @@ public class WorkflowAction {
 
     private void generateResourceIds(List<ExecuteBuildingBlock> flowsToExecute, List<Resource> resourceList,
             String serviceInstanceId) {
-        Arrays.stream(WorkflowType.values()).filter(type -> !type.equals(WorkflowType.SERVICE)).forEach(type -> {
-            resourceList.stream().filter(resource -> type.equals(resource.getResourceType()))
-                    .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource.getResourceId(), null,
-                            resource.getVirtualLinkKey(), serviceInstanceId));
-        });
+        Arrays.stream(WorkflowType.values()).filter(type -> !type.equals(WorkflowType.SERVICE))
+                .forEach(type -> resourceList.stream().filter(resource -> type.equals(resource.getResourceType()))
+                        .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource.getResourceId(),
+                                null, resource.getVirtualLinkKey(), serviceInstanceId)));
     }
 
     protected void updateWorkflowResourceIds(List<ExecuteBuildingBlock> flowsToExecute, WorkflowType resourceType,
@@ -947,8 +938,7 @@ public class WorkflowAction {
     }
 
     private boolean isNetworkCollectionInTheResourceList(List<Resource> resourceList) {
-        return !(resourceList.stream().filter(x -> WorkflowType.NETWORKCOLLECTION == x.getResourceType())
-                .collect(Collectors.toList()).isEmpty());
+        return resourceList.stream().anyMatch(x -> WorkflowType.NETWORKCOLLECTION == x.getResourceType());
     }
 
     private boolean isVnfCustomizationsInTheService(org.onap.so.db.catalog.beans.Service service) {
@@ -962,28 +952,7 @@ public class WorkflowAction {
             org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
                     bbInputSetup.getExistingServiceInstance(serviceInstanceAAI);
             resourceList.add(new Resource(WorkflowType.SERVICE, serviceInstanceMSO.getServiceInstanceId(), false));
-            if (serviceInstanceMSO.getVnfs() != null) {
-                for (org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf : serviceInstanceMSO.getVnfs()) {
-                    aaiResourceIds.add(new Pair<>(WorkflowType.VNF, vnf.getVnfId()));
-                    resourceList.add(new Resource(WorkflowType.VNF, vnf.getVnfId(), false));
-                    if (vnf.getVfModules() != null) {
-                        for (VfModule vfModule : vnf.getVfModules()) {
-                            aaiResourceIds.add(new Pair<>(WorkflowType.VFMODULE, vfModule.getVfModuleId()));
-                            Resource resource = new Resource(WorkflowType.VFMODULE, vfModule.getVfModuleId(), false);
-                            resource.setBaseVfModule(vfModule.getModelInfoVfModule().getIsBaseBoolean());
-                            resourceList.add(resource);
-                        }
-                    }
-                    if (vnf.getVolumeGroups() != null) {
-                        for (org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup : vnf
-                                .getVolumeGroups()) {
-                            aaiResourceIds.add(new Pair<>(WorkflowType.VOLUMEGROUP, volumeGroup.getVolumeGroupId()));
-                            resourceList
-                                    .add(new Resource(WorkflowType.VOLUMEGROUP, volumeGroup.getVolumeGroupId(), false));
-                        }
-                    }
-                }
-            }
+            traverseServiceInstanceMSOVnfs(resourceList, aaiResourceIds, serviceInstanceMSO);
             if (serviceInstanceMSO.getNetworks() != null) {
                 for (org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network : serviceInstanceMSO
                         .getNetworks()) {
@@ -1022,6 +991,38 @@ public class WorkflowAction {
         }
     }
 
+    private void traverseServiceInstanceMSOVnfs(List<Resource> resourceList,
+            List<Pair<WorkflowType, String>> aaiResourceIds,
+            org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO) {
+        if (serviceInstanceMSO.getVnfs() == null) {
+            return;
+        }
+        for (org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf : serviceInstanceMSO.getVnfs()) {
+            aaiResourceIds.add(new Pair<>(WorkflowType.VNF, vnf.getVnfId()));
+            resourceList.add(new Resource(WorkflowType.VNF, vnf.getVnfId(), false));
+            traverseVnfModules(resourceList, aaiResourceIds, vnf);
+            if (vnf.getVolumeGroups() != null) {
+                for (org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup : vnf.getVolumeGroups()) {
+                    aaiResourceIds.add(new Pair<>(WorkflowType.VOLUMEGROUP, volumeGroup.getVolumeGroupId()));
+                    resourceList.add(new Resource(WorkflowType.VOLUMEGROUP, volumeGroup.getVolumeGroupId(), false));
+                }
+            }
+        }
+    }
+
+    private void traverseVnfModules(List<Resource> resourceList, List<Pair<WorkflowType, String>> aaiResourceIds,
+            org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf) {
+        if (vnf.getVfModules() == null) {
+            return;
+        }
+        for (VfModule vfModule : vnf.getVfModules()) {
+            aaiResourceIds.add(new Pair<>(WorkflowType.VFMODULE, vfModule.getVfModuleId()));
+            Resource resource = new Resource(WorkflowType.VFMODULE, vfModule.getVfModuleId(), false);
+            resource.setBaseVfModule(vfModule.getModelInfoVfModule().getIsBaseBoolean());
+            resourceList.add(resource);
+        }
+    }
+
     private void traverseAAIVnf(DelegateExecution execution, List<Resource> resourceList, String serviceId,
             String vnfId, List<Pair<WorkflowType, String>> aaiResourceIds) {
         try {
@@ -1134,12 +1135,9 @@ public class WorkflowAction {
                                             foundVfModuleOrVG = true;
                                             Resource resource = new Resource(WorkflowType.VFMODULE,
                                                     vfModuleCustomization.getModelCustomizationUUID(), false);
-                                            if (vfModuleCustomization.getVfModule().getIsBase() != null
-                                                    && vfModuleCustomization.getVfModule().getIsBase()) {
-                                                resource.setBaseVfModule(true);
-                                            } else {
-                                                resource.setBaseVfModule(false);
-                                            }
+                                            resource.setBaseVfModule(
+                                                    vfModuleCustomization.getVfModule().getIsBase() != null
+                                                            && vfModuleCustomization.getVfModule().getIsBase());
                                             resourceList.add(resource);
                                             if (vfModule.getModelInfo() != null
                                                     && vfModule.getModelInfo().getModelCustomizationUuid() != null) {
@@ -1394,7 +1392,7 @@ public class WorkflowAction {
         resourceList.stream().filter(resource -> resource.getResourceType().equals(workflowType))
                 .forEach(resource -> flowsToExecute.add(buildExecuteBuildingBlock(orchFlow, requestId, resource,
                         apiVersion, resourceId, requestAction, false, vnfType, workflowResourceIds, requestDetails,
-                        isVirtualLink, resource.getVirtualLinkKey(), null, isConfiguration)));
+                        isVirtualLink, resource.getVirtualLinkKey(), null, isConfiguration, null)));
     }
 
     protected List<ExecuteBuildingBlock> buildExecuteBuildingBlockList(List<OrchestrationFlow> orchFlows,
@@ -1429,7 +1427,7 @@ public class WorkflowAction {
                         true, false);
             } else if (orchFlow.getFlowName().contains(VFMODULE) || (orchFlow.getFlowName().contains(CONTROLLER)
                     && (VFMODULE).equalsIgnoreCase(orchFlow.getBpmnScope()))) {
-                List<Resource> vfModuleResourcesSorted = null;
+                List<Resource> vfModuleResourcesSorted;
                 if (requestAction.equals(CREATEINSTANCE) || requestAction.equals(ASSIGNINSTANCE)
                         || requestAction.equals("activateInstance")) {
                     vfModuleResourcesSorted = sortVfModulesByBaseFirst(resourceList.stream()
@@ -1438,10 +1436,10 @@ public class WorkflowAction {
                     vfModuleResourcesSorted = sortVfModulesByBaseLast(resourceList.stream()
                             .filter(x -> WorkflowType.VFMODULE == x.getResourceType()).collect(Collectors.toList()));
                 }
-                for (int i = 0; i < vfModuleResourcesSorted.size(); i++) {
-                    flowsToExecute.add(buildExecuteBuildingBlock(orchFlow, requestId, vfModuleResourcesSorted.get(i),
-                            apiVersion, resourceId, requestAction, false, vnfType, workflowResourceIds, requestDetails,
-                            false, null, null, false));
+                for (Resource resource : vfModuleResourcesSorted) {
+                    flowsToExecute.add(buildExecuteBuildingBlock(orchFlow, requestId, resource, apiVersion, resourceId,
+                            requestAction, false, vnfType, workflowResourceIds, requestDetails, false, null, null,
+                            false, null));
                 }
             } else if (orchFlow.getFlowName().contains(VOLUMEGROUP)) {
                 if (requestAction.equalsIgnoreCase(REPLACEINSTANCE)
@@ -1461,8 +1459,9 @@ public class WorkflowAction {
                         requestId, apiVersion, resourceId, requestAction, vnfType, workflowResourceIds, requestDetails,
                         false, true);
             } else {
-                flowsToExecute.add(buildExecuteBuildingBlock(orchFlow, requestId, null, apiVersion, resourceId,
-                        requestAction, false, vnfType, workflowResourceIds, requestDetails, false, null, null, false));
+                flowsToExecute
+                        .add(buildExecuteBuildingBlock(orchFlow, requestId, null, apiVersion, resourceId, requestAction,
+                                false, vnfType, workflowResourceIds, requestDetails, false, null, null, false, null));
             }
         }
         return flowsToExecute;
@@ -1471,15 +1470,19 @@ public class WorkflowAction {
     protected ExecuteBuildingBlock buildExecuteBuildingBlock(OrchestrationFlow orchFlow, String requestId,
             Resource resource, String apiVersion, String resourceId, String requestAction, boolean aLaCarte,
             String vnfType, WorkflowResourceIds workflowResourceIds, RequestDetails requestDetails,
-            boolean isVirtualLink, String virtualLinkKey, String vnfcName, boolean isConfiguration) {
+            boolean isVirtualLink, String virtualLinkKey, String vnfcName, boolean isConfiguration,
+            ReplaceInstanceRelatedInformation replaceInfo) {
 
         BuildingBlock buildingBlock =
                 new BuildingBlock().setBpmnFlowName(orchFlow.getFlowName()).setMsoId(UUID.randomUUID().toString())
                         .setIsVirtualLink(isVirtualLink).setVirtualLinkKey(virtualLinkKey)
                         .setKey(Optional.ofNullable(resource).map(Resource::getResourceId).orElse(""));
-        Optional.ofNullable(orchFlow.getBpmnAction()).ifPresent(action -> buildingBlock.setBpmnAction(action));
-        Optional.ofNullable(orchFlow.getBpmnScope()).ifPresent(scope -> buildingBlock.setBpmnScope(scope));
-
+        Optional.ofNullable(orchFlow.getBpmnAction()).ifPresent(buildingBlock::setBpmnAction);
+        Optional.ofNullable(orchFlow.getBpmnScope()).ifPresent(buildingBlock::setBpmnScope);
+        String oldVolumeGroupName = "";
+        if (replaceInfo != null) {
+            oldVolumeGroupName = replaceInfo.getOldVolumeGroupName();
+        }
         if (resource != null
                 && (orchFlow.getFlowName().contains(VOLUMEGROUP) && (requestAction.equalsIgnoreCase(REPLACEINSTANCE)
                         || requestAction.equalsIgnoreCase(REPLACEINSTANCERETAINASSIGNMENTS)))) {
@@ -1490,19 +1493,24 @@ public class WorkflowAction {
         ExecuteBuildingBlock executeBuildingBlock = new ExecuteBuildingBlock().setApiVersion(apiVersion)
                 .setaLaCarte(aLaCarte).setRequestAction(requestAction).setResourceId(resourceId).setVnfType(vnfType)
                 .setWorkflowResourceIds(workflowResourceIds).setRequestId(requestId).setBuildingBlock(buildingBlock)
-                .setRequestDetails(requestDetails);
+                .setRequestDetails(requestDetails).setOldVolumeGroupName(oldVolumeGroupName);
 
         if (resource != null && (isConfiguration || resource.getResourceType().equals(WorkflowType.CONFIGURATION))) {
-            ConfigurationResourceKeys configurationResourceKeys = new ConfigurationResourceKeys();
-            Optional.ofNullable(vnfcName).ifPresent(name -> configurationResourceKeys.setVnfcName(name));
-            configurationResourceKeys.setCvnfcCustomizationUUID(resource.getCvnfModuleCustomizationId());
-            configurationResourceKeys.setVfModuleCustomizationUUID(resource.getVfModuleCustomizationId());
-            configurationResourceKeys.setVnfResourceCustomizationUUID(resource.getVnfCustomizationId());
+            ConfigurationResourceKeys configurationResourceKeys = getConfigurationResourceKeys(resource, vnfcName);
             executeBuildingBlock.setConfigurationResourceKeys(configurationResourceKeys);
         }
         return executeBuildingBlock;
     }
 
+    private ConfigurationResourceKeys getConfigurationResourceKeys(Resource resource, String vnfcName) {
+        ConfigurationResourceKeys configurationResourceKeys = new ConfigurationResourceKeys();
+        Optional.ofNullable(vnfcName).ifPresent(configurationResourceKeys::setVnfcName);
+        configurationResourceKeys.setCvnfcCustomizationUUID(resource.getCvnfModuleCustomizationId());
+        configurationResourceKeys.setVfModuleCustomizationUUID(resource.getVfModuleCustomizationId());
+        configurationResourceKeys.setVnfResourceCustomizationUUID(resource.getVnfCustomizationId());
+        return configurationResourceKeys;
+    }
+
     protected List<OrchestrationFlow> queryNorthBoundRequestCatalogDb(DelegateExecution execution, String requestAction,
             WorkflowType resourceName, boolean aLaCarte, String cloudOwner) {
         return this.queryNorthBoundRequestCatalogDb(execution, requestAction, resourceName, aLaCarte, cloudOwner, "");
@@ -1511,7 +1519,7 @@ public class WorkflowAction {
     protected List<OrchestrationFlow> queryNorthBoundRequestCatalogDb(DelegateExecution execution, String requestAction,
             WorkflowType resourceName, boolean aLaCarte, String cloudOwner, String serviceType) {
         List<OrchestrationFlow> listToExecute = new ArrayList<>();
-        NorthBoundRequest northBoundRequest = null;
+        NorthBoundRequest northBoundRequest;
         if (serviceType.equalsIgnoreCase(SERVICE_TYPE_TRANSPORT)
                 || serviceType.equalsIgnoreCase(SERVICE_TYPE_BONDING)) {
             northBoundRequest =
@@ -1592,7 +1600,7 @@ public class WorkflowAction {
     }
 
     protected String validateServiceResourceIdInAAI(String generatedResourceId, String instanceName,
-            RequestDetails reqDetails) throws DuplicateNameException, MultipleObjectsFoundException {
+            RequestDetails reqDetails) throws DuplicateNameException {
         String globalCustomerId = reqDetails.getSubscriberInfo().getGlobalSubscriberId();
         String serviceType = reqDetails.getRequestParameters().getSubscriptionServiceType();
         if (instanceName != null) {
@@ -1656,8 +1664,7 @@ public class WorkflowAction {
     }
 
     protected String validateVnfResourceIdInAAI(String generatedResourceId, String instanceName,
-            RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds)
-            throws DuplicateNameException, MultipleObjectsFoundException {
+            RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException {
         Optional<GenericVnf> vnf = bbInputSetupUtils
                 .getRelatedVnfByNameFromServiceInstance(workflowResourceIds.getServiceInstanceId(), instanceName);
         if (vnf.isPresent()) {
@@ -1701,8 +1708,7 @@ public class WorkflowAction {
     }
 
     protected String validateVolumeGroupResourceIdInAAI(String generatedResourceId, String instanceName,
-            RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds)
-            throws DuplicateNameException, MultipleObjectsFoundException {
+            RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException {
         Optional<VolumeGroup> volumeGroup =
                 bbInputSetupUtils.getRelatedVolumeGroupByNameFromVnf(workflowResourceIds.getVnfId(), instanceName);
         if (volumeGroup.isPresent()) {
@@ -1720,8 +1726,7 @@ public class WorkflowAction {
     }
 
     protected String validateConfigurationResourceIdInAAI(String generatedResourceId, String instanceName,
-            RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds)
-            throws DuplicateNameException, MultipleObjectsFoundException {
+            RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException {
         Optional<org.onap.aai.domain.yang.Configuration> configuration =
                 bbInputSetupUtils.getRelatedConfigurationByNameFromServiceInstance(
                         workflowResourceIds.getServiceInstanceId(), instanceName);
index 6cb522e..343b25e 100644 (file)
@@ -474,7 +474,7 @@ public class WorkflowActionBBTasks {
         BuildingBlock buildingBlock =
                 new BuildingBlock().setBpmnFlowName(bbName).setMsoId(UUID.randomUUID().toString());
 
-        WorkflowResourceIds workflowResourceIds = ebb.getWorkflowResourceIds();
+        WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(ebb.getWorkflowResourceIds());
         workflowResourceIds.setConfigurationId(configurationId);
         return new ExecuteBuildingBlock().setaLaCarte(ebb.isaLaCarte()).setApiVersion(ebb.getApiVersion())
                 .setRequestAction(ebb.getRequestAction()).setVnfType(ebb.getVnfType()).setRequestId(ebb.getRequestId())
index 4aa6a10..da675bb 100644 (file)
@@ -21,6 +21,7 @@
 package org.onap.so.client.orchestration;
 
 
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.GCTopologyOperationRequestMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
@@ -29,7 +30,6 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.client.exception.BadResponseException;
 import org.onap.so.client.exception.MapperException;
 import org.onap.so.client.sdnc.beans.SDNCSvcAction;
-import org.onap.so.client.sdnc.mapper.GCTopologyOperationRequestMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import java.net.URI;
index 0123eb6..dc59969 100644 (file)
@@ -24,6 +24,7 @@ package org.onap.so.client.orchestration;
 
 import org.onap.sdnc.northbound.client.model.GenericResourceApiNetworkOperationInformation;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiRequestActionEnumeration;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.NetworkTopologyOperationRequestMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
@@ -31,7 +32,6 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
 import org.onap.so.client.sdnc.beans.SDNCSvcAction;
 import org.onap.so.client.sdnc.beans.SDNCSvcOperation;
-import org.onap.so.client.sdnc.mapper.NetworkTopologyOperationRequestMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
index 960efea..54efd23 100644 (file)
@@ -22,6 +22,7 @@ package org.onap.so.client.orchestration;
 
 import org.onap.sdnc.northbound.client.model.GenericResourceApiRequestActionEnumeration;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiServiceOperationInformation;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.ServiceTopologyOperationMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
@@ -29,7 +30,6 @@ import org.onap.so.client.exception.BadResponseException;
 import org.onap.so.client.exception.MapperException;
 import org.onap.so.client.sdnc.beans.SDNCSvcAction;
 import org.onap.so.client.sdnc.beans.SDNCSvcOperation;
-import org.onap.so.client.sdnc.mapper.ServiceTopologyOperationMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
index 01511ea..c500374 100644 (file)
@@ -24,6 +24,7 @@ package org.onap.so.client.orchestration;
 
 import java.net.URI;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiVfModuleOperationInformation;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.VfModuleTopologyOperationRequestMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
@@ -36,7 +37,6 @@ import org.onap.so.client.exception.MapperException;
 import org.onap.so.client.sdnc.SDNCClient;
 import org.onap.so.client.sdnc.beans.SDNCSvcAction;
 import org.onap.so.client.sdnc.beans.SDNCSvcOperation;
-import org.onap.so.client.sdnc.mapper.VfModuleTopologyOperationRequestMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
index 27edeed..d198756 100644 (file)
@@ -25,6 +25,7 @@ package org.onap.so.client.orchestration;
 import java.net.URI;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiRequestActionEnumeration;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiVnfOperationInformation;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.VnfTopologyOperationRequestMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
@@ -35,7 +36,6 @@ import org.onap.so.client.exception.MapperException;
 import org.onap.so.client.sdnc.SDNCClient;
 import org.onap.so.client.sdnc.beans.SDNCSvcAction;
 import org.onap.so.client.sdnc.beans.SDNCSvcOperation;
-import org.onap.so.client.sdnc.mapper.VnfTopologyOperationRequestMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.client.sdnc.mapper;
+package org.onap.so.bpmn.infrastructure.sdnc.mapper;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -33,6 +33,8 @@ import org.mockito.Spy;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiGcTopologyOperationInformation;
 import org.onap.so.bpmn.common.data.TestDataSetup;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.GCTopologyOperationRequestMapper;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.GeneralTopologyObjectMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
@@ -78,81 +80,4 @@ public class GCTopologyOperationRequestMapperTest extends TestDataSetup {
         Assert.assertEquals("MsoRequestId", genericInfo.getRequestInformation().getRequestId());
     }
 
-
-
-    private VpnBondingLink getVpnBondingLink() {
-        VpnBondingLink vpnBondingLink = new VpnBondingLink();
-        Configuration vrfConfiguration = getVRFConfiguration();
-        vpnBondingLink.setVrfConfiguration(vrfConfiguration);
-        Configuration vnrConfiguration = getVNRConfiguration();
-        vpnBondingLink.setVnrConfiguration(vnrConfiguration);
-        vpnBondingLink.setTransportServiceProxy(buildServiceProxy(buildServiceInstance(buildGenericVnf())));
-        return vpnBondingLink;
-    }
-
-    private RequestContext getRequestContext() {
-        RequestContext requestContext = new RequestContext();
-        requestContext.setMsoRequestId("MsoRequestId");
-        Map<String, Object> userParams = getUserParams();
-        requestContext.setUserParams(userParams);
-        return requestContext;
-    }
-
-    private Map<String, Object> getUserParams() {
-        Map<String, Object> userParams = new HashMap<>();
-        userParams.put("lppCustomerId", "lppCustomerId");
-        return userParams;
-    }
-
-    private ServiceProxy buildServiceProxy(ServiceInstance serviceInstance) {
-        ServiceProxy serviceProxy = new ServiceProxy();
-        serviceProxy.setServiceInstance(serviceInstance);
-        return serviceProxy;
-    }
-
-    private Configuration getVRFConfiguration() {
-        Configuration vrfConfiguration = new Configuration();
-        vrfConfiguration.setConfigurationId("ConfigurationId");
-        vrfConfiguration.setConfigurationName("ConfigurationName");
-        vrfConfiguration.setConfigurationSubType("ConfigurationSubType");
-        vrfConfiguration.setConfigurationType("VRF-ENTRY");
-        return vrfConfiguration;
-    }
-
-    public Configuration getVNRConfiguration() {
-        Configuration vnrConfiguration = new Configuration();
-        vnrConfiguration.setConfigurationId("ConfigurationId");
-        vnrConfiguration.setConfigurationName("ConfigurationName");
-        vnrConfiguration.setConfigurationSubType("ConfigurationSubType");
-        vnrConfiguration.setConfigurationType("VNRConfiguration");
-        L3Network l3Network = getL3Network();
-        vnrConfiguration.setNetwork(l3Network);
-        return vnrConfiguration;
-    }
-
-    public L3Network getL3Network() {
-        L3Network l3Network = new L3Network();
-        l3Network.setNetworkId("l3NetworkId");
-        Subnet ipv4subnet = getSubnet("ipv4CidrMask", "ipv4NetworkStartAddress", "IPV4");
-        Subnet ipv6subnet = getSubnet("ipv6CidrMask", "ipv6NetworkStartAddress", "IPV6");
-        l3Network.getSubnets().add(ipv4subnet);
-        l3Network.getSubnets().add(ipv6subnet);
-        return l3Network;
-    }
-
-    private Subnet getSubnet(String ipv4CidrMask, String ipv4NetworkStartAddress, String ipv4) {
-        Subnet ipv4subnet = new Subnet();
-        ipv4subnet.setCidrMask(ipv4CidrMask);
-        ipv4subnet.setNetworkStartAddress(ipv4NetworkStartAddress);
-        ipv4subnet.setIpVersion(ipv4);
-        return ipv4subnet;
-    }
-
-    private ServiceInstance buildServiceInstance(GenericVnf vnf) {
-        ServiceInstance serviceInstance = new ServiceInstance();
-        serviceInstance.setServiceInstanceId("ServiceInstanceId");
-        List<GenericVnf> vnfs = serviceInstance.getVnfs();
-        vnfs.add(vnf);
-        return serviceInstance;
-    }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.client.sdnc.mapper;
+package org.onap.so.bpmn.infrastructure.sdnc.mapper;
 
 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
 import static org.junit.Assert.assertEquals;
@@ -47,6 +47,7 @@ import org.onap.sdnc.northbound.client.model.GenericResourceApiSvcActionEnumerat
 import org.onap.sdnc.northbound.client.model.GenericResourceApiVfmoduleinformationVfModuleInformation;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiVnfinformationVnfInformation;
 import org.onap.so.bpmn.common.data.TestDataSetup;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.GeneralTopologyObjectMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.client.sdnc.mapper;
+package org.onap.so.bpmn.infrastructure.sdnc.mapper;
 
 import static com.shazam.shazamcrest.MatcherAssert.assertThat;
 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
@@ -38,6 +38,8 @@ import org.mockito.Spy;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiNetworkOperationInformation;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiRequestActionEnumeration;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.GeneralTopologyObjectMapper;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.NetworkTopologyOperationRequestMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.client.sdnc.mapper;
+package org.onap.so.bpmn.infrastructure.sdnc.mapper;
 
 import static com.shazam.shazamcrest.MatcherAssert.assertThat;
 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
@@ -33,6 +33,8 @@ import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Spy;
 import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.GeneralTopologyObjectMapper;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.ServiceTopologyOperationMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceSubscription;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.client.sdnc.mapper;
+package org.onap.so.bpmn.infrastructure.sdnc.mapper;
 
 import static com.shazam.shazamcrest.MatcherAssert.assertThat;
 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
@@ -40,6 +40,8 @@ import org.mockito.InjectMocks;
 import org.mockito.Spy;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiVfModuleOperationInformation;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.GeneralTopologyObjectMapper;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.VfModuleTopologyOperationRequestMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.client.sdnc.mapper;
+package org.onap.so.bpmn.infrastructure.sdnc.mapper;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -35,6 +35,8 @@ import org.mockito.Spy;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiRequestActionEnumeration;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiVnfOperationInformation;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.GeneralTopologyObjectMapper;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.VnfTopologyOperationRequestMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
index b538718..1aa7640 100644 (file)
@@ -44,7 +44,9 @@ import org.onap.so.bpmn.BaseTaskTest;
 import org.onap.so.bpmn.common.listener.flowmanipulator.FlowManipulatorListenerRunner;
 import org.onap.so.bpmn.core.WorkflowException;
 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
+import org.onap.so.bpmn.servicedecomposition.entities.ConfigurationResourceKeys;
 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
+import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.serviceinstancebeans.ModelInfo;
@@ -53,6 +55,7 @@ import org.springframework.core.env.Environment;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -528,6 +531,55 @@ public class WorkflowActionBBTasksTest extends BaseTaskTest {
         assertEquals(2, ebbs.size());
     }
 
+    @Test
+    public void postProcessingExecuteBBActivateVfModuleTest() throws CloneNotSupportedException {
+        BuildingBlock bbActivateVfModule = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
+        ExecuteBuildingBlock ebbActivateVfModule = new ExecuteBuildingBlock().setBuildingBlock(bbActivateVfModule);
+
+        WorkflowResourceIds resourceIdsActivateVfModule = new WorkflowResourceIds();
+        resourceIdsActivateVfModule.setServiceInstanceId("test-service-inbstance-id");
+        resourceIdsActivateVfModule.setVnfId("test-vnf-id");
+        resourceIdsActivateVfModule.setVfModuleId("test-vf-module-id");
+        resourceIdsActivateVfModule.setConfigurationId("");
+
+        RequestDetails requestDetails = new RequestDetails();
+
+        ebbActivateVfModule.setApiVersion("7");
+        ebbActivateVfModule.setaLaCarte(true);
+        ebbActivateVfModule.setRequestAction("createInstance");
+        ebbActivateVfModule.setVnfType("test-vnf-type");
+        ebbActivateVfModule.setRequestId("f6c00ae2-a205-4cbd-b055-02e553efde12");
+        ebbActivateVfModule.setRequestDetails(requestDetails);
+        ebbActivateVfModule.setWorkflowResourceIds(resourceIdsActivateVfModule);
+
+        ConfigurationResourceKeys configurationResourceKeys = new ConfigurationResourceKeys();
+        configurationResourceKeys.setCvnfcCustomizationUUID("07d64cd2-4427-4156-b11d-d14b96b3e4cb");
+        configurationResourceKeys.setVfModuleCustomizationUUID("50b61075-6ebb-4aab-a9fc-bedad9a2aa76");
+        configurationResourceKeys.setVnfResourceCustomizationUUID("a1d0e36e-34a9-431b-b5ba-4bbb72f63c7c");
+        configurationResourceKeys.setVnfcName("rdm54bvbgw5001vm018pim001");
+
+        ExecuteBuildingBlock ebbAddFabricConfig =
+                workflowActionBBTasks.getExecuteBBForConfig("AddFabricConfigurationBB", ebbActivateVfModule,
+                        "cc7e12f9-967c-4362-8d14-e5b2bf0608a4", configurationResourceKeys);
+
+        assertEquals("7", ebbAddFabricConfig.getApiVersion());
+        assertTrue(ebbAddFabricConfig.isaLaCarte());
+        assertEquals("createInstance", ebbAddFabricConfig.getRequestAction());
+        assertEquals("test-vnf-type", ebbAddFabricConfig.getVnfType());
+        assertEquals("f6c00ae2-a205-4cbd-b055-02e553efde12", ebbAddFabricConfig.getRequestId());
+        assertEquals(requestDetails, ebbAddFabricConfig.getRequestDetails());
+        assertEquals("cc7e12f9-967c-4362-8d14-e5b2bf0608a4",
+                ebbAddFabricConfig.getWorkflowResourceIds().getConfigurationId());
+        assertEquals("test-service-inbstance-id", ebbAddFabricConfig.getWorkflowResourceIds().getServiceInstanceId());
+        assertEquals("test-vnf-id", ebbAddFabricConfig.getWorkflowResourceIds().getVnfId());
+        assertEquals("test-vf-module-id", ebbAddFabricConfig.getWorkflowResourceIds().getVfModuleId());
+
+        assertThat(ebbAddFabricConfig.getConfigurationResourceKeys()).isEqualTo(configurationResourceKeys);
+        assertThat(ebbAddFabricConfig.getWorkflowResourceIds())
+                .isNotEqualTo(ebbActivateVfModule.getWorkflowResourceIds());
+        assertThat(ebbAddFabricConfig.getWorkflowResourceIds().getConfigurationId())
+                .isNotEqualTo(ebbActivateVfModule.getWorkflowResourceIds().getConfigurationId());
+    }
 
     @Test
     public void checkRetryStatusTest() {
index cf8d98e..8f10456 100644 (file)
@@ -3122,7 +3122,7 @@ public class WorkflowActionTest extends BaseTaskTest {
         ExecuteBuildingBlock result = null;
         try {
             result = workflowAction.buildExecuteBuildingBlock(new OrchestrationFlow(), null, null, null, null, null,
-                    false, null, null, null, false, null, null, true);
+                    false, null, null, null, false, null, null, true, null);
         } catch (NullPointerException e) {
             fail("NullPointerException should not be thrown when 'resource' is null");
         }
index 9049fe1..3429a16 100644 (file)
@@ -35,6 +35,7 @@ import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiGcTopologyOperationInformation;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiRequestActionEnumeration;
 import org.onap.so.bpmn.common.data.TestDataSetup;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.GCTopologyOperationRequestMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
@@ -45,7 +46,6 @@ import org.onap.so.client.exception.BadResponseException;
 import org.onap.so.client.exception.MapperException;
 import org.onap.so.client.sdnc.SDNCClient;
 import org.onap.so.client.sdnc.beans.SDNCSvcAction;
-import org.onap.so.client.sdnc.mapper.GCTopologyOperationRequestMapper;
 
 @RunWith(MockitoJUnitRunner.Silent.class)
 public class SDNCConfigurationResourcesTest extends TestDataSetup {
index 327bae5..f86a712 100644 (file)
@@ -32,6 +32,7 @@ import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiNetworkOperationInformation;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiRequestActionEnumeration;
 import org.onap.so.bpmn.common.data.TestDataSetup;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.NetworkTopologyOperationRequestMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
@@ -42,7 +43,6 @@ import org.onap.so.client.exception.MapperException;
 import org.onap.so.client.sdnc.SDNCClient;
 import org.onap.so.client.sdnc.beans.SDNCSvcAction;
 import org.onap.so.client.sdnc.beans.SDNCSvcOperation;
-import org.onap.so.client.sdnc.mapper.NetworkTopologyOperationRequestMapper;
 
 @RunWith(MockitoJUnitRunner.Silent.class)
 public class SDNCNetworkResourcesTest extends TestDataSetup {
index ad05ac0..4282b0d 100644 (file)
@@ -35,6 +35,7 @@ import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiRequestActionEnumeration;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiServiceOperationInformation;
 import org.onap.so.bpmn.common.data.TestDataSetup;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.ServiceTopologyOperationMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
@@ -42,7 +43,6 @@ import org.onap.so.client.exception.BadResponseException;
 import org.onap.so.client.exception.MapperException;
 import org.onap.so.client.sdnc.beans.SDNCSvcAction;
 import org.onap.so.client.sdnc.beans.SDNCSvcOperation;
-import org.onap.so.client.sdnc.mapper.ServiceTopologyOperationMapper;
 
 @RunWith(MockitoJUnitRunner.Silent.class)
 public class SDNCServiceInstanceResourcesTest extends TestDataSetup {
index 14e9932..813c2f7 100644 (file)
@@ -33,6 +33,7 @@ import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiVfModuleOperationInformation;
 import org.onap.so.bpmn.common.data.TestDataSetup;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.VfModuleTopologyOperationRequestMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
@@ -43,8 +44,7 @@ import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
 import org.onap.so.client.exception.BadResponseException;
 import org.onap.so.client.exception.MapperException;
 import org.onap.so.client.sdnc.beans.SDNCSvcAction;
-import org.onap.so.client.sdnc.beans.SDNCSvcOperation;
-import org.onap.so.client.sdnc.mapper.VfModuleTopologyOperationRequestMapper;;
+import org.onap.so.client.sdnc.beans.SDNCSvcOperation;;
 
 @RunWith(MockitoJUnitRunner.Silent.class)
 public class SDNCVfModuleResourcesTest extends TestDataSetup {
index 0ccf056..f9c380b 100644 (file)
@@ -39,6 +39,7 @@ import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiRequestActionEnumeration;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiVnfOperationInformation;
 import org.onap.so.bpmn.common.data.TestDataSetup;
+import org.onap.so.bpmn.infrastructure.sdnc.mapper.VnfTopologyOperationRequestMapper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
@@ -49,7 +50,6 @@ import org.onap.so.client.exception.MapperException;
 import org.onap.so.client.sdnc.SDNCClient;
 import org.onap.so.client.sdnc.beans.SDNCSvcAction;
 import org.onap.so.client.sdnc.beans.SDNCSvcOperation;
-import org.onap.so.client.sdnc.mapper.VnfTopologyOperationRequestMapper;
 
 @RunWith(MockitoJUnitRunner.Silent.class)
 public class SDNCVnfResourcesTest extends TestDataSetup {
index 23a1a81..4a8b7d9 100644 (file)
@@ -325,13 +325,8 @@ public class FluentGenerator {
             String value;
             String name;
 
-            if (params.group(2) != null) {
-                name = params.group(2);
-            } else {
-                name = params.group(1);
-            }
             value = params.group(1);
-
+            name = params.group(2);
             name = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, name);
 
             classFields.add(FieldSpec.builder(String.class, name, Modifier.PUBLIC, Modifier.FINAL)
index 8be22e1..d27794c 100644 (file)
@@ -7,5 +7,5 @@ public class Patterns {
     public static final Pattern pluralPattern = Pattern.compile(".*(?<partial>/(?<name>[^{]*$))");
     public static final Pattern singularPattern = Pattern.compile(".*(?<partial>/(?<name>[^/{}]*)/\\{.*$)");
     public static final Pattern topLevelPattern = Pattern.compile("^/([^/]+)/.*");
-    public static final Pattern urlTemplatePattern = Pattern.compile("\\{([^}.]+(?:\\.([^}]+))?)\\}");
+    public static final Pattern urlTemplatePattern = Pattern.compile("\\{((?:.+\\.)?([^}.]+))\\}");
 }
index 4230548..ec09af8 100644 (file)
@@ -125,8 +125,6 @@ public class SwaggerConverter {
             }
         }
 
-        log.debug(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(output));
-
         for (Map.Entry<String, ObjectType> item : output.entrySet()) {
 
             if (item.getValue().getType().equals("plural")) {
@@ -156,7 +154,7 @@ public class SwaggerConverter {
                 Matcher templates = Patterns.urlTemplatePattern.matcher(item.getValue().getPartialUri());
                 List<String> localFields = new ArrayList<>();
                 while (templates.find()) {
-                    localFields.add(templates.group(1));
+                    localFields.add(templates.group(2));
                 }
                 item.getValue().setFields(item.getValue().getFields().stream()
                         .filter(f -> localFields.contains(f.getName())).collect(Collectors.toList()));
@@ -166,6 +164,8 @@ public class SwaggerConverter {
         output.values().stream().filter(item -> item.getType().equals("plural"))
                 .forEach(item -> item.getChildren().clear());
 
+        log.debug(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(output));
+
         return output;
     }
 }
index 3574975..0f7cf5f 100644 (file)
@@ -81,12 +81,13 @@ public class WorkflowSpecificationsHandler {
     @Transactional
 
     public Response queryWorkflowSpecifications(@QueryParam("vnfModelVersionId") String vnfModelVersionId,
-            @QueryParam("pnfModelVersionId") String pnfModelVersionId, @PathParam("version") String version)
+            @QueryParam("pnfModelVersionId") String pnfModelVersionId,
+            @QueryParam("resourceTarget") String resourceTarget, @PathParam("version") String version)
             throws Exception {
         String apiVersion = version.substring(1);
 
         List<Workflow> workflows = new ArrayList<>();
-        if (vnfModelVersionId == null && pnfModelVersionId == null) {
+        if (vnfModelVersionId == null && pnfModelVersionId == null && resourceTarget == null) {
             workflows.addAll(queryWorkflowSpecificationsForAll());
         } else {
             // 1. query workflow specifications for given vnfModelVersionId if need.
@@ -106,6 +107,16 @@ public class WorkflowSpecificationsHandler {
                     workflows.addAll(pnfWorkflows);
                 }
             }
+
+            // 3. query workflow specifications for given resourceTarget
+            if (resourceTarget != null) {
+                List<Workflow> workflowsForResourceTarget = queryWorkflowsForResourceTarget(resourceTarget);
+                logger.debug(
+                        "Retrieved " + workflowsForResourceTarget.size() + " workflows for given resource target.");
+                if (workflowsForResourceTarget.size() > 0) {
+                    workflows.addAll(workflowsForResourceTarget);
+                }
+            }
         }
 
         // Deduplication
@@ -119,11 +130,16 @@ public class WorkflowSpecificationsHandler {
                 apiVersion);
     }
 
+    /**
+     * @deprecated As of G release, workflows for all resource types (pnf,vnf,service) can be fetched using
+     *             /workflowSpecifications/{version:[vV]1}/workflows?resourceTarget={resourceType} API
+     */
     @Path("/{version:[vV]1}/pnfWorkflows")
     @GET
     @Operation(description = "Finds pnf workflow specifications", responses = @ApiResponse(
             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
     @Transactional
+    @Deprecated
     public Response getWorkflowsSpecForPnf(@PathParam("version") String version) throws Exception {
 
         final String pnf_resource = "pnf";
@@ -132,7 +148,7 @@ public class WorkflowSpecificationsHandler {
         ObjectMapper mapper = new ObjectMapper();
         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 
-        List<Workflow> workflows = catalogDbClient.findWorkflowByResourceTarget(pnf_resource);
+        List<Workflow> workflows = queryWorkflowsForResourceTarget(pnf_resource);
 
         Optional<String> optional = getResponseByWorkflowSpec(workflows);
         return builder.buildResponse(HttpStatus.SC_OK, "", optional.isPresent() ? optional.get() : EMPTY_BODY,
@@ -296,4 +312,11 @@ public class WorkflowSpecificationsHandler {
         List<Workflow> workflows = catalogDbClient.findWorkflowByPnfModelUUID(pnfModelVersionId);
         return workflows;
     }
+
+    private List<Workflow> queryWorkflowsForResourceTarget(String resourceTarget) {
+        List<Workflow> workflows = catalogDbClient.findWorkflowByResourceTarget(resourceTarget);
+        return workflows;
+    }
+
+
 }
index 4ab88f4..1fa71ce 100644 (file)
@@ -58,6 +58,9 @@ public class WorkflowSpecificationsHandlerTest extends BaseTest {
     @Autowired
     WorkflowSpecificationsHandler workflowSpecificationsHandler;
 
+    @Autowired
+    ObjectMapper mapper;
+
     @Value("${wiremock.server.port}")
     private String wiremockPort;
 
@@ -152,7 +155,6 @@ public class WorkflowSpecificationsHandlerTest extends BaseTest {
 
         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
 
-        ObjectMapper mapper = new ObjectMapper();
         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 
         WorkflowSpecifications expectedResponse = mapper.readValue(
@@ -306,7 +308,6 @@ public class WorkflowSpecificationsHandlerTest extends BaseTest {
 
         WorkflowSpecifications workflowSpecifications =
                 workflowSpecificationsHandler.mapWorkflowsToWorkflowSpecifications(workflows);
-        ObjectMapper mapper = new ObjectMapper();
 
         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
         String workflowSpecificationsJson = mapper.writeValueAsString(workflowSpecifications);
@@ -349,7 +350,6 @@ public class WorkflowSpecificationsHandlerTest extends BaseTest {
 
         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
 
-        ObjectMapper mapper = new ObjectMapper();
         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 
         WorkflowSpecifications expectedResponse = mapper.readValue(
@@ -366,6 +366,52 @@ public class WorkflowSpecificationsHandlerTest extends BaseTest {
         assertEquals("1.0.0", response.getHeaders().get("X-LatestVersion").get(0));
     }
 
+    @Test
+    public void queryWorkflowSpecificationsByResourceTarget_Test_Success() throws JSONException, IOException {
+
+        String URL_PATH = basePath + "/v1/workflows";
+        HttpHeaders headers = new HttpHeaders();
+        headers.set("Accept", MediaType.APPLICATION_JSON);
+        headers.set("Content-Type", MediaType.APPLICATION_JSON);
+        HttpEntity<String> entity = new HttpEntity<String>(null, headers);
+        String WORKFLOW_QUERY = "/workflow/search/findByResourceTarget[?]resourceTarget=service";
+        String WORKFLOW_SPEC_QUERY = "/workflow/5/workflowActivitySpecSequence";
+        String JSON_FILE_PATH = "src/test/resources/__files/catalogdb/WorkflowSpecificationsForService.json";
+        String MOCK_RESP_FILE = "WorkflowSpecificationsForServiceWorkflows_Response.json";
+        String MOCK_RESP_SPEC_FILE = "Empty_workflowActivitySpecSequence_Response.json";
+
+        wireMockServer.stubFor(get(urlMatching(WORKFLOW_QUERY))
+                .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                        .withBody(getWiremockResponseForCatalogdb(MOCK_RESP_FILE))
+                        .withStatus(org.apache.http.HttpStatus.SC_OK)));
+
+        wireMockServer.stubFor(get(urlMatching(WORKFLOW_SPEC_QUERY))
+                .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                        .withBody(getWiremockResponseForCatalogdb(MOCK_RESP_SPEC_FILE))
+                        .withStatus(org.apache.http.HttpStatus.SC_OK)));
+
+        UriComponentsBuilder builder =
+                UriComponentsBuilder.fromHttpUrl(createURLWithPort(URL_PATH)).queryParam("resourceTarget", "service");
+
+        ResponseEntity<String> response =
+                restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
+
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
+
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+
+        WorkflowSpecifications expectedResponse = mapper
+                .readValue(new String(Files.readAllBytes(Paths.get(JSON_FILE_PATH))), WorkflowSpecifications.class);
+        WorkflowSpecifications realResponse = mapper.readValue(response.getBody(), WorkflowSpecifications.class);
+
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
+        assertThat(expectedResponse, sameBeanAs(realResponse));
+        assertEquals("application/json", response.getHeaders().get(HttpHeaders.CONTENT_TYPE).get(0));
+        assertEquals("0", response.getHeaders().get("X-MinorVersion").get(0));
+        assertEquals("0", response.getHeaders().get("X-PatchVersion").get(0));
+        assertEquals("1.0.0", response.getHeaders().get("X-LatestVersion").get(0));
+    }
+
     @Test
     public void testWorkflowSpecificationsForPnf_Success() throws JSONException, IOException {
 
@@ -397,7 +443,6 @@ public class WorkflowSpecificationsHandlerTest extends BaseTest {
 
         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
 
-        ObjectMapper mapper = new ObjectMapper();
         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 
         WorkflowSpecifications expectedResponse = mapper.readValue(
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/WorkflowSpecificationsForService.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/WorkflowSpecificationsForService.json
new file mode 100644 (file)
index 0000000..aaaad17
--- /dev/null
@@ -0,0 +1,20 @@
+{
+  "workflowSpecificationList": [
+    {
+      "workflowSpecification": {
+        "artifactInfo": {
+          "artifactType": "workflow",
+          "artifactUuid": "a1fe8726-66d5-3e7f-2212-7e5h662e9255",
+          "artifactName": "DummyServiceWorkflow",
+          "artifactVersion": "1.0",
+          "artifactDescription": "Dummy Service Workflow to test custom Service workflow",
+          "workflowName": "Dummy Service Workflow",
+          "operationName": "DummyServiceWorkflow",
+          "workflowSource": "native",
+          "workflowResourceTarget": "service"
+        },
+        "workflowInputParameters": []
+      }
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/WorkflowSpecificationsForServiceWorkflows_Response.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/catalogdb/WorkflowSpecificationsForServiceWorkflows_Response.json
new file mode 100644 (file)
index 0000000..9a836e0
--- /dev/null
@@ -0,0 +1,41 @@
+{
+  "_embedded": {
+    "workflow": [
+      {
+        "artifactChecksum": "MANUAL RECORD",
+        "artifactName": "DummyServiceWorkflow",
+        "artifactUUID": "a1fe8726-66d5-3e7f-2212-7e5h662e9255",
+        "body": null,
+        "created": "2020-06-29T08:28:15.000+0000",
+        "description": "Dummy Service Workflow to test custom Service workflow",
+        "id": 4,
+        "name": "Dummy Service Workflow",
+        "operationName": "DummyServiceWorkflow",
+        "pnfResourceWorkflow": null,
+        "resourceTarget": "service",
+        "source": "native",
+        "timeoutMinutes": null,
+        "version": 1.0,
+        "_links": {
+          "self": {
+            "href": "http://localhost:8090/workflow/search/findByResourceTarget?resourceTarget=service"
+          },
+          "workflow": {
+            "href": "http://localhost:8090/workflow/5"
+          },
+          "workflowActivitySpecSequence": {
+            "href": "http://localhost:8090/workflow/5/workflowActivitySpecSequence"
+          }
+        }
+      }
+    ]
+  },
+  "_links": {
+    "self": {
+      "href": "http://localhost:8090/workflow/search/findByResourceTarget?resourceTarget=service"
+    },
+    "workflowActivitySpecSequence": {
+      "href": "http://localhost:8090/workflow/5/workflowActivitySpecSequence"
+    }
+  }
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index ae743ac..db09718 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -29,6 +29,8 @@
     <module>mso-api-handlers</module>
     <module>adapters</module>
     <module>asdc-controller</module>
+    <module>so-optimization-clients</module>
+    <module>so-sdn-clients</module>
     <module>bpmn</module>
     <module>cloudify-client</module>
     <module>cxf-logging</module>
diff --git a/so-optimization-clients/pom.xml b/so-optimization-clients/pom.xml
new file mode 100644 (file)
index 0000000..a15314d
--- /dev/null
@@ -0,0 +1,89 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <groupId>org.onap.so</groupId>
+    <artifactId>so</artifactId>
+    <version>1.6.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>so-optimization-clients</artifactId>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <goals>
+              <goal>test</goal>
+            </goals>
+            <configuration>
+              <includes>
+                <include>**/IntegrationTestSuite.java</include>
+              </includes>
+            </configuration>
+          </execution>
+        </executions>
+        <configuration>
+          <parallel>suites</parallel>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <!-- Import dependency management from Spring Boot -->
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-dependencies</artifactId>
+        <version>${springboot.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+  <dependencies>
+    <dependency>
+      <groupId>org.camunda.bpm.springboot</groupId>
+      <artifactId>camunda-bpm-spring-boot-starter</artifactId>
+      <version>${camunda.springboot.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.cloud</groupId>
+      <artifactId>spring-cloud-contract-wiremock</artifactId>
+      <version>1.2.4.RELEASE</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-test</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-configuration-processor</artifactId>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.so</groupId>
+      <artifactId>common</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>ch.vorburger.mariaDB4j</groupId>
+      <artifactId>mariaDB4j</artifactId>
+      <version>2.2.3</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.mariadb.jdbc</groupId>
+      <artifactId>mariadb-java-client</artifactId>
+    </dependency>
+  </dependencies>
+</project>
@@ -21,7 +21,6 @@
 package org.onap.so.client.oof;
 
 
-import org.camunda.bpm.engine.delegate.BpmnError;
 import org.onap.so.client.BaseClient;
 import org.onap.so.client.exception.BadResponseException;
 import org.onap.so.client.oof.beans.OofProperties;
@@ -27,7 +27,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 import java.util.LinkedHashMap;
-import static org.apache.commons.lang.StringUtils.isNotBlank;
+import static org.apache.commons.lang3.StringUtils.isNotBlank;
 
 
 @Component
 package org.onap.so.client.sniro;
 
 import java.util.LinkedHashMap;
-import org.camunda.bpm.engine.delegate.BpmnError;
-import org.onap.so.bpmn.core.UrnPropertiesReader;
 import org.onap.so.client.BaseClient;
 import org.onap.so.client.exception.BadResponseException;
+import org.onap.so.client.sniro.beans.ConductorProperties;
 import org.onap.so.client.sniro.beans.ManagerProperties;
 import org.onap.so.client.sniro.beans.SniroConductorRequest;
 import org.onap.so.client.sniro.beans.SniroManagerRequest;
@@ -57,7 +56,6 @@ public class SniroClient {
      * @param homingRequest
      * @return
      * @throws BadResponseException
-     * @throws BpmnError
      */
     public void postDemands(SniroManagerRequest homingRequest) throws BadResponseException {
         logger.trace("Started Sniro Client Post Demands");
@@ -95,14 +93,13 @@ public class SniroClient {
      */
     public void postRelease(SniroConductorRequest releaseRequest) throws BadResponseException {
         logger.trace("Started Sniro Client Post Release");
-        String url = UrnPropertiesReader.getVariable("sniro.conductor.host")
-                + UrnPropertiesReader.getVariable("sniro.conductor.uri");
+        String url = ConductorProperties.getHost() + ConductorProperties.getUri();
         logger.debug("Post release url: {}", url);
         logger.debug("Post release payload: {}", releaseRequest.toJsonString());
 
         HttpHeaders header = new HttpHeaders();
         header.setContentType(MediaType.APPLICATION_JSON);
-        header.set("Authorization", UrnPropertiesReader.getVariable("sniro.conductor.headers.auth"));
+        header.set("Authorization", ConductorProperties.getAuth());
         BaseClient<String, LinkedHashMap<String, Object>> baseClient = new BaseClient<>();
 
         baseClient.setTargetUrl(url);
@@ -23,7 +23,7 @@
 package org.onap.so.client.sniro;
 
 
-import static org.apache.commons.lang.StringUtils.*;
+import static org.apache.commons.lang3.StringUtils.*;
 import java.util.LinkedHashMap;
 import org.json.JSONObject;
 import org.onap.so.client.exception.BadResponseException;
@@ -22,7 +22,6 @@ package org.onap.so.client.sniro.beans;
 
 import java.io.Serializable;
 import java.util.List;
-import org.onap.so.bpmn.servicedecomposition.homingobjects.CandidateType;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
 public class Candidate implements Serializable {
diff --git a/so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/CandidateType.java b/so-optimization-clients/src/main/java/org/onap/so/client/sniro/beans/CandidateType.java
new file mode 100644 (file)
index 0000000..3ef8918
--- /dev/null
@@ -0,0 +1,41 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.client.sniro.beans;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public enum CandidateType {
+
+
+    SERVICE_INSTANCE_ID("serviceInstanceId"), CLOUD_REGION_ID("cloudRegionId"), VNF_ID("vnfId"), VNF_NAME("vnfName");
+
+    private final String name;
+
+    private CandidateType(String name) {
+        this.name = name;
+    }
+
+    @Override
+    @JsonValue
+    public String toString() {
+        return name;
+    }
+}
 
 package org.onap.so.client.sniro.beans;
 
-import java.util.Map;
-import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
 
+@Component
 @Configuration
-@ConfigurationProperties(prefix = "sniro.conductor")
 public class ConductorProperties {
 
-    private String host;
-    private String uri;
+    private static Environment environment;
 
-    private Map<String, String> headers;
-
-
-    public String getHost() {
-        return host;
-    }
-
-    public void setHost(String host) {
-        this.host = host;
+    @Autowired
+    public void setEnvironment(Environment environment) {
+        this.environment = environment;
     }
 
-    public String getUri() {
-        return uri;
+    public static String getHost() {
+        return getProperty("sniro.conductor.host");
     }
 
-    public void setUri(String uri) {
-        this.uri = uri;
+    public static String getUri() {
+        return getProperty("sniro.conductor.uri");
     }
 
-    public Map<String, String> getHeaders() {
-        return headers;
+    public static String getAuth() {
+        return getProperty("sniro.conductor.headers.auth");
     }
 
-    public void setHeaders(Map<String, String> headers) {
-        this.headers = headers;
+    private static String getProperty(String variableName) {
+        if (environment != null) {
+            return environment.getProperty(variableName);
+        } else {
+            return null;
+        }
     }
 
 
diff --git a/so-optimization-clients/src/test/java/org/onap/so/BaseIntegrationTest.java b/so-optimization-clients/src/test/java/org/onap/so/BaseIntegrationTest.java
new file mode 100644 (file)
index 0000000..7dccfd3
--- /dev/null
@@ -0,0 +1,63 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.so;
+
+import java.io.IOException;
+import java.io.InputStream;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.onap.so.client.oof.OofClient;
+import org.onap.so.client.sniro.SniroClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.SpyBean;
+import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+import com.github.tomakehurst.wiremock.WireMockServer;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = TestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@ActiveProfiles("test")
+@ContextConfiguration
+@AutoConfigureWireMock(port = 0)
+public abstract class BaseIntegrationTest {
+
+    @Value("${wiremock.server.port}")
+    protected String wireMockPort;
+
+    @SpyBean
+    protected SniroClient sniroClient;
+
+    @SpyBean
+    protected OofClient oofClient;
+
+    @Autowired
+    protected WireMockServer wireMockServer;
+
+    @Before
+    public void baseTestBefore() {
+        wireMockServer.resetAll();
+    }
+}
+
+
diff --git a/so-optimization-clients/src/test/java/org/onap/so/EmbeddedMariaDbConfig.java b/so-optimization-clients/src/test/java/org/onap/so/EmbeddedMariaDbConfig.java
new file mode 100644 (file)
index 0000000..62d9ece
--- /dev/null
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so;
+
+import ch.vorburger.exec.ManagedProcessException;
+import ch.vorburger.mariadb4j.DBConfigurationBuilder;
+import ch.vorburger.mariadb4j.springframework.MariaDB4jSpringService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
+import javax.sql.DataSource;
+
+@Configuration
+@Profile({"test"})
+public class EmbeddedMariaDbConfig {
+
+    @Bean
+    MariaDB4jSpringService mariaDB4jSpringService() {
+        MariaDB4jSpringService service = new MariaDB4jSpringService();
+
+
+        service.getConfiguration().addArg("--lower_case_table_names=1");
+        return service;
+    }
+
+    @Bean
+    DataSource dataSource(MariaDB4jSpringService mariaDB4jSpringService,
+            @Value("${mariaDB4j.databaseName}") String databaseName,
+            @Value("${spring.datasource.username}") String datasourceUsername,
+            @Value("${spring.datasource.password}") String datasourcePassword,
+            @Value("${spring.datasource.driver-class-name}") String datasourceDriver) throws ManagedProcessException {
+        // Create our database with default root user and no password
+        mariaDB4jSpringService.getDB().createDB(databaseName);
+
+        DBConfigurationBuilder config = mariaDB4jSpringService.getConfiguration();
+
+        return DataSourceBuilder.create().username(datasourceUsername).password(datasourcePassword)
+                .url(config.getURL(databaseName)).driverClassName(datasourceDriver).build();
+    }
+}
diff --git a/so-optimization-clients/src/test/java/org/onap/so/IntegrationTestSuite.java b/so-optimization-clients/src/test/java/org/onap/so/IntegrationTestSuite.java
new file mode 100644 (file)
index 0000000..50bbc18
--- /dev/null
@@ -0,0 +1,31 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so;
+
+import org.junit.runner.RunWith;
+import com.googlecode.junittoolbox.SuiteClasses;
+import com.googlecode.junittoolbox.WildcardPatternSuite;
+
+@RunWith(WildcardPatternSuite.class)
+@SuiteClasses({"**/*IT.class"})
+public class IntegrationTestSuite {
+
+}
diff --git a/so-optimization-clients/src/test/java/org/onap/so/TestApplication.java b/so-optimization-clients/src/test/java/org/onap/so/TestApplication.java
new file mode 100644 (file)
index 0000000..fe965b4
--- /dev/null
@@ -0,0 +1,43 @@
+package org.onap.so;
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.ComponentScan.Filter;
+import org.springframework.context.annotation.FilterType;
+import org.springframework.context.annotation.Profile;
+
+@SpringBootApplication
+@Profile("test")
+@ComponentScan(basePackages = {"org.onap.so"},
+        excludeFilters = {@Filter(type = FilterType.ANNOTATION, classes = SpringBootApplication.class)})
+public class TestApplication {
+    public static void main(String... args) {
+        SpringApplication.run(TestApplication.class, args);
+        System.getProperties().setProperty("mso.db", "MARIADB");
+        System.getProperties().setProperty("server.name", "Springboot");
+
+
+    }
+}
@@ -23,7 +23,8 @@ package org.onap.so.client.oof;
 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
 import static com.github.tomakehurst.wiremock.client.WireMock.post;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
-import static org.junit.Assert.assertEquals;
+import java.util.ArrayList;
+import java.util.List;
 import org.junit.Test;
 import org.onap.so.BaseIntegrationTest;
 import org.onap.so.client.exception.BadResponseException;
@@ -40,8 +41,6 @@ import org.onap.so.client.oof.beans.SubscriberInfo;
 import org.skyscreamer.jsonassert.JSONAssert;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.fasterxml.jackson.core.JsonProcessingException;
-import java.util.ArrayList;
-import java.util.List;
 
 
 public class OofClientTestIT extends BaseIntegrationTest {
@@ -150,7 +149,7 @@ public class OofClientTestIT extends BaseIntegrationTest {
                 + "        \"modelName\" : \"modelName\",\n" + "        \"modelVersion\" : \"version\",\n"
                 + "        \"modelCustomizationName\" : \"modelCustomizationName\"\n" + "      }\n" + "    } ]\n"
                 + "  },\n" + "  \"licenseInfo\" : { \n" + "    \"licenseDemands\" : [ ]\n" + "}\n" + "}",
-                oofRequestOutput, false);
+                oofRequestOutput.replace("\r\n", "\n"), false);
     }
 
     @Test
diff --git a/so-optimization-clients/src/test/resources/application-test.yaml b/so-optimization-clients/src/test/resources/application-test.yaml
new file mode 100644 (file)
index 0000000..75bd982
--- /dev/null
@@ -0,0 +1,231 @@
+aai:
+  auth: 5A1272FE739BECA4D4374A86B25C021DFE6745E3BB7BE6836BF64A6059B8220E586C21FD7567AF41DB42571EB7
+  endpoint: http://localhost:${wiremock.server.port}
+  pnfEntryNotificationTimeout: P14D
+appc:
+  client:
+    key: iaEMAfjsVsZnraBP
+    response:
+      timeout: '120000'
+    secret: wcivUjsjXzmGFBfxMmyJu9dz
+    poolMembers: localhost:3904
+    service: ueb
+    topic:
+      read:
+        name: APPC-TEST-AMDOCS2
+        timeout: '120000'
+      write: APPC-TEST-AMDOCS1-DEV3
+      sdnc:
+        read: SDNC-LCM-READ
+        write: SDNC-LCM-WRITE
+log:
+  debug:
+    CompleteMsoProcess: 'true'
+    CreateNetworkInstanceInfra: 'true'
+    CreateServiceInstanceInfra: 'true'
+    DeleteNetworkInstanceInfra: 'true'
+    FalloutHandler: 'true'
+    UpdateNetworkInstanceInfra: 'true'
+    VnfAdapterRestV1: 'true'
+    sdncAdapter: 'true'
+    vnfAdapterCreateV1: 'true'
+    vnfAdapterRestV1: 'true'
+pnf:
+  dmaap:
+    host: hostTest
+    port: 1234
+    protocol: http
+    uriPathPrefix: events
+    topicName: pnfReady
+    consumerGroup: consumerGroup
+    consumerId: consumerId
+    topicListenerDelayInSeconds: 5
+mso:
+  naming:
+    endpoint: http://localhost:${wiremock.server.port}/web/service/v1/genNetworkElementName
+    auth: Basic YnBlbDptc28tZGItMTUwNyE= 
+  adapters:
+    requestDb:
+      auth: Basic YnBlbDptc28tZGItMTUwNyE=
+      endpoint: http://localhost:8081
+    completemsoprocess:
+      endpoint: http://localhost:${wiremock.server.port}/CompleteMsoProcess
+    db:
+      auth: 5E12ACACBD552A415E081E29F2C4772F9835792A51C766CCFDD7433DB5220B59969CB2798C
+      endpoint: http://localhost:${wiremock.server.port}/dbadapters/RequestsDbAdapter
+      spring:
+        endpoint: http://localhost:${wiremock.server.port}
+    network:
+      endpoint: http://localhost:${wiremock.server.port}/networks/NetworkAdapter
+      rest:
+        endpoint: http://localhost:${wiremock.server.port}/networks/rest/v1/networks
+    openecomp:
+      db:
+        endpoint: http://localhost:${wiremock.server.port}/dbadapters/RequestsDbAdapter
+    po:
+      auth: 5E12ACACBD552A415E081E29F2C4772F9835792A51C766CCFDD7433DB5220B59969CB2798C
+      password: 3141634BF7E070AA289CF2892C986C0B
+    sdnc:
+      endpoint: http://localhost:${wiremock.server.port}/SDNCAdapter
+      rest:
+        endpoint: http://localhost:${wiremock.server.port}/SDNCAdapter/v1/sdnc
+      timeout: PT60S
+    tenant:
+      endpoint: http://localhost:${wiremock.server.port}/tenantAdapterMock
+    vnf:
+      endpoint: http://localhost:${wiremock.server.port}/vnfs/VnfAdapter
+      rest:
+        endpoint: http://localhost:${wiremock.server.port}/services/rest/v1/vnfs
+    volume-groups:
+      rest:
+        endpoint: http://localhost:${wiremock.server.port}/services/rest/v1/volume-groups
+    vnf-async:
+      endpoint: http://localhost:${wiremock.server.port}/vnfs/VnfAdapterAsync
+    workflow:
+      message:
+        endpoint: http://localhost:${wiremock.server.port}/workflows/messages/message
+
+  async:
+      core-pool-size: 50
+      max-pool-size: 50
+      queue-capacity: 500
+
+  bpmn:
+    optimisticlockingexception:
+      retrycount: '3'
+    cloudRegionIdsToSkipAddingVnfEdgesTo: test25Region1,test25Region2,test25Region99
+  callbackRetryAttempts: '5'
+  catalog:
+    db:
+      endpoint: http://localhost:${wiremock.server.port}/
+      spring:
+        endpoint: http://localhost:${wiremock.server.port}  
+  correlation:
+        timeout: 60
+  db:
+    auth: Basic YnBlbDptc28tZGItMTUwNyE=
+  default:
+    adapter:
+      namespace: http://org.onap.so
+  healthcheck:
+    log:
+      debug: 'false'
+  infra:
+    customer:
+      id: testCustIdInfra
+  logPath: logs
+  msoKey: 07a7159d3bf51a0e53be7a8f89699be7
+  po:
+    timeout: PT60S
+  request:
+    db:
+      endpoint: http://localhost:${wiremock.server.port}/
+  rollback: 'true' 
+  site-name: localDevEnv
+  workflow:    
+    default:
+      aai:
+        cloud-region:
+          version: '9'
+        generic-vnf:
+          version: '9'
+    global:
+      default:
+        aai:
+          namespace: http://org.openecomp.aai.inventory/
+          version: '8'
+    message:
+      endpoint: http://localhost:${wiremock.server.port}/mso/WorkflowMesssage
+    notification:
+      name: GenericNotificationService
+    sdncadapter:
+      callback: http://localhost:${wiremock.server.port}/mso/SDNCAdapterCallbackService
+    vnfadapter:
+      create:
+        callback: http://localhost:${wiremock.server.port}/mso/vnfAdapterNotify
+      delete:
+        callback: http://localhost:${wiremock.server.port}/mso/vnfAdapterNotify
+      query:
+        callback: http://localhost:${wiremock.server.port}/mso/services/VNFAdapterQuerCallbackV1
+      rollback:
+        callback: http://localhost:${wiremock.server.port}/mso/vnfAdapterNotify
+  global:
+    dmaap:
+      username: dmaapUsername
+      password: dmaapPassword
+      host: http://localhost:28090
+      publisher:
+        topic: com.att.mso.asyncStatusUpdate
+policy:
+  auth: Basic dGVzdHBkcDphbHBoYTEyMw==
+  client:
+    auth: Basic bTAzNzQzOnBvbGljeVIwY2sk
+  endpoint: https://localhost:8081/pdp/api/
+  environment: TEST
+sdnc:
+  auth: Basic YWRtaW46YWRtaW4=
+  host: http://localhost:${wiremock.server.port}
+  path: /restconf/operations/GENERIC-RESOURCE-API
+sniro:
+  conductor:
+    enabled: true
+    host: http://localhost:${wiremock.server.port}
+    uri: /v1/release-orders
+    headers.auth: Basic dGVzdDp0ZXN0cHdk
+  manager:
+    timeout: PT30M
+    host: http://localhost:${wiremock.server.port}
+    uri.v1: /sniro/api/v2/placement
+    uri.v2: /sniro/api/placement/v2
+    headers.auth: Basic dGVzdDp0ZXN0cHdk
+    headers.patchVersion: 1
+    headers.minorVersion: 1
+    headers.latestVersion: 2
+oof:
+  timeout: PT30M
+  host: http://localhost:${wiremock.server.port}
+  uri: /api/oof/v1/placement
+  headers.auth: Basic dGVzdDp0ZXN0cHdk
+org:
+  onap:
+    so:
+      cloud-owner: CloudOwner
+spring:
+  datasource:
+    jdbc-url: jdbc:mariadb://localhost:3307/camundabpmn
+    username: root
+    password: password
+    driver-class-name: org.mariadb.jdbc.Driver
+    initialization-mode: always
+  jpa:
+    generate-ddl: false
+    show-sql: false
+    hibernate:
+      ddl-auto: none
+      naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
+      enable-lazy-load-no-trans: true
+    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
+sdno:
+  health-check:
+    dmaap:
+      password: password
+      publisher:
+        topic: sdno.test-health-diagnostic-v02
+      subscriber:
+        topic: sdno.test-health-diagnostic-v02
+      username: username
+mariaDB4j:
+  dataDir:
+  port: 3307
+  databaseName: camundabpmn
+camunda:
+  bpm:
+    metrics:
+      enabled: false
+      db-reporter-activate: false
+# CDSProcessingClient
+cds:
+  endpoint: localhost
+  port: 11012
+  auth: Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==
+  timeout: 60
diff --git a/so-optimization-clients/src/test/resources/schema.sql b/so-optimization-clients/src/test/resources/schema.sql
new file mode 100644 (file)
index 0000000..5ae6a2d
--- /dev/null
@@ -0,0 +1,1195 @@
+
+USE `camundabpmn`;
+
+
+create table ACT_GE_PROPERTY (
+    NAME_ varchar(64),
+    VALUE_ varchar(300),
+    REV_ integer,
+    primary key (NAME_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+
+create table ACT_GE_BYTEARRAY (
+    ID_ varchar(64),
+    REV_ integer,
+    NAME_ varchar(255),
+    DEPLOYMENT_ID_ varchar(64),
+    BYTES_ LONGBLOB,
+    GENERATED_ TINYINT,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RE_DEPLOYMENT (
+    ID_ varchar(64),
+    NAME_ varchar(255),
+    DEPLOY_TIME_ timestamp(3),
+    SOURCE_ varchar(255),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_EXECUTION (
+    ID_ varchar(64),
+    REV_ integer,
+    PROC_INST_ID_ varchar(64),
+    BUSINESS_KEY_ varchar(255),
+    PARENT_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    SUPER_EXEC_ varchar(64),
+    SUPER_CASE_EXEC_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    ACT_ID_ varchar(255),
+    ACT_INST_ID_ varchar(64),
+    IS_ACTIVE_ TINYINT,
+    IS_CONCURRENT_ TINYINT,
+    IS_SCOPE_ TINYINT,
+    IS_EVENT_SCOPE_ TINYINT,
+    SUSPENSION_STATE_ integer,
+    CACHED_ENT_STATE_ integer,
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_JOB (
+    ID_ varchar(64) NOT NULL,
+    REV_ integer,
+    TYPE_ varchar(255) NOT NULL,
+    LOCK_EXP_TIME_ timestamp(3) NULL,
+    LOCK_OWNER_ varchar(255),
+    EXCLUSIVE_ boolean,
+    EXECUTION_ID_ varchar(64),
+    PROCESS_INSTANCE_ID_ varchar(64),
+    PROCESS_DEF_ID_ varchar(64),
+    PROCESS_DEF_KEY_ varchar(255),
+    RETRIES_ integer,
+    EXCEPTION_STACK_ID_ varchar(64),
+    EXCEPTION_MSG_ varchar(4000),
+    DUEDATE_ timestamp(3) NULL,
+    REPEAT_ varchar(255),
+    HANDLER_TYPE_ varchar(255),
+    HANDLER_CFG_ varchar(4000),
+    DEPLOYMENT_ID_ varchar(64),
+    SUSPENSION_STATE_ integer NOT NULL DEFAULT 1,
+    JOB_DEF_ID_ varchar(64),
+    PRIORITY_ bigint NOT NULL DEFAULT 0,
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_JOBDEF (
+    ID_ varchar(64) NOT NULL,
+    REV_ integer,
+    PROC_DEF_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    ACT_ID_ varchar(255),
+    JOB_TYPE_ varchar(255) NOT NULL,
+    JOB_CONFIGURATION_ varchar(255),
+    SUSPENSION_STATE_ integer,
+    JOB_PRIORITY_ bigint,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RE_PROCDEF (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    CATEGORY_ varchar(255),
+    NAME_ varchar(255),
+    KEY_ varchar(255) not null,
+    VERSION_ integer not null,
+    DEPLOYMENT_ID_ varchar(64),
+    RESOURCE_NAME_ varchar(4000),
+    DGRM_RESOURCE_NAME_ varchar(4000),
+    HAS_START_FORM_KEY_ TINYINT,
+    SUSPENSION_STATE_ integer,
+    TENANT_ID_ varchar(64),
+    VERSION_TAG_ varchar(64),
+    HISTORY_TTL_ integer,
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_TASK (
+    ID_ varchar(64),
+    REV_ integer,
+    EXECUTION_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_DEF_ID_ varchar(64),
+    NAME_ varchar(255),
+    PARENT_TASK_ID_ varchar(64),
+    DESCRIPTION_ varchar(4000),
+    TASK_DEF_KEY_ varchar(255),
+    OWNER_ varchar(255),
+    ASSIGNEE_ varchar(255),
+    DELEGATION_ varchar(64),
+    PRIORITY_ integer,
+    CREATE_TIME_ timestamp(3),
+    DUE_DATE_ datetime(3),
+    FOLLOW_UP_DATE_ datetime(3),
+    SUSPENSION_STATE_ integer,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_IDENTITYLINK (
+    ID_ varchar(64),
+    REV_ integer,
+    GROUP_ID_ varchar(255),
+    TYPE_ varchar(255),
+    USER_ID_ varchar(255),
+    TASK_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_VARIABLE (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    TYPE_ varchar(255) not null,
+    NAME_ varchar(255) not null,
+    EXECUTION_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    TASK_ID_ varchar(64),
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double,
+    LONG_ bigint,
+    TEXT_ LONGBLOB,
+    TEXT2_ LONGBLOB,
+    VAR_SCOPE_ varchar(64) not null,
+    SEQUENCE_COUNTER_ bigint,
+    IS_CONCURRENT_LOCAL_ TINYINT,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_EVENT_SUBSCR (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    EVENT_TYPE_ varchar(255) not null,
+    EVENT_NAME_ varchar(255),
+    EXECUTION_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    ACTIVITY_ID_ varchar(255),
+    CONFIGURATION_ varchar(255),
+    CREATED_ timestamp(3) not null,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_INCIDENT (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  INCIDENT_TIMESTAMP_ timestamp(3) not null,
+  INCIDENT_MSG_ varchar(4000),
+  INCIDENT_TYPE_ varchar(255) not null,
+  EXECUTION_ID_ varchar(64),
+  ACTIVITY_ID_ varchar(255),
+  PROC_INST_ID_ varchar(64),
+  PROC_DEF_ID_ varchar(64),
+  CAUSE_INCIDENT_ID_ varchar(64),
+  ROOT_CAUSE_INCIDENT_ID_ varchar(64),
+  CONFIGURATION_ varchar(255),
+  TENANT_ID_ varchar(64),
+  JOB_DEF_ID_ varchar(64),
+  primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_AUTHORIZATION (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  TYPE_ integer not null,
+  GROUP_ID_ varchar(255),
+  USER_ID_ varchar(255),
+  RESOURCE_TYPE_ integer not null,
+  RESOURCE_ID_ varchar(255),
+  PERMS_ integer,
+  primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_FILTER (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  RESOURCE_TYPE_ varchar(255) not null,
+  NAME_ varchar(255) not null,
+  OWNER_ varchar(255),
+  QUERY_ LONGTEXT not null,
+  PROPERTIES_ LONGTEXT,
+  primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_METER_LOG (
+  ID_ varchar(64) not null,
+  NAME_ varchar(64) not null,
+  REPORTER_ varchar(255),
+  VALUE_ bigint,
+  TIMESTAMP_ timestamp(3),
+  MILLISECONDS_ bigint DEFAULT 0,
+  primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_EXT_TASK (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  WORKER_ID_ varchar(255),
+  TOPIC_NAME_ varchar(255),
+  RETRIES_ integer,
+  ERROR_MSG_ varchar(4000),
+  ERROR_DETAILS_ID_ varchar(64),
+  LOCK_EXP_TIME_ timestamp(3) NULL,
+  SUSPENSION_STATE_ integer,
+  EXECUTION_ID_ varchar(64),
+  PROC_INST_ID_ varchar(64),
+  PROC_DEF_ID_ varchar(64),
+  PROC_DEF_KEY_ varchar(255),
+  ACT_ID_ varchar(255),
+  ACT_INST_ID_ varchar(64),
+  TENANT_ID_ varchar(64),
+  PRIORITY_ bigint NOT NULL DEFAULT 0,
+  primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_BATCH (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  TYPE_ varchar(255),
+  TOTAL_JOBS_ integer,
+  JOBS_CREATED_ integer,
+  JOBS_PER_SEED_ integer,
+  INVOCATIONS_PER_JOB_ integer,
+  SEED_JOB_DEF_ID_ varchar(64),
+  BATCH_JOB_DEF_ID_ varchar(64),
+  MONITOR_JOB_DEF_ID_ varchar(64),
+  SUSPENSION_STATE_ integer,
+  CONFIGURATION_ varchar(255),
+  TENANT_ID_ varchar(64),
+  primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create index ACT_IDX_EXEC_BUSKEY on ACT_RU_EXECUTION(BUSINESS_KEY_);
+create index ACT_IDX_EXEC_TENANT_ID on ACT_RU_EXECUTION(TENANT_ID_);
+create index ACT_IDX_TASK_CREATE on ACT_RU_TASK(CREATE_TIME_);
+create index ACT_IDX_TASK_ASSIGNEE on ACT_RU_TASK(ASSIGNEE_);
+create index ACT_IDX_TASK_TENANT_ID on ACT_RU_TASK(TENANT_ID_);
+create index ACT_IDX_IDENT_LNK_USER on ACT_RU_IDENTITYLINK(USER_ID_);
+create index ACT_IDX_IDENT_LNK_GROUP on ACT_RU_IDENTITYLINK(GROUP_ID_);
+create index ACT_IDX_EVENT_SUBSCR_CONFIG_ on ACT_RU_EVENT_SUBSCR(CONFIGURATION_);
+create index ACT_IDX_EVENT_SUBSCR_TENANT_ID on ACT_RU_EVENT_SUBSCR(TENANT_ID_);
+create index ACT_IDX_VARIABLE_TASK_ID on ACT_RU_VARIABLE(TASK_ID_);
+create index ACT_IDX_VARIABLE_TENANT_ID on ACT_RU_VARIABLE(TENANT_ID_);
+create index ACT_IDX_ATHRZ_PROCEDEF on ACT_RU_IDENTITYLINK(PROC_DEF_ID_);
+create index ACT_IDX_INC_CONFIGURATION on ACT_RU_INCIDENT(CONFIGURATION_);
+create index ACT_IDX_INC_TENANT_ID on ACT_RU_INCIDENT(TENANT_ID_);
+-- CAM-5914
+create index ACT_IDX_JOB_EXECUTION_ID on ACT_RU_JOB(EXECUTION_ID_);
+-- this index needs to be limited in mariadb see CAM-6938
+create index ACT_IDX_JOB_HANDLER on ACT_RU_JOB(HANDLER_TYPE_(100),HANDLER_CFG_(155));
+create index ACT_IDX_JOB_PROCINST on ACT_RU_JOB(PROCESS_INSTANCE_ID_);
+create index ACT_IDX_JOB_TENANT_ID on ACT_RU_JOB(TENANT_ID_);
+create index ACT_IDX_JOBDEF_TENANT_ID on ACT_RU_JOBDEF(TENANT_ID_);
+
+-- new metric milliseconds column
+CREATE INDEX ACT_IDX_METER_LOG_MS ON ACT_RU_METER_LOG(MILLISECONDS_);
+CREATE INDEX ACT_IDX_METER_LOG_NAME_MS ON ACT_RU_METER_LOG(NAME_, MILLISECONDS_);
+CREATE INDEX ACT_IDX_METER_LOG_REPORT ON ACT_RU_METER_LOG(NAME_, REPORTER_, MILLISECONDS_);
+
+-- old metric timestamp column
+CREATE INDEX ACT_IDX_METER_LOG_TIME ON ACT_RU_METER_LOG(TIMESTAMP_);
+CREATE INDEX ACT_IDX_METER_LOG ON ACT_RU_METER_LOG(NAME_, TIMESTAMP_);
+
+create index ACT_IDX_EXT_TASK_TOPIC on ACT_RU_EXT_TASK(TOPIC_NAME_);
+create index ACT_IDX_EXT_TASK_TENANT_ID on ACT_RU_EXT_TASK(TENANT_ID_);
+create index ACT_IDX_EXT_TASK_PRIORITY ON ACT_RU_EXT_TASK(PRIORITY_);
+create index ACT_IDX_EXT_TASK_ERR_DETAILS ON ACT_RU_EXT_TASK(ERROR_DETAILS_ID_);
+create index ACT_IDX_AUTH_GROUP_ID ON ACT_RU_AUTHORIZATION(GROUP_ID_);
+create index ACT_IDX_JOB_JOB_DEF_ID on ACT_RU_JOB(JOB_DEF_ID_);
+
+alter table ACT_GE_BYTEARRAY
+    add constraint ACT_FK_BYTEARR_DEPL
+    foreign key (DEPLOYMENT_ID_)
+    references ACT_RE_DEPLOYMENT (ID_);
+
+alter table ACT_RU_EXECUTION
+    add constraint ACT_FK_EXE_PROCINST
+    foreign key (PROC_INST_ID_)
+    references ACT_RU_EXECUTION (ID_) on delete cascade on update cascade;
+
+alter table ACT_RU_EXECUTION
+    add constraint ACT_FK_EXE_PARENT
+    foreign key (PARENT_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_EXECUTION
+    add constraint ACT_FK_EXE_SUPER
+    foreign key (SUPER_EXEC_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_EXECUTION
+    add constraint ACT_FK_EXE_PROCDEF
+    foreign key (PROC_DEF_ID_)
+    references ACT_RE_PROCDEF (ID_);
+
+alter table ACT_RU_IDENTITYLINK
+    add constraint ACT_FK_TSKASS_TASK
+    foreign key (TASK_ID_)
+    references ACT_RU_TASK (ID_);
+
+alter table ACT_RU_IDENTITYLINK
+    add constraint ACT_FK_ATHRZ_PROCEDEF
+    foreign key (PROC_DEF_ID_)
+    references ACT_RE_PROCDEF(ID_);
+
+alter table ACT_RU_TASK
+    add constraint ACT_FK_TASK_EXE
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_TASK
+    add constraint ACT_FK_TASK_PROCINST
+    foreign key (PROC_INST_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_TASK
+  add constraint ACT_FK_TASK_PROCDEF
+  foreign key (PROC_DEF_ID_)
+  references ACT_RE_PROCDEF (ID_);
+
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_EXE
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_PROCINST
+    foreign key (PROC_INST_ID_)
+    references ACT_RU_EXECUTION(ID_);
+
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_BYTEARRAY
+    foreign key (BYTEARRAY_ID_)
+    references ACT_GE_BYTEARRAY (ID_);
+
+alter table ACT_RU_JOB
+    add constraint ACT_FK_JOB_EXCEPTION
+    foreign key (EXCEPTION_STACK_ID_)
+    references ACT_GE_BYTEARRAY (ID_);
+
+alter table ACT_RU_EVENT_SUBSCR
+    add constraint ACT_FK_EVENT_EXEC
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION(ID_);
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_EXE
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_PROCINST
+    foreign key (PROC_INST_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_PROCDEF
+    foreign key (PROC_DEF_ID_)
+    references ACT_RE_PROCDEF (ID_);
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_CAUSE
+    foreign key (CAUSE_INCIDENT_ID_)
+    references ACT_RU_INCIDENT (ID_) on delete cascade on update cascade;
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_RCAUSE
+    foreign key (ROOT_CAUSE_INCIDENT_ID_)
+    references ACT_RU_INCIDENT (ID_) on delete cascade on update cascade;
+
+alter table ACT_RU_EXT_TASK
+    add constraint ACT_FK_EXT_TASK_ERROR_DETAILS
+    foreign key (ERROR_DETAILS_ID_)
+    references ACT_GE_BYTEARRAY (ID_);
+
+create index ACT_IDX_INC_JOB_DEF on ACT_RU_INCIDENT(JOB_DEF_ID_);
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_JOB_DEF
+    foreign key (JOB_DEF_ID_)
+    references ACT_RU_JOBDEF (ID_);
+
+alter table ACT_RU_AUTHORIZATION
+    add constraint ACT_UNIQ_AUTH_USER
+    unique (USER_ID_,TYPE_,RESOURCE_TYPE_,RESOURCE_ID_);
+
+alter table ACT_RU_AUTHORIZATION
+    add constraint ACT_UNIQ_AUTH_GROUP
+    unique (GROUP_ID_,TYPE_,RESOURCE_TYPE_,RESOURCE_ID_);
+
+alter table ACT_RU_VARIABLE
+    add constraint ACT_UNIQ_VARIABLE
+    unique (VAR_SCOPE_, NAME_);
+
+alter table ACT_RU_EXT_TASK
+    add constraint ACT_FK_EXT_TASK_EXE
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_BATCH_SEED_JOB_DEF ON ACT_RU_BATCH(SEED_JOB_DEF_ID_);
+alter table ACT_RU_BATCH
+    add constraint ACT_FK_BATCH_SEED_JOB_DEF
+    foreign key (SEED_JOB_DEF_ID_)
+    references ACT_RU_JOBDEF (ID_);
+
+create index ACT_IDX_BATCH_MONITOR_JOB_DEF ON ACT_RU_BATCH(MONITOR_JOB_DEF_ID_);
+alter table ACT_RU_BATCH
+    add constraint ACT_FK_BATCH_MONITOR_JOB_DEF
+    foreign key (MONITOR_JOB_DEF_ID_)
+    references ACT_RU_JOBDEF (ID_);
+
+create index ACT_IDX_BATCH_JOB_DEF ON ACT_RU_BATCH(BATCH_JOB_DEF_ID_);
+alter table ACT_RU_BATCH
+    add constraint ACT_FK_BATCH_JOB_DEF
+    foreign key (BATCH_JOB_DEF_ID_)
+    references ACT_RU_JOBDEF (ID_);
+
+-- indexes for deadlock problems - https://app.camunda.com/jira/browse/CAM-2567 --
+create index ACT_IDX_INC_CAUSEINCID on ACT_RU_INCIDENT(CAUSE_INCIDENT_ID_);
+create index ACT_IDX_INC_EXID on ACT_RU_INCIDENT(EXECUTION_ID_);
+create index ACT_IDX_INC_PROCDEFID on ACT_RU_INCIDENT(PROC_DEF_ID_);
+create index ACT_IDX_INC_PROCINSTID on ACT_RU_INCIDENT(PROC_INST_ID_);
+create index ACT_IDX_INC_ROOTCAUSEINCID on ACT_RU_INCIDENT(ROOT_CAUSE_INCIDENT_ID_);
+-- index for deadlock problem - https://app.camunda.com/jira/browse/CAM-4440 --
+create index ACT_IDX_AUTH_RESOURCE_ID on ACT_RU_AUTHORIZATION(RESOURCE_ID_);
+-- index to prevent deadlock on fk constraint - https://app.camunda.com/jira/browse/CAM-5440 --
+create index ACT_IDX_EXT_TASK_EXEC on ACT_RU_EXT_TASK(EXECUTION_ID_);
+
+-- indexes to improve deployment
+create index ACT_IDX_BYTEARRAY_NAME on ACT_GE_BYTEARRAY(NAME_);
+create index ACT_IDX_DEPLOYMENT_NAME on ACT_RE_DEPLOYMENT(NAME_);
+create index ACT_IDX_DEPLOYMENT_TENANT_ID on ACT_RE_DEPLOYMENT(TENANT_ID_);
+create index ACT_IDX_JOBDEF_PROC_DEF_ID ON ACT_RU_JOBDEF(PROC_DEF_ID_);
+create index ACT_IDX_JOB_HANDLER_TYPE ON ACT_RU_JOB(HANDLER_TYPE_);
+create index ACT_IDX_EVENT_SUBSCR_EVT_NAME ON ACT_RU_EVENT_SUBSCR(EVENT_NAME_);
+create index ACT_IDX_PROCDEF_DEPLOYMENT_ID ON ACT_RE_PROCDEF(DEPLOYMENT_ID_);
+create index ACT_IDX_PROCDEF_TENANT_ID ON ACT_RE_PROCDEF(TENANT_ID_);
+create index ACT_IDX_PROCDEF_VER_TAG ON ACT_RE_PROCDEF(VERSION_TAG_);
+-- create case definition table --
+create table ACT_RE_CASE_DEF (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    CATEGORY_ varchar(255),
+    NAME_ varchar(255),
+    KEY_ varchar(255) not null,
+    VERSION_ integer not null,
+    DEPLOYMENT_ID_ varchar(64),
+    RESOURCE_NAME_ varchar(4000),
+    DGRM_RESOURCE_NAME_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    HISTORY_TTL_ integer,
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+-- create case execution table --
+create table ACT_RU_CASE_EXECUTION (
+    ID_ varchar(64) NOT NULL,
+    REV_ integer,
+    CASE_INST_ID_ varchar(64),
+    SUPER_CASE_EXEC_ varchar(64),
+    SUPER_EXEC_ varchar(64),
+    BUSINESS_KEY_ varchar(255),
+    PARENT_ID_ varchar(64),
+    CASE_DEF_ID_ varchar(64),
+    ACT_ID_ varchar(255),
+    PREV_STATE_ integer,
+    CURRENT_STATE_ integer,
+    REQUIRED_ boolean,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+-- create case sentry part table --
+
+create table ACT_RU_CASE_SENTRY_PART (
+    ID_ varchar(64) NOT NULL,
+    REV_ integer,
+    CASE_INST_ID_ varchar(64),
+    CASE_EXEC_ID_ varchar(64),
+    SENTRY_ID_ varchar(255),
+    TYPE_ varchar(255),
+    SOURCE_CASE_EXEC_ID_ varchar(64),
+    STANDARD_EVENT_ varchar(255),
+    SOURCE_ varchar(255),
+    VARIABLE_EVENT_ varchar(255),
+    VARIABLE_NAME_ varchar(255),
+    SATISFIED_ boolean,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+-- create index on business key --
+create index ACT_IDX_CASE_EXEC_BUSKEY on ACT_RU_CASE_EXECUTION(BUSINESS_KEY_);
+
+-- create foreign key constraints on ACT_RU_CASE_EXECUTION --
+alter table ACT_RU_CASE_EXECUTION
+    add constraint ACT_FK_CASE_EXE_CASE_INST
+    foreign key (CASE_INST_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_) on delete cascade on update cascade;
+
+alter table ACT_RU_CASE_EXECUTION
+    add constraint ACT_FK_CASE_EXE_PARENT
+    foreign key (PARENT_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+alter table ACT_RU_CASE_EXECUTION
+    add constraint ACT_FK_CASE_EXE_CASE_DEF
+    foreign key (CASE_DEF_ID_)
+    references ACT_RE_CASE_DEF(ID_);
+
+-- create foreign key constraints on ACT_RU_VARIABLE --
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_CASE_EXE
+    foreign key (CASE_EXECUTION_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_CASE_INST
+    foreign key (CASE_INST_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+-- create foreign key constraints on ACT_RU_TASK --
+alter table ACT_RU_TASK
+    add constraint ACT_FK_TASK_CASE_EXE
+    foreign key (CASE_EXECUTION_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+alter table ACT_RU_TASK
+  add constraint ACT_FK_TASK_CASE_DEF
+  foreign key (CASE_DEF_ID_)
+  references ACT_RE_CASE_DEF(ID_);
+
+-- create foreign key constraints on ACT_RU_CASE_SENTRY_PART --
+alter table ACT_RU_CASE_SENTRY_PART
+    add constraint ACT_FK_CASE_SENTRY_CASE_INST
+    foreign key (CASE_INST_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+alter table ACT_RU_CASE_SENTRY_PART
+    add constraint ACT_FK_CASE_SENTRY_CASE_EXEC
+    foreign key (CASE_EXEC_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+create index ACT_IDX_CASE_DEF_TENANT_ID on ACT_RE_CASE_DEF(TENANT_ID_);
+create index ACT_IDX_CASE_EXEC_TENANT_ID on ACT_RU_CASE_EXECUTION(TENANT_ID_);
+-- create decision definition table --
+create table ACT_RE_DECISION_DEF (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    CATEGORY_ varchar(255),
+    NAME_ varchar(255),
+    KEY_ varchar(255) not null,
+    VERSION_ integer not null,
+    DEPLOYMENT_ID_ varchar(64),
+    RESOURCE_NAME_ varchar(4000),
+    DGRM_RESOURCE_NAME_ varchar(4000),
+    DEC_REQ_ID_ varchar(64),
+    DEC_REQ_KEY_ varchar(255),
+    TENANT_ID_ varchar(64),
+    HISTORY_TTL_ integer,
+    VERSION_TAG_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+-- create decision requirements definition table --
+create table ACT_RE_DECISION_REQ_DEF (
+    ID_ varchar(64) NOT NULL,
+    REV_ integer,
+    CATEGORY_ varchar(255),
+    NAME_ varchar(255),
+    KEY_ varchar(255) NOT NULL,
+    VERSION_ integer NOT NULL,
+    DEPLOYMENT_ID_ varchar(64),
+    RESOURCE_NAME_ varchar(4000),
+    DGRM_RESOURCE_NAME_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+alter table ACT_RE_DECISION_DEF
+    add constraint ACT_FK_DEC_REQ
+    foreign key (DEC_REQ_ID_)
+    references ACT_RE_DECISION_REQ_DEF(ID_);
+
+create index ACT_IDX_DEC_DEF_TENANT_ID on ACT_RE_DECISION_DEF(TENANT_ID_);
+create index ACT_IDX_DEC_DEF_REQ_ID on ACT_RE_DECISION_DEF(DEC_REQ_ID_);
+create index ACT_IDX_DEC_REQ_DEF_TENANT_ID on ACT_RE_DECISION_REQ_DEF(TENANT_ID_);
+create table ACT_HI_PROCINST (
+    ID_ varchar(64) not null,
+    PROC_INST_ID_ varchar(64) not null,
+    BUSINESS_KEY_ varchar(255),
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64) not null,
+    START_TIME_ datetime(3) not null,
+    END_TIME_ datetime(3),
+    DURATION_ bigint,
+    START_USER_ID_ varchar(255),
+    START_ACT_ID_ varchar(255),
+    END_ACT_ID_ varchar(255),
+    SUPER_PROCESS_INSTANCE_ID_ varchar(64),
+    SUPER_CASE_INSTANCE_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    DELETE_REASON_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    STATE_ varchar(255),
+    primary key (ID_),
+    unique (PROC_INST_ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_ACTINST (
+    ID_ varchar(64) not null,
+    PARENT_ACT_INST_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64) not null,
+    PROC_INST_ID_ varchar(64) not null,
+    EXECUTION_ID_ varchar(64) not null,
+    ACT_ID_ varchar(255) not null,
+    TASK_ID_ varchar(64),
+    CALL_PROC_INST_ID_ varchar(64),
+    CALL_CASE_INST_ID_ varchar(64),
+    ACT_NAME_ varchar(255),
+    ACT_TYPE_ varchar(255) not null,
+    ASSIGNEE_ varchar(64),
+    START_TIME_ datetime(3) not null,
+    END_TIME_ datetime(3),
+    DURATION_ bigint,
+    ACT_INST_STATE_ integer,
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_TASKINST (
+    ID_ varchar(64) not null,
+    TASK_DEF_KEY_ varchar(255),
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    CASE_DEF_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    ACT_INST_ID_ varchar(64),
+    NAME_ varchar(255),
+    PARENT_TASK_ID_ varchar(64),
+    DESCRIPTION_ varchar(4000),
+    OWNER_ varchar(255),
+    ASSIGNEE_ varchar(255),
+    START_TIME_ datetime(3) not null,
+    END_TIME_ datetime(3),
+    DURATION_ bigint,
+    DELETE_REASON_ varchar(4000),
+    PRIORITY_ integer,
+    DUE_DATE_ datetime(3),
+    FOLLOW_UP_DATE_ datetime(3),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_VARINST (
+    ID_ varchar(64) not null,
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    ACT_INST_ID_ varchar(64),
+    CASE_DEF_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    TASK_ID_ varchar(64),
+    NAME_ varchar(255) not null,
+    VAR_TYPE_ varchar(100),
+    REV_ integer,
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double,
+    LONG_ bigint,
+    TEXT_ LONGBLOB,
+    TEXT2_ LONGBLOB,
+    TENANT_ID_ varchar(64),
+    STATE_ varchar(20),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_DETAIL (
+    ID_ varchar(64) not null,
+    TYPE_ varchar(255) not null,
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    CASE_DEF_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    TASK_ID_ varchar(64),
+    ACT_INST_ID_ varchar(64),
+    VAR_INST_ID_ varchar(64),
+    NAME_ varchar(255) not null,
+    VAR_TYPE_ varchar(255),
+    REV_ integer,
+    TIME_ datetime(3) not null,
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double,
+    LONG_ bigint,
+    TEXT_ LONGBLOB,
+    TEXT2_ LONGBLOB,
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    OPERATION_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_IDENTITYLINK (
+    ID_ varchar(64) not null,
+    TIMESTAMP_ timestamp(3) not null,
+    TYPE_ varchar(255),
+    USER_ID_ varchar(255),
+    GROUP_ID_ varchar(255),
+    TASK_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    OPERATION_TYPE_ varchar(64),
+    ASSIGNER_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_COMMENT (
+    ID_ varchar(64) not null,
+    TYPE_ varchar(255),
+    TIME_ datetime(3) not null,
+    USER_ID_ varchar(255),
+    TASK_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    ACTION_ varchar(255),
+    MESSAGE_ varchar(4000),
+    FULL_MSG_ LONGBLOB,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_ATTACHMENT (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    USER_ID_ varchar(255),
+    NAME_ varchar(255),
+    DESCRIPTION_ varchar(4000),
+    TYPE_ varchar(255),
+    TASK_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    URL_ varchar(4000),
+    CONTENT_ID_ varchar(64),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_OP_LOG (
+    ID_ varchar(64) not null,
+    DEPLOYMENT_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    PROC_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    TASK_ID_ varchar(64),
+    JOB_ID_ varchar(64),
+    JOB_DEF_ID_ varchar(64),
+    BATCH_ID_ varchar(64),
+    USER_ID_ varchar(255),
+    TIMESTAMP_ timestamp(3) not null,
+    OPERATION_TYPE_ varchar(64),
+    OPERATION_ID_ varchar(64),
+    ENTITY_TYPE_ varchar(30),
+    PROPERTY_ varchar(64),
+    ORG_VALUE_ varchar(4000),
+    NEW_VALUE_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_INCIDENT (
+  ID_ varchar(64) not null,
+  PROC_DEF_KEY_ varchar(255),
+  PROC_DEF_ID_ varchar(64),
+  PROC_INST_ID_ varchar(64),
+  EXECUTION_ID_ varchar(64),
+  CREATE_TIME_ timestamp(3) not null,
+  END_TIME_ timestamp(3) null,
+  INCIDENT_MSG_ varchar(4000),
+  INCIDENT_TYPE_ varchar(255) not null,
+  ACTIVITY_ID_ varchar(255),
+  CAUSE_INCIDENT_ID_ varchar(64),
+  ROOT_CAUSE_INCIDENT_ID_ varchar(64),
+  CONFIGURATION_ varchar(255),
+  INCIDENT_STATE_ integer,
+  TENANT_ID_ varchar(64),
+  JOB_DEF_ID_ varchar(64),
+  primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_JOB_LOG (
+    ID_ varchar(64) not null,
+    TIMESTAMP_ timestamp(3) not null,
+    JOB_ID_ varchar(64) not null,
+    JOB_DUEDATE_ timestamp(3) NULL,
+    JOB_RETRIES_ integer,
+    JOB_PRIORITY_ bigint NOT NULL DEFAULT 0,
+    JOB_EXCEPTION_MSG_ varchar(4000),
+    JOB_EXCEPTION_STACK_ID_ varchar(64),
+    JOB_STATE_ integer,
+    JOB_DEF_ID_ varchar(64),
+    JOB_DEF_TYPE_ varchar(255),
+    JOB_DEF_CONFIGURATION_ varchar(255),
+    ACT_ID_ varchar(255),
+    EXECUTION_ID_ varchar(64),
+    PROCESS_INSTANCE_ID_ varchar(64),
+    PROCESS_DEF_ID_ varchar(64),
+    PROCESS_DEF_KEY_ varchar(255),
+    DEPLOYMENT_ID_ varchar(64),
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_BATCH (
+    ID_ varchar(64) not null,
+    TYPE_ varchar(255),
+    TOTAL_JOBS_ integer,
+    JOBS_PER_SEED_ integer,
+    INVOCATIONS_PER_JOB_ integer,
+    SEED_JOB_DEF_ID_ varchar(64),
+    MONITOR_JOB_DEF_ID_ varchar(64),
+    BATCH_JOB_DEF_ID_ varchar(64),
+    TENANT_ID_  varchar(64),
+    START_TIME_ datetime(3) not null,
+    END_TIME_ datetime(3),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_EXT_TASK_LOG (
+    ID_ varchar(64) not null,
+    TIMESTAMP_ timestamp(3) not null,
+    EXT_TASK_ID_ varchar(64) not null,
+    RETRIES_ integer,
+    TOPIC_NAME_ varchar(255),
+    WORKER_ID_ varchar(255),
+    PRIORITY_ bigint NOT NULL DEFAULT 0,
+    ERROR_MSG_ varchar(4000),
+    ERROR_DETAILS_ID_ varchar(64),
+    ACT_ID_ varchar(255),
+    ACT_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    TENANT_ID_ varchar(64),
+    STATE_ integer,
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create index ACT_IDX_HI_PRO_INST_END on ACT_HI_PROCINST(END_TIME_);
+create index ACT_IDX_HI_PRO_I_BUSKEY on ACT_HI_PROCINST(BUSINESS_KEY_);
+create index ACT_IDX_HI_PRO_INST_TENANT_ID on ACT_HI_PROCINST(TENANT_ID_);
+create index ACT_IDX_HI_PRO_INST_PROC_DEF_KEY on ACT_HI_PROCINST(PROC_DEF_KEY_);
+
+create index ACT_IDX_HI_ACT_INST_START on ACT_HI_ACTINST(START_TIME_);
+create index ACT_IDX_HI_ACT_INST_END on ACT_HI_ACTINST(END_TIME_);
+create index ACT_IDX_HI_ACT_INST_PROCINST on ACT_HI_ACTINST(PROC_INST_ID_, ACT_ID_);
+create index ACT_IDX_HI_ACT_INST_COMP on ACT_HI_ACTINST(EXECUTION_ID_, ACT_ID_, END_TIME_, ID_);
+create index ACT_IDX_HI_ACT_INST_STATS on ACT_HI_ACTINST(PROC_DEF_ID_, ACT_ID_, END_TIME_, ACT_INST_STATE_);
+create index ACT_IDX_HI_ACT_INST_TENANT_ID on ACT_HI_ACTINST(TENANT_ID_);
+create index ACT_IDX_HI_ACT_INST_PROC_DEF_KEY on ACT_HI_ACTINST(PROC_DEF_KEY_);
+
+create index ACT_IDX_HI_TASK_INST_TENANT_ID on ACT_HI_TASKINST(TENANT_ID_);
+create index ACT_IDX_HI_TASK_INST_PROC_DEF_KEY on ACT_HI_TASKINST(PROC_DEF_KEY_);
+create index ACT_IDX_HI_TASKINST_PROCINST on ACT_HI_TASKINST(PROC_INST_ID_);
+create index ACT_IDX_HI_TASKINSTID_PROCINST on ACT_HI_TASKINST(ID_,PROC_INST_ID_);
+
+create index ACT_IDX_HI_DETAIL_PROC_INST on ACT_HI_DETAIL(PROC_INST_ID_);
+create index ACT_IDX_HI_DETAIL_ACT_INST on ACT_HI_DETAIL(ACT_INST_ID_);
+create index ACT_IDX_HI_DETAIL_CASE_INST on ACT_HI_DETAIL(CASE_INST_ID_);
+create index ACT_IDX_HI_DETAIL_CASE_EXEC on ACT_HI_DETAIL(CASE_EXECUTION_ID_);
+create index ACT_IDX_HI_DETAIL_TIME on ACT_HI_DETAIL(TIME_);
+create index ACT_IDX_HI_DETAIL_NAME on ACT_HI_DETAIL(NAME_);
+create index ACT_IDX_HI_DETAIL_TASK_ID on ACT_HI_DETAIL(TASK_ID_);
+create index ACT_IDX_HI_DETAIL_TENANT_ID on ACT_HI_DETAIL(TENANT_ID_);
+create index ACT_IDX_HI_DETAIL_PROC_DEF_KEY on ACT_HI_DETAIL(PROC_DEF_KEY_);
+create index ACT_IDX_HI_DETAIL_BYTEAR on ACT_HI_DETAIL(BYTEARRAY_ID_);
+
+create index ACT_IDX_HI_IDENT_LNK_USER on ACT_HI_IDENTITYLINK(USER_ID_);
+create index ACT_IDX_HI_IDENT_LNK_GROUP on ACT_HI_IDENTITYLINK(GROUP_ID_);
+create index ACT_IDX_HI_IDENT_LNK_TENANT_ID on ACT_HI_IDENTITYLINK(TENANT_ID_);
+create index ACT_IDX_HI_IDENT_LNK_PROC_DEF_KEY on ACT_HI_IDENTITYLINK(PROC_DEF_KEY_);
+create index ACT_IDX_HI_IDENT_LINK_TASK on ACT_HI_IDENTITYLINK(TASK_ID_);
+
+create index ACT_IDX_HI_PROCVAR_PROC_INST on ACT_HI_VARINST(PROC_INST_ID_);
+create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_VARINST(NAME_, VAR_TYPE_);
+create index ACT_IDX_HI_CASEVAR_CASE_INST on ACT_HI_VARINST(CASE_INST_ID_);
+create index ACT_IDX_HI_VAR_INST_TENANT_ID on ACT_HI_VARINST(TENANT_ID_);
+create index ACT_IDX_HI_VAR_INST_PROC_DEF_KEY on ACT_HI_VARINST(PROC_DEF_KEY_);
+create index ACT_IDX_HI_VARINST_BYTEAR on ACT_HI_VARINST(BYTEARRAY_ID_);
+
+create index ACT_IDX_HI_INCIDENT_TENANT_ID on ACT_HI_INCIDENT(TENANT_ID_);
+create index ACT_IDX_HI_INCIDENT_PROC_DEF_KEY on ACT_HI_INCIDENT(PROC_DEF_KEY_);
+create index ACT_IDX_HI_INCIDENT_PROCINST on ACT_HI_INCIDENT(PROC_INST_ID_);
+
+create index ACT_IDX_HI_JOB_LOG_PROCINST on ACT_HI_JOB_LOG(PROCESS_INSTANCE_ID_);
+create index ACT_IDX_HI_JOB_LOG_PROCDEF on ACT_HI_JOB_LOG(PROCESS_DEF_ID_);
+create index ACT_IDX_HI_JOB_LOG_TENANT_ID on ACT_HI_JOB_LOG(TENANT_ID_);
+create index ACT_IDX_HI_JOB_LOG_JOB_DEF_ID on ACT_HI_JOB_LOG(JOB_DEF_ID_);
+create index ACT_IDX_HI_JOB_LOG_PROC_DEF_KEY on ACT_HI_JOB_LOG(PROCESS_DEF_KEY_);
+create index ACT_IDX_HI_JOB_LOG_EX_STACK on ACT_HI_JOB_LOG(JOB_EXCEPTION_STACK_ID_);
+
+create index ACT_HI_EXT_TASK_LOG_PROCINST on ACT_HI_EXT_TASK_LOG(PROC_INST_ID_);
+create index ACT_HI_EXT_TASK_LOG_PROCDEF on ACT_HI_EXT_TASK_LOG(PROC_DEF_ID_);
+create index ACT_HI_EXT_TASK_LOG_PROC_DEF_KEY on ACT_HI_EXT_TASK_LOG(PROC_DEF_KEY_);
+create index ACT_HI_EXT_TASK_LOG_TENANT_ID on ACT_HI_EXT_TASK_LOG(TENANT_ID_);
+create index ACT_IDX_HI_EXTTASKLOG_ERRORDET on ACT_HI_EXT_TASK_LOG(ERROR_DETAILS_ID_);
+
+create index ACT_IDX_HI_OP_LOG_PROCINST on ACT_HI_OP_LOG(PROC_INST_ID_);
+create index ACT_IDX_HI_OP_LOG_PROCDEF on ACT_HI_OP_LOG(PROC_DEF_ID_);
+
+create index ACT_IDX_HI_COMMENT_TASK on ACT_HI_COMMENT(TASK_ID_);
+create index ACT_IDX_HI_COMMENT_PROCINST on ACT_HI_COMMENT(PROC_INST_ID_);
+
+create index ACT_IDX_HI_ATTACHMENT_CONTENT on ACT_HI_ATTACHMENT(CONTENT_ID_);
+create index ACT_IDX_HI_ATTACHMENT_PROCINST on ACT_HI_ATTACHMENT(PROC_INST_ID_);
+create index ACT_IDX_HI_ATTACHMENT_TASK on ACT_HI_ATTACHMENT(TASK_ID_);
+create table ACT_HI_CASEINST (
+    ID_ varchar(64) not null,
+    CASE_INST_ID_ varchar(64) not null,
+    BUSINESS_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64) not null,
+    CREATE_TIME_ datetime(3) not null,
+    CLOSE_TIME_ datetime(3),
+    DURATION_ bigint,
+    STATE_ integer,
+    CREATE_USER_ID_ varchar(255),
+    SUPER_CASE_INSTANCE_ID_ varchar(64),
+    SUPER_PROCESS_INSTANCE_ID_ varchar(64),
+    TENANT_ID_ varchar(64),
+    primary key (ID_),
+    unique (CASE_INST_ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_CASEACTINST (
+    ID_ varchar(64) not null,
+    PARENT_ACT_INST_ID_ varchar(64),
+    CASE_DEF_ID_ varchar(64) not null,
+    CASE_INST_ID_ varchar(64) not null,
+    CASE_ACT_ID_ varchar(255) not null,
+    TASK_ID_ varchar(64),
+    CALL_PROC_INST_ID_ varchar(64),
+    CALL_CASE_INST_ID_ varchar(64),
+    CASE_ACT_NAME_ varchar(255),
+    CASE_ACT_TYPE_ varchar(255),
+    CREATE_TIME_ datetime(3) not null,
+    END_TIME_ datetime(3),
+    DURATION_ bigint,
+    STATE_ integer,
+    REQUIRED_ boolean,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create index ACT_IDX_HI_CAS_I_CLOSE on ACT_HI_CASEINST(CLOSE_TIME_);
+create index ACT_IDX_HI_CAS_I_BUSKEY on ACT_HI_CASEINST(BUSINESS_KEY_);
+create index ACT_IDX_HI_CAS_I_TENANT_ID on ACT_HI_CASEINST(TENANT_ID_);
+create index ACT_IDX_HI_CAS_A_I_CREATE on ACT_HI_CASEACTINST(CREATE_TIME_);
+create index ACT_IDX_HI_CAS_A_I_END on ACT_HI_CASEACTINST(END_TIME_);
+create index ACT_IDX_HI_CAS_A_I_COMP on ACT_HI_CASEACTINST(CASE_ACT_ID_, END_TIME_, ID_);
+create index ACT_IDX_HI_CAS_A_I_CASEINST on ACT_HI_CASEACTINST(CASE_INST_ID_, CASE_ACT_ID_);
+create index ACT_IDX_HI_CAS_A_I_TENANT_ID on ACT_HI_CASEACTINST(TENANT_ID_);
+-- create history decision instance table --
+create table ACT_HI_DECINST (
+    ID_ varchar(64) NOT NULL,
+    DEC_DEF_ID_ varchar(64) NOT NULL,
+    DEC_DEF_KEY_ varchar(255) NOT NULL,
+    DEC_DEF_NAME_ varchar(255),
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    CASE_DEF_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    ACT_INST_ID_ varchar(64),
+    ACT_ID_ varchar(255),
+    EVAL_TIME_ datetime(3) not null,
+    COLLECT_VALUE_ double,
+    USER_ID_ varchar(255),
+    ROOT_DEC_INST_ID_ varchar(64),
+    DEC_REQ_ID_ varchar(64),
+    DEC_REQ_KEY_ varchar(255),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+-- create history decision input table --
+create table ACT_HI_DEC_IN (
+    ID_ varchar(64) NOT NULL,
+    DEC_INST_ID_ varchar(64) NOT NULL,
+    CLAUSE_ID_ varchar(64),
+    CLAUSE_NAME_ varchar(255),
+    VAR_TYPE_ varchar(100),
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double,
+    LONG_ bigint,
+    TEXT_ LONGBLOB,
+    TEXT2_ LONGBLOB,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+-- create history decision output table --
+create table ACT_HI_DEC_OUT (
+    ID_ varchar(64) NOT NULL,
+    DEC_INST_ID_ varchar(64) NOT NULL,
+    CLAUSE_ID_ varchar(64),
+    CLAUSE_NAME_ varchar(255),
+    RULE_ID_ varchar(64),
+    RULE_ORDER_ integer,
+    VAR_NAME_ varchar(255),
+    VAR_TYPE_ varchar(100),
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double,
+    LONG_ bigint,
+    TEXT_ LONGBLOB,
+    TEXT2_ LONGBLOB,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+
+create index ACT_IDX_HI_DEC_INST_ID on ACT_HI_DECINST(DEC_DEF_ID_);
+create index ACT_IDX_HI_DEC_INST_KEY on ACT_HI_DECINST(DEC_DEF_KEY_);
+create index ACT_IDX_HI_DEC_INST_PI on ACT_HI_DECINST(PROC_INST_ID_);
+create index ACT_IDX_HI_DEC_INST_CI on ACT_HI_DECINST(CASE_INST_ID_);
+create index ACT_IDX_HI_DEC_INST_ACT on ACT_HI_DECINST(ACT_ID_);
+create index ACT_IDX_HI_DEC_INST_ACT_INST on ACT_HI_DECINST(ACT_INST_ID_);
+create index ACT_IDX_HI_DEC_INST_TIME on ACT_HI_DECINST(EVAL_TIME_);
+create index ACT_IDX_HI_DEC_INST_TENANT_ID on ACT_HI_DECINST(TENANT_ID_);
+create index ACT_IDX_HI_DEC_INST_ROOT_ID on ACT_HI_DECINST(ROOT_DEC_INST_ID_);
+create index ACT_IDX_HI_DEC_INST_REQ_ID on ACT_HI_DECINST(DEC_REQ_ID_);
+create index ACT_IDX_HI_DEC_INST_REQ_KEY on ACT_HI_DECINST(DEC_REQ_KEY_);
+
+
+create index ACT_IDX_HI_DEC_IN_INST on ACT_HI_DEC_IN(DEC_INST_ID_);
+create index ACT_IDX_HI_DEC_IN_CLAUSE on ACT_HI_DEC_IN(DEC_INST_ID_, CLAUSE_ID_);
+
+create index ACT_IDX_HI_DEC_OUT_INST on ACT_HI_DEC_OUT(DEC_INST_ID_);
+create index ACT_IDX_HI_DEC_OUT_RULE on ACT_HI_DEC_OUT(RULE_ORDER_, CLAUSE_ID_);
+
+-- mariadb_identity_7.8.0-ee
+
+create table ACT_ID_GROUP (
+    ID_ varchar(64),
+    REV_ integer,
+    NAME_ varchar(255),
+    TYPE_ varchar(255),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_ID_MEMBERSHIP (
+    USER_ID_ varchar(64),
+    GROUP_ID_ varchar(64),
+    primary key (USER_ID_, GROUP_ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_ID_USER (
+    ID_ varchar(64),
+    REV_ integer,
+    FIRST_ varchar(255),
+    LAST_ varchar(255),
+    EMAIL_ varchar(255),
+    PWD_ varchar(255),
+    SALT_ varchar(255),
+    PICTURE_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_ID_INFO (
+    ID_ varchar(64),
+    REV_ integer,
+    USER_ID_ varchar(64),
+    TYPE_ varchar(64),
+    KEY_ varchar(255),
+    VALUE_ varchar(255),
+    PASSWORD_ LONGBLOB,
+    PARENT_ID_ varchar(255),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_ID_TENANT (
+    ID_ varchar(64),
+    REV_ integer,
+    NAME_ varchar(255),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_ID_TENANT_MEMBER (
+    ID_ varchar(64) not null,
+    TENANT_ID_ varchar(64) not null,
+    USER_ID_ varchar(64),
+    GROUP_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+alter table ACT_ID_MEMBERSHIP
+    add constraint ACT_FK_MEMB_GROUP
+    foreign key (GROUP_ID_)
+    references ACT_ID_GROUP (ID_);
+
+alter table ACT_ID_MEMBERSHIP
+    add constraint ACT_FK_MEMB_USER
+    foreign key (USER_ID_)
+    references ACT_ID_USER (ID_);
+
+alter table ACT_ID_TENANT_MEMBER
+    add constraint ACT_UNIQ_TENANT_MEMB_USER
+    unique (TENANT_ID_, USER_ID_);
+
+alter table ACT_ID_TENANT_MEMBER
+    add constraint ACT_UNIQ_TENANT_MEMB_GROUP
+    unique (TENANT_ID_, GROUP_ID_);
+
+alter table ACT_ID_TENANT_MEMBER
+    add constraint ACT_FK_TENANT_MEMB
+    foreign key (TENANT_ID_)
+    references ACT_ID_TENANT (ID_);
+
+alter table ACT_ID_TENANT_MEMBER
+    add constraint ACT_FK_TENANT_MEMB_USER
+    foreign key (USER_ID_)
+    references ACT_ID_USER (ID_);
+
+alter table ACT_ID_TENANT_MEMBER
+    add constraint ACT_FK_TENANT_MEMB_GROUP
+    foreign key (GROUP_ID_)
+    references ACT_ID_GROUP (ID_);
+    
+ALTER TABLE ACT_GE_BYTEARRAY
+  ADD TYPE_ integer;
+  
+ALTER TABLE ACT_GE_BYTEARRAY
+  ADD CREATE_TIME_ datetime(3);
+  
+ALTER TABLE ACT_RE_PROCDEF
+  ADD STARTABLE_ BOOLEAN NOT NULL DEFAULT TRUE;
\ No newline at end of file
diff --git a/so-sdn-clients/pom.xml b/so-sdn-clients/pom.xml
new file mode 100644 (file)
index 0000000..c9b417b
--- /dev/null
@@ -0,0 +1,173 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <groupId>org.onap.so</groupId>
+    <artifactId>so</artifactId>
+    <version>1.6.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>so-sdn-clients</artifactId>
+  <properties>
+    <sdnc.northbound.version>1.5.2</sdnc.northbound.version>
+  </properties>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>default-test</id>
+            <goals>
+              <goal>test</goal>
+            </goals>
+            <configuration>
+              <includes>
+                <include>**/UnitTestSuite.java</include>
+              </includes>
+            </configuration>
+          </execution>
+          <execution>
+            <id>integration-test</id>
+            <goals>
+              <goal>test</goal>
+            </goals>
+            <configuration>
+              <includes>
+                <include>**/IntegrationTestSuite.java</include>
+              </includes>
+            </configuration>
+          </execution>
+        </executions>
+        <configuration>
+          <parallel>suites</parallel>
+        </configuration>
+      </plugin>
+    </plugins>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.eclipse.m2e</groupId>
+          <artifactId>lifecycle-mapping</artifactId>
+          <version>1.0.0</version>
+          <configuration>
+            <lifecycleMappingMetadata>
+              <pluginExecutions>
+                  <pluginExecution>
+                  <pluginExecutionFilter>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-dependency-plugin</artifactId>
+                    <versionRange>[1.0.0,)</versionRange>
+                    <goals>
+                      <goal>unpack</goal>
+                    </goals>
+                  </pluginExecutionFilter>
+                  <action>
+                    <execute />
+                  </action>
+                </pluginExecution>
+              </pluginExecutions>
+            </lifecycleMappingMetadata>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <!-- Import dependency management from Spring Boot -->
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-dependencies</artifactId>
+        <version>${springboot.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+  <dependencies>
+    <dependency>
+      <groupId>org.camunda.bpm.springboot</groupId>
+      <artifactId>camunda-bpm-spring-boot-starter</artifactId>
+      <version>${camunda.springboot.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.cloud</groupId>
+      <artifactId>spring-cloud-contract-wiremock</artifactId>
+      <version>1.2.4.RELEASE</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-test</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.sdnc.northbound</groupId>
+      <artifactId>generic-resource-api-client</artifactId>
+      <version>${sdnc.northbound.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>javax.ws.rs</groupId>
+          <artifactId>jsr311-api</artifactId>
+        </exclusion>
+               <exclusion>
+          <groupId>io.swagger</groupId>
+          <artifactId>swagger-annotations</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>io.swagger</groupId>
+          <artifactId>swagger-models</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>ch.vorburger.mariaDB4j</groupId>
+      <artifactId>mariaDB4j</artifactId>
+      <version>2.2.3</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.6</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-configuration-processor</artifactId>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.so</groupId>
+      <artifactId>common</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.so</groupId>
+      <artifactId>aai-client</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.mariadb.jdbc</groupId>
+      <artifactId>mariadb-java-client</artifactId>
+    </dependency>
+     <dependency>
+      <groupId>org.glassfish.jersey.core</groupId>
+      <artifactId>jersey-common</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.glassfish.jersey.core</groupId>
+      <artifactId>jersey-client</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.glassfish.jersey.inject</groupId>
+      <artifactId>jersey-hk2</artifactId>
+      <version>2.26</version>
+    </dependency>
+    <dependency>
+      <groupId>org.glassfish.jersey.media</groupId>
+      <artifactId>jersey-media-json-jackson</artifactId>
+    </dependency>
+  </dependencies>
+</project>
@@ -22,7 +22,6 @@ package org.onap.so.client.sdno;
 
 import java.io.IOException;
 import java.util.UUID;
-import org.onap.aai.domain.yang.GenericVnf;
 
 public interface SDNOValidator {
 
@@ -38,18 +37,4 @@ public interface SDNOValidator {
      */
     public boolean healthDiagnostic(String vnfId, UUID uuid, String requestingUserId) throws IOException, Exception;
 
-
-    /**
-     * Issues a health diagnostic request for a given GenericVnf to SDN-O
-     * 
-     * @param genericVnf
-     * @param uuid
-     * @param requestingUserId
-     * @return diagnostic result
-     * @throws IOException
-     * @throws Exception
-     */
-    public boolean healthDiagnostic(GenericVnf genericVnf, UUID uuid, String requestingUserId)
-            throws IOException, Exception;
-
 }
@@ -61,18 +61,6 @@ public class SDNOValidatorImpl implements SDNOValidator {
         return status;
     }
 
-    @Override
-    public boolean healthDiagnostic(GenericVnf genericVnf, UUID uuid, String requestingUserId)
-            throws IOException, Exception {
-
-        SDNO requestDiagnostic = buildRequestDiagnostic(genericVnf, uuid, requestingUserId);
-        ObjectMapper mapper = new ObjectMapper();
-        String json = mapper.writeValueAsString(requestDiagnostic);
-        this.submitRequest(json);
-        boolean status = this.pollForResponse(uuid.toString());
-        return status;
-    }
-
     protected SDNO buildRequestDiagnostic(GenericVnf vnf, UUID uuid, String requestingUserId) {
 
         Optional<String> nfRole;
diff --git a/so-sdn-clients/src/test/java/org/onap/so/BaseIntegrationTest.java b/so-sdn-clients/src/test/java/org/onap/so/BaseIntegrationTest.java
new file mode 100644 (file)
index 0000000..9c25b1f
--- /dev/null
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.so;
+
+import java.io.IOException;
+import java.io.InputStream;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.onap.so.client.sdnc.SDNCClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.SpyBean;
+import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+import com.github.tomakehurst.wiremock.WireMockServer;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = TestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@ActiveProfiles("test")
+@ContextConfiguration
+@AutoConfigureWireMock(port = 0)
+public abstract class BaseIntegrationTest {
+
+    @Value("${wiremock.server.port}")
+    protected String wireMockPort;
+
+    @SpyBean
+    protected SDNCClient SPY_sdncClient;
+
+    @Autowired
+    protected WireMockServer wireMockServer;
+
+    @Before
+    public void baseTestBefore() {
+        wireMockServer.resetAll();
+    }
+
+}
+
+
diff --git a/so-sdn-clients/src/test/java/org/onap/so/EmbeddedMariaDbConfig.java b/so-sdn-clients/src/test/java/org/onap/so/EmbeddedMariaDbConfig.java
new file mode 100644 (file)
index 0000000..62d9ece
--- /dev/null
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so;
+
+import ch.vorburger.exec.ManagedProcessException;
+import ch.vorburger.mariadb4j.DBConfigurationBuilder;
+import ch.vorburger.mariadb4j.springframework.MariaDB4jSpringService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
+import javax.sql.DataSource;
+
+@Configuration
+@Profile({"test"})
+public class EmbeddedMariaDbConfig {
+
+    @Bean
+    MariaDB4jSpringService mariaDB4jSpringService() {
+        MariaDB4jSpringService service = new MariaDB4jSpringService();
+
+
+        service.getConfiguration().addArg("--lower_case_table_names=1");
+        return service;
+    }
+
+    @Bean
+    DataSource dataSource(MariaDB4jSpringService mariaDB4jSpringService,
+            @Value("${mariaDB4j.databaseName}") String databaseName,
+            @Value("${spring.datasource.username}") String datasourceUsername,
+            @Value("${spring.datasource.password}") String datasourcePassword,
+            @Value("${spring.datasource.driver-class-name}") String datasourceDriver) throws ManagedProcessException {
+        // Create our database with default root user and no password
+        mariaDB4jSpringService.getDB().createDB(databaseName);
+
+        DBConfigurationBuilder config = mariaDB4jSpringService.getConfiguration();
+
+        return DataSourceBuilder.create().username(datasourceUsername).password(datasourcePassword)
+                .url(config.getURL(databaseName)).driverClassName(datasourceDriver).build();
+    }
+}
diff --git a/so-sdn-clients/src/test/java/org/onap/so/IntegrationTestSuite.java b/so-sdn-clients/src/test/java/org/onap/so/IntegrationTestSuite.java
new file mode 100644 (file)
index 0000000..50bbc18
--- /dev/null
@@ -0,0 +1,31 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so;
+
+import org.junit.runner.RunWith;
+import com.googlecode.junittoolbox.SuiteClasses;
+import com.googlecode.junittoolbox.WildcardPatternSuite;
+
+@RunWith(WildcardPatternSuite.class)
+@SuiteClasses({"**/*IT.class"})
+public class IntegrationTestSuite {
+
+}
diff --git a/so-sdn-clients/src/test/java/org/onap/so/TestApplication.java b/so-sdn-clients/src/test/java/org/onap/so/TestApplication.java
new file mode 100644 (file)
index 0000000..fe965b4
--- /dev/null
@@ -0,0 +1,43 @@
+package org.onap.so;
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.ComponentScan.Filter;
+import org.springframework.context.annotation.FilterType;
+import org.springframework.context.annotation.Profile;
+
+@SpringBootApplication
+@Profile("test")
+@ComponentScan(basePackages = {"org.onap.so"},
+        excludeFilters = {@Filter(type = FilterType.ANNOTATION, classes = SpringBootApplication.class)})
+public class TestApplication {
+    public static void main(String... args) {
+        SpringApplication.run(TestApplication.class, args);
+        System.getProperties().setProperty("mso.db", "MARIADB");
+        System.getProperties().setProperty("server.name", "Springboot");
+
+
+    }
+}
diff --git a/so-sdn-clients/src/test/java/org/onap/so/UnitTestSuite.java b/so-sdn-clients/src/test/java/org/onap/so/UnitTestSuite.java
new file mode 100644 (file)
index 0000000..890c81d
--- /dev/null
@@ -0,0 +1,32 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so;
+
+
+import org.junit.runner.RunWith;
+import com.googlecode.junittoolbox.SuiteClasses;
+import com.googlecode.junittoolbox.WildcardPatternSuite;
+
+@RunWith(WildcardPatternSuite.class)
+@SuiteClasses({"**/*Test.class"})
+public class UnitTestSuite {
+
+}
@@ -33,7 +33,7 @@ public class SDNOHealthCheckClientTest {
 
 
 
-    private final String fileLocation = "src/test/resources/org/onap/so/client/sdno/health-check/";
+    private final String fileLocation = "src/test/resources/__files/sdno/health-check/";
     private static final String userId = "test-user";
     private static final Optional<String> clliCode = Optional.of("test-clli");
     private static final String requestId = "test-request-id";
@@ -55,7 +55,7 @@ public class SDNOValidatorIT extends BaseIntegrationTest {
     @Mock
     private Consumer mrConsumer;
     private SDNOHealthCheckDmaapConsumer dmaapConsumer;
-    private final String fileLocation = "src/test/resources/org/onap/so/client/sdno/";
+    private final String fileLocation = "src/test/resources/__files/sdno/client/";
     private final String uuid = "xyz123";
     @Rule
     public ExpectedException thrown = ExpectedException.none();
diff --git a/so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiEcompModelInformation.json b/so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiEcompModelInformation.json
new file mode 100644 (file)
index 0000000..9c50c2f
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "model-name" : "modelName",
+  "model-version" : "modelVersion",
+  "model-customization-uuid" : null,
+  "model-uuid" : "modelUuid",
+  "model-invariant-uuid" : "modelInvariantUuid"
+}
\ No newline at end of file
diff --git a/so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiNetworkOperationInformation.json b/so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiNetworkOperationInformation.json
new file mode 100644 (file)
index 0000000..91d64b9
--- /dev/null
@@ -0,0 +1,54 @@
+{
+  "service-information" : {
+    "onap-model-information" : {
+      "model-name" : "modelName",
+      "model-version" : "modelVersion",
+      "model-customization-uuid" : null,
+      "model-uuid" : "modelUuid",
+      "model-invariant-uuid" : "modelInvariantUuid"
+    },
+    "subscriber-name" : null,
+    "subscription-service-type" : "productFamilyId",
+    "service-id" : null,
+    "global-customer-id" : "globalCustomerId",
+    "service-instance-id" : null
+  },
+  "network-request-input" : {
+    "aic-clli" : null,
+    "aic-cloud-region" : null,
+    "tenant" : null,
+    "network-input-parameters" : {
+      "param" : [ {
+        "name" : "key1",
+        "value" : "value1"
+      } ]
+    },
+    "network-name" : "TEST_NETWORK_NAME",
+    "network-instance-group-id" : "networkInstanceGroupId"
+  },
+  "request-information" : {
+    "notification-url" : null,
+    "order-version" : null,
+    "request-action" : "CreateNetworkInstance",
+    "source" : "MSO",
+    "request-id" : "sdncReqId",
+    "order-number" : null
+  },
+  "sdnc-request-header" : {
+    "svc-request-id" : "svcRequestId",
+    "svc-notification-url" : null,
+    "svc-action" : "assign"
+  },
+  "network-information" : {
+    "onap-model-information" : {
+      "model-name" : "modelName",
+      "model-version" : "modelVersion",
+      "model-customization-uuid" : "modelCustomizationUUID",
+      "model-uuid" : "modelUuid",
+      "model-invariant-uuid" : "modelInvariantUuid"
+    },
+    "from-preload": null,
+    "network-id" : "TEST_NETWORK_ID",
+    "network-type" : null
+  }
+}
\ No newline at end of file
diff --git a/so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiNetworkOperationInformationNoNetworkName.json b/so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiNetworkOperationInformationNoNetworkName.json
new file mode 100644 (file)
index 0000000..95a2af3
--- /dev/null
@@ -0,0 +1,53 @@
+{
+  "service-information" : {
+    "onap-model-information" : {
+      "model-name" : "modelName",
+      "model-version" : "modelVersion",
+      "model-customization-uuid" : null,
+      "model-uuid" : "modelUuid",
+      "model-invariant-uuid" : "modelInvariantUuid"
+    },
+    "subscriber-name" : null,
+    "subscription-service-type" : "productFamilyId",
+    "service-id" : null,
+    "global-customer-id" : "globalCustomerId",
+    "service-instance-id" : null
+  },
+  "network-request-input" : {
+    "aic-clli" : null,
+    "aic-cloud-region" : null,
+    "tenant" : null,
+    "network-input-parameters" : {
+      "param" : [ {
+        "name" : "key1",
+        "value" : "value1"
+      } ]
+    },
+    "network-instance-group-id" : "networkInstanceGroupId"
+  },
+  "request-information" : {
+    "notification-url" : null,
+    "order-version" : null,
+    "request-action" : "CreateNetworkInstance",
+    "source" : "MSO",
+    "request-id" : "sdncReqId",
+    "order-number" : null
+  },
+  "sdnc-request-header" : {
+    "svc-request-id" : "svcRequestId",
+    "svc-notification-url" : null,
+    "svc-action" : "assign"
+  },
+  "network-information" : {
+    "onap-model-information" : {
+      "model-name" : "modelName",
+      "model-version" : "modelVersion",
+      "model-customization-uuid" : "modelCustomizationUUID",
+      "model-uuid" : "modelUuid",
+      "model-invariant-uuid" : "modelInvariantUuid"
+    },
+    "from-preload": null,
+    "network-id" : "TEST_NETWORK_ID",
+    "network-type" : null
+  }
+}
\ No newline at end of file
diff --git a/so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiNetworkOperationInformationUnAssign.json b/so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiNetworkOperationInformationUnAssign.json
new file mode 100644 (file)
index 0000000..a7cf1e1
--- /dev/null
@@ -0,0 +1,54 @@
+{
+  "service-information" : {
+    "onap-model-information" : {
+      "model-name" : "modelName",
+      "model-version" : "modelVersion",
+      "model-customization-uuid" : null,
+      "model-uuid" : "modelUuid",
+      "model-invariant-uuid" : "modelInvariantUuid"
+    },
+    "subscriber-name" : null,
+    "subscription-service-type" : "productFamilyId",
+    "service-id" : null,
+    "global-customer-id" : "globalCustomerId",
+    "service-instance-id" : null
+  },
+  "network-request-input" : {
+    "aic-clli" : null,
+    "aic-cloud-region" : null,
+    "tenant" : null,
+    "network-input-parameters" : {
+      "param" : [ {
+        "name" : "key1",
+        "value" : "value1"
+      } ]
+    },
+    "network-name" : "TEST_NETWORK_NAME",
+    "network-instance-group-id" : "networkInstanceGroupId"
+  },
+  "request-information" : {
+    "notification-url" : null,
+    "order-version" : null,
+    "request-action" : "DeleteNetworkInstance",
+    "source" : "MSO",
+    "request-id" : "sdncReqId",
+    "order-number" : null
+  },
+  "sdnc-request-header" : {
+    "svc-request-id" : "svcRequestId",
+    "svc-notification-url" : null,
+    "svc-action" : "unassign"
+  },
+  "network-information" : {
+    "onap-model-information" : {
+      "model-name" : "modelName",
+      "model-version" : "modelVersion",
+      "model-customization-uuid" : "modelCustomizationUUID",
+      "model-uuid" : "modelUuid",
+      "model-invariant-uuid" : "modelInvariantUuid"
+    },
+    "from-preload": null,
+    "network-id" : "TEST_NETWORK_ID",
+    "network-type" : null
+  }
+}
\ No newline at end of file
diff --git a/so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiVfModuleOperationInformationAssign.json b/so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiVfModuleOperationInformationAssign.json
new file mode 100644 (file)
index 0000000..53c1997
--- /dev/null
@@ -0,0 +1,74 @@
+{
+  "service-information" : {
+    "onap-model-information" : {
+      "model-name" : "serviceModelName",
+      "model-version" : "serviceModelVersion",
+      "model-customization-uuid" : null,
+      "model-uuid" : "serviceModelUuid",
+      "model-invariant-uuid" : "serviceModelInvariantUuid"
+    },
+    "subscriber-name" : null,
+    "subscription-service-type" : "productFamilyId",
+    "service-id" : "serviceInstanceId",
+    "global-customer-id" : "globalCustomerId",
+    "service-instance-id" : "serviceInstanceId"
+  },
+  "vf-module-request-input" : {
+    "aic-clli" : null,
+    "aic-cloud-region" : null,
+    "tenant" : null,
+    "vf-module-input-parameters" : {
+      "param" : [ {
+        "name" : "key1",
+        "value" : "value1"
+      },
+      {
+        "name" : "key2",
+        "value" : "value2"
+      },
+      {
+        "name" : "volume-group-id",
+        "value" : "volumeGroupId"
+      } ]
+    },
+    "vf-module-name" : "testVfModuleName"    
+  },
+  "request-information" : {
+    "request-action" : "CreateVfModuleInstance",
+    "source" : "MSO",
+    "request-id" : "sdncReqId",
+    "order-number" : null,
+    "order-version" : null,
+    "notification-url" : null
+  },
+  "sdnc-request-header" : {
+    "svc-request-id" : "svcRequestId",
+    "svc-notification-url" : "http://localhost:8080",
+    "svc-action" : "assign"
+  },
+  "vf-module-information" : {
+    "onap-model-information" : {
+      "model-name" : "vfModuleModelName",
+      "model-version" : "vfModuleModelVersion",
+      "model-customization-uuid" : "vfModuleModelCustomizationUuid",
+      "model-uuid" : "vfModuleModelUuid",
+      "model-invariant-uuid" : "vfModuleModelInvariantUuid"
+    },
+    "vf-module-id" : "testVfModuleId",
+    "from-preload" : true,
+    "vf-module-type": "vfModuleModelName"
+   
+  },
+  "vnf-information" : {
+    "onap-model-information" : {
+      "model-name" : "vnfModelName",
+      "model-version" : "vnfModelVersion",
+      "model-customization-uuid" : "vnfModelCustomizationUuid",
+      "model-uuid" : "vnfModelUuid",
+      "model-invariant-uuid" : "vnfModelInvariantUuid"
+    },
+    "vnf-id" : "testVnfId",
+    "vnf-type" : "testVnfType",
+    "vnf-name" : "testVnfName"
+  }
+}
\ No newline at end of file
diff --git a/so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiVfModuleOperationInformationUnassign.json b/so-sdn-clients/src/test/resources/__files/BuildingBlocks/genericResourceApiVfModuleOperationInformationUnassign.json
new file mode 100644 (file)
index 0000000..9f93c0d
--- /dev/null
@@ -0,0 +1,31 @@
+{
+  "service-information" : {    
+    "service-instance-id" : "serviceInstanceId",
+    "service-id" : "serviceInstanceId"
+  },
+  "vf-module-request-input" : {
+    "vf-module-name" : "testVfModuleName",
+     "vf-module-input-parameters" : {}        
+  },
+  "request-information" : {
+    "request-action" : "DeleteVfModuleInstance",
+    "source" : "MSO",
+    "request-id" : "sdncReqId",
+    "order-number" : null,
+    "order-version" : null,
+    "notification-url" : null
+  },
+  "sdnc-request-header" : {
+    "svc-request-id" : "svcRequestId",
+    "svc-notification-url" : "http://localhost:8080",
+    "svc-action" : "unassign"
+  },
+  "vf-module-information" : {    
+    "vf-module-id" : "testVfModuleId",
+    "from-preload": true  
+ },
+  "vnf-information" : {    
+    "vnf-id" : "testVnfId",
+    "vnf-type" : "testVnfType"
+  }
+}
\ No newline at end of file
diff --git a/so-sdn-clients/src/test/resources/__files/SDNCClientGetResponse.json b/so-sdn-clients/src/test/resources/__files/SDNCClientGetResponse.json
new file mode 100644 (file)
index 0000000..a18b6aa
--- /dev/null
@@ -0,0 +1,27 @@
+{
+  "vnf-topology": {
+    "tenant": "0422ffb57ba042c0800a29dc85ca70f8",
+    "vnf-topology-identifier-structure": {
+      "vnf-id": "66dac89b-2a5b-4cb9-b22e-a7e4488fb3db",
+      "vnf-type": "InfraMSO_vSAMP10a_Service/InfraMSO_vSAMP10a-2 0",
+      "vnf-name": "MSO-DEV-VNF-1806HF1-InfraMSO_vSAMP10a-1XXX-GR_21"
+    },
+    "aic-clli": "AUSTTXGR",
+    "vnf-resource-assignments": {
+      "availability-zones": {
+        "availability-zone": [
+          "AZ-MN02"
+        ],
+        "max-count": 1
+      }
+    },
+    "aic-cloud-region": "mtn6",
+    "onap-model-information": {
+      "model-customization-uuid": "034226ae-879a-46b5-855c-d02babcb6cb6",
+      "model-uuid": "cb79c25f-b30d-4d95-afb5-97be4021f3db",
+      "model-invariant-uuid": "e93d3a7a-446d-486b-ae48-d474a9156064",
+      "model-name": "InfraMSO_vSAMP10a-2",
+      "model-version": "1.0"
+    }
+  }
+}
\ No newline at end of file
diff --git a/so-sdn-clients/src/test/resources/__files/SDNCClientPrelaodDataResponse.json b/so-sdn-clients/src/test/resources/__files/SDNCClientPrelaodDataResponse.json
new file mode 100644 (file)
index 0000000..0de2561
--- /dev/null
@@ -0,0 +1,127 @@
+{
+    "vnf-preload-list": [
+        {
+            "vnf-name": "GENERIC_VNF_NAME",
+            "vnf-type": "SIMPLE",
+            "preload-data": 
+            {
+                "network-topology-information": 
+                {
+                },
+                "vnf-topology-information": 
+                {
+                    "vnf-topology-identifier": 
+                    {
+                        "service-type": "vCPE",
+                        "vnf-type": "SIMPLE",
+                        "vnf-name": "GENERIC_VNF_NAME",
+                        "generic-vnf-name": "GENERIC_VNF_NAME",
+                        "generic-vnf-type": "SIMPLE"
+                    },
+                    "vnf-parameters": [
+                        {
+                            "vnf-parameter-name": "extra_console",
+                            "vnf-parameter-value": "ttyS1"
+                        },
+                        {
+                            "vnf-parameter-name": "vnfUsername",
+                            "vnf-parameter-value": "vnf_user"
+                        },
+                        {
+                            "vnf-parameter-name": "additionalParams",
+                            "vnf-parameter-value": "{\"image_id\": \"DUMMYVNF\",\"instance_type\": \"m1.small\",\"ftp_address\": \"ftp://0.0.0.0:2100/\"}"
+                        },
+                        {
+                            "vnf-parameter-name": "fsb_admin_gateway_ip_1",
+                            "vnf-parameter-value": "0.0.0.0"
+                        },
+                        {
+                            "vnf-parameter-name": "availability_zone_1"
+                        },
+                        {
+                            "vnf-parameter-name": "fsb_admin_gateway_ip_2"
+                        },
+                        {
+                            "vnf-parameter-name": "fsb_admin_prefix_length",
+                            "vnf-parameter-value": "28"
+                        },
+                        {
+                            "vnf-parameter-name": "ONAPMME_OMCN_vLC_P4_prefix_length",
+                            "vnf-parameter-value": "28"
+                        },
+                        {
+                            "vnf-parameter-name": "gpbs",
+                            "vnf-parameter-value": "2"
+                        },
+                        {
+                            "vnf-parameter-name": "fsb_admin_ip_2",
+                            "vnf-parameter-value": "192.0.0.1"
+                        },
+                        {
+                            "vnf-parameter-name": "internal_mtu",
+                            "vnf-parameter-value": "1500"
+                        },
+                        {
+                            "vnf-parameter-name": "storage_drbd_sync_rate",
+                            "vnf-parameter-value": "0"
+                        },
+                        {
+                            "vnf-parameter-name": "ONAPMME_MEDIA_vLC_P3_net_id",
+                            "vnf-parameter-value": "ONAPMME_MEDIA_vLC_P3"
+                        },
+                        {
+                            "vnf-parameter-name": "extVirtualLinks",
+                            "vnf-parameter-value": "[{\"id\":\"ac1ed33d-8dc1-4800-8ce8-309b99c38eec\",\"tenant\":{\"cloudOwner\":\"CloudOwner\",\"regionName\":\"RegionOne\",\"tenantId\":\"80c26954-2536-4bca-9e20-10f8a2c9c2ad\"},\"resourceId\":\"8ef8cd54-75fd-4372-a6dd-2e05ea8fbd9b\",\"extCps\":[{\"cpdId\":\"f449292f-2f0f-4656-baa3-a18d86bac80f\",\"cpConfig\":[{\"cpInstanceId\":\"07876709-b66f-465c-99a7-0f4d026197f2\",\"linkPortId\":null,\"cpProtocolData\":null}]}],\"extLinkPorts\":null}]"
+                        },
+                        {
+                            "vnf-parameter-name": "vnfIpAddress",
+                            "vnf-parameter-value": "127.0.0.0"
+                        },
+                        {
+                            "vnf-parameter-name": "node_type",
+                            "vnf-parameter-value": "sgsnl"
+                        },
+                        {
+                            "vnf-parameter-name": "ONAPMME_SIG_vLC_P2_net_id",
+                            "vnf-parameter-value": "ONAPMME_SIG_vLC_P2"
+                        },
+                        {
+                            "vnf-parameter-name": "updateOss",
+                            "vnf-parameter-value": "false"
+                        },
+                        {
+                            "vnf-parameter-name": "tmo",
+                            "vnf-parameter-value": "0"
+                        },
+                        {
+                            "vnf-parameter-name": "ss7",
+                            "vnf-parameter-value": "Not_Applicable"
+                        },
+                        {
+                            "vnf-parameter-name": "ONAPMME_OMCN_vLC_P4_net_id",
+                            "vnf-parameter-value": "ONAPMME_OMCN_vLC_P4"
+                        },
+                        {
+                            "vnf-parameter-name": "key_name"
+                        },
+                        {
+                            "vnf-parameter-name": "fsb_admin_dns_server_ip_2"
+                        },
+                        {
+                            "vnf-parameter-name": "time_zone",
+                            "vnf-parameter-value": "GMT"
+                        },
+                        {
+                            "vnf-parameter-name": "enableRollback",
+                            "vnf-parameter-value": "false"
+                        }
+                    ]
+                },
+                "oper-status": 
+                {
+                    "order-status": "PendingAssignment"
+                }
+            }
+        }
+    ]
+}
diff --git a/so-sdn-clients/src/test/resources/__files/SDNCClientPrelaodDataResponseWithInvalidAdditionalAndExtVmData.json b/so-sdn-clients/src/test/resources/__files/SDNCClientPrelaodDataResponseWithInvalidAdditionalAndExtVmData.json
new file mode 100644 (file)
index 0000000..c2cf2b2
--- /dev/null
@@ -0,0 +1,47 @@
+{
+    "vnf-preload-list": [
+        {
+            "vnf-name": "GENERIC_VNF_NAME",
+            "vnf-type": "SIMPLE",
+            "preload-data": 
+            {
+                "network-topology-information": 
+                {
+                },
+                "vnf-topology-information": 
+                {
+                    "vnf-topology-identifier": 
+                    {
+                        "service-type": "vCPE",
+                        "vnf-type": "SIMPLE",
+                        "vnf-name": "GENERIC_VNF_NAME",
+                        "generic-vnf-name": "GENERIC_VNF_NAME",
+                        "generic-vnf-type": "SIMPLE"
+                    },
+                    "vnf-parameters": [
+                        {
+                            "vnf-parameter-name": "extra_console",
+                            "vnf-parameter-value": "ttyS1"
+                        },
+                        {
+                            "vnf-parameter-name": "vnfUsername",
+                            "vnf-parameter-value": "vnf_user"
+                        },
+                        {
+                            "vnf-parameter-name": "additionalParams",
+                            "vnf-parameter-value": "[\"abc\"]"
+                        },
+                        {
+                            "vnf-parameter-name": "extVirtualLinks",
+                            "vnf-parameter-value": "{\"def\":\"123\"}"
+                        }
+                    ]
+                },
+                "oper-status": 
+                {
+                    "order-status": "PendingAssignment"
+                }
+            }
+        }
+    ]
+}
diff --git a/so-sdn-clients/src/test/resources/__files/SDNCClientPrelaodDataResponseWithInvalidData.json b/so-sdn-clients/src/test/resources/__files/SDNCClientPrelaodDataResponseWithInvalidData.json
new file mode 100644 (file)
index 0000000..552adb9
--- /dev/null
@@ -0,0 +1,39 @@
+{
+    "vnf-preload-list": [
+        {
+            "vnf-name": "GENERIC_VNF_NAME",
+            "vnf-type": "SIMPLE",
+            "preload-data": 
+            {
+                "network-topology-information": 
+                {
+                },
+                "vnf-topology-information": 
+                {
+                    "vnf-topology-identifier": 
+                    {
+                        "service-type": "vCPE",
+                        "vnf-type": "SIMPLE",
+                        "vnf-name": "GENERIC_VNF_NAME",
+                        "generic-vnf-name": "GENERIC_VNF_NAME",
+                        "generic-vnf-type": "SIMPLE"
+                    },
+                    "vnf-parameters": [
+                        {
+                            "vnf-parameter-name": "extra_console",
+                            "vnf-parameter-value": "ttyS1"
+                        },
+                        {
+                            "vnf-parameter-name": "vnfUsername",
+                            "vnf-parameter-value": "vnf_user"
+                        }
+                    ]
+                },
+                "oper-status": 
+                {
+                    "order-status": "PendingAssignment"
+                }
+            }
+        }
+    ]
+}
diff --git a/so-sdn-clients/src/test/resources/__files/SDNCClientPrelaodDataResponseWithInvalidVnfParamsTag.json b/so-sdn-clients/src/test/resources/__files/SDNCClientPrelaodDataResponseWithInvalidVnfParamsTag.json
new file mode 100644 (file)
index 0000000..e19ad1c
--- /dev/null
@@ -0,0 +1,34 @@
+{
+    "vnf-preload-list": [
+        {
+            "vnf-name": "GENERIC_VNF_NAME",
+            "vnf-type": "SIMPLE",
+            "preload-data": 
+            {
+                "network-topology-information": 
+                {
+                },
+                "vnf-topology-information": 
+                {
+                    "vnf-topology-identifier": 
+                    {
+                        "service-type": "vCPE",
+                        "vnf-type": "SIMPLE",
+                        "vnf-name": "GENERIC_VNF_NAME",
+                        "generic-vnf-name": "GENERIC_VNF_NAME",
+                        "generic-vnf-type": "SIMPLE"
+                    },
+                    "vnf-parameters": [
+                        {
+                            "hello": "world"
+                        }
+                    ]
+                },
+                "oper-status": 
+                {
+                    "order-status": "PendingAssignment"
+                }
+            }
+        }
+    ]
+}
diff --git a/so-sdn-clients/src/test/resources/__files/SDNCClientPut200Response.json b/so-sdn-clients/src/test/resources/__files/SDNCClientPut200Response.json
new file mode 100644 (file)
index 0000000..286ce4c
--- /dev/null
@@ -0,0 +1,15 @@
+{
+  "output": {
+    "svc-request-id": "5d24d40e-4c77-4c06-94a3-6d168c47a57c",
+    "network-response-information": {
+      "instance-id": "4063e0aa-af13-4872-8473-b40c94f9316b",
+      "object-path": "restconf/config/GENERIC-RESOURCE-API:services/service/2c9c7996-75a7-4f92-becc-9e13e8bd288a/service-data/networks/network/4063e0aa-af13-4872-8473-b40c94f9316b/network-data/network-topology/"
+    },
+    "response-code": "200",
+    "service-response-information": {
+      "instance-id": "2c9c7996-75a7-4f92-becc-9e13e8bd288a"
+    },
+    "response-message": "",
+    "ack-final-indicator": "Y"
+  }
+}
diff --git a/so-sdn-clients/src/test/resources/__files/SDNCClientPut200ResponseNotFinal.json b/so-sdn-clients/src/test/resources/__files/SDNCClientPut200ResponseNotFinal.json
new file mode 100644 (file)
index 0000000..deb4de0
--- /dev/null
@@ -0,0 +1,15 @@
+{
+  "output": {
+    "svc-request-id": "5d24d40e-4c77-4c06-94a3-6d168c47a57c",
+    "network-response-information": {
+      "instance-id": "4063e0aa-af13-4872-8473-b40c94f9316b",
+      "object-path": "restconf/config/GENERIC-RESOURCE-API:services/service/2c9c7996-75a7-4f92-becc-9e13e8bd288a/service-data/networks/network/4063e0aa-af13-4872-8473-b40c94f9316b/network-data/network-topology/"
+    },
+    "response-code": "200",
+    "service-response-information": {
+      "instance-id": "2c9c7996-75a7-4f92-becc-9e13e8bd288a"
+    },
+    "response-message": "",
+    "ack-final-indicator": "N"
+  }
+}
diff --git a/so-sdn-clients/src/test/resources/__files/SDNCClientPut404Response.json b/so-sdn-clients/src/test/resources/__files/SDNCClientPut404Response.json
new file mode 100644 (file)
index 0000000..cf02548
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "output": {
+               "svc-request-id": "086a7a09-1470-4977-8b3e-307488b8811a",
+               "response-code": "404",
+               "response-message": "invalid input: the service-instance does not have any service data in SDNC",
+               "ack-final-indicator": "Y"
+       }
+}
diff --git a/so-sdn-clients/src/test/resources/__files/SDNCClientResponseIncorrectPath.json b/so-sdn-clients/src/test/resources/__files/SDNCClientResponseIncorrectPath.json
new file mode 100644 (file)
index 0000000..7e263b4
--- /dev/null
@@ -0,0 +1,29 @@
+{
+  "vnf-topology": {
+    "tenant": "0422ffb57ba042c0800a29dc85ca70f8",
+    "vnf-topology-identifier-structure": {
+      "vnf-id": "66dac89b-2a5b-4cb9-b22e-a7e4488fb3db",
+      "vnf-type": "InfraMSO_vSAMP10a_Service/InfraMSO_vSAMP10a-2 0",
+      "vnf-name": "MSO-DEV-VNF-1806HF1-InfraMSO_vSAMP10a-1XXX-GR_21"
+    },
+    "aic-clli": "AUSTTXGR",
+    "vnf-resource-assignments": {
+      "availability-zones": {
+        "availability-zone": [
+               {
+                       "test":"AZ-MN02"
+               }
+        ],
+        "max-count": 1
+      }
+    },
+    "aic-cloud-region": "mtn6",
+    "onap-model-information": {
+      "model-customization-uuid": "034226ae-879a-46b5-855c-d02babcb6cb6",
+      "model-uuid": "cb79c25f-b30d-4d95-afb5-97be4021f3db",
+      "model-invariant-uuid": "e93d3a7a-446d-486b-ae48-d474a9156064",
+      "model-name": "InfraMSO_vSAMP10a-2",
+      "model-version": "1.0"
+    }
+  }
+}
\ No newline at end of file
diff --git a/so-sdn-clients/src/test/resources/application-test.yaml b/so-sdn-clients/src/test/resources/application-test.yaml
new file mode 100644 (file)
index 0000000..b64fc33
--- /dev/null
@@ -0,0 +1,231 @@
+aai:
+  auth: 5A1272FE739BECA4D4374A86B25C021DFE6745E3BB7BE6836BF64A6059B8220E586C21FD7567AF41DB42571EB7
+  endpoint: http://localhost:${wiremock.server.port}
+  pnfEntryNotificationTimeout: P14D
+appc:
+  client:
+    key: iaEMAfjsVsZnraBP
+    response:
+      timeout: '120000'
+    secret: wcivUjsjXzmGFBfxMmyJu9dz
+    poolMembers: localhost:3904
+    service: ueb
+    topic:
+      read:
+        name: APPC-TEST-AMDOCS2
+        timeout: '120000'
+      write: APPC-TEST-AMDOCS1-DEV3
+      sdnc:
+        read: SDNC-LCM-READ
+        write: SDNC-LCM-WRITE
+log:
+  debug:
+    CompleteMsoProcess: 'true'
+    CreateNetworkInstanceInfra: 'true'
+    CreateServiceInstanceInfra: 'true'
+    DeleteNetworkInstanceInfra: 'true'
+    FalloutHandler: 'true'
+    UpdateNetworkInstanceInfra: 'true'
+    VnfAdapterRestV1: 'true'
+    sdncAdapter: 'true'
+    vnfAdapterCreateV1: 'true'
+    vnfAdapterRestV1: 'true'
+pnf:
+  dmaap:
+    host: hostTest
+    port: 1234
+    protocol: http
+    uriPathPrefix: events
+    topicName: pnfReady
+    consumerGroup: consumerGroup
+    consumerId: consumerId
+    topicListenerDelayInSeconds: 5
+mso:
+  naming:
+    endpoint: http://localhost:${wiremock.server.port}/web/service/v1/genNetworkElementName
+    auth: Basic YnBlbDptc28tZGItMTUwNyE= 
+  adapters:
+    requestDb:
+      auth: Basic YnBlbDptc28tZGItMTUwNyE=
+      endpoint: http://localhost:8081
+    completemsoprocess:
+      endpoint: http://localhost:${wiremock.server.port}/CompleteMsoProcess
+    db:
+      auth: 5E12ACACBD552A415E081E29F2C4772F9835792A51C766CCFDD7433DB5220B59969CB2798C
+      endpoint: http://localhost:${wiremock.server.port}/dbadapters/RequestsDbAdapter
+      spring:
+        endpoint: http://localhost:${wiremock.server.port}
+    network:
+      endpoint: http://localhost:${wiremock.server.port}/networks/NetworkAdapter
+      rest:
+        endpoint: http://localhost:${wiremock.server.port}/networks/rest/v1/networks
+    openecomp:
+      db:
+        endpoint: http://localhost:${wiremock.server.port}/dbadapters/RequestsDbAdapter
+    po:
+      auth: 5E12ACACBD552A415E081E29F2C4772F9835792A51C766CCFDD7433DB5220B59969CB2798C
+      password: 3141634BF7E070AA289CF2892C986C0B
+    sdnc:
+      endpoint: http://localhost:${wiremock.server.port}/SDNCAdapter
+      rest:
+        endpoint: http://localhost:${wiremock.server.port}/SDNCAdapter/v1/sdnc
+      timeout: PT60S
+    tenant:
+      endpoint: http://localhost:${wiremock.server.port}/tenantAdapterMock
+    vnf:
+      endpoint: http://localhost:${wiremock.server.port}/vnfs/VnfAdapter
+      rest:
+        endpoint: http://localhost:${wiremock.server.port}/services/rest/v1/vnfs
+    volume-groups:
+      rest:
+        endpoint: http://localhost:${wiremock.server.port}/services/rest/v1/volume-groups
+    vnf-async:
+      endpoint: http://localhost:${wiremock.server.port}/vnfs/VnfAdapterAsync
+    workflow:
+      message:
+        endpoint: http://localhost:${wiremock.server.port}/workflows/messages/message
+
+  async:
+      core-pool-size: 50
+      max-pool-size: 50
+      queue-capacity: 500
+
+  bpmn:
+    optimisticlockingexception:
+      retrycount: '3'
+    cloudRegionIdsToSkipAddingVnfEdgesTo: test25Region1,test25Region2,test25Region99
+  callbackRetryAttempts: '5'
+  catalog:
+    db:
+      endpoint: http://localhost:${wiremock.server.port}/
+      spring:
+        endpoint: http://localhost:${wiremock.server.port}  
+  correlation:
+        timeout: 60
+  db:
+    auth: Basic YnBlbDptc28tZGItMTUwNyE=
+  default:
+    adapter:
+      namespace: http://org.onap.so
+  healthcheck:
+    log:
+      debug: 'false'
+  infra:
+    customer:
+      id: testCustIdInfra
+  logPath: logs
+  msoKey: 07a7159d3bf51a0e53be7a8f89699be7
+  po:
+    timeout: PT60S
+  request:
+    db:
+      endpoint: http://localhost:${wiremock.server.port}/
+  rollback: 'true' 
+  site-name: localDevEnv
+  workflow:    
+    default:
+      aai:
+        cloud-region:
+          version: '9'
+        generic-vnf:
+          version: '9'
+    global:
+      default:
+        aai:
+          namespace: http://org.openecomp.aai.inventory/
+          version: '8'
+    message:
+      endpoint: http://localhost:${wiremock.server.port}/mso/WorkflowMesssage
+    notification:
+      name: GenericNotificationService
+    sdncadapter:
+      callback: http://localhost:${wiremock.server.port}/mso/SDNCAdapterCallbackService
+    vnfadapter:
+      create:
+        callback: http://localhost:${wiremock.server.port}/mso/vnfAdapterNotify
+      delete:
+        callback: http://localhost:${wiremock.server.port}/mso/vnfAdapterNotify
+      query:
+        callback: http://localhost:${wiremock.server.port}/mso/services/VNFAdapterQuerCallbackV1
+      rollback:
+        callback: http://localhost:${wiremock.server.port}/mso/vnfAdapterNotify
+  global:
+    dmaap:
+      username: dmaapUsername
+      password: dmaapPassword
+      host: http://localhost:28090
+      publisher:
+        topic: com.att.mso.asyncStatusUpdate
+policy:
+  auth: Basic dGVzdHBkcDphbHBoYTEyMw==
+  client:
+    auth: Basic bTAzNzQzOnBvbGljeVIwY2sk
+  endpoint: https://localhost:8081/pdp/api/
+  environment: TEST
+sdnc:
+  auth: Basic YWRtaW46YWRtaW4=
+  host: http://localhost:${wiremock.server.port}
+  path: /restconf/operations/GENERIC-RESOURCE-API
+sniro:
+  conductor:
+    enabled: true
+    host: http://localhost:${wiremock.server.port}
+    uri: /v1/release-orders
+    headers.auth: Basic dGVzdDp0ZXN0cHdk
+  manager:
+    timeout: PT30M
+    host: http://localhost:${wiremock.server.port}
+    uri.v1: /sniro/api/v2/placement
+    uri.v2: /sniro/api/placement/v2
+    headers.auth: Basic dGVzdDp0ZXN0cHdk
+    headers.patchVersion: 1
+    headers.minorVersion: 1
+    headers.latestVersion: 2
+oof:
+  timeout: PT30M
+  host: http://localhost:${wiremock.server.port}
+  uri: /api/oof/v1/placement
+  headers.auth: Basic dGVzdDp0ZXN0cHdk
+org:
+  onap:
+    so:
+      cloud-owner: att-aic
+spring:
+  datasource:
+    jdbc-url: jdbc:mariadb://localhost:3307/camundabpmn
+    username: root
+    password: password
+    driver-class-name: org.mariadb.jdbc.Driver
+    initialization-mode: always
+  jpa:
+    generate-ddl: false
+    show-sql: false
+    hibernate:
+      ddl-auto: none
+      naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
+      enable-lazy-load-no-trans: true
+    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
+sdno:
+  health-check:
+    dmaap:
+      password: password
+      publisher:
+        topic: sdno.test-health-diagnostic-v02
+      subscriber:
+        topic: sdno.test-health-diagnostic-v02
+      username: username
+mariaDB4j:
+  dataDir:
+  port: 3307
+  databaseName: camundabpmn
+camunda:
+  bpm:
+    metrics:
+      enabled: false
+      db-reporter-activate: false
+# CDSProcessingClient
+cds:
+  endpoint: localhost
+  port: 11012
+  auth: Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==
+  timeout: 60
diff --git a/so-sdn-clients/src/test/resources/dmaap.properties b/so-sdn-clients/src/test/resources/dmaap.properties
new file mode 100644 (file)
index 0000000..5593455
--- /dev/null
@@ -0,0 +1,10 @@
+sdno.health-check.dmaap.username=testuser
+sdno.health-check.dmaap.password=eHQ1cUJrOUc
+sdno.health-check.dmaap.subscriber.topic=com.att.sdno.test-health-diagnostic-v02
+sdno.health-check.dmaap.publisher.topic=com.att.sdno.test-health-diagnostic-v02
+ruby.create-ticket-request.dmaap.username=testuser
+ruby.create-ticket-request.dmaap.password=eHQ1cUJrOUc
+ruby.create-ticket-request.publisher.topic=com.att.pdas.st1.msoCMFallout-v1
+ruby.create-ticket-request.dmaap.auth=81B7E3533B91A6706830611FB9A8ECE529BBCCE754B1F1520FA7C8698B42F97235BEFA993A387E664D6352C63A6185D68DA7F0B1D360637CBA102CB166E3E62C11EB1F75386D3506BCECE51E54
+sdno.health-check.dmaap.auth=81B7E3533B91A6706830611FB9A8ECE529BBCCE754B1F1520FA7C8698B42F97235BEFA993A387E664D6352C63A6185D68DA7F0B1D360637CBA102CB166E3E62C11EB1F75386D3506BCECE51E54
+mso.msoKey=07a7159d3bf51a0e53be7a8f89699be7
\ No newline at end of file
diff --git a/so-sdn-clients/src/test/resources/schema.sql b/so-sdn-clients/src/test/resources/schema.sql
new file mode 100644 (file)
index 0000000..5ae6a2d
--- /dev/null
@@ -0,0 +1,1195 @@
+
+USE `camundabpmn`;
+
+
+create table ACT_GE_PROPERTY (
+    NAME_ varchar(64),
+    VALUE_ varchar(300),
+    REV_ integer,
+    primary key (NAME_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+
+create table ACT_GE_BYTEARRAY (
+    ID_ varchar(64),
+    REV_ integer,
+    NAME_ varchar(255),
+    DEPLOYMENT_ID_ varchar(64),
+    BYTES_ LONGBLOB,
+    GENERATED_ TINYINT,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RE_DEPLOYMENT (
+    ID_ varchar(64),
+    NAME_ varchar(255),
+    DEPLOY_TIME_ timestamp(3),
+    SOURCE_ varchar(255),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_EXECUTION (
+    ID_ varchar(64),
+    REV_ integer,
+    PROC_INST_ID_ varchar(64),
+    BUSINESS_KEY_ varchar(255),
+    PARENT_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    SUPER_EXEC_ varchar(64),
+    SUPER_CASE_EXEC_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    ACT_ID_ varchar(255),
+    ACT_INST_ID_ varchar(64),
+    IS_ACTIVE_ TINYINT,
+    IS_CONCURRENT_ TINYINT,
+    IS_SCOPE_ TINYINT,
+    IS_EVENT_SCOPE_ TINYINT,
+    SUSPENSION_STATE_ integer,
+    CACHED_ENT_STATE_ integer,
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_JOB (
+    ID_ varchar(64) NOT NULL,
+    REV_ integer,
+    TYPE_ varchar(255) NOT NULL,
+    LOCK_EXP_TIME_ timestamp(3) NULL,
+    LOCK_OWNER_ varchar(255),
+    EXCLUSIVE_ boolean,
+    EXECUTION_ID_ varchar(64),
+    PROCESS_INSTANCE_ID_ varchar(64),
+    PROCESS_DEF_ID_ varchar(64),
+    PROCESS_DEF_KEY_ varchar(255),
+    RETRIES_ integer,
+    EXCEPTION_STACK_ID_ varchar(64),
+    EXCEPTION_MSG_ varchar(4000),
+    DUEDATE_ timestamp(3) NULL,
+    REPEAT_ varchar(255),
+    HANDLER_TYPE_ varchar(255),
+    HANDLER_CFG_ varchar(4000),
+    DEPLOYMENT_ID_ varchar(64),
+    SUSPENSION_STATE_ integer NOT NULL DEFAULT 1,
+    JOB_DEF_ID_ varchar(64),
+    PRIORITY_ bigint NOT NULL DEFAULT 0,
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_JOBDEF (
+    ID_ varchar(64) NOT NULL,
+    REV_ integer,
+    PROC_DEF_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    ACT_ID_ varchar(255),
+    JOB_TYPE_ varchar(255) NOT NULL,
+    JOB_CONFIGURATION_ varchar(255),
+    SUSPENSION_STATE_ integer,
+    JOB_PRIORITY_ bigint,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RE_PROCDEF (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    CATEGORY_ varchar(255),
+    NAME_ varchar(255),
+    KEY_ varchar(255) not null,
+    VERSION_ integer not null,
+    DEPLOYMENT_ID_ varchar(64),
+    RESOURCE_NAME_ varchar(4000),
+    DGRM_RESOURCE_NAME_ varchar(4000),
+    HAS_START_FORM_KEY_ TINYINT,
+    SUSPENSION_STATE_ integer,
+    TENANT_ID_ varchar(64),
+    VERSION_TAG_ varchar(64),
+    HISTORY_TTL_ integer,
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_TASK (
+    ID_ varchar(64),
+    REV_ integer,
+    EXECUTION_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_DEF_ID_ varchar(64),
+    NAME_ varchar(255),
+    PARENT_TASK_ID_ varchar(64),
+    DESCRIPTION_ varchar(4000),
+    TASK_DEF_KEY_ varchar(255),
+    OWNER_ varchar(255),
+    ASSIGNEE_ varchar(255),
+    DELEGATION_ varchar(64),
+    PRIORITY_ integer,
+    CREATE_TIME_ timestamp(3),
+    DUE_DATE_ datetime(3),
+    FOLLOW_UP_DATE_ datetime(3),
+    SUSPENSION_STATE_ integer,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_IDENTITYLINK (
+    ID_ varchar(64),
+    REV_ integer,
+    GROUP_ID_ varchar(255),
+    TYPE_ varchar(255),
+    USER_ID_ varchar(255),
+    TASK_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_VARIABLE (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    TYPE_ varchar(255) not null,
+    NAME_ varchar(255) not null,
+    EXECUTION_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    TASK_ID_ varchar(64),
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double,
+    LONG_ bigint,
+    TEXT_ LONGBLOB,
+    TEXT2_ LONGBLOB,
+    VAR_SCOPE_ varchar(64) not null,
+    SEQUENCE_COUNTER_ bigint,
+    IS_CONCURRENT_LOCAL_ TINYINT,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_EVENT_SUBSCR (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    EVENT_TYPE_ varchar(255) not null,
+    EVENT_NAME_ varchar(255),
+    EXECUTION_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    ACTIVITY_ID_ varchar(255),
+    CONFIGURATION_ varchar(255),
+    CREATED_ timestamp(3) not null,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_INCIDENT (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  INCIDENT_TIMESTAMP_ timestamp(3) not null,
+  INCIDENT_MSG_ varchar(4000),
+  INCIDENT_TYPE_ varchar(255) not null,
+  EXECUTION_ID_ varchar(64),
+  ACTIVITY_ID_ varchar(255),
+  PROC_INST_ID_ varchar(64),
+  PROC_DEF_ID_ varchar(64),
+  CAUSE_INCIDENT_ID_ varchar(64),
+  ROOT_CAUSE_INCIDENT_ID_ varchar(64),
+  CONFIGURATION_ varchar(255),
+  TENANT_ID_ varchar(64),
+  JOB_DEF_ID_ varchar(64),
+  primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_AUTHORIZATION (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  TYPE_ integer not null,
+  GROUP_ID_ varchar(255),
+  USER_ID_ varchar(255),
+  RESOURCE_TYPE_ integer not null,
+  RESOURCE_ID_ varchar(255),
+  PERMS_ integer,
+  primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_FILTER (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  RESOURCE_TYPE_ varchar(255) not null,
+  NAME_ varchar(255) not null,
+  OWNER_ varchar(255),
+  QUERY_ LONGTEXT not null,
+  PROPERTIES_ LONGTEXT,
+  primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_METER_LOG (
+  ID_ varchar(64) not null,
+  NAME_ varchar(64) not null,
+  REPORTER_ varchar(255),
+  VALUE_ bigint,
+  TIMESTAMP_ timestamp(3),
+  MILLISECONDS_ bigint DEFAULT 0,
+  primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_EXT_TASK (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  WORKER_ID_ varchar(255),
+  TOPIC_NAME_ varchar(255),
+  RETRIES_ integer,
+  ERROR_MSG_ varchar(4000),
+  ERROR_DETAILS_ID_ varchar(64),
+  LOCK_EXP_TIME_ timestamp(3) NULL,
+  SUSPENSION_STATE_ integer,
+  EXECUTION_ID_ varchar(64),
+  PROC_INST_ID_ varchar(64),
+  PROC_DEF_ID_ varchar(64),
+  PROC_DEF_KEY_ varchar(255),
+  ACT_ID_ varchar(255),
+  ACT_INST_ID_ varchar(64),
+  TENANT_ID_ varchar(64),
+  PRIORITY_ bigint NOT NULL DEFAULT 0,
+  primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_RU_BATCH (
+  ID_ varchar(64) not null,
+  REV_ integer not null,
+  TYPE_ varchar(255),
+  TOTAL_JOBS_ integer,
+  JOBS_CREATED_ integer,
+  JOBS_PER_SEED_ integer,
+  INVOCATIONS_PER_JOB_ integer,
+  SEED_JOB_DEF_ID_ varchar(64),
+  BATCH_JOB_DEF_ID_ varchar(64),
+  MONITOR_JOB_DEF_ID_ varchar(64),
+  SUSPENSION_STATE_ integer,
+  CONFIGURATION_ varchar(255),
+  TENANT_ID_ varchar(64),
+  primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create index ACT_IDX_EXEC_BUSKEY on ACT_RU_EXECUTION(BUSINESS_KEY_);
+create index ACT_IDX_EXEC_TENANT_ID on ACT_RU_EXECUTION(TENANT_ID_);
+create index ACT_IDX_TASK_CREATE on ACT_RU_TASK(CREATE_TIME_);
+create index ACT_IDX_TASK_ASSIGNEE on ACT_RU_TASK(ASSIGNEE_);
+create index ACT_IDX_TASK_TENANT_ID on ACT_RU_TASK(TENANT_ID_);
+create index ACT_IDX_IDENT_LNK_USER on ACT_RU_IDENTITYLINK(USER_ID_);
+create index ACT_IDX_IDENT_LNK_GROUP on ACT_RU_IDENTITYLINK(GROUP_ID_);
+create index ACT_IDX_EVENT_SUBSCR_CONFIG_ on ACT_RU_EVENT_SUBSCR(CONFIGURATION_);
+create index ACT_IDX_EVENT_SUBSCR_TENANT_ID on ACT_RU_EVENT_SUBSCR(TENANT_ID_);
+create index ACT_IDX_VARIABLE_TASK_ID on ACT_RU_VARIABLE(TASK_ID_);
+create index ACT_IDX_VARIABLE_TENANT_ID on ACT_RU_VARIABLE(TENANT_ID_);
+create index ACT_IDX_ATHRZ_PROCEDEF on ACT_RU_IDENTITYLINK(PROC_DEF_ID_);
+create index ACT_IDX_INC_CONFIGURATION on ACT_RU_INCIDENT(CONFIGURATION_);
+create index ACT_IDX_INC_TENANT_ID on ACT_RU_INCIDENT(TENANT_ID_);
+-- CAM-5914
+create index ACT_IDX_JOB_EXECUTION_ID on ACT_RU_JOB(EXECUTION_ID_);
+-- this index needs to be limited in mariadb see CAM-6938
+create index ACT_IDX_JOB_HANDLER on ACT_RU_JOB(HANDLER_TYPE_(100),HANDLER_CFG_(155));
+create index ACT_IDX_JOB_PROCINST on ACT_RU_JOB(PROCESS_INSTANCE_ID_);
+create index ACT_IDX_JOB_TENANT_ID on ACT_RU_JOB(TENANT_ID_);
+create index ACT_IDX_JOBDEF_TENANT_ID on ACT_RU_JOBDEF(TENANT_ID_);
+
+-- new metric milliseconds column
+CREATE INDEX ACT_IDX_METER_LOG_MS ON ACT_RU_METER_LOG(MILLISECONDS_);
+CREATE INDEX ACT_IDX_METER_LOG_NAME_MS ON ACT_RU_METER_LOG(NAME_, MILLISECONDS_);
+CREATE INDEX ACT_IDX_METER_LOG_REPORT ON ACT_RU_METER_LOG(NAME_, REPORTER_, MILLISECONDS_);
+
+-- old metric timestamp column
+CREATE INDEX ACT_IDX_METER_LOG_TIME ON ACT_RU_METER_LOG(TIMESTAMP_);
+CREATE INDEX ACT_IDX_METER_LOG ON ACT_RU_METER_LOG(NAME_, TIMESTAMP_);
+
+create index ACT_IDX_EXT_TASK_TOPIC on ACT_RU_EXT_TASK(TOPIC_NAME_);
+create index ACT_IDX_EXT_TASK_TENANT_ID on ACT_RU_EXT_TASK(TENANT_ID_);
+create index ACT_IDX_EXT_TASK_PRIORITY ON ACT_RU_EXT_TASK(PRIORITY_);
+create index ACT_IDX_EXT_TASK_ERR_DETAILS ON ACT_RU_EXT_TASK(ERROR_DETAILS_ID_);
+create index ACT_IDX_AUTH_GROUP_ID ON ACT_RU_AUTHORIZATION(GROUP_ID_);
+create index ACT_IDX_JOB_JOB_DEF_ID on ACT_RU_JOB(JOB_DEF_ID_);
+
+alter table ACT_GE_BYTEARRAY
+    add constraint ACT_FK_BYTEARR_DEPL
+    foreign key (DEPLOYMENT_ID_)
+    references ACT_RE_DEPLOYMENT (ID_);
+
+alter table ACT_RU_EXECUTION
+    add constraint ACT_FK_EXE_PROCINST
+    foreign key (PROC_INST_ID_)
+    references ACT_RU_EXECUTION (ID_) on delete cascade on update cascade;
+
+alter table ACT_RU_EXECUTION
+    add constraint ACT_FK_EXE_PARENT
+    foreign key (PARENT_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_EXECUTION
+    add constraint ACT_FK_EXE_SUPER
+    foreign key (SUPER_EXEC_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_EXECUTION
+    add constraint ACT_FK_EXE_PROCDEF
+    foreign key (PROC_DEF_ID_)
+    references ACT_RE_PROCDEF (ID_);
+
+alter table ACT_RU_IDENTITYLINK
+    add constraint ACT_FK_TSKASS_TASK
+    foreign key (TASK_ID_)
+    references ACT_RU_TASK (ID_);
+
+alter table ACT_RU_IDENTITYLINK
+    add constraint ACT_FK_ATHRZ_PROCEDEF
+    foreign key (PROC_DEF_ID_)
+    references ACT_RE_PROCDEF(ID_);
+
+alter table ACT_RU_TASK
+    add constraint ACT_FK_TASK_EXE
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_TASK
+    add constraint ACT_FK_TASK_PROCINST
+    foreign key (PROC_INST_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_TASK
+  add constraint ACT_FK_TASK_PROCDEF
+  foreign key (PROC_DEF_ID_)
+  references ACT_RE_PROCDEF (ID_);
+
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_EXE
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_PROCINST
+    foreign key (PROC_INST_ID_)
+    references ACT_RU_EXECUTION(ID_);
+
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_BYTEARRAY
+    foreign key (BYTEARRAY_ID_)
+    references ACT_GE_BYTEARRAY (ID_);
+
+alter table ACT_RU_JOB
+    add constraint ACT_FK_JOB_EXCEPTION
+    foreign key (EXCEPTION_STACK_ID_)
+    references ACT_GE_BYTEARRAY (ID_);
+
+alter table ACT_RU_EVENT_SUBSCR
+    add constraint ACT_FK_EVENT_EXEC
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION(ID_);
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_EXE
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_PROCINST
+    foreign key (PROC_INST_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_PROCDEF
+    foreign key (PROC_DEF_ID_)
+    references ACT_RE_PROCDEF (ID_);
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_CAUSE
+    foreign key (CAUSE_INCIDENT_ID_)
+    references ACT_RU_INCIDENT (ID_) on delete cascade on update cascade;
+
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_RCAUSE
+    foreign key (ROOT_CAUSE_INCIDENT_ID_)
+    references ACT_RU_INCIDENT (ID_) on delete cascade on update cascade;
+
+alter table ACT_RU_EXT_TASK
+    add constraint ACT_FK_EXT_TASK_ERROR_DETAILS
+    foreign key (ERROR_DETAILS_ID_)
+    references ACT_GE_BYTEARRAY (ID_);
+
+create index ACT_IDX_INC_JOB_DEF on ACT_RU_INCIDENT(JOB_DEF_ID_);
+alter table ACT_RU_INCIDENT
+    add constraint ACT_FK_INC_JOB_DEF
+    foreign key (JOB_DEF_ID_)
+    references ACT_RU_JOBDEF (ID_);
+
+alter table ACT_RU_AUTHORIZATION
+    add constraint ACT_UNIQ_AUTH_USER
+    unique (USER_ID_,TYPE_,RESOURCE_TYPE_,RESOURCE_ID_);
+
+alter table ACT_RU_AUTHORIZATION
+    add constraint ACT_UNIQ_AUTH_GROUP
+    unique (GROUP_ID_,TYPE_,RESOURCE_TYPE_,RESOURCE_ID_);
+
+alter table ACT_RU_VARIABLE
+    add constraint ACT_UNIQ_VARIABLE
+    unique (VAR_SCOPE_, NAME_);
+
+alter table ACT_RU_EXT_TASK
+    add constraint ACT_FK_EXT_TASK_EXE
+    foreign key (EXECUTION_ID_)
+    references ACT_RU_EXECUTION (ID_);
+
+create index ACT_IDX_BATCH_SEED_JOB_DEF ON ACT_RU_BATCH(SEED_JOB_DEF_ID_);
+alter table ACT_RU_BATCH
+    add constraint ACT_FK_BATCH_SEED_JOB_DEF
+    foreign key (SEED_JOB_DEF_ID_)
+    references ACT_RU_JOBDEF (ID_);
+
+create index ACT_IDX_BATCH_MONITOR_JOB_DEF ON ACT_RU_BATCH(MONITOR_JOB_DEF_ID_);
+alter table ACT_RU_BATCH
+    add constraint ACT_FK_BATCH_MONITOR_JOB_DEF
+    foreign key (MONITOR_JOB_DEF_ID_)
+    references ACT_RU_JOBDEF (ID_);
+
+create index ACT_IDX_BATCH_JOB_DEF ON ACT_RU_BATCH(BATCH_JOB_DEF_ID_);
+alter table ACT_RU_BATCH
+    add constraint ACT_FK_BATCH_JOB_DEF
+    foreign key (BATCH_JOB_DEF_ID_)
+    references ACT_RU_JOBDEF (ID_);
+
+-- indexes for deadlock problems - https://app.camunda.com/jira/browse/CAM-2567 --
+create index ACT_IDX_INC_CAUSEINCID on ACT_RU_INCIDENT(CAUSE_INCIDENT_ID_);
+create index ACT_IDX_INC_EXID on ACT_RU_INCIDENT(EXECUTION_ID_);
+create index ACT_IDX_INC_PROCDEFID on ACT_RU_INCIDENT(PROC_DEF_ID_);
+create index ACT_IDX_INC_PROCINSTID on ACT_RU_INCIDENT(PROC_INST_ID_);
+create index ACT_IDX_INC_ROOTCAUSEINCID on ACT_RU_INCIDENT(ROOT_CAUSE_INCIDENT_ID_);
+-- index for deadlock problem - https://app.camunda.com/jira/browse/CAM-4440 --
+create index ACT_IDX_AUTH_RESOURCE_ID on ACT_RU_AUTHORIZATION(RESOURCE_ID_);
+-- index to prevent deadlock on fk constraint - https://app.camunda.com/jira/browse/CAM-5440 --
+create index ACT_IDX_EXT_TASK_EXEC on ACT_RU_EXT_TASK(EXECUTION_ID_);
+
+-- indexes to improve deployment
+create index ACT_IDX_BYTEARRAY_NAME on ACT_GE_BYTEARRAY(NAME_);
+create index ACT_IDX_DEPLOYMENT_NAME on ACT_RE_DEPLOYMENT(NAME_);
+create index ACT_IDX_DEPLOYMENT_TENANT_ID on ACT_RE_DEPLOYMENT(TENANT_ID_);
+create index ACT_IDX_JOBDEF_PROC_DEF_ID ON ACT_RU_JOBDEF(PROC_DEF_ID_);
+create index ACT_IDX_JOB_HANDLER_TYPE ON ACT_RU_JOB(HANDLER_TYPE_);
+create index ACT_IDX_EVENT_SUBSCR_EVT_NAME ON ACT_RU_EVENT_SUBSCR(EVENT_NAME_);
+create index ACT_IDX_PROCDEF_DEPLOYMENT_ID ON ACT_RE_PROCDEF(DEPLOYMENT_ID_);
+create index ACT_IDX_PROCDEF_TENANT_ID ON ACT_RE_PROCDEF(TENANT_ID_);
+create index ACT_IDX_PROCDEF_VER_TAG ON ACT_RE_PROCDEF(VERSION_TAG_);
+-- create case definition table --
+create table ACT_RE_CASE_DEF (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    CATEGORY_ varchar(255),
+    NAME_ varchar(255),
+    KEY_ varchar(255) not null,
+    VERSION_ integer not null,
+    DEPLOYMENT_ID_ varchar(64),
+    RESOURCE_NAME_ varchar(4000),
+    DGRM_RESOURCE_NAME_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    HISTORY_TTL_ integer,
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+-- create case execution table --
+create table ACT_RU_CASE_EXECUTION (
+    ID_ varchar(64) NOT NULL,
+    REV_ integer,
+    CASE_INST_ID_ varchar(64),
+    SUPER_CASE_EXEC_ varchar(64),
+    SUPER_EXEC_ varchar(64),
+    BUSINESS_KEY_ varchar(255),
+    PARENT_ID_ varchar(64),
+    CASE_DEF_ID_ varchar(64),
+    ACT_ID_ varchar(255),
+    PREV_STATE_ integer,
+    CURRENT_STATE_ integer,
+    REQUIRED_ boolean,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+-- create case sentry part table --
+
+create table ACT_RU_CASE_SENTRY_PART (
+    ID_ varchar(64) NOT NULL,
+    REV_ integer,
+    CASE_INST_ID_ varchar(64),
+    CASE_EXEC_ID_ varchar(64),
+    SENTRY_ID_ varchar(255),
+    TYPE_ varchar(255),
+    SOURCE_CASE_EXEC_ID_ varchar(64),
+    STANDARD_EVENT_ varchar(255),
+    SOURCE_ varchar(255),
+    VARIABLE_EVENT_ varchar(255),
+    VARIABLE_NAME_ varchar(255),
+    SATISFIED_ boolean,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+-- create index on business key --
+create index ACT_IDX_CASE_EXEC_BUSKEY on ACT_RU_CASE_EXECUTION(BUSINESS_KEY_);
+
+-- create foreign key constraints on ACT_RU_CASE_EXECUTION --
+alter table ACT_RU_CASE_EXECUTION
+    add constraint ACT_FK_CASE_EXE_CASE_INST
+    foreign key (CASE_INST_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_) on delete cascade on update cascade;
+
+alter table ACT_RU_CASE_EXECUTION
+    add constraint ACT_FK_CASE_EXE_PARENT
+    foreign key (PARENT_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+alter table ACT_RU_CASE_EXECUTION
+    add constraint ACT_FK_CASE_EXE_CASE_DEF
+    foreign key (CASE_DEF_ID_)
+    references ACT_RE_CASE_DEF(ID_);
+
+-- create foreign key constraints on ACT_RU_VARIABLE --
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_CASE_EXE
+    foreign key (CASE_EXECUTION_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+alter table ACT_RU_VARIABLE
+    add constraint ACT_FK_VAR_CASE_INST
+    foreign key (CASE_INST_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+-- create foreign key constraints on ACT_RU_TASK --
+alter table ACT_RU_TASK
+    add constraint ACT_FK_TASK_CASE_EXE
+    foreign key (CASE_EXECUTION_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+alter table ACT_RU_TASK
+  add constraint ACT_FK_TASK_CASE_DEF
+  foreign key (CASE_DEF_ID_)
+  references ACT_RE_CASE_DEF(ID_);
+
+-- create foreign key constraints on ACT_RU_CASE_SENTRY_PART --
+alter table ACT_RU_CASE_SENTRY_PART
+    add constraint ACT_FK_CASE_SENTRY_CASE_INST
+    foreign key (CASE_INST_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+alter table ACT_RU_CASE_SENTRY_PART
+    add constraint ACT_FK_CASE_SENTRY_CASE_EXEC
+    foreign key (CASE_EXEC_ID_)
+    references ACT_RU_CASE_EXECUTION(ID_);
+
+create index ACT_IDX_CASE_DEF_TENANT_ID on ACT_RE_CASE_DEF(TENANT_ID_);
+create index ACT_IDX_CASE_EXEC_TENANT_ID on ACT_RU_CASE_EXECUTION(TENANT_ID_);
+-- create decision definition table --
+create table ACT_RE_DECISION_DEF (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    CATEGORY_ varchar(255),
+    NAME_ varchar(255),
+    KEY_ varchar(255) not null,
+    VERSION_ integer not null,
+    DEPLOYMENT_ID_ varchar(64),
+    RESOURCE_NAME_ varchar(4000),
+    DGRM_RESOURCE_NAME_ varchar(4000),
+    DEC_REQ_ID_ varchar(64),
+    DEC_REQ_KEY_ varchar(255),
+    TENANT_ID_ varchar(64),
+    HISTORY_TTL_ integer,
+    VERSION_TAG_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+-- create decision requirements definition table --
+create table ACT_RE_DECISION_REQ_DEF (
+    ID_ varchar(64) NOT NULL,
+    REV_ integer,
+    CATEGORY_ varchar(255),
+    NAME_ varchar(255),
+    KEY_ varchar(255) NOT NULL,
+    VERSION_ integer NOT NULL,
+    DEPLOYMENT_ID_ varchar(64),
+    RESOURCE_NAME_ varchar(4000),
+    DGRM_RESOURCE_NAME_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+alter table ACT_RE_DECISION_DEF
+    add constraint ACT_FK_DEC_REQ
+    foreign key (DEC_REQ_ID_)
+    references ACT_RE_DECISION_REQ_DEF(ID_);
+
+create index ACT_IDX_DEC_DEF_TENANT_ID on ACT_RE_DECISION_DEF(TENANT_ID_);
+create index ACT_IDX_DEC_DEF_REQ_ID on ACT_RE_DECISION_DEF(DEC_REQ_ID_);
+create index ACT_IDX_DEC_REQ_DEF_TENANT_ID on ACT_RE_DECISION_REQ_DEF(TENANT_ID_);
+create table ACT_HI_PROCINST (
+    ID_ varchar(64) not null,
+    PROC_INST_ID_ varchar(64) not null,
+    BUSINESS_KEY_ varchar(255),
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64) not null,
+    START_TIME_ datetime(3) not null,
+    END_TIME_ datetime(3),
+    DURATION_ bigint,
+    START_USER_ID_ varchar(255),
+    START_ACT_ID_ varchar(255),
+    END_ACT_ID_ varchar(255),
+    SUPER_PROCESS_INSTANCE_ID_ varchar(64),
+    SUPER_CASE_INSTANCE_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    DELETE_REASON_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    STATE_ varchar(255),
+    primary key (ID_),
+    unique (PROC_INST_ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_ACTINST (
+    ID_ varchar(64) not null,
+    PARENT_ACT_INST_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64) not null,
+    PROC_INST_ID_ varchar(64) not null,
+    EXECUTION_ID_ varchar(64) not null,
+    ACT_ID_ varchar(255) not null,
+    TASK_ID_ varchar(64),
+    CALL_PROC_INST_ID_ varchar(64),
+    CALL_CASE_INST_ID_ varchar(64),
+    ACT_NAME_ varchar(255),
+    ACT_TYPE_ varchar(255) not null,
+    ASSIGNEE_ varchar(64),
+    START_TIME_ datetime(3) not null,
+    END_TIME_ datetime(3),
+    DURATION_ bigint,
+    ACT_INST_STATE_ integer,
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_TASKINST (
+    ID_ varchar(64) not null,
+    TASK_DEF_KEY_ varchar(255),
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    CASE_DEF_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    ACT_INST_ID_ varchar(64),
+    NAME_ varchar(255),
+    PARENT_TASK_ID_ varchar(64),
+    DESCRIPTION_ varchar(4000),
+    OWNER_ varchar(255),
+    ASSIGNEE_ varchar(255),
+    START_TIME_ datetime(3) not null,
+    END_TIME_ datetime(3),
+    DURATION_ bigint,
+    DELETE_REASON_ varchar(4000),
+    PRIORITY_ integer,
+    DUE_DATE_ datetime(3),
+    FOLLOW_UP_DATE_ datetime(3),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_VARINST (
+    ID_ varchar(64) not null,
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    ACT_INST_ID_ varchar(64),
+    CASE_DEF_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    TASK_ID_ varchar(64),
+    NAME_ varchar(255) not null,
+    VAR_TYPE_ varchar(100),
+    REV_ integer,
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double,
+    LONG_ bigint,
+    TEXT_ LONGBLOB,
+    TEXT2_ LONGBLOB,
+    TENANT_ID_ varchar(64),
+    STATE_ varchar(20),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_DETAIL (
+    ID_ varchar(64) not null,
+    TYPE_ varchar(255) not null,
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    CASE_DEF_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    TASK_ID_ varchar(64),
+    ACT_INST_ID_ varchar(64),
+    VAR_INST_ID_ varchar(64),
+    NAME_ varchar(255) not null,
+    VAR_TYPE_ varchar(255),
+    REV_ integer,
+    TIME_ datetime(3) not null,
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double,
+    LONG_ bigint,
+    TEXT_ LONGBLOB,
+    TEXT2_ LONGBLOB,
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    OPERATION_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_IDENTITYLINK (
+    ID_ varchar(64) not null,
+    TIMESTAMP_ timestamp(3) not null,
+    TYPE_ varchar(255),
+    USER_ID_ varchar(255),
+    GROUP_ID_ varchar(255),
+    TASK_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    OPERATION_TYPE_ varchar(64),
+    ASSIGNER_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_COMMENT (
+    ID_ varchar(64) not null,
+    TYPE_ varchar(255),
+    TIME_ datetime(3) not null,
+    USER_ID_ varchar(255),
+    TASK_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    ACTION_ varchar(255),
+    MESSAGE_ varchar(4000),
+    FULL_MSG_ LONGBLOB,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_ATTACHMENT (
+    ID_ varchar(64) not null,
+    REV_ integer,
+    USER_ID_ varchar(255),
+    NAME_ varchar(255),
+    DESCRIPTION_ varchar(4000),
+    TYPE_ varchar(255),
+    TASK_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    URL_ varchar(4000),
+    CONTENT_ID_ varchar(64),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_OP_LOG (
+    ID_ varchar(64) not null,
+    DEPLOYMENT_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    PROC_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    CASE_EXECUTION_ID_ varchar(64),
+    TASK_ID_ varchar(64),
+    JOB_ID_ varchar(64),
+    JOB_DEF_ID_ varchar(64),
+    BATCH_ID_ varchar(64),
+    USER_ID_ varchar(255),
+    TIMESTAMP_ timestamp(3) not null,
+    OPERATION_TYPE_ varchar(64),
+    OPERATION_ID_ varchar(64),
+    ENTITY_TYPE_ varchar(30),
+    PROPERTY_ varchar(64),
+    ORG_VALUE_ varchar(4000),
+    NEW_VALUE_ varchar(4000),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_INCIDENT (
+  ID_ varchar(64) not null,
+  PROC_DEF_KEY_ varchar(255),
+  PROC_DEF_ID_ varchar(64),
+  PROC_INST_ID_ varchar(64),
+  EXECUTION_ID_ varchar(64),
+  CREATE_TIME_ timestamp(3) not null,
+  END_TIME_ timestamp(3) null,
+  INCIDENT_MSG_ varchar(4000),
+  INCIDENT_TYPE_ varchar(255) not null,
+  ACTIVITY_ID_ varchar(255),
+  CAUSE_INCIDENT_ID_ varchar(64),
+  ROOT_CAUSE_INCIDENT_ID_ varchar(64),
+  CONFIGURATION_ varchar(255),
+  INCIDENT_STATE_ integer,
+  TENANT_ID_ varchar(64),
+  JOB_DEF_ID_ varchar(64),
+  primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_JOB_LOG (
+    ID_ varchar(64) not null,
+    TIMESTAMP_ timestamp(3) not null,
+    JOB_ID_ varchar(64) not null,
+    JOB_DUEDATE_ timestamp(3) NULL,
+    JOB_RETRIES_ integer,
+    JOB_PRIORITY_ bigint NOT NULL DEFAULT 0,
+    JOB_EXCEPTION_MSG_ varchar(4000),
+    JOB_EXCEPTION_STACK_ID_ varchar(64),
+    JOB_STATE_ integer,
+    JOB_DEF_ID_ varchar(64),
+    JOB_DEF_TYPE_ varchar(255),
+    JOB_DEF_CONFIGURATION_ varchar(255),
+    ACT_ID_ varchar(255),
+    EXECUTION_ID_ varchar(64),
+    PROCESS_INSTANCE_ID_ varchar(64),
+    PROCESS_DEF_ID_ varchar(64),
+    PROCESS_DEF_KEY_ varchar(255),
+    DEPLOYMENT_ID_ varchar(64),
+    SEQUENCE_COUNTER_ bigint,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_BATCH (
+    ID_ varchar(64) not null,
+    TYPE_ varchar(255),
+    TOTAL_JOBS_ integer,
+    JOBS_PER_SEED_ integer,
+    INVOCATIONS_PER_JOB_ integer,
+    SEED_JOB_DEF_ID_ varchar(64),
+    MONITOR_JOB_DEF_ID_ varchar(64),
+    BATCH_JOB_DEF_ID_ varchar(64),
+    TENANT_ID_  varchar(64),
+    START_TIME_ datetime(3) not null,
+    END_TIME_ datetime(3),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_EXT_TASK_LOG (
+    ID_ varchar(64) not null,
+    TIMESTAMP_ timestamp(3) not null,
+    EXT_TASK_ID_ varchar(64) not null,
+    RETRIES_ integer,
+    TOPIC_NAME_ varchar(255),
+    WORKER_ID_ varchar(255),
+    PRIORITY_ bigint NOT NULL DEFAULT 0,
+    ERROR_MSG_ varchar(4000),
+    ERROR_DETAILS_ID_ varchar(64),
+    ACT_ID_ varchar(255),
+    ACT_INST_ID_ varchar(64),
+    EXECUTION_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    PROC_DEF_ID_ varchar(64),
+    PROC_DEF_KEY_ varchar(255),
+    TENANT_ID_ varchar(64),
+    STATE_ integer,
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create index ACT_IDX_HI_PRO_INST_END on ACT_HI_PROCINST(END_TIME_);
+create index ACT_IDX_HI_PRO_I_BUSKEY on ACT_HI_PROCINST(BUSINESS_KEY_);
+create index ACT_IDX_HI_PRO_INST_TENANT_ID on ACT_HI_PROCINST(TENANT_ID_);
+create index ACT_IDX_HI_PRO_INST_PROC_DEF_KEY on ACT_HI_PROCINST(PROC_DEF_KEY_);
+
+create index ACT_IDX_HI_ACT_INST_START on ACT_HI_ACTINST(START_TIME_);
+create index ACT_IDX_HI_ACT_INST_END on ACT_HI_ACTINST(END_TIME_);
+create index ACT_IDX_HI_ACT_INST_PROCINST on ACT_HI_ACTINST(PROC_INST_ID_, ACT_ID_);
+create index ACT_IDX_HI_ACT_INST_COMP on ACT_HI_ACTINST(EXECUTION_ID_, ACT_ID_, END_TIME_, ID_);
+create index ACT_IDX_HI_ACT_INST_STATS on ACT_HI_ACTINST(PROC_DEF_ID_, ACT_ID_, END_TIME_, ACT_INST_STATE_);
+create index ACT_IDX_HI_ACT_INST_TENANT_ID on ACT_HI_ACTINST(TENANT_ID_);
+create index ACT_IDX_HI_ACT_INST_PROC_DEF_KEY on ACT_HI_ACTINST(PROC_DEF_KEY_);
+
+create index ACT_IDX_HI_TASK_INST_TENANT_ID on ACT_HI_TASKINST(TENANT_ID_);
+create index ACT_IDX_HI_TASK_INST_PROC_DEF_KEY on ACT_HI_TASKINST(PROC_DEF_KEY_);
+create index ACT_IDX_HI_TASKINST_PROCINST on ACT_HI_TASKINST(PROC_INST_ID_);
+create index ACT_IDX_HI_TASKINSTID_PROCINST on ACT_HI_TASKINST(ID_,PROC_INST_ID_);
+
+create index ACT_IDX_HI_DETAIL_PROC_INST on ACT_HI_DETAIL(PROC_INST_ID_);
+create index ACT_IDX_HI_DETAIL_ACT_INST on ACT_HI_DETAIL(ACT_INST_ID_);
+create index ACT_IDX_HI_DETAIL_CASE_INST on ACT_HI_DETAIL(CASE_INST_ID_);
+create index ACT_IDX_HI_DETAIL_CASE_EXEC on ACT_HI_DETAIL(CASE_EXECUTION_ID_);
+create index ACT_IDX_HI_DETAIL_TIME on ACT_HI_DETAIL(TIME_);
+create index ACT_IDX_HI_DETAIL_NAME on ACT_HI_DETAIL(NAME_);
+create index ACT_IDX_HI_DETAIL_TASK_ID on ACT_HI_DETAIL(TASK_ID_);
+create index ACT_IDX_HI_DETAIL_TENANT_ID on ACT_HI_DETAIL(TENANT_ID_);
+create index ACT_IDX_HI_DETAIL_PROC_DEF_KEY on ACT_HI_DETAIL(PROC_DEF_KEY_);
+create index ACT_IDX_HI_DETAIL_BYTEAR on ACT_HI_DETAIL(BYTEARRAY_ID_);
+
+create index ACT_IDX_HI_IDENT_LNK_USER on ACT_HI_IDENTITYLINK(USER_ID_);
+create index ACT_IDX_HI_IDENT_LNK_GROUP on ACT_HI_IDENTITYLINK(GROUP_ID_);
+create index ACT_IDX_HI_IDENT_LNK_TENANT_ID on ACT_HI_IDENTITYLINK(TENANT_ID_);
+create index ACT_IDX_HI_IDENT_LNK_PROC_DEF_KEY on ACT_HI_IDENTITYLINK(PROC_DEF_KEY_);
+create index ACT_IDX_HI_IDENT_LINK_TASK on ACT_HI_IDENTITYLINK(TASK_ID_);
+
+create index ACT_IDX_HI_PROCVAR_PROC_INST on ACT_HI_VARINST(PROC_INST_ID_);
+create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_VARINST(NAME_, VAR_TYPE_);
+create index ACT_IDX_HI_CASEVAR_CASE_INST on ACT_HI_VARINST(CASE_INST_ID_);
+create index ACT_IDX_HI_VAR_INST_TENANT_ID on ACT_HI_VARINST(TENANT_ID_);
+create index ACT_IDX_HI_VAR_INST_PROC_DEF_KEY on ACT_HI_VARINST(PROC_DEF_KEY_);
+create index ACT_IDX_HI_VARINST_BYTEAR on ACT_HI_VARINST(BYTEARRAY_ID_);
+
+create index ACT_IDX_HI_INCIDENT_TENANT_ID on ACT_HI_INCIDENT(TENANT_ID_);
+create index ACT_IDX_HI_INCIDENT_PROC_DEF_KEY on ACT_HI_INCIDENT(PROC_DEF_KEY_);
+create index ACT_IDX_HI_INCIDENT_PROCINST on ACT_HI_INCIDENT(PROC_INST_ID_);
+
+create index ACT_IDX_HI_JOB_LOG_PROCINST on ACT_HI_JOB_LOG(PROCESS_INSTANCE_ID_);
+create index ACT_IDX_HI_JOB_LOG_PROCDEF on ACT_HI_JOB_LOG(PROCESS_DEF_ID_);
+create index ACT_IDX_HI_JOB_LOG_TENANT_ID on ACT_HI_JOB_LOG(TENANT_ID_);
+create index ACT_IDX_HI_JOB_LOG_JOB_DEF_ID on ACT_HI_JOB_LOG(JOB_DEF_ID_);
+create index ACT_IDX_HI_JOB_LOG_PROC_DEF_KEY on ACT_HI_JOB_LOG(PROCESS_DEF_KEY_);
+create index ACT_IDX_HI_JOB_LOG_EX_STACK on ACT_HI_JOB_LOG(JOB_EXCEPTION_STACK_ID_);
+
+create index ACT_HI_EXT_TASK_LOG_PROCINST on ACT_HI_EXT_TASK_LOG(PROC_INST_ID_);
+create index ACT_HI_EXT_TASK_LOG_PROCDEF on ACT_HI_EXT_TASK_LOG(PROC_DEF_ID_);
+create index ACT_HI_EXT_TASK_LOG_PROC_DEF_KEY on ACT_HI_EXT_TASK_LOG(PROC_DEF_KEY_);
+create index ACT_HI_EXT_TASK_LOG_TENANT_ID on ACT_HI_EXT_TASK_LOG(TENANT_ID_);
+create index ACT_IDX_HI_EXTTASKLOG_ERRORDET on ACT_HI_EXT_TASK_LOG(ERROR_DETAILS_ID_);
+
+create index ACT_IDX_HI_OP_LOG_PROCINST on ACT_HI_OP_LOG(PROC_INST_ID_);
+create index ACT_IDX_HI_OP_LOG_PROCDEF on ACT_HI_OP_LOG(PROC_DEF_ID_);
+
+create index ACT_IDX_HI_COMMENT_TASK on ACT_HI_COMMENT(TASK_ID_);
+create index ACT_IDX_HI_COMMENT_PROCINST on ACT_HI_COMMENT(PROC_INST_ID_);
+
+create index ACT_IDX_HI_ATTACHMENT_CONTENT on ACT_HI_ATTACHMENT(CONTENT_ID_);
+create index ACT_IDX_HI_ATTACHMENT_PROCINST on ACT_HI_ATTACHMENT(PROC_INST_ID_);
+create index ACT_IDX_HI_ATTACHMENT_TASK on ACT_HI_ATTACHMENT(TASK_ID_);
+create table ACT_HI_CASEINST (
+    ID_ varchar(64) not null,
+    CASE_INST_ID_ varchar(64) not null,
+    BUSINESS_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64) not null,
+    CREATE_TIME_ datetime(3) not null,
+    CLOSE_TIME_ datetime(3),
+    DURATION_ bigint,
+    STATE_ integer,
+    CREATE_USER_ID_ varchar(255),
+    SUPER_CASE_INSTANCE_ID_ varchar(64),
+    SUPER_PROCESS_INSTANCE_ID_ varchar(64),
+    TENANT_ID_ varchar(64),
+    primary key (ID_),
+    unique (CASE_INST_ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_HI_CASEACTINST (
+    ID_ varchar(64) not null,
+    PARENT_ACT_INST_ID_ varchar(64),
+    CASE_DEF_ID_ varchar(64) not null,
+    CASE_INST_ID_ varchar(64) not null,
+    CASE_ACT_ID_ varchar(255) not null,
+    TASK_ID_ varchar(64),
+    CALL_PROC_INST_ID_ varchar(64),
+    CALL_CASE_INST_ID_ varchar(64),
+    CASE_ACT_NAME_ varchar(255),
+    CASE_ACT_TYPE_ varchar(255),
+    CREATE_TIME_ datetime(3) not null,
+    END_TIME_ datetime(3),
+    DURATION_ bigint,
+    STATE_ integer,
+    REQUIRED_ boolean,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create index ACT_IDX_HI_CAS_I_CLOSE on ACT_HI_CASEINST(CLOSE_TIME_);
+create index ACT_IDX_HI_CAS_I_BUSKEY on ACT_HI_CASEINST(BUSINESS_KEY_);
+create index ACT_IDX_HI_CAS_I_TENANT_ID on ACT_HI_CASEINST(TENANT_ID_);
+create index ACT_IDX_HI_CAS_A_I_CREATE on ACT_HI_CASEACTINST(CREATE_TIME_);
+create index ACT_IDX_HI_CAS_A_I_END on ACT_HI_CASEACTINST(END_TIME_);
+create index ACT_IDX_HI_CAS_A_I_COMP on ACT_HI_CASEACTINST(CASE_ACT_ID_, END_TIME_, ID_);
+create index ACT_IDX_HI_CAS_A_I_CASEINST on ACT_HI_CASEACTINST(CASE_INST_ID_, CASE_ACT_ID_);
+create index ACT_IDX_HI_CAS_A_I_TENANT_ID on ACT_HI_CASEACTINST(TENANT_ID_);
+-- create history decision instance table --
+create table ACT_HI_DECINST (
+    ID_ varchar(64) NOT NULL,
+    DEC_DEF_ID_ varchar(64) NOT NULL,
+    DEC_DEF_KEY_ varchar(255) NOT NULL,
+    DEC_DEF_NAME_ varchar(255),
+    PROC_DEF_KEY_ varchar(255),
+    PROC_DEF_ID_ varchar(64),
+    PROC_INST_ID_ varchar(64),
+    CASE_DEF_KEY_ varchar(255),
+    CASE_DEF_ID_ varchar(64),
+    CASE_INST_ID_ varchar(64),
+    ACT_INST_ID_ varchar(64),
+    ACT_ID_ varchar(255),
+    EVAL_TIME_ datetime(3) not null,
+    COLLECT_VALUE_ double,
+    USER_ID_ varchar(255),
+    ROOT_DEC_INST_ID_ varchar(64),
+    DEC_REQ_ID_ varchar(64),
+    DEC_REQ_KEY_ varchar(255),
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+-- create history decision input table --
+create table ACT_HI_DEC_IN (
+    ID_ varchar(64) NOT NULL,
+    DEC_INST_ID_ varchar(64) NOT NULL,
+    CLAUSE_ID_ varchar(64),
+    CLAUSE_NAME_ varchar(255),
+    VAR_TYPE_ varchar(100),
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double,
+    LONG_ bigint,
+    TEXT_ LONGBLOB,
+    TEXT2_ LONGBLOB,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+-- create history decision output table --
+create table ACT_HI_DEC_OUT (
+    ID_ varchar(64) NOT NULL,
+    DEC_INST_ID_ varchar(64) NOT NULL,
+    CLAUSE_ID_ varchar(64),
+    CLAUSE_NAME_ varchar(255),
+    RULE_ID_ varchar(64),
+    RULE_ORDER_ integer,
+    VAR_NAME_ varchar(255),
+    VAR_TYPE_ varchar(100),
+    BYTEARRAY_ID_ varchar(64),
+    DOUBLE_ double,
+    LONG_ bigint,
+    TEXT_ LONGBLOB,
+    TEXT2_ LONGBLOB,
+    TENANT_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+
+create index ACT_IDX_HI_DEC_INST_ID on ACT_HI_DECINST(DEC_DEF_ID_);
+create index ACT_IDX_HI_DEC_INST_KEY on ACT_HI_DECINST(DEC_DEF_KEY_);
+create index ACT_IDX_HI_DEC_INST_PI on ACT_HI_DECINST(PROC_INST_ID_);
+create index ACT_IDX_HI_DEC_INST_CI on ACT_HI_DECINST(CASE_INST_ID_);
+create index ACT_IDX_HI_DEC_INST_ACT on ACT_HI_DECINST(ACT_ID_);
+create index ACT_IDX_HI_DEC_INST_ACT_INST on ACT_HI_DECINST(ACT_INST_ID_);
+create index ACT_IDX_HI_DEC_INST_TIME on ACT_HI_DECINST(EVAL_TIME_);
+create index ACT_IDX_HI_DEC_INST_TENANT_ID on ACT_HI_DECINST(TENANT_ID_);
+create index ACT_IDX_HI_DEC_INST_ROOT_ID on ACT_HI_DECINST(ROOT_DEC_INST_ID_);
+create index ACT_IDX_HI_DEC_INST_REQ_ID on ACT_HI_DECINST(DEC_REQ_ID_);
+create index ACT_IDX_HI_DEC_INST_REQ_KEY on ACT_HI_DECINST(DEC_REQ_KEY_);
+
+
+create index ACT_IDX_HI_DEC_IN_INST on ACT_HI_DEC_IN(DEC_INST_ID_);
+create index ACT_IDX_HI_DEC_IN_CLAUSE on ACT_HI_DEC_IN(DEC_INST_ID_, CLAUSE_ID_);
+
+create index ACT_IDX_HI_DEC_OUT_INST on ACT_HI_DEC_OUT(DEC_INST_ID_);
+create index ACT_IDX_HI_DEC_OUT_RULE on ACT_HI_DEC_OUT(RULE_ORDER_, CLAUSE_ID_);
+
+-- mariadb_identity_7.8.0-ee
+
+create table ACT_ID_GROUP (
+    ID_ varchar(64),
+    REV_ integer,
+    NAME_ varchar(255),
+    TYPE_ varchar(255),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_ID_MEMBERSHIP (
+    USER_ID_ varchar(64),
+    GROUP_ID_ varchar(64),
+    primary key (USER_ID_, GROUP_ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_ID_USER (
+    ID_ varchar(64),
+    REV_ integer,
+    FIRST_ varchar(255),
+    LAST_ varchar(255),
+    EMAIL_ varchar(255),
+    PWD_ varchar(255),
+    SALT_ varchar(255),
+    PICTURE_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_ID_INFO (
+    ID_ varchar(64),
+    REV_ integer,
+    USER_ID_ varchar(64),
+    TYPE_ varchar(64),
+    KEY_ varchar(255),
+    VALUE_ varchar(255),
+    PASSWORD_ LONGBLOB,
+    PARENT_ID_ varchar(255),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_ID_TENANT (
+    ID_ varchar(64),
+    REV_ integer,
+    NAME_ varchar(255),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+create table ACT_ID_TENANT_MEMBER (
+    ID_ varchar(64) not null,
+    TENANT_ID_ varchar(64) not null,
+    USER_ID_ varchar(64),
+    GROUP_ID_ varchar(64),
+    primary key (ID_)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+alter table ACT_ID_MEMBERSHIP
+    add constraint ACT_FK_MEMB_GROUP
+    foreign key (GROUP_ID_)
+    references ACT_ID_GROUP (ID_);
+
+alter table ACT_ID_MEMBERSHIP
+    add constraint ACT_FK_MEMB_USER
+    foreign key (USER_ID_)
+    references ACT_ID_USER (ID_);
+
+alter table ACT_ID_TENANT_MEMBER
+    add constraint ACT_UNIQ_TENANT_MEMB_USER
+    unique (TENANT_ID_, USER_ID_);
+
+alter table ACT_ID_TENANT_MEMBER
+    add constraint ACT_UNIQ_TENANT_MEMB_GROUP
+    unique (TENANT_ID_, GROUP_ID_);
+
+alter table ACT_ID_TENANT_MEMBER
+    add constraint ACT_FK_TENANT_MEMB
+    foreign key (TENANT_ID_)
+    references ACT_ID_TENANT (ID_);
+
+alter table ACT_ID_TENANT_MEMBER
+    add constraint ACT_FK_TENANT_MEMB_USER
+    foreign key (USER_ID_)
+    references ACT_ID_USER (ID_);
+
+alter table ACT_ID_TENANT_MEMBER
+    add constraint ACT_FK_TENANT_MEMB_GROUP
+    foreign key (GROUP_ID_)
+    references ACT_ID_GROUP (ID_);
+    
+ALTER TABLE ACT_GE_BYTEARRAY
+  ADD TYPE_ integer;
+  
+ALTER TABLE ACT_GE_BYTEARRAY
+  ADD CREATE_TIME_ datetime(3);
+  
+ALTER TABLE ACT_RE_PROCDEF
+  ADD STARTABLE_ BOOLEAN NOT NULL DEFAULT TRUE;
\ No newline at end of file