aboutsummaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/docker/backend/Dockerfile47
-rw-r--r--src/main/docker/backend/backend-files.xml43
-rw-r--r--src/main/docker/frontend/Dockerfile70
-rw-r--r--src/main/docker/frontend/frontend-files.xml48
-rw-r--r--src/main/docker/frontend/nginx/default.conf25
-rw-r--r--src/main/docker/frontend/nginx/nginx.conf18
-rw-r--r--src/main/java/org/onap/policy/clamp/authorization/AuthorizationController.java189
-rw-r--r--src/main/java/org/onap/policy/clamp/authorization/CldsUser.java97
-rw-r--r--src/main/java/org/onap/policy/clamp/authorization/SecureServicePermission.java203
-rw-r--r--src/main/java/org/onap/policy/clamp/authorization/SecureServicePermissionDeserializer.java46
-rw-r--r--src/main/java/org/onap/policy/clamp/authorization/UserService.java47
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/Application.java182
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/ClampInUserAuditorAware.java40
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/ClampServlet.java144
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/TomcatEmbeddedServletContainerFactoryRedirection.java53
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/client/CdsServices.java227
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/client/DcaeInventoryServices.java139
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/config/AafConfiguration.java67
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/config/CamelConfiguration.java134
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/config/ClampProperties.java105
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/config/CldsUserJsonDecoder.java74
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/config/DefaultDictionaryElements.java167
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/config/DefaultUserConfiguration.java138
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/config/SslConfig.java97
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/config/SystemPropertiesLoader.java46
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/config/sdc/SdcControllersConfiguration.java97
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/config/sdc/SdcSingleControllerConfiguration.java290
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/config/spring/CldsConfiguration.java55
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/config/spring/SdcControllerConfiguration.java110
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/exception/CldsConfigException.java61
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/exception/CldsUsersException.java61
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/exception/NotAuthorizedException.java61
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/exception/cds/CdsParametersException.java53
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/exception/dcae/DcaeDeploymentException.java61
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/BlueprintParserException.java54
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/CsarHandlerException.java54
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcArtifactInstallerException.java54
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcControllerException.java54
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcDownloadException.java54
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcParametersException.java54
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/filter/ClampCadiFilter.java190
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/model/ClampInformation.java62
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/model/CldsHealthCheck.java60
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/model/cds/CdsBpWorkFlowListResponse.java66
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryCache.java62
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponse.java102
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeLinks.java60
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeOperationStatusResponse.java88
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/sdc/controller/DistributionStatusMessage.java84
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/sdc/controller/SdcSingleController.java433
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/sdc/controller/SdcSingleControllerStatus.java28
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/BlueprintArtifact.java70
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/BlueprintMicroService.java93
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/BlueprintParser.java220
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/ChainGenerator.java90
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/CsarHandler.java219
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/service/CldsHealthcheckService.java81
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/JsonEditorSchemaConstants.java86
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/ToscaSchemaConstants.java83
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/ToscaYamlToJsonConvertor.java781
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/ToscaConverterWithDictionarySupport.java105
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/UnknownComponentException.java34
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/ArrayField.java72
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/Constraint.java222
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/ToscaElement.java121
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/ToscaElementProperty.java135
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/ToscaMetadataExecutor.java75
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/ToscaMetadataProcess.java43
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/ToscaMetadataTargetProcess.java49
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/cds/ToscaMetadataCdsProcess.java229
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/ToscaConverterToJsonSchema.java353
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/ToscaElementParser.java103
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/metadata/ToscaMetadataParser.java32
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/metadata/ToscaMetadataParserWithDictionarySupport.java211
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplate.java223
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplateField.java149
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplateManager.java185
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/util/ClampVersioning.java61
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/util/CryptoUtils.java168
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/util/JsonUtils.java53
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/util/LogMessages.java36
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/util/LoggingUtils.java414
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/util/OnapLogConstants.java304
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/util/ResourceFileUtils.java89
-rw-r--r--src/main/java/org/onap/policy/clamp/configuration/ClampGsonDataFormat.java170
-rw-r--r--src/main/java/org/onap/policy/clamp/dao/model/gson/converter/InstantDeserializer.java46
-rw-r--r--src/main/java/org/onap/policy/clamp/dao/model/gson/converter/InstantSerializer.java40
-rw-r--r--src/main/java/org/onap/policy/clamp/dao/model/jsontype/JsonStringSqlTypeDescriptor.java108
-rw-r--r--src/main/java/org/onap/policy/clamp/dao/model/jsontype/JsonTypeDescriptor.java105
-rw-r--r--src/main/java/org/onap/policy/clamp/dao/model/jsontype/StringJsonUserType.java51
-rw-r--r--src/main/java/org/onap/policy/clamp/flow/log/FlowLogOperation.java101
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/CsarInstaller.java209
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/Loop.java389
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/LoopController.java204
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/LoopService.java190
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/LoopState.java28
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/LoopsRepository.java36
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/cds/CdsDataInstaller.java172
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/common/AuditEntity.java146
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/components/external/DcaeComponent.java266
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/components/external/ExternalComponent.java58
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/components/external/ExternalComponentState.java128
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/components/external/PolicyComponent.java196
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/deploy/DcaeDeployParameters.java113
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/log/LogType.java28
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/log/LoopLog.java193
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/log/LoopLogRepository.java32
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/log/LoopLogService.java51
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/service/CsarServiceInstaller.java129
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/service/Service.java169
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/service/ServicesRepository.java31
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/template/LoopElementModel.java295
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/template/LoopElementModelsRepository.java31
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/template/LoopTemplate.java341
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/template/LoopTemplateLoopElementModel.java192
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/template/LoopTemplateLoopElementModelId.java100
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/template/LoopTemplatesRepository.java36
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/template/LoopTemplatesService.java67
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/template/LoopType.java42
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/template/LoopTypeConvertor.java52
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/template/PolicyModel.java282
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/template/PolicyModelId.java92
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsRepository.java37
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java189
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/Policy.java255
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/PolicyEngineServices.java213
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/PolicyPayload.java91
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/PolicyService.java35
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/downloader/PolicyEngineController.java76
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicy.java275
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicyRepository.java32
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicyService.java112
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicy.java218
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyRepository.java32
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java350
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyService.java94
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupsAnalyzer.java136
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/pdpgroup/PoliciesPdpMerger.java118
-rw-r--r--src/main/java/org/onap/policy/clamp/tosca/Dictionary.java219
-rw-r--r--src/main/java/org/onap/policy/clamp/tosca/DictionaryElement.java254
-rw-r--r--src/main/java/org/onap/policy/clamp/tosca/DictionaryElementsRepository.java32
-rw-r--r--src/main/java/org/onap/policy/clamp/tosca/DictionaryRepository.java40
-rw-r--r--src/main/java/org/onap/policy/clamp/tosca/DictionaryService.java141
-rw-r--r--src/main/java/org/onap/policy/clamp/util/PassDecoder.java62
-rw-r--r--src/main/java/org/onap/policy/clamp/util/SemanticVersioning.java91
-rw-r--r--src/main/resources/META-INF/resources/swagger.html4247
-rw-r--r--src/main/resources/META-INF/services/org/apache/camel/dataformat/clamp-gson23
-rw-r--r--src/main/resources/application-noaaf.properties187
-rw-r--r--src/main/resources/application.properties201
-rw-r--r--src/main/resources/asciidoc/swagger.adoc4
-rw-r--r--src/main/resources/boot-message.txt21
-rw-r--r--src/main/resources/clds-version.properties24
-rw-r--r--src/main/resources/clds/aaf/org.onap.clamp.keyfile27
-rw-r--r--src/main/resources/clds/aaf/ssl/ca-certs.pem32
-rw-r--r--src/main/resources/clds/aaf/ssl/clamp.key32
-rw-r--r--src/main/resources/clds/aaf/ssl/clamp.pem33
-rw-r--r--src/main/resources/clds/aaf/truststoreONAPall.jksbin117990 -> 0 bytes
-rw-r--r--src/main/resources/clds/camel/rest/clamp-api-v2.xml1472
-rw-r--r--src/main/resources/clds/camel/rest/clds-services.xml24
-rw-r--r--src/main/resources/clds/camel/routes/cds-flows.xml64
-rw-r--r--src/main/resources/clds/camel/routes/dcae-flows.xml491
-rw-r--r--src/main/resources/clds/camel/routes/loop-flows.xml256
-rw-r--r--src/main/resources/clds/camel/routes/policy-flows.xml601
-rw-r--r--src/main/resources/clds/camel/routes/utils-flows.xml28
-rw-r--r--src/main/resources/clds/clds-users.json33
-rw-r--r--src/main/resources/clds/json-schema/operational_policies/operational_policy.json320
-rw-r--r--src/main/resources/clds/key.properties1
-rw-r--r--src/main/resources/clds/sdc-controllers-config.json18
-rw-r--r--src/main/resources/clds/tosca-converter/default-tosca-types.yaml87
-rw-r--r--src/main/resources/clds/tosca-converter/templates.json398
-rw-r--r--src/main/resources/logback-default.xml329
-rw-r--r--src/main/resources/logback-spring.xml19
-rw-r--r--src/main/resources/logmessages.properties27
-rw-r--r--src/main/resources/system.properties27
-rw-r--r--src/main/script/SelectNpmRepo.groovy34
-rw-r--r--src/main/script/TagVersion.groovy40
-rwxr-xr-xsrc/main/script/checkLibIndex.sh122
177 files changed, 0 insertions, 27286 deletions
diff --git a/src/main/docker/backend/Dockerfile b/src/main/docker/backend/Dockerfile
deleted file mode 100644
index 63268d805..000000000
--- a/src/main/docker/backend/Dockerfile
+++ /dev/null
@@ -1,47 +0,0 @@
-###
-# ============LICENSE_START=======================================================
-# ONAP CLAMP
-# ================================================================================
-# Copyright (C) 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============================================
-# ===================================================================
-#
-###
-
-FROM onap/integration-java11:7.1.0
-
-MAINTAINER "The Onap Team"
-LABEL Description="This image contains alpine, openjdk 11 and policy clamp"
-
-ARG http_proxy
-ARG https_proxy
-ENV HTTP_PROXY=$http_proxy
-ENV HTTPS_PROXY=$https_proxy
-ENV http_proxy=$HTTP_PROXY
-ENV https_proxy=$HTTPS_PROXY
-
-USER root
-
-RUN mkdir -p /opt/policy/clamp && \
- chown -R onap:onap /opt/policy/clamp
-
-VOLUME /opt/policy/clamp/config
-
-COPY --chown=onap:onap onap-policy-clamp-backend/policy-clamp-backend.jar /opt/policy/clamp/policy-clamp-backend.jar
-
-USER onap
-WORKDIR /opt/policy/clamp/
-ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-XX:MinRAMPercentage=50.0", "-XX:MaxRAMPercentage=75.0","-jar" ,"./policy-clamp-backend.jar"] \ No newline at end of file
diff --git a/src/main/docker/backend/backend-files.xml b/src/main/docker/backend/backend-files.xml
deleted file mode 100644
index c73c47f64..000000000
--- a/src/main/docker/backend/backend-files.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<!--
- ============LICENSE_START=======================================================
- ECOMP CLAMP
- ================================================================================
- 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=========================================================
- -->
-
-<assembly
- xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
- <id>clamp-files</id>
-
- <formats>
- <format>tar.gz</format>
- </formats>
- <includeBaseDirectory>false</includeBaseDirectory>
-
- <fileSets>
- <!-- include config files -->
- <fileSet>
- <includes>
- <include>${project.build.finalName}.jar</include>
- </includes>
- <directory>${project.build.directory}</directory>
- <outputDirectory></outputDirectory>
- </fileSet>
- </fileSets>
-
-</assembly>
diff --git a/src/main/docker/frontend/Dockerfile b/src/main/docker/frontend/Dockerfile
deleted file mode 100644
index e67495350..000000000
--- a/src/main/docker/frontend/Dockerfile
+++ /dev/null
@@ -1,70 +0,0 @@
-###
-# ============LICENSE_START=======================================================
-# ONAP CLAMP
-# ================================================================================
-# Copyright (C) 2019 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============================================
-# ===================================================================
-#
-###
-
-# build environment
-FROM node:12.10.0-alpine as build
-WORKDIR /app
-#ENV PATH /app/node_modules/.bin:$PATH
-COPY onap-policy-clamp-frontend/ /app/
-RUN npm install --silent && \
- npm run build
-
-FROM nginx:1.17.0-alpine
-
-MAINTAINER "The Onap Team"
-LABEL Description="This image contains Clamp frontend"
-
-ARG http_proxy
-ARG https_proxy
-ENV HTTP_PROXY=$http_proxy
-ENV HTTPS_PROXY=$https_proxy
-ENV http_proxy=$HTTP_PROXY
-ENV https_proxy=$HTTPS_PROXY
-
-RUN addgroup onap && \
- adduser -D -G onap clamp && \
- mkdir /var/log/onap && \
- chmod a+rwx /var/log/onap
-
-COPY --from=build /app/build /usr/share/nginx/html
-COPY --from=build /app/ssl /etc/ssl
-
-RUN rm /etc/nginx/conf.d/default.conf && \
- ln -sf /dev/stdout /var/log/nginx/access.log && \
- ln -sf /dev/stderr /var/log/nginx/error.log
-
-COPY nginx/nginx.conf /etc/nginx/nginx.conf
-COPY nginx/default.conf /etc/nginx/conf.d/default.conf
-
-WORKDIR /app
-
-RUN chown -R clamp:onap /app && chmod -R 755 /app && \
- chown -R clamp:onap /var/cache/nginx && \
- chown -R clamp:onap /var/log/nginx && \
- chown -R clamp:onap /etc/nginx/conf.d && \
- touch /var/run/nginx.pid && \
- chown -R clamp:onap /var/run/nginx.pid
-
-USER clamp
-EXPOSE 2443
-CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file
diff --git a/src/main/docker/frontend/frontend-files.xml b/src/main/docker/frontend/frontend-files.xml
deleted file mode 100644
index aaf32be81..000000000
--- a/src/main/docker/frontend/frontend-files.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--
- ============LICENSE_START=======================================================
- ECOMP CLAMP
- ================================================================================
- Copyright (C) 2019 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=========================================================
- -->
-
-<assembly
- xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
- <id>clamp-files</id>
-
- <formats>
- <format>tar.gz</format>
- </formats>
- <includeBaseDirectory>false</includeBaseDirectory>
-
- <fileSets>
- <!-- include config files -->
- <fileSet>
- <excludes>
- <exclude>node_modules</exclude>
- </excludes>
- <directory>${project.build.directory}/${ui.react.src}</directory>
- <outputDirectory></outputDirectory>
- </fileSet>
- <!-- include ssl certificates files obtain from aaf p12 -->
- <fileSet>
- <directory>${project.basedir}/src/main/resources/clds/aaf/ssl</directory>
- <outputDirectory>ssl</outputDirectory>
- </fileSet>
- </fileSets>
-
-</assembly>
diff --git a/src/main/docker/frontend/nginx/default.conf b/src/main/docker/frontend/nginx/default.conf
deleted file mode 100644
index 570806034..000000000
--- a/src/main/docker/frontend/nginx/default.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-server {
-
- listen 2443 default ssl;
- ssl_protocols TLSv1.2;
- ssl_certificate /etc/ssl/clamp.pem;
- ssl_certificate_key /etc/ssl/clamp.key;
- ssl_verify_client optional_no_ca;
- location /restservices/clds/ {
- proxy_pass https://policy-clamp-backend:8443;
- proxy_set_header X-SSL-Cert $ssl_client_escaped_cert;
- }
-
- location / {
- root /usr/share/nginx/html;
- index index.html index.htm;
- try_files $uri $uri/ /index.html;
- }
-
- error_page 500 502 503 504 /50x.html;
-
- location = /50x.html {
- root /usr/share/nginx/html;
- }
-
-} \ No newline at end of file
diff --git a/src/main/docker/frontend/nginx/nginx.conf b/src/main/docker/frontend/nginx/nginx.conf
deleted file mode 100644
index beeb2b1eb..000000000
--- a/src/main/docker/frontend/nginx/nginx.conf
+++ /dev/null
@@ -1,18 +0,0 @@
-worker_processes 1;
-pid /var/run/nginx.pid;
-error_log /dev/stdout info;
-events {
-}
-http {
- include /etc/nginx/mime.types;
- default_type application/octet-stream;
- log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- '$status $body_bytes_sent "$http_referer" '
- '"$http_user_agent" "$http_x_forwarded_for"';
- access_log /var/log/nginx/access.log main;
- sendfile on;
- #tcp_nopush on;
- keepalive_timeout 65;
- #gzip on;
- include /etc/nginx/conf.d/*.conf;
- } \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/authorization/AuthorizationController.java b/src/main/java/org/onap/policy/clamp/authorization/AuthorizationController.java
deleted file mode 100644
index f703e3363..000000000
--- a/src/main/java/org/onap/policy/clamp/authorization/AuthorizationController.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights
- * reserved.
- * ================================================================================
- * Modifications Copyright (c) 2019 Samsung
- * ================================================================================
- * 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.policy.clamp.authorization;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.util.Date;
-import org.apache.camel.Exchange;
-import org.onap.policy.clamp.clds.config.ClampProperties;
-import org.onap.policy.clamp.clds.exception.NotAuthorizedException;
-import org.onap.policy.clamp.clds.model.ClampInformation;
-import org.onap.policy.clamp.clds.util.LoggingUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.stereotype.Component;
-
-/**
- * Verify user has right permissions.
- */
-@Component
-public class AuthorizationController {
-
- protected static final EELFLogger logger =
- EELFManager.getInstance().getLogger(AuthorizationController.class);
- protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
- protected static final EELFLogger securityLogger =
- EELFManager.getInstance().getSecurityLogger();
-
- // By default we'll set it to a default handler
- @Autowired
- private ClampProperties refProp;
-
- private SecurityContext securityContext = SecurityContextHolder.getContext();
-
- public static final String PERM_PREFIX = "security.permission.type.";
- private static final String PERM_INSTANCE = "security.permission.instance";
-
- private static String retrieveUserName(SecurityContext securityContext) {
- if (securityContext == null || securityContext.getAuthentication() == null) {
- return null;
- }
- if ((securityContext.getAuthentication().getPrincipal()) instanceof String) {
- // anonymous case
- return ((String) securityContext.getAuthentication().getPrincipal());
- } else {
- return ((UserDetails) securityContext.getAuthentication().getPrincipal()).getUsername();
- }
- }
-
- /**
- * Get the principal name.
- *
- * @return The principal name
- */
- public static String getPrincipalName(SecurityContext securityContext) {
- String principal = AuthorizationController.retrieveUserName(securityContext);
- String name = "Not found";
- if (principal != null) {
- name = principal;
- }
- return name;
- }
-
- /**
- * Insert authorize the api based on the permission.
- *
- * @param camelExchange The Camel Exchange object containing the properties
- * @param typeVar The type of the permissions
- * @param instanceVar The instance of the permissions. e.g. dev
- * @param action The action of the permissions. e.g. read
- */
- public void authorize(Exchange camelExchange, String typeVar, String instanceVar,
- String action) {
- String type = refProp.getStringValue(PERM_PREFIX + typeVar);
- String instance = refProp.getStringValue(PERM_INSTANCE);
-
- if (null == type || type.isEmpty()) {
- // authorization is turned off, since the permission is not defined
- return;
- }
- if (null != instanceVar && !instanceVar.isEmpty()) {
- instance = instanceVar;
- }
- String principalName = AuthorizationController.getPrincipalName(this.securityContext);
- SecureServicePermission perm = SecureServicePermission.create(type, instance, action);
- Date startTime = new Date();
- LoggingUtils.setTargetContext("Clamp", "authorize");
- LoggingUtils.setTimeContext(startTime, new Date());
- securityLogger.debug("checking if {} has permission: {}", principalName, perm);
-
- if (!isUserPermitted(perm)) {
- String msg = principalName + " does not have permission: " + perm;
- LoggingUtils.setErrorContext("100", "Authorization Error");
- securityLogger.warn(msg);
- throw new NotAuthorizedException(msg);
- }
- }
-
- /**
- * Insert authorize the api based on the permission.
- *
- * @param inPermission Security permission in input
- * @return True if user is permitted
- */
- public boolean isUserPermitted(SecureServicePermission inPermission) {
-
- String principalName = AuthorizationController.getPrincipalName(this.securityContext);
- // check if the user has the permission key or the permission key with a
- // combination of all instance and/or all action.
- if (hasRole(inPermission.getKey()) || hasRole(inPermission.getKeyAllInstance())) {
- auditLogger.info("{} authorized because user has permission with * for instance: {}",
- principalName, inPermission.getKey().replace("|", ":"));
- return true;
- // the rest of these don't seem to be required - isUserInRole method
- // appears to take * as a wildcard
- } else if (hasRole(inPermission.getKeyAllInstanceAction())) {
- auditLogger.info(
- "{} authorized because user has permission with * for instance and * for action: {}",
- principalName, inPermission.getKey().replace("|", ":"));
- return true;
- } else if (hasRole(inPermission.getKeyAllAction())) {
- auditLogger.info("{} authorized because user has permission with * for action: {}",
- principalName, inPermission.getKey().replace("|", ":"));
- return true;
- } else {
- return false;
- }
- }
-
- protected boolean hasRole(String role) {
- Authentication authentication = securityContext.getAuthentication();
- if (authentication == null) {
- return false;
- }
- for (GrantedAuthority auth : authentication.getAuthorities()) {
- if (role.equals(auth.getAuthority())) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Gets clds info. CLDS IFO service will return 3 things 1. User Name 2. CLDS
- * code version that is currently installed from pom.xml file 3. User
- * permissions
- *
- * @return the clds info
- */
- public ClampInformation getClampInformation() {
- ClampInformation clampInfo = new ClampInformation();
- Authentication authentication = securityContext.getAuthentication();
- if (authentication == null) {
- return new ClampInformation();
- }
- clampInfo.setUserName(AuthorizationController.getPrincipalName(this.securityContext));
- for (GrantedAuthority auth : authentication.getAuthorities()) {
- clampInfo.getAllPermissions().add(auth.getAuthority());
- }
- return clampInfo;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/authorization/CldsUser.java b/src/main/java/org/onap/policy/clamp/authorization/CldsUser.java
deleted file mode 100644
index 8f1e2bf67..000000000
--- a/src/main/java/org/onap/policy/clamp/authorization/CldsUser.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.authorization;
-
-import java.util.Arrays;
-
-/**
- * The class represents the CldsUser that can be extracted from cldsusers.json.
- */
-public class CldsUser {
-
- private String user;
- private String password;
- private SecureServicePermission[] permissions;
-
- /**
- * Returns the user.
- *
- * @return the user
- */
- public String getUser() {
- return user;
- }
-
- /**
- * Sets the user.
- *
- * @param user
- * the user to set
- */
- public void setUser(String user) {
- this.user = user;
- }
-
- /**
- * Returns the password.
- *
- * @return the password
- */
- public String getPassword() {
- return password;
- }
-
- /**
- * Sets the password.
- *
- * @param password
- * the password to set
- */
- public void setPassword(String password) {
- this.password = password;
- }
-
- /**
- * Returns the permissions.
- *
- * @return the permissions
- */
- public SecureServicePermission[] getPermissions() {
- return Arrays.copyOf(permissions, permissions.length);
- }
-
- public String[] getPermissionsString() {
- return Arrays.stream(getPermissions()).map(SecureServicePermission::getKey).toArray(String[]::new);
- }
-
- /**
- * Sets the permissions.
- *
- * @param permissionsArray
- * the permissions to set
- */
- public void setPermissions(SecureServicePermission[] permissionsArray) {
- this.permissions = Arrays.copyOf(permissionsArray, permissionsArray.length);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/authorization/SecureServicePermission.java b/src/main/java/org/onap/policy/clamp/authorization/SecureServicePermission.java
deleted file mode 100644
index 41887a315..000000000
--- a/src/main/java/org/onap/policy/clamp/authorization/SecureServicePermission.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.authorization;
-
-/**
- * Permission class that can be instantiated easily using constructor or factory
- * methods.
- */
-public class SecureServicePermission {
- public static final String ALL = "*";
-
- private String type;
- private String instance;
- private String action;
-
- /**
- * Factory method to create permission given type, instance, and action.
- *
- * @param type type of the permission
- * @param instance instance of the permission
- * @param action action of the permission
- * @return instance of SecureServicePermission with type, instance and action
- */
- public static SecureServicePermission create(String type, String instance, String action) {
- return new SecureServicePermission(type, instance, action);
- }
-
- /**
- * Factory method to create permission given type and instance. Default
- * action to ALL/*.
- *
- * @param type type of the permission
- * @param instance instance of the permission
- * @return instance of SecureServicePermission with type, instance and default action
- */
- public static SecureServicePermission create(String type, String instance) {
- return new SecureServicePermission(type, instance, ALL);
- }
-
- /**
- * Factory method to create permission given type. Default instance and
- * action to ALL/*.
- *
- * @param type type of the permission
- * @return instance of SecureServicePermission with type and default instance and action
- */
- public static SecureServicePermission create(String type) {
- return new SecureServicePermission(type, ALL, ALL);
- }
-
- /**
- * Instantiate permission given type, instance, and action.
- *
- * @param type type of the permission
- * @param instance instance of the permission
- * @param action action of the permission
- */
- public SecureServicePermission(String type, String instance, String action) {
- this.type = type;
- this.instance = instance;
- this.action = action;
- }
-
- /**
- * Instantiate permission given type from concatenated string.
- *
- * @param concatenatedString
- * the string type|instance|action, less than 3 params can be
- * provided (e.g. "permission-type-cl", "permission-type-cl|dev",
- * "permission-type-cl|dev|update" )
- */
- public SecureServicePermission(String concatenatedString) {
- String[] userInfo = concatenatedString.split("[|]");
- // We should have at least 1 string
- this.type = userInfo[0];
- this.instance = (userInfo.length > 1 ? userInfo[1] : ALL);
- this.action = (userInfo.length > 2 ? userInfo[2] : ALL);
- }
-
- /**
- * Override toString - return permission in key format.
- */
- @Override
- public String toString() {
- return getKey();
- }
-
- /**
- * Return Permission in Key format = type, instance, and action separate by
- * pipe character.
- *
- * @return permission in key format
- */
- public String getKey() {
- return type + "|" + instance + "|" + action;
- }
-
- /**
- * Return Permission in Key format = type, all instance, and action separate
- * by pipe character.
- *
- * @return permission in key format
- */
- public String getKeyAllInstance() {
- return type + "|" + ALL + "|" + action;
- }
-
- /**
- * Return Permission in Key format = type, all instance, and all action
- * separate by pipe character.
- *
- * @return permission in key format
- */
- public String getKeyAllInstanceAction() {
- return type + "|" + ALL + "|" + ALL;
- }
-
- /**
- * Return Permission in Key format = type, instance, and all action separate
- * by pipe character.
- *
- * @return permission in key format
- */
- public String getKeyAllAction() {
- return type + "|" + instance + "|" + ALL;
- }
-
- /**
- * Returns the permission type.
- *
- * @return the type
- */
- public String getType() {
- return type;
- }
-
- /**
- * Sets the type of permission.
- *
- * @param type the type to set
- */
- public void setType(String type) {
- this.type = type;
- }
-
- /**
- * Returns the instance of permission.
- *
- * @return the instance
- */
- public String getInstance() {
- return instance;
- }
-
- /**
- * Sets the instance of permission.
- *
- * @param instance the instance to set
- */
- public void setInstance(String instance) {
- this.instance = instance;
- }
-
- /**
- * Returns the action of permission.
- *
- * @return the action
- */
- public String getAction() {
- return action;
- }
-
- /**
- * Sets the action of permission.
- *
- * @param action the action to set
- */
- public void setAction(String action) {
- this.action = action;
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/authorization/SecureServicePermissionDeserializer.java b/src/main/java/org/onap/policy/clamp/authorization/SecureServicePermissionDeserializer.java
deleted file mode 100644
index 0b178c256..000000000
--- a/src/main/java/org/onap/policy/clamp/authorization/SecureServicePermissionDeserializer.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 Nokia 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.policy.clamp.authorization;
-
-
-import com.google.gson.Gson;
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import java.lang.reflect.Type;
-
-public class SecureServicePermissionDeserializer implements JsonDeserializer<SecureServicePermission> {
-
- @Override
- public SecureServicePermission deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- if (json.isJsonPrimitive()) {
- return new SecureServicePermission(json.getAsString());
- } else {
- // if not string try default deserialization
- return new Gson().fromJson(json, SecureServicePermission.class);
- }
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/authorization/UserService.java b/src/main/java/org/onap/policy/clamp/authorization/UserService.java
deleted file mode 100644
index c748a5a54..000000000
--- a/src/main/java/org/onap/policy/clamp/authorization/UserService.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.authorization;
-
-
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.stereotype.Controller;
-
-/**
- * User service used for authorization verification at the login page. Do not
- * remove this class.
- */
-@Controller
-public class UserService {
-
- private SecurityContext securityContext = SecurityContextHolder.getContext();
-
- /**
- * REST service that returns the username.
- *
- * @return the user name
- */
- public String getUser() {
- return AuthorizationController.getPrincipalName(securityContext);
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/clds/Application.java b/src/main/java/org/onap/policy/clamp/clds/Application.java
deleted file mode 100644
index 79247ca63..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/Application.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
- * reserved.
- * ================================================================================
- * Modifications Copyright (c) 2019 Samsung
- * ================================================================================
- * 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.policy.clamp.clds;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-import java.util.Enumeration;
-import org.apache.catalina.connector.Connector;
-import org.onap.policy.clamp.clds.util.ClampVersioning;
-import org.onap.policy.clamp.clds.util.ResourceFileUtils;
-import org.onap.policy.clamp.util.PassDecoder;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.domain.EntityScan;
-import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
-import org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration;
-import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
-import org.springframework.boot.web.servlet.ServletRegistrationBean;
-import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
-import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.core.env.Environment;
-import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
-import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
-import org.springframework.scheduling.annotation.EnableAsync;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.transaction.annotation.EnableTransactionManagement;
-
-@ComponentScan(basePackages = { "org.onap.policy.clamp" })
-@SpringBootApplication(exclude = { SecurityAutoConfiguration.class, UserDetailsServiceAutoConfiguration.class })
-@EnableJpaRepositories(basePackages = { "org.onap.policy.clamp" })
-@EntityScan(basePackages = { "org.onap.policy.clamp" })
-@EnableTransactionManagement
-@EnableConfigurationProperties
-@EnableAsync
-@EnableScheduling
-@EnableJpaAuditing
-public class Application extends SpringBootServletInitializer {
-
- protected static final EELFLogger eelfLogger = EELFManager.getInstance().getLogger(Application.class);
- // This settings is an additional one to Spring config,
- // only if we want to have an additional port automatically redirected to
- // HTTPS
- @Value("${server.http-to-https-redirection.port:none}")
- private String httpRedirectedPort;
- /**
- * This 8080 is the default port used by spring if this parameter is not
- * specified in application.properties.
- */
- @Value("${server.port:8080}")
- private String springServerPort;
- @Value("${server.ssl.key-store:none}")
- private String sslKeystoreFile;
-
- @Autowired
- private Environment env;
-
- @Override
- protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
- return application.sources(Application.class);
- }
-
- public static void main(String[] args) {
- // Start the Spring application
- SpringApplication.run(Application.class, args);
- }
-
- /**
- * This method is used to declare the camel servlet.
- *
- * @return A servlet bean
- * @throws IOException IO Exception
- */
- @Bean
- public ServletRegistrationBean camelServletRegistrationBean() throws IOException {
- eelfLogger.info(ResourceFileUtils.getResourceAsString("boot-message.txt") + "(v"
- + ClampVersioning.getCldsVersionFromProps() + ")" + System.getProperty("line.separator")
- + getSslExpirationDate());
- ServletRegistrationBean registration = new ServletRegistrationBean(new ClampServlet(), "/restservices/clds/*");
- registration.setName("CamelServlet");
- return registration;
- }
-
- /**
- * This method is used by Spring to create the servlet container factory.
- *
- * @return The TomcatEmbeddedServletContainerFactory just created
- */
- @Bean
- public ServletWebServerFactory getEmbeddedServletContainerFactory() {
- TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
- if (!"none".equals(httpRedirectedPort) && !"none".equals(sslKeystoreFile)) {
- // Automatically redirect to HTTPS
- tomcat = new TomcatEmbeddedServletContainerFactoryRedirection();
- Connector newConnector = createRedirectConnector(Integer.parseInt(springServerPort));
- if (newConnector != null) {
- tomcat.addAdditionalTomcatConnectors(newConnector);
- }
- }
- return tomcat;
- }
-
- private Connector createRedirectConnector(int redirectSecuredPort) {
- if (redirectSecuredPort <= 0) {
- eelfLogger.warn("HTTP port redirection to HTTPS is disabled because the HTTPS port is 0 (random port) or -1"
- + " (Connector disabled)");
- return null;
- }
- Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
- connector.setScheme("http");
- connector.setSecure(false);
- connector.setPort(Integer.parseInt(httpRedirectedPort));
- connector.setRedirectPort(redirectSecuredPort);
- return connector;
- }
-
- private String getSslExpirationDate() throws IOException {
- StringBuilder result = new StringBuilder(" :: SSL Certificates :: ");
- try {
- if (env.getProperty("server.ssl.key-store") != null) {
-
- KeyStore keystore = KeyStore.getInstance(env.getProperty("server.ssl.key-store-type"));
- String password = PassDecoder.decode(env.getProperty("server.ssl.key-store-password"),
- env.getProperty("clamp.config.keyFile"));
- String keyStore = env.getProperty("server.ssl.key-store");
- InputStream is = ResourceFileUtils.getResourceAsStream(keyStore.replaceAll("classpath:", ""));
- keystore.load(is, password.toCharArray());
-
- Enumeration<String> aliases = keystore.aliases();
- while (aliases.hasMoreElements()) {
- String alias = aliases.nextElement();
- if ("X.509".equals(keystore.getCertificate(alias).getType())) {
- result.append("* " + alias + " expires "
- + ((X509Certificate) keystore.getCertificate(alias)).getNotAfter()
- + System.getProperty("line.separator"));
- }
- }
- } else {
- result.append("* NONE HAS been configured");
- }
- } catch (CertificateException | NoSuchAlgorithmException | KeyStoreException e) {
- eelfLogger.warn("SSL certificate access error ", e);
-
- }
- return result.toString();
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/ClampInUserAuditorAware.java b/src/main/java/org/onap/policy/clamp/clds/ClampInUserAuditorAware.java
deleted file mode 100644
index 939cea49c..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/ClampInUserAuditorAware.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds;
-
-import java.util.Optional;
-import org.onap.policy.clamp.authorization.AuthorizationController;
-import org.springframework.data.domain.AuditorAware;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.stereotype.Component;
-
-@Component
-public class ClampInUserAuditorAware implements AuditorAware<String> {
-
- @Override
- public Optional<String> getCurrentAuditor() {
- return Optional.of(AuthorizationController.getPrincipalName(SecurityContextHolder.getContext()));
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/ClampServlet.java b/src/main/java/org/onap/policy/clamp/clds/ClampServlet.java
deleted file mode 100644
index 5149dd3b7..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/ClampServlet.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2018, 2021 AT&T Intellectual Property. All rights
- * reserved.
- * ================================================================================
- * Modifications Copyright (c) 2019 Samsung
- * ================================================================================
- * 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.policy.clamp.clds;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.io.IOException;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.camel.component.servlet.CamelHttpTransportServlet;
-import org.onap.policy.clamp.authorization.SecureServicePermission;
-import org.springframework.context.ApplicationContext;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
-import org.springframework.web.context.support.WebApplicationContextUtils;
-
-public class ClampServlet extends CamelHttpTransportServlet {
-
- /**
- * The serial version ID.
- */
- private static final long serialVersionUID = -4198841134910211542L;
-
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(ClampServlet.class);
- private static final String PERM_INSTANCE = "clamp.config.security.permission.instance";
- private static final String PERM_CL = "clamp.config.security.permission.type.cl";
- private static final String PERM_TEMPLATE = "clamp.config.security.permission.type.template";
- private static final String PERM_VF = "clamp.config.security.permission.type.filter.vf";
- private static final String PERM_MANAGE = "clamp.config.security.permission.type.cl.manage";
- private static final String PERM_TOSCA = "clamp.config.security.permission.type.tosca";
- private static final String PERM_POLICIES = "clamp.config.security.permission.type.policies";
- private static final String AUTHENTICATION_CLASS = "clamp.config.security.authentication.class";
- private static final String READ = "read";
- private static final String UPDATE = "update";
-
- private static List<SecureServicePermission> permissionList;
-
- private synchronized List<String> loadDynamicAuthenticationClasses() {
- return Arrays.stream(WebApplicationContextUtils.getWebApplicationContext(getServletContext())
- .getEnvironment().getProperty(AUTHENTICATION_CLASS).split(",")).map(className -> className.trim())
- .collect(Collectors.toList());
- }
-
- private synchronized List<SecureServicePermission> getPermissionList() {
- if (permissionList == null) {
- permissionList = new ArrayList<>();
- ApplicationContext applicationContext = WebApplicationContextUtils
- .getWebApplicationContext(getServletContext());
- String cldsPermissionInstance = applicationContext.getEnvironment().getProperty(PERM_INSTANCE);
- permissionList.add(SecureServicePermission.create(applicationContext.getEnvironment().getProperty(PERM_CL),
- cldsPermissionInstance, READ));
- permissionList.add(SecureServicePermission.create(applicationContext.getEnvironment().getProperty(PERM_CL),
- cldsPermissionInstance, UPDATE));
- permissionList.add(SecureServicePermission.create(
- applicationContext.getEnvironment().getProperty(PERM_TEMPLATE), cldsPermissionInstance, READ));
- permissionList.add(SecureServicePermission.create(
- applicationContext.getEnvironment().getProperty(PERM_TEMPLATE), cldsPermissionInstance, UPDATE));
- permissionList.add(SecureServicePermission.create(applicationContext.getEnvironment().getProperty(PERM_VF),
- cldsPermissionInstance, "*"));
- permissionList.add(SecureServicePermission
- .create(applicationContext.getEnvironment().getProperty(PERM_MANAGE), cldsPermissionInstance, "*"));
- permissionList.add(SecureServicePermission
- .create(applicationContext.getEnvironment().getProperty(PERM_TOSCA), cldsPermissionInstance, READ));
- permissionList.add(SecureServicePermission
- .create(applicationContext.getEnvironment().getProperty(PERM_TOSCA), cldsPermissionInstance,
- UPDATE));
- permissionList.add(SecureServicePermission
- .create(applicationContext.getEnvironment().getProperty(PERM_POLICIES), cldsPermissionInstance,
- READ));
- permissionList.add(SecureServicePermission
- .create(applicationContext.getEnvironment().getProperty(PERM_POLICIES), cldsPermissionInstance,
- UPDATE));
- }
- return permissionList;
- }
-
- /**
- * When AAF is enabled, request object will contain a cadi Wrapper, so queries
- * to isUserInRole will invoke a http call to AAF server.
- */
- @Override
- protected void doService(HttpServletRequest request, HttpServletResponse response) {
- Principal principal = request.getUserPrincipal();
- if (principal != null && loadDynamicAuthenticationClasses().stream()
- .anyMatch(className -> className.equals(principal.getClass().getName()))) {
- // When AAF is enabled, there is a need to provision the permissions to Spring
- // system
- List<GrantedAuthority> grantedAuths = new ArrayList<>();
- for (SecureServicePermission perm : getPermissionList()) {
- String permString = perm.toString();
- if (request.isUserInRole(permString)) {
- grantedAuths.add(new SimpleGrantedAuthority(permString));
- }
- }
- Authentication auth = new UsernamePasswordAuthenticationToken(new User(principal.getName(), "",
- grantedAuths), "", grantedAuths);
- SecurityContextHolder.getContext().setAuthentication(auth);
- }
- try {
- super.doService(request, response);
- } catch (ServletException | IOException ioe) {
- logger.error("Exception caught when executing doService in servlet", ioe);
- try {
- response.sendError(HttpStatus.INTERNAL_SERVER_ERROR.value());
- } catch (IOException e) {
- logger.error("Exception caught when executing HTTP sendError in servlet", e);
- }
- }
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/TomcatEmbeddedServletContainerFactoryRedirection.java b/src/main/java/org/onap/policy/clamp/clds/TomcatEmbeddedServletContainerFactoryRedirection.java
deleted file mode 100644
index f66a09c41..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/TomcatEmbeddedServletContainerFactoryRedirection.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.clds;
-
-import org.apache.catalina.Context;
-import org.apache.tomcat.util.descriptor.web.SecurityCollection;
-import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
-import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
-
-/**
- * This class is a factory that redirects by default all HTTP to HTTPS
- * connector. It is used by the Application.java class and defined in a Spring
- * Bean.
- * In order to do this, the method postProcessContext has been overridden to
- * provide another behavior.
- */
-public class TomcatEmbeddedServletContainerFactoryRedirection extends TomcatServletWebServerFactory {
-
- /**
- * This method is there to force the automatic redirection of all calls done
- * on the tomcat server to a Secure connection.
- */
- @Override
- protected void postProcessContext(Context context) {
- SecurityConstraint securityConstraint = new SecurityConstraint();
- securityConstraint.setUserConstraint("CONFIDENTIAL");
- SecurityCollection collection = new SecurityCollection();
- collection.addPattern("/*");
- securityConstraint.addCollection(collection);
- context.addConstraint(securityConstraint);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/client/CdsServices.java b/src/main/java/org/onap/policy/clamp/clds/client/CdsServices.java
deleted file mode 100644
index ff79ef413..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/client/CdsServices.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 Huawei Technologies Co., Ltd.
- * ================================================================================
- * 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.policy.clamp.clds.client;
-
-import static java.lang.Boolean.parseBoolean;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import java.util.Date;
-import java.util.Map;
-import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
-import org.apache.camel.builder.ExchangeBuilder;
-import org.onap.policy.clamp.clds.exception.cds.CdsParametersException;
-import org.onap.policy.clamp.clds.model.cds.CdsBpWorkFlowListResponse;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.onap.policy.clamp.clds.util.LoggingUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-/**
- * This class implements the communication with CDS for the service inventory.
- */
-@Component
-public class CdsServices {
-
- @Autowired
- CamelContext camelContext;
-
- protected static final EELFLogger logger = EELFManager.getInstance().getLogger(CdsServices.class);
-
- private static final String TYPE = "type";
- private static final String PROPERTIES = "properties";
- private static final String LIST = "list";
-
- /**
- * Constructor.
- */
- @Autowired
- public CdsServices() {
- }
-
-
- /**
- * Query CDS to get blueprint's workflow list.
- *
- * @param blueprintName CDS blueprint name
- * @param blueprintVersion CDS blueprint version
- * @return CdsBpWorkFlowListResponse CDS blueprint's workflow list
- */
- public CdsBpWorkFlowListResponse getBlueprintWorkflowList(String blueprintName, String blueprintVersion) {
- LoggingUtils.setTargetContext("CDS", "getBlueprintWorkflowList");
-
- Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext)
- .withProperty("blueprintName", blueprintName).withProperty("blueprintVersion", blueprintVersion)
- .build();
-
- Exchange exchangeResponse = camelContext.createProducerTemplate()
- .send("direct:get-blueprint-workflow-list", myCamelExchange);
-
- if (Integer.valueOf(200).equals(exchangeResponse.getIn().getHeader("CamelHttpResponseCode"))) {
- String cdsResponse = (String) exchangeResponse.getIn().getBody();
- logger.info("getBlueprintWorkflowList, response from CDS:" + cdsResponse);
- LoggingUtils.setResponseContext("0", "Get Blueprint workflow list", this.getClass().getName());
- Date startTime = new Date();
- LoggingUtils.setTimeContext(startTime, new Date());
- return JsonUtils.GSON_JPA_MODEL.fromJson(cdsResponse, CdsBpWorkFlowListResponse.class);
- } else {
- logger.error("CDS getBlueprintWorkflowList FAILED");
- return null;
- }
-
- }
-
- /**
- * Query CDS to get input properties of workflow.
- *
- * @param blueprintName CDS blueprint name
- * @param blueprintVersion CDS blueprint name
- * @param workflow CDS blueprint's workflow
- * @return input properties in json format
- */
- public JsonObject getWorkflowInputProperties(String blueprintName, String blueprintVersion,
- String workflow) {
- LoggingUtils.setTargetContext("CDS", "getWorkflowInputProperties");
-
- Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext)
- .withBody(getCdsPayloadForWorkFlow(blueprintName, blueprintVersion, workflow))
- .build();
-
- Exchange exchangeResponse = camelContext.createProducerTemplate()
- .send("direct:get-blueprint-workflow-input-properties", myCamelExchange);
-
- if (Integer.valueOf(200).equals(exchangeResponse.getIn().getHeader("CamelHttpResponseCode"))) {
- String cdsResponse = (String) exchangeResponse.getIn().getBody();
- logger.info("getWorkflowInputProperties, response from CDS:" + cdsResponse);
- LoggingUtils.setResponseContext("0", "Get Blueprint workflow input properties", this.getClass().getName());
- Date startTime = new Date();
- LoggingUtils.setTimeContext(startTime, new Date());
- return parseCdsResponse(cdsResponse);
- } else {
- logger.error("CDS getWorkflowInputProperties FAILED");
- return null;
- }
- }
-
- protected JsonObject parseCdsResponse(String response) {
- JsonObject root = JsonParser.parseString(response).getAsJsonObject();
- JsonObject inputs = root.getAsJsonObject("workFlowData").getAsJsonObject("inputs");
- JsonObject dataTypes = root.getAsJsonObject("dataTypes");
-
- JsonObject workFlowProperties = new JsonObject();
- workFlowProperties.add("inputs", getInputProperties(inputs, dataTypes, new JsonObject()));
- return workFlowProperties;
- }
-
- private JsonObject getInputProperties(JsonObject inputs, JsonObject dataTypes,
- JsonObject inputObject) {
- if (inputs == null) {
- return inputObject;
- }
-
- for (Map.Entry<String, JsonElement> entry : inputs.entrySet()) {
- String key = entry.getKey();
- JsonObject inputProperty = inputs.getAsJsonObject(key);
- String type = inputProperty.get(TYPE).getAsString();
- if (isComplexType(type, dataTypes)) {
- inputObject.add(key, handleComplexType(type, dataTypes));
- } else if (LIST.equalsIgnoreCase(type)) {
- handleListType(key, inputProperty, dataTypes, inputObject);
- } else if (isInputParam(inputProperty)) {
- inputObject.add(key, entry.getValue());
- }
- }
- return inputObject;
- }
-
- private void handleListType(String propertyName,
- JsonObject inputProperty,
- JsonObject dataTypes,
- JsonObject inputObject) {
- if (inputProperty.get("entry_schema") == null) {
- throw new CdsParametersException("Entry schema is null for " + propertyName);
- }
-
- String type = inputProperty.get("entry_schema").getAsJsonObject().get(
- TYPE).getAsString();
- if (dataTypes.get(type) != null) {
- JsonObject jsonObject = new JsonObject();
- jsonObject.addProperty(TYPE, LIST);
- jsonObject.add(PROPERTIES, getPropertiesObject(type, dataTypes));
- inputObject.add(propertyName, jsonObject);
- } else if (isInputParam(inputProperty)) {
- inputObject.add(propertyName, inputProperty);
- }
- }
-
- private JsonObject handleComplexType(String key, JsonObject dataTypes) {
- JsonObject jsonObject = new JsonObject();
- jsonObject.addProperty(TYPE, "object");
- jsonObject.add(PROPERTIES, getPropertiesObject(key, dataTypes));
- return jsonObject;
- }
-
- private JsonObject getPropertiesObject(String key, JsonObject dataTypes) {
- JsonObject properties = dataTypes.get(key).getAsJsonObject().get(PROPERTIES).getAsJsonObject();
- JsonObject object = new JsonObject();
- getInputProperties(properties, dataTypes, object);
- return object;
- }
-
- private boolean isComplexType(String type, JsonObject dataTypes) {
- if (dataTypes == null) {
- return false;
- }
- return dataTypes.get(type) != null;
- }
-
- private boolean isInputParam(JsonObject inputProperty) {
- JsonElement inputParam = inputProperty.get("input-param");
- if (inputParam == null) {
- return false;
- }
- return parseBoolean(inputParam.getAsString());
- }
-
- /**
- * Creates payload to query CDS to get workflow input properties.
- *
- * @param blueprintName CDS blueprint name
- * @param version CDS blueprint version
- * @param workflow CDS blueprint workflow
- * @return returns payload in json format
- */
- public String getCdsPayloadForWorkFlow(String blueprintName, String version, String workflow) {
- JsonObject jsonObject = new JsonObject();
- jsonObject.addProperty("blueprintName", blueprintName);
- jsonObject.addProperty("version", version);
- jsonObject.addProperty("returnContent", "json");
- jsonObject.addProperty("workflowName", workflow);
- jsonObject.addProperty("specType", "TOSCA");
- return jsonObject.toString();
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/client/DcaeInventoryServices.java b/src/main/java/org/onap/policy/clamp/clds/client/DcaeInventoryServices.java
deleted file mode 100644
index fed061e7d..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/client/DcaeInventoryServices.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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============================================
- * Modifications copyright (c) 2018 Nokia
- * ===================================================================
- *
- */
-
-package org.onap.policy.clamp.clds.client;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.io.IOException;
-import java.util.Date;
-import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
-import org.apache.camel.builder.ExchangeBuilder;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
-import org.json.simple.parser.ParseException;
-import org.onap.policy.clamp.clds.config.ClampProperties;
-import org.onap.policy.clamp.clds.model.dcae.DcaeInventoryResponse;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.onap.policy.clamp.clds.util.LoggingUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-/**
- * This class implements the communication with DCAE for the service inventory.
- */
-@Component
-public class DcaeInventoryServices {
-
- @Autowired
- CamelContext camelContext;
-
- protected static final EELFLogger logger = EELFManager.getInstance().getLogger(DcaeInventoryServices.class);
- protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
- protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
- public static final String DCAE_INVENTORY_URL = "dcae.inventory.url";
- public static final String DCAE_INVENTORY_RETRY_INTERVAL = "dcae.intentory.retry.interval";
- public static final String DCAE_INVENTORY_RETRY_LIMIT = "dcae.intentory.retry.limit";
- private final ClampProperties refProp;
-
- /**
- * Constructor.
- */
- @Autowired
- public DcaeInventoryServices(ClampProperties refProp) {
- this.refProp = refProp;
- }
-
- private int getTotalCountFromDcaeInventoryResponse(String responseStr) throws ParseException {
- JSONParser parser = new JSONParser();
- Object obj0 = parser.parse(responseStr);
- JSONObject jsonObj = (JSONObject) obj0;
- Long totalCount = (Long) jsonObj.get("totalCount");
- return totalCount.intValue();
- }
-
- private DcaeInventoryResponse getItemsFromDcaeInventoryResponse(String responseStr) throws ParseException {
- JSONParser parser = new JSONParser();
- Object obj0 = parser.parse(responseStr);
- JSONObject jsonObj = (JSONObject) obj0;
- JSONArray itemsArray = (JSONArray) jsonObj.get("items");
- JSONObject dcaeServiceType0 = (JSONObject) itemsArray.get(0);
- return JsonUtils.GSON.fromJson(dcaeServiceType0.toString(), DcaeInventoryResponse.class);
- }
-
- /**
- * DO a query to DCAE to get some Information.
- *
- * @param artifactName The artifact Name
- * @param serviceUuid The service UUID
- * @param resourceUuid The resource UUID
- * @return The DCAE inventory for the artifact in DcaeInventoryResponse
- * @throws IOException In case of issues with the stream
- * @throws ParseException In case of issues with the Json parsing
- */
- public DcaeInventoryResponse getDcaeInformation(String artifactName, String serviceUuid, String resourceUuid)
- throws IOException, ParseException, InterruptedException {
- LoggingUtils.setTargetContext("DCAE", "getDcaeInformation");
-
- int retryInterval = 0;
- int retryLimit = 1;
- if (refProp.getStringValue(DCAE_INVENTORY_RETRY_LIMIT) != null) {
- retryLimit = Integer.valueOf(refProp.getStringValue(DCAE_INVENTORY_RETRY_LIMIT));
- }
- if (refProp.getStringValue(DCAE_INVENTORY_RETRY_INTERVAL) != null) {
- retryInterval = Integer.valueOf(refProp.getStringValue(DCAE_INVENTORY_RETRY_INTERVAL));
- }
- for (int i = 0; i < retryLimit; i++) {
- Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext)
- .withProperty("blueprintResourceId", resourceUuid).withProperty("blueprintServiceId", serviceUuid)
- .withProperty("blueprintName", artifactName).build();
- metricsLogger.info("Attempt n°" + i + " to contact DCAE inventory");
-
- Exchange exchangeResponse = camelContext.createProducerTemplate()
- .send("direct:get-dcae-blueprint-inventory", myCamelExchange);
-
- if (Integer.valueOf(200).equals(exchangeResponse.getIn().getHeader("CamelHttpResponseCode"))) {
- String dcaeResponse = (String) exchangeResponse.getIn().getBody();
- int totalCount = getTotalCountFromDcaeInventoryResponse(dcaeResponse);
- metricsLogger.info("getDcaeInformation complete: totalCount returned=" + totalCount);
- if (totalCount > 0) {
- logger.info("getDcaeInformation, answer from DCAE inventory:" + dcaeResponse);
- LoggingUtils.setResponseContext("0", "Get Dcae Information success", this.getClass().getName());
- Date startTime = new Date();
- LoggingUtils.setTimeContext(startTime, new Date());
- return getItemsFromDcaeInventoryResponse(dcaeResponse);
- } else {
- logger.info("Dcae inventory totalCount returned is 0, so waiting " + retryInterval
- + "ms before retrying ...");
- // wait for a while and try to connect to DCAE again
- Thread.sleep(retryInterval);
- }
- }
- }
- logger.warn("Dcae inventory totalCount returned is still 0, after " + retryLimit + " attempts, returning NULL");
- return null;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/config/AafConfiguration.java b/src/main/java/org/onap/policy/clamp/clds/config/AafConfiguration.java
deleted file mode 100644
index 9b6338e00..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/config/AafConfiguration.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2017-2018, 2021 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.policy.clamp.clds.config;
-
-import javax.servlet.Filter;
-import org.onap.policy.clamp.clds.filter.ClampCadiFilter;
-import org.springframework.boot.web.servlet.FilterRegistrationBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-
-@Configuration
-@Profile("clamp-aaf-authentication")
-public class AafConfiguration {
-
- /**
- * Method to return clamp cadi filter.
- *
- * @return Filter
- */
- @Bean(name = "cadiFilter")
- public Filter cadiFilter() {
- return new ClampCadiFilter();
- }
-
- /**
- * Method to register cadi filter.
- *
- * @return FilterRegistrationBean
- */
- @Bean
- public FilterRegistrationBean cadiFilterRegistration() {
- FilterRegistrationBean registration = new FilterRegistrationBean();
- registration.setFilter(cadiFilter());
- registration.addUrlPatterns("/restservices/clds/v1/user/*");
- registration.addUrlPatterns("/restservices/clds/v2/dictionary/*");
- registration.addUrlPatterns("/restservices/clds/v2/templates/*");
- registration.addUrlPatterns("/restservices/clds/v2/clampInformation/*");
- registration.addUrlPatterns("/restservices/clds/v2/policyToscaModels/*");
- registration.addUrlPatterns("/restservices/clds/v2/policies/*");
- registration.addUrlPatterns("/restservices/clds/v2/loop/*");
- registration.setName("cadiFilter");
- registration.setOrder(0);
- return registration;
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/clds/config/CamelConfiguration.java b/src/main/java/org/onap/policy/clamp/clds/config/CamelConfiguration.java
deleted file mode 100644
index 9431f40e8..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/config/CamelConfiguration.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.config;
-
-import java.io.IOException;
-import java.net.URL;
-import java.security.KeyManagementException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.CertificateException;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManagerFactory;
-import org.apache.camel.CamelContext;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.http4.HttpClientConfigurer;
-import org.apache.camel.component.http4.HttpComponent;
-import org.apache.camel.model.rest.RestBindingMode;
-import org.apache.http.config.Registry;
-import org.apache.http.config.RegistryBuilder;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.socket.ConnectionSocketFactory;
-import org.apache.http.conn.socket.PlainConnectionSocketFactory;
-import org.apache.http.conn.ssl.SSLSocketFactory;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
-import org.onap.policy.clamp.clds.util.ClampVersioning;
-import org.onap.policy.clamp.clds.util.ResourceFileUtils;
-import org.onap.policy.clamp.util.PassDecoder;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Component;
-
-@Component
-public class CamelConfiguration extends RouteBuilder {
-
- @Autowired
- CamelContext camelContext;
-
- @Autowired
- private Environment env;
-
- private void configureDefaultSslProperties() throws IOException {
- if (env.getProperty("server.ssl.trust-store") != null) {
- URL storeResource = Thread.currentThread().getContextClassLoader()
- .getResource(env.getProperty("server.ssl.trust-store").replaceFirst("classpath:", ""));
- System.setProperty("javax.net.ssl.trustStore", storeResource.getPath());
- String keyFile = env.getProperty("clamp.config.keyFile");
- String trustStorePass = PassDecoder.decode(env.getProperty("server.ssl.trust-store-password"),
- keyFile);
- System.setProperty("javax.net.ssl.trustStorePassword", trustStorePass);
- System.setProperty("javax.net.ssl.trustStoreType", "jks");
- System.setProperty("ssl.TrustManagerFactory.algorithm", "PKIX");
- storeResource = Thread.currentThread().getContextClassLoader()
- .getResource(env.getProperty("server.ssl.key-store").replaceFirst("classpath:", ""));
- System.setProperty("javax.net.ssl.keyStore", storeResource.getPath());
-
- String keyStorePass = PassDecoder.decode(env.getProperty("server.ssl.key-store-password"),
- keyFile);
- System.setProperty("javax.net.ssl.keyStorePassword", keyStorePass);
- System.setProperty("javax.net.ssl.keyStoreType", env.getProperty("server.ssl.key-store-type"));
- }
- }
-
- private void registerTrustStore()
- throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException, CertificateException, IOException {
- if (env.getProperty("server.ssl.trust-store") != null) {
- KeyStore truststore = KeyStore.getInstance("JKS");
- String keyFile = env.getProperty("clamp.config.keyFile");
- String password = PassDecoder.decode(env.getProperty("server.ssl.trust-store-password"), keyFile);
- truststore.load(
- ResourceFileUtils.getResourceAsStream(env.getProperty("server.ssl.trust-store")),
- password.toCharArray());
-
- TrustManagerFactory trustFactory = TrustManagerFactory.getInstance("PKIX");
- trustFactory.init(truststore);
- SSLContext sslcontext = SSLContext.getInstance("TLS");
- sslcontext.init(null, trustFactory.getTrustManagers(), null);
- SSLSocketFactory factory = new SSLSocketFactory(sslcontext, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
- SchemeRegistry registry = new SchemeRegistry();
- final Scheme scheme = new Scheme("https4", 443, factory);
- registry.register(scheme);
- ConnectionSocketFactory plainsf = PlainConnectionSocketFactory.getSocketFactory();
- HttpComponent http4 = camelContext.getComponent("https4", HttpComponent.class);
- http4.setHttpClientConfigurer(new HttpClientConfigurer() {
-
- @Override
- public void configureHttpClient(HttpClientBuilder builder) {
- builder.setSSLSocketFactory(factory);
- Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
- .register("https", factory).register("http", plainsf).build();
- builder.setConnectionManager(new BasicHttpClientConnectionManager(registry));
- }
- });
- }
- }
-
- @Override
- public void configure()
- throws KeyManagementException, KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
- restConfiguration().component("servlet").bindingMode(RestBindingMode.json).jsonDataFormat("clamp-gson")
- .dataFormatProperty("prettyPrint", "true")// .enableCORS(true)
- // turn on swagger api-doc
- .apiContextPath("api-doc").apiVendorExtension(true).apiProperty("api.title", "Clamp Rest API")
- .apiProperty("api.version", ClampVersioning.getCldsVersionFromProps())
- .apiProperty("base.path", "/restservices/clds/");
-
- // camelContext.setTracing(true);
-
- configureDefaultSslProperties();
- registerTrustStore();
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/config/ClampProperties.java b/src/main/java/org/onap/policy/clamp/clds/config/ClampProperties.java
deleted file mode 100644
index f11e16733..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/config/ClampProperties.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.clds.config;
-
-import java.io.IOException;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
-import org.apache.commons.io.IOUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Component;
-
-/**
- * Holds Clamp properties and add some functionalities.
- */
-@Component
-public class ClampProperties {
-
- @Autowired
- private ApplicationContext appContext;
- @Autowired
- private Environment env;
- public static final String CONFIG_PREFIX = "clamp.config.";
-
- /**
- * get property value.
- *
- * @param key The first key
- * @return The string with the value
- */
- public String getStringValue(String key) {
- return env.getProperty(CONFIG_PREFIX + key);
- }
-
- /**
- * get property value for a combo key (key1 + "." + key2). If not found just use
- * key1.
- *
- * @param key1 The first key
- * @param key2 The second key after a dot
- * @return The string with the value
- */
- public String getStringValue(String key1, String key2) {
- String value = getStringValue(key1 + "." + key2);
- if (value == null || value.length() == 0) {
- value = getStringValue(key1);
- }
- return value;
- }
-
- /**
- * Return the file content. The value obtained from the clds-reference file will
- * be used as a filename.
- *
- * @param key The key that will be used to access the clds-reference file
- * @return File content in String
- * @throws IOException In case of issues with the JSON parser
- */
- public String getFileContent(String key) throws IOException {
- String fileReference = getStringValue(key);
- return (fileReference != null) ? getFileContentFromPath(fileReference) : null;
- }
-
- /**
- * Return the file content. First try with combo key (key1 + "." + key2),
- * otherwise default to just key1. The value obtained from the clds-reference
- * file will be used as a filename.
- *
- * @param key1 The first key
- * @param key2 The second key after a dot
- * @return File content in String
- * @throws IOException In case of issues with the JSON parser
- */
- public String getFileContent(String key1, String key2) throws IOException {
- String fileReference = getStringValue(key1, key2);
- return (fileReference != null) ? getFileContentFromPath(fileReference) : null;
- }
-
- private String getFileContentFromPath(String filepath) throws IOException {
- URL url = appContext.getResource(filepath).getURL();
- return IOUtils.toString(url, StandardCharsets.UTF_8);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/config/CldsUserJsonDecoder.java b/src/main/java/org/onap/policy/clamp/clds/config/CldsUserJsonDecoder.java
deleted file mode 100644
index 20d7143fb..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/config/CldsUserJsonDecoder.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
- * reserved.
- * ================================================================================
- * Modifications Copyright (c) 2019 Samsung
- * ================================================================================
- * 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.policy.clamp.clds.config;
-
-import com.google.gson.JsonParseException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import org.apache.commons.io.IOUtils;
-import org.onap.policy.clamp.authorization.CldsUser;
-import org.onap.policy.clamp.clds.exception.CldsUsersException;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-
-public class CldsUserJsonDecoder {
-
- private CldsUserJsonDecoder() {
- }
-
- /**
- * This method decodes the JSON file provided to a CldsUser Array. The stream is
- * closed after this call, this is not possible to reuse it.
- *
- * @param cldsUsersFile
- * The inputStream containing the users json file
- * @return CldsUser[] Array containing a list of the user defined in the JSON
- * file
- */
- public static CldsUser[] decodeJson(InputStream cldsUsersFile) {
- try {
- return decodeJson(IOUtils.toString(cldsUsersFile, StandardCharsets.UTF_8.name()));
- } catch (IOException e) {
- throw new CldsUsersException("Exception occurred during the decoding of the clds-users.json", e);
- }
- }
-
- /**
- * This method decodes the JSON string to a CldsUser Array.
- *
- * @param cldsUsersString JSON string
- * @return CldsUser[] Array containing a list of the user defined in the JSON
- */
- public static CldsUser[] decodeJson(String cldsUsersString) {
- try {
- // the ObjectMapper readValue method closes the stream no need to do
- // it
- return JsonUtils.GSON.fromJson(cldsUsersString, CldsUser[].class);
- } catch (JsonParseException e) {
- throw new CldsUsersException("Exception occurred during the decoding of the clds-users.json", e);
- }
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/config/DefaultDictionaryElements.java b/src/main/java/org/onap/policy/clamp/clds/config/DefaultDictionaryElements.java
deleted file mode 100644
index 27cf0b941..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/config/DefaultDictionaryElements.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds.config;
-
-import javax.annotation.PostConstruct;
-import org.onap.policy.clamp.tosca.Dictionary;
-import org.onap.policy.clamp.tosca.DictionaryElement;
-import org.onap.policy.clamp.tosca.DictionaryService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-
-@Configuration
-@Profile("default-dictionary-elements")
-public class DefaultDictionaryElements {
-
- @Autowired
- private DictionaryService dictionaryService;
-
- /**
- * Init method.
- */
- @PostConstruct
- public void init() {
- preProvisionDefaultActors();
- preProvisionDefaultOperations();
- }
-
- private void preProvisionDefaultActors() {
- // Set up dictionary elements
- Dictionary actorDictionary = new Dictionary();
- actorDictionary.setName("DefaultActors");
- actorDictionary.setSecondLevelDictionary(0);
- actorDictionary.setSubDictionaryType("");
-
- DictionaryElement elementSo = new DictionaryElement();
- elementSo.setName("SO");
- elementSo.setShortName("SO");
- elementSo.setType("string");
- elementSo.setDescription("SO component");
- actorDictionary.addDictionaryElements(elementSo);
-
- DictionaryElement elementSdnc = new DictionaryElement();
- elementSdnc.setName("SDNC");
- elementSdnc.setShortName("SDNC");
- elementSdnc.setType("string");
- elementSdnc.setDescription("SDNC component");
- actorDictionary.addDictionaryElements(elementSdnc);
-
- DictionaryElement elementAppc = new DictionaryElement();
- elementAppc.setName("APPC");
- elementAppc.setShortName("APPC");
- elementAppc.setType("string");
- elementAppc.setDescription("APPC component");
- actorDictionary.addDictionaryElements(elementAppc);
-
- DictionaryElement elementVfc = new DictionaryElement();
- elementVfc.setName("VFC");
- elementVfc.setShortName("VFC");
- elementVfc.setType("string");
- elementVfc.setDescription("VFC component");
- actorDictionary.addDictionaryElements(elementVfc);
-
- DictionaryElement elementSdnr = new DictionaryElement();
- elementSdnr.setName("SDNR");
- elementSdnr.setShortName("SDNR");
- elementSdnr.setType("string");
- elementSdnr.setDescription("SDNR component");
- actorDictionary.addDictionaryElements(elementSdnr);
-
- dictionaryService.saveOrUpdateDictionary(actorDictionary);
- }
-
- private void preProvisionDefaultOperations() {
- // Set up dictionary elements
- Dictionary operationDictionary = new Dictionary();
- operationDictionary.setName("DefaultOperations");
- operationDictionary.setSecondLevelDictionary(0);
- operationDictionary.setSubDictionaryType("");
-
- DictionaryElement elementRestart = new DictionaryElement();
- elementRestart.setName("Restart");
- elementRestart.setShortName("Restart (APPC operation)");
- elementRestart.setType("string");
- elementRestart.setDescription("APPC operation");
- operationDictionary.addDictionaryElements(elementRestart);
-
- DictionaryElement elementRebuild = new DictionaryElement();
- elementRebuild.setName("Rebuild");
- elementRebuild.setShortName("Rebuild (APPC operation)");
- elementRebuild.setType("string");
- elementRebuild.setDescription("APPC operation");
- operationDictionary.addDictionaryElements(elementRebuild);
-
- DictionaryElement elementMigrate = new DictionaryElement();
- elementMigrate.setName("Migrate");
- elementMigrate.setShortName("Migrate (APPC operation)");
- elementMigrate.setType("string");
- elementMigrate.setDescription("APPC operation");
- operationDictionary.addDictionaryElements(elementMigrate);
-
- DictionaryElement elementHealthCheck = new DictionaryElement();
- elementHealthCheck.setName("Health-Check");
- elementHealthCheck.setShortName("Health-Check (APPC operation)");
- elementHealthCheck.setType("string");
- elementHealthCheck.setDescription("APPC operation");
- operationDictionary.addDictionaryElements(elementHealthCheck);
-
- DictionaryElement elementModifyConfig = new DictionaryElement();
- elementModifyConfig.setName("ModifyConfig");
- elementModifyConfig.setShortName("ModifyConfig (APPC/VFC operation)");
- elementModifyConfig.setType("string");
- elementModifyConfig.setDescription("APPC/VFC operation");
- operationDictionary.addDictionaryElements(elementModifyConfig);
-
- DictionaryElement elementVfModuleCreate = new DictionaryElement();
- elementVfModuleCreate.setName("VF Module Create");
- elementVfModuleCreate.setShortName("VF Module Create (SO operation)");
- elementVfModuleCreate.setType("string");
- elementVfModuleCreate.setDescription("SO operation");
- operationDictionary.addDictionaryElements(elementVfModuleCreate);
-
- DictionaryElement elementVfModuleDelete = new DictionaryElement();
- elementVfModuleDelete.setName("VF Module Delete");
- elementVfModuleDelete.setShortName("VF Module Delete (SO operation)");
- elementVfModuleDelete.setType("string");
- elementVfModuleDelete.setDescription("SO operation");
- operationDictionary.addDictionaryElements(elementVfModuleDelete);
-
- DictionaryElement elementReroute = new DictionaryElement();
- elementReroute.setName("Reroute");
- elementReroute.setShortName("Reroute (SDNC operation)");
- elementReroute.setType("string");
- elementReroute.setDescription("SDNC operation");
- operationDictionary.addDictionaryElements(elementReroute);
-
- DictionaryElement elementBandwidthOnDemand = new DictionaryElement();
- elementBandwidthOnDemand.setName("BandwidthOnDemand");
- elementBandwidthOnDemand.setShortName("BandwidthOnDemand (SDNC operation)");
- elementBandwidthOnDemand.setType("string");
- elementBandwidthOnDemand.setDescription("SDNC operation");
- operationDictionary.addDictionaryElements(elementBandwidthOnDemand);
-
- dictionaryService.saveOrUpdateDictionary(operationDictionary);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/config/DefaultUserConfiguration.java b/src/main/java/org/onap/policy/clamp/clds/config/DefaultUserConfiguration.java
deleted file mode 100644
index 015868141..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/config/DefaultUserConfiguration.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
- * reserved.
- * ================================================================================
- * Modifications Copyright (c) 2019 Samsung
- * ================================================================================
- * 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.policy.clamp.clds.config;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.io.IOException;
-import org.onap.policy.clamp.authorization.CldsUser;
-import org.onap.policy.clamp.clds.exception.CldsConfigException;
-import org.onap.policy.clamp.clds.exception.CldsUsersException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
-import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-/**
- * This class is used to enable the HTTP authentication to login. It requires a
- * specific JSON file containing the user definition
- * (classpath:clds/clds-users.json).
- */
-@Configuration
-@EnableWebSecurity
-@Profile("clamp-default-user")
-public class DefaultUserConfiguration extends WebSecurityConfigurerAdapter {
-
- protected static final EELFLogger logger = EELFManager.getInstance().getLogger(DefaultUserConfiguration.class);
-
- private static final String SETUP_WEB_USERS_EXCEPTION_MSG = "Exception occurred during the "
- + " setup of the Web users in memory";
- @Autowired
- private ClampProperties refProp;
- @Value("${clamp.config.security.permission.type.cl:permission-type-cl}")
- private String cldsPersmissionTypeCl;
- @Value("${CLDS_PERMISSION_INSTANCE:dev}")
- private String cldsPermissionInstance;
- @Value("${clamp.config.security.encoder:bcrypt}")
- private String cldsEncoderMethod;
- @Value("${clamp.config.security.encoder.bcrypt.strength:10}")
- private Integer cldsBcryptEncoderStrength;
-
- /**
- * This method configures on which URL the authorization will be enabled.
- */
- @Override
- protected void configure(HttpSecurity http) {
- try {
- http.csrf().disable().httpBasic().and().authorizeRequests().antMatchers("/restservices/clds/v1/user/**")
- .authenticated().anyRequest().permitAll().and().sessionManagement()
- .maximumSessions(1);
-
- } catch (Exception e) {
- logger.error(SETUP_WEB_USERS_EXCEPTION_MSG, e);
- throw new CldsUsersException(SETUP_WEB_USERS_EXCEPTION_MSG, e);
- }
- }
-
- /**
- * This method is called by the framework and is used to load all the users
- * defined in cldsUsersFile variable (this file path can be configured in the
- * application.properties).
- *
- * @param auth authentication manager builder
- */
- @Autowired
- public void configureGlobal(AuthenticationManagerBuilder auth) {
- // configure algorithm used for password hashing
- final PasswordEncoder passwordEncoder = getPasswordEncoder();
-
- try {
- CldsUser[] usersList = loadUsers();
- // no users defined
- if (null == usersList) {
- logger.warn("No users defined. Users should be defined under clds-users.json");
- return;
- }
- for (CldsUser user : usersList) {
- auth.inMemoryAuthentication().withUser(user.getUser()).password(user.getPassword())
- .authorities(user.getPermissionsString()).and().passwordEncoder(passwordEncoder);
- }
- } catch (Exception e) {
- logger.error(SETUP_WEB_USERS_EXCEPTION_MSG, e);
- throw new CldsUsersException(SETUP_WEB_USERS_EXCEPTION_MSG, e);
- }
- }
-
- /**
- * This method loads physically the JSON file and convert it to an Array of
- * CldsUser.
- *
- * @return The array of CldsUser
- * @throws IOException In case of the file is not found
- */
- private CldsUser[] loadUsers() throws IOException {
- logger.info("Load from clds-users.properties");
- return CldsUserJsonDecoder.decodeJson(refProp.getFileContent("files.cldsUsers"));
- }
-
- /**
- * This methods returns the chosen encoder for password hashing.
- */
- private PasswordEncoder getPasswordEncoder() {
- if ("bcrypt".equals(cldsEncoderMethod)) {
- return new BCryptPasswordEncoder(cldsBcryptEncoderStrength);
- } else {
- throw new CldsConfigException(
- "Invalid clamp.config.security.encoder value. 'bcrypt' is the only option at this time.");
- }
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/clds/config/SslConfig.java b/src/main/java/org/onap/policy/clamp/clds/config/SslConfig.java
deleted file mode 100644
index a72cffd09..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/config/SslConfig.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019, 2021 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.policy.clamp.clds.config;
-
-import java.io.IOException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.CertificateException;
-import org.onap.policy.clamp.clds.util.ResourceFileUtils;
-import org.onap.policy.clamp.util.PassDecoder;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.web.ServerProperties;
-import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
-import org.springframework.boot.web.server.Ssl;
-import org.springframework.boot.web.server.SslStoreProvider;
-import org.springframework.boot.web.server.WebServerFactoryCustomizer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import org.springframework.core.env.Environment;
-import org.springframework.core.io.ResourceLoader;
-
-@Configuration
-@Profile("clamp-ssl-config")
-public class SslConfig {
- @Autowired
- private Environment env;
-
- @Bean
- WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer(ServerProperties serverProperties,
- ResourceLoader resourceLoader) {
- return (tomcat) -> tomcat.setSslStoreProvider(new SslStoreProvider() {
- @Override
- public KeyStore getKeyStore() throws KeyStoreException,
- NoSuchAlgorithmException, CertificateException, IOException {
- KeyStore keystore = KeyStore.getInstance(env.getProperty("server.ssl.key-store-type"));
- String password = PassDecoder.decode(env.getProperty("server.ssl.key-store-password"),
- env.getProperty("clamp.config.keyFile"));
- keystore.load(ResourceFileUtils.getResourceAsStream(env.getProperty("server.ssl.key-store")),
- password.toCharArray());
- return keystore;
- }
-
- @Override
- public KeyStore getTrustStore() throws KeyStoreException,
- NoSuchAlgorithmException, CertificateException, IOException {
- KeyStore truststore = KeyStore.getInstance("JKS");
- String password = PassDecoder.decode(env.getProperty("server.ssl.trust-store-password"),
- env.getProperty("clamp.config.keyFile"));
- truststore.load(
- ResourceFileUtils.getResourceAsStream(env.getProperty("server.ssl.trust-store")),
- password.toCharArray());
- return truststore;
- }
-
- });
- }
-
- @Bean
- WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatSslCustomizer(ServerProperties serverProperties,
- ResourceLoader resourceLoader) {
- return (tomcat) -> tomcat.setSsl(new Ssl() {
- @Override
- public String getKeyPassword() {
- return PassDecoder.decode(env.getProperty("server.ssl.key-password"),
- env.getProperty("clamp.config.keyFile"));
- }
-
- @Override
- public String getKeyAlias() {
- return env.getProperty("server.ssl.key-alias");
- }
- });
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/clds/config/SystemPropertiesLoader.java b/src/main/java/org/onap/policy/clamp/clds/config/SystemPropertiesLoader.java
deleted file mode 100644
index 3e2e62b66..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/config/SystemPropertiesLoader.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.config;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.util.Properties;
-import javax.annotation.Resource;
-import org.springframework.context.ApplicationListener;
-import org.springframework.context.event.ContextRefreshedEvent;
-import org.springframework.stereotype.Component;
-
-@Component
-public class SystemPropertiesLoader implements ApplicationListener<ContextRefreshedEvent> {
- protected static final EELFLogger logger = EELFManager.getInstance().getLogger(SystemPropertiesLoader.class);
-
- @Resource(name = "mapper")
- private Properties myTranslator;
-
- @Override
- public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
- logger.info("Loading additional JVM properties:" + myTranslator.toString());
- System.getProperties().putAll(myTranslator);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/config/sdc/SdcControllersConfiguration.java b/src/main/java/org/onap/policy/clamp/clds/config/sdc/SdcControllersConfiguration.java
deleted file mode 100644
index 4748edf6d..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/config/sdc/SdcControllersConfiguration.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2018 AT&T Intellectual Property. All rights
- * reserved.
- * ================================================================================
- * Modifications Copyright (c) 2019 Samsung
- * ================================================================================
- * 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.policy.clamp.clds.config.sdc;
-
-import com.google.gson.JsonObject;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.Map;
-import javax.annotation.PostConstruct;
-import org.onap.policy.clamp.clds.exception.sdc.controller.SdcParametersException;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.ApplicationContext;
-import org.springframework.core.io.Resource;
-
-/**
- * This class maps the SDC config JSON file. This JSON can have multiple
- * sdc-controller config. So the json is loaded in a static way and the instance
- * must specify the controller name that it represents.
- */
-public class SdcControllersConfiguration {
-
- private static final String CONTROLLER_SUBTREE_KEY = "sdc-connections";
- @Autowired
- protected ApplicationContext appContext;
- /**
- * The file name that will be loaded by Spring.
- */
- @Value("${clamp.config.files.sdcController:'classpath:/clds/sdc-controllers-config.json'}")
- protected String sdcControllerFile;
- /**
- * The root of the JSON.
- */
- private JsonObject jsonRootNode;
-
- /**
- * Loads configuration from SDC controller config file.
- *
- * @throws IOException IO Exception
- */
- @PostConstruct
- public void loadConfiguration() throws IOException {
- Resource resource = appContext.getResource(sdcControllerFile);
- // Try to load json tree
- jsonRootNode = JsonUtils.GSON.fromJson(new InputStreamReader(
- resource.getInputStream(), StandardCharsets.UTF_8),
- JsonObject.class);
- }
-
- public SdcSingleControllerConfiguration getSdcSingleControllerConfiguration(String controllerName) {
- return getAllDefinedControllers().get(controllerName);
- }
-
- /**
- * This method reads all Controllers configurations and returns them.
- *
- * @return A list of controller Names defined in the config
- */
- public Map<String, SdcSingleControllerConfiguration> getAllDefinedControllers() {
- Map<String, SdcSingleControllerConfiguration> result = new HashMap<>();
- if (jsonRootNode.get(CONTROLLER_SUBTREE_KEY) != null) {
- jsonRootNode.get(CONTROLLER_SUBTREE_KEY).getAsJsonObject().entrySet().forEach(
- entry -> result.put(entry.getKey(),
- new SdcSingleControllerConfiguration(entry.getValue().getAsJsonObject(), entry.getKey())));
- } else {
- throw new SdcParametersException(
- CONTROLLER_SUBTREE_KEY + " key not found in the file: " + sdcControllerFile);
- }
- return result;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/config/sdc/SdcSingleControllerConfiguration.java b/src/main/java/org/onap/policy/clamp/clds/config/sdc/SdcSingleControllerConfiguration.java
deleted file mode 100644
index 0bbbf19dc..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/config/sdc/SdcSingleControllerConfiguration.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.config.sdc;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonObject;
-import java.security.GeneralSecurityException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import org.apache.commons.codec.DecoderException;
-import org.onap.policy.clamp.clds.exception.sdc.controller.SdcParametersException;
-import org.onap.policy.clamp.clds.util.CryptoUtils;
-import org.onap.sdc.api.consumer.IConfiguration;
-
-/**
- * This class maps the SDC config JSON for one controller.
- */
-public class SdcSingleControllerConfiguration implements IConfiguration {
-
- private static final EELFLogger logger = EELFManager.getInstance()
- .getLogger(SdcSingleControllerConfiguration.class);
- /**
- * The sdc Controller name corresponding.
- */
- private String sdcControllerName;
- /**
- * The root of the JSON.
- */
- private JsonObject jsonRootNode;
- // All keys that can be present in the JSON
- public static final String CONSUMER_GROUP_ATTRIBUTE_NAME = "consumerGroup";
- public static final String CONSUMER_ID_ATTRIBUTE_NAME = "consumerId";
- public static final String ENVIRONMENT_NAME_ATTRIBUTE_NAME = "environmentName";
- public static final String SDC_KEY_ATTRIBUTE_NAME = "password";
- public static final String POLLING_INTERVAL_ATTRIBUTE_NAME = "pollingInterval";
- public static final String RELEVANT_ARTIFACT_TYPES_ATTRIBUTE_NAME = "relevantArtifactTypes";
- public static final String USER_ATTRIBUTE_NAME = "user";
- public static final String SDC_ADDRESS_ATTRIBUTE_NAME = "sdcAddress";
- public static final String POLLING_TIMEOUT_ATTRIBUTE_NAME = "pollingTimeout";
- public static final String ACTIVATE_SERVER_TLS_AUTH = "activateServerTLSAuth";
- public static final String KEY_STORE_KEY = "keyStorePassword";
- public static final String KEY_STORE_PATH = "keyStorePath";
- public static final String MESSAGE_BUS_ADDRESSES = "messageBusAddresses";
- private String errorMessageKeyNotFound;
- /**
- * Supported artifact types.
- */
- public static final String HEAT = "HEAT";
- public static final String HEAT_ARTIFACT = "HEAT_ARTIFACT";
- public static final String HEAT_ENV = "HEAT_ENV";
- public static final String HEAT_NESTED = "HEAT_NESTED";
- public static final String HEAT_NET = "HEAT_NET";
- public static final String HEAT_VOL = "HEAT_VOL";
- public static final String OTHER = "OTHER";
- public static final String TOSCA_CSAR = "TOSCA_CSAR";
- public static final String VF_MODULES_METADATA = "VF_MODULES_METADATA";
- private static final String[] SUPPORTED_ARTIFACT_TYPES = {
- TOSCA_CSAR, VF_MODULES_METADATA
- };
- public static final List<String> SUPPORTED_ARTIFACT_TYPES_LIST = Collections
- .unmodifiableList(Arrays.asList(SUPPORTED_ARTIFACT_TYPES));
-
- /**
- * This constructor builds a SdcSingleControllerConfiguration from the
- * corresponding json.
- *
- * @param jsonNode
- * The JSON node
- * @param controllerName
- * The controller name that must appear in the JSON
- */
- public SdcSingleControllerConfiguration(JsonObject jsonNode, String controllerName) {
- jsonRootNode = jsonNode;
- setSdcControllerName(controllerName);
- testAllRequiredParameters();
- }
-
- public String getSdcControllerName() {
- return sdcControllerName;
- }
-
- /**
- * Sets SDC controller name.
- *
- * @param controllerName SDC controller name
- */
- public void setSdcControllerName(String controllerName) {
- this.sdcControllerName = controllerName;
- errorMessageKeyNotFound = " parameter cannot be found in config file for controller name" + sdcControllerName;
- testAllRequiredParameters();
- }
-
- private String getStringConfig(String key) {
- if (jsonRootNode != null && jsonRootNode.get(key) != null) {
- String config = jsonRootNode.get(key).getAsString();
- return config.isEmpty() ? null : config;
- }
- return null;
- }
-
- private Integer getIntConfig(String key) {
- if (jsonRootNode != null && jsonRootNode.get(key) != null) {
- return jsonRootNode.get(key).getAsInt();
- } else {
- return 0;
- }
- }
-
- private String getEncryptedStringConfig(String key) throws GeneralSecurityException, DecoderException {
- if (jsonRootNode != null && jsonRootNode.get(key) != null) {
- return jsonRootNode.get(key).getAsString().isEmpty() ? null
- : CryptoUtils.decrypt(jsonRootNode.get(key).getAsString());
- }
- return null;
- }
-
- @Override
- public java.lang.Boolean isUseHttpsWithDmaap() {
- return false;
- }
-
- @Override
- public String getConsumerGroup() {
- if (jsonRootNode != null && jsonRootNode.get(CONSUMER_GROUP_ATTRIBUTE_NAME) != null) {
- String config = jsonRootNode.get(CONSUMER_GROUP_ATTRIBUTE_NAME).getAsString();
- return "NULL".equals(config) || config.isEmpty() ? null : config;
- }
- return null;
- }
-
- @Override
- public String getConsumerID() {
- return getStringConfig(CONSUMER_ID_ATTRIBUTE_NAME);
- }
-
- @Override
- public String getEnvironmentName() {
- return getStringConfig(ENVIRONMENT_NAME_ATTRIBUTE_NAME);
- }
-
- @Override
- public String getPassword() {
- try {
- return getEncryptedStringConfig(SDC_KEY_ATTRIBUTE_NAME);
- } catch (GeneralSecurityException | DecoderException e) {
- logger.error("Unable to decrypt the SDC password", e);
- return null;
- }
- }
-
- @Override
- public int getPollingInterval() {
- return getIntConfig(POLLING_INTERVAL_ATTRIBUTE_NAME);
- }
-
- @Override
- public List<String> getRelevantArtifactTypes() {
- // DO not return the Static List SUPPORTED_ARTIFACT_TYPES_LIST because
- // the ASDC Client could try to modify it !!!
- return Arrays.asList(SUPPORTED_ARTIFACT_TYPES);
- }
-
- @Override
- public String getUser() {
- return getStringConfig(USER_ATTRIBUTE_NAME);
- }
-
- @Override
- public String getAsdcAddress() {
- return getStringConfig(SDC_ADDRESS_ATTRIBUTE_NAME);
- }
-
- @Override
- public int getPollingTimeout() {
- return getIntConfig(POLLING_TIMEOUT_ATTRIBUTE_NAME);
- }
-
- @Override
- public boolean activateServerTLSAuth() {
- if (jsonRootNode != null && jsonRootNode.get(ACTIVATE_SERVER_TLS_AUTH) != null
- && jsonRootNode.get(ACTIVATE_SERVER_TLS_AUTH).isJsonPrimitive()) {
- return jsonRootNode.get(ACTIVATE_SERVER_TLS_AUTH).getAsBoolean();
- } else {
- return false;
- }
- }
-
- @Override
- public String getKeyStorePassword() {
- try {
- return getEncryptedStringConfig(KEY_STORE_KEY);
- } catch (GeneralSecurityException | DecoderException e) {
- logger.error("Unable to decrypt the SDC password", e);
- return null;
- }
- }
-
- @Override
- public String getKeyStorePath() {
- return getStringConfig(KEY_STORE_PATH);
- }
-
- /**
- * This method can be used to validate all required parameters are well
- * there.
- */
- public void testAllRequiredParameters() {
- // Special case for this attribute that can be null from
- // getConsumerGroup
- if (jsonRootNode == null) {
- throw new SdcParametersException("Json is null for controller " + this.getSdcControllerName());
- }
- if (this.getConsumerGroup() == null && (jsonRootNode.get(CONSUMER_GROUP_ATTRIBUTE_NAME) == null
- || !"NULL".equals(jsonRootNode.get(CONSUMER_GROUP_ATTRIBUTE_NAME).getAsString()))) {
- throw new SdcParametersException(CONSUMER_GROUP_ATTRIBUTE_NAME + errorMessageKeyNotFound);
- }
- if (this.getConsumerID() == null || this.getConsumerID().isEmpty()) {
- throw new SdcParametersException(CONSUMER_ID_ATTRIBUTE_NAME + errorMessageKeyNotFound);
- }
- if (this.getEnvironmentName() == null || this.getEnvironmentName().isEmpty()) {
- throw new SdcParametersException(ENVIRONMENT_NAME_ATTRIBUTE_NAME + errorMessageKeyNotFound);
- }
- if (this.getAsdcAddress() == null || this.getAsdcAddress().isEmpty()) {
- throw new SdcParametersException(SDC_ADDRESS_ATTRIBUTE_NAME + errorMessageKeyNotFound);
- }
- if (this.getMsgBusAddress() == null || this.getMsgBusAddress().isEmpty()) {
- throw new SdcParametersException(MESSAGE_BUS_ADDRESSES + errorMessageKeyNotFound);
- }
- if (this.getPassword() == null || this.getPassword().isEmpty()) {
- throw new SdcParametersException(SDC_KEY_ATTRIBUTE_NAME + errorMessageKeyNotFound);
- }
- if (this.getPollingInterval() == 0) {
- throw new SdcParametersException(POLLING_INTERVAL_ATTRIBUTE_NAME + errorMessageKeyNotFound);
- }
- if (this.getPollingTimeout() == 0) {
- throw new SdcParametersException(POLLING_TIMEOUT_ATTRIBUTE_NAME + errorMessageKeyNotFound);
- }
- if (this.getRelevantArtifactTypes() == null || this.getRelevantArtifactTypes().isEmpty()) {
- throw new SdcParametersException(RELEVANT_ARTIFACT_TYPES_ATTRIBUTE_NAME + errorMessageKeyNotFound);
- }
- if (this.getUser() == null || this.getUser().isEmpty()) {
- throw new SdcParametersException(USER_ATTRIBUTE_NAME + errorMessageKeyNotFound);
- }
- }
-
- /**
- * The flag allows the client to receive metadata for all resources of the
- * service regardless of the artifacts associated to them. Setting the flag
- * to false will preserve legacy behavior.
- */
- @Override
- public boolean isFilterInEmptyResources() {
- return false;
- }
-
- @Override
- public List<String> getMsgBusAddress() {
- List<String> addressesList = new ArrayList<>();
- if (jsonRootNode != null && jsonRootNode.get(MESSAGE_BUS_ADDRESSES) != null) {
- jsonRootNode.get(MESSAGE_BUS_ADDRESSES).getAsJsonArray().forEach(k -> addressesList.add(k.getAsString()));
- return addressesList;
- } else {
- return addressesList;
- }
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/config/spring/CldsConfiguration.java b/src/main/java/org/onap/policy/clamp/clds/config/spring/CldsConfiguration.java
deleted file mode 100644
index 72f09ce13..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/config/spring/CldsConfiguration.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.clds.config.spring;
-
-import org.onap.policy.clamp.clds.config.ClampProperties;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.config.PropertiesFactoryBean;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-
-@Configuration
-@Profile("clamp-default")
-public class CldsConfiguration {
-
- @Autowired
- private ApplicationContext appContext;
- @Autowired
- private ClampProperties refProp;
-
-
- /**
- * This loads the file system.properties.
- *
- * @return The PropertiesFactoryBean
- */
- @Bean(name = "mapper")
- public PropertiesFactoryBean mapper() {
- PropertiesFactoryBean bean = new PropertiesFactoryBean();
- bean.setLocation(appContext.getResource(refProp.getStringValue("files.systemProperties")));
- return bean;
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/clds/config/spring/SdcControllerConfiguration.java b/src/main/java/org/onap/policy/clamp/clds/config/spring/SdcControllerConfiguration.java
deleted file mode 100644
index 6005b0d39..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/config/spring/SdcControllerConfiguration.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.clds.config.spring;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.util.ArrayList;
-import java.util.List;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import org.onap.policy.clamp.clds.config.ClampProperties;
-import org.onap.policy.clamp.clds.config.sdc.SdcControllersConfiguration;
-import org.onap.policy.clamp.clds.exception.sdc.controller.SdcControllerException;
-import org.onap.policy.clamp.clds.sdc.controller.SdcSingleController;
-import org.onap.policy.clamp.clds.sdc.controller.SdcSingleControllerStatus;
-import org.onap.policy.clamp.loop.CsarInstaller;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import org.springframework.scheduling.annotation.Scheduled;
-
-@Configuration
-@Profile("clamp-sdc-controller")
-public class SdcControllerConfiguration {
-
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(SdcControllerConfiguration.class);
- private List<SdcSingleController> sdcControllersList = new ArrayList<>();
- private final ClampProperties clampProp;
- private final CsarInstaller csarInstaller;
-
- @Autowired
- public SdcControllerConfiguration(ClampProperties clampProp,
- @Qualifier("csarInstaller") CsarInstaller csarInstaller) {
- this.clampProp = clampProp;
- this.csarInstaller = csarInstaller;
- }
-
- /**
- * Loads SDC controller configuration.
- */
- @PostConstruct
- public void loadSdcControllers() {
- SdcControllersConfiguration sdcControllersConfig = getSdcControllersConfiguration();
- sdcControllersConfig.getAllDefinedControllers().forEach((key, value) -> {
- logger.info("Creating controller instance:" + key);
- SdcSingleController sdcController = new SdcSingleController(clampProp, csarInstaller, value, null);
- sdcControllersList.add(sdcController);
- });
- }
-
- /**
- * Checks whether all SDC controllers defined are up and running.
- */
- @Scheduled(fixedRate = 120000)
- public void checkAllSdcControllers() {
- logger.info("Checking that all SDC Controllers defined are up and running");
- for (SdcSingleController controller : sdcControllersList) {
- try {
- if (SdcSingleControllerStatus.STOPPED.equals(controller.getControllerStatus())) {
- controller.initSdc();
- }
- } catch (SdcControllerException e) {
- logger.error("Exception caught when booting sdc controller", e);
- }
- }
- logger.info("SDC Controllers check completed");
- }
-
- /**
- * Closes all SDC Controller and the SDC Client.
- */
- @PreDestroy
- public void killSdcControllers() {
- sdcControllersList.forEach(e -> {
- try {
- e.closeSdc();
- } catch (SdcControllerException e1) {
- logger.error("Exception caught when stopping sdc controller", e1);
- }
- });
- }
-
- @Bean(name = "sdcControllersConfiguration")
- public SdcControllersConfiguration getSdcControllersConfiguration() {
- return new SdcControllersConfiguration();
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/clds/exception/CldsConfigException.java b/src/main/java/org/onap/policy/clamp/clds/exception/CldsConfigException.java
deleted file mode 100644
index ef1ced0a3..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/exception/CldsConfigException.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.clds.exception;
-
-/**
- * New exception to CldsUser errors.
- *
- */
-public class CldsConfigException extends RuntimeException {
-
- /**
- * The serial version ID.
- */
- private static final long serialVersionUID = 5958873136187918505L;
-
- /**
- * This constructor can be used to create a new CldsConfigException.
- *
- * @param message
- * A string message detailing the problem
- * @param ex
- * The exception sent by the code
- */
- public CldsConfigException(String message, Throwable ex) {
- super(message, ex);
- }
-
- /**
- * This constructor can be used to create a new CldsConfigException. Use
- * this constructor only if you are creating a new exception stack, not if
- * an exception was already raised by another code.
- *
- * @param message
- * A string message detailing the problem
- */
- public CldsConfigException(String message) {
- super(message);
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/exception/CldsUsersException.java b/src/main/java/org/onap/policy/clamp/clds/exception/CldsUsersException.java
deleted file mode 100644
index 4d4855b6f..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/exception/CldsUsersException.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.clds.exception;
-
-/**
- * New exception to CldsUser errors.
- *
- */
-public class CldsUsersException extends RuntimeException {
-
- /**
- * The serial version ID.
- */
- private static final long serialVersionUID = 933535057227505342L;
-
- /**
- * This constructor can be used to create a new CldsUsersException.
- *
- * @param message
- * A string message detailing the problem
- * @param ex
- * The exception sent by the code
- */
- public CldsUsersException(String message, Throwable ex) {
- super(message, ex);
- }
-
- /**
- * This constructor can be used to create a new CldsUsersException. Use this
- * constructor only if you are creating a new exception stack, not if an
- * exception was already raised by another code.
- *
- * @param message
- * A string message detailing the problem
- */
- public CldsUsersException(String message) {
- super(message);
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/exception/NotAuthorizedException.java b/src/main/java/org/onap/policy/clamp/clds/exception/NotAuthorizedException.java
deleted file mode 100644
index 73c117932..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/exception/NotAuthorizedException.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.exception;
-
-/**
- * New exception to request errors.
- *
- */
-public class NotAuthorizedException extends RuntimeException {
-
- /**
- * The serial version ID.
- */
- private static final long serialVersionUID = -5738167530541646123L;
-
- /**
- * This constructor can be used to create a new CldsConfigException.
- *
- * @param message
- * A string message detailing the problem
- * @param ex
- * The exception sent by the code
- */
- public NotAuthorizedException(String message, Throwable ex) {
- super(message, ex);
- }
-
- /**
- * This constructor can be used to create a new CldsConfigException. Use this
- * constructor only if you are creating a new exception stack, not if an
- * exception was already raised by another code.
- *
- * @param message
- * A string message detailing the problem
- */
- public NotAuthorizedException(String message) {
- super(message);
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/exception/cds/CdsParametersException.java b/src/main/java/org/onap/policy/clamp/clds/exception/cds/CdsParametersException.java
deleted file mode 100644
index b4a013eb4..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/exception/cds/CdsParametersException.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 Huawei Technologies Co., Ltd.
- * ================================================================================
- * 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.policy.clamp.clds.exception.cds;
-
-/**
- * Exception while parsing CDS response.
- */
-public class CdsParametersException extends RuntimeException {
-
- /**
- * serialization id.
- */
- private static final long serialVersionUID = 8425657297510362736L;
-
- /**
- * This constructor can be used to create a new CdsParametersException.
- *
- * @param message The message to dump
- */
- public CdsParametersException(final String message) {
- super(message);
- }
-
- /**
- * This constructor can be used to create a new CdsParametersException.
- *
- * @param message The message to dump
- * @param cause The Throwable cause object
- */
- public CdsParametersException(final String message, final Throwable cause) {
- super(message, cause);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/exception/dcae/DcaeDeploymentException.java b/src/main/java/org/onap/policy/clamp/clds/exception/dcae/DcaeDeploymentException.java
deleted file mode 100644
index 78c2c6331..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/exception/dcae/DcaeDeploymentException.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.clds.exception.dcae;
-
-/**
- * New exception to capture DCAE communication errors.
- *
- */
-public class DcaeDeploymentException extends RuntimeException {
-
- /**
- * Generated ID.
- */
- private static final long serialVersionUID = 8452294782552680243L;
-
- /**
- * This constructor can be used to create a new DcaeDeploymentException.
- *
- * @param message
- * A string message detailing the problem
- * @param ex
- * The exception sent by the code
- */
- public DcaeDeploymentException(String message, Throwable ex) {
- super(message, ex);
- }
-
- /**
- * This constructor can be used to create a new DcaeDeploymentException. Use
- * this constructor only if you are creating a new exception stack, not if
- * an exception was already raised by another code.
- *
- * @param message
- * A string message detailing the problem
- */
- public DcaeDeploymentException(String message) {
- super(message);
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/BlueprintParserException.java b/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/BlueprintParserException.java
deleted file mode 100644
index 6939fdf06..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/BlueprintParserException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds.exception.sdc.controller;
-
-/**
- * Exception during blueprint parsing.
- */
-public class BlueprintParserException extends Exception {
-
- /**
- * Serial ID.
- */
- private static final long serialVersionUID = -3044162346353623199L;
-
- /**
- * This constructor can be used to create a new SdcDownloadException.
- *
- * @param message The message to dump
- */
- public BlueprintParserException(final String message) {
- super(message);
- }
-
- /**
- * This constructor can be used to create a new SdcDownloadException.
- *
- * @param message The message to dump
- * @param cause The Throwable cause object
- */
- public BlueprintParserException(final String message, final Throwable cause) {
- super(message, cause);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/CsarHandlerException.java b/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/CsarHandlerException.java
deleted file mode 100644
index e3f16f908..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/CsarHandlerException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.exception.sdc.controller;
-
-/**
- * Exception during Csar operations.
- */
-public class CsarHandlerException extends Exception {
-
- /**
- * The serial version ID.
- */
- private static final long serialVersionUID = -7628640776124409155L;
-
- /**
- * This constructor can be used to create a new CsarHandlerException.
- *
- * @param message The message to dump
- */
- public CsarHandlerException(final String message) {
- super(message);
- }
-
- /**
- * This constructor can be used to create a new CsarHandlerException.
- *
- * @param message The message to dump
- * @param cause The Throwable cause object
- */
- public CsarHandlerException(final String message, final Throwable cause) {
- super(message, cause);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcArtifactInstallerException.java b/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcArtifactInstallerException.java
deleted file mode 100644
index 1202ec199..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcArtifactInstallerException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.exception.sdc.controller;
-
-/**
- * Exception during SDC artifact installation.
- */
-public class SdcArtifactInstallerException extends Exception {
-
- /**
- * serialization id.
- */
- private static final long serialVersionUID = 4095937499475915021L;
-
- /**
- * This constructor can be used to create a new SdcArtifactInstallerException.
- *
- * @param message The message to dump
- */
- public SdcArtifactInstallerException(final String message) {
- super(message);
- }
-
- /**
- * This constructor can be used to create a new SdcArtifactInstallerException.
- *
- * @param message The message to dump
- * @param cause The Throwable cause object
- */
- public SdcArtifactInstallerException(final String message, final Throwable cause) {
- super(message, cause);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcControllerException.java b/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcControllerException.java
deleted file mode 100644
index e391ee7e8..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcControllerException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.exception.sdc.controller;
-
-/**
- * Exception of the SDC controller.
- */
-public class SdcControllerException extends Exception {
-
- /**
- * serialization id.
- */
- private static final long serialVersionUID = -4236006447255525130L;
-
- /**
- * This constructor can be used to create a new SdcControllerException.
- *
- * @param message The message to dump
- */
- public SdcControllerException(final String message) {
- super(message);
- }
-
- /**
- * This constructor can be used to create a new SdcControllerException.
- *
- * @param message The message to dump
- * @param cause The Throwable cause object
- */
- public SdcControllerException(final String message, final Throwable cause) {
- super(message, cause);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcDownloadException.java b/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcDownloadException.java
deleted file mode 100644
index 3c0240ef3..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcDownloadException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.exception.sdc.controller;
-
-/**
- * Exception during download from SDC.
- */
-public class SdcDownloadException extends Exception {
-
- /**
- * serialization id.
- */
- private static final long serialVersionUID = -5276848693231134901L;
-
- /**
- * This constructor can be used to create a new SdcDownloadException.
- *
- * @param message The message to dump
- */
- public SdcDownloadException(final String message) {
- super(message);
- }
-
- /**
- * This constructor can be used to create a new SdcDownloadException.
- *
- * @param message The message to dump
- * @param cause The Throwable cause object
- */
- public SdcDownloadException(final String message, final Throwable cause) {
- super(message, cause);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcParametersException.java b/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcParametersException.java
deleted file mode 100644
index fe573882f..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/exception/sdc/controller/SdcParametersException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.exception.sdc.controller;
-
-/**
- * Exception of the SDC controller.
- */
-public class SdcParametersException extends RuntimeException {
-
- /**
- * serialization id.
- */
- private static final long serialVersionUID = 8425657297510362736L;
-
- /**
- * This constructor can be used to create a new SdcParametersException.
- *
- * @param message The message to dump
- */
- public SdcParametersException(final String message) {
- super(message);
- }
-
- /**
- * This constructor can be used to create a new SdcParametersException.
- *
- * @param message The message to dump
- * @param cause The Throwable cause object
- */
- public SdcParametersException(final String message, final Throwable cause) {
- super(message, cause);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/filter/ClampCadiFilter.java b/src/main/java/org/onap/policy/clamp/clds/filter/ClampCadiFilter.java
deleted file mode 100644
index 6fa8ecb2b..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/filter/ClampCadiFilter.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.clds.filter;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.StandardCopyOption;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import org.onap.aaf.cadi.config.Config;
-import org.onap.aaf.cadi.filter.CadiFilter;
-import org.onap.policy.clamp.clds.util.ResourceFileUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.ApplicationContext;
-
-public class ClampCadiFilter extends CadiFilter {
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(ClampCadiFilter.class);
-
- @Autowired
- private ApplicationContext appContext;
-
- @Value("${server.ssl.key-store:#{null}}")
- private String keyStore;
-
- @Value("${server.ssl.key-store-password:#{null}}")
- private String keyStorePass;
-
- @Value("${server.ssl.trust-store:#{null}}")
- private String trustStore;
-
- @Value("${server.ssl.trust-store-password:#{null}}")
- private String trustStorePass;
-
- @Value("${server.ssl.key-alias:clamp@clamp.onap.org}")
- private String alias;
-
- @Value("${clamp.config.keyFile:#{null}}")
- private String keyFile;
-
- @Value("${clamp.config.cadi.cadiLoglevel:#{null}}")
- private String cadiLoglevel;
-
- @Value("${clamp.config.cadi.cadiLatitude:#{null}}")
- private String cadiLatitude;
-
- @Value("${clamp.config.cadi.cadiLongitude:#{null}}")
- private String cadiLongitude;
-
- @Value("${clamp.config.cadi.aafLocateUrl:#{null}}")
- private String aafLocateUrl;
-
- @Value("${clamp.config.cadi.oauthTokenUrl:#{null}}")
- private String oauthTokenUrl;
-
- @Value("${clamp.config.cadi.oauthIntrospectUrl:#{null}}")
- private String oauthIntrospectUrl;
-
- @Value("${clamp.config.cadi.aafEnv:#{null}}")
- private String aafEnv;
-
- @Value("${clamp.config.cadi.aafUrl:#{null}}")
- private String aafUrl;
-
- @Value("${clamp.config.cadi.cadiX509Issuers:#{null}}")
- private String cadiX509Issuers;
-
- @Value("${clamp.config.caCerts:#{null}}")
- private String caCertsPath;
-
- private void checkIfNullProperty(String key, String value) {
- /*
- * When value is null, so not defined in application.properties set nothing in
- * System properties
- */
- if (value != null) {
- /*
- * Ensure that any properties already defined in System.prop by JVM params won't
- * be overwritten by Spring application.properties values
- */
- System.setProperty(key, System.getProperty(key, value));
- }
- }
-
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- // set some properties in System so that Cadi filter will find its config
- // The JVM values set will always overwrite the Spring ones.
- checkIfNullProperty(Config.CADI_KEYFILE, convertSpringToPath(keyFile));
- checkIfNullProperty(Config.CADI_LOGLEVEL, cadiLoglevel);
- checkIfNullProperty(Config.CADI_LATITUDE, cadiLatitude);
- checkIfNullProperty(Config.CADI_LONGITUDE, cadiLongitude);
-
- checkIfNullProperty(Config.AAF_LOCATE_URL, aafLocateUrl);
- checkIfNullProperty(Config.AAF_OAUTH2_TOKEN_URL, oauthTokenUrl);
- checkIfNullProperty(Config.AAF_OAUTH2_INTROSPECT_URL, oauthIntrospectUrl);
-
- checkIfNullProperty(Config.AAF_ENV, aafEnv);
- checkIfNullProperty(Config.AAF_URL, aafUrl);
- checkIfNullProperty(Config.CADI_X509_ISSUERS, cadiX509Issuers);
- checkIfNullProperty(Config.CADI_KEYSTORE, convertSpringToPath(keyStore));
- checkIfNullProperty(Config.CADI_TRUSTSTORE, convertSpringToPath(trustStore));
- checkIfNullProperty(Config.CADI_ALIAS, alias);
- checkIfNullProperty(Config.CADI_KEYSTORE_PASSWORD, keyStorePass);
- checkIfNullProperty(Config.CADI_TRUSTSTORE_PASSWORD, trustStorePass);
-
- super.init(filterConfig);
- }
-
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- throws IOException, ServletException {
- try {
- String certHeader = ((HttpServletRequest) request).getHeader("X-SSL-Cert");
- if (certHeader != null) {
- CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
- X509Certificate cert = (X509Certificate) certificateFactory
- .generateCertificate(new ByteArrayInputStream(
- URLDecoder.decode(certHeader, StandardCharsets.UTF_8.toString()).getBytes()));
- X509Certificate caCert = (X509Certificate) certificateFactory
- .generateCertificate(new ByteArrayInputStream(
- ResourceFileUtils.getResourceAsString(this.caCertsPath).getBytes()));
-
- X509Certificate[] certifArray = ((X509Certificate[]) request
- .getAttribute("javax.servlet.request.X509Certificate"));
- if (certifArray == null) {
- certifArray = new X509Certificate[] { cert, caCert };
- request.setAttribute("javax.servlet.request.X509Certificate", certifArray);
- } else {
- certifArray[0] = cert;
- certifArray[1] = caCert;
- }
- }
-
- } catch (CertificateException e) {
- logger.error("Unable to inject the X.509 certificate", e);
- }
- super.doFilter(request, response, chain);
- }
-
- private String convertSpringToPath(String fileName) {
- try (InputStream ioFile = appContext.getResource(fileName).getInputStream()) {
- if (!fileName.contains("file:")) {
- File targetFile = new File(appContext.getResource(fileName).getFilename());
- java.nio.file.Files.copy(ioFile, targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
- return targetFile.getPath();
- } else {
- return appContext.getResource(fileName).getFile().getPath();
- }
- } catch (IOException e) {
- logger.error("Unable to open and copy the file: " + fileName, e);
- return null;
- }
-
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/model/ClampInformation.java b/src/main/java/org/onap/policy/clamp/clds/model/ClampInformation.java
deleted file mode 100644
index 5708cb6ec..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/model/ClampInformation.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2017-2020 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.policy.clamp.clds.model;
-
-import com.google.gson.annotations.Expose;
-import java.util.ArrayList;
-import java.util.List;
-import org.onap.policy.clamp.clds.util.ClampVersioning;
-
-public class ClampInformation {
- @Expose
- private String userName;
- @Expose
- private String cldsVersion = ClampVersioning.getCldsVersionFromProps();
- @Expose
- List<String> allPermissions = new ArrayList<>();
-
- public String getUserName() {
- return userName;
- }
-
- public void setUserName(String userName) {
- this.userName = userName;
- }
-
- public String getCldsVersion() {
- return cldsVersion;
- }
-
- public void setCldsVersion(String cldsVersion) {
- this.cldsVersion = cldsVersion;
- }
-
- public List<String> getAllPermissions() {
- return allPermissions;
- }
-
- public void setAllPermissions(List<String> allPermissions) {
- this.allPermissions = allPermissions;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/model/CldsHealthCheck.java b/src/main/java/org/onap/policy/clamp/clds/model/CldsHealthCheck.java
deleted file mode 100644
index c814a628d..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/model/CldsHealthCheck.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.clds.model;
-
-import com.google.gson.annotations.Expose;
-
-public class CldsHealthCheck {
- @Expose
- private String healthCheckComponent;
- @Expose
- private String healthCheckStatus;
- @Expose
- private String description;
-
- public String getHealthCheckComponent() {
- return healthCheckComponent;
- }
-
- public void setHealthCheckComponent(String healthCheckComponent) {
- this.healthCheckComponent = healthCheckComponent;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public String getHealthCheckStatus() {
- return healthCheckStatus;
- }
-
- public void setHealthCheckStatus(String healthCheckStatus) {
- this.healthCheckStatus = healthCheckStatus;
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/model/cds/CdsBpWorkFlowListResponse.java b/src/main/java/org/onap/policy/clamp/clds/model/cds/CdsBpWorkFlowListResponse.java
deleted file mode 100644
index a3b42524e..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/model/cds/CdsBpWorkFlowListResponse.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 Huawei Technologies Co., Ltd.
- * ================================================================================
- * 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.policy.clamp.clds.model.cds;
-
-import com.google.gson.annotations.Expose;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * This class maps the CDS response to a pojo.
- */
-public class CdsBpWorkFlowListResponse {
-
- @Expose
- private String blueprintName;
-
- @Expose
- private String version;
-
- @Expose
- private List<String> workflows = new LinkedList<String>();
-
- public String getBlueprintName() {
- return blueprintName;
- }
-
- public void setBlueprintName(String blueprintName) {
- this.blueprintName = blueprintName;
- }
-
- public String getVersion() {
- return version;
- }
-
- public void setVersion(String version) {
- this.version = version;
- }
-
- public List<String> getWorkflows() {
- return workflows;
- }
-
- public void setWorkflows(List<String> workflows) {
- this.workflows = workflows;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryCache.java b/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryCache.java
deleted file mode 100644
index a69d1a353..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryCache.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.clds.model.dcae;
-
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * This class stores the multiple DcaeInventoryResponse coming back from DCAE.
- * The structure is a map of list indexed by asdcServiceId. The list is sorted
- * by asdcResourceId. Therefore it's possible to retrieve all the loops defined
- * in the DCAE inventory and created by DCAE Mod.
- */
-public class DcaeInventoryCache {
-
- private static Map<String, Set<DcaeInventoryResponse>> blueprintsMap = new ConcurrentHashMap<>();
-
- /**
- * Add Dcae inventory response.
- *
- * @param inventoryResponse the Dcae inventory response
- */
- public void addDcaeInventoryResponse(DcaeInventoryResponse inventoryResponse) {
- Set<DcaeInventoryResponse> responsesSet = blueprintsMap.get(inventoryResponse.getAsdcServiceId());
- if (responsesSet == null) {
- responsesSet = new TreeSet<>();
- blueprintsMap.put(inventoryResponse.getAsdcServiceId(), responsesSet);
- }
- responsesSet.add(inventoryResponse);
- }
-
- public Set<String> getAllLoopIds() {
- return this.blueprintsMap.keySet();
- }
-
- public Set<DcaeInventoryResponse> getAllBlueprintsPerLoopId(String loopId) {
- return blueprintsMap.getOrDefault(loopId, new TreeSet<>());
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponse.java b/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponse.java
deleted file mode 100644
index 72ae61359..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponse.java
+++ /dev/null
@@ -1,102 +0,0 @@
-
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.clds.model.dcae;
-
-import com.google.gson.annotations.Expose;
-
-/**
- * This class maps the DCAE inventory answer to a nice pojo.
- */
-public class DcaeInventoryResponse implements Comparable<DcaeInventoryResponse> {
-
- @Expose
- private String typeName;
-
- @Expose
- private String typeId;
-
- @Expose
- private String blueprintTemplate;
-
- /**
- * This field will be used to know all blueprints associated a loop.
- */
- @Expose
- private String asdcServiceId;
-
- /**
- * This field will be used to know to order of each blueprint microservice in a
- * loop.
- */
- @Expose
- private String asdcResourceId;
-
- public String getTypeName() {
- return typeName;
- }
-
- public void setTypeName(String typeName) {
- this.typeName = typeName;
- }
-
- public String getTypeId() {
- return typeId;
- }
-
- public void setTypeId(String typeId) {
- this.typeId = typeId;
- }
-
- public String getBlueprintTemplate() {
- return blueprintTemplate;
- }
-
- public void setBlueprintTemplate(String blueprintTemplate) {
- this.blueprintTemplate = blueprintTemplate;
- }
-
- public String getAsdcServiceId() {
- return asdcServiceId;
- }
-
- public void setAsdcServiceId(String asdcServiceId) {
- this.asdcServiceId = asdcServiceId;
- }
-
- public String getAsdcResourceId() {
- return asdcResourceId;
- }
-
- public void setAsdcResourceId(String asdcResourceId) {
- this.asdcResourceId = asdcResourceId;
- }
-
- @Override
- public int compareTo(DcaeInventoryResponse otherResponse) {
- int thisResourceId = Integer.parseInt(this.asdcResourceId);
- int otherResourceId = Integer.parseInt(otherResponse.getAsdcResourceId());
- return (thisResourceId < otherResourceId ? -1 : (thisResourceId > otherResourceId ? 1 : 0));
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeLinks.java b/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeLinks.java
deleted file mode 100644
index 4d6e544da..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeLinks.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.clds.model.dcae;
-
-import com.google.gson.annotations.Expose;
-
-public class DcaeLinks {
- @Expose
- private String self;
- @Expose
- private String status;
- @Expose
- private String uninstall;
-
- public String getSelf() {
- return self;
- }
-
- public void setSelf(String self) {
- this.self = self;
- }
-
- public String getStatus() {
- return status;
- }
-
- public void setStatus(String status) {
- this.status = status;
- }
-
- public String getUninstall() {
- return uninstall;
- }
-
- public void setUninstall(String uninstall) {
- this.uninstall = uninstall;
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeOperationStatusResponse.java b/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeOperationStatusResponse.java
deleted file mode 100644
index 9389a51fc..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeOperationStatusResponse.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.clds.model.dcae;
-
-import com.google.gson.annotations.Expose;
-
-/**
- * This class maps the DCAE deployment handler response to a nice pojo.
- */
-public class DcaeOperationStatusResponse {
-
- @Expose
- private String operationType;
-
- @Expose
- private String status;
-
- @Expose
- private String requestId;
-
- @Expose
- private String error;
-
- @Expose
- private DcaeLinks links;
-
- public String getOperationType() {
- return operationType;
- }
-
- public void setOperationType(String operationType) {
- this.operationType = operationType;
- }
-
- public String getStatus() {
- return status;
- }
-
- public void setStatus(String status) {
- this.status = status;
- }
-
- public String getRequestId() {
- return requestId;
- }
-
- public void setRequestId(String requestId) {
- this.requestId = requestId;
- }
-
- public String getError() {
- return error;
- }
-
- public void setError(String error) {
- this.error = error;
- }
-
- public DcaeLinks getLinks() {
- return links;
- }
-
- public void setLinks(DcaeLinks links) {
- this.links = links;
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/DistributionStatusMessage.java b/src/main/java/org/onap/policy/clamp/clds/sdc/controller/DistributionStatusMessage.java
deleted file mode 100644
index ca46c6d31..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/DistributionStatusMessage.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.sdc.controller;
-
-import org.onap.sdc.api.consumer.IDistributionStatusMessage;
-import org.onap.sdc.utils.DistributionStatusEnum;
-
-public class DistributionStatusMessage implements IDistributionStatusMessage {
-
- private String artifactUrl;
- private String consumerId;
- private String distributionId;
- private DistributionStatusEnum distributionStatus;
- private long timestamp;
-
- /**
- * Distribution status message constructor.
- *
- * @param artifactUrl
- * Url of specific SDC artifact(resource)
- * @param consumerId
- * Unique ID of SDC component instance
- * @param distributionId
- * Distribution ID published in the distribution notification.
- * @param distributionStatusEnum
- * Status to send in the message
- * @param timestamp
- * Timestamp of the message
- */
- public DistributionStatusMessage(final String artifactUrl, final String consumerId, final String distributionId,
- final DistributionStatusEnum distributionStatusEnum, final long timestamp) {
- this.artifactUrl = artifactUrl;
- this.consumerId = consumerId;
- this.distributionId = distributionId;
- this.distributionStatus = distributionStatusEnum;
- this.timestamp = timestamp;
- }
-
- @Override
- public String getArtifactURL() {
- return artifactUrl;
- }
-
- @Override
- public String getConsumerID() {
- return consumerId;
- }
-
- @Override
- public String getDistributionID() {
- return distributionId;
- }
-
- @Override
- public DistributionStatusEnum getStatus() {
- return distributionStatus;
- }
-
- @Override
- public long getTimestamp() {
- return timestamp;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/SdcSingleController.java b/src/main/java/org/onap/policy/clamp/clds/sdc/controller/SdcSingleController.java
deleted file mode 100644
index 4ca6b1cf4..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/SdcSingleController.java
+++ /dev/null
@@ -1,433 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2018-2019 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============================================
- * Modifications copyright (c) 2018 Nokia
- * ===================================================================
- *
- */
-
-package org.onap.policy.clamp.clds.sdc.controller;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.util.Date;
-import java.util.Map.Entry;
-import java.util.concurrent.ThreadLocalRandom;
-import org.onap.policy.clamp.clds.config.ClampProperties;
-import org.onap.policy.clamp.clds.config.sdc.SdcSingleControllerConfiguration;
-import org.onap.policy.clamp.clds.exception.sdc.controller.BlueprintParserException;
-import org.onap.policy.clamp.clds.exception.sdc.controller.CsarHandlerException;
-import org.onap.policy.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException;
-import org.onap.policy.clamp.clds.exception.sdc.controller.SdcControllerException;
-import org.onap.policy.clamp.clds.exception.sdc.controller.SdcDownloadException;
-import org.onap.policy.clamp.clds.sdc.controller.installer.BlueprintArtifact;
-import org.onap.policy.clamp.clds.sdc.controller.installer.CsarHandler;
-import org.onap.policy.clamp.clds.util.LoggingUtils;
-import org.onap.policy.clamp.loop.CsarInstaller;
-import org.onap.sdc.api.IDistributionClient;
-import org.onap.sdc.api.consumer.IComponentDoneStatusMessage;
-import org.onap.sdc.api.consumer.IDistributionStatusMessage;
-import org.onap.sdc.api.consumer.INotificationCallback;
-import org.onap.sdc.api.notification.IArtifactInfo;
-import org.onap.sdc.api.notification.INotificationData;
-import org.onap.sdc.api.results.IDistributionClientDownloadResult;
-import org.onap.sdc.api.results.IDistributionClientResult;
-import org.onap.sdc.impl.DistributionClientFactory;
-import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
-import org.onap.sdc.utils.DistributionActionResultEnum;
-import org.onap.sdc.utils.DistributionStatusEnum;
-
-/**
- * This class handles one sdc controller defined in the config.
- */
-public class SdcSingleController {
-
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(SdcSingleController.class);
- private boolean isSdcClientAutoManaged = false;
- private CsarInstaller csarInstaller;
- private ClampProperties refProp;
- /**
- * The constant CONFIG_SDC_FOLDER.
- */
- public static final String CONFIG_SDC_FOLDER = "sdc.csarFolder";
- private int nbOfNotificationsOngoing = 0;
- private SdcSingleControllerStatus controllerStatus = SdcSingleControllerStatus.STOPPED;
- private SdcSingleControllerConfiguration sdcConfig;
- private IDistributionClient distributionClient;
-
- /**
- * Inner class for Notification callback.
- */
- private final class SdcNotificationCallBack implements INotificationCallback {
-
- private SdcSingleController sdcController;
-
- /**
- * Instantiates a new Sdc notification call back.
- *
- * @param controller the controller
- */
- SdcNotificationCallBack(SdcSingleController controller) {
- sdcController = controller;
- }
-
- /**
- * This method can be called multiple times at the same moment. The controller
- * must be thread safe !
- */
- @Override
- public void activateCallback(INotificationData notificationData) {
- Date startTime = new Date();
- logger.info("Receive a callback notification in SDC, nb of resources: "
- + notificationData.getResources().size());
- sdcController.treatNotification(notificationData);
- LoggingUtils.setTimeContext(startTime, new Date());
- LoggingUtils.setResponseContext("0", "SDC Notification received and processed successfully",
- this.getClass().getName());
- }
- }
-
- /**
- * Gets nb of notifications ongoing.
- *
- * @return the nb of notifications ongoing
- */
- public int getNbOfNotificationsOngoing() {
- return nbOfNotificationsOngoing;
- }
-
- private void changeControllerStatusIdle() {
- if (this.nbOfNotificationsOngoing > 1) {
- --this.nbOfNotificationsOngoing;
- } else {
- this.nbOfNotificationsOngoing = 0;
- this.controllerStatus = SdcSingleControllerStatus.IDLE;
- }
- }
-
- /**
- * Change controller status.
- *
- * @param newControllerStatus the new controller status
- */
- protected final synchronized void changeControllerStatus(SdcSingleControllerStatus newControllerStatus) {
- switch (newControllerStatus) {
- case BUSY:
- ++this.nbOfNotificationsOngoing;
- this.controllerStatus = newControllerStatus;
- break;
- case IDLE:
- this.changeControllerStatusIdle();
- break;
- default:
- this.controllerStatus = newControllerStatus;
- break;
- }
- }
-
- /**
- * Gets controller status.
- *
- * @return the controller status
- */
- public final synchronized SdcSingleControllerStatus getControllerStatus() {
- return this.controllerStatus;
- }
-
- /**
- * Instantiates a new Sdc single controller.
- *
- * @param clampProp the clamp prop
- * @param csarInstaller the csar installer
- * @param sdcSingleConfig the sdc single config
- * @param distributionClient the distribution client
- */
- public SdcSingleController(ClampProperties clampProp, CsarInstaller csarInstaller,
- SdcSingleControllerConfiguration sdcSingleConfig,
- IDistributionClient distributionClient) {
- this.distributionClient = distributionClient;
- isSdcClientAutoManaged = (distributionClient == null);
- this.sdcConfig = sdcSingleConfig;
- this.refProp = clampProp;
- this.csarInstaller = csarInstaller;
- }
-
- /**
- * This method initializes the SDC Controller and the SDC Client.
- *
- * @throws SdcControllerException It throws an exception if the SDC Client
- * cannot be instantiated or if an init attempt
- * is done when already initialized
- */
- public void initSdc() throws SdcControllerException {
- logger.info("Attempt to initialize the SDC Controller: " + sdcConfig.getSdcControllerName());
- if (this.getControllerStatus() != SdcSingleControllerStatus.STOPPED) {
- throw new SdcControllerException("The controller is already initialized, call the closeSDC method first");
- }
- if (distributionClient == null) {
- distributionClient = DistributionClientFactory.createDistributionClient();
- }
- IDistributionClientResult result = distributionClient.init(sdcConfig, new SdcNotificationCallBack(this));
- if (!result.getDistributionActionResult().equals(DistributionActionResultEnum.SUCCESS)) {
- logger.error("SDC distribution client init failed with reason:" + result.getDistributionMessageResult());
- this.changeControllerStatus(SdcSingleControllerStatus.STOPPED);
- throw new SdcControllerException("Initialization of the SDC Controller failed with reason: "
- + result.getDistributionMessageResult());
- }
- logger.info("SDC Controller successfully initialized: " + sdcConfig.getSdcControllerName());
- logger.info("Attempt to start the SDC Controller: " + sdcConfig.getSdcControllerName());
- result = this.distributionClient.start();
- if (!result.getDistributionActionResult().equals(DistributionActionResultEnum.SUCCESS)) {
- logger.error("SDC distribution client start failed with reason:" + result.getDistributionMessageResult());
- this.changeControllerStatus(SdcSingleControllerStatus.STOPPED);
- throw new SdcControllerException(
- "Startup of the SDC Controller failed with reason: " + result.getDistributionMessageResult());
- }
- logger.info("SDC Controller successfully started: " + sdcConfig.getSdcControllerName());
- this.changeControllerStatus(SdcSingleControllerStatus.IDLE);
- }
-
- /**
- * This method closes the SDC Controller and the SDC Client.
- *
- * @throws SdcControllerException It throws an exception if the SDC Client
- * cannot be closed because it's currently BUSY
- * in processing notifications.
- */
- public void closeSdc() throws SdcControllerException {
- if (this.getControllerStatus() == SdcSingleControllerStatus.BUSY) {
- throw new SdcControllerException("Cannot close the SDC controller as it's currently in BUSY state");
- }
- if (this.distributionClient != null) {
- this.distributionClient.stop();
- // If auto managed we can set it to Null, SdcController controls it.
- // In the other case the client of this class has specified it, so
- // we can't reset it
- if (isSdcClientAutoManaged) {
- // Next init will initialize it with a new SDC Client
- this.distributionClient = null;
- }
- }
- this.changeControllerStatus(SdcSingleControllerStatus.STOPPED);
- }
-
- private void sendAllNotificationForCsarHandler(INotificationData notificationData, CsarHandler csar,
- NotificationType notificationType,
- DistributionStatusEnum distributionStatus, String errorMessage) {
- if (csar != null) {
- // Notify for the CSAR
- this.sendSdcNotification(notificationType, csar.getArtifactElement().getArtifactURL(),
- sdcConfig.getConsumerID(), notificationData.getDistributionID(), distributionStatus, errorMessage,
- System.currentTimeMillis());
- // Notify for all VF resources found
- for (Entry<String, BlueprintArtifact> blueprint : csar.getMapOfBlueprints().entrySet()) {
- // Normally always 1 artifact in resource for Clamp as we
- // specified
- // only VF_METADATA type
- this.sendSdcNotification(notificationType,
- blueprint.getValue().getResourceAttached().getArtifacts().get(0).getArtifactURL(),
- sdcConfig.getConsumerID(), notificationData.getDistributionID(), distributionStatus,
- errorMessage, System.currentTimeMillis());
- }
- } else {
- this.sendSdcNotification(notificationType, null, sdcConfig.getConsumerID(),
- notificationData.getDistributionID(), distributionStatus, errorMessage, System.currentTimeMillis());
- }
- }
-
- /**
- * This method processes the notification received from Sdc.
- *
- * @param notificationData The INotificationData
- */
- public void treatNotification(INotificationData notificationData) {
- CsarHandler csar = null;
- try {
- // wait for a random time, so that 2 running Clamp will not treat
- // the same Notification at the same time
- Thread.sleep(ThreadLocalRandom.current().nextInt(1, 10) * 1000L);
- logger.info("Notification received for service UUID:" + notificationData.getServiceUUID());
- this.changeControllerStatus(SdcSingleControllerStatus.BUSY);
- csar = new CsarHandler(notificationData, this.sdcConfig.getSdcControllerName(),
- refProp.getStringValue(CONFIG_SDC_FOLDER));
- csar.save(downloadTheArtifact(csar.getArtifactElement()));
- if (csarInstaller.isCsarAlreadyDeployed(csar)) {
- sendAllNotificationForCsarHandler(notificationData, csar, NotificationType.DOWNLOAD,
- DistributionStatusEnum.ALREADY_DOWNLOADED, null);
- sendAllNotificationForCsarHandler(notificationData, csar, NotificationType.DEPLOY,
- DistributionStatusEnum.ALREADY_DEPLOYED, null);
- } else {
- sendAllNotificationForCsarHandler(notificationData, csar, NotificationType.DOWNLOAD,
- DistributionStatusEnum.DOWNLOAD_OK, null);
- csarInstaller.installTheCsar(csar);
- sendAllNotificationForCsarHandler(notificationData, csar, NotificationType.DEPLOY,
- DistributionStatusEnum.DEPLOY_OK, null);
- }
- this.sendComponentStatus(notificationData, DistributionStatusEnum.COMPONENT_DONE_OK, null);
- } catch (SdcArtifactInstallerException | SdcToscaParserException e) {
- logger.error("SdcArtifactInstallerException exception caught during the notification processing", e);
- sendAllNotificationForCsarHandler(notificationData, csar, NotificationType.DEPLOY,
- DistributionStatusEnum.DEPLOY_ERROR, e.getMessage());
- this.sendComponentStatus(notificationData, DistributionStatusEnum.COMPONENT_DONE_ERROR, e.getMessage());
- } catch (SdcDownloadException | CsarHandlerException e) {
- logger.error("SdcDownloadException exception caught during the notification processing", e);
- sendAllNotificationForCsarHandler(notificationData, csar, NotificationType.DOWNLOAD,
- DistributionStatusEnum.DOWNLOAD_ERROR, e.getMessage());
- this.sendComponentStatus(notificationData, DistributionStatusEnum.COMPONENT_DONE_ERROR, e.getMessage());
- } catch (InterruptedException e) {
- logger.error("Interrupt exception caught during the notification processing", e);
- sendAllNotificationForCsarHandler(notificationData, csar, NotificationType.DEPLOY,
- DistributionStatusEnum.DEPLOY_ERROR, e.getMessage());
- this.sendComponentStatus(notificationData, DistributionStatusEnum.COMPONENT_DONE_ERROR, e.getMessage());
- Thread.currentThread().interrupt();
- } catch (BlueprintParserException e) {
- logger.error("BlueprintParser exception caught during the notification processing", e);
- sendAllNotificationForCsarHandler(notificationData, csar, NotificationType.DEPLOY,
- DistributionStatusEnum.DEPLOY_ERROR, e.getMessage());
- this.sendComponentStatus(notificationData, DistributionStatusEnum.COMPONENT_DONE_ERROR, e.getMessage());
- } catch (RuntimeException e) {
- logger.error("Unexpected exception caught during the notification processing", e);
- sendAllNotificationForCsarHandler(notificationData, csar, NotificationType.DEPLOY,
- DistributionStatusEnum.DEPLOY_ERROR, e.getMessage());
- this.sendComponentStatus(notificationData, DistributionStatusEnum.COMPONENT_DONE_ERROR, e.getMessage());
- } finally {
- this.changeControllerStatus(SdcSingleControllerStatus.IDLE);
- }
- }
-
- private enum NotificationType {
- /**
- * Download notification type.
- */
- DOWNLOAD,
- /**
- * Deploy notification type.
- */
- DEPLOY
- }
-
- private IDistributionClientDownloadResult downloadTheArtifact(IArtifactInfo artifact) throws SdcDownloadException {
- logger.info("Trying to download the artifact : " + artifact.getArtifactURL() + " UUID: "
- + artifact.getArtifactUUID());
- IDistributionClientDownloadResult downloadResult;
- try {
- downloadResult = distributionClient.download(artifact);
- if (null == downloadResult) {
- logger.info("downloadResult is Null for: " + artifact.getArtifactUUID());
- return null;
- }
- } catch (RuntimeException e) {
- throw new SdcDownloadException("Exception caught when downloading the artifact", e);
- }
- if (DistributionActionResultEnum.SUCCESS.equals(downloadResult.getDistributionActionResult())) {
- logger.info("Successfully downloaded the artifact " + artifact.getArtifactURL() + " UUID "
- + artifact.getArtifactUUID() + "Size of payload " + downloadResult.getArtifactPayload().length);
- } else {
- throw new SdcDownloadException("Artifact " + artifact.getArtifactName()
- + " could not be downloaded from SDC URL " + artifact.getArtifactURL() + " UUID "
- + artifact.getArtifactUUID() + ")" + System.lineSeparator() + "Error message is "
- + downloadResult.getDistributionMessageResult() + System.lineSeparator());
- }
- return downloadResult;
- }
-
- private void sendSdcNotification(NotificationType notificationType, String artifactUrl, String consumerId,
- String distributionId, DistributionStatusEnum status, String errorReason,
- long timestamp) {
- String event = "Sending " + notificationType.name() + "(" + status.name() + ")"
- + " notification to SDC for artifact:" + artifactUrl;
- if (errorReason != null) {
- event = event + "(" + errorReason + ")";
- }
- logger.info(event);
- String action = "";
- try {
- IDistributionStatusMessage message = new DistributionStatusMessage(artifactUrl, consumerId, distributionId,
- status, timestamp);
- switch (notificationType) {
- case DOWNLOAD:
- this.sendDownloadStatus(message, errorReason);
- action = "sendDownloadStatus";
- break;
- case DEPLOY:
- this.sendDeploymentStatus(message, errorReason);
- action = "sendDeploymentdStatus";
- break;
- default:
- break;
- }
- } catch (RuntimeException e) {
- logger.warn("Unable to send the SDC Notification (" + action + ") due to an exception", e);
- }
- logger.info("SDC Notification sent successfully(" + action + ")");
- }
-
- private void sendComponentStatus(INotificationData notificationData, DistributionStatusEnum status,
- String errorReason) {
- try {
- IComponentDoneStatusMessage message = new IComponentDoneStatusMessage() {
-
- @Override public String getDistributionID() {
- return notificationData.getDistributionID();
- }
-
- @Override public String getConsumerID() {
- return sdcConfig.getConsumerID();
- }
-
- @Override public long getTimestamp() {
- return System.currentTimeMillis();
- }
-
- @Override public DistributionStatusEnum getStatus() {
- return status;
- }
-
- @Override public String getComponentName() {
- return sdcConfig.getUser();
- }
- };
-
- if (errorReason != null) {
- this.distributionClient.sendComponentDoneStatus(message, errorReason);
- } else {
- this.distributionClient.sendComponentDoneStatus(message);
- }
- } catch (RuntimeException e) {
- logger.warn("Unable to send the SDC Notification (" + status.name() + ") due to an exception", e);
- }
- logger.info("SDC Notification sent successfully(" + status.name() + ")");
- }
-
- private void sendDownloadStatus(IDistributionStatusMessage message, String errorReason) {
- if (errorReason != null) {
- this.distributionClient.sendDownloadStatus(message, errorReason);
- } else {
- this.distributionClient.sendDownloadStatus(message);
- }
- }
-
- private void sendDeploymentStatus(IDistributionStatusMessage message, String errorReason) {
- if (errorReason != null) {
- this.distributionClient.sendDeploymentStatus(message, errorReason);
- } else {
- this.distributionClient.sendDeploymentStatus(message);
- }
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/SdcSingleControllerStatus.java b/src/main/java/org/onap/policy/clamp/clds/sdc/controller/SdcSingleControllerStatus.java
deleted file mode 100644
index fe269c486..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/SdcSingleControllerStatus.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.sdc.controller;
-
-public enum SdcSingleControllerStatus {
- STOPPED, IDLE, BUSY
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/BlueprintArtifact.java b/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/BlueprintArtifact.java
deleted file mode 100644
index df81cfb0c..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/BlueprintArtifact.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.sdc.controller.installer;
-
-import org.onap.sdc.api.notification.IResourceInstance;
-
-/**
- * This class is useful to store the information concerning
- * blueprint artifact extracted from SDC CSAR.
- */
-public class BlueprintArtifact {
-
- private String dcaeBlueprint;
- private String blueprintArtifactName;
- private String blueprintInvariantServiceUuid;
- private IResourceInstance resourceAttached;
-
- public String getDcaeBlueprint() {
- return dcaeBlueprint;
- }
-
- public void setDcaeBlueprint(String dcaeBlueprint) {
- this.dcaeBlueprint = dcaeBlueprint;
- }
-
- public String getBlueprintArtifactName() {
- return blueprintArtifactName;
- }
-
- public void setBlueprintArtifactName(String blueprintArtifactName) {
- this.blueprintArtifactName = blueprintArtifactName;
- }
-
- public String getBlueprintInvariantServiceUuid() {
- return blueprintInvariantServiceUuid;
- }
-
- public void setBlueprintInvariantServiceUuid(String blueprintInvariantServiceUuid) {
- this.blueprintInvariantServiceUuid = blueprintInvariantServiceUuid;
- }
-
- public IResourceInstance getResourceAttached() {
- return resourceAttached;
- }
-
- public void setResourceAttached(IResourceInstance resourceAttached) {
- this.resourceAttached = resourceAttached;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/BlueprintMicroService.java b/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/BlueprintMicroService.java
deleted file mode 100644
index 519a24f46..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/BlueprintMicroService.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 Nokia 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============================================
- * Modifications copyright (c) 2019-2020 AT&T
- * ===================================================================
- *
- */
-
-package org.onap.policy.clamp.clds.sdc.controller.installer;
-
-import java.util.Objects;
-
-public class BlueprintMicroService {
- private final String name;
- private final String modelType;
- private final String inputFrom;
- private final String modelVersion;
-
- /**
- * The Micro service constructor.
- *
- * @param name The name in String
- * @param modelType The model type
- * @param inputFrom Comes from (single chained)
- */
- public BlueprintMicroService(String name, String modelType, String inputFrom, String modelVersion) {
- this.name = name;
- this.inputFrom = inputFrom;
- this.modelType = modelType;
- this.modelVersion = modelVersion;
- }
-
- public String getName() {
- return name;
- }
-
- public String getModelType() {
- return modelType;
- }
-
- public String getInputFrom() {
- return inputFrom;
- }
-
- /**
- * modelVerrsion getter.
- *
- * @return the modelVersion
- */
- public String getModelVersion() {
- return modelVersion;
- }
-
- @Override
- public String toString() {
- return "MicroService {" + "name='" + name + '\'' + ", modelType='" + modelType + '\'' + ", inputFrom='"
- + inputFrom + '\'' + ", modelVersion='" + modelVersion + '\'' + '}';
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null || getClass() != obj.getClass()) {
- return false;
- }
- BlueprintMicroService that = (BlueprintMicroService) obj;
- return name.equals(that.name) && modelType.equals(that.modelType) && inputFrom.equals(that.inputFrom)
- && modelVersion.equals(that.modelVersion);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(name, modelType, inputFrom, modelVersion);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/BlueprintParser.java b/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/BlueprintParser.java
deleted file mode 100644
index ada47992a..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/BlueprintParser.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 Nokia 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============================================
- * Modifications copyright (c) 2019 AT&T
- * ===================================================================
- *
- */
-
-package org.onap.policy.clamp.clds.sdc.controller.installer;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.Gson;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import java.util.AbstractMap;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import org.json.JSONObject;
-import org.onap.policy.clamp.clds.exception.sdc.controller.BlueprintParserException;
-import org.yaml.snakeyaml.Yaml;
-
-public class BlueprintParser {
-
- static final String TCA = "TCA";
- private static final String NODE_TEMPLATES = "node_templates";
- private static final String DCAE_NODES = "dcae.nodes.";
- private static final String DCAE_NODES_POLICY = ".nodes.policy";
- private static final String TYPE = "type";
- private static final String PROPERTIES = "properties";
- private static final String NAME = "name";
- private static final String INPUT = "inputs";
- private static final String GET_INPUT = "get_input";
- private static final String POLICY_MODEL_ID = "policy_model_id";
- private static final String POLICY_MODEL_VERSION = "policy_model_version";
- private static final String RELATIONSHIPS = "relationships";
- private static final String CLAMP_NODE_RELATIONSHIPS_GETS_INPUT_FROM = "clamp_node.relationships.gets_input_from";
- private static final String TARGET = "target";
- public static final String DEFAULT_VERSION = "1.0.0";
-
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(BlueprintParser.class);
-
- private BlueprintParser() {
-
- }
-
- /**
- * Get all micro services from blueprint.
- *
- * @param blueprintString the blueprint in a String
- * @return A set of MircoService
- * @throws BlueprintParserException In case of issues with the parsing
- */
- public static Set<BlueprintMicroService> getMicroServices(String blueprintString) throws BlueprintParserException {
- Set<BlueprintMicroService> microServices = new HashSet<>();
- JsonObject blueprintJson = BlueprintParser.convertToJson(blueprintString);
- JsonObject nodeTemplateList = blueprintJson.get(NODE_TEMPLATES).getAsJsonObject();
- JsonObject inputList = blueprintJson.get(INPUT).getAsJsonObject();
-
- for (Entry<String, JsonElement> entry : nodeTemplateList.entrySet()) {
- JsonObject nodeTemplate = entry.getValue().getAsJsonObject();
- if (!nodeTemplate.get(TYPE).getAsString().contains(DCAE_NODES_POLICY)
- && nodeTemplate.get(TYPE).getAsString().contains(DCAE_NODES)) {
- BlueprintMicroService microService = getNodeRepresentation(entry, nodeTemplateList, inputList);
- if (!microService.getModelType().isBlank()) {
- microServices.add(microService);
- } else {
- logger.warn("Microservice " + microService.getName()
- + " will NOT be used by CLAMP as the model type is not defined or has not been found");
- }
- }
- }
- logger.debug("Those microservices have been found in the blueprint:" + microServices);
- return microServices;
- }
-
- /**
- * Does a fallback to TCA.
- *
- * @return The list of microservices
- */
- public static List<BlueprintMicroService> fallbackToOneMicroService() {
- return Collections.singletonList(
- new BlueprintMicroService(TCA, "onap.policies.monitoring.cdap.tca.hi.lo.app", "", DEFAULT_VERSION));
- }
-
- static String getName(Entry<String, JsonElement> entry) {
- String microServiceYamlName = entry.getKey();
- JsonObject ob = entry.getValue().getAsJsonObject();
- if (ob.has(PROPERTIES)) {
- JsonObject properties = ob.get(PROPERTIES).getAsJsonObject();
- if (properties.has(NAME)) {
- return properties.get(NAME).getAsString();
- }
- }
- return microServiceYamlName;
- }
-
- static String getInput(Entry<String, JsonElement> entry) {
- JsonObject ob = entry.getValue().getAsJsonObject();
- if (ob.has(RELATIONSHIPS)) {
- JsonArray relationships = ob.getAsJsonArray(RELATIONSHIPS);
- for (JsonElement element : relationships) {
- String target = getTarget(element.getAsJsonObject());
- if (!target.isEmpty()) {
- return target;
- }
- }
- }
- return "";
- }
-
- static String findPropertyInRelationshipsArray(String propertyName, JsonArray relationshipsArray,
- JsonObject blueprintNodeTemplateList, JsonObject blueprintInputList) throws BlueprintParserException {
- for (JsonElement elem : relationshipsArray) {
- if (blueprintNodeTemplateList.get(elem.getAsJsonObject().get(TARGET).getAsString()) == null) {
- throw new BlueprintParserException(
- "The Target mentioned in the blueprint is not a known entry in the blueprint: "
- + elem.getAsJsonObject().get(TARGET).getAsString());
- } else {
- String property = getPropertyValue(propertyName,
- new AbstractMap.SimpleEntry<String, JsonElement>(
- elem.getAsJsonObject().get(TARGET).getAsString(), blueprintNodeTemplateList
- .get(elem.getAsJsonObject().get(TARGET).getAsString()).getAsJsonObject()),
- blueprintNodeTemplateList, blueprintInputList);
- if (!property.isEmpty()) {
- return property;
- }
- }
- }
- return "";
- }
-
- static String getDirectOrInputPropertyValue(String propertyName, JsonObject blueprintInputList,
- JsonObject nodeTemplateContent) {
- JsonObject properties = nodeTemplateContent.get(PROPERTIES).getAsJsonObject();
- if (properties.has(propertyName)) {
- if (properties.get(propertyName).isJsonObject()) {
- // it's a blueprint parameter
- return blueprintInputList
- .get(properties.get(propertyName).getAsJsonObject().get(GET_INPUT).getAsString())
- .getAsJsonObject().get("default").getAsString();
- } else {
- // It's a direct value
- return properties.get(propertyName).getAsString();
- }
- }
- return "";
- }
-
- static String getPropertyValue(String propertyName, Entry<String, JsonElement> nodeTemplateEntry,
- JsonObject blueprintNodeTemplateList, JsonObject blueprintIputList) throws BlueprintParserException {
- JsonObject nodeTemplateContent = nodeTemplateEntry.getValue().getAsJsonObject();
- // Search first in this node template
- if (nodeTemplateContent.has(PROPERTIES)) {
- String propValue = getDirectOrInputPropertyValue(propertyName, blueprintIputList, nodeTemplateContent);
- if (!propValue.isBlank()) {
- return propValue;
- }
- }
- // Or it's may be defined in a relationship
- if (nodeTemplateContent.has(RELATIONSHIPS)) {
- return findPropertyInRelationshipsArray(propertyName,
- nodeTemplateContent.get(RELATIONSHIPS).getAsJsonArray(), blueprintNodeTemplateList,
- blueprintIputList);
- }
- return "";
- }
-
- static BlueprintMicroService getNodeRepresentation(Entry<String, JsonElement> nodeTemplateEntry,
- JsonObject blueprintNodeTemplateList, JsonObject blueprintInputList) throws BlueprintParserException {
- String modelIdFound = getPropertyValue(POLICY_MODEL_ID, nodeTemplateEntry, blueprintNodeTemplateList,
- blueprintInputList);
- String versionFound = getPropertyValue(POLICY_MODEL_VERSION, nodeTemplateEntry, blueprintNodeTemplateList,
- blueprintInputList);
- if (modelIdFound.isBlank()) {
- logger.warn("policy_model_id is not defined for the node template:" + nodeTemplateEntry.getKey());
- }
- if (versionFound.isBlank()) {
- logger.warn("policy_model_version is not defined (setting it to a default value) for the node template:"
- + nodeTemplateEntry.getKey());
- }
- return new BlueprintMicroService(getName(nodeTemplateEntry), modelIdFound, getInput(nodeTemplateEntry),
- !versionFound.isBlank() ? versionFound : DEFAULT_VERSION);
- }
-
- private static String getTarget(JsonObject elementObject) {
- if (elementObject.has(TYPE) && elementObject.has(TARGET)
- && elementObject.get(TYPE).getAsString().equals(CLAMP_NODE_RELATIONSHIPS_GETS_INPUT_FROM)) {
- return elementObject.get(TARGET).getAsString();
- }
- return "";
- }
-
- private static JsonObject convertToJson(String yamlString) {
- Map<String, Object> map = new Yaml().load(yamlString);
- return new Gson().fromJson(new JSONObject(map).toString(), JsonObject.class);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/ChainGenerator.java b/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/ChainGenerator.java
deleted file mode 100644
index 10e7a56a4..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/ChainGenerator.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 Nokia 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.policy.clamp.clds.sdc.controller.installer;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-import org.springframework.stereotype.Component;
-
-@Component
-public class ChainGenerator {
-
- ChainGenerator() {
- }
-
- /**
- * Get list of microservices chain.
- *
- * @param input A set of microservices
- * @return The list of microservice chained
- */
- public List<BlueprintMicroService> getChainOfMicroServices(Set<BlueprintMicroService> input) {
- LinkedList<BlueprintMicroService> returnList = new LinkedList<>();
- if (preValidate(input)) {
- LinkedList<BlueprintMicroService> theList = new LinkedList<>();
- for (BlueprintMicroService ms : input) {
- insertNodeTemplateIntoChain(ms, theList);
- }
- if (postValidate(theList)) {
- returnList = theList;
- }
- }
- return returnList;
- }
-
- private boolean preValidate(Set<BlueprintMicroService> input) {
- List<BlueprintMicroService> noInputs = input.stream().filter(ms -> "".equals(ms.getInputFrom()))
- .collect(Collectors.toList());
- return noInputs.size() == 1;
- }
-
- private boolean postValidate(LinkedList<BlueprintMicroService> microServices) {
- for (int i = 1; i < microServices.size() - 1; i++) {
- BlueprintMicroService prev = microServices.get(i - 1);
- BlueprintMicroService current = microServices.get(i);
- if (!current.getInputFrom().equals(prev.getName())) {
- return false;
- }
- }
- return true;
- }
-
- private void insertNodeTemplateIntoChain(BlueprintMicroService microServicetoInsert,
- LinkedList<BlueprintMicroService> chainOfMicroServices) {
- int insertIndex = 0;
- for (int i = 0; i < chainOfMicroServices.size(); i++) {
- BlueprintMicroService current = chainOfMicroServices.get(i);
- if (microServicetoInsert.getName().equals(current.getInputFrom())) {
- insertIndex = i;
- break;
- } else if (current.getName().equals(microServicetoInsert.getInputFrom())) {
- insertIndex = i + 1;
- break;
- }
- }
- chainOfMicroServices.add(insertIndex, microServicetoInsert);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/CsarHandler.java b/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/CsarHandler.java
deleted file mode 100644
index 436e594ce..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/CsarHandler.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.sdc.controller.installer;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import org.apache.commons.io.IOUtils;
-import org.codehaus.plexus.util.StringUtils;
-import org.onap.policy.clamp.clds.exception.sdc.controller.CsarHandlerException;
-import org.onap.policy.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException;
-import org.onap.sdc.api.notification.IArtifactInfo;
-import org.onap.sdc.api.notification.INotificationData;
-import org.onap.sdc.api.notification.IResourceInstance;
-import org.onap.sdc.api.results.IDistributionClientDownloadResult;
-import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
-import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
-import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory;
-
-/**
- * CsarDescriptor that will be used to deploy file in CLAMP file system. Some
- * methods can also be used to get some data from it.
- */
-public class CsarHandler {
-
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(CsarHandler.class);
- private IArtifactInfo artifactElement;
- private String csarFilePath;
- private String controllerName;
- private SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance();
- private ISdcCsarHelper sdcCsarHelper;
- private Map<String, BlueprintArtifact> mapOfBlueprints = new HashMap<>();
- public static final String CSAR_TYPE = "TOSCA_CSAR";
- public static final String BLUEPRINT_TYPE = "DCAE_INVENTORY_BLUEPRINT";
- private INotificationData sdcNotification;
- public static final String RESOURCE_INSTANCE_NAME_PREFIX = "/Artifacts/Resources/";
- public static final String RESOURCE_INSTANCE_NAME_SUFFIX = "/Deployment/";
- public static final String POLICY_DEFINITION_NAME_SUFFIX = "Definitions/policies.yml";
- public static final String DATA_DEFINITION_NAME_SUFFIX = "Definitions/data.yml";
- public static final String DATA_DEFINITION_KEY = "data_types:";
-
- /**
- * Constructor for CsarHandler taking sdc notification in input.
- */
- public CsarHandler(INotificationData data, String controller, String clampCsarPath) throws CsarHandlerException {
- this.sdcNotification = data;
- this.controllerName = controller;
- this.artifactElement = searchForUniqueCsar(data);
- this.csarFilePath = buildFilePathForCsar(artifactElement, clampCsarPath);
- }
-
- private String buildFilePathForCsar(IArtifactInfo artifactElement, String clampCsarPath) {
- return clampCsarPath + "/" + controllerName + "/" + artifactElement.getArtifactName();
- }
-
- private IArtifactInfo searchForUniqueCsar(INotificationData notificationData) throws CsarHandlerException {
- List<IArtifactInfo> serviceArtifacts = notificationData.getServiceArtifacts();
- for (IArtifactInfo artifact : serviceArtifacts) {
- if (artifact.getArtifactType().equals(CSAR_TYPE)) {
- return artifact;
- }
- }
- throw new CsarHandlerException("Unable to find a CSAR in the Sdc Notification");
- }
-
- /**
- * This saves the notification to disk and database.
- *
- * @param resultArtifact The artifact to install
- * @throws SdcArtifactInstallerException In case of issues with the installation
- * @throws SdcToscaParserException In case of issues with the parsing of
- * the CSAR
- */
- public synchronized void save(IDistributionClientDownloadResult resultArtifact)
- throws SdcArtifactInstallerException, SdcToscaParserException {
- try {
- logger.info("Writing CSAR file to: " + csarFilePath + " UUID " + artifactElement.getArtifactUUID() + ")");
- Path path = Paths.get(csarFilePath);
- Files.createDirectories(path.getParent());
- // Create or replace the file
- try (OutputStream out = Files.newOutputStream(path)) {
- out.write(resultArtifact.getArtifactPayload(), 0, resultArtifact.getArtifactPayload().length);
- }
- sdcCsarHelper = factory.getSdcCsarHelper(csarFilePath);
- this.loadDcaeBlueprint();
- } catch (IOException e) {
- throw new SdcArtifactInstallerException(
- "Exception caught when trying to write the CSAR on the file system to " + csarFilePath, e);
- }
- }
-
- private IResourceInstance searchForResourceByInstanceName(String blueprintResourceInstanceName)
- throws SdcArtifactInstallerException {
- for (IResourceInstance resource : this.sdcNotification.getResources()) {
- String filteredString = resource.getResourceInstanceName().replaceAll("-", "");
- filteredString = filteredString.replaceAll(" ", "");
- if (filteredString.equalsIgnoreCase(blueprintResourceInstanceName)) {
- return resource;
- }
- }
- throw new SdcArtifactInstallerException("Error when searching for " + blueprintResourceInstanceName
- + " as ResourceInstanceName in Sdc notification and did not find it");
- }
-
- private void loadDcaeBlueprint() throws IOException, SdcArtifactInstallerException {
- try (ZipFile zipFile = new ZipFile(csarFilePath)) {
- Enumeration<? extends ZipEntry> entries = zipFile.entries();
- while (entries.hasMoreElements()) {
- ZipEntry entry = entries.nextElement();
- if (!entry.isDirectory() && entry.getName().contains(BLUEPRINT_TYPE)) {
- BlueprintArtifact blueprintArtifact = new BlueprintArtifact();
- blueprintArtifact.setBlueprintArtifactName(
- entry.getName().substring(entry.getName().lastIndexOf('/') + 1, entry.getName().length()));
- blueprintArtifact
- .setBlueprintInvariantServiceUuid(this.getSdcNotification().getServiceInvariantUUID());
- try (InputStream stream = zipFile.getInputStream(entry)) {
- blueprintArtifact.setDcaeBlueprint(IOUtils.toString(stream, StandardCharsets.UTF_8));
- }
- blueprintArtifact.setResourceAttached(searchForResourceByInstanceName(entry.getName().substring(
- entry.getName().indexOf(RESOURCE_INSTANCE_NAME_PREFIX)
- + RESOURCE_INSTANCE_NAME_PREFIX.length(),
- entry.getName().indexOf(RESOURCE_INSTANCE_NAME_SUFFIX))));
- this.mapOfBlueprints.put(blueprintArtifact.getBlueprintArtifactName(), blueprintArtifact);
- logger.info("Found a blueprint entry in the CSAR " + blueprintArtifact.getBlueprintArtifactName()
- + " for resource instance Name "
- + blueprintArtifact.getResourceAttached().getResourceInstanceName());
- }
- }
- logger.info(this.mapOfBlueprints.size() + " blueprint(s) will be converted to closed loop");
- }
- }
-
- public IArtifactInfo getArtifactElement() {
- return artifactElement;
- }
-
- public String getFilePath() {
- return csarFilePath;
- }
-
- public String setFilePath(String newPath) {
- return csarFilePath = newPath;
- }
-
- public synchronized ISdcCsarHelper getSdcCsarHelper() {
- return sdcCsarHelper;
- }
-
- public INotificationData getSdcNotification() {
- return sdcNotification;
- }
-
- public Map<String, BlueprintArtifact> getMapOfBlueprints() {
- return mapOfBlueprints;
- }
-
- /**
- * Get the whole policy model Yaml. It combines the content of policies.yaml and
- * data.yaml.
- *
- * @return The whole policy model yaml
- * @throws IOException The IO Exception
- */
- public Optional<String> getPolicyModelYaml() throws IOException {
- String result = null;
- try (ZipFile zipFile = new ZipFile(csarFilePath)) {
- ZipEntry entry = zipFile.getEntry(POLICY_DEFINITION_NAME_SUFFIX);
- if (entry != null) {
- ZipEntry data = zipFile.getEntry(DATA_DEFINITION_NAME_SUFFIX);
- if (data != null) {
- String dataStr = IOUtils.toString(zipFile.getInputStream(data), StandardCharsets.UTF_8);
- String dataStrWithoutHeader = dataStr.substring(dataStr.indexOf(DATA_DEFINITION_KEY));
- String policyStr = IOUtils.toString(zipFile.getInputStream(entry), StandardCharsets.UTF_8);
- StringUtils.chomp(policyStr);
- result = policyStr.concat(dataStrWithoutHeader);
- } else {
- result = IOUtils.toString(zipFile.getInputStream(entry), StandardCharsets.UTF_8);
- }
- } else {
- logger.info("Policy model not found inside the CSAR file: " + csarFilePath);
- }
- return Optional.ofNullable(result);
- }
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/service/CldsHealthcheckService.java b/src/main/java/org/onap/policy/clamp/clds/service/CldsHealthcheckService.java
deleted file mode 100644
index 02481494a..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/service/CldsHealthcheckService.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.clds.service;
-
-import java.util.Date;
-import org.onap.policy.clamp.clds.model.CldsHealthCheck;
-import org.onap.policy.clamp.clds.util.LoggingUtils;
-import org.onap.policy.clamp.clds.util.OnapLogConstants;
-import org.onap.policy.clamp.loop.LoopController;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.slf4j.event.Level;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.stereotype.Component;
-
-/**
- * Service to retrieve the Health Check of the clds application.
- *
- */
-@Component
-public class CldsHealthcheckService {
-
- @Autowired
- private LoopController loopController;
-
- protected static final Logger logger = LoggerFactory.getLogger(CldsHealthcheckService.class);
-
- /**
- * REST service that retrieves clds healthcheck information.
- *
- * @return CldsHealthCheck class containing healthcheck info
- */
- public CldsHealthCheck gethealthcheck() {
- CldsHealthCheck cldsHealthCheck = new CldsHealthCheck();
- Date startTime = new Date();
- LoggingUtils util = new LoggingUtils(logger);
- LoggingUtils.setRequestContext("CldsService: GET healthcheck", "Clamp-Health-Check");
- LoggingUtils.setTimeContext(startTime, new Date());
- try {
- loopController.getLoopNames();
- cldsHealthCheck.setHealthCheckComponent("CLDS-APP");
- cldsHealthCheck.setHealthCheckStatus("UP");
- cldsHealthCheck.setDescription("OK");
- LoggingUtils.setResponseContext("0", "Get healthcheck success",
- this.getClass().getName());
- util.exiting(HttpStatus.OK.value(), "Healthcheck success", Level.INFO,
- OnapLogConstants.ResponseStatus.COMPLETE);
- } catch (Exception e) {
- logger.error("CLAMP application Heath check failed", e);
- LoggingUtils.setResponseContext("999", "Get healthcheck failed",
- this.getClass().getName());
- cldsHealthCheck.setHealthCheckComponent("CLDS-APP");
- cldsHealthCheck.setHealthCheckStatus("DOWN");
- cldsHealthCheck.setDescription("NOT-OK");
- util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.value(), "Healthcheck failed", Level.INFO,
- OnapLogConstants.ResponseStatus.ERROR);
- }
- return cldsHealthCheck;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/JsonEditorSchemaConstants.java b/src/main/java/org/onap/policy/clamp/clds/tosca/JsonEditorSchemaConstants.java
deleted file mode 100644
index 32f328079..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/JsonEditorSchemaConstants.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2018-2019 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.policy.clamp.clds.tosca;
-
-public class JsonEditorSchemaConstants {
-
- //Data types in JSON Schema
- public static final String TYPE_OBJECT = "object";
- public static final String TYPE_ARRAY = "array";
- public static final String TYPE_MAP = "map";
- public static final String TYPE_STRING = "string";
- public static final String TYPE_INTEGER = "integer";
- public static final String TYPE_DATE_TIME = "datetime";
-
- //Key elements in JSON Schema
- public static final String TYPE = "type";
- public static final String TITLE = "title";
- public static final String REQUIRED = "required";
- public static final String DEFAULT = "default";
- public static final String ENUM = "enum";
- public static final String ENUM_TITLES = "enum_titles";
- public static final String OPTIONS = "options";
- public static final String FORMAT = "format";
- public static final String ITEMS = "items";
- public static final String PROPERTIES = "properties";
- public static final String PROPERTY_ORDER = "propertyOrder";
- public static final String VALUES = "values";
- public static final String HEADER_TEMPLATE = "headerTemplate";
- public static final String HEADER_TEMPLATE_VALUE = "{{self.name}}";
-
- public static final String MINIMUM = "minimum";
- public static final String MAXIMUM = "maximum";
- public static final String MIN_LENGTH = "minLength";
- public static final String MAX_LENGTH = "maxLength";
- public static final String EXCLUSIVE_MINIMUM = "exclusiveMinimum";
- public static final String EXCLUSIVE_MAXIMUM = "exclusiveMaximum";
- public static final String MINITEMS = "minItems";
- public static final String MAXITEMS = "maxItems";
-
- public static final String CUSTOM_KEY_FORMAT = "format";
- public static final String CUSTOM_KEY_FORMAT_TABS_TOP = "tabs-top";
- public static final String CUSTOM_KEY_FORMAT_TABS = "tabs";
- public static final String CUSTOM_KEY_FORMAT_INPUT = "input";
- public static final String FORMAT_SELECT = "select";
- public static final String UNIQUE_ITEMS = "uniqueItems";
- public static final String TRUE = "true";
- public static final String QSSCHEMA = "qschema";
- public static final String TYPE_QBLDR = "qbldr";
-
- public static final String ID = "id";
- public static final String LABEL = "label";
- public static final String OPERATORS = "operators";
- public static final String FILTERS = "filters";
-
- public static final String SCHEMA = "schema";
- public static final String CURRENT_VALUES = "currentValues";
-
- public static final String PLUGIN = "plugin";
- public static final String DATE_TIME_PICKER = "datetimepicker";
- public static final String VALIDATION = "validation";
- public static final String DATE_TIME_FORMAT = "YYYY/MM/DD HH:mm:ss";
- public static final String INPUT_EVENT = "input_event";
- public static final String DP_CHANGE = "dp.change";
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/ToscaSchemaConstants.java b/src/main/java/org/onap/policy/clamp/clds/tosca/ToscaSchemaConstants.java
deleted file mode 100644
index c2b5d5963..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/ToscaSchemaConstants.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.tosca;
-
-public class ToscaSchemaConstants {
-
- // Data types in TOSCA Schema
- public static final String TYPE_LIST = "list";
- public static final String TYPE_MAP = "map";
- public static final String TYPE_STRING = "string";
- public static final String TYPE_INTEGER = "integer";
- public static final String TYPE_NUMBER = "number";
- public static final String TYPE_DATE_TIME = "datetime";
- public static final String TYPE_FLOAT = "float";
- public static final String TYPE_BOOLEAN = "boolean";
- public static final String TYPE_USER_DEFINED = "userDefined";
-
- // Key elements in Tosca
- public static final String NODE_TYPES = "policy_types";
- public static final String DATA_TYPES = "data_types";
- public static final String TYPE = "type";
- public static final String DESCRIPTION = "description";
- public static final String DEFAULT = "default";
- public static final String PROPERTIES = "properties";
- public static final String REQUIRED = "required";
- public static final String ENTRY_SCHEMA = "entry_schema";
-
- public static final String METADATA = "metadata";
- public static final String METADATA_POLICY_MODEL_TYPE = "policy_model_type";
- public static final String METADATA_ACRONYM = "acronym";
- public static final String METADATA_ELEMENT_NAME = "element_name";
- public static final String METADATA_HEADER_TEMPLATE = "header_template";
- public static final String METADATA_CLAMP_POSSIBLE_VALUES = "clamp_possible_values";
-
- // Constraints
- public static final String CONSTRAINTS = "constraints";
- public static final String VALID_VALUES = "valid_values";
- public static final String EQUAL = "equal";
- public static final String GREATER_THAN = "greater_than";
- public static final String GREATER_OR_EQUAL = "greater_or_equal";
- public static final String LESS_THAN = "less_than";
- public static final String LESS_OR_EQUAL = "less_or_equal";
- public static final String IN_RANGE = "in_range";
- public static final String LENGTH = "length";
- public static final String MIN_LENGTH = "min_length";
- public static final String MAX_LENGTH = "max_length";
- public static final String PATTERN = "pattern";
-
- // Prefix for policy nodes
- public static final String POLICY_NODE = "onap.policies.";
-
- // Prefix for data nodes
- public static final String POLICY_DATA = "onap.datatypes.";
-
- // Prefix for dictionary elements
- public static final String DICTIONARY = "Dictionary:";
-
- // Custom Elements that must exist in the Tosca models
- public static final String NAME = "name";
- public static final String CONTEXT = "context";
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/ToscaYamlToJsonConvertor.java b/src/main/java/org/onap/policy/clamp/clds/tosca/ToscaYamlToJsonConvertor.java
deleted file mode 100644
index 4f718d5d7..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/ToscaYamlToJsonConvertor.java
+++ /dev/null
@@ -1,781 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2018, 2021 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.policy.clamp.clds.tosca;
-
-import com.google.gson.Gson;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Optional;
-import java.util.stream.Collectors;
-import org.json.JSONArray;
-import org.json.JSONObject;
-import org.onap.policy.clamp.clds.config.ClampProperties;
-import org.onap.policy.clamp.tosca.Dictionary;
-import org.onap.policy.clamp.tosca.DictionaryElement;
-import org.onap.policy.clamp.tosca.DictionaryService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.yaml.snakeyaml.Yaml;
-
-/**
- * Tosca Model Yaml parser and convertor to JSON Schema consumable for JSON
- * Editor.
- *
- */
-@Component
-@Deprecated
-public class ToscaYamlToJsonConvertor {
-
- @Autowired
- private DictionaryService dictionaryService;
-
- @Autowired
- private ClampProperties refProp;
-
- private int simpleTypeOrder = 1000;
- private int complexTypeOrder = 10000;
- private int complexSimpleTypeOrder = 1;
-
- private int incrementSimpleTypeOrder() {
- return simpleTypeOrder++;
- }
-
- private int incrementComplexTypeOrder() {
- return complexTypeOrder = complexTypeOrder + 10000;
- }
-
- private int incrementComplexSimpleTypeOrder() {
- complexSimpleTypeOrder++;
- return complexTypeOrder + complexSimpleTypeOrder;
- }
-
- /**
- * Parses Tosca YAML string and Converts to JsonObject.
- *
- * @param yamlString YAML string
- * @return JsonObject
- */
- public JsonObject validateAndConvertToJson(String yamlString) {
-
- Yaml yaml = new Yaml();
- LinkedHashMap<String, Object> loadedYaml = yaml.load(yamlString);
- if (loadedYaml == null) {
- return null;
- }
-
- JSONObject jsonObject = new JSONObject(loadedYaml);
- return new Gson().fromJson(jsonObject.toString(), JsonObject.class);
- }
-
- /**
- * return the values by looking up the key in the Toscsa JSON object.
- *
- * @param obj Tosca Json Object
- * @param key the parameter key to look up
- * @return the value for the provided key
- */
- public String getValueFromMetadata(JsonObject obj, String key) {
- JsonElement jsonElement = obj.get(ToscaSchemaConstants.NODE_TYPES);
- if (jsonElement.isJsonObject()) {
- Iterator<Entry<String, JsonElement>> itr =
- jsonElement.getAsJsonObject().entrySet().iterator();
- while (itr.hasNext()) {
- Entry<String, JsonElement> entry = itr.next();
- if (entry.getValue() != null && entry.getValue().isJsonObject()
- && entry.getValue().getAsJsonObject().has(ToscaSchemaConstants.METADATA)) {
- JsonObject metadatas = entry.getValue().getAsJsonObject()
- .get(ToscaSchemaConstants.METADATA).getAsJsonObject();
- if (metadatas.has(key)) {
- return metadatas.get(key).getAsString();
- }
- }
- }
- }
- return null;
- }
-
- /**
- * Parses Tosca YAML string.
- *
- * @param yamlString YAML string
- * @param modelTypeToUse The model type that must be used to obtain the Json
- * Schema
- * @return JSON string
- */
- public String parseToscaYaml(String yamlString, String modelTypeToUse) {
-
- Yaml yaml = new Yaml();
- LinkedHashMap<String, Object> loadedYaml = yaml.load(yamlString);
- if (loadedYaml == null) {
- return "";
- }
- LinkedHashMap<String, Object> nodeTypes = new LinkedHashMap<>();
- LinkedHashMap<String, Object> dataNodes = new LinkedHashMap<>();
- JSONObject jsonParentObject = new JSONObject();
- JSONObject jsonTempObject = new JSONObject();
- parseNodeAndDataType(loadedYaml, nodeTypes, dataNodes);
- populateJsonEditorObject(loadedYaml, nodeTypes, dataNodes, jsonParentObject, jsonTempObject,
- modelTypeToUse);
-
- String headerTemplate = getValueFromMetadata(validateAndConvertToJson(yamlString),
- ToscaSchemaConstants.METADATA_HEADER_TEMPLATE);
- if (headerTemplate != null) {
- jsonParentObject.put(JsonEditorSchemaConstants.HEADER_TEMPLATE,
- JsonEditorSchemaConstants.HEADER_TEMPLATE_VALUE);
- }
- if (jsonTempObject.length() > 0) {
- jsonParentObject = jsonTempObject;
- }
- JSONObject jsonEditorObject = new JSONObject();
- jsonEditorObject.put(JsonEditorSchemaConstants.SCHEMA, jsonParentObject);
- return jsonEditorObject.toString();
- }
-
- // Parse node_type and data_type
- @SuppressWarnings("unchecked")
- private void parseNodeAndDataType(LinkedHashMap<String, Object> map,
- LinkedHashMap<String, Object> nodeTypes, LinkedHashMap<String, Object> dataNodes) {
- map.entrySet().stream().forEach(n -> {
- if (n.getKey().contains(ToscaSchemaConstants.NODE_TYPES)
- && n.getValue() instanceof Map) {
- parseNodeAndDataType((LinkedHashMap<String, Object>) n.getValue(), nodeTypes,
- dataNodes);
- } else if (n.getKey().contains(ToscaSchemaConstants.DATA_TYPES)
- && n.getValue() instanceof Map) {
- parseNodeAndDataType((LinkedHashMap<String, Object>) n.getValue(), nodeTypes,
- dataNodes);
- } else if (n.getKey().contains(ToscaSchemaConstants.POLICY_NODE)) {
- nodeTypes.put(n.getKey(), n.getValue());
- } else if (n.getKey().contains(ToscaSchemaConstants.POLICY_DATA)) {
- dataNodes.put(n.getKey(), n.getValue());
- }
- });
- }
-
- @SuppressWarnings("unchecked")
- private void populateJsonEditorObject(LinkedHashMap<String, Object> map,
- LinkedHashMap<String, Object> nodeTypes, LinkedHashMap<String, Object> dataNodes,
- JSONObject jsonParentObject, JSONObject jsonTempObject, String modelTypeToUse) {
-
- Map<String, JSONObject> jsonEntrySchema = new HashMap<>();
- jsonParentObject.put(JsonEditorSchemaConstants.TYPE, JsonEditorSchemaConstants.TYPE_OBJECT);
- if (nodeTypes.get(modelTypeToUse) instanceof Map) {
- ((LinkedHashMap<String, Object>) nodeTypes.get(modelTypeToUse)).entrySet()
- .forEach(ntElement -> {
- if (ntElement.getKey().equalsIgnoreCase(ToscaSchemaConstants.PROPERTIES)) {
- JSONArray rootNodeArray = new JSONArray();
- if (ntElement.getValue() instanceof Map) {
- ((LinkedHashMap<String, Object>) ntElement.getValue()).entrySet()
- .forEach((ntPropertiesElement) -> {
- boolean isListNode = false;
- parseDescription(
- (LinkedHashMap<String, Object>) ntPropertiesElement
- .getValue(),
- jsonParentObject);
- LinkedHashMap<String, Object> parentPropertiesMap =
- (LinkedHashMap<String, Object>) ntPropertiesElement
- .getValue();
- if (parentPropertiesMap.containsKey(ToscaSchemaConstants.TYPE)
- && ((String) parentPropertiesMap
- .get(ToscaSchemaConstants.TYPE))
- .contains(ToscaSchemaConstants.TYPE_MAP)
- && parentPropertiesMap
- .containsKey(ToscaSchemaConstants.ENTRY_SCHEMA)) {
- parentPropertiesMap =
- (LinkedHashMap<String, Object>) parentPropertiesMap
- .get(ToscaSchemaConstants.ENTRY_SCHEMA);
- isListNode = true;
- }
- if (parentPropertiesMap.containsKey(ToscaSchemaConstants.TYPE)
- && ((String) parentPropertiesMap
- .get(ToscaSchemaConstants.TYPE))
- .contains(ToscaSchemaConstants.POLICY_DATA)) {
- ((LinkedHashMap<String, Object>) dataNodes.get(
- parentPropertiesMap.get(ToscaSchemaConstants.TYPE)))
- .entrySet().stream().forEach(pmap -> {
- if (pmap.getKey().equalsIgnoreCase(
- ToscaSchemaConstants.PROPERTIES)) {
- parseToscaProperties(
- ToscaSchemaConstants.POLICY_NODE,
- (LinkedHashMap<String, Object>) pmap
- .getValue(),
- jsonParentObject, rootNodeArray,
- jsonEntrySchema, dataNodes,
- incrementSimpleTypeOrder());
- }
- });
- }
- if (isListNode) {
- jsonTempObject.put(JsonEditorSchemaConstants.TYPE,
- JsonEditorSchemaConstants.TYPE_ARRAY);
- parseDescription(
- (LinkedHashMap<String, Object>) ntPropertiesElement
- .getValue(),
- jsonTempObject);
- jsonTempObject.put(JsonEditorSchemaConstants.ITEMS,
- jsonParentObject);
- jsonTempObject.put(JsonEditorSchemaConstants.FORMAT,
- JsonEditorSchemaConstants.CUSTOM_KEY_FORMAT_TABS);
- jsonTempObject.put(JsonEditorSchemaConstants.UNIQUE_ITEMS,
- JsonEditorSchemaConstants.TRUE);
- }
- });
- }
- }
- });
- }
- }
-
- @SuppressWarnings("unchecked")
- private void parseToscaProperties(String parentKey, LinkedHashMap<String, Object> propertiesMap,
- JSONObject jsonDataNode, JSONArray array, Map<String, JSONObject> jsonEntrySchema,
- LinkedHashMap<String, Object> dataNodes, final int order) {
- JSONObject jsonPropertyNode = new JSONObject();
- propertiesMap.entrySet().stream().forEach(p -> {
- // Populate JSON Array for "required" key
-
- if (p.getValue() instanceof Map) {
- LinkedHashMap<String, Object> nodeMap =
- (LinkedHashMap<String, Object>) p.getValue();
- if (nodeMap.containsKey(ToscaSchemaConstants.REQUIRED)
- && ((boolean) nodeMap.get(ToscaSchemaConstants.REQUIRED))) {
- array.put(p.getKey());
- }
- // if(nodeMap.containsKey(ToscaSchemaConstants.CONSTRAINTS))
- parseToscaChildNodeMap(p.getKey(), nodeMap, jsonPropertyNode, jsonEntrySchema,
- dataNodes, array, incrementSimpleTypeOrder());
- }
- });
- jsonDataNode.put(JsonEditorSchemaConstants.REQUIRED, array);
- jsonDataNode.put(JsonEditorSchemaConstants.PROPERTIES, jsonPropertyNode);
- }
-
- @SuppressWarnings("unchecked")
- private void parseToscaPropertiesForType(String parentKey,
- LinkedHashMap<String, Object> propertiesMap, JSONObject jsonDataNode, JSONArray array,
- Map<String, JSONObject> jsonEntrySchema, LinkedHashMap<String, Object> dataNodes,
- boolean isType, int order) {
- JSONObject jsonPropertyNode = new JSONObject();
-
- propertiesMap.entrySet().stream().forEach(p -> {
- // array.put(p.getKey());
- boolean overWriteArray = false;
- if (p.getValue() instanceof Map) {
- LinkedHashMap<String, Object> nodeMap =
- (LinkedHashMap<String, Object>) p.getValue();
- if (!(parentKey.contains(ToscaSchemaConstants.ENTRY_SCHEMA)
- || parentKey.contains(ToscaSchemaConstants.POLICY_NODE))
- && nodeMap.containsKey(ToscaSchemaConstants.TYPE)
- && (((String) nodeMap.get(ToscaSchemaConstants.TYPE))
- .contains(ToscaSchemaConstants.POLICY_DATA))) {
- overWriteArray = true;
- }
- if (nodeMap.containsKey(ToscaSchemaConstants.REQUIRED)
- && ((boolean) nodeMap.get(ToscaSchemaConstants.REQUIRED))) {
- array.put(p.getKey());
- }
- parseToscaChildNodeMap(p.getKey(), nodeMap, jsonPropertyNode, jsonEntrySchema,
- dataNodes, array, order);
- }
- });
- jsonDataNode.put(JsonEditorSchemaConstants.REQUIRED, array);
- jsonDataNode.put(JsonEditorSchemaConstants.PROPERTIES, jsonPropertyNode);
- }
-
- private void parseToscaChildNodeMap(String childObjectKey,
- LinkedHashMap<String, Object> childNodeMap, JSONObject jsonPropertyNode,
- Map<String, JSONObject> jsonEntrySchema, LinkedHashMap<String, Object> dataNodes,
- JSONArray array, int order) {
- JSONObject childObject = new JSONObject();
- // JSONArray childArray = new JSONArray();
- parseDescription(childNodeMap, childObject);
- parseTypes(childObjectKey, childNodeMap, childObject, jsonEntrySchema, dataNodes, array,
- order);
- parseConstraints(childNodeMap, childObject);
- parseMetadataPossibleValues(childNodeMap, childObject);
- parseEntrySchema(childNodeMap, childObject, jsonPropertyNode, jsonEntrySchema, dataNodes);
-
- jsonPropertyNode.put(childObjectKey, childObject);
- order++;
-
- }
-
- private void parseEntrySchema(LinkedHashMap<String, Object> childNodeMap,
- JSONObject childObject, JSONObject jsonPropertyNode,
- Map<String, JSONObject> jsonEntrySchema, LinkedHashMap<String, Object> dataNodes) {
- if (childNodeMap.get(ToscaSchemaConstants.ENTRY_SCHEMA) != null) {
- if (childNodeMap.get(ToscaSchemaConstants.ENTRY_SCHEMA) instanceof Map) {
- LinkedHashMap<String, Object> entrySchemaMap =
- (LinkedHashMap<String, Object>) childNodeMap
- .get(ToscaSchemaConstants.ENTRY_SCHEMA);
- entrySchemaMap.entrySet().stream().forEach(entry -> {
- if (entry.getKey().equalsIgnoreCase(ToscaSchemaConstants.TYPE)
- && entry.getValue() != null) {
- String entrySchemaType = (String) entry.getValue();
- if (entrySchemaType.contains(ToscaSchemaConstants.POLICY_DATA)) {
- JSONArray array = new JSONArray();
- if (jsonEntrySchema.get(entrySchemaType) != null) {
- // Already traversed
- JSONObject entrySchemaObject = jsonEntrySchema.get(entrySchemaType);
- attachEntrySchemaJsonObject(childObject, entrySchemaObject,
- JsonEditorSchemaConstants.TYPE_OBJECT);
- } else if (dataNodes.containsKey(entrySchemaType)) {
-
- JSONObject entrySchemaObject = new JSONObject();
- // Need to traverse
- ((LinkedHashMap<String, Object>) dataNodes.get(entrySchemaType))
- .entrySet().stream().forEach(pmap -> {
- if (pmap.getKey()
- .equalsIgnoreCase(ToscaSchemaConstants.PROPERTIES)) {
- parseToscaProperties(ToscaSchemaConstants.ENTRY_SCHEMA,
- (LinkedHashMap<String, Object>) pmap.getValue(),
- entrySchemaObject, array, jsonEntrySchema,
- dataNodes, incrementComplexTypeOrder());
- jsonEntrySchema.put(entrySchemaType, entrySchemaObject);
- dataNodes.remove(entrySchemaType);
- attachEntrySchemaJsonObject(childObject,
- entrySchemaObject,
- JsonEditorSchemaConstants.TYPE_OBJECT);
- }
-
- });
- }
- } else if (entrySchemaType
- .equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)
- || entrySchemaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_INTEGER)
- || entrySchemaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_FLOAT)) {
- JSONObject entrySchemaObject = new JSONObject();
- parseConstraints(entrySchemaMap, entrySchemaObject);
- parseMetadataPossibleValues(entrySchemaMap, entrySchemaObject);
- String jsontype = JsonEditorSchemaConstants.TYPE_STRING;
- if (entrySchemaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_INTEGER)
- || entrySchemaType
- .equalsIgnoreCase(ToscaSchemaConstants.TYPE_FLOAT)) {
- jsontype = JsonEditorSchemaConstants.TYPE_INTEGER;
- }
- if (childNodeMap.get(ToscaSchemaConstants.TYPE) != null) {
- // Only known value of type is String for now
- if (childNodeMap.get(ToscaSchemaConstants.TYPE) instanceof String) {
- String typeValue =
- (String) childNodeMap.get(ToscaSchemaConstants.TYPE);
- if (typeValue
- .equalsIgnoreCase(ToscaSchemaConstants.TYPE_LIST)) {
- // Custom key for JSON Editor and UI rendering
- childObject.put(JsonEditorSchemaConstants.CUSTOM_KEY_FORMAT,
- JsonEditorSchemaConstants.FORMAT_SELECT);
- // childObject.put(JsonEditorSchemaConstants.UNIQUE_ITEMS,
- // JsonEditorSchemaConstants.TRUE);
- }
- }
- }
- attachEntrySchemaJsonObject(childObject, entrySchemaObject, jsontype);
- }
- }
- });
- }
- }
- }
-
- private void attachEntrySchemaJsonObject(JSONObject childObject, JSONObject entrySchemaObject,
- String dataType) {
-
- entrySchemaObject.put(JsonEditorSchemaConstants.TYPE, dataType);
- childObject.put(JsonEditorSchemaConstants.ITEMS, entrySchemaObject);
- }
-
- @SuppressWarnings("unchecked")
- private void attachTypeJsonObject(JSONObject childObject, JSONObject typeObject) {
- Iterator<String> keys = typeObject.keys();
- while (keys.hasNext()) {
- String key = keys.next();
- childObject.put(key, typeObject.get(key));
- }
- }
-
- /*
- * private String parseKey(String toscaKey, String lookupString) { return
- * toscaKey.substring(toscaKey.indexOf(lookupString) + lookupString.length(),
- * toscaKey.length()); }
- */
-
- private void parseDescription(LinkedHashMap<String, Object> childNodeMap,
- JSONObject childObject) {
- if (childNodeMap.get(ToscaSchemaConstants.DESCRIPTION) != null) {
- childObject.put(JsonEditorSchemaConstants.TITLE,
- childNodeMap.get(ToscaSchemaConstants.DESCRIPTION));
- }
- }
-
- private void parseTypes(String childObjectKey, LinkedHashMap<String, Object> childNodeMap,
- JSONObject childObject, Map<String, JSONObject> jsonEntrySchema,
- LinkedHashMap<String, Object> dataNodes, JSONArray array, int order) {
- if (childNodeMap.get(ToscaSchemaConstants.TYPE) != null) {
- // Only known value of type is String for now
- if (childNodeMap.get(ToscaSchemaConstants.TYPE) instanceof String) {
- childObject.put(JsonEditorSchemaConstants.PROPERTY_ORDER, order);
- String typeValue = (String) childNodeMap.get(ToscaSchemaConstants.TYPE);
- if (typeValue.equalsIgnoreCase(ToscaSchemaConstants.TYPE_INTEGER)) {
- childObject.put(JsonEditorSchemaConstants.TYPE,
- JsonEditorSchemaConstants.TYPE_INTEGER);
-
- } else if (typeValue.equalsIgnoreCase(ToscaSchemaConstants.TYPE_FLOAT)) {
- childObject.put(JsonEditorSchemaConstants.TYPE,
- JsonEditorSchemaConstants.TYPE_INTEGER);
- } else if (typeValue.equalsIgnoreCase(ToscaSchemaConstants.TYPE_LIST)) {
- childObject.put(JsonEditorSchemaConstants.TYPE,
- JsonEditorSchemaConstants.TYPE_ARRAY);
- // Custom key for JSON Editor and UI rendering
- childObject.put(JsonEditorSchemaConstants.CUSTOM_KEY_FORMAT,
- JsonEditorSchemaConstants.CUSTOM_KEY_FORMAT_TABS_TOP);
- childObject.put(JsonEditorSchemaConstants.UNIQUE_ITEMS,
- JsonEditorSchemaConstants.TRUE);
- } else if (typeValue.equalsIgnoreCase(ToscaSchemaConstants.TYPE_MAP)) {
- childObject.put(JsonEditorSchemaConstants.TYPE,
- JsonEditorSchemaConstants.TYPE_OBJECT);
- } else if (typeValue.contains(ToscaSchemaConstants.POLICY_DATA)) {
- JSONArray childArray = new JSONArray();
-
- if (jsonEntrySchema.get(typeValue) != null) {
- // Already traversed
- JSONObject entrySchemaObject = jsonEntrySchema.get(typeValue);
- attachTypeJsonObject(childObject, entrySchemaObject);
- } else if (dataNodes.containsKey(typeValue)) {
- JSONObject entrySchemaObject = new JSONObject();
- // Need to traverse
- JSONArray jsonArray = new JSONArray();
- ((LinkedHashMap<String, Object>) dataNodes.get(typeValue)).entrySet()
- .stream().forEach(pmap -> {
- if (pmap.getKey()
- .equalsIgnoreCase(ToscaSchemaConstants.PROPERTIES)) {
- parseToscaPropertiesForType(childObjectKey,
- (LinkedHashMap<String, Object>) pmap.getValue(),
- entrySchemaObject, childArray, jsonEntrySchema, dataNodes,
- true, incrementComplexSimpleTypeOrder());
- jsonEntrySchema.put(typeValue, entrySchemaObject);
- dataNodes.remove(typeValue);
- attachTypeJsonObject(childObject, entrySchemaObject);
- }
- });
- }
- } else {
- childObject.put(JsonEditorSchemaConstants.TYPE,
- JsonEditorSchemaConstants.TYPE_STRING);
- }
- }
- if (childNodeMap.get(ToscaSchemaConstants.DEFAULT) != null) {
- childObject.put(JsonEditorSchemaConstants.DEFAULT,
- childNodeMap.get(ToscaSchemaConstants.DEFAULT));
- }
- }
- }
-
- private void parseConstraints(LinkedHashMap<String, Object> childNodeMap,
- JSONObject childObject) {
- if (childNodeMap.containsKey(ToscaSchemaConstants.CONSTRAINTS)
- && childNodeMap.get(ToscaSchemaConstants.CONSTRAINTS) != null) {
- List<LinkedHashMap<String, Object>> constraintsList =
- (List<LinkedHashMap<String, Object>>) childNodeMap
- .get(ToscaSchemaConstants.CONSTRAINTS);
- constraintsList.stream().forEach(c -> {
- if (c instanceof Map) {
- c.entrySet().stream().forEach(constraint -> {
- if (constraint.getKey().equalsIgnoreCase(ToscaSchemaConstants.MIN_LENGTH)
- || constraint.getKey()
- .equalsIgnoreCase(ToscaSchemaConstants.GREATER_OR_EQUAL)) {
- // For String min_lenghth is minimum length whereas for number, it will
- // be
- // minimum or greater than to the defined value
- if (childNodeMap.containsKey(ToscaSchemaConstants.TYPE)
- && (childNodeMap.get(ToscaSchemaConstants.TYPE) instanceof String)
- && ((String) childNodeMap.get(ToscaSchemaConstants.TYPE))
- .equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)) {
- childObject.put(JsonEditorSchemaConstants.MIN_LENGTH,
- constraint.getValue());
- } else {
- childObject.put(JsonEditorSchemaConstants.MINIMUM,
- constraint.getValue());
- }
- } else if (constraint.getKey()
- .equalsIgnoreCase(ToscaSchemaConstants.MAX_LENGTH)
- || constraint.getKey()
- .equalsIgnoreCase(ToscaSchemaConstants.LESS_OR_EQUAL)) {
- // For String max_lenghth is maximum length whereas for number, it will
- // be
- // maximum or less than the defined value
- if (childNodeMap.containsKey(ToscaSchemaConstants.TYPE)
- && (childNodeMap.get(ToscaSchemaConstants.TYPE) instanceof String)
- && ((String) childNodeMap.get(ToscaSchemaConstants.TYPE))
- .equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)) {
- childObject.put(JsonEditorSchemaConstants.MAX_LENGTH,
- constraint.getValue());
- } else {
- childObject.put(JsonEditorSchemaConstants.MAXIMUM,
- constraint.getValue());
- }
- } else if (constraint.getKey()
- .equalsIgnoreCase(ToscaSchemaConstants.LESS_THAN)) {
- childObject.put(JsonEditorSchemaConstants.EXCLUSIVE_MAXIMUM,
- constraint.getValue());
- } else if (constraint.getKey()
- .equalsIgnoreCase(ToscaSchemaConstants.GREATER_THAN)) {
- childObject.put(JsonEditorSchemaConstants.EXCLUSIVE_MINIMUM,
- constraint.getValue());
- } else if (constraint.getKey()
- .equalsIgnoreCase(ToscaSchemaConstants.IN_RANGE)) {
- if (constraint.getValue() instanceof ArrayList<?>) {
- if (childNodeMap.containsKey(ToscaSchemaConstants.TYPE)
- && (childNodeMap
- .get(ToscaSchemaConstants.TYPE) instanceof String)
- && ((String) childNodeMap.get(ToscaSchemaConstants.TYPE))
- .equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)) {
- childObject.put(JsonEditorSchemaConstants.MIN_LENGTH,
- ((ArrayList) constraint.getValue()).get(0));
- childObject.put(JsonEditorSchemaConstants.MAX_LENGTH,
- ((ArrayList) constraint.getValue()).get(1));
- } else {
- childObject.put(JsonEditorSchemaConstants.MINIMUM,
- ((ArrayList) constraint.getValue()).get(0));
- childObject.put(JsonEditorSchemaConstants.MAXIMUM,
- ((ArrayList) constraint.getValue()).get(1));
- }
-
- }
- } else if (constraint.getKey()
- .equalsIgnoreCase(ToscaSchemaConstants.VALID_VALUES)) {
- JSONArray validValuesArray = new JSONArray();
-
- if (constraint.getValue() instanceof ArrayList<?>) {
- boolean processDictionary =
- ((ArrayList<?>) constraint.getValue()).stream().anyMatch(
- value -> (value instanceof String && ((String) value)
- .contains(ToscaSchemaConstants.DICTIONARY)));
- if (!processDictionary) {
- ((ArrayList<?>) constraint.getValue()).stream()
- .forEach(value -> {
- validValuesArray.put(value);
- });
- childObject.put(JsonEditorSchemaConstants.ENUM,
- validValuesArray);
- } else {
- ((ArrayList<?>) constraint.getValue()).stream()
- .forEach(value -> {
- if ((value instanceof String && ((String) value)
- .contains(ToscaSchemaConstants.DICTIONARY))) {
- processDictionaryElements(childObject,
- (String) value);
- }
-
- });
-
- }
- }
-
- }
- });
- }
- });
- }
- }
-
- private void parseMetadataPossibleValues(LinkedHashMap<String, Object> childNodeMap,
- JSONObject childObject) {
- if (childNodeMap.containsKey(ToscaSchemaConstants.METADATA)
- && childNodeMap.get(ToscaSchemaConstants.METADATA) != null) {
- LinkedHashMap<String, Object> metadataMap =
- (LinkedHashMap<String, Object>) childNodeMap.get(ToscaSchemaConstants.METADATA);
- if (metadataMap instanceof Map) {
- metadataMap.entrySet().stream().forEach(constraint -> {
- if (constraint.getKey()
- .equalsIgnoreCase(ToscaSchemaConstants.METADATA_CLAMP_POSSIBLE_VALUES)) {
- JSONArray validValuesArray = new JSONArray();
-
- if (constraint.getValue() instanceof ArrayList<?>) {
- boolean processDictionary = ((ArrayList<?>) constraint.getValue())
- .stream().anyMatch(value -> (value instanceof String
- && ((String) value).contains(ToscaSchemaConstants.DICTIONARY)));
- if (processDictionary) {
- ((ArrayList<?>) constraint.getValue()).stream().forEach(value -> {
- if ((value instanceof String && ((String) value)
- .contains(ToscaSchemaConstants.DICTIONARY))) {
- processDictionaryElements(childObject, (String) value);
- }
-
- });
-
- }
- }
-
- }
- });
- }
- }
- }
-
- private void processDictionaryElements(JSONObject childObject, String dictionaryReference) {
- if (dictionaryReference.contains("#")) {
- String[] dictionaryKeyArray = dictionaryReference
- .substring(dictionaryReference.indexOf(ToscaSchemaConstants.DICTIONARY) + 11,
- dictionaryReference.length())
- .split("#");
- // We support only one # as of now.
- List<DictionaryElement> cldsDictionaryElements = null;
- List<DictionaryElement> subDictionaryElements = null;
- if (dictionaryKeyArray != null && dictionaryKeyArray.length == 2) {
- cldsDictionaryElements = dictionaryService.getDictionary(dictionaryKeyArray[0])
- .getDictionaryElements().stream().collect(Collectors.toList());
- subDictionaryElements = dictionaryService.getDictionary(dictionaryKeyArray[1])
- .getDictionaryElements().stream().collect(Collectors.toList());
-
- if (cldsDictionaryElements != null) {
- List<String> subCldsDictionaryNames = subDictionaryElements.stream()
- .map(DictionaryElement::getShortName).collect(Collectors.toList());
- JSONArray jsonArray = new JSONArray();
-
- Optional.ofNullable(cldsDictionaryElements).get().stream().forEach(c -> {
- JSONObject jsonObject = new JSONObject();
- if (c.getSubDictionary() != null) {
- Dictionary subDictionary =
- dictionaryService.getDictionary(c.getSubDictionary());
- if (subDictionary != null
- && !subDictionary.getDictionaryElements().isEmpty()) {
-
- jsonObject.put(JsonEditorSchemaConstants.CUSTOM_KEY_FORMAT_INPUT,
- JsonEditorSchemaConstants.FORMAT_SELECT);
-
- List<String> shortNames = new ArrayList<>();
- subDictionary.getDictionaryElements().stream().forEach(c1 -> {
- shortNames.add(c1.getShortName());
- });
- jsonObject.put(JsonEditorSchemaConstants.VALUES, shortNames);
- }
- }
- jsonObject.put(JsonEditorSchemaConstants.TYPE, getJsonType(c.getType()));
-
- if (c.getType() != null
- && (c.getType().equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)
- || c.getType().equalsIgnoreCase(ToscaSchemaConstants.TYPE_DATE_TIME)
- || c.getType().equalsIgnoreCase(ToscaSchemaConstants.TYPE_MAP))) {
- jsonObject.put(JsonEditorSchemaConstants.MIN_LENGTH, 1);
-
- if (c.getType().equalsIgnoreCase(ToscaSchemaConstants.TYPE_DATE_TIME)) {
- jsonObject.put(JsonEditorSchemaConstants.PLUGIN,
- JsonEditorSchemaConstants.DATE_TIME_PICKER);
- jsonObject.put(JsonEditorSchemaConstants.INPUT_EVENT,
- JsonEditorSchemaConstants.DP_CHANGE);
- JSONObject formatJsonObject = new JSONObject();
- formatJsonObject.put(JsonEditorSchemaConstants.FORMAT,
- JsonEditorSchemaConstants.DATE_TIME_FORMAT);
- jsonObject.put(JsonEditorSchemaConstants.VALIDATION,
- formatJsonObject);
- }
- }
-
- jsonObject.put(JsonEditorSchemaConstants.ID, c.getName());
- jsonObject.put(JsonEditorSchemaConstants.LABEL, c.getShortName());
- jsonObject.put(JsonEditorSchemaConstants.OPERATORS, subCldsDictionaryNames);
- jsonArray.put(jsonObject);
- });;
- JSONObject filterObject = new JSONObject();
- filterObject.put(JsonEditorSchemaConstants.FILTERS, jsonArray);
-
- childObject.put(JsonEditorSchemaConstants.TYPE,
- JsonEditorSchemaConstants.TYPE_QBLDR);
- // TO invoke validation on such parameters
- childObject.put(JsonEditorSchemaConstants.MIN_LENGTH, 1);
- childObject.put(JsonEditorSchemaConstants.QSSCHEMA, filterObject);
-
- }
- }
- } else {
- String dictionaryKey = dictionaryReference.substring(
- dictionaryReference.indexOf(ToscaSchemaConstants.DICTIONARY) + 11,
- dictionaryReference.length());
-
- if (dictionaryKey != null) {
- if (dictionaryKey.contains(ToscaSchemaConstants.TYPE_USER_DEFINED)) {
- childObject.put(JsonEditorSchemaConstants.ENUM, new ArrayList<>());
- // Add Enum titles for generated translated values during
- // JSON instance generation
- JSONObject enumTitles = new JSONObject();
- enumTitles.put(JsonEditorSchemaConstants.ENUM_TITLES, new ArrayList<>());
- childObject.put(JsonEditorSchemaConstants.OPTIONS, enumTitles);
- } else {
- List<DictionaryElement> cldsDictionaryElements =
- dictionaryService.getDictionary(dictionaryKey).getDictionaryElements()
- .stream().collect(Collectors.toList());
- if (cldsDictionaryElements != null) {
- List<String> cldsDictionaryNames = new ArrayList<>();
- List<String> cldsDictionaryFullNames = new ArrayList<>();
- cldsDictionaryElements.stream().forEach(c -> {
- // Json type will be translated before Policy creation
- if (c.getType() != null && !c.getType().equalsIgnoreCase("json")) {
- cldsDictionaryFullNames.add(c.getName());
- }
- cldsDictionaryNames.add(c.getShortName());
- });
-
- if (!cldsDictionaryFullNames.isEmpty()) {
- childObject.put(JsonEditorSchemaConstants.ENUM,
- cldsDictionaryFullNames);
- // Add Enum titles for generated translated values during JSON instance
- // generation
- JSONObject enumTitles = new JSONObject();
- enumTitles.put(JsonEditorSchemaConstants.ENUM_TITLES,
- cldsDictionaryNames);
- childObject.put(JsonEditorSchemaConstants.OPTIONS, enumTitles);
- } else {
- childObject.put(JsonEditorSchemaConstants.ENUM, cldsDictionaryNames);
- }
-
- }
- }
- }
- }
- }
-
- private String getJsonType(String toscaType) {
- String jsonType = null;
- if (toscaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_INTEGER)
- || toscaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_NUMBER)) {
- jsonType = JsonEditorSchemaConstants.TYPE_INTEGER;
- } else if (toscaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_DATE_TIME)) {
- jsonType = JsonEditorSchemaConstants.TYPE_DATE_TIME;
- } else if (toscaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_LIST)) {
- jsonType = JsonEditorSchemaConstants.TYPE_ARRAY;
- } else if (toscaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_MAP)) {
- jsonType = JsonEditorSchemaConstants.TYPE_MAP;
- } else {
- jsonType = JsonEditorSchemaConstants.TYPE_STRING;
- }
- return jsonType;
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/ToscaConverterWithDictionarySupport.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/ToscaConverterWithDictionarySupport.java
deleted file mode 100644
index 6702a6200..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/ToscaConverterWithDictionarySupport.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020-2021 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.policy.clamp.clds.tosca.update;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonObject;
-import java.io.IOException;
-import org.onap.policy.clamp.clds.config.ClampProperties;
-import org.onap.policy.clamp.clds.tosca.update.parser.metadata.ToscaMetadataParser;
-import org.onap.policy.clamp.clds.tosca.update.parser.metadata.ToscaMetadataParserWithDictionarySupport;
-import org.onap.policy.clamp.clds.tosca.update.templates.JsonTemplateManager;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.onap.policy.clamp.loop.service.Service;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-/**
- * This is the main class that must be used to convert a tosca to a json schema.
- * This class adds feature to support the dictionary mechanism that enables json possible values extracted
- * from the dictionary DB table.
- *
- * @see org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport#convertToscaToJsonSchemaObject
- */
-@Component
-public class ToscaConverterWithDictionarySupport {
-
- private static final EELFLogger logger =
- EELFManager.getInstance().getLogger(ToscaConverterWithDictionarySupport.class);
-
- private ClampProperties clampProperties;
- private ToscaMetadataParser metadataParser;
-
- /**
- * Constructor with Spring support.
- *
- * @param clampProperties Clamp Spring properties
- * @param metadataParser Metadata parser
- */
- @Autowired
- public ToscaConverterWithDictionarySupport(ClampProperties clampProperties,
- ToscaMetadataParserWithDictionarySupport metadataParser) {
- this.clampProperties = clampProperties;
- this.metadataParser = metadataParser;
- }
-
- /**
- * This method converts a tosca file to a json schema.
- * It uses some parameters specified in the application.properties.
- *
- * @param toscaFile The tosca file as String
- * @param policyTypeToDecode The policy type to decode
- * @param serviceModel The service model associated so that the clamp enrichment could be done if required by
- * the tosca model
- * @return A json object being a json schema
- */
- public JsonObject convertToscaToJsonSchemaObject(String toscaFile, String policyTypeToDecode,
- Service serviceModel) {
- try {
- return new JsonTemplateManager(toscaFile,
- clampProperties.getFileContent("tosca.converter.default.datatypes"),
- clampProperties.getFileContent("tosca.converter.json.schema.templates"))
- .getJsonSchemaForPolicyType(policyTypeToDecode, Boolean.parseBoolean(clampProperties.getStringValue(
- "tosca.converter.dictionary.support.enabled")) ? metadataParser : null, serviceModel);
- } catch (IOException | UnknownComponentException e) {
- logger.error("Unable to convert the tosca properly, exception caught during the decoding",
- e);
- return new JsonObject();
- }
- }
-
- /**
- * This method converts a tosca file to a json schema.
- * It uses some parameters specified in the application.properties.
- *
- * @param toscaFile The tosca file as String
- * @param policyTypeToDecode The policy type to decode
- * @param serviceModel The service Model so that clamp enrichment could be done if required by tosca model
- * @return A String containing the json schema
- */
- public String convertToscaToJsonSchemaString(String toscaFile, String policyTypeToDecode, Service serviceModel) {
- return JsonUtils.GSON.toJson(this.convertToscaToJsonSchemaObject(toscaFile, policyTypeToDecode, serviceModel));
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/UnknownComponentException.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/UnknownComponentException.java
deleted file mode 100644
index fb684b57b..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/UnknownComponentException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds.tosca.update;
-
-public class UnknownComponentException extends Exception {
- public UnknownComponentException(String nameEntry) {
- this.getWrongName(nameEntry);
- }
-
- public String getWrongName(String nameEntry) {
- return "Unknown Component: " + nameEntry;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/ArrayField.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/ArrayField.java
deleted file mode 100644
index 9834c78e7..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/ArrayField.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds.tosca.update.elements;
-
-import com.google.gson.JsonArray;
-import java.util.ArrayList;
-
-public class ArrayField {
-
- private ArrayList<Object> complexFields;
-
- /**
- * Constructor from arraryList.
- *
- * @param arrayProperties the array properties
- */
- public ArrayField(ArrayList<Object> arrayProperties) {
- this.complexFields = arrayProperties;
- }
-
- /**
- * Each LinkedHashMap is parsed to extract the Array and each of its value. They are casted for the JsonObject.
- *
- * @return JsonArray
- */
- public JsonArray deploy() {
-
- JsonArray subPropertyValuesArray = new JsonArray();
- for (Object arrayElement : complexFields) {
- //Cast for each Primitive Type
- String typeValue = arrayElement.getClass().getSimpleName();
- switch (typeValue) {
- case "String":
- subPropertyValuesArray.add((String) arrayElement);
- break;
- case "Boolean":
- subPropertyValuesArray.add((Boolean) arrayElement);
- break;
- case "Double":
- subPropertyValuesArray.add((Number) arrayElement);
- break;
- case "Integer":
- subPropertyValuesArray.add((Number) arrayElement);
- break;
- default:
- break;
- }
- }
- return subPropertyValuesArray;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/Constraint.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/Constraint.java
deleted file mode 100644
index b41042abe..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/Constraint.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds.tosca.update.elements;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.Map.Entry;
-import org.onap.policy.clamp.clds.tosca.update.templates.JsonTemplate;
-
-public class Constraint {
-
- private LinkedHashMap<String, Object> constraints;
- private JsonTemplate jsonTemplate;
-
- public Constraint(LinkedHashMap<String, Object> constraints, JsonTemplate jsonTemplate) {
- this.jsonTemplate = jsonTemplate;
- this.constraints = constraints;
- }
-
- /**
- * Deploy the linkedhashmap which contains the constraints, to extract them one to one.
- *
- * @param jsonSchema The json Schema
- * @param typeProperty The ype property
- * @return the json object
- */
- public JsonObject deployConstraints(JsonObject jsonSchema, String typeProperty) {
- for (Entry<String, Object> constraint : constraints.entrySet()) {
- this.parseConstraint(jsonSchema, constraint.getKey(), constraint.getValue(), typeProperty);
- }
- return jsonSchema;
- }
-
- /**
- * Each case of Tosca constraints below parse specifically the field in the JsonObject.
- *
- * @param jsonSchema Json Schema
- * @param nameConstraint Name constraint
- * @param valueConstraint value constraint
- * @param typeProperty Type Property
- */
- @SuppressWarnings("unchecked")
- public void parseConstraint(JsonObject jsonSchema, String nameConstraint, Object valueConstraint,
- String typeProperty) {
- switch (nameConstraint) {
- case "equal":
- checkTemplateField("const", jsonSchema, valueConstraint);
- break;
- case "greater_than":
- checkTemplateField("exclusiveMinimum", jsonSchema, valueConstraint);
- break;
- case "greater_or_equal":
- checkTemplateField("minimum", jsonSchema, valueConstraint);
- break;
- case "less_than":
- checkTemplateField("exclusiveMaximum", jsonSchema, valueConstraint);
- break;
- case "less_or_equal":
- checkTemplateField("maximum", jsonSchema, valueConstraint);
- break;
- case "in_range":
- ArrayList<Integer> limitValues = (ArrayList<Integer>) valueConstraint;
- checkTemplateField("minimum", jsonSchema, limitValues.get(0));
- checkTemplateField("maximum", jsonSchema, limitValues.get(1));
- break;
- case "pattern":
- jsonSchema.addProperty(nameConstraint, (String) valueConstraint);
- break;
- case "length":
- this.getSpecificLength(jsonSchema, valueConstraint, typeProperty);
- break;
- case "min_length":
- String[] prefixValues = nameConstraint.split("_");
- this.getLimitValue(jsonSchema, valueConstraint, typeProperty, prefixValues[0]);
- break;
- case "max_length":
- String[] maxtab = nameConstraint.split("_");
- this.getLimitValue(jsonSchema, valueConstraint, typeProperty, maxtab[0]);
- break;
- default://valid_value
- this.getValueArray(jsonSchema, valueConstraint, typeProperty);
- break;
- }
-
- }
-
- /**
- * To be done.
- *
- * @param jsonSchema json schema
- * @param fieldValue field value
- * @param typeProperty For the complex components, get a specific number of items/properties
- */
- public void getSpecificLength(JsonObject jsonSchema, Object fieldValue, String typeProperty) {
- switch (typeProperty.toLowerCase()) {
- case "string":
- checkTemplateField("minLength", jsonSchema, fieldValue);
- checkTemplateField("maxLength", jsonSchema, fieldValue);
- break;
- case "array":
- if (fieldValue.equals(1) && jsonTemplate.hasFields("uniqueItems")) {
- jsonSchema.addProperty("uniqueItems", true);
- } else {
- checkTemplateField("minItems", jsonSchema, fieldValue);
- checkTemplateField("maxItems", jsonSchema, fieldValue);
- }
- break;
- default:// Map && List
- checkTemplateField("minProperties", jsonSchema, fieldValue);
- checkTemplateField("maxProperties", jsonSchema, fieldValue);
- break;
- }
-
- }
-
- /**
- * To be done.
- *
- * @param jsonSchema json schema
- * @param fieldValue field value
- * @param typeProperty type property
- * @param side Get the limits fieldValue for the properties : depend of the type of the component
- */
- public void getLimitValue(JsonObject jsonSchema, Object fieldValue, String typeProperty, String side) {
- switch (typeProperty) {
- case "string":
- if (side.equals("min")) {
- checkTemplateField("minLength", jsonSchema, fieldValue);
- } else {
- checkTemplateField("maxLength", jsonSchema, fieldValue);
- }
- break;
- default:// Array
- if (side.equals("min")) {
- checkTemplateField("minItems", jsonSchema, fieldValue);
- } else {
- checkTemplateField("maxItems", jsonSchema, fieldValue);
- }
- break;
- }
-
- }
-
- /**
- * To be done.
- *
- * @param jsonSchema Json schema
- * @param fieldValue field value
- * @param typeProperty Get as Enum the valid values for the property
- */
- public void getValueArray(JsonObject jsonSchema, Object fieldValue, String typeProperty) {
- if (jsonTemplate.hasFields("enum")) {
- JsonArray enumeration = new JsonArray();
- if (typeProperty.equals("string") || typeProperty.equals("String")) {
- ArrayList<String> arrayValues = (ArrayList<String>) fieldValue;
- for (String arrayItem : arrayValues) {
- enumeration.add(arrayItem);
- }
- jsonSchema.add("enum", enumeration);
- } else {
- ArrayList<Number> arrayValues = (ArrayList<Number>) fieldValue;
- for (Number arrayItem : arrayValues) {
- enumeration.add(arrayItem);
- }
- jsonSchema.add("enum", enumeration);
- }
- }
- }
-
- /**
- * To be done.
- *
- * @param field Field
- * @param jsonSchema Json schema
- * @param fieldValue Simple way to avoid code duplication
- */
- public void checkTemplateField(String field, JsonObject jsonSchema, Object fieldValue) {
- if (jsonTemplate.hasFields(field)) {
- String typeField = fieldValue.getClass().getSimpleName();
- switch (typeField) {
- case "String":
- jsonSchema.addProperty(field, (String) fieldValue);
- break;
- case "Integer":
- jsonSchema.addProperty(field, (Integer) fieldValue);
- break;
- case "Number":
- jsonSchema.addProperty(field, (Number) fieldValue);
- break;
- case "Boolean":
- jsonSchema.addProperty(field, (Boolean) fieldValue);
- break;
- default:
- break;
- }
- }
- }
-
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/ToscaElement.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/ToscaElement.java
deleted file mode 100644
index 0c531e9d0..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/ToscaElement.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds.tosca.update.elements;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-
-public class ToscaElement {
-
- /**
- * name parameter is used as "key", in the LinkedHashMap of Components.
- */
- private String name;
- private String derivedFrom;
- private String version;
- private String typeVersion;
- private String description;
- private LinkedHashMap<String, ToscaElementProperty> properties;
-
- public ToscaElement() {
- }
-
- /**
- * Constructor.
- *
- * @param name name
- * @param derivedFrom derivedFrom
- * @param description description
- */
- @SuppressWarnings({"unchecked", "rawtypes"})
- public ToscaElement(String name, String derivedFrom, String description) {
- super();
- this.name = name;
- this.derivedFrom = derivedFrom;
- this.description = description;
- this.properties = new LinkedHashMap();
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getDerivedFrom() {
- return derivedFrom;
- }
-
- public void setDerivedFrom(String derivedFrom) {
- this.derivedFrom = derivedFrom;
- }
-
- public String getVersion() {
- return version;
- }
-
- public void setVersion(String version) {
- this.version = version;
- }
-
- public String getTypeVersion() {
- return typeVersion;
- }
-
- public void setTypeVersion(String typeVersion) {
- this.typeVersion = typeVersion;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public LinkedHashMap<String, ToscaElementProperty> getProperties() {
- return properties;
- }
-
- public void setProperties(LinkedHashMap<String, ToscaElementProperty> properties) {
- this.properties = properties;
- }
-
- public void addProperties(ToscaElementProperty toscaElementProperty) {
- this.properties.put(toscaElementProperty.getName(), toscaElementProperty);
- }
-
- public ArrayList<String> propertiesNames() {
- return new ArrayList<>(properties.keySet());
- }
-
- @Override
- public String toString() {
- return name + ": " + description + ", version: " + version + ", nb de properties: " + properties.size()
- + System.getProperty("line.separator") + propertiesNames();
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/ToscaElementProperty.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/ToscaElementProperty.java
deleted file mode 100644
index 4db8b0356..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/elements/ToscaElementProperty.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds.tosca.update.elements;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import org.onap.policy.clamp.clds.tosca.update.templates.JsonTemplate;
-
-public class ToscaElementProperty {
-
- /**
- * name parameter is used as "key", in the LinkedHashMap of Components.
- */
- private String name;
- private LinkedHashMap<String, Object> items;
-
- /**
- * Constructor.
- *
- * @param name the name
- * @param items the items
- */
- public ToscaElementProperty(String name, LinkedHashMap<String, Object> items) {
- super();
- this.name = name;
- this.items = items;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public LinkedHashMap<String, Object> getItems() {
- return items;
- }
-
- public void setItems(LinkedHashMap<String, Object> items) {
- this.items = items;
- }
-
- /**
- * For each primitive value, requires to get each field Value and cast it and add it in a Json.
- *
- * @param fieldsContent field
- * @param fieldName field
- * @param value value
- */
- public void addFieldToJson(JsonObject fieldsContent, String fieldName, Object value) {
- if (value != null) {
- String typeValue = value.getClass().getSimpleName();
- switch (typeValue) {
- case "String":
- fieldsContent.addProperty(fieldName, (String) value);
- break;
- case "Boolean":
- fieldsContent.addProperty(fieldName, (Boolean) value);
- break;
- case "Double":
- fieldsContent.addProperty(fieldName, (Number) value);
- break;
- case "Integer":
- fieldsContent.addProperty(fieldName, (Integer) value);
- break;
- default:
- fieldsContent.add(fieldName, parseArray((ArrayList) value));
- break;
- }
- }
- }
-
- /**
- * If a field value is an Array, create an Instance of ArrayField to insert if in the JsonObject.
- *
- * @param arrayProperties array pro
- * @return a json array
- */
- public JsonArray parseArray(ArrayList<Object> arrayProperties) {
- JsonArray arrayContent = new JsonArray();
- ArrayList<Object> arrayComponent = new ArrayList<>();
- for (Object itemArray : arrayProperties) {
- arrayComponent.add(itemArray);
- }
- ArrayField af = new ArrayField(arrayComponent);
- arrayContent = af.deploy();
- return arrayContent;
- }
-
- /**
- * Create an instance of Constraint, to extract the values and add it to the Json (according to the type
- * * of the current property).
- *
- * @param json a json
- * @param constraints constraints
- * @param jsonTemplate template
- */
- @SuppressWarnings("unchecked")
- public void addConstraintsAsJson(JsonObject json, ArrayList<Object> constraints, JsonTemplate jsonTemplate) {
- for (Object constraint : constraints) {
- if (constraint instanceof LinkedHashMap) {
- LinkedHashMap<String, Object> valueConstraint = (LinkedHashMap<String, Object>) constraint;
- Constraint constraintParser = new Constraint(valueConstraint, jsonTemplate);
- constraintParser.deployConstraints(json, (String) getItems().get("type"));
- }
- }
-
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/ToscaMetadataExecutor.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/ToscaMetadataExecutor.java
deleted file mode 100644
index 5fac9a213..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/ToscaMetadataExecutor.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020-2021 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.policy.clamp.clds.tosca.update.execution;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonObject;
-import java.util.HashMap;
-import java.util.Map;
-import javax.annotation.PostConstruct;
-import org.onap.policy.clamp.clds.tosca.update.execution.cds.ToscaMetadataCdsProcess;
-import org.onap.policy.clamp.loop.service.Service;
-import org.onap.policy.clamp.tosca.DictionaryService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-/**
- * This class is used to execute a code based on a key found in the metadata section.
- */
-@Component
-public class ToscaMetadataExecutor {
-
- private static final EELFLogger logger =
- EELFManager.getInstance().getLogger(ToscaMetadataExecutor.class);
-
- @Autowired
- private DictionaryService dictionaryService;
-
- private Map<String, ToscaMetadataProcess> mapOfProcesses = new HashMap<>();
-
- /**
- * This method executes the required process specified in processInfo.
- *
- * @param processInfo A String containing the process to execute, like "cds/param1:value1/param2:value2"
- * @param childObject The jsonObject
- * @param serviceModel The service model associated to do clamp enrichment
- */
- public void executeTheProcess(String processInfo, JsonObject childObject, Service serviceModel) {
- String[] processParameters = (processInfo + "/ ").split("/");
- logger.info("Executing the Tosca clamp process " + processParameters[0] + " with parameters "
- + processParameters[1].trim());
- mapOfProcesses.get(processParameters[0].trim())
- .executeProcess(processParameters[1].trim(), childObject, serviceModel);
- }
-
- /**
- * Init method.
- */
- @PostConstruct
- public void init() {
- mapOfProcesses.put("CDS", new ToscaMetadataCdsProcess());
- mapOfProcesses.put("CSAR_RESOURCES", new ToscaMetadataTargetProcess());
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/ToscaMetadataProcess.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/ToscaMetadataProcess.java
deleted file mode 100644
index a1275229d..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/ToscaMetadataProcess.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds.tosca.update.execution;
-
-import com.google.gson.JsonObject;
-import org.onap.policy.clamp.loop.service.Service;
-
-/**
- * This code is the interface that must be implemented to have a tosca process.
- */
-public abstract class ToscaMetadataProcess {
-
- /**
- * This method add some elements to the JsonObject childObject passed in argument.
- * The process can take multiple parameters in arguments.
- *
- * @param parameters The parameters required by the process
- * @param childObject The Json Object modified by the current process
- * @param serviceModel The service model associated to do clamp enrichment
- */
- public abstract void executeProcess(String parameters, JsonObject childObject, Service serviceModel);
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/ToscaMetadataTargetProcess.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/ToscaMetadataTargetProcess.java
deleted file mode 100644
index 0ffd86f47..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/ToscaMetadataTargetProcess.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020-2021 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.policy.clamp.clds.tosca.update.execution;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonObject;
-import org.onap.policy.clamp.loop.service.Service;
-import org.onap.policy.clamp.policy.operational.OperationalPolicyRepresentationBuilder;
-
-/**
- * This class is there to add the JsonObject for CDS in the json Schema according to what is found in the Tosca model.
- */
-public class ToscaMetadataTargetProcess extends ToscaMetadataProcess {
-
-
- private static final EELFLogger logger =
- EELFManager.getInstance().getLogger(ToscaMetadataTargetProcess.class);
-
- @Override
- public void executeProcess(String parameters, JsonObject childObject, Service serviceModel) {
- if (serviceModel == null) {
- logger.info("serviceModel is null, therefore the ToscaMetadataTargetProcess is skipped");
- return;
- }
- childObject.add("anyOf", OperationalPolicyRepresentationBuilder.createAnyOfArray(serviceModel, false));
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/cds/ToscaMetadataCdsProcess.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/cds/ToscaMetadataCdsProcess.java
deleted file mode 100644
index c80c91170..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/execution/cds/ToscaMetadataCdsProcess.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020-2021 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.policy.clamp.clds.tosca.update.execution.cds;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import java.util.Map;
-import java.util.Set;
-import org.onap.policy.clamp.clds.tosca.ToscaSchemaConstants;
-import org.onap.policy.clamp.clds.tosca.update.execution.ToscaMetadataProcess;
-import org.onap.policy.clamp.loop.service.Service;
-
-
-/**
- * This class is there to add the JsonObject for CDS in the json Schema according to what is found in the Tosca model.
- */
-public class ToscaMetadataCdsProcess extends ToscaMetadataProcess {
-
- private static final EELFLogger logger =
- EELFManager.getInstance().getLogger(ToscaMetadataCdsProcess.class);
-
- @Override
- public void executeProcess(String parameters, JsonObject childObject, Service serviceModel) {
- if (serviceModel == null) {
- logger.info("serviceModel is null, therefore the ToscaMetadataCdsProcess is skipped");
- return;
- }
- switch (parameters) {
- case "actor":
- JsonArray jsonArray = new JsonArray();
- jsonArray.add("CDS");
- addToJsonArray(childObject, "enum", jsonArray);
- break;
- case "payload":
- generatePayload(childObject, serviceModel);
- break;
- case "operation":
- generateOperation(childObject, serviceModel);
- break;
- default:
- }
- }
-
- private static void generatePayload(JsonObject childObject, Service serviceModel) {
- JsonArray schemaAnyOf = new JsonArray();
- schemaAnyOf.addAll(createBlankEntry());
- schemaAnyOf.addAll(generatePayloadPerResource("VF", serviceModel));
- schemaAnyOf.addAll(generatePayloadPerResource("PNF", serviceModel));
- addToJsonArray(childObject, "anyOf", schemaAnyOf);
- }
-
- private static void generateOperation(JsonObject childObject, Service serviceModel) {
- generateOperationPerResource(childObject, "VF", serviceModel);
- generateOperationPerResource(childObject, "PNF", serviceModel);
- }
-
- private static void generateOperationPerResource(JsonObject childObject, String resourceName,
- Service serviceModel) {
- JsonArray schemaEnum = new JsonArray();
- JsonArray schemaTitle = new JsonArray();
- for (Map.Entry<String, JsonElement> entry : serviceModel.getResourceDetails().getAsJsonObject(resourceName)
- .entrySet()) {
- JsonObject controllerProperties = entry.getValue().getAsJsonObject()
- .getAsJsonObject("controllerProperties");
- if (controllerProperties != null && controllerProperties.getAsJsonObject("workflows") != null) {
- for (String workflowsEntry : controllerProperties.getAsJsonObject("workflows").keySet()) {
- schemaEnum.add(workflowsEntry);
- schemaTitle.add(workflowsEntry + " (CDS operation)");
- }
- }
- }
- addToJsonArray(childObject, "enum", schemaEnum);
- if (childObject.get("options") == null) {
- JsonObject optionsSection = new JsonObject();
- childObject.add("options", optionsSection);
- }
- addToJsonArray(childObject.getAsJsonObject("options"), "enum_titles", schemaTitle);
-
- }
-
- private static JsonArray generatePayloadPerResource(String resourceName,
- Service serviceModel) {
- JsonArray schemaAnyOf = new JsonArray();
-
- for (Map.Entry<String, JsonElement> entry : serviceModel.getResourceDetails().getAsJsonObject(resourceName)
- .entrySet()) {
- JsonObject controllerProperties = entry.getValue().getAsJsonObject()
- .getAsJsonObject("controllerProperties");
- if (controllerProperties != null && controllerProperties.getAsJsonObject("workflows") != null) {
- for (Map.Entry<String, JsonElement> workflowsEntry : controllerProperties.getAsJsonObject("workflows")
- .entrySet()) {
- JsonObject obj = new JsonObject();
- obj.addProperty("title", workflowsEntry.getKey());
- obj.add("properties",
- createInputPropertiesForPayload(workflowsEntry.getValue().getAsJsonObject(),
- controllerProperties,
- workflowsEntry.getKey()));
- schemaAnyOf.add(obj);
- }
- }
- }
- return schemaAnyOf;
- }
-
- private static JsonArray createBlankEntry() {
- JsonArray result = new JsonArray();
- JsonObject blankObject = new JsonObject();
- blankObject.addProperty("title", "User defined");
- blankObject.add("properties", new JsonObject());
- result.add(blankObject);
- return result;
- }
-
- private static JsonObject createAnyOfJsonProperty(String name,
- String defaultValue,
- boolean readOnlyFlag) {
- JsonObject result = new JsonObject();
- result.addProperty("title", name);
- result.addProperty("type", "string");
- result.addProperty("default", defaultValue);
- result.addProperty("readOnly", readOnlyFlag);
- return result;
- }
-
- private static void addToJsonArray(JsonObject childObject, String section, JsonArray value) {
- if (childObject.getAsJsonArray(section) != null) {
- childObject.getAsJsonArray(section).addAll(value);
- } else {
- childObject.add(section, value);
- }
- }
-
- /**
- * Returns the properties of payload based on the cds work flows.
- *
- * @param workFlow cds work flows to update payload
- * @param controllerProperties cds properties to get blueprint name and
- * version
- * @param workFlowName work flow name
- * @return returns the properties of payload
- */
- public static JsonObject createInputPropertiesForPayload(JsonObject workFlow,
- JsonObject controllerProperties,
- String workFlowName) {
- String artifactName = controllerProperties.get("sdnc_model_name").getAsString();
- String artifactVersion = controllerProperties.get("sdnc_model_version").getAsString();
- JsonObject inputs = workFlow.getAsJsonObject("inputs");
- JsonObject jsonObject = new JsonObject();
- jsonObject.add("artifact_name", createAnyOfJsonProperty(
- "artifact name", artifactName, true));
- jsonObject.add("artifact_version", createAnyOfJsonProperty(
- "artifact version", artifactVersion, true));
- jsonObject.add("mode", createAnyOfJsonProperty(
- "mode", "async", false));
- jsonObject.add("data", createDataProperty(inputs, workFlowName));
- return jsonObject;
- }
-
- private static JsonObject createDataProperty(JsonObject inputs, String workFlowName) {
- JsonObject data = new JsonObject();
- data.addProperty("title", "data");
- data.addProperty("type", "string");
- data.addProperty("format", "textarea");
- JsonObject defaultValue = new JsonObject();
- addDefaultValueForData(inputs, defaultValue, workFlowName);
- data.addProperty("default", defaultValue.toString());
- return data;
- }
-
- private static void addDefaultValueForData(JsonObject inputs,
- JsonObject defaultValue,
- String workFlowName) {
- Set<Map.Entry<String, JsonElement>> entrySet = inputs.entrySet();
- for (Map.Entry<String, JsonElement> entry : entrySet) {
- String key = entry.getKey();
- JsonObject inputProperty = inputs.getAsJsonObject(key);
- if (key.equalsIgnoreCase(workFlowName + "-properties")) {
- addDefaultValueForData(entry.getValue().getAsJsonObject().get("properties")
- .getAsJsonObject(), defaultValue, workFlowName);
- } else if ("object".equalsIgnoreCase(inputProperty.get(ToscaSchemaConstants.TYPE).getAsString())) {
- JsonObject object = new JsonObject();
- addDefaultValueForData(entry.getValue().getAsJsonObject().get("properties")
- .getAsJsonObject(), object, workFlowName);
- defaultValue.add(entry.getKey(), object);
- } else if (ToscaSchemaConstants.TYPE_LIST.equalsIgnoreCase(inputProperty.get(ToscaSchemaConstants.TYPE)
- .getAsString())) {
- defaultValue.add(entry.getKey(), handleListType(entry.getValue().getAsJsonObject(), workFlowName));
- } else {
- defaultValue.addProperty(entry.getKey(), "");
- }
- }
- }
-
- private static JsonArray handleListType(JsonObject inputs,
- String workFlowName) {
-
- JsonObject object = new JsonObject();
- if (inputs.get("properties") != null) {
- addDefaultValueForData(inputs.get("properties").getAsJsonObject(), object, workFlowName);
- }
- JsonArray arr = new JsonArray();
- arr.add(object);
- return arr;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/ToscaConverterToJsonSchema.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/ToscaConverterToJsonSchema.java
deleted file mode 100644
index 74fd8e5fd..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/ToscaConverterToJsonSchema.java
+++ /dev/null
@@ -1,353 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020-2021 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.policy.clamp.clds.tosca.update.parser;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.Map.Entry;
-import org.onap.policy.clamp.clds.tosca.update.elements.ToscaElement;
-import org.onap.policy.clamp.clds.tosca.update.elements.ToscaElementProperty;
-import org.onap.policy.clamp.clds.tosca.update.parser.metadata.ToscaMetadataParser;
-import org.onap.policy.clamp.clds.tosca.update.templates.JsonTemplate;
-import org.onap.policy.clamp.loop.service.Service;
-
-/**
- * This class can be used to convert a tosca to a json schema.
- * This class is not supposed to be used directly because it requires the json Schema templates
- * (template conversion tosca type to json schema entry) but also the supported Tosca main type file.
- * The class ToscaConverterWithDictionarySupport is more complete for the end user to be used (in the clamp context).
- *
- * @see org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport#convertToscaToJsonSchemaObject
- * @see org.onap.policy.clamp.clds.tosca.update.parser.ToscaConverterToJsonSchema#getJsonSchemaOfToscaElement
- */
-public class ToscaConverterToJsonSchema {
- private LinkedHashMap<String, ToscaElement> components;
- private LinkedHashMap<String, JsonTemplate> templates;
-
- private ToscaMetadataParser metadataParser;
-
- private Service serviceModel;
-
- /**
- * Constructor.
- *
- * @param toscaElementsMap All the tosca elements found (policy type + data types + native tosca datatypes)
- * @param jsonSchemaTemplates All Json schema templates to use
- * @param metadataParser The metadata parser to use for metadata section
- * @param serviceModel The service model for clamp enrichment
- */
- public ToscaConverterToJsonSchema(LinkedHashMap<String, ToscaElement> toscaElementsMap,
- LinkedHashMap<String, JsonTemplate> jsonSchemaTemplates,
- ToscaMetadataParser metadataParser, Service serviceModel) {
- this.components = toscaElementsMap;
- this.templates = jsonSchemaTemplates;
- this.metadataParser = metadataParser;
- this.serviceModel = serviceModel;
- }
-
- /**
- * For a given component, launch process to parse it in Json.
- *
- * @param toscaElementKey name components
- * @return return
- */
- public JsonObject getJsonSchemaOfToscaElement(String toscaElementKey) {
- return this.getFieldAsObject(getToscaElement(toscaElementKey));
- }
-
- /**
- * Return the classical/general fields of the component, & launch the properties deployment.
- *
- * @param toscaElement the compo
- * @return a json object
- */
- public JsonObject getFieldAsObject(ToscaElement toscaElement) {
-
- JsonObject globalFields = new JsonObject();
- if (templates.get("object").hasFields("title")) {
- globalFields.addProperty("title", toscaElement.getName());
- }
- if (templates.get("object").hasFields("type")) {
- globalFields.addProperty("type", "object");
- }
- if (templates.get("object").hasFields("description")) {
- if (toscaElement.getDescription() != null) {
- globalFields.addProperty("description", toscaElement.getDescription());
- }
- }
- if (templates.get("object").hasFields("required")) {
- globalFields.add("required", this.getRequirements(toscaElement.getName()));
- }
- if (templates.get("object").hasFields("properties")) {
- globalFields.add("properties", this.deploy(toscaElement.getName()));
- }
- return globalFields;
- }
-
- /**
- * Get the required properties of the Component, including the parents properties requirements.
- *
- * @param nameComponent name component
- * @return a json array
- */
- public JsonArray getRequirements(String nameComponent) {
- JsonArray requirements = new JsonArray();
- ToscaElement toParse = components.get(nameComponent);
- //Check for a father component, and launch the same process
- if (!"tosca.datatypes.Root".equals(toParse.getDerivedFrom())
- && !"tosca.policies.Root".equals(toParse.getDerivedFrom())) {
- requirements.addAll(getRequirements(toParse.getDerivedFrom()));
- }
- //Each property is checked, and add to the requirement array if it's required
- Collection<ToscaElementProperty> properties = toParse.getProperties().values();
- for (ToscaElementProperty toscaElementProperty : properties) {
- if (toscaElementProperty.getItems().containsKey("required")
- && toscaElementProperty.getItems().get("required").equals(true)) {
- requirements.add(toscaElementProperty.getName());
- }
- }
- return requirements;
- }
-
- /**
- * The beginning of the recursive process. Get the parents (or not) to launch the same process, and otherwise
- * deploy and parse the properties.
- *
- * @param nameComponent name component
- * @return a json object
- */
- public JsonObject deploy(String nameComponent) {
- JsonObject jsonSchema = new JsonObject();
- ToscaElement toParse = components.get(nameComponent);
- //Check for a father component, and launch the same process
- if (!toParse.getDerivedFrom().equals("tosca.datatypes.Root")
- && !toParse.getDerivedFrom().equals("tosca.policies.Root")) {
- jsonSchema = this.getParent(toParse.getDerivedFrom());
- }
- //For each component property, check if its a complex properties (a component) or not. In that case,
- //launch the analyse of the property.
- for (Entry<String, ToscaElementProperty> property : toParse.getProperties().entrySet()) {
- if (getToscaElement((String) property.getValue().getItems().get("type")) != null) {
- jsonSchema.add(property.getValue().getName(),
- this.getJsonSchemaOfToscaElement((String) property.getValue().getItems().get("type")));
- } else {
- jsonSchema.add(property.getValue().getName(), this.complexParse(property.getValue()));
- }
- }
- return jsonSchema;
- }
-
- /**
- * If a component has a parent, it is deploy in the same way.
- *
- * @param nameComponent name component
- * @return a json object
- */
- public JsonObject getParent(String nameComponent) {
- return deploy(nameComponent);
- }
-
- /**
- * to be done.
- *
- * @param toscaElementProperty property
- * @return a json object
- */
- @SuppressWarnings("unchecked")
- public JsonObject complexParse(ToscaElementProperty toscaElementProperty) {
- JsonObject propertiesInJson = new JsonObject();
- JsonTemplate currentPropertyJsonTemplate;
- String typeProperty = (String) toscaElementProperty.getItems().get("type");
- if (typeProperty.toLowerCase().equals("list") || typeProperty.toLowerCase().equals("map")) {
- currentPropertyJsonTemplate = templates.get("object");
- } else {
- String propertyType = (String) toscaElementProperty.getItems().get("type");
- currentPropertyJsonTemplate = templates.get(propertyType.toLowerCase());
- }
- //Each "special" field is analysed, and has a specific treatment
- for (String propertyField : toscaElementProperty.getItems().keySet()) {
- switch (propertyField) {
- case "type":
- if (currentPropertyJsonTemplate.hasFields(propertyField)) {
- String fieldtype = (String) toscaElementProperty.getItems().get(propertyField);
- switch (fieldtype.toLowerCase()) {
- case "list":
- propertiesInJson.addProperty("type", "array");
- break;
- case "map":
- propertiesInJson.addProperty("type", "object");
- break;
- case "scalar-unit.time":
- case "scalar-unit.frequency":
- case "scalar-unit.size":
- propertiesInJson.addProperty("type", "string");
- break;
- case "timestamp":
- propertiesInJson.addProperty("type", "string");
- propertiesInJson.addProperty("format", "date-time");
- break;
- case "float":
- propertiesInJson.addProperty("type", "number");
- break;
- case "range":
- propertiesInJson.addProperty("type", "integer");
- if (!checkConstraintPresence(toscaElementProperty, "greater_than")
- && currentPropertyJsonTemplate.hasFields("exclusiveMinimum")) {
- propertiesInJson.addProperty("exclusiveMinimum", false);
- }
- if (!checkConstraintPresence(toscaElementProperty, "less_than")
- && currentPropertyJsonTemplate.hasFields("exclusiveMaximum")) {
- propertiesInJson.addProperty("exclusiveMaximum", false);
- }
- break;
- default:
- propertiesInJson.addProperty("type", currentPropertyJsonTemplate.getName());
- break;
- }
- }
- break;
- case "metadata":
- if (metadataParser != null) {
- metadataParser.processAllMetadataElement(toscaElementProperty, serviceModel).entrySet()
- .forEach((jsonEntry) -> {
- propertiesInJson.add(jsonEntry.getKey(),
- jsonEntry.getValue());
-
- });
- }
- break;
- case "constraints":
- toscaElementProperty.addConstraintsAsJson(propertiesInJson,
- (ArrayList<Object>) toscaElementProperty.getItems().get("constraints"),
- currentPropertyJsonTemplate);
- break;
- case "entry_schema":
- //Here, a way to check if entry is a component (datatype) or a simple string
- if (getToscaElement(this.extractSpecificFieldFromMap(toscaElementProperty, "entry_schema"))
- != null) {
- String nameComponent = this.extractSpecificFieldFromMap(toscaElementProperty, "entry_schema");
- ToscaConverterToJsonSchema child = new ToscaConverterToJsonSchema(components, templates,
- metadataParser, serviceModel);
- JsonObject propertiesContainer = new JsonObject();
-
- switch ((String) toscaElementProperty.getItems().get("type")) {
- case "map": // Get it as an object
- JsonObject componentAsProperty = child.getJsonSchemaOfToscaElement(nameComponent);
- propertiesContainer.add(nameComponent, componentAsProperty);
- if (currentPropertyJsonTemplate.hasFields("properties")) {
- propertiesInJson.add("properties", propertiesContainer);
- }
- break;
- default://list : get it as an Array
- JsonObject componentAsItem = child.getJsonSchemaOfToscaElement(nameComponent);
- if (currentPropertyJsonTemplate.hasFields("properties")) {
- propertiesInJson.add("items", componentAsItem);
- propertiesInJson.addProperty("format", "tabs-top");
- }
- break;
- }
-
- } else if (toscaElementProperty.getItems().get("type").equals("list")) {
- // Native cases
- JsonObject itemContainer = new JsonObject();
- String valueInEntrySchema =
- this.extractSpecificFieldFromMap(toscaElementProperty, "entry_schema");
- itemContainer.addProperty("type", valueInEntrySchema);
- propertiesInJson.add("items", itemContainer);
- propertiesInJson.addProperty("format", "tabs-top");
- }
-
- // MAP Case, for now nothing
-
- break;
- default:
- //Each classical field : type, description, default..
- if (currentPropertyJsonTemplate.hasFields(propertyField) && !propertyField.equals("required")) {
- toscaElementProperty.addFieldToJson(propertiesInJson, propertyField,
- toscaElementProperty.getItems().get(propertyField));
- }
- break;
- }
- }
- return propertiesInJson;
- }
-
- /**
- * Look for a matching Component for the name parameter, in the components list.
- *
- * @param name the tosca element name to search for
- * @return a tosca element
- */
- public ToscaElement getToscaElement(String name) {
- ToscaElement correspondingToscaElement = null;
- if (components == null) {
- return null;
- }
- for (ToscaElement toscaElement : components.values()) {
- if (toscaElement.getName().equals(name)) {
- correspondingToscaElement = toscaElement;
- }
- }
- return correspondingToscaElement;
- }
-
- /**
- * Simple method to extract quickly a type field from particular property item.
- *
- * @param toscaElementProperty the property
- * @param fieldName the fieldname
- * @return a string
- */
- @SuppressWarnings("unchecked")
- public String extractSpecificFieldFromMap(ToscaElementProperty toscaElementProperty, String fieldName) {
- LinkedHashMap<String, String> entrySchemaFields =
- (LinkedHashMap<String, String>) toscaElementProperty.getItems().get(fieldName);
- return entrySchemaFields.get("type");
- }
-
- /**
- * Check if a constraint, for a specific property, is there.
- *
- * @param toscaElementProperty property
- * @param nameConstraint name constraint
- * @return a flag boolean
- */
- public boolean checkConstraintPresence(ToscaElementProperty toscaElementProperty, String nameConstraint) {
- boolean presentConstraint = false;
- if (toscaElementProperty.getItems().containsKey("constraints")) {
- ArrayList<Object> constraints = (ArrayList) toscaElementProperty.getItems().get("constraints");
- for (Object constraint : constraints) {
- if (constraint instanceof LinkedHashMap) {
- if (((LinkedHashMap) constraint).containsKey(nameConstraint)) {
- presentConstraint = true;
- }
- }
- }
- }
- return presentConstraint;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/ToscaElementParser.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/ToscaElementParser.java
deleted file mode 100644
index a3dd9c3e1..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/ToscaElementParser.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds.tosca.update.parser;
-
-import java.util.LinkedHashMap;
-import java.util.Map.Entry;
-import org.onap.policy.clamp.clds.tosca.update.elements.ToscaElement;
-import org.onap.policy.clamp.clds.tosca.update.elements.ToscaElementProperty;
-import org.yaml.snakeyaml.Yaml;
-
-public class ToscaElementParser {
- /**
- * Constructor.
- */
- private ToscaElementParser() {
- }
-
- private static LinkedHashMap<String, Object> searchAllDataTypesAndPolicyTypes(String toscaYaml) {
- LinkedHashMap<String, LinkedHashMap<String, Object>> file =
- (LinkedHashMap<String, LinkedHashMap<String, Object>>) new Yaml().load(toscaYaml);
- LinkedHashMap<String, Object> allDataTypesFound = file.get("data_types");
- LinkedHashMap<String, Object> allPolicyTypesFound = file.get("policy_types");
- LinkedHashMap<String, Object> allItemsFound = new LinkedHashMap<>();
- // Put the policies and datatypes in the same collection
- allItemsFound = (allDataTypesFound == null) ? (new LinkedHashMap<>()) : allDataTypesFound;
- allItemsFound.putAll(allPolicyTypesFound == null ? new LinkedHashMap<>() : allPolicyTypesFound);
- return allItemsFound;
- }
-
- private static LinkedHashMap<String, Object> searchAllNativeToscaDataTypes(String toscaNativeYaml) {
- return ((LinkedHashMap<String, LinkedHashMap<String, Object>>) new Yaml().load(toscaNativeYaml))
- .get("data_types");
- }
-
- /**
- * Yaml Parse gets raw policies and datatypes, in different sections : necessary to extract
- * all entities and put them at the same level.
- *
- * @param toscaYaml the tosca model content
- * @param nativeToscaYaml the tosca native datatype content
- * @return a map of Tosca Element containing all tosca elements found (policy types and datatypes)
- */
- public static LinkedHashMap<String, ToscaElement> searchAllToscaElements(String toscaYaml,
- String nativeToscaYaml) {
- LinkedHashMap<String, Object> allItemsFound = searchAllDataTypesAndPolicyTypes(toscaYaml);
- allItemsFound.putAll(searchAllNativeToscaDataTypes(nativeToscaYaml));
- return parseAllItemsFound(allItemsFound);
- }
-
- /**
- * With all the component, get as Map, Components and Components properties are created.
- *
- * @param allMaps maps
- */
- private static LinkedHashMap<String, ToscaElement> parseAllItemsFound(LinkedHashMap<String, Object> allMaps) {
- LinkedHashMap<String, ToscaElement> allItemsFound = new LinkedHashMap<String, ToscaElement>();
- //Component creations, from the file maps
- for (Entry<String, Object> itemToParse : allMaps.entrySet()) {
- LinkedHashMap<String, Object> componentBody = (LinkedHashMap<String, Object>) itemToParse.getValue();
- ToscaElement toscaElement =
- new ToscaElement(itemToParse.getKey(), (String) componentBody.get("derived_from"),
- (String) componentBody.get("description"));
- //If policy, version and type_version :
- if (componentBody.get("type_version") != null) {
- toscaElement.setVersion((String) componentBody.get("type_version"));
- toscaElement.setTypeVersion((String) componentBody.get("type_version"));
- }
- //Properties creation, from the map
- if (componentBody.get("properties") != null) {
- LinkedHashMap<String, Object> properties =
- (LinkedHashMap<String, Object>) componentBody.get("properties");
- for (Entry<String, Object> itemToProperty : properties.entrySet()) {
- ToscaElementProperty toscaElementProperty = new ToscaElementProperty(itemToProperty.getKey(),
- (LinkedHashMap<String, Object>) itemToProperty.getValue());
- toscaElement.addProperties(toscaElementProperty);
- }
- }
- allItemsFound.put(toscaElement.getName(), toscaElement);
- }
- return allItemsFound;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/metadata/ToscaMetadataParser.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/metadata/ToscaMetadataParser.java
deleted file mode 100644
index b2568b79f..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/metadata/ToscaMetadataParser.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds.tosca.update.parser.metadata;
-
-import com.google.gson.JsonObject;
-import org.onap.policy.clamp.clds.tosca.update.elements.ToscaElementProperty;
-import org.onap.policy.clamp.loop.service.Service;
-
-public interface ToscaMetadataParser {
- JsonObject processAllMetadataElement(ToscaElementProperty toscaElementProperty, Service serviceModel);
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/metadata/ToscaMetadataParserWithDictionarySupport.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/metadata/ToscaMetadataParserWithDictionarySupport.java
deleted file mode 100644
index 049018ae0..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/parser/metadata/ToscaMetadataParserWithDictionarySupport.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds.tosca.update.parser.metadata;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Optional;
-import org.onap.policy.clamp.clds.tosca.JsonEditorSchemaConstants;
-import org.onap.policy.clamp.clds.tosca.ToscaSchemaConstants;
-import org.onap.policy.clamp.clds.tosca.update.elements.ToscaElementProperty;
-import org.onap.policy.clamp.clds.tosca.update.execution.ToscaMetadataExecutor;
-import org.onap.policy.clamp.loop.service.Service;
-import org.onap.policy.clamp.tosca.DictionaryElement;
-import org.onap.policy.clamp.tosca.DictionaryService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-@Component
-public class ToscaMetadataParserWithDictionarySupport implements ToscaMetadataParser {
-
- @Autowired
- private ToscaMetadataExecutor toscaMetadataExecutor;
-
- @Autowired
- private DictionaryService dictionaryService;
-
- /**
- * This method is used to start the processing of the metadata field.
- *
- * @param toscaElementProperty The property metadata as Json Object
- * @return The jsonObject structure that must be added to the json schema
- */
- public JsonObject processAllMetadataElement(ToscaElementProperty toscaElementProperty, Service serviceModel) {
- if (dictionaryService != null) {
- return parseMetadataPossibleValues(toscaElementProperty.getItems(), dictionaryService, serviceModel,
- toscaMetadataExecutor);
- } else {
- return null;
- }
- }
-
- private static JsonObject parseMetadataPossibleValues(LinkedHashMap<String, Object> childNodeMap,
- DictionaryService dictionaryService, Service serviceModel,
- ToscaMetadataExecutor toscaMetadataExecutor) {
- JsonObject childObject = new JsonObject();
- if (childNodeMap.containsKey(ToscaSchemaConstants.METADATA)
- && childNodeMap.get(ToscaSchemaConstants.METADATA) != null) {
- ((LinkedHashMap<String, Object>) childNodeMap.get(ToscaSchemaConstants.METADATA)).forEach((key,
- value) -> {
- if (key.equalsIgnoreCase(ToscaSchemaConstants.METADATA_CLAMP_POSSIBLE_VALUES)) {
- String[] multipleValues = ((String) value).split(",");
- for (String multipleValue : multipleValues) {
- if (multipleValue.contains(ToscaSchemaConstants.DICTIONARY)) {
- processDictionaryElements(multipleValue, childObject, dictionaryService);
- }
- if (multipleValue.contains("ClampExecution:")) {
- executeClampProcess(multipleValue.replaceAll("ClampExecution:", ""), childObject,
- serviceModel, toscaMetadataExecutor);
- }
- }
-
- }
- });
- }
- return childObject;
- }
-
- private static void executeClampProcess(String processInfo, JsonObject childObject, Service serviceModel,
- ToscaMetadataExecutor toscaMetadataExecutor) {
- toscaMetadataExecutor.executeTheProcess(processInfo, childObject, serviceModel);
- }
-
- /**
- * For dictionary with multiple levels (defined by #).
- *
- * @param dictionaryKeyArray the array containing the different elements
- * @param childObject the structure getting the new entries
- * @param dictionaryService the dictionary service bean
- */
- private static void processComplexDictionaryElements(String[] dictionaryKeyArray, JsonObject childObject,
- DictionaryService dictionaryService) {
- // We support only one # as of now.
- List<DictionaryElement> dictionaryElements = null;
- if (dictionaryKeyArray.length == 2) {
- dictionaryElements = new ArrayList<>(dictionaryService.getDictionary(dictionaryKeyArray[0])
- .getDictionaryElements());
- JsonArray subDictionaryNames = new JsonArray();
- new ArrayList<DictionaryElement>(dictionaryService.getDictionary(dictionaryKeyArray[1])
- .getDictionaryElements()).forEach(elem -> subDictionaryNames.add(elem.getShortName()));
-
- JsonArray jsonArray = new JsonArray();
-
- Optional.of(dictionaryElements).get().forEach(c -> {
- JsonObject jsonObject = new JsonObject();
- jsonObject.addProperty(JsonEditorSchemaConstants.TYPE, getJsonType(c.getType()));
- if (c.getType() != null
- && c.getType().equalsIgnoreCase(ToscaSchemaConstants.TYPE_STRING)) {
- jsonObject.addProperty(JsonEditorSchemaConstants.MIN_LENGTH, 1);
-
- }
- jsonObject.addProperty(JsonEditorSchemaConstants.ID, c.getName());
- jsonObject.addProperty(JsonEditorSchemaConstants.LABEL, c.getShortName());
- jsonObject.add(JsonEditorSchemaConstants.OPERATORS, subDictionaryNames);
- jsonArray.add(jsonObject);
- });
-
- JsonObject filterObject = new JsonObject();
- filterObject.add(JsonEditorSchemaConstants.FILTERS, jsonArray);
-
- childObject.addProperty(JsonEditorSchemaConstants.TYPE,
- JsonEditorSchemaConstants.TYPE_QBLDR);
- // TO invoke validation on such parameters
- childObject.addProperty(JsonEditorSchemaConstants.MIN_LENGTH, 1);
- childObject.add(JsonEditorSchemaConstants.QSSCHEMA, filterObject);
-
- }
- }
-
- /**
- * For dictionary with single entry.
- *
- * @param dictionaryKeyArray the array containing the different elements
- * @param childObject the structure getting the new entries
- * @param dictionaryService the dictionary service bean
- */
- private static void processSimpleDictionaryElements(String[] dictionaryKeyArray, JsonObject childObject,
- DictionaryService dictionaryService) {
- JsonArray dictionaryNames = new JsonArray();
- JsonArray dictionaryFullNames = new JsonArray();
- dictionaryService.getDictionary(dictionaryKeyArray[0]).getDictionaryElements().forEach(c -> {
- // Json type will be translated before Policy creation
- if (c.getType() != null && !c.getType().equalsIgnoreCase("json")) {
- dictionaryFullNames.add(c.getName());
- }
- dictionaryNames.add(c.getShortName());
- });
-
- if (dictionaryFullNames.size() > 0) {
- if (childObject.get(JsonEditorSchemaConstants.ENUM) != null) {
- childObject.get(JsonEditorSchemaConstants.ENUM).getAsJsonArray().add(dictionaryFullNames);
- } else {
- childObject.add(JsonEditorSchemaConstants.ENUM, dictionaryFullNames);
- }
- // Add Enum titles for generated translated values during JSON instance
- // generation
- JsonObject enumTitles = new JsonObject();
- enumTitles.add(JsonEditorSchemaConstants.ENUM_TITLES, dictionaryNames);
- if (childObject.get(JsonEditorSchemaConstants.OPTIONS) != null) {
- childObject.get(JsonEditorSchemaConstants.OPTIONS).getAsJsonArray().add(enumTitles);
- } else {
- childObject.add(JsonEditorSchemaConstants.OPTIONS, enumTitles);
- }
-
- } else {
- if (childObject.get(JsonEditorSchemaConstants.ENUM) != null) {
- childObject.get(JsonEditorSchemaConstants.ENUM).getAsJsonArray().add(dictionaryNames);
- } else {
- childObject.add(JsonEditorSchemaConstants.ENUM, dictionaryNames);
- }
- }
- }
-
- private static void processDictionaryElements(String dictionaryReference, JsonObject childObject,
- DictionaryService dictionaryService) {
- String[] dictionaryKeyArray =
- dictionaryReference.substring(dictionaryReference.indexOf(ToscaSchemaConstants.DICTIONARY) + 11,
- dictionaryReference.length()).split("#");
- if (dictionaryKeyArray.length > 1) {
- processComplexDictionaryElements(dictionaryKeyArray, childObject, dictionaryService);
- } else {
- processSimpleDictionaryElements(dictionaryKeyArray, childObject, dictionaryService);
- }
- }
-
- private static String getJsonType(String toscaType) {
- String jsonType = null;
- if (toscaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_INTEGER)) {
- jsonType = JsonEditorSchemaConstants.TYPE_INTEGER;
- } else if (toscaType.equalsIgnoreCase(ToscaSchemaConstants.TYPE_LIST)) {
- jsonType = JsonEditorSchemaConstants.TYPE_ARRAY;
- } else {
- jsonType = JsonEditorSchemaConstants.TYPE_STRING;
- }
- return jsonType;
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplate.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplate.java
deleted file mode 100644
index 5c96f2c4a..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplate.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds.tosca.update.templates;
-
-import com.google.gson.JsonObject;
-import java.util.ArrayList;
-import java.util.List;
-
-public class JsonTemplate {
-
- /**
- * name parameter is used as "key", in the LinkedHashMap of Templates.
- */
- private String name;
- private List<JsonTemplateField> jsonTemplateFields;
-
- public JsonTemplate(String name) {
- this.name = name;
- this.jsonTemplateFields = new ArrayList<>();
- }
-
- public JsonTemplate(String name, List<JsonTemplateField> jsonTemplateFields) {
- this.name = name;
- this.jsonTemplateFields = jsonTemplateFields;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public List<JsonTemplateField> getJsonTemplateFields() {
- return jsonTemplateFields;
- }
-
- public void setJsonTemplateFields(List<JsonTemplateField> jsonTemplateFields) {
- this.jsonTemplateFields = jsonTemplateFields;
- }
-
- /**
- * Search in fields if fieldName exists.
- *
- * @param fieldName The field name
- * @return Ture if it exists, false otherwise
- */
- public boolean hasFields(String fieldName) {
- for (JsonTemplateField jsonTemplateField : this.getJsonTemplateFields()) {
- if (jsonTemplateField.getTitle().equals(fieldName)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Get a specific Field.
- *
- * @param fieldName The field name
- * @return THe Field found
- */
- public JsonTemplateField getSpecificField(String fieldName) {
- for (JsonTemplateField jsonTemplateField : this.getJsonTemplateFields()) {
- if (jsonTemplateField.getTitle().equals(fieldName)) {
- return jsonTemplateField;
- }
- }
- return null;
- }
-
- public void addField(JsonTemplateField jsonTemplateField) {
- jsonTemplateFields.add(jsonTemplateField);
- }
-
- public void removeField(JsonTemplateField jsonTemplateField) {
- jsonTemplateFields.remove(jsonTemplateField);
- }
-
- /**
- * Enable or disable the visibility.
- *
- * @param nameField THe field name
- * @param state True or false
- */
- public void setVisibility(String nameField, boolean state) {
- for (JsonTemplateField jsonTemplateField : this.jsonTemplateFields) {
- if (jsonTemplateField.getTitle().equals(nameField)) {
- jsonTemplateField.setVisible(state);
- }
- }
- }
-
- /**
- * This method defines if a field is static or not.
- *
- * @param nameField The name of the field
- * @param state true or false
- */
- public void setStatic(String nameField, boolean state) {
- for (JsonTemplateField jsonTemplateField : this.jsonTemplateFields) {
- if (jsonTemplateField.getTitle().equals(nameField)) {
- jsonTemplateField.setStaticValue(state);
- }
- }
- }
-
- /**
- * This method updates the value of a specfic field.
- *
- * @param nameField The name of the field
- * @param newValue The new value as Object
- */
- public void updateValueField(String nameField, Object newValue) {
- for (JsonTemplateField jsonTemplateField : this.jsonTemplateFields) {
- if (jsonTemplateField.getTitle().equals(nameField)) {
- jsonTemplateField.setValue(newValue);
- }
- }
- }
-
- /**
- * Compare two templates : size and their contents.
- *
- * @param jsonTemplate the template
- * @return a boolean
- */
- public boolean checkFields(JsonTemplate jsonTemplate) {
- boolean duplicateFields = false;
- if (jsonTemplate.getJsonTemplateFields().size() == this.getJsonTemplateFields().size()) {
- int countMatchingFields = 0;
- //loop each component of first
- for (JsonTemplateField jsonTemplateFieldToCheck : jsonTemplate.getJsonTemplateFields()) {
- for (JsonTemplateField jsonTemplateField : this.getJsonTemplateFields()) {
- if (jsonTemplateFieldToCheck.compareWithField(jsonTemplateField)) {
- countMatchingFields++;
- }
- }
- }
-
- if (jsonTemplate.getJsonTemplateFields().size() == countMatchingFields) {
- duplicateFields = true;
- }
- }
- return duplicateFields;
- }
-
- /**
- * This method gets the specific field status.
- *
- * @param field The field name
- * @return true or false
- */
- public boolean fieldStaticStatus(String field) {
- if (this.hasFields(field) && this.getSpecificField(field).getStaticValue().equals(true)
- && this.getSpecificField(field).getValue() != null) {
- return true;
- }
- return false;
- }
-
- public boolean isVisible(String field) {
- return this.getSpecificField(field).getVisible();
- }
-
- /**
- * Set the value of a property of the Field in the json.
- *
- * @param jsonSchema The Json schema
- * @param fieldName The Field name
- * @param value The value
- */
- public void setValue(JsonObject jsonSchema, String fieldName, String value) {
- if (isVisible(fieldName)) {
- if (fieldStaticStatus(fieldName)) {
- String defaultValue = (String) this.getSpecificField(fieldName).getValue();
- jsonSchema.addProperty(fieldName, defaultValue);
- } else {
- jsonSchema.addProperty(fieldName, value);
- }
- }
- }
-
- /**
- * Inject a static value in the json.
- *
- * @param jsonSchema The json schema object
- * @param fieldName The field name
- */
- public void injectStaticValue(JsonObject jsonSchema, String fieldName) {
- if (isVisible(fieldName)) {
- JsonTemplateField toInject = this.getSpecificField(fieldName);
- jsonSchema.addProperty(fieldName, (String) toInject.getValue());
- }
- }
-
- @Override
- public String toString() {
- return " templateFields : " + jsonTemplateFields;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplateField.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplateField.java
deleted file mode 100644
index d9fd11de2..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplateField.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds.tosca.update.templates;
-
-public class JsonTemplateField {
- private String title;
- private Object value;
- private Boolean visible;
- private Boolean staticValue;
-
- public JsonTemplateField(String title) {
- this.title = title;
- }
-
- /**
- * Constructor.
- *
- * @param title The title
- * @param value The value
- * @param visible visible or not
- * @param staticValue The static value
- */
- public JsonTemplateField(String title, Object value, Boolean visible, Boolean staticValue) {
- this.title = title;
- this.value = value;
- this.visible = visible;
- this.staticValue = staticValue;
- }
-
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public Object getValue() {
- return value;
- }
-
- public void setValue(Object value) {
- this.value = value;
- }
-
- public Boolean getVisible() {
- return visible;
- }
-
- public void setVisible(Boolean visible) {
- this.visible = visible;
- }
-
- public Boolean getStaticValue() {
- return staticValue;
- }
-
- public void setStaticValue(Boolean staticValue) {
- this.staticValue = staticValue;
- }
-
- public String toString() {
- return title + " " + value + " " + visible + " " + staticValue;
- }
-
- /**
- * This method compares two fields.
- *
- * @param otherField Compare the current object with the one specified
- * @return true if they are totally equals, false otherwise
- */
- public boolean compareWithField(Object otherField) {
- if (this == otherField) {
- return true;
- }
- if (otherField == null || getClass() != otherField.getClass()) {
- return false;
- }
-
- JsonTemplateField jsonTemplateField = (JsonTemplateField) otherField;
-
- if (title != null ? !title.equals(jsonTemplateField.title) : jsonTemplateField.title != null) {
- return false;
- }
- if (value != null ? !value.equals(jsonTemplateField.value) : jsonTemplateField.value != null) {
- return false;
- }
- if (visible != null ? !visible.equals(jsonTemplateField.visible) : jsonTemplateField.visible != null) {
- return false;
- }
- return staticValue != null ? staticValue.equals(jsonTemplateField.staticValue) :
- jsonTemplateField.staticValue == null;
- }
-
- @Override
- public boolean equals(Object object) {
- if (this == object) {
- return true;
- }
- if (object == null || getClass() != object.getClass()) {
- return false;
- }
-
- JsonTemplateField jsonTemplateField = (JsonTemplateField) object;
-
- return title != null ? title.equals(jsonTemplateField.title) : jsonTemplateField.title == null;
- }
-
- @Override
- public int hashCode() {
- return title != null ? title.hashCode() : 0;
- }
-
- /**
- * This method test the entire equality.
- *
- * @param jsonTemplateField1 object one
- * @param jsonTemplateField2 object two
- * @return true if they are totally equals (all attributes, false otherwise
- */
- public static boolean fieldsEquals(JsonTemplateField jsonTemplateField1, JsonTemplateField jsonTemplateField2) {
- return (jsonTemplateField2.getTitle().equals(jsonTemplateField1.getTitle())
- && jsonTemplateField2.getValue().equals(jsonTemplateField1.getValue())
- && jsonTemplateField2.getVisible().equals(jsonTemplateField1.getVisible())
- && jsonTemplateField2.getStaticValue().equals(jsonTemplateField1.getStaticValue()));
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplateManager.java b/src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplateManager.java
deleted file mode 100644
index 1813d0786..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplateManager.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.clds.tosca.update.templates;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import org.onap.policy.clamp.clds.tosca.update.UnknownComponentException;
-import org.onap.policy.clamp.clds.tosca.update.elements.ToscaElement;
-import org.onap.policy.clamp.clds.tosca.update.parser.ToscaConverterToJsonSchema;
-import org.onap.policy.clamp.clds.tosca.update.parser.ToscaElementParser;
-import org.onap.policy.clamp.clds.tosca.update.parser.metadata.ToscaMetadataParser;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.onap.policy.clamp.loop.service.Service;
-
-public class JsonTemplateManager {
- private LinkedHashMap<String, JsonTemplate> jsonSchemaTemplates;
- private LinkedHashMap<String, ToscaElement> toscaElements;
-
- /**
- * Constructor.
- *
- * @param toscaYamlContent Policy Tosca Yaml content as string
- * @param nativeToscaDatatypes The tosca yaml with tosca native datatypes
- * @param jsonSchemaTemplates template properties as string
- */
- public JsonTemplateManager(String toscaYamlContent, String nativeToscaDatatypes, String jsonSchemaTemplates) {
- if (toscaYamlContent != null && !toscaYamlContent.isEmpty()) {
- this.toscaElements = ToscaElementParser.searchAllToscaElements(toscaYamlContent, nativeToscaDatatypes);
- this.jsonSchemaTemplates = initializeTemplates(jsonSchemaTemplates);
- } else {
- toscaElements = null;
- }
- }
-
- //GETTERS & SETTERS
- public LinkedHashMap<String, ToscaElement> getToscaElements() {
- return toscaElements;
- }
-
- public void setToscaElements(LinkedHashMap<String, ToscaElement> toscaElements) {
- this.toscaElements = toscaElements;
- }
-
- public LinkedHashMap<String, JsonTemplate> getJsonSchemaTemplates() {
- return jsonSchemaTemplates;
- }
-
- public void setJsonSchemaTemplates(LinkedHashMap<String, JsonTemplate> jsonSchemaTemplates) {
- this.jsonSchemaTemplates = jsonSchemaTemplates;
- }
-
- /**
- * Add a template.
- *
- * @param name name
- * @param jsonTemplateFields fields
- */
- public void addTemplate(String name, List<JsonTemplateField> jsonTemplateFields) {
- JsonTemplate jsonTemplate = new JsonTemplate(name, jsonTemplateFields);
- //If it is true, the operation does not have any interest :
- // replace OR put two different object with the same body
- if (!jsonSchemaTemplates.containsKey(jsonTemplate.getName()) || !this.hasTemplate(jsonTemplate)) {
- this.jsonSchemaTemplates.put(jsonTemplate.getName(), jsonTemplate);
- }
- }
-
- /**
- * By name, find and remove a given template.
- *
- * @param nameTemplate name template
- */
- public void removeTemplate(String nameTemplate) {
- this.jsonSchemaTemplates.remove(nameTemplate);
- }
-
- /**
- * Update Template : adding with true flag, removing with false.
- *
- * @param nameTemplate name template
- * @param jsonTemplateField field name
- * @param operation operation
- */
- public void updateTemplate(String nameTemplate, JsonTemplateField jsonTemplateField, Boolean operation) {
- // Operation = true && field is not present => add Field
- if (operation
- && !this.jsonSchemaTemplates.get(nameTemplate).getJsonTemplateFields().contains(jsonTemplateField)) {
- this.jsonSchemaTemplates.get(nameTemplate).addField(jsonTemplateField);
- } else if (!operation
- && this.jsonSchemaTemplates.get(nameTemplate).getJsonTemplateFields().contains(jsonTemplateField)) {
- // Operation = false && field is present => remove Field
- this.jsonSchemaTemplates.get(nameTemplate).removeField(jsonTemplateField);
- }
- }
-
- /**
- * Check if the JSONTemplates have the same bodies.
- *
- * @param jsonTemplate template
- * @return a boolean
- */
- public boolean hasTemplate(JsonTemplate jsonTemplate) {
- boolean duplicateTemplate = false;
- Collection<String> templatesName = jsonSchemaTemplates.keySet();
- if (templatesName.contains(jsonTemplate.getName())) {
- JsonTemplate existingJsonTemplate = jsonSchemaTemplates.get(jsonTemplate.getName());
- duplicateTemplate = existingJsonTemplate.checkFields(jsonTemplate);
- }
- return duplicateTemplate;
- }
-
- /**
- * For a given policy type, get a corresponding JsonObject from the tosca model.
- *
- * @param policyType The policy type in the tosca
- * @param toscaMetadataParser The MetadataParser class that must be used if metadata section are encountered,
- * if null they will be skipped
- * @return an json object defining the equivalent json schema from the tosca for a given policy type
- */
- public JsonObject getJsonSchemaForPolicyType(String policyType, ToscaMetadataParser toscaMetadataParser,
- Service serviceModel)
- throws UnknownComponentException {
- ToscaConverterToJsonSchema
- toscaConverterToJsonSchema = new ToscaConverterToJsonSchema(toscaElements, jsonSchemaTemplates,
- toscaMetadataParser, serviceModel);
- if (toscaConverterToJsonSchema.getToscaElement(policyType) == null) {
- throw new UnknownComponentException(policyType);
- }
- return toscaConverterToJsonSchema.getJsonSchemaOfToscaElement(policyType);
- }
-
- /**
- * Create and complete several Templates from file.properties.
- *
- * @param jsonTemplates The template properties as String
- * @return a map
- */
- @SuppressWarnings("unused")
- private LinkedHashMap<String, JsonTemplate> initializeTemplates(String jsonTemplates) {
-
- LinkedHashMap<String, JsonTemplate> generatedTemplates = new LinkedHashMap<>();
- JsonObject templates = JsonUtils.GSON.fromJson(jsonTemplates, JsonObject.class);
-
- for (Map.Entry<String, JsonElement> templateAsJson : templates.entrySet()) {
- JsonTemplate jsonTemplate = new JsonTemplate(templateAsJson.getKey());
- JsonObject templateBody = (JsonObject) templateAsJson.getValue();
- for (Map.Entry<String, JsonElement> field : templateBody.entrySet()) {
- String fieldName = field.getKey();
- JsonObject bodyFieldAsJson = (JsonObject) field.getValue();
- Object fieldValue = bodyFieldAsJson.get("defaultValue").getAsString();
- Boolean fieldVisible = bodyFieldAsJson.get("visible").getAsBoolean();
- Boolean fieldStatic = bodyFieldAsJson.get("static").getAsBoolean();
- JsonTemplateField
- bodyJsonTemplateField = new JsonTemplateField(fieldName, fieldValue, fieldVisible, fieldStatic);
- jsonTemplate.getJsonTemplateFields().add(bodyJsonTemplateField);
- }
- generatedTemplates.put(jsonTemplate.getName(), jsonTemplate);
- }
- return generatedTemplates;
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/clds/util/ClampVersioning.java b/src/main/java/org/onap/policy/clamp/clds/util/ClampVersioning.java
deleted file mode 100644
index 0890615d9..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/util/ClampVersioning.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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============================================
- * Modifications copyright (c) 2018 Nokia
- * ===================================================================
- *
- */
-
-package org.onap.policy.clamp.clds.util;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.io.InputStream;
-import java.util.Properties;
-
-/**
- * This class give a way to know the Clamp version easily, the version in that
- * file is set by maven at build time.
- *
- */
-public class ClampVersioning {
- private static final String RESOURCE_NAME = "clds-version.properties";
- private static final String CLDS_VERSION_PROPERTY = "clds.version";
- private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(ClampVersioning.class);
-
- private ClampVersioning() {
- }
-
- /**
- * Returns Clds version from properties.
- *
- * @return Clds version from properties
- */
- public static String getCldsVersionFromProps() {
- String cldsVersion = "";
- Properties props = new Properties();
- try (InputStream resourceStream = ResourceFileUtils.getResourceAsStream(RESOURCE_NAME)) {
- props.load(resourceStream);
- cldsVersion = props.getProperty(CLDS_VERSION_PROPERTY);
- } catch (Exception ex) {
- LOGGER.error("Exception caught during the " + CLDS_VERSION_PROPERTY + " property reading", ex);
- }
- return cldsVersion;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/util/CryptoUtils.java b/src/main/java/org/onap/policy/clamp/clds/util/CryptoUtils.java
deleted file mode 100644
index 01dd48763..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/util/CryptoUtils.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.clds.util;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.common.base.Charsets;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.security.GeneralSecurityException;
-import java.security.SecureRandom;
-import java.util.Properties;
-import javax.crypto.Cipher;
-import javax.crypto.spec.IvParameterSpec;
-import javax.crypto.spec.SecretKeySpec;
-import org.apache.commons.codec.DecoderException;
-import org.apache.commons.codec.binary.Hex;
-import org.apache.commons.lang3.ArrayUtils;
-
-/**
- * CryptoUtils for encrypting/decrypting string based on a Key defined in
- * application.properties (Spring config file).
- */
-public final class CryptoUtils {
-
- /**
- * Used to log CryptoUtils class.
- */
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(CryptoUtils.class);
- // Openssl commands:
- // Encrypt: echo -n "123456" | openssl aes-128-cbc -e -K <Private Hex key>
- // -iv <16 Bytes iv (HEX), be careful it's 32 Hex Chars> | xxd -u -g100
- // Final result is to put in properties file is: IV + Outcome of openssl
- // command
- // ************************************************************
- // Decrypt: echo -n 'Encrypted string' | xxd -r -ps | openssl aes-128-cbc -d
- // -K
- // <Private Hex Key> -iv <16 Bytes IV extracted from Encrypted String, be
- // careful it's 32 Hex Chars>
- /**
- * Definition of encryption algorithm.
- */
- private static final String ALGORITHM = "AES";
-
- /**
- * AES Encryption Key environment variable for external configuration.
- */
- private static final String AES_ENCRYPTION_KEY = "AES_ENCRYPTION_KEY";
-
- /**
- * Detailed definition of encryption algorithm.
- */
- private static final String ALGORITHM_DETAILS = ALGORITHM + "/CBC/PKCS5PADDING";
- private static final int IV_BLOCK_SIZE_IN_BITS = 128;
- /**
- * An Initial Vector of 16 Bytes, so 32 Hexadecimal Chars.
- */
- private static final int IV_BLOCK_SIZE_IN_BYTES = IV_BLOCK_SIZE_IN_BITS / 8;
- /**
- * Key to read in the key.properties file.
- */
- private static final String KEY_PARAM = "org.onap.policy.clamp.encryption.aes.key";
- private static final String PROPERTIES_FILE_NAME = "clds/key.properties";
- /**
- * The SecretKeySpec created from the Base 64 String key.
- */
- private static final SecretKeySpec SECRET_KEY_SPEC = readSecretKeySpec(PROPERTIES_FILE_NAME);
-
- /**
- * Private constructor to avoid creating instances of util class.
- */
- private CryptoUtils() {
- }
-
- /**
- * Encrypt a value based on the Clamp Encryption Key.
- *
- * @param value The value to encrypt
- * @return The encrypted string
- * @throws GeneralSecurityException In case of issue with the encryption
- * @throws UnsupportedEncodingException In case of issue with the charset
- * conversion
- */
- public static String encrypt(String value) throws GeneralSecurityException {
- Cipher cipher = Cipher.getInstance(ALGORITHM_DETAILS, "SunJCE");
- byte[] iv = new byte[IV_BLOCK_SIZE_IN_BYTES];
- SecureRandom.getInstance("SHA1PRNG").nextBytes(iv);
- IvParameterSpec ivspec = new IvParameterSpec(iv);
- cipher.init(Cipher.ENCRYPT_MODE, SECRET_KEY_SPEC, ivspec);
- return Hex.encodeHexString(ArrayUtils.addAll(iv, cipher.doFinal(value.getBytes(Charsets.UTF_8))));
- }
-
- /**
- * Decrypt a value based on the Clamp Encryption Key.
- *
- * @param message The encrypted string that must be decrypted using the Clamp
- * Encryption Key
- * @return The String decrypted
- * @throws GeneralSecurityException In case of issue with the encryption
- * @throws DecoderException In case of issue to decode the HexString
- */
- public static String decrypt(String message) throws GeneralSecurityException, DecoderException {
- byte[] encryptedMessage = Hex.decodeHex(message.toCharArray());
- Cipher cipher = Cipher.getInstance(ALGORITHM_DETAILS, "SunJCE");
- IvParameterSpec ivspec = new IvParameterSpec(ArrayUtils.subarray(encryptedMessage, 0, IV_BLOCK_SIZE_IN_BYTES));
- byte[] realData = ArrayUtils.subarray(encryptedMessage, IV_BLOCK_SIZE_IN_BYTES, encryptedMessage.length);
- cipher.init(Cipher.DECRYPT_MODE, SECRET_KEY_SPEC, ivspec);
- byte[] decrypted = cipher.doFinal(realData);
- return new String(decrypted);
- }
-
- /**
- * Method used to generate the SecretKeySpec from a Base64 String.
- *
- * @param keyString The key as a string in Base 64
- * @return The SecretKeySpec created
- * @throws DecoderException In case of issues with the decoding of Base64
- */
- private static SecretKeySpec getSecretKeySpec(String keyString) throws DecoderException {
- byte[] key = Hex.decodeHex(keyString.toCharArray());
- return new SecretKeySpec(key, ALGORITHM);
- }
-
- /**
- * Reads SecretKeySpec from file specified by propertiesFileName.
- *
- * @param propertiesFileName File name with properties
- * @return SecretKeySpec secret key spec read from propertiesFileName
- */
- private static SecretKeySpec readSecretKeySpec(String propertiesFileName) {
- Properties props = new Properties();
- try {
- // Workaround fix to make encryption key configurable
- // System environment variable takes precedence for over clds/key.properties
- String encryptionKey = System.getenv(AES_ENCRYPTION_KEY);
- if (encryptionKey != null && encryptionKey.trim().length() > 0) {
- return getSecretKeySpec(encryptionKey);
- } else {
- props.load(ResourceFileUtils.getResourceAsStream(propertiesFileName));
- return getSecretKeySpec(props.getProperty(KEY_PARAM));
- }
- } catch (IOException | DecoderException e) {
- logger.error("Exception occurred during the key reading", e);
- return null;
- }
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/util/JsonUtils.java b/src/main/java/org/onap/policy/clamp/clds/util/JsonUtils.java
deleted file mode 100644
index fd5079c47..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/util/JsonUtils.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2018-2019 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.policy.clamp.clds.util;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import java.time.Instant;
-import org.onap.policy.clamp.authorization.SecureServicePermission;
-import org.onap.policy.clamp.authorization.SecureServicePermissionDeserializer;
-import org.onap.policy.clamp.dao.model.gson.converter.InstantDeserializer;
-import org.onap.policy.clamp.dao.model.gson.converter.InstantSerializer;
-
-/**
- * This class is used to access the GSON with restricted type access.
- */
-public class JsonUtils {
-
- protected static final EELFLogger logger = EELFManager.getInstance().getLogger(JsonUtils.class);
-
- public static final Gson GSON = new GsonBuilder().setPrettyPrinting()
- .registerTypeAdapter(SecureServicePermission.class, new SecureServicePermissionDeserializer()).create();
-
- public static final Gson GSON_JPA_MODEL = new GsonBuilder().setPrettyPrinting()
- .registerTypeAdapter(Instant.class, new InstantSerializer())
- .registerTypeAdapter(Instant.class, new InstantDeserializer()).setPrettyPrinting()
- .excludeFieldsWithoutExposeAnnotation().create();
-
- private JsonUtils() {
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/util/LogMessages.java b/src/main/java/org/onap/policy/clamp/clds/util/LogMessages.java
deleted file mode 100644
index 676206e0f..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/util/LogMessages.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.clds.util;
-
-import com.att.eelf.i18n.EELFResolvableErrorEnum;
-import com.att.eelf.i18n.EELFResourceManager;
-
-public enum LogMessages implements EELFResolvableErrorEnum {
- LOGSERVICE_HELLO_MESSAGE, LOGSERVICE_EMAIL_ERROR, LOGSERVICE_EMAIL_CLASS, LOGSERVICE_EMAIL_CLASS_NULL,
- PROCESS_INSTANCE_ID;
-
- static {
- EELFResourceManager.loadMessageBundle("logmessages");
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/util/LoggingUtils.java b/src/main/java/org/onap/policy/clamp/clds/util/LoggingUtils.java
deleted file mode 100644
index d7a158e73..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/util/LoggingUtils.java
+++ /dev/null
@@ -1,414 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.clds.util;
-
-import java.net.HttpURLConnection;
-import java.net.InetAddress;
-import java.net.URLConnection;
-import java.net.UnknownHostException;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.time.ZoneOffset;
-import java.time.ZonedDateTime;
-import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
-import java.util.Date;
-import java.util.TimeZone;
-import java.util.UUID;
-import javax.net.ssl.HttpsURLConnection;
-import javax.servlet.http.HttpServletRequest;
-import javax.validation.constraints.NotNull;
-import org.onap.policy.clamp.authorization.AuthorizationController;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.slf4j.MDC;
-import org.slf4j.event.Level;
-import org.springframework.security.core.context.SecurityContextHolder;
-
-/**
- * This class handles the special info that appear in the log, like RequestID,
- * time context, ...
- */
-public class LoggingUtils {
-
- protected static final Logger logger = LoggerFactory.getLogger(LoggingUtils.class);
-
- private static final DateFormat DATE_FORMAT = createDateFormat();
-
- private static final String DATE_FORMATTER_ISO = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
-
- /** String constant for messages <tt>ENTERING</tt>, <tt>EXITING</tt>, etc. */
- private static final String EMPTY_MESSAGE = "";
-
- /** Logger delegate. */
- private Logger mlogger;
-
- /** Automatic UUID, overrideable per adapter or per invocation. */
- private static UUID sInstanceUUID = UUID.randomUUID();
-
- /**
- * Constructor.
- */
- public LoggingUtils(final Logger loggerP) {
- this.mlogger = checkNotNull(loggerP);
- }
-
- /**
- * Set request related logging variables in thread local data via MDC.
- *
- * @param service Service Name of API (ex. "PUT template")
- * @param partner Partner name (client or user invoking API)
- */
- public static void setRequestContext(String service, String partner) {
- MDC.put("RequestId", UUID.randomUUID().toString());
- MDC.put("ServiceName", service);
- MDC.put("PartnerName", partner);
- // Defaulting to HTTP/1.1 protocol
- MDC.put("Protocol", "HTTP/1.1");
- try {
- MDC.put("ServerFQDN", InetAddress.getLocalHost().getCanonicalHostName());
- MDC.put("ServerIPAddress", InetAddress.getLocalHost().getHostAddress());
- } catch (UnknownHostException e) {
- logger.error("Failed to initiate setRequestContext", e);
- }
- }
-
- /**
- * Set time related logging variables in thread local data via MDC.
- *
- * @param beginTimeStamp Start time
- * @param endTimeStamp End time
- */
- public static void setTimeContext(@NotNull Date beginTimeStamp, @NotNull Date endTimeStamp) {
- MDC.put("EntryTimestamp", generateTimestampStr(beginTimeStamp));
- MDC.put("EndTimestamp", generateTimestampStr(endTimeStamp));
- MDC.put("ElapsedTime", String.valueOf(endTimeStamp.getTime() - beginTimeStamp.getTime()));
- }
-
- /**
- * Set response related logging variables in thread local data via MDC.
- *
- * @param code Response code ("0" indicates success)
- * @param description Response description
- * @param className class name of invoking class
- */
- public static void setResponseContext(String code, String description, String className) {
- MDC.put("ResponseCode", code);
- MDC.put("StatusCode", "0".equals(code) ? "COMPLETE" : "ERROR");
- MDC.put("ResponseDescription", description != null ? description : "");
- MDC.put("ClassName", className != null ? className : "");
- }
-
- /**
- * Set target related logging variables in thread local data via MDC.
- *
- * @param targetEntity Target entity (an external/sub component, for ex. "sdc")
- * @param targetServiceName Target service name (name of API invoked on target)
- */
- public static void setTargetContext(String targetEntity, String targetServiceName) {
- MDC.put("TargetEntity", targetEntity != null ? targetEntity : "");
- MDC.put("TargetServiceName", targetServiceName != null ? targetServiceName : "");
- }
-
- /**
- * Set error related logging variables in thread local data via MDC.
- *
- * @param code Error code
- * @param description Error description
- */
- public static void setErrorContext(String code, String description) {
- MDC.put("ErrorCode", code);
- MDC.put("ErrorDescription", description != null ? description : "");
- }
-
- private static String generateTimestampStr(Date timeStamp) {
- return DATE_FORMAT.format(timeStamp);
- }
-
- /**
- * Get a previously stored RequestID for the thread local data via MDC. If
- * one was not previously stored, generate one, store it, and return that
- * one.
- *
- * @return A string with the request ID
- */
- public static String getRequestId() {
- String requestId = MDC.get(OnapLogConstants.Mdcs.REQUEST_ID);
- if (requestId == null || requestId.isEmpty()) {
- requestId = UUID.randomUUID().toString();
- MDC.put(OnapLogConstants.Mdcs.REQUEST_ID, requestId);
- }
- return requestId;
- }
-
- private static DateFormat createDateFormat() {
- DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
- dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
- return dateFormat;
- }
-
- /* *******************************************************************************************
- * Method for ONAP Application Logging Specification v1.2
- * *******************************************************************************************/
-
- /**
- * Report <tt>ENTERING</tt> marker.
- *
- * @param request non-null incoming request (wrapper)
- * @param serviceName service name
- */
- public void entering(HttpServletRequest request, String serviceName) {
- // MDC.clear();
- checkNotNull(request);
- // Extract MDC values from standard HTTP headers.
- final String requestId =
- defaultToUuid(request.getHeader(OnapLogConstants.Headers.REQUEST_ID));
- final String invocationId =
- defaultToUuid(request.getHeader(OnapLogConstants.Headers.INVOCATION_ID));
- final String partnerName =
- defaultToEmpty(request.getHeader(OnapLogConstants.Headers.PARTNER_NAME));
-
- // Default the partner name to the user name used to login to clamp
- if (partnerName.equalsIgnoreCase(EMPTY_MESSAGE)) {
- MDC.put(OnapLogConstants.Mdcs.PARTNER_NAME,
- AuthorizationController.getPrincipalName(SecurityContextHolder.getContext()));
- }
-
- // Set standard MDCs. Override this entire method if you want to set
- // others, OR set them BEFORE or AFTER the invocation of #entering,
- // depending on where you need them to appear, OR extend the
- // ServiceDescriptor to add them.
- MDC.put(OnapLogConstants.Mdcs.ENTRY_TIMESTAMP, ZonedDateTime.now(ZoneOffset.UTC)
- .format(DateTimeFormatter.ofPattern(DATE_FORMATTER_ISO)));
- MDC.put(OnapLogConstants.Mdcs.REQUEST_ID, requestId);
- MDC.put(OnapLogConstants.Mdcs.INVOCATION_ID, invocationId);
- MDC.put(OnapLogConstants.Mdcs.CLIENT_IP_ADDRESS, defaultToEmpty(request.getRemoteAddr()));
- MDC.put(OnapLogConstants.Mdcs.SERVER_FQDN, defaultToEmpty(request.getServerName()));
- MDC.put(OnapLogConstants.Mdcs.INSTANCE_UUID, defaultToEmpty(sInstanceUUID));
-
- // Default the service name to the requestURI, in the event that
- // no value has been provided.
- if (serviceName == null || serviceName.equalsIgnoreCase(EMPTY_MESSAGE)) {
- MDC.put(OnapLogConstants.Mdcs.SERVICE_NAME, request.getRequestURI());
- } else {
- MDC.put(OnapLogConstants.Mdcs.SERVICE_NAME, serviceName);
- }
-
- // Set the Response Status code to in progress
- MDC.put(OnapLogConstants.Mdcs.RESPONSE_STATUS_CODE,
- OnapLogConstants.ResponseStatus.INPROGRESS.toString());
- setElapsedTime();
-
- this.mlogger.info(OnapLogConstants.Markers.ENTRY, "Entering");
- }
-
- /**
- * Report <tt>EXITING</tt> marker.
- *
- *
- * @param code response code
- * @param descrption response description
- * @param severity response severity
- * @param status response status code
- */
- public void exiting(int code, String descrption, Level severity,
- OnapLogConstants.ResponseStatus status) {
- try {
-
- MDC.put(OnapLogConstants.Mdcs.RESPONSE_CODE, defaultToEmpty(code));
- MDC.put(OnapLogConstants.Mdcs.RESPONSE_DESCRIPTION, defaultToEmpty(descrption));
- MDC.put(OnapLogConstants.Mdcs.RESPONSE_SEVERITY, defaultToEmpty(severity));
- MDC.put(OnapLogConstants.Mdcs.RESPONSE_STATUS_CODE, defaultToEmpty(status));
-
- setElapsedTime();
- this.mlogger.info(OnapLogConstants.Markers.EXIT, "Exiting");
- } finally {
- MDC.clear();
- }
- }
-
- private void setElapsedTime() {
- ZonedDateTime startTime =
- ZonedDateTime.parse(MDC.get(OnapLogConstants.Mdcs.ENTRY_TIMESTAMP),
- DateTimeFormatter.ISO_DATE_TIME.withZone(ZoneOffset.UTC));
- ZonedDateTime endTime = ZonedDateTime.now(ZoneOffset.UTC);
- long duration = ChronoUnit.MILLIS.between(startTime, endTime);
- MDC.put(OnapLogConstants.Mdcs.ELAPSED_TIME, String.valueOf(duration));
- }
-
- /**
- * Get the property value.
- *
- * @param name The name of the property
- * @return The value of the property
- */
- public String getProperties(String name) {
- return MDC.get(name);
- }
-
- /**
- * Report pending invocation with <tt>INVOKE</tt> marker,
- * setting standard ONAP logging headers automatically.
- *
- * @param con The HTTP url connection
- * @param targetEntity The target entity
- * @param targetServiceName The target service name
- * @return The HTTP url connection
- */
- public HttpURLConnection invoke(final HttpURLConnection con, String targetEntity,
- String targetServiceName) {
- return this.invokeGeneric(con, targetEntity, targetServiceName);
- }
-
- /**
- * Report pending invocation with <tt>INVOKE</tt> marker,
- * setting standard ONAP logging headers automatically.
- *
- * @param targetEntity The target entity
- * @param targetServiceName The target service name
- */
- public void invoke(String targetEntity, String targetServiceName) {
- final String invocationId = UUID.randomUUID().toString();
-
- invokeContext(targetEntity, targetServiceName, invocationId);
-
- // Log INVOKE*, with the invocationID as the message body.
- // (We didn't really want this kind of behavior in the standard,
- // but is it worse than new, single-message MDC?)
- this.mlogger.info(OnapLogConstants.Markers.INVOKE, "INVOKE");
- this.mlogger.info(OnapLogConstants.Markers.INVOKE_SYNCHRONOUS + "{" + invocationId + "}");
- }
-
- /**
- * Report pending invocation with <tt>INVOKE</tt> marker,
- * setting standard ONAP logging headers automatically.
- *
- * @param con The HTTPS url connection
- * @param targetEntity The target entity
- * @param targetServiceName The target service name
- * @return The HTTPS url connection
- */
- public HttpsURLConnection invokeHttps(final HttpsURLConnection con, String targetEntity,
- String targetServiceName) {
- return this.invokeGeneric(con, targetEntity, targetServiceName);
- }
-
- /**
- * Report pending invocation with <tt>INVOKE-RETURN</tt> marker.
- */
- public void invokeReturn() {
- MDC.put(OnapLogConstants.Mdcs.RESPONSE_STATUS_CODE,
- OnapLogConstants.ResponseStatus.COMPLETE.toString());
- // Add the Invoke-return marker and clear the needed MDC
- this.mlogger.info(OnapLogConstants.Markers.INVOKE_RETURN, "INVOKE-RETURN");
- invokeReturnContext();
- }
-
- /**
- * Dependency-free nullcheck.
- *
- * @param in to be checked
- * @param <T> argument (and return) type
- * @return input arg
- */
- private static <T> T checkNotNull(final T in) {
- if (in == null) {
- throw new NullPointerException();
- }
- return in;
- }
-
- /**
- * Dependency-free string default.
- *
- * @param in to be filtered
- * @return input string or null
- */
- private static String defaultToEmpty(final Object in) {
- if (in == null) {
- return "";
- }
- return in.toString();
- }
-
- /**
- * Dependency-free string default.
- *
- * @param in to be filtered
- * @return input string or null
- */
- private static String defaultToUuid(final String in) {
- if (in == null) {
- return UUID.randomUUID().toString();
- }
- return in;
- }
-
- /**
- * Set target related logging variables in thread local data via MDC.
- *
- * @param targetEntity Target entity (an external/sub component, for ex. "sdc")
- * @param targetServiceName Target service name (name of API invoked on target)
- * @param invocationId The invocation ID
- */
- private void invokeContext(String targetEntity, String targetServiceName, String invocationId) {
- MDC.put(OnapLogConstants.Mdcs.TARGET_ENTITY, defaultToEmpty(targetEntity));
- MDC.put(OnapLogConstants.Mdcs.TARGET_SERVICE_NAME, defaultToEmpty(targetServiceName));
- MDC.put(OnapLogConstants.Mdcs.INVOCATIONID_OUT, invocationId);
- MDC.put(OnapLogConstants.Mdcs.INVOKE_TIMESTAMP, ZonedDateTime.now(ZoneOffset.UTC)
- .format(DateTimeFormatter.ofPattern(DATE_FORMATTER_ISO)));
- }
-
- /**
- * Clear target related logging variables in thread local data via MDC.
- */
- private void invokeReturnContext() {
- MDC.remove(OnapLogConstants.Mdcs.TARGET_ENTITY);
- MDC.remove(OnapLogConstants.Mdcs.TARGET_SERVICE_NAME);
- MDC.remove(OnapLogConstants.Mdcs.INVOCATIONID_OUT);
- MDC.remove(OnapLogConstants.Mdcs.INVOKE_TIMESTAMP);
- MDC.remove(OnapLogConstants.Mdcs.RESPONSE_STATUS_CODE);
- }
-
- private <T extends URLConnection> T invokeGeneric(final T con, String targetEntity,
- String targetServiceName) {
- final String invocationId = UUID.randomUUID().toString();
-
- // Set standard HTTP headers on (southbound request) builder.
- con.setRequestProperty(OnapLogConstants.Headers.REQUEST_ID,
- defaultToEmpty(MDC.get(OnapLogConstants.Mdcs.REQUEST_ID)));
- con.setRequestProperty(OnapLogConstants.Headers.INVOCATION_ID, invocationId);
- con.setRequestProperty(OnapLogConstants.Headers.PARTNER_NAME,
- defaultToEmpty(MDC.get(OnapLogConstants.Mdcs.PARTNER_NAME)));
-
- invokeContext(targetEntity, targetServiceName, invocationId);
-
- // Log INVOKE*, with the invocationID as the message body.
- // (We didn't really want this kind of behavior in the standard,
- // but is it worse than new, single-message MDC?)
- this.mlogger.info(OnapLogConstants.Markers.INVOKE, "");
- this.mlogger.info(OnapLogConstants.Markers.INVOKE_SYNCHRONOUS + "{" + invocationId + "}");
- return con;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/util/OnapLogConstants.java b/src/main/java/org/onap/policy/clamp/clds/util/OnapLogConstants.java
deleted file mode 100644
index 78b16f1a0..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/util/OnapLogConstants.java
+++ /dev/null
@@ -1,304 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.clds.util;
-
-import org.slf4j.Marker;
-import org.slf4j.MarkerFactory;
-
-/**
- * Constants for standard ONAP headers, MDCs, etc.
- */
-public final class OnapLogConstants {
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // Constructors.
- //
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
- /**
- * Hide and forbid construction.
- */
- private OnapLogConstants() {
- throw new UnsupportedOperationException();
- }
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // Inner classes.
- //
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
- /**
- * Marker constants.
- */
- public static final class Markers {
-
- /** Marker reporting invocation. */
- public static final Marker INVOKE = MarkerFactory.getMarker("INVOKE");
-
- /** Marker reporting invocation return. */
- public static final Marker INVOKE_RETURN = MarkerFactory.getMarker("INVOKE-RETURN");
-
- /** Marker reporting synchronous invocation. */
- public static final Marker INVOKE_SYNCHRONOUS = build("INVOKE", "SYNCHRONOUS");
-
- /** Marker reporting asynchronous invocation. */
- public static final Marker INVOKE_ASYNCHRONOUS = build("INVOKE", "ASYNCHRONOUS");
-
- /** Marker reporting entry into a component. */
- public static final Marker ENTRY = MarkerFactory.getMarker("ENTRY");
-
- /** Marker reporting exit from a component. */
- public static final Marker EXIT = MarkerFactory.getMarker("EXIT");
-
- /**
- * Build nested, detached marker.
- *
- * @param m1 top token.
- * @param m2 sub-token.
- * @return detached Marker.
- */
- private static Marker build(final String m1, final String m2) {
- final Marker marker = MarkerFactory.getDetachedMarker(m1);
- marker.add(MarkerFactory.getDetachedMarker(m2));
- return marker;
- }
-
- /**
- * Hide and forbid construction.
- */
- private Markers() {
- throw new UnsupportedOperationException();
- }
- }
-
- /**
- * MDC name constants.
- */
- public static final class Mdcs {
-
- // Tracing. ////////////////////////////////////////////////////////////
-
- /** MDC correlating messages for an invocation. */
- public static final String INVOCATION_ID = "InvocationID";
-
- public static final String SERVER_INVOCATION_ID = "ServerInvocationId";
-
- public static final String CLIENT_INVOCATION_ID = "ClientInvocationId";
-
- /** MDC correlating messages for a logical transaction. */
- public static final String REQUEST_ID = "RequestID";
-
- /** MDC recording calling partner name. */
- public static final String PARTNER_NAME = "PartnerName";
-
- /** MDC recording current service. */
- public static final String SERVICE_NAME = "ServiceName";
-
- /** MDC recording target service. */
- public static final String TARGET_SERVICE_NAME = "TargetServiceName";
-
- /** MDC recording InvocationID Out. */
- public static final String INVOCATIONID_OUT = "InvocationIDOut";
-
- /** MDC recording target entity. */
- public static final String TARGET_ENTITY = "TargetEntity";
-
- /** MDC recording target element. */
- public static final String TARGET_ELEMENT = "TargetElement";
-
- /** MDC recording current service instance id. */
- public static final String SERVICE_INSTANCE_ID = "ServiceInstanceID";
-
- /** MDC recording current instance id. */
- public static final String INSTANCE_UUID = "InstanceID";
-
- // Network. ////////////////////////////////////////////////////////////
-
- /** MDC recording caller address. */
- public static final String CLIENT_IP_ADDRESS = "ClientIPAddress";
-
- /** MDC recording server IP address. */
- public static final String SERVER_IP_ADDRESS = "ServerIPAddress";
-
- /** MDC recording server FQDN. */
- public static final String SERVER_FQDN = "ServerFQDN";
-
- /** MDC recording virtual server name. */
- public static final String VIRTUAL_SERVER_NAME = "VirtualServerName";
-
- /** MDC recording context name. */
- public static final String CONTEXT_NAME = "ContextName";
-
- /**
- * MDC recording timestamp at the start of the current request,
- * with the same scope as {@link #REQUEST_ID}.
- *
- * <p>
- * Open issues:
- * <ul>
- * <ul>
- * Easily confused with {@link #INVOKE_TIMESTAMP}.
- * </ul>
- * <ul>
- * No mechanism for propagation between components, e.g. via HTTP headers.
- * </ul>
- * <ul>
- * Whatever mechanism we define, it's going to be costly.
- * </ul>
- * </ul>
- * </p>
- */
- public static final String ENTRY_TIMESTAMP = "EntryTimestamp";
-
- /** MDC recording timestamp at the start of the current invocation. */
- public static final String INVOKE_TIMESTAMP = "InvokeTimestamp";
-
- /** MDC recording elapsed time. */
- public static final String ELAPSED_TIME = "ElapsedTime";
-
- /** MDC recording log timestamp. */
- public static final String LOG_TIMESTAMP = "LogTimestamp";
-
- // Outcomes. ///////////////////////////////////////////////////////////
-
- /** MDC reporting outcome code. */
- public static final String RESPONSE_CODE = "ResponseCode";
-
- /** MDC reporting outcome description. */
- public static final String RESPONSE_DESCRIPTION = "ResponseDesc";
-
- /** MDC reporting severity. */
- public static final String RESPONSE_SEVERITY = "Severity";
-
- /** MDC reporting response status code. */
- public static final String RESPONSE_STATUS_CODE = "StatusCode";
-
- /** MDC recording error code. */
- public static final String ERROR_CODE = "ErrorCode";
-
- /** MDC recording error description. */
- public static final String ERROR_DESC = "ErrorDesc";
-
- // Unsorted. ///////////////////////////////////////////////////////////
-
- /**
- * Hide and forbid construction.
- */
- private Mdcs() {
- throw new UnsupportedOperationException();
- }
- }
-
- /**
- * Header name constants.
- */
- public static final class Headers {
-
- /** HTTP <tt>X-ONAP-RequestID</tt> header. */
- public static final String REQUEST_ID = "X-ONAP-RequestID";
-
- /** HTTP <tt>X-InvocationID</tt> header. */
- public static final String INVOCATION_ID = "X-ONAP-InvocationID";
-
- /** HTTP <tt>X-ONAP-PartnerName</tt> header. */
- public static final String PARTNER_NAME = "X-ONAP-PartnerName";
-
- /**
- * Hide and forbid construction.
- */
- private Headers() {
- throw new UnsupportedOperationException();
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // Enums.
- //
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
- /**
- * Response success or not, for setting <tt>StatusCode</tt>.
- */
- public enum ResponseStatus {
-
- /** Success. */
- COMPLETE,
-
- /** Not. */
- ERROR,
-
- /** In Progress. */
- INPROGRESS
- }
-
- /**
- * Synchronous or asynchronous execution, for setting invocation marker.
- */
- public enum InvocationMode {
-
- /** Synchronous, blocking. */
- SYNCHRONOUS("SYNCHRONOUS", Markers.INVOKE_SYNCHRONOUS),
-
- /** Asynchronous, non-blocking. */
- ASYNCHRONOUS("ASYNCHRONOUS", Markers.INVOKE_ASYNCHRONOUS);
-
- /** Enum value. */
- private String enumValue;
-
- /** Corresponding marker. */
- private Marker marker;
-
- /**
- * Construct enum.
- *
- * @param enumValue enum value.
- * @param marker corresponding Marker.
- */
- InvocationMode(final String enumValue, final Marker marker) {
- this.enumValue = enumValue;
- this.marker = marker;
- }
-
- /**
- * Get Marker for enum.
- *
- * @return Marker.
- */
- public Marker getMarker() {
- return this.marker;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String toString() {
- return this.enumValue;
- }
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/clds/util/ResourceFileUtils.java b/src/main/java/org/onap/policy/clamp/clds/util/ResourceFileUtils.java
deleted file mode 100644
index cd4700277..000000000
--- a/src/main/java/org/onap/policy/clamp/clds/util/ResourceFileUtils.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.clds.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Scanner;
-
-/**
- * Utility methods supporting resources accesses.
- */
-public final class ResourceFileUtils {
-
- /**
- * getResourceAsStram supports the "file:" prefix as they use URL.
- * So here we want to eliminate classpath: prefix, so that this class can get
- * files from jar resource or file system.
- */
-
- private static final String CLASSPATH_PREFIX = "classpath:";
-
- /**
- * Private constructor to avoid creating instances of util class.
- */
- private ResourceFileUtils() {
- }
-
- /**
- * Method to access a file from the jar resource folder or file system.
- * Give the prefix "classpath:" so that it accesses the jar resource folder (default case)
- * or the prefix "file:" so that it accesses the file system.
- *
- * @param fileName The path of the resource (no prefix it will be a classpath access,
- * "classpath:/myfilename" or "file:/myfilename")
- * @return The file as inputStream
- */
- public static InputStream getResourceAsStream(String fileName) {
- InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(
- fileName.startsWith(CLASSPATH_PREFIX) ? fileName.replaceFirst(CLASSPATH_PREFIX, "") : fileName);
- if (is == null) {
- throw new IllegalArgumentException("Unable to find resource: " + fileName);
- }
- return is;
- }
-
- /**
- * Method to access a resource file as a string.
- * Give the prefix "classpath:" so that it accesses the jar resource folder (default case)
- * or the prefix "file:" so that it accesses the file system.
- *
- * @param fileName The path of the resource (no prefix it will be a classpath access,
- * "classpath:/myfilename" or "file:/myfilename")
- * @return The file as String
- * @throws IOException In case of failure to find the file.
- */
- public static String getResourceAsString(String fileName) throws IOException {
- try (InputStream is = getResourceAsStream(fileName)) {
- return streamToString(is);
- }
- }
-
- private static String streamToString(InputStream inputStream) {
- try (Scanner scanner = new Scanner(inputStream)) {
- Scanner delimitedScanner = scanner.useDelimiter("\\A");
- return delimitedScanner.hasNext() ? delimitedScanner.next() : "";
- }
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/configuration/ClampGsonDataFormat.java b/src/main/java/org/onap/policy/clamp/configuration/ClampGsonDataFormat.java
deleted file mode 100644
index e5f12163e..000000000
--- a/src/main/java/org/onap/policy/clamp/configuration/ClampGsonDataFormat.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.configuration;
-
-import com.google.gson.Gson;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.lang.reflect.Type;
-import java.nio.charset.StandardCharsets;
-import org.apache.camel.Exchange;
-import org.apache.camel.spi.DataFormat;
-import org.apache.camel.spi.DataFormatName;
-import org.apache.camel.support.ServiceSupport;
-import org.apache.camel.util.IOHelper;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-
-public class ClampGsonDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
- private Gson gson;
- private Class<?> unmarshalType;
- private Type unmarshalGenericType;
- private boolean contentTypeHeader = true;
-
- public ClampGsonDataFormat() {
- this(Object.class);
- }
-
- /**
- * Use the default Gson {@link Gson} and with a custom unmarshal type.
- *
- * @param unmarshalType the custom unmarshal type
- */
- public ClampGsonDataFormat(Class<?> unmarshalType) {
- this(null, unmarshalType);
- }
-
- /**
- * Use a custom Gson mapper and and unmarshal type.
- *
- * @param gson the custom mapper
- * @param unmarshalType the custom unmarshal type
- */
- public ClampGsonDataFormat(Gson gson, Class<?> unmarshalType) {
- this.gson = gson;
- this.unmarshalType = unmarshalType;
- }
-
- /**
- * Use the default Gson {@link Gson} and with a custom unmarshal generic type.
- *
- * @param unmarshalGenericType the custom unmarshal generic type
- */
- public ClampGsonDataFormat(Type unmarshalGenericType) {
- this(null, unmarshalGenericType);
- }
-
- /**
- * Use a custom Gson mapper and and unmarshal token type.
- *
- * @param gson the custom mapper
- * @param unmarshalGenericType the custom unmarshal generic type
- */
- public ClampGsonDataFormat(Gson gson, Type unmarshalGenericType) {
- this.gson = gson;
- this.unmarshalGenericType = unmarshalGenericType;
- }
-
- @Override
- public String getDataFormatName() {
- return "clamp-gson";
- }
-
- @Override
- public void marshal(final Exchange exchange, final Object graph, final OutputStream stream) throws Exception {
- try (final OutputStreamWriter osw = new OutputStreamWriter(stream, StandardCharsets.UTF_8);
- final BufferedWriter writer = IOHelper.buffered(osw)) {
- gson.toJson(graph, writer);
- }
-
- if (contentTypeHeader) {
- if (exchange.hasOut()) {
- exchange.getOut().setHeader(Exchange.CONTENT_TYPE, "application/json");
- } else {
- exchange.getIn().setHeader(Exchange.CONTENT_TYPE, "application/json");
- }
- }
- }
-
- @Override
- public Object unmarshal(final Exchange exchange, final InputStream stream) throws Exception {
- try (final InputStreamReader isr = new InputStreamReader(stream, StandardCharsets.UTF_8);
- final BufferedReader reader = IOHelper.buffered(isr)) {
- if (unmarshalGenericType == null) {
- return gson.fromJson(reader, unmarshalType);
- } else {
- return gson.fromJson(reader, unmarshalGenericType);
- }
- }
- }
-
- @Override
- protected void doStart() throws Exception {
- if (gson == null) {
- gson = JsonUtils.GSON_JPA_MODEL;
- }
- }
-
- @Override
- protected void doStop() throws Exception {
- // noop
- }
-
- // Properties
- // -------------------------------------------------------------------------
-
- public Class<?> getUnmarshalType() {
- return this.unmarshalType;
- }
-
- public void setUnmarshalType(Class<?> unmarshalType) {
- this.unmarshalType = unmarshalType;
- }
-
- public Type getUnmarshalGenericType() {
- return this.unmarshalGenericType;
- }
-
- public void setUnmarshalGenericType(Type unmarshalGenericType) {
- this.unmarshalGenericType = unmarshalGenericType;
- }
-
- public boolean isContentTypeHeader() {
- return contentTypeHeader;
- }
-
- /**
- * If enabled then Gson will set the Content-Type header to
- * <tt>application/json</tt> when marshalling.
- */
- public void setContentTypeHeader(boolean contentTypeHeader) {
- this.contentTypeHeader = contentTypeHeader;
- }
-
- public Gson getGson() {
- return this.gson;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/dao/model/gson/converter/InstantDeserializer.java b/src/main/java/org/onap/policy/clamp/dao/model/gson/converter/InstantDeserializer.java
deleted file mode 100644
index db024e07a..000000000
--- a/src/main/java/org/onap/policy/clamp/dao/model/gson/converter/InstantDeserializer.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.dao.model.gson.converter;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import java.lang.reflect.Type;
-import java.time.Instant;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.time.format.FormatStyle;
-import java.util.Locale;
-
-public class InstantDeserializer implements JsonDeserializer<Instant> {
-
- DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT).withLocale(Locale.US)
- .withZone(ZoneId.systemDefault());
-
- @Override
- public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
- return Instant.parse(json.getAsString());
-
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/dao/model/gson/converter/InstantSerializer.java b/src/main/java/org/onap/policy/clamp/dao/model/gson/converter/InstantSerializer.java
deleted file mode 100644
index 7208a472c..000000000
--- a/src/main/java/org/onap/policy/clamp/dao/model/gson/converter/InstantSerializer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.dao.model.gson.converter;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-import java.lang.reflect.Type;
-import java.time.Instant;
-import java.time.format.DateTimeFormatter;
-
-public class InstantSerializer implements JsonSerializer<Instant> {
-
- @Override
- public JsonElement serialize(Instant src, Type typeOfSrc, JsonSerializationContext context) {
- return new JsonPrimitive(DateTimeFormatter.ISO_INSTANT.format(src));
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/dao/model/jsontype/JsonStringSqlTypeDescriptor.java b/src/main/java/org/onap/policy/clamp/dao/model/jsontype/JsonStringSqlTypeDescriptor.java
deleted file mode 100644
index d3aaa32a9..000000000
--- a/src/main/java/org/onap/policy/clamp/dao/model/jsontype/JsonStringSqlTypeDescriptor.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.dao.model.jsontype;
-
-import java.sql.CallableStatement;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Types;
-import org.hibernate.type.descriptor.ValueBinder;
-import org.hibernate.type.descriptor.ValueExtractor;
-import org.hibernate.type.descriptor.WrapperOptions;
-import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
-import org.hibernate.type.descriptor.sql.BasicBinder;
-import org.hibernate.type.descriptor.sql.BasicExtractor;
-import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
-
-public class JsonStringSqlTypeDescriptor implements SqlTypeDescriptor {
-
- /**
- * The serial version ID.
- */
- private static final long serialVersionUID = 1103168570216921981L;
-
- public static final JsonStringSqlTypeDescriptor INSTANCE = new JsonStringSqlTypeDescriptor();
-
- @Override
- public int getSqlType() {
- return Types.OTHER;
- }
-
- @Override
- public boolean canBeRemapped() {
- return true;
- }
-
- @Override
- public <X> ValueBinder<X> getBinder(JavaTypeDescriptor<X> javaTypeDescriptor) {
- return new BasicBinder<X>(javaTypeDescriptor, this) {
- @Override
- protected void doBind(PreparedStatement st, X value, int index, WrapperOptions options)
- throws SQLException {
- st.setString(index, javaTypeDescriptor.unwrap(value, String.class, options));
- }
-
- @Override
- protected void doBind(CallableStatement st, X value, String name, WrapperOptions options)
- throws SQLException {
- st.setString(name, javaTypeDescriptor.unwrap(value, String.class, options));
- }
- };
- }
-
- @Override
- public <X> ValueExtractor<X> getExtractor(JavaTypeDescriptor<X> javaTypeDescriptor) {
- return new BasicExtractor<X>(javaTypeDescriptor, this) {
- @Override
- protected X doExtract(ResultSet rs, String name, WrapperOptions options) throws SQLException {
- return javaTypeDescriptor.wrap(extractJson(rs, name), options);
- }
-
- @Override
- protected X doExtract(CallableStatement statement, int index, WrapperOptions options) throws SQLException {
- return javaTypeDescriptor.wrap(extractJson(statement, index), options);
- }
-
- @Override
- protected X doExtract(CallableStatement statement, String name, WrapperOptions options)
- throws SQLException {
- return javaTypeDescriptor.wrap(extractJson(statement, name), options);
- }
- };
- }
-
- protected Object extractJson(ResultSet rs, String name) throws SQLException {
- return rs.getObject(name);
- }
-
- protected Object extractJson(CallableStatement statement, int index) throws SQLException {
- return statement.getObject(index);
- }
-
- protected Object extractJson(CallableStatement statement, String name) throws SQLException {
- return statement.getObject(name);
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/dao/model/jsontype/JsonTypeDescriptor.java b/src/main/java/org/onap/policy/clamp/dao/model/jsontype/JsonTypeDescriptor.java
deleted file mode 100644
index ed8464b14..000000000
--- a/src/main/java/org/onap/policy/clamp/dao/model/jsontype/JsonTypeDescriptor.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.dao.model.jsontype;
-
-import com.google.gson.JsonObject;
-import java.io.Serializable;
-import org.hibernate.type.descriptor.WrapperOptions;
-import org.hibernate.type.descriptor.java.AbstractTypeDescriptor;
-import org.hibernate.type.descriptor.java.ImmutableMutabilityPlan;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-
-public class JsonTypeDescriptor extends AbstractTypeDescriptor<JsonObject> {
-
- /**
- * The serial version ID.
- */
- private static final long serialVersionUID = -3439698221196089003L;
-
- public static final JsonTypeDescriptor INSTANCE = new JsonTypeDescriptor();
-
- /**
- * Creates an instance of JsonTypeDescriptor.
- */
- public JsonTypeDescriptor() {
- super(JsonObject.class, new ImmutableMutabilityPlan<JsonObject>() {
-
- /**
- * The serial version ID.
- */
- private static final long serialVersionUID = 1169396106518110214L;
-
- @Override
- public Serializable disassemble(JsonObject value) {
- return JsonUtils.GSON_JPA_MODEL.toJson(value);
- }
-
- @Override
- public JsonObject assemble(Serializable cached) {
- return JsonUtils.GSON_JPA_MODEL.fromJson((String) cached, JsonObject.class);
- }
-
- });
- }
-
- @Override
- public String toString(JsonObject value) {
- return JsonUtils.GSON_JPA_MODEL.toJson(value);
- }
-
- @Override
- public JsonObject fromString(String string) {
- return JsonUtils.GSON_JPA_MODEL.fromJson(string, JsonObject.class);
- }
-
- @Override
- public <X> X unwrap(JsonObject value, Class<X> type, WrapperOptions options) {
- if (value == null) {
- return null;
- }
-
- if (String.class.isAssignableFrom(type)) {
- return (X) toString(value);
- }
-
- if (JsonObject.class.isAssignableFrom(type)) {
- return (X) JsonUtils.GSON_JPA_MODEL.toJson(toString(value));
- }
- throw unknownUnwrap(type);
- }
-
- @Override
- public <X> JsonObject wrap(X value, WrapperOptions options) {
- if (value == null) {
- return null;
- }
-
- if (String.class.isInstance(value)) {
- return JsonUtils.GSON_JPA_MODEL.fromJson((String) value, JsonObject.class);
- }
-
- throw unknownWrap(value.getClass());
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/dao/model/jsontype/StringJsonUserType.java b/src/main/java/org/onap/policy/clamp/dao/model/jsontype/StringJsonUserType.java
deleted file mode 100644
index 4a7b65bb4..000000000
--- a/src/main/java/org/onap/policy/clamp/dao/model/jsontype/StringJsonUserType.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.dao.model.jsontype;
-
-import com.google.gson.JsonObject;
-import org.hibernate.type.AbstractSingleColumnStandardBasicType;
-import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
-import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
-
-public class StringJsonUserType extends AbstractSingleColumnStandardBasicType<JsonObject> {
-
- /**
- * The serial version ID.
- */
- private static final long serialVersionUID = -7929809808079327767L;
-
- public StringJsonUserType() {
- super(JsonStringSqlTypeDescriptor.INSTANCE, JsonTypeDescriptor.INSTANCE);
- }
-
- public StringJsonUserType(SqlTypeDescriptor sqlTypeDescriptor, JavaTypeDescriptor<JsonObject> javaTypeDescriptor) {
- super(sqlTypeDescriptor, javaTypeDescriptor);
- }
-
- @Override
- public String getName() {
- return "json";
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/flow/log/FlowLogOperation.java b/src/main/java/org/onap/policy/clamp/flow/log/FlowLogOperation.java
deleted file mode 100644
index d54b23b21..000000000
--- a/src/main/java/org/onap/policy/clamp/flow/log/FlowLogOperation.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.flow.log;
-
-import javax.servlet.http.HttpServletRequest;
-import org.apache.camel.Exchange;
-import org.onap.policy.clamp.clds.util.LoggingUtils;
-import org.onap.policy.clamp.clds.util.OnapLogConstants;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.slf4j.event.Level;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.stereotype.Component;
-
-/**
- * The Flow log operations.
- */
-@Component
-public class FlowLogOperation {
-
- protected static final Logger logger = LoggerFactory.getLogger(FlowLogOperation.class);
- private LoggingUtils util = new LoggingUtils(logger);
-
- @Autowired
- private HttpServletRequest request;
-
- /**
- * Generate the entry log.
- *
- * @param serviceDesc
- * The service description the loop name
- */
- public void startLog(Exchange exchange, String serviceDesc) {
- util.entering(request, serviceDesc);
- exchange.setProperty(OnapLogConstants.Headers.REQUEST_ID,
- util.getProperties(OnapLogConstants.Mdcs.REQUEST_ID));
- exchange.setProperty(OnapLogConstants.Headers.INVOCATION_ID,
- util.getProperties(OnapLogConstants.Mdcs.INVOCATION_ID));
- exchange.setProperty(OnapLogConstants.Headers.PARTNER_NAME,
- util.getProperties(OnapLogConstants.Mdcs.PARTNER_NAME));
- }
-
- /**
- * Generate the exiting log.
- */
- public void endLog() {
- util.exiting(HttpStatus.OK.value(), "Successful", Level.INFO,
- OnapLogConstants.ResponseStatus.COMPLETE);
- }
-
- /**
- * Generate the error exiting log.
- */
- public void errorLog() {
- util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.value(), "Failed", Level.INFO,
- OnapLogConstants.ResponseStatus.ERROR);
- }
-
- /**
- * Generate the error exiting log.
- */
- public void httpErrorLog() {
-
- }
-
- /**
- * Generate the invoke log.
- */
- public void invokeLog(String targetEntity, String targetServiceName) {
- util.invoke(targetEntity, targetServiceName);
- }
-
- /**
- * Generate the invoke return marker.
- */
- public void invokeReturnLog() {
- util.invokeReturn();
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/CsarInstaller.java b/src/main/java/org/onap/policy/clamp/loop/CsarInstaller.java
deleted file mode 100644
index f46f4227b..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/CsarInstaller.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019, 2021 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.policy.clamp.loop;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map.Entry;
-import org.json.simple.parser.ParseException;
-import org.onap.policy.clamp.clds.client.DcaeInventoryServices;
-import org.onap.policy.clamp.clds.exception.sdc.controller.BlueprintParserException;
-import org.onap.policy.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException;
-import org.onap.policy.clamp.clds.model.dcae.DcaeInventoryResponse;
-import org.onap.policy.clamp.clds.sdc.controller.installer.BlueprintArtifact;
-import org.onap.policy.clamp.clds.sdc.controller.installer.BlueprintMicroService;
-import org.onap.policy.clamp.clds.sdc.controller.installer.BlueprintParser;
-import org.onap.policy.clamp.clds.sdc.controller.installer.ChainGenerator;
-import org.onap.policy.clamp.clds.sdc.controller.installer.CsarHandler;
-import org.onap.policy.clamp.loop.cds.CdsDataInstaller;
-import org.onap.policy.clamp.loop.service.CsarServiceInstaller;
-import org.onap.policy.clamp.loop.service.Service;
-import org.onap.policy.clamp.loop.template.LoopElementModel;
-import org.onap.policy.clamp.loop.template.LoopTemplate;
-import org.onap.policy.clamp.loop.template.LoopTemplatesRepository;
-import org.onap.policy.clamp.loop.template.PolicyModel;
-import org.onap.policy.clamp.loop.template.PolicyModelsRepository;
-import org.onap.policy.clamp.policy.PolicyEngineServices;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Component;
-
-/**
- * This class will be instantiated by spring config, and used by Sdc Controller.
- * There is no state kept by the bean. It's used to deploy the csar/notification
- * received from SDC in DB.
- */
-@Component
-@Qualifier("csarInstaller")
-public class CsarInstaller {
-
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(CsarInstaller.class);
-
- @Autowired
- private PolicyModelsRepository policyModelsRepository;
-
- @Autowired
- private LoopTemplatesRepository loopTemplatesRepository;
-
- @Autowired
- private ChainGenerator chainGenerator;
-
- @Autowired
- private DcaeInventoryServices dcaeInventoryService;
-
- @Autowired
- private CsarServiceInstaller csarServiceInstaller;
-
- @Autowired
- private CdsDataInstaller cdsDataInstaller;
-
- @Autowired
- private PolicyEngineServices policyEngineServices;
-
- /**
- * Verify whether Csar is deployed.
- *
- * @param csar The Csar Handler
- * @return The flag indicating whether Csar is deployed
- * @throws SdcArtifactInstallerException The SdcArtifactInstallerException
- */
- public boolean isCsarAlreadyDeployed(CsarHandler csar) throws SdcArtifactInstallerException {
- boolean alreadyInstalled = csarServiceInstaller.isServiceAlreadyDeployed(csar);
-
- for (Entry<String, BlueprintArtifact> blueprint : csar.getMapOfBlueprints().entrySet()) {
- alreadyInstalled = alreadyInstalled
- && loopTemplatesRepository.existsById(LoopTemplate.generateLoopTemplateName(
- csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(),
- blueprint.getValue().getResourceAttached().getResourceInstanceName(),
- blueprint.getValue().getBlueprintArtifactName()));
- }
- return alreadyInstalled;
- }
-
- /**
- * Install the service and loop templates from the csar.
- *
- * @param csar The Csar Handler
- * @throws SdcArtifactInstallerException The SdcArtifactInstallerException
- * @throws InterruptedException The InterruptedException
- * @throws BlueprintParserException In case of issues with the blueprint
- * parsing
- */
- public void installTheCsar(CsarHandler csar)
- throws SdcArtifactInstallerException, InterruptedException, BlueprintParserException {
- logger.info("Installing the CSAR " + csar.getFilePath());
- Service associatedService = csarServiceInstaller.installTheService(csar);
- cdsDataInstaller.installCdsServiceProperties(csar, associatedService);
-
- installTheLoopTemplates(csar, associatedService);
- logger.info("Successfully installed the CSAR " + csar.getFilePath());
- }
-
- /**
- * Install the loop templates from the csar.
- *
- * @param csar The Csar Handler
- * @param service The service object that is related to the loop
- * @throws SdcArtifactInstallerException The SdcArtifactInstallerException
- * @throws InterruptedException The InterruptedException
- * @throws BlueprintParserException In case of issues with the blueprint
- * parsing
- */
- public void installTheLoopTemplates(CsarHandler csar, Service service)
- throws SdcArtifactInstallerException, InterruptedException, BlueprintParserException {
- try {
- logger.info("Installing the Loops");
- for (Entry<String, BlueprintArtifact> blueprint : csar.getMapOfBlueprints().entrySet()) {
- logger.info("Processing blueprint " + blueprint.getValue().getBlueprintArtifactName());
- loopTemplatesRepository.save(createLoopTemplateFromBlueprint(csar, blueprint.getValue(), service));
- }
- logger.info("Successfully installed the Loops ");
- } catch (IOException e) {
- throw new SdcArtifactInstallerException("Exception caught during the Loop installation in database", e);
- } catch (ParseException e) {
- throw new SdcArtifactInstallerException("Exception caught during the Dcae query to get ServiceTypeId", e);
- }
- }
-
- private LoopTemplate createLoopTemplateFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact,
- Service service)
- throws IOException, ParseException, InterruptedException, BlueprintParserException,
- SdcArtifactInstallerException {
- LoopTemplate newLoopTemplate = new LoopTemplate();
- newLoopTemplate.setBlueprint(blueprintArtifact.getDcaeBlueprint());
- newLoopTemplate.setName(LoopTemplate.generateLoopTemplateName(csar.getSdcNotification().getServiceName(),
- csar.getSdcNotification().getServiceVersion(),
- blueprintArtifact.getResourceAttached().getResourceInstanceName(),
- blueprintArtifact.getBlueprintArtifactName()));
- List<BlueprintMicroService> microServicesChain = chainGenerator
- .getChainOfMicroServices(BlueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint()));
- if (microServicesChain.isEmpty()) {
- microServicesChain = BlueprintParser.fallbackToOneMicroService();
- }
- newLoopTemplate.setModelService(service);
- newLoopTemplate.addLoopElementModels(createMicroServiceModels(blueprintArtifact, microServicesChain));
- newLoopTemplate.setMaximumInstancesAllowed(0);
- DcaeInventoryResponse dcaeResponse = queryDcaeToGetServiceTypeId(blueprintArtifact);
- newLoopTemplate.setDcaeBlueprintId(dcaeResponse.getTypeId());
- return newLoopTemplate;
- }
-
- private HashSet<LoopElementModel> createMicroServiceModels(BlueprintArtifact blueprintArtifact,
- List<BlueprintMicroService> microServicesChain)
- throws SdcArtifactInstallerException {
- HashSet<LoopElementModel> newSet = new HashSet<>();
- for (BlueprintMicroService microService : microServicesChain) {
- LoopElementModel loopElementModel =
- new LoopElementModel(microService.getModelType(), LoopElementModel.MICRO_SERVICE_TYPE,
- null);
- newSet.add(loopElementModel);
- PolicyModel newPolicyModel = policyEngineServices.createPolicyModelFromPolicyEngine(microService);
- if (newPolicyModel != null) {
- loopElementModel.addPolicyModel(newPolicyModel);
- } else {
- throw new SdcArtifactInstallerException(
- "Unable to find the policy specified in the blueprint " + blueprintArtifact
- .getBlueprintArtifactName() + ") on the Policy Engine:"
- + microService.getModelType() + "/" + microService.getModelVersion());
- }
- }
- return newSet;
- }
-
- /**
- * Get the service blueprint Id in the Dcae inventory using the SDC UUID.
- *
- * @return The DcaeInventoryResponse object containing the dcae values
- */
- private DcaeInventoryResponse queryDcaeToGetServiceTypeId(BlueprintArtifact blueprintArtifact)
- throws IOException, ParseException, InterruptedException {
- return dcaeInventoryService.getDcaeInformation(blueprintArtifact.getBlueprintArtifactName(),
- blueprintArtifact.getBlueprintInvariantServiceUuid(),
- blueprintArtifact.getResourceAttached().getResourceInvariantUUID());
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/Loop.java b/src/main/java/org/onap/policy/clamp/loop/Loop.java
deleted file mode 100644
index 99d8d1e69..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/Loop.java
+++ /dev/null
@@ -1,389 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop;
-
-import com.google.gson.JsonObject;
-import com.google.gson.annotations.Expose;
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
-import javax.persistence.Transient;
-import org.hibernate.annotations.SortNatural;
-import org.hibernate.annotations.Type;
-import org.hibernate.annotations.TypeDef;
-import org.hibernate.annotations.TypeDefs;
-import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
-import org.onap.policy.clamp.dao.model.jsontype.StringJsonUserType;
-import org.onap.policy.clamp.loop.common.AuditEntity;
-import org.onap.policy.clamp.loop.components.external.DcaeComponent;
-import org.onap.policy.clamp.loop.components.external.ExternalComponent;
-import org.onap.policy.clamp.loop.components.external.PolicyComponent;
-import org.onap.policy.clamp.loop.deploy.DcaeDeployParameters;
-import org.onap.policy.clamp.loop.log.LoopLog;
-import org.onap.policy.clamp.loop.service.Service;
-import org.onap.policy.clamp.loop.template.LoopElementModel;
-import org.onap.policy.clamp.loop.template.LoopTemplate;
-import org.onap.policy.clamp.policy.microservice.MicroServicePolicy;
-import org.onap.policy.clamp.policy.operational.OperationalPolicy;
-
-@Entity
-@Table(name = "loops")
-@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)})
-public class Loop extends AuditEntity implements Serializable {
-
- /**
- * The serial version id.
- */
- private static final long serialVersionUID = -286522707701388642L;
-
- @Id
- @Expose
- @Column(nullable = false, name = "name", unique = true)
- private String name;
-
- @Expose
- @Column(name = "dcae_deployment_id")
- private String dcaeDeploymentId;
-
- @Expose
- @Column(name = "dcae_deployment_status_url")
- private String dcaeDeploymentStatusUrl;
-
- @Expose
- @Type(type = "json")
- @Column(columnDefinition = "json", name = "global_properties_json")
- private JsonObject globalPropertiesJson;
-
- @Expose
- @ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
- @JoinColumn(name = "service_uuid")
- private Service modelService;
-
- @Expose
- @Column(nullable = false, name = "last_computed_state")
- @Enumerated(EnumType.STRING)
- private LoopState lastComputedState;
-
- @Expose
- @Transient
- private final Map<String, ExternalComponent> components = new HashMap<>();
-
- @Expose
- @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop", orphanRemoval = true)
- private Set<OperationalPolicy> operationalPolicies = new HashSet<>();
-
- @Expose
- @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.EAGER)
- @JoinTable(name = "loops_to_microservicepolicies", joinColumns = @JoinColumn(name = "loop_name"),
- inverseJoinColumns = @JoinColumn(name = "microservicepolicy_name"))
- private Set<MicroServicePolicy> microServicePolicies = new HashSet<>();
-
- @Expose
- @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop", orphanRemoval = true)
- @SortNatural
- private SortedSet<LoopLog> loopLogs = new TreeSet<>();
-
- @Expose
- @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.EAGER)
- @JoinColumn(name = "loop_template_name", nullable = false)
- private LoopTemplate loopTemplate;
-
- private void initializeExternalComponents() {
- this.addComponent(new PolicyComponent());
- this.addComponent(new DcaeComponent());
- }
-
- /**
- * Public constructor.
- */
- public Loop() {
- initializeExternalComponents();
- }
-
- /**
- * Constructor.
- */
- public Loop(String name) {
- this.name = name;
- this.lastComputedState = LoopState.DESIGN;
- this.globalPropertiesJson = new JsonObject();
- initializeExternalComponents();
- }
-
- /**
- * This constructor creates a loop from a loop template.
- *
- * @param name The loop name
- * @param loopTemplate The loop template from which a new loop instance must be created
- */
- public Loop(String name, LoopTemplate loopTemplate, ToscaConverterWithDictionarySupport toscaConverter) {
- this(name);
- this.setLoopTemplate(loopTemplate);
- this.setModelService(loopTemplate.getModelService());
- loopTemplate.getLoopElementModelsUsed().forEach(element -> {
- if (LoopElementModel.MICRO_SERVICE_TYPE.equals(element.getLoopElementModel().getLoopElementType())) {
- this.addMicroServicePolicy((MicroServicePolicy) element.getLoopElementModel()
- .createPolicyInstance(this, toscaConverter));
- } else if (LoopElementModel.OPERATIONAL_POLICY_TYPE
- .equals(element.getLoopElementModel().getLoopElementType())) {
- this.addOperationalPolicy((OperationalPolicy) element.getLoopElementModel()
- .createPolicyInstance(this, toscaConverter));
- }
- });
- this.setGlobalPropertiesJson(DcaeDeployParameters.getDcaeDeploymentParametersInJson(this));
- }
-
- public String getName() {
- return name;
- }
-
- void setName(String name) {
- this.name = name;
- }
-
- public String getDcaeDeploymentId() {
- return dcaeDeploymentId;
- }
-
- void setDcaeDeploymentId(String dcaeDeploymentId) {
- this.dcaeDeploymentId = dcaeDeploymentId;
- }
-
- public String getDcaeDeploymentStatusUrl() {
- return dcaeDeploymentStatusUrl;
- }
-
- void setDcaeDeploymentStatusUrl(String dcaeDeploymentStatusUrl) {
- this.dcaeDeploymentStatusUrl = dcaeDeploymentStatusUrl;
- }
-
- public LoopState getLastComputedState() {
- return lastComputedState;
- }
-
- void setLastComputedState(LoopState lastComputedState) {
- this.lastComputedState = lastComputedState;
- }
-
- public Set<OperationalPolicy> getOperationalPolicies() {
- return operationalPolicies;
- }
-
- void setOperationalPolicies(Set<OperationalPolicy> operationalPolicies) {
- this.operationalPolicies = operationalPolicies;
- }
-
- public Set<MicroServicePolicy> getMicroServicePolicies() {
- return microServicePolicies;
- }
-
- void setMicroServicePolicies(Set<MicroServicePolicy> microServicePolicies) {
- this.microServicePolicies = microServicePolicies;
- }
-
- public JsonObject getGlobalPropertiesJson() {
- return globalPropertiesJson;
- }
-
- void setGlobalPropertiesJson(JsonObject globalPropertiesJson) {
- this.globalPropertiesJson = globalPropertiesJson;
- }
-
- public Set<LoopLog> getLoopLogs() {
- return loopLogs;
- }
-
- void setLoopLogs(SortedSet<LoopLog> loopLogs) {
- this.loopLogs = loopLogs;
- }
-
- /**
- * This method adds an operational policy to the loop.
- *
- * @param opPolicy the operationalPolicy to add
- */
- public void addOperationalPolicy(OperationalPolicy opPolicy) {
- operationalPolicies.add(opPolicy);
- opPolicy.setLoop(this);
- }
-
- /**
- * This method removes an operational policy to the loop.
- *
- * @param opPolicy the operationalPolicy to add
- */
- public void removeOperationalPolicy(OperationalPolicy opPolicy) {
- operationalPolicies.remove(opPolicy);
- }
-
- /**
- * This method adds an micro service policy to the loop.
- *
- * @param microServicePolicy the micro service to add
- */
- public void addMicroServicePolicy(MicroServicePolicy microServicePolicy) {
- microServicePolicies.add(microServicePolicy);
- microServicePolicy.getUsedByLoops().add(this);
- }
-
- public void addLog(LoopLog log) {
- log.setLoop(this);
- this.loopLogs.add(log);
- }
-
- public Service getModelService() {
- return modelService;
- }
-
- void setModelService(Service modelService) {
- this.modelService = modelService;
- }
-
- public Map<String, ExternalComponent> getComponents() {
- refreshDcaeComponents();
- return components;
- }
-
- public ExternalComponent getComponent(String componentName) {
- refreshDcaeComponents();
- return this.components.get(componentName);
- }
-
- public void addComponent(ExternalComponent component) {
- this.components.put(component.getComponentName(), component);
- }
-
- public LoopTemplate getLoopTemplate() {
- return loopTemplate;
- }
-
- public void setLoopTemplate(LoopTemplate loopTemplate) {
- this.loopTemplate = loopTemplate;
- }
-
- private void refreshDcaeComponents() {
- if (!this.loopTemplate.getUniqueBlueprint()) {
- this.components.remove("DCAE");
- for (MicroServicePolicy policy : this.microServicePolicies) {
- if (!this.components.containsKey("DCAE_" + policy.getName())) {
- this.addComponent(new DcaeComponent(policy.getName()));
- }
- }
- }
- }
-
- /**
- * Return the operationalPolicy object with the opPolicyName.
- *
- * @param opPolicyName The operationalPolicy name
- * @return The OperationalPolicy object found in loop object
- */
- public OperationalPolicy getOperationalPolicy(String opPolicyName) {
- for (OperationalPolicy operationalPolicy : this.getOperationalPolicies()) {
- if (operationalPolicy.getName().equals(opPolicyName)) {
- return operationalPolicy;
- }
- }
- return null;
- }
-
- /**
- * Return the microServicePolicy object with the msPolicyName.
- *
- * @param msPolicyName The microServicePolicy name
- * @return The MicroServicePolicy object found in loop object
- */
- public MicroServicePolicy getMicroServicePolicy(String msPolicyName) {
- for (MicroServicePolicy microServicePolicy : this.getMicroServicePolicies()) {
- if (microServicePolicy.getName().equals(msPolicyName)) {
- return microServicePolicy;
- }
- }
- return null;
- }
-
- /**
- * Generate the loop name.
- *
- * @param serviceName The service name
- * @param serviceVersion The service version
- * @param resourceName The resource name
- * @param blueprintFileName The blueprint file name
- * @return The generated loop name
- */
- public static String generateLoopName(String serviceName, String serviceVersion, String resourceName,
- String blueprintFileName) {
- StringBuilder buffer = new StringBuilder("LOOP_").append(serviceName).append("_v").append(serviceVersion)
- .append("_").append(resourceName).append("_").append(blueprintFileName.replaceAll(".yaml", ""));
- return buffer.toString().replace('.', '_').replaceAll(" ", "");
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- Loop other = (Loop) obj;
- if (name == null) {
- if (other.name != null) {
- return false;
- }
- } else if (!name.equals(other.name)) {
- return false;
- }
- return true;
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/LoopController.java b/src/main/java/org/onap/policy/clamp/loop/LoopController.java
deleted file mode 100644
index 98459c909..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/LoopController.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 Nokia 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.policy.clamp.loop;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import com.google.gson.reflect.TypeToken;
-import java.io.IOException;
-import java.lang.reflect.Type;
-import java.util.List;
-import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.onap.policy.clamp.policy.microservice.MicroServicePolicy;
-import org.onap.policy.clamp.policy.microservice.MicroServicePolicyService;
-import org.onap.policy.clamp.policy.operational.OperationalPolicy;
-import org.onap.policy.clamp.policy.operational.OperationalPolicyService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-
-@Controller
-public class LoopController {
-
- private final LoopService loopService;
-
- private final ToscaConverterWithDictionarySupport toscaConverter;
-
- private final OperationalPolicyService operationalPolicyService;
-
- private final MicroServicePolicyService microServicePolicyService;
-
- private static final Type OPERATIONAL_POLICY_TYPE = new TypeToken<List<OperationalPolicy>>() {
- }.getType();
-
- private static final Type MICROSERVICE_POLICY_TYPE = new TypeToken<List<MicroServicePolicy>>() {
- }.getType();
-
-
- /**
- * Constructor.
- *
- * @param loopService loopService
- * @param operationalPolicyService operationalPolicyService
- * @param microServicePolicyService microServicePolicyService
- * @param toscaConverter toscaConverter
- */
- @Autowired
- public LoopController(LoopService loopService, OperationalPolicyService operationalPolicyService,
- MicroServicePolicyService microServicePolicyService,
- ToscaConverterWithDictionarySupport toscaConverter) {
- this.loopService = loopService;
- this.toscaConverter = toscaConverter;
- this.operationalPolicyService = operationalPolicyService;
- this.microServicePolicyService = microServicePolicyService;
- }
-
- public Loop createLoop(String loopName, String templateName) {
- return loopService.createLoopFromTemplate(loopName, templateName);
- }
-
- public List<String> getLoopNames() {
- return loopService.getClosedLoopNames();
- }
-
- public Loop getLoop(String loopName) {
- return loopService.getLoop(loopName);
- }
-
- /**
- * Update the Operational Policy properties.
- *
- * @param loopName The loop name
- * @param operationalPoliciesJson The new Operational Policy properties
- * @return The updated loop
- */
- public Loop updateOperationalPolicies(String loopName, JsonArray operationalPoliciesJson) {
- List<OperationalPolicy> operationalPolicies = JsonUtils.GSON_JPA_MODEL.fromJson(operationalPoliciesJson,
- OPERATIONAL_POLICY_TYPE);
- return loopService.updateAndSaveOperationalPolicies(loopName, operationalPolicies);
- }
-
- /**
- * Update the whole array of MicroService policies properties.
- *
- * @param loopName The loop name
- * @param microServicePoliciesJson The array of all MicroService policies
- * properties
- * @return The updated loop
- */
- public Loop updateMicroservicePolicies(String loopName, JsonArray microServicePoliciesJson) {
- List<MicroServicePolicy> microservicePolicies = JsonUtils.GSON_JPA_MODEL.fromJson(microServicePoliciesJson,
- MICROSERVICE_POLICY_TYPE);
- return loopService.updateAndSaveMicroservicePolicies(loopName, microservicePolicies);
- }
-
- /**
- * Update the global properties.
- *
- * @param loopName The loop name
- * @param globalProperties The updated global properties
- * @return The updated loop
- */
- public Loop updateGlobalPropertiesJson(String loopName, JsonObject globalProperties) {
- return loopService.updateAndSaveGlobalPropertiesJson(loopName, globalProperties);
- }
-
- /**
- * This method add an operational policy to a loop instance.
- *
- * @param loopName The loop name
- * @param policyType The policy model type
- * @param policyVersion The policy model version
- * @return The loop modified
- */
- public Loop addOperationalPolicy(String loopName, String policyType, String policyVersion) throws IOException {
- return loopService.addOperationalPolicy(loopName, policyType, policyVersion);
- }
-
- /**
- * This method removes an operational policy from a loop instance.
- *
- * @param loopName The loop name
- * @param policyType The policy model type
- * @param policyVersion The policy model version
- * @return The loop modified
- */
- public Loop removeOperationalPolicy(String loopName, String policyType, String policyVersion) {
- return loopService.removeOperationalPolicy(loopName, policyType, policyVersion);
- }
-
- /**
- * This method deletes the loop.
- *
- * @param loopName The loop Name
- */
- public void deleteLoop(String loopName) {
- loopService.deleteLoop(loopName);
- }
-
- /**
- * Update one MicroService policy properties.
- *
- * @param loopName The loop name
- * @param newMicroservicePolicy The new MicroService policy properties
- * @return The updated MicroService policy
- */
- public MicroServicePolicy updateMicroservicePolicy(String loopName, MicroServicePolicy newMicroservicePolicy) {
- return loopService.updateMicroservicePolicy(loopName, newMicroservicePolicy);
- }
-
- /**
- * Refresh the Operational Policy Json representation of the loop.
- *
- * @param loop The loop
- * @param operationalPolicyName The operational policy name that needs a refresh
- * @return The loop object
- */
- public Loop refreshOperationalPolicyJsonRepresentation(Loop loop, String operationalPolicyName) {
- for (OperationalPolicy operationalPolicy : loop.getOperationalPolicies()) {
- if (operationalPolicy.getName().equals(operationalPolicyName)) {
- this.operationalPolicyService
- .refreshOperationalPolicyJsonRepresentation(operationalPolicy, toscaConverter);
- }
- }
- return loop;
- }
-
- /**
- * Refresh the Config Policy Json representation of the loop.
- *
- * @param loop The loop
- * @param microServicePolicyName The microservice policy name that needs a refresh
- * @return The loop object
- */
- public Loop refreshMicroServicePolicyJsonRepresentation(Loop loop, String microServicePolicyName) {
- for (MicroServicePolicy microServicePolicy : loop.getMicroServicePolicies()) {
- if (microServicePolicy.getName().equals(microServicePolicyName)) {
- this.microServicePolicyService
- .refreshMicroServicePolicyJsonRepresentation(microServicePolicy, toscaConverter, loop);
- }
- }
- return loop;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/LoopService.java b/src/main/java/org/onap/policy/clamp/loop/LoopService.java
deleted file mode 100644
index 975011669..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/LoopService.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 Nokia 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.policy.clamp.loop;
-
-import com.google.gson.JsonObject;
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-import javax.persistence.EntityNotFoundException;
-import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
-import org.onap.policy.clamp.loop.template.LoopTemplatesService;
-import org.onap.policy.clamp.loop.template.PolicyModel;
-import org.onap.policy.clamp.loop.template.PolicyModelsService;
-import org.onap.policy.clamp.policy.microservice.MicroServicePolicy;
-import org.onap.policy.clamp.policy.microservice.MicroServicePolicyService;
-import org.onap.policy.clamp.policy.operational.OperationalPolicy;
-import org.onap.policy.clamp.policy.operational.OperationalPolicyService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class LoopService {
-
- @Autowired
- private LoopsRepository loopsRepository;
-
- @Autowired
- private MicroServicePolicyService microservicePolicyService;
-
- @Autowired
- private OperationalPolicyService operationalPolicyService;
-
- @Autowired
- private PolicyModelsService policyModelsService;
-
- @Autowired
- private LoopTemplatesService loopTemplateService;
-
- @Autowired
- private ToscaConverterWithDictionarySupport toscaConverter;
-
- Loop saveOrUpdateLoop(Loop loop) {
- return loopsRepository.save(loop);
- }
-
- List<String> getClosedLoopNames() {
- return loopsRepository.getAllLoopNames();
- }
-
- public Loop getLoop(String loopName) {
- return loopsRepository.findById(loopName).orElse(null);
- }
-
- public void deleteLoop(String loopName) {
- loopsRepository.deleteById(loopName);
- }
-
- /**
- * Creates a Loop Instance from Loop Template Name.
- *
- * @param loopName Name of the Loop to be created
- * @param templateName Loop Template to used for Loop
- * @return Loop Instance
- */
- public Loop createLoopFromTemplate(String loopName, String templateName) {
- return loopsRepository
- .save(new Loop(loopName, loopTemplateService.getLoopTemplate(templateName), toscaConverter));
- }
-
- /**
- * This method is used to refresh the DCAE deployment status fields.
- *
- * @param loop The loop instance to be modified
- * @param deploymentId The deployment ID as returned by DCAE
- * @param deploymentUrl The Deployment URL as returned by DCAE
- */
- public void updateDcaeDeploymentFields(Loop loop, String deploymentId, String deploymentUrl) {
- loop.setDcaeDeploymentId(deploymentId);
- loop.setDcaeDeploymentStatusUrl(deploymentUrl);
- loopsRepository.saveAndFlush(loop);
- }
-
- public void updateLoopState(Loop loop, String newState) {
- loop.setLastComputedState(LoopState.valueOf(newState));
- loopsRepository.save(loop);
- }
-
- /**
- * This method add an operational policy to a loop instance.
- * This creates an operational policy from the policy model info and not the loop element model
- *
- * @param loopName The loop name
- * @param policyType The policy model type
- * @param policyVersion The policy model version
- * @return The loop modified
- */
- Loop addOperationalPolicy(String loopName, String policyType, String policyVersion) throws IOException {
- Loop loop = getLoop(loopName);
- PolicyModel policyModel = policyModelsService.getPolicyModel(policyType, policyVersion);
- Set<OperationalPolicy> opPolicySet = loop.getOperationalPolicies();
- for (OperationalPolicy opPolicy : opPolicySet) {
- if (opPolicy.getPolicyModel().equals(policyModel)) {
- throw new IllegalArgumentException(
- "This type of Operational Policy is already added to the loop. Please choose another one.");
- }
- }
- if (policyModel == null) {
- return null;
- }
- loop.addOperationalPolicy(
- new OperationalPolicy(loop, loop.getModelService(), policyModel, toscaConverter));
- return loopsRepository.saveAndFlush(loop);
- }
-
- /**
- * This method remove an operational policy to a loop instance.
- *
- * @param loopName The loop name
- * @param policyType The policy model type
- * @param policyVersion The policy model version
- * @return The loop modified
- */
- Loop removeOperationalPolicy(String loopName, String policyType, String policyVersion) {
- Loop loop = getLoop(loopName);
- PolicyModel policyModel = policyModelsService.getPolicyModel(policyType, policyVersion);
- if (policyModel == null) {
- return null;
- }
- for (OperationalPolicy opPolicy : loop.getOperationalPolicies()) {
- if (opPolicy.getPolicyModel().getPolicyModelType().equals(policyType)
- && opPolicy.getPolicyModel().getVersion().equals(policyVersion)) {
- loop.removeOperationalPolicy(opPolicy);
- break;
- }
- }
- return loopsRepository.saveAndFlush(loop);
- }
-
- Loop updateAndSaveOperationalPolicies(String loopName, List<OperationalPolicy> newOperationalPolicies) {
- Loop loop = findClosedLoopByName(loopName);
- Set<OperationalPolicy> newPolicies = operationalPolicyService.updatePolicies(loop, newOperationalPolicies);
- loop.setOperationalPolicies(newPolicies);
- return loopsRepository.save(loop);
- }
-
- Loop updateAndSaveMicroservicePolicies(String loopName, List<MicroServicePolicy> newMicroservicePolicies) {
- Loop loop = findClosedLoopByName(loopName);
- Set<MicroServicePolicy> newPolicies = microservicePolicyService.updatePolicies(loop, newMicroservicePolicies);
- loop.setMicroServicePolicies(newPolicies);
- return loopsRepository.save(loop);
- }
-
- Loop updateAndSaveGlobalPropertiesJson(String loopName, JsonObject newGlobalPropertiesJson) {
- Loop loop = findClosedLoopByName(loopName);
- loop.setGlobalPropertiesJson(newGlobalPropertiesJson);
- return loopsRepository.save(loop);
- }
-
- MicroServicePolicy updateMicroservicePolicy(String loopName, MicroServicePolicy newMicroservicePolicy) {
- Loop loop = findClosedLoopByName(loopName);
- return microservicePolicyService.getAndUpdateMicroServicePolicy(loop, newMicroservicePolicy);
- }
-
- private Loop findClosedLoopByName(String loopName) {
- return loopsRepository.findById(loopName)
- .orElseThrow(() -> new EntityNotFoundException("Couldn't find closed loop named: " + loopName));
- }
-}
-
diff --git a/src/main/java/org/onap/policy/clamp/loop/LoopState.java b/src/main/java/org/onap/policy/clamp/loop/LoopState.java
deleted file mode 100644
index 48d4487f0..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/LoopState.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop;
-
-public enum LoopState {
- DESIGN, SUBMITTED, DEPLOYED, RUNNING, STOPPED, IN_ERROR, WAITING;
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/LoopsRepository.java b/src/main/java/org/onap/policy/clamp/loop/LoopsRepository.java
deleted file mode 100644
index 7b92ed584..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/LoopsRepository.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop;
-
-import java.util.List;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface LoopsRepository extends JpaRepository<Loop, String> {
-
- @Query("SELECT loop.name FROM Loop as loop")
- List<String> getAllLoopNames();
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/cds/CdsDataInstaller.java b/src/main/java/org/onap/policy/clamp/loop/cds/CdsDataInstaller.java
deleted file mode 100644
index 68adb3887..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/cds/CdsDataInstaller.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights
- * reserved.
- * * Modifications Copyright (C) 2020 Huawei Technologies Co., Ltd.
- * ================================================================================
- * 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.policy.clamp.loop.cds;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonObject;
-import org.onap.policy.clamp.clds.client.CdsServices;
-import org.onap.policy.clamp.clds.model.cds.CdsBpWorkFlowListResponse;
-import org.onap.policy.clamp.clds.sdc.controller.installer.CsarHandler;
-import org.onap.policy.clamp.loop.service.Service;
-import org.onap.policy.clamp.loop.service.ServicesRepository;
-import org.onap.sdc.tosca.parser.enums.SdcTypes;
-import org.onap.sdc.toscaparser.api.NodeTemplate;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * This class installs the cds data in the service model properties.
- * This can be refreshed later on by clicking on the button refresh, when recomputing the json schema.
- */
-@Component
-public class CdsDataInstaller {
-
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(CdsDataInstaller.class);
-
- @Autowired
- CdsServices cdsServices;
-
- @Autowired
- ServicesRepository serviceRepository;
-
- public static final String CONTROLLER_PROPERTIES = "controllerProperties";
- public static final String SDNC_MODEL_NAME = "sdnc_model_name";
- public static final String SDNC_MODEL_VERSION = "sdnc_model_version";
-
- /**
- * This method installs the service model properties for CDS in the service object given in input.
- *
- * @param csar The csar from sdc
- * @param service the service object already provisioned with csar data
- */
- @Transactional(propagation = Propagation.REQUIRES_NEW)
- public Service installCdsServiceProperties(CsarHandler csar, Service service) {
- // Iterate on all types defined in the tosca lib
- for (SdcTypes type : SdcTypes.values()) {
- JsonObject resourcesPropByType = service.getResourceByType(type.getValue());
- // For each type, get the metadata of each nodetemplate
- for (NodeTemplate nodeTemplate : csar.getSdcCsarHelper().getServiceNodeTemplateBySdcType(type)) {
- // get cds artifact information and save in resources Prop
- if (SdcTypes.PNF == type || SdcTypes.VF == type) {
- JsonObject controllerProperties = createCdsArtifactProperties(
- String.valueOf(nodeTemplate.getPropertyValue(SDNC_MODEL_NAME)),
- String.valueOf(nodeTemplate.getPropertyValue(SDNC_MODEL_VERSION)));
- if (controllerProperties != null) {
- resourcesPropByType.getAsJsonObject(nodeTemplate.getName())
- .add(CONTROLLER_PROPERTIES, controllerProperties);
- logger.info("Successfully installed the CDS data in Service");
- } else {
- logger.warn("Skipping CDS data installation in Service, as sdnc_model_name and "
- + "sdnc_model_version are not provided in the CSAR");
- }
- }
- }
- }
- serviceRepository.save(service);
-
- return service;
- }
-
- /**
- * This method updates the service model properties for CDS in the service object given in input.
- *
- * @param service the service object already provisioned with csar data
- */
- @Transactional(propagation = Propagation.REQUIRES_NEW)
- public Service updateCdsServiceProperties(Service service) {
- // Iterate on all types defined in the tosca lib
- for (SdcTypes type : SdcTypes.values()) {
- JsonObject resourcesPropByType = service.getResourceByType(type.getValue());
- for (String resourceName : resourcesPropByType.keySet()) {
- // get cds artifact information and save in resources Prop
- if ((SdcTypes.PNF == type || SdcTypes.VF == type) && resourcesPropByType.getAsJsonObject(resourceName)
- .getAsJsonObject(CONTROLLER_PROPERTIES) != null) {
- JsonObject controllerProperties =
- createCdsArtifactProperties(resourcesPropByType.getAsJsonObject(resourceName)
- .getAsJsonObject(CONTROLLER_PROPERTIES).get(SDNC_MODEL_NAME)
- .getAsString(),
- resourcesPropByType.getAsJsonObject(resourceName)
- .getAsJsonObject(CONTROLLER_PROPERTIES).get(SDNC_MODEL_VERSION)
- .getAsString());
- if (controllerProperties != null) {
- resourcesPropByType.getAsJsonObject(resourceName)
- .add(CONTROLLER_PROPERTIES, controllerProperties);
- }
- }
- }
- }
- serviceRepository.save(service);
- logger.info("Successfully updated the CDS data in Service");
- return service;
- }
-
- /**
- * Retrieve CDS artifacts information from node template and save in resource object.
- *
- * @param sdncModelName sdnc model name
- * @param sdncModelVersion sdnc model version
- * @return Returns CDS artifacts information
- */
- private JsonObject createCdsArtifactProperties(String sdncModelName, String sdncModelVersion) {
- if (sdncModelName != null && !"null".equals(sdncModelName)
- && sdncModelVersion != null && !"null".equals(sdncModelVersion)) {
- JsonObject controllerProperties = new JsonObject();
- controllerProperties.addProperty(SDNC_MODEL_NAME, sdncModelName);
- controllerProperties.addProperty(SDNC_MODEL_VERSION, sdncModelVersion);
-
- CdsBpWorkFlowListResponse response =
- queryCdsToGetWorkFlowList(sdncModelName, sdncModelVersion);
- if (response == null) {
- return controllerProperties;
- }
-
- JsonObject workFlowProps = new JsonObject();
- for (String workFlow : response.getWorkflows()) {
- logger.info("Found CDS workflow " + workFlow + " for model name " + sdncModelName + " and version "
- + sdncModelVersion);
- JsonObject inputs = queryCdsToGetWorkFlowInputProperties(response.getBlueprintName(),
- response.getVersion(), workFlow);
- workFlowProps.add(workFlow, inputs);
- }
-
- controllerProperties.add("workflows", workFlowProps);
- return controllerProperties;
- }
- return null;
- }
-
-
- private CdsBpWorkFlowListResponse queryCdsToGetWorkFlowList(String artifactName, String artifactVersion) {
- return cdsServices.getBlueprintWorkflowList(artifactName, artifactVersion);
- }
-
- private JsonObject queryCdsToGetWorkFlowInputProperties(String artifactName, String artifactVersion,
- String workFlow) {
- return cdsServices.getWorkflowInputProperties(artifactName, artifactVersion, workFlow);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/common/AuditEntity.java b/src/main/java/org/onap/policy/clamp/loop/common/AuditEntity.java
deleted file mode 100644
index 92c795e90..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/common/AuditEntity.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.loop.common;
-
-import com.google.gson.annotations.Expose;
-import java.time.Instant;
-import java.time.temporal.ChronoUnit;
-import javax.persistence.Column;
-import javax.persistence.EntityListeners;
-import javax.persistence.MappedSuperclass;
-import org.springframework.data.annotation.CreatedBy;
-import org.springframework.data.annotation.CreatedDate;
-import org.springframework.data.annotation.LastModifiedBy;
-import org.springframework.data.annotation.LastModifiedDate;
-import org.springframework.data.jpa.domain.support.AuditingEntityListener;
-
-/**
- * This class is the parent of the hibernate entities requiring to be audited.
- */
-@MappedSuperclass
-@EntityListeners(AuditingEntityListener.class)
-public class AuditEntity {
-
- @Expose
- @CreatedDate
- @Column(name = "created_timestamp", nullable = false, updatable = false)
- private Instant createdDate;
-
- @Expose
- @LastModifiedDate
- @Column(name = "updated_timestamp", nullable = false)
- private Instant updatedDate;
-
- @Expose
- @LastModifiedBy
- @Column(name = "updated_by")
- private String updatedBy;
-
- @Expose
- @CreatedBy
- @Column(name = "created_by")
- private String createdBy;
-
- public Instant getCreatedDate() {
- return createdDate;
- }
-
- /**
- * createdDate setter.
- *
- * @param createdDate The created Date object
- */
- public void setCreatedDate(Instant createdDate) {
- if (createdDate != null) {
- this.createdDate = createdDate.truncatedTo(ChronoUnit.SECONDS);
- } else {
- this.createdDate = null;
- }
- }
-
- /**
- * updatedDate getter.
- *
- * @return the updatedDate
- */
- public Instant getUpdatedDate() {
- return updatedDate;
- }
-
- /**
- * updatedDate setter.
- *
- * @param updatedDate updatedDate to set
- */
- public void setUpdatedDate(Instant updatedDate) {
- if (updatedDate != null) {
- this.updatedDate = updatedDate.truncatedTo(ChronoUnit.SECONDS);
- } else {
- this.updatedDate = null;
- }
- }
-
- /**
- * updatedBy getter.
- *
- * @return the updatedBy
- */
- public String getUpdatedBy() {
- return updatedBy;
- }
-
- /**
- * updatedBy setter.
- *
- * @param updatedBy the updatedBy
- */
- public void setUpdatedBy(String updatedBy) {
- this.updatedBy = updatedBy;
- }
-
- /**
- * createdBy getter.
- *
- * @return the createdBy
- */
- public String getCreatedBy() {
- return createdBy;
- }
-
- /**
- * createdBy setter.
- *
- * @param createdBy the createdBy to set
- */
- public void setCreatedBy(String createdBy) {
- this.createdBy = createdBy;
- }
-
- /**
- * Empty constructor.
- */
- public AuditEntity() {
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/components/external/DcaeComponent.java b/src/main/java/org/onap/policy/clamp/loop/components/external/DcaeComponent.java
deleted file mode 100644
index 1b36aab55..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/components/external/DcaeComponent.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.components.external;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonObject;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.UUID;
-import javax.persistence.Transient;
-import org.apache.camel.Exchange;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
-import org.json.simple.parser.ParseException;
-import org.onap.policy.clamp.clds.model.dcae.DcaeInventoryResponse;
-import org.onap.policy.clamp.clds.model.dcae.DcaeOperationStatusResponse;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.onap.policy.clamp.loop.Loop;
-import org.onap.policy.clamp.policy.microservice.MicroServicePolicy;
-
-public class DcaeComponent extends ExternalComponent {
-
- @Transient
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(DcaeComponent.class);
-
- private static final String DCAE_DEPLOYMENT_PREFIX = "CLAMP_";
- private static final String DEPLOYMENT_PARAMETER = "dcaeDeployParameters";
- private static final String DCAE_SERVICETYPE_ID = "serviceTypeId";
- private static final String DCAE_INPUTS = "inputs";
- public static final String UNIQUE_BLUEPRINT_PARAMETERS = "uniqueBlueprintParameters";
-
- private String name;
-
- public static final ExternalComponentState BLUEPRINT_DEPLOYED = new ExternalComponentState("BLUEPRINT_DEPLOYED",
- "The DCAE blueprint has been found in the DCAE inventory but not yet instancianted for this loop");
- public static final ExternalComponentState PROCESSING_MICROSERVICE_INSTALLATION = new ExternalComponentState(
- "PROCESSING_MICROSERVICE_INSTALLATION", "Clamp has requested DCAE to install the microservices "
- + "defined in the DCAE blueprint and it's currently processing the request");
- public static final ExternalComponentState MICROSERVICE_INSTALLATION_FAILED = new ExternalComponentState(
- "MICROSERVICE_INSTALLATION_FAILED",
- "Clamp has requested DCAE to install the microservices defined in the DCAE blueprint and it failed");
- public static final ExternalComponentState MICROSERVICE_INSTALLED_SUCCESSFULLY = new ExternalComponentState(
- "MICROSERVICE_INSTALLED_SUCCESSFULLY",
- "Clamp has requested DCAE to install the DCAE blueprint and it has been installed successfully");
- public static final ExternalComponentState PROCESSING_MICROSERVICE_UNINSTALLATION = new ExternalComponentState(
- "PROCESSING_MICROSERVICE_UNINSTALLATION", "Clamp has requested DCAE to uninstall the microservices "
- + "defined in the DCAE blueprint and it's currently processing the request");
- public static final ExternalComponentState MICROSERVICE_UNINSTALLATION_FAILED = new ExternalComponentState(
- "MICROSERVICE_UNINSTALLATION_FAILED",
- "Clamp has requested DCAE to uninstall the microservices defined in the DCAE blueprint and it failed");
- public static final ExternalComponentState MICROSERVICE_UNINSTALLED_SUCCESSFULLY = new ExternalComponentState(
- "MICROSERVICE_UNINSTALLED_SUCCESSFULLY",
- "Clamp has requested DCAE to uninstall the DCAE blueprint and it has been uninstalled successfully");
- public static final ExternalComponentState IN_ERROR = new ExternalComponentState("IN_ERROR",
- "There was an error during the request done to DCAE, look at the logs or try again");
-
- public DcaeComponent() {
- super(BLUEPRINT_DEPLOYED);
- this.name = "DCAE";
- }
-
- public DcaeComponent(String name) {
- super(BLUEPRINT_DEPLOYED);
- this.name = "DCAE_" + name;
- }
-
- @Override
- public String getComponentName() {
- return name;
- }
-
-
- /**
- * Convert the json response to a DcaeOperationStatusResponse.
- *
- * @param responseBody The DCAE response Json paylaod
- * @return The dcae object provisioned
- */
- public static DcaeOperationStatusResponse convertDcaeResponse(String responseBody) {
- if (responseBody != null && !responseBody.isEmpty()) {
- return JsonUtils.GSON_JPA_MODEL.fromJson(responseBody, DcaeOperationStatusResponse.class);
- } else {
- return null;
- }
- }
-
- /**
- * Generate the deployment id, it's random.
- *
- * @return The deployment id
- */
- public static String generateDeploymentId() {
- return DCAE_DEPLOYMENT_PREFIX + UUID.randomUUID();
- }
-
- /**
- * This method prepare the url returned by DCAE to check the status if fine. It
- * extracts it from the dcaeResponse.
- *
- * @param dcaeResponse The dcae response object
- * @return the Right Url modified if needed
- */
- public static String getStatusUrl(DcaeOperationStatusResponse dcaeResponse) {
- return dcaeResponse.getLinks().getStatus().replaceAll("http:", "http4:").replaceAll("https:", "https4:");
- }
-
- /**
- * Return the deploy payload for DCAE.
- *
- * @param loop The loop object
- * @return The payload used to send deploy closed loop request
- */
- public static String getDeployPayload(Loop loop) {
- JsonObject globalProp = loop.getGlobalPropertiesJson();
- JsonObject deploymentProp = globalProp.getAsJsonObject(DEPLOYMENT_PARAMETER).getAsJsonObject(
- UNIQUE_BLUEPRINT_PARAMETERS);
-
- String serviceTypeId = loop.getLoopTemplate().getDcaeBlueprintId();
-
- JsonObject rootObject = new JsonObject();
- rootObject.addProperty(DCAE_SERVICETYPE_ID, serviceTypeId);
- if (deploymentProp != null) {
- rootObject.add(DCAE_INPUTS, deploymentProp);
- }
- logger.info("DCAE Deploy payload for unique blueprint: " + rootObject.toString());
- return rootObject.toString();
- }
-
- /**
- * Return the deploy payload for DCAE.
- *
- * @param loop The loop object
- * @param microServicePolicy The micro service policy
- * @return The payload used to send deploy closed loop request
- */
- public static String getDeployPayload(Loop loop, MicroServicePolicy microServicePolicy) {
- JsonObject globalProp = loop.getGlobalPropertiesJson();
- JsonObject deploymentProp =
- globalProp.getAsJsonObject(DEPLOYMENT_PARAMETER).getAsJsonObject(microServicePolicy.getName());
-
- String serviceTypeId = microServicePolicy.getDcaeBlueprintId();
-
- JsonObject rootObject = new JsonObject();
- rootObject.addProperty(DCAE_SERVICETYPE_ID, serviceTypeId);
- if (deploymentProp != null) {
- rootObject.add(DCAE_INPUTS, deploymentProp);
- }
- logger.info("DCAE Deploy payload for multiple blueprints: " + rootObject.toString());
- return rootObject.toString();
- }
-
- /**
- * Return the uninstallation payload for DCAE.
- *
- * @param loop The loop object
- * @return The payload in string (json)
- */
- public static String getUndeployPayload(Loop loop) {
- JsonObject rootObject = new JsonObject();
- rootObject.addProperty(DCAE_SERVICETYPE_ID, loop.getLoopTemplate().getDcaeBlueprintId());
- logger.info("DCAE Undeploy payload for unique blueprint: " + rootObject.toString());
- return rootObject.toString();
- }
-
- /**
- * Return the uninstallation payload for DCAE.
- *
- * @param policy The microServicePolicy object
- * @return The payload in string (json)
- */
- public static String getUndeployPayload(MicroServicePolicy policy) {
- JsonObject rootObject = new JsonObject();
- rootObject.addProperty(DCAE_SERVICETYPE_ID, policy.getDcaeBlueprintId());
- logger.info("DCAE Undeploy payload for multiple blueprints: " + rootObject.toString());
- return rootObject.toString();
- }
-
- @Override
- public ExternalComponentState computeState(Exchange camelExchange) {
-
- DcaeOperationStatusResponse dcaeResponse = (DcaeOperationStatusResponse) camelExchange.getIn().getExchange()
- .getProperty("dcaeResponse");
-
- if (dcaeResponse == null) {
- setState(BLUEPRINT_DEPLOYED);
- } else {
- if (dcaeResponse.getOperationType().equals("install") && dcaeResponse.getStatus().equals("succeeded")) {
- setState(MICROSERVICE_INSTALLED_SUCCESSFULLY);
- } else {
- if (dcaeResponse.getOperationType().equals("install") && dcaeResponse.getStatus()
- .equals("processing")) {
- setState(PROCESSING_MICROSERVICE_INSTALLATION);
- } else {
- if (dcaeResponse.getOperationType().equals("install") && dcaeResponse.getStatus()
- .equals("failed")) {
- setState(MICROSERVICE_INSTALLATION_FAILED);
- } else {
- if (dcaeResponse.getOperationType().equals("uninstall")
- && dcaeResponse.getStatus().equals("succeeded")) {
- setState(MICROSERVICE_UNINSTALLED_SUCCESSFULLY);
- } else {
- if (dcaeResponse.getOperationType().equals("uninstall")
- && dcaeResponse.getStatus().equals("processing")) {
- setState(PROCESSING_MICROSERVICE_UNINSTALLATION);
- } else {
- if (dcaeResponse.getOperationType().equals("uninstall") && dcaeResponse.getStatus()
- .equals("failed")) {
- setState(MICROSERVICE_UNINSTALLATION_FAILED);
- } else {
- setState(IN_ERROR);
- }
- }
- }
- }
- }
- }
- }
- return this.getState();
- }
-
- /**
- * Convert the json response to a DcaeInventoryResponse.
- *
- * @param responseBody The DCAE response Json paylaod
- * @return list of DcaeInventoryResponse
- * @throws ParseException In case of issues with the Json parsing
- */
- public static List<DcaeInventoryResponse> convertToDcaeInventoryResponse(String responseBody)
- throws ParseException {
- JSONParser parser = new JSONParser();
- JSONObject jsonObj = (JSONObject) parser.parse(responseBody);
- JSONArray itemsArray = (JSONArray) jsonObj.get("items");
- Iterator it = itemsArray.iterator();
- List<DcaeInventoryResponse> inventoryResponseList = new LinkedList<>();
- while (it.hasNext()) {
- JSONObject item = (JSONObject) it.next();
- DcaeInventoryResponse response = JsonUtils.GSON.fromJson(item.toString(), DcaeInventoryResponse.class);
- inventoryResponseList.add(response);
- }
- return inventoryResponseList;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/components/external/ExternalComponent.java b/src/main/java/org/onap/policy/clamp/loop/components/external/ExternalComponent.java
deleted file mode 100644
index ce7efe494..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/components/external/ExternalComponent.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.components.external;
-
-import com.google.gson.annotations.Expose;
-import org.apache.camel.Exchange;
-
-/**
- * Should be abstract but Gson can't instantiate it if it's an abstract.
- */
-public class ExternalComponent {
- @Expose
- private ExternalComponentState componentState;
-
- public void setState(ExternalComponentState newState) {
- this.componentState = newState;
- }
-
- public ExternalComponentState getState() {
- return this.componentState;
- }
-
- public String getComponentName() {
- return null;
- }
-
- public ExternalComponentState computeState(Exchange camelExchange) {
- return new ExternalComponentState("INIT", "no desc", 0);
- }
-
- public ExternalComponent(ExternalComponentState initialState) {
- setState(initialState);
- }
-
- public ExternalComponent() {
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/components/external/ExternalComponentState.java b/src/main/java/org/onap/policy/clamp/loop/components/external/ExternalComponentState.java
deleted file mode 100644
index a57800025..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/components/external/ExternalComponentState.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.components.external;
-
-import com.google.gson.annotations.Expose;
-
-/**
- * This is a transient state reflecting the deployment status of a component. It
- * can be Policy, DCAE, or whatever... This is object is generic. Clamp is now
- * stateless, so it triggers the different components at runtime, the status per
- * component is stored here. The state level is used to re-compute the global
- * state when multiple sub states are required for that computation (generally
- * provided sequentially to the method computeState from the camel routes.
- *
- */
-public class ExternalComponentState implements Comparable<ExternalComponentState> {
- @Expose
- private String stateName;
- @Expose
- private String description;
- private int stateLevel;
-
- /**
- * Constructor taking stateName, description and its level.
- *
- * @param stateName The stateName in string
- * @param description The description in string
- * @param level The level, higher value has higher priority and can't be
- * down-graded
- */
- public ExternalComponentState(String stateName, String description, int level) {
- this.stateName = stateName;
- this.description = description;
- this.stateLevel = level;
- }
-
- public ExternalComponentState(String stateName, String description) {
- this(stateName, description, 0);
- }
-
- public ExternalComponentState() {
- }
-
- public String getStateName() {
- return stateName;
- }
-
- public String getDescription() {
- return description;
- }
-
- @Override
- public String toString() {
- return stateName;
- }
-
- public int getLevel() {
- return stateLevel;
- }
-
- public void setLevel(int priority) {
- this.stateLevel = priority;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((stateName == null) ? 0 : stateName.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- ExternalComponentState other = (ExternalComponentState) obj;
- if (stateName == null) {
- if (other.stateName != null) {
- return false;
- }
- } else if (!stateName.equals(other.stateName)) {
- return false;
- }
- return true;
- }
-
- /**
- * This method compares this object by using the level of them.
- *
- * @param stateToCompare The state to compare to the current object
- * @return If the one given in input has a higher level than the current object
- * it returns -1, 1 otherwise and 0 if equals.
- */
- @Override
- public int compareTo(ExternalComponentState stateToCompare) {
- return Integer.compare(this.getLevel(), stateToCompare.getLevel());
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/components/external/PolicyComponent.java b/src/main/java/org/onap/policy/clamp/loop/components/external/PolicyComponent.java
deleted file mode 100644
index 648463d78..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/components/external/PolicyComponent.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.components.external;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import javax.persistence.Transient;
-import org.apache.camel.Exchange;
-import org.onap.policy.clamp.loop.Loop;
-import org.onap.policy.clamp.policy.microservice.MicroServicePolicy;
-import org.onap.policy.clamp.policy.operational.OperationalPolicy;
-
-public class PolicyComponent extends ExternalComponent {
-
- @Transient
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyComponent.class);
-
- public static final ExternalComponentState IN_ERROR = new ExternalComponentState("IN_ERROR",
- "There was an error during the sending to policy, the policy engine may be corrupted or inconsistent", 100);
- public static final ExternalComponentState NOT_SENT = new ExternalComponentState("NOT_SENT",
- "The policies defined have NOT yet been created on the policy engine", 90);
- public static final ExternalComponentState SENT = new ExternalComponentState("SENT",
- "The policies defined have been created but NOT deployed on the policy engine", 50);
- public static final ExternalComponentState SENT_AND_DEPLOYED = new ExternalComponentState("SENT_AND_DEPLOYED",
- "The policies defined have been created and deployed on the policy engine", 10);
- public static final ExternalComponentState UNKNOWN = new ExternalComponentState("UNKNOWN",
- "The current status is not clear. Need to refresh the status to get the current status.", 0);
-
- /**
- * Default constructor.
- */
- public PolicyComponent() {
- /*
- * We assume it's good by default as we will receive the state for each policy
- * on by one, each time we increase the level we can't decrease it anymore.
- * That's why it starts with the lowest one SENT_AND_DEPLOYED.
- */
- super(UNKNOWN);
- }
-
- @Override
- public String getComponentName() {
- return "POLICY";
- }
-
- /**
- * Generates the Json that must be sent to policy to add all policies to Active
- * PDP group.
- *
- * @param loop the loop object
- * @param action POST (to add policy to group) or DELETE (to delete policy from group)
- * @return The json, payload to send
- */
- public static String createPoliciesPayloadPdpGroup(Loop loop, String action) {
- Map<String, Map<String, List<JsonObject>>> pdpGroupMap = new HashMap<>();
- for (OperationalPolicy opPolicy : loop.getOperationalPolicies()) {
- updatePdpGroupMap(opPolicy.getPdpGroup(), opPolicy.getPdpSubgroup(),
- opPolicy.getName(),
- "1.0.0", pdpGroupMap);
- }
-
- for (MicroServicePolicy msPolicy : loop.getMicroServicePolicies()) {
- updatePdpGroupMap(msPolicy.getPdpGroup(), msPolicy.getPdpSubgroup(),
- msPolicy.getName(),
- "1.0.0", pdpGroupMap);
- }
-
- String payload = new GsonBuilder().setPrettyPrinting().create()
- .toJson(generateActivatePdpGroupPayload(pdpGroupMap, action));
- logger.info("PdpGroup policy payload: " + payload);
- return payload;
- }
-
- private static void updatePdpGroupMap(String pdpGroup,
- String pdpSubGroup,
- String policyName,
- String policyVersion,
- Map<String, Map<String,
- List<JsonObject>>> pdpGroupMap) {
- JsonObject policyJson = new JsonObject();
- policyJson.addProperty("name", policyName);
- policyJson.addProperty("version", policyVersion);
- Map<String, List<JsonObject>> pdpSubGroupMap;
- List<JsonObject> policyList;
- if (pdpGroupMap.get(pdpGroup) == null) {
- pdpSubGroupMap = new HashMap<>();
- policyList = new LinkedList<>();
- } else {
- pdpSubGroupMap = pdpGroupMap.get(pdpGroup);
- if (pdpSubGroupMap.get(pdpSubGroup) == null) {
- policyList = new LinkedList<>();
- } else {
- policyList = (List<JsonObject>) pdpSubGroupMap.get(pdpSubGroup);
- }
- }
- policyList.add(policyJson);
- pdpSubGroupMap.put(pdpSubGroup, policyList);
- pdpGroupMap.put(pdpGroup, pdpSubGroupMap);
- }
-
- private static JsonObject generateActivatePdpGroupPayload(
- Map<String, Map<String, List<JsonObject>>> pdpGroupMap, String action) {
- JsonArray payloadArray = new JsonArray();
- for (Entry<String, Map<String, List<JsonObject>>> pdpGroupInfo : pdpGroupMap.entrySet()) {
- JsonObject pdpGroupNode = new JsonObject();
- JsonArray subPdpArray = new JsonArray();
- pdpGroupNode.addProperty("name", pdpGroupInfo.getKey());
- pdpGroupNode.add("deploymentSubgroups", subPdpArray);
-
- for (Entry<String, List<JsonObject>> pdpSubGroupInfo : pdpGroupInfo.getValue().entrySet()) {
- JsonObject pdpSubGroupNode = new JsonObject();
- subPdpArray.add(pdpSubGroupNode);
- pdpSubGroupNode.addProperty("pdpType", pdpSubGroupInfo.getKey());
- pdpSubGroupNode.addProperty("action", action);
-
- JsonArray policyArray = new JsonArray();
- pdpSubGroupNode.add("policies", policyArray);
-
- for (JsonObject policy : pdpSubGroupInfo.getValue()) {
- policyArray.add(policy);
- }
- }
- payloadArray.add(pdpGroupNode);
- }
- JsonObject jsonObject = new JsonObject();
- jsonObject.add("groups", payloadArray);
- return jsonObject;
- }
-
- private static ExternalComponentState findNewState(boolean found, boolean deployed) {
-
- ExternalComponentState newState = NOT_SENT;
- if (found && deployed) {
- newState = SENT_AND_DEPLOYED;
- } else {
- if (found) {
- newState = SENT;
- } else {
- if (deployed) {
- newState = IN_ERROR;
- }
- }
- }
- return newState;
- }
-
- private static ExternalComponentState mergeStates(ExternalComponentState oldState,
- ExternalComponentState newState) {
- return (oldState.compareTo(newState) < 0) ? newState : oldState;
- }
-
- /**
- * This is a method that expect the results of the queries getPolicy and
- * getPolicyDeployed for a unique policy (op, config, etc ...). It
- * re-computes the global policy state for each policy results given. Therefore
- * this method is called multiple times from the camel route and must be reset
- * for a new global policy state retrieval. The state to compute the global
- * policy state is stored in this class.
- */
- @Override
- public ExternalComponentState computeState(Exchange camelExchange) {
- this.setState(mergeStates(this.getState(),
- findNewState((boolean) camelExchange.getIn().getExchange().getProperty("policyFound"),
- (boolean) camelExchange.getIn().getExchange().getProperty("policyDeployed"))));
- return this.getState();
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/deploy/DcaeDeployParameters.java b/src/main/java/org/onap/policy/clamp/loop/deploy/DcaeDeployParameters.java
deleted file mode 100644
index 9d56f23c4..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/deploy/DcaeDeployParameters.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.deploy;
-
-import com.google.gson.JsonObject;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.onap.policy.clamp.loop.Loop;
-import org.onap.policy.clamp.loop.components.external.DcaeComponent;
-import org.onap.policy.clamp.policy.microservice.MicroServicePolicy;
-import org.yaml.snakeyaml.Yaml;
-
-/**
- * To decode the bluprint input parameters.
- */
-public class DcaeDeployParameters {
-
- private static LinkedHashMap<String, JsonObject> init(Loop loop) {
- LinkedHashMap<String, JsonObject> deploymentParamMap = new LinkedHashMap<>();
- Set<MicroServicePolicy> microServiceList = loop.getMicroServicePolicies();
-
- for (MicroServicePolicy microService : microServiceList) {
- deploymentParamMap.put(microService.getName(),
- generateDcaeDeployParameter(microService));
- }
- return deploymentParamMap;
- }
-
- private static JsonObject generateDcaeDeployParameter(MicroServicePolicy microService) {
- return generateDcaeDeployParameter(microService.getLoopElementModel().getBlueprint(),
- microService.getName());
- }
-
- private static JsonObject generateDcaeDeployParameter(String blueprint, String policyId) {
- JsonObject deployJsonBody = new JsonObject();
- Yaml yaml = new Yaml();
- Map<String, Object> inputsNodes = ((Map<String, Object>) ((Map<String, Object>) yaml
- .load(blueprint)).get("inputs"));
- inputsNodes.entrySet().stream().filter(e -> !e.getKey().contains("policy_id")).forEach(elem -> {
- Object defaultValue = ((Map<String, Object>) elem.getValue()).get("default");
- if (defaultValue != null) {
- addPropertyToNode(deployJsonBody, elem.getKey(), defaultValue);
- } else {
- deployJsonBody.addProperty(elem.getKey(), "");
- }
- });
- deployJsonBody.addProperty("policy_id", policyId);
- return deployJsonBody;
- }
-
- private static void addPropertyToNode(JsonObject node, String key, Object value) {
- if (value instanceof String) {
- node.addProperty(key, (String) value);
- } else if (value instanceof Number) {
- node.addProperty(key, (Number) value);
- } else if (value instanceof Boolean) {
- node.addProperty(key, (Boolean) value);
- } else if (value instanceof Character) {
- node.addProperty(key, (Character) value);
- } else {
- node.addProperty(key, JsonUtils.GSON.toJson(value));
- }
- }
-
- /**
- * Convert the object in Json.
- *
- * @return The deploymentParameters in Json
- */
- public static JsonObject getDcaeDeploymentParametersInJson(Loop loop) {
- JsonObject globalProperties = new JsonObject();
- JsonObject deployParamJson = new JsonObject();
- if (loop.getLoopTemplate().getUniqueBlueprint()) {
- // Normally the unique blueprint could contain multiple microservices but then we can't guess
- // the policy id params that will be used, so here we expect only one by default.
- deployParamJson.add(DcaeComponent.UNIQUE_BLUEPRINT_PARAMETERS,
- generateDcaeDeployParameter(loop.getLoopTemplate().getBlueprint(),
- ((MicroServicePolicy) loop.getMicroServicePolicies().toArray()[0]).getName()));
-
- } else {
- LinkedHashMap<String, JsonObject> deploymentParamMap = init(loop);
- for (Map.Entry<String, JsonObject> mapElement : deploymentParamMap.entrySet()) {
- deployParamJson.add(mapElement.getKey(), mapElement.getValue());
- }
- }
- globalProperties.add("dcaeDeployParameters", deployParamJson);
- return globalProperties;
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/log/LogType.java b/src/main/java/org/onap/policy/clamp/loop/log/LogType.java
deleted file mode 100644
index 50f6571d6..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/log/LogType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.log;
-
-public enum LogType {
- INFO, WARNING, ERROR;
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/log/LoopLog.java b/src/main/java/org/onap/policy/clamp/loop/log/LoopLog.java
deleted file mode 100644
index 00f7e1f41..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/log/LoopLog.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.log;
-
-import com.google.gson.annotations.Expose;
-import java.io.Serializable;
-import java.time.Instant;
-import java.time.temporal.ChronoUnit;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-import org.onap.policy.clamp.loop.Loop;
-
-/**
- * This class holds the logs created by the Clamp Backend. The Instant is always
- * rounded to the nearest second as the nano seconds can't be stored in the
- * database. The logs can be therefore exposed to the UI or the client doing
- * some GET Loop on the backend.
- *
- */
-@Entity
-@Table(name = "loop_logs")
-public class LoopLog implements Serializable, Comparable<LoopLog> {
- /**
- * The serial version ID.
- */
- private static final long serialVersionUID = 1988276670074437631L;
-
- @Expose
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- private Long id;
-
- @Expose
- @Column(name = "log_type", nullable = false)
- @Enumerated(EnumType.STRING)
- private LogType logType;
-
- @Expose
- @Column(name = "log_component", nullable = false)
- private String logComponent;
-
- @Expose
- @Column(name = "message", columnDefinition = "MEDIUMTEXT", nullable = false)
- private String message;
-
- @ManyToOne(fetch = FetchType.LAZY)
- @JoinColumn(name = "loop_id", nullable = false)
- private Loop loop;
-
- @Expose
- @Column(name = "log_instant", nullable = false)
- private Instant logInstant = Instant.now().truncatedTo(ChronoUnit.SECONDS);
-
- public LoopLog() {
- }
-
- /**
- * Constructor For LoopLog taking message and logtype, logComponent and loop
- * reference.
- *
- * @param message The message as string
- * @param logType Type like INFO, WARN, DEBUG
- * @param logComponent A String with DCAE, POLICY, CLAMP ,etc...
- * @param loop The loop object that this log is about
- */
- public LoopLog(String message, LogType logType, String logComponent, Loop loop) {
- this.message = message;
- this.logType = logType;
- this.loop = loop;
- this.logComponent = logComponent;
- }
-
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public LogType getLogType() {
- return logType;
- }
-
- public void setLogType(LogType logType) {
- this.logType = logType;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public Loop getLoop() {
- return loop;
- }
-
- public void setLoop(Loop loop) {
- this.loop = loop;
- }
-
- public Instant getLogInstant() {
- return logInstant;
- }
-
- public void setLogInstant(Instant logInstant) {
- this.logInstant = logInstant.truncatedTo(ChronoUnit.SECONDS);
- }
-
- public String getLogComponent() {
- return logComponent;
- }
-
- public void setLogComponent(String logComponent) {
- this.logComponent = logComponent;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((id == null) ? 0 : id.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- LoopLog other = (LoopLog) obj;
- if (id == null) {
- if (other.id != null) {
- return false;
- }
- } else if (!id.equals(other.id)) {
- return false;
- }
- return true;
- }
-
- @Override
- public int compareTo(LoopLog arg0) {
- // Reverse it, so that by default we have the latest
- if (getId() == null) {
- return 1;
- }
- if (arg0.getId() == null) {
- return -1;
- }
- return arg0.getId().compareTo(this.getId());
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/log/LoopLogRepository.java b/src/main/java/org/onap/policy/clamp/loop/log/LoopLogRepository.java
deleted file mode 100644
index df1f3919e..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/log/LoopLogRepository.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.log;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface LoopLogRepository extends JpaRepository<LoopLog, Long> {
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/log/LoopLogService.java b/src/main/java/org/onap/policy/clamp/loop/log/LoopLogService.java
deleted file mode 100644
index a2f133f2f..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/log/LoopLogService.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 Nokia 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.policy.clamp.loop.log;
-
-import org.onap.policy.clamp.loop.Loop;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class LoopLogService {
-
- private final LoopLogRepository repository;
-
- @Autowired
- public LoopLogService(LoopLogRepository repository) {
- this.repository = repository;
- }
-
- public void addLog(String message, String logType, Loop loop) {
- this.addLogForComponent(message, logType, "CLAMP", loop);
- }
-
- public void addLogForComponent(String message, String logType, String component, Loop loop) {
- loop.addLog(repository.save(new LoopLog(message, LogType.valueOf(logType), component, loop)));
- }
-
- public boolean isExisting(Long logId) {
- return repository.existsById(logId);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/service/CsarServiceInstaller.java b/src/main/java/org/onap/policy/clamp/loop/service/CsarServiceInstaller.java
deleted file mode 100644
index 1429d73c2..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/service/CsarServiceInstaller.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights
- * reserved.
- * Modifications Copyright (C) 2020 Huawei Technologies Co., Ltd.
- * ================================================================================
- * 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.policy.clamp.loop.service;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonObject;
-import java.util.Map.Entry;
-import org.onap.policy.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException;
-import org.onap.policy.clamp.clds.sdc.controller.installer.CsarHandler;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.onap.sdc.tosca.parser.api.IEntityDetails;
-import org.onap.sdc.tosca.parser.elements.queries.EntityQuery;
-import org.onap.sdc.tosca.parser.elements.queries.TopologyTemplateQuery;
-import org.onap.sdc.tosca.parser.enums.EntityTemplateType;
-import org.onap.sdc.tosca.parser.enums.SdcTypes;
-import org.onap.sdc.toscaparser.api.NodeTemplate;
-import org.onap.sdc.toscaparser.api.Property;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-@Component
-@Qualifier("csarInstaller")
-public class CsarServiceInstaller {
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(CsarServiceInstaller.class);
-
- @Autowired
- ServicesRepository serviceRepository;
-
- /**
- * Install the Service from the csar.
- *
- * @param csar The Csar Handler
- * @return The service object
- */
- @Transactional(propagation = Propagation.REQUIRES_NEW)
- public Service installTheService(CsarHandler csar) {
- logger.info("Start to install the Service from csar");
- JsonObject serviceDetails = JsonUtils.GSON.fromJson(
- JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class);
-
- // Add properties details for each type, VfModule, VF, VFC, ....
- JsonObject resourcesProp = createServicePropertiesByType(csar);
- resourcesProp.add("VFModule", createVfModuleProperties(csar));
-
- Service modelService = new Service(serviceDetails, resourcesProp,
- csar.getSdcNotification().getServiceVersion());
-
- serviceRepository.save(modelService);
- logger.info("Successfully installed the Service");
- return modelService;
- }
-
- private JsonObject createServicePropertiesByType(CsarHandler csar) {
- JsonObject resourcesProp = new JsonObject();
- // Iterate on all types defined in the tosca lib
- for (SdcTypes type : SdcTypes.values()) {
- JsonObject resourcesPropByType = new JsonObject();
- // For each type, get the metadata of each nodetemplate
- for (NodeTemplate nodeTemplate : csar.getSdcCsarHelper().getServiceNodeTemplateBySdcType(type)) {
- resourcesPropByType.add(nodeTemplate.getName(),
- JsonUtils.GSON.toJsonTree(nodeTemplate.getMetaData().getAllProperties()));
- }
- resourcesProp.add(type.getValue(), resourcesPropByType);
- }
- return resourcesProp;
- }
-
- private static JsonObject createVfModuleProperties(CsarHandler csar) {
- JsonObject vfModuleProps = new JsonObject();
- // Loop on all Groups defined in the service (VFModule entries type:
- // org.openecomp.groups.VfModule)
- for (IEntityDetails entity : csar.getSdcCsarHelper().getEntity(
- EntityQuery.newBuilder(EntityTemplateType.GROUP).build(),
- TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE).build(), false)) {
- // Get all metadata info
- JsonObject allVfProps = (JsonObject) JsonUtils.GSON.toJsonTree(entity.getMetadata().getAllProperties());
- vfModuleProps.add(entity.getMetadata().getAllProperties().get("vfModuleModelName"), allVfProps);
- // now append the properties section so that we can also have isBase,
- // volume_group, etc ... fields under the VFmodule name
- for (Entry<String, Property> additionalProp : entity.getProperties().entrySet()) {
- allVfProps.add(additionalProp.getValue().getName(),
- JsonUtils.GSON.toJsonTree(additionalProp.getValue().getValue()));
- }
- }
- return vfModuleProps;
- }
-
- /**
- * Verify whether Service in Csar is deployed.
- *
- * @param csar The Csar Handler
- * @return The flag indicating whether Service is deployed
- * @throws SdcArtifactInstallerException The SdcArtifactInstallerException
- */
- public boolean isServiceAlreadyDeployed(CsarHandler csar) throws SdcArtifactInstallerException {
- boolean alreadyInstalled = true;
- JsonObject serviceDetails = JsonUtils.GSON.fromJson(
- JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class);
- alreadyInstalled = serviceRepository.existsById(serviceDetails.get("UUID").getAsString());
-
- return alreadyInstalled;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/service/Service.java b/src/main/java/org/onap/policy/clamp/loop/service/Service.java
deleted file mode 100644
index b7442abc5..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/service/Service.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.service;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonObject;
-import com.google.gson.annotations.Expose;
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.Transient;
-import org.hibernate.annotations.Type;
-import org.hibernate.annotations.TypeDef;
-import org.hibernate.annotations.TypeDefs;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.onap.policy.clamp.dao.model.jsontype.StringJsonUserType;
-
-@Entity
-@Table(name = "services")
-@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)})
-public class Service implements Serializable {
-
- /**
- * The serial version id.
- */
- private static final long serialVersionUID = 1331119060272760758L;
-
- @Transient
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(Service.class);
-
- @Id
- @Column(name = "service_uuid", unique = true)
- private String serviceUuid;
-
- @Column(nullable = false, name = "name")
- private String name;
-
- @Column(name = "version")
- private String version;
-
- @Expose
- @Type(type = "json")
- @Column(columnDefinition = "json", name = "service_details")
- private JsonObject serviceDetails;
-
- @Expose
- @Type(type = "json")
- @Column(columnDefinition = "json", name = "resource_details")
- private JsonObject resourceDetails;
-
- /**
- * Default constructor for serialization.
- */
- public Service() {
- }
-
- /**
- * Constructor with string.
- */
- public Service(String serviceDetails, String resourceDetails) {
- JsonObject serviceDetailsJson = JsonUtils.GSON.fromJson(serviceDetails, JsonObject.class);
- this.name = serviceDetailsJson.get("name").getAsString();
- this.serviceUuid = serviceDetailsJson.get("UUID").getAsString();
- this.serviceDetails = serviceDetailsJson;
- this.resourceDetails = JsonUtils.GSON.fromJson(resourceDetails, JsonObject.class);
- }
-
- /**
- * Constructor with Json Object.
- */
- public Service(JsonObject serviceDetails, JsonObject resourceDetails, String version) {
- this.name = serviceDetails.get("name").getAsString();
- this.serviceUuid = serviceDetails.get("UUID").getAsString();
- this.serviceDetails = serviceDetails;
- this.resourceDetails = resourceDetails;
- this.version = version;
- }
-
- public String getServiceUuid() {
- return serviceUuid;
- }
-
- public JsonObject getServiceDetails() {
- return serviceDetails;
- }
-
- public JsonObject getResourceDetails() {
- return resourceDetails;
- }
-
- public JsonObject getResourceByType(String type) {
- return (JsonObject) resourceDetails.get(type);
- }
-
- /**
- * Name getter.
- *
- * @return the name
- */
- public String getName() {
- return name;
- }
-
- /**
- * Version getter.
- *
- * @return the version
- */
- public String getVersion() {
- return version;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((serviceUuid == null) ? 0 : serviceUuid.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- Service other = (Service) obj;
- if (serviceUuid == null) {
- if (other.serviceUuid != null) {
- return false;
- }
- } else {
- if (!serviceUuid.equals(other.serviceUuid)) {
- return false;
- }
- }
- return true;
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/service/ServicesRepository.java b/src/main/java/org/onap/policy/clamp/loop/service/ServicesRepository.java
deleted file mode 100644
index 62596a08e..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/service/ServicesRepository.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.loop.service;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface ServicesRepository extends JpaRepository<Service, String> {
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/template/LoopElementModel.java b/src/main/java/org/onap/policy/clamp/loop/template/LoopElementModel.java
deleted file mode 100644
index 6eb3c7195..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/template/LoopElementModel.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 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.policy.clamp.loop.template;
-
-import com.google.gson.annotations.Expose;
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
-import org.hibernate.annotations.SortNatural;
-import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
-import org.onap.policy.clamp.loop.Loop;
-import org.onap.policy.clamp.loop.common.AuditEntity;
-import org.onap.policy.clamp.policy.Policy;
-import org.onap.policy.clamp.policy.microservice.MicroServicePolicy;
-import org.onap.policy.clamp.policy.operational.OperationalPolicy;
-
-/**
- * This class represents a micro service/operational/... model for a loop template.
- * So it's an element in the flow (a box shown in the loop).
- */
-
-@Entity
-@Table(name = "loop_element_models")
-public class LoopElementModel extends AuditEntity implements Serializable {
- /**
- * The serial version id.
- */
- private static final long serialVersionUID = -286522707701376645L;
-
- @Id
- @Expose
- @Column(nullable = false, name = "name", unique = true)
- private String name;
-
- @Expose
- @Column(name = "dcae_blueprint_id")
- private String dcaeBlueprintId;
-
- /**
- * Here we store the blueprint coming from DCAE, it can be null if this is not a micro service model.
- */
- @Column(columnDefinition = "MEDIUMTEXT", name = "blueprint_yaml")
- private String blueprint;
-
- public static final String MICRO_SERVICE_TYPE = "MICRO_SERVICE_TYPE";
- public static final String OPERATIONAL_POLICY_TYPE = "OPERATIONAL_POLICY_TYPE";
- /**
- * The type of element.
- */
- @Expose
- @Column(nullable = false, name = "loop_element_type")
- private String loopElementType;
-
- /**
- * This variable is used to display the micro-service name in the SVG.
- */
- @Expose
- @Column(name = "short_name")
- private String shortName;
-
- /**
- * This variable is used to store the type mentioned in the micro-service
- * blueprint.
- */
- @Expose
- @ManyToMany(
- fetch = FetchType.EAGER,
- cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
- @JoinTable(
- name = "loopelementmodels_to_policymodels",
- joinColumns = @JoinColumn(name = "loop_element_name", referencedColumnName = "name"),
- inverseJoinColumns = {
- @JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"),
- @JoinColumn(name = "policy_model_version", referencedColumnName = "version")})
- @SortNatural
- private SortedSet<PolicyModel> policyModels = new TreeSet<>();
-
- @OneToMany(fetch = FetchType.LAZY, mappedBy = "loopElementModel", orphanRemoval = true)
- private Set<LoopTemplateLoopElementModel> usedByLoopTemplates = new HashSet<>();
-
- /**
- * policyModels getter.
- *
- * @return the policyModel
- */
- public SortedSet<PolicyModel> getPolicyModels() {
- return policyModels;
- }
-
- /**
- * Method to add a new policyModel to the list.
- *
- * @param policyModel The policy model
- */
- public void addPolicyModel(PolicyModel policyModel) {
- policyModels.add(policyModel);
- policyModel.getUsedByElementModels().add(this);
- }
-
- /**
- * name getter.
- *
- * @return the name
- */
- public String getName() {
- return name;
- }
-
- /**
- * name setter.
- *
- * @param name the name to set
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * blueprint getter.
- *
- * @return the blueprint
- */
- public String getBlueprint() {
- return blueprint;
- }
-
- /**
- * blueprint setter.
- *
- * @param blueprint the blueprint to set
- */
- public void setBlueprint(String blueprint) {
- this.blueprint = blueprint;
- }
-
- /**
- * dcaeBlueprintId getter.
- *
- * @return the dcaeBlueprintId
- */
- public String getDcaeBlueprintId() {
- return dcaeBlueprintId;
- }
-
- /**
- * dcaeBlueprintId setter.
- *
- * @param dcaeBlueprintId the dcaeBlueprintId to set
- */
- public void setDcaeBlueprintId(String dcaeBlueprintId) {
- this.dcaeBlueprintId = dcaeBlueprintId;
- }
-
- /**
- * loopElementType getter.
- *
- * @return the loopElementType
- */
- public String getLoopElementType() {
- return loopElementType;
- }
-
- /**
- * loopElementType setter.
- *
- * @param loopElementType the loopElementType to set
- */
- public void setLoopElementType(String loopElementType) {
- this.loopElementType = loopElementType;
- }
-
- /**
- * shortName getter.
- *
- * @return the shortName
- */
- public String getShortName() {
- return shortName;
- }
-
- /**
- * * @param shortName the shortName to set.
- */
- public void setShortName(String shortName) {
- this.shortName = shortName;
- }
-
- /**
- * usedByLoopTemplates getter.
- *
- * @return the usedByLoopTemplates
- */
- public Set<LoopTemplateLoopElementModel> getUsedByLoopTemplates() {
- return usedByLoopTemplates;
- }
-
- /**
- * Default constructor for serialization.
- */
- public LoopElementModel() {
- }
-
- /**
- * Constructor.
- *
- * @param name The name id
- * @param loopElementType The type of loop element
- * @param blueprint The blueprint defined for dcae that contains the
- * policy type to use
- */
- public LoopElementModel(String name, String loopElementType, String blueprint) {
- this.name = name;
- this.loopElementType = loopElementType;
- this.blueprint = blueprint;
- }
-
- /**
- * Create a policy instance from the current loop element model.
- *
- * @return A Policy object.
- */
- public Policy createPolicyInstance(Loop loop, ToscaConverterWithDictionarySupport toscaConverter) {
- if (LoopElementModel.MICRO_SERVICE_TYPE.equals(this.getLoopElementType())) {
- return new MicroServicePolicy(loop, loop.getModelService(), this, toscaConverter);
- } else if (LoopElementModel.OPERATIONAL_POLICY_TYPE.equals(this.getLoopElementType())) {
- return new OperationalPolicy(loop, loop.getModelService(), this, toscaConverter);
- } else {
- return null;
- }
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- LoopElementModel other = (LoopElementModel) obj;
- if (name == null) {
- if (other.name != null) {
- return false;
- }
- } else if (!name.equals(other.name)) {
- return false;
- }
- return true;
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/template/LoopElementModelsRepository.java b/src/main/java/org/onap/policy/clamp/loop/template/LoopElementModelsRepository.java
deleted file mode 100644
index d9b879d0f..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/template/LoopElementModelsRepository.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.template;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface LoopElementModelsRepository extends JpaRepository<LoopElementModel, String> {
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplate.java b/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplate.java
deleted file mode 100644
index ab7367aaf..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplate.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.template;
-
-import com.google.gson.annotations.Expose;
-import java.io.Serializable;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Convert;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
-import org.hibernate.annotations.SortNatural;
-import org.onap.policy.clamp.loop.common.AuditEntity;
-import org.onap.policy.clamp.loop.service.Service;
-
-@Entity
-@Table(name = "loop_templates")
-public class LoopTemplate extends AuditEntity implements Serializable {
-
- /**
- * The serial version id.
- */
- private static final long serialVersionUID = -286522707701388642L;
-
- @Id
- @Expose
- @Column(nullable = false, name = "name", unique = true)
- private String name;
-
- @Expose
- @Column(name = "dcae_blueprint_id")
- private String dcaeBlueprintId;
-
- /**
- * This field is used when we have a blueprint defining all microservices. The
- * other option would be to have independent blueprint for each microservices.
- * In that case they are stored in each MicroServiceModel
- */
- @Column(columnDefinition = "MEDIUMTEXT", name = "blueprint_yaml")
- private String blueprint;
-
- @Expose
- @OneToMany(
- cascade = CascadeType.ALL,
- fetch = FetchType.EAGER,
- mappedBy = "loopTemplate",
- orphanRemoval = true)
- @SortNatural
- private SortedSet<LoopTemplateLoopElementModel> loopElementModelsUsed = new TreeSet<>();
-
- @Expose
- @ManyToOne(
- fetch = FetchType.EAGER,
- cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
- @JoinColumn(name = "service_uuid")
- private Service modelService;
-
- @Expose
- @Column(name = "maximum_instances_allowed")
- private Integer maximumInstancesAllowed;
-
- @Expose
- @Column(name = "unique_blueprint", columnDefinition = "boolean default false")
- private boolean uniqueBlueprint;
-
- /**
- * Type of Loop allowed to be created.
- */
- @Expose
- @Column(name = "allowed_loop_type")
- @Convert(converter = LoopTypeConvertor.class)
- private LoopType allowedLoopType = LoopType.CLOSED;
-
- /**
- * name getter.
- *
- * @return the name
- */
- public String getName() {
- return name;
- }
-
- /**
- * name setter.
- *
- * @param name the name to set
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * blueprint getter.
- *
- * @return the blueprint
- */
- public String getBlueprint() {
- return blueprint;
- }
-
- /**
- * dcaeBlueprintId getter.
- *
- * @return the dcaeBlueprintId
- */
- public String getDcaeBlueprintId() {
- return dcaeBlueprintId;
- }
-
- /**
- * dcaeBlueprintId setter.
- *
- * @param dcaeBlueprintId the dcaeBlueprintId to set
- */
- public void setDcaeBlueprintId(String dcaeBlueprintId) {
- this.dcaeBlueprintId = dcaeBlueprintId;
- }
-
- /**
- * blueprint setter.
- *
- * @param blueprint the blueprint to set
- */
- public void setBlueprint(String blueprint) {
- this.blueprint = blueprint;
- if (blueprint == null) {
- this.uniqueBlueprint = false;
- } else {
- this.uniqueBlueprint = true;
- }
- }
-
- /**
- * loopElementModelsUsed getter.
- *
- * @return the loopElementModelsUsed
- */
- public SortedSet<LoopTemplateLoopElementModel> getLoopElementModelsUsed() {
- return loopElementModelsUsed;
- }
-
- /**
- * maximumInstancesAllowed getter.
- *
- * @return the maximumInstancesAllowed
- */
- public Integer getMaximumInstancesAllowed() {
- return maximumInstancesAllowed;
- }
-
- /**
- * maximumInstancesAllowed setter.
- *
- * @param maximumInstancesAllowed the maximumInstancesAllowed to set
- */
- public void setMaximumInstancesAllowed(Integer maximumInstancesAllowed) {
- this.maximumInstancesAllowed = maximumInstancesAllowed;
- }
-
- /**
- * allowedLoopType getter.
- *
- * @return the allowedLoopType Type of Loop allowed to be created
- */
- public LoopType getAllowedLoopType() {
- return allowedLoopType;
- }
-
- /**
- * allowedLoopType setter.
- *
- * @param allowedLoopType the allowedLoopType to set
- */
- public void setAllowedLoopType(LoopType allowedLoopType) {
- this.allowedLoopType = allowedLoopType;
- }
-
- /**
- * Add list of loopElements to the current template, each loopElementModel is
- * added at the end of the list so the flowOrder is computed automatically.
- *
- * @param loopElementModels The loopElementModel set to add
- */
- public void addLoopElementModels(Set<LoopElementModel> loopElementModels) {
- for (LoopElementModel loopElementModel : loopElementModels) {
- addLoopElementModel(loopElementModel);
- }
- }
-
- /**
- * Add a loopElement to the current template, the loopElementModel is added at
- * the end of the list so the flowOrder is computed automatically.
- *
- * @param loopElementModel The loopElementModel to add
- */
- public void addLoopElementModel(LoopElementModel loopElementModel) {
- this.addLoopElementModel(loopElementModel, this.loopElementModelsUsed.size());
- }
-
- /**
- * Add a loopElement model to the current template, the flow order must be
- * specified manually.
- *
- * @param loopElementModel The loopElementModel to add
- * @param listPosition The position in the flow
- */
- public void addLoopElementModel(LoopElementModel loopElementModel, Integer listPosition) {
- LoopTemplateLoopElementModel jointEntry =
- new LoopTemplateLoopElementModel(this, loopElementModel, listPosition);
- this.loopElementModelsUsed.add(jointEntry);
- loopElementModel.getUsedByLoopTemplates().add(jointEntry);
- }
-
- /**
- * modelService getter.
- *
- * @return the modelService
- */
- public Service getModelService() {
- return modelService;
- }
-
- /**
- * modelService setter.
- *
- * @param modelService the modelService to set
- */
- public void setModelService(Service modelService) {
- this.modelService = modelService;
- }
-
- /**
- * uniqueBlueprint getter.
- *
- * @return the uniqueBlueprint
- */
- public boolean getUniqueBlueprint() {
- return uniqueBlueprint;
- }
-
- /**
- * Default constructor for serialization.
- */
- public LoopTemplate() {
-
- }
-
- /**
- * Constructor.
- *
- * @param name The loop template name id
- * @param blueprint The blueprint containing all microservices (legacy
- * case)
- * @param maxInstancesAllowed The maximum number of instances that can be
- * created from that template
- * @param service The service associated to that loop template
- */
- public LoopTemplate(String name, String blueprint, Integer maxInstancesAllowed, Service service) {
- this.name = name;
- this.setBlueprint(blueprint);
-
- this.maximumInstancesAllowed = maxInstancesAllowed;
- this.modelService = service;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- LoopTemplate other = (LoopTemplate) obj;
- if (name == null) {
- if (other.name != null) {
- return false;
- }
- } else if (!name.equals(other.name)) {
- return false;
- }
- return true;
- }
-
- /**
- * Generate the loop template name.
- *
- * @param serviceName The service name
- * @param serviceVersion The service version
- * @param resourceName The resource name
- * @param blueprintFileName The blueprint file name
- * @return The generated loop template name
- */
- public static String generateLoopTemplateName(String serviceName, String serviceVersion,
- String resourceName, String blueprintFileName) {
- StringBuilder buffer = new StringBuilder("LOOP_TEMPLATE_").append(serviceName).append("_v")
- .append(serviceVersion).append("_").append(resourceName).append("_")
- .append(blueprintFileName.replaceAll(".yaml", ""));
- return buffer.toString().replace('.', '_').replaceAll(" ", "");
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplateLoopElementModel.java b/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplateLoopElementModel.java
deleted file mode 100644
index c0b0c7d24..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplateLoopElementModel.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.template;
-
-import com.google.gson.annotations.Expose;
-import java.io.Serializable;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.MapsId;
-import javax.persistence.Table;
-
-@Entity
-@Table(name = "looptemplates_to_loopelementmodels")
-public class LoopTemplateLoopElementModel implements Serializable, Comparable<LoopTemplateLoopElementModel> {
-
- /**
- * Serial ID.
- */
- private static final long serialVersionUID = 5924989899078094245L;
-
- @EmbeddedId
- private LoopTemplateLoopElementModelId loopTemplateLoopElementModelId;
-
- @ManyToOne(fetch = FetchType.LAZY)
- @MapsId("loopTemplateName")
- @JoinColumn(name = "loop_template_name")
- private LoopTemplate loopTemplate;
-
- @Expose
- @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH })
- @MapsId("loopElementModelName")
- @JoinColumn(name = "loop_element_model_name")
- private LoopElementModel loopElementModel;
-
- @Expose
- @Column(nullable = false, name = "flow_order")
- private Integer flowOrder;
-
- /**
- * Default constructor for serialization.
- */
- public LoopTemplateLoopElementModel() {
-
- }
-
- /**
- * Constructor.
- *
- * @param loopTemplate The loop template object
- * @param loopElementModel The loopElementModel object
- * @param flowOrder The position of the micro service in the flow
- */
- public LoopTemplateLoopElementModel(LoopTemplate loopTemplate, LoopElementModel loopElementModel,
- Integer flowOrder) {
- this.loopTemplate = loopTemplate;
- this.loopElementModel = loopElementModel;
- this.flowOrder = flowOrder;
- this.loopTemplateLoopElementModelId = new LoopTemplateLoopElementModelId(loopTemplate.getName(),
- loopElementModel.getName());
- }
-
- /**
- * loopTemplate getter.
- *
- * @return the loopTemplate
- */
- public LoopTemplate getLoopTemplate() {
- return loopTemplate;
- }
-
- /**
- * loopTemplate setter.
- *
- * @param loopTemplate the loopTemplate to set
- */
- public void setLoopTemplate(LoopTemplate loopTemplate) {
- this.loopTemplate = loopTemplate;
- }
-
- /**
- * loopElementModel getter.
- *
- * @return the loopElementModel
- */
- public LoopElementModel getLoopElementModel() {
- return loopElementModel;
- }
-
- /**
- * loopElementModel setter.
- *
- * @param loopElementModel the loopElementModel to set
- */
- public void setLoopElementModel(LoopElementModel loopElementModel) {
- this.loopElementModel = loopElementModel;
- }
-
- /**
- * flowOrder getter.
- *
- * @return the flowOrder
- */
- public Integer getFlowOrder() {
- return flowOrder;
- }
-
- /**
- * flowOrder setter.
- *
- * @param flowOrder the flowOrder to set
- */
- public void setFlowOrder(Integer flowOrder) {
- this.flowOrder = flowOrder;
- }
-
- @Override
- public int compareTo(LoopTemplateLoopElementModel arg0) {
- // Reverse it, so that by default we have the latest
- if (getFlowOrder() == null) {
- return 1;
- }
- if (arg0.getFlowOrder() == null) {
- return -1;
- }
- return arg0.getFlowOrder().compareTo(this.getFlowOrder());
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((loopTemplate == null) ? 0 : loopTemplate.hashCode());
- result = prime * result + ((loopElementModel == null) ? 0 : loopElementModel.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- LoopTemplateLoopElementModel other = (LoopTemplateLoopElementModel) obj;
- if (loopTemplate == null) {
- if (other.loopTemplate != null) {
- return false;
- }
- } else if (!loopTemplate.equals(other.loopTemplate)) {
- return false;
- }
- if (loopElementModel == null) {
- if (other.loopElementModel != null) {
- return false;
- }
- } else if (!loopElementModel.equals(other.loopElementModel)) {
- return false;
- }
- return true;
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplateLoopElementModelId.java b/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplateLoopElementModelId.java
deleted file mode 100644
index 9da8272bd..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplateLoopElementModelId.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.template;
-
-import com.google.gson.annotations.Expose;
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-
-@Embeddable
-public class LoopTemplateLoopElementModelId implements Serializable {
-
- /**
- * Serial ID.
- */
- private static final long serialVersionUID = 4089888115504914773L;
-
- @Expose
- @Column(name = "loop_template_name")
- private String loopTemplateName;
-
- @Expose
- @Column(name = "loop_element_model_name")
- private String loopElementModelName;
-
- /**
- * Default constructor for serialization.
- */
- public LoopTemplateLoopElementModelId() {
-
- }
-
- /**
- * Constructor.
- *
- * @param loopTemplateName The loop template name id
- * @param microServiceModelName THe micro Service name id
- */
- public LoopTemplateLoopElementModelId(String loopTemplateName, String microServiceModelName) {
- this.loopTemplateName = loopTemplateName;
- this.loopElementModelName = microServiceModelName;
- }
-
- /**
- * loopTemplateName getter.
- *
- * @return the loopTemplateName
- */
- public String getLoopTemplateName() {
- return loopTemplateName;
- }
-
- /**
- * loopTemplateName setter.
- *
- * @param loopTemplateName the loopTemplateName to set
- */
- public void setLoopTemplateName(String loopTemplateName) {
- this.loopTemplateName = loopTemplateName;
- }
-
- /**
- * microServiceModelName getter.
- *
- * @return the microServiceModelName
- */
- public String getLoopElementModelName() {
- return loopElementModelName;
- }
-
- /**
- * loopElementModelName setter.
- *
- * @param loopElementModelName the loopElementModelName to set
- */
- public void setLoopElementModelName(String loopElementModelName) {
- this.loopElementModelName = loopElementModelName;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplatesRepository.java b/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplatesRepository.java
deleted file mode 100644
index 3993dee34..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplatesRepository.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.template;
-
-import java.util.List;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface LoopTemplatesRepository extends JpaRepository<LoopTemplate, String> {
-
- @Query("SELECT looptemplate.name FROM LoopTemplate as looptemplate")
- List<String> getAllLoopTemplateNames();
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplatesService.java b/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplatesService.java
deleted file mode 100644
index 974cf3b5c..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/template/LoopTemplatesService.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.loop.template;
-
-import java.util.List;
-import org.onap.policy.clamp.clds.sdc.controller.installer.ChainGenerator;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class LoopTemplatesService {
-
- private final LoopTemplatesRepository loopTemplatesRepository;
-
- @Autowired
- ChainGenerator chainGenerator;
-
- /**
- * Constructor.
- */
- @Autowired
- public LoopTemplatesService(LoopTemplatesRepository loopTemplatesRepository) {
- this.loopTemplatesRepository = loopTemplatesRepository;
-
- }
-
- public LoopTemplate saveOrUpdateLoopTemplate(LoopTemplate loopTemplate) {
- return loopTemplatesRepository.save(loopTemplate);
- }
-
- public List<String> getLoopTemplateNames() {
- return loopTemplatesRepository.getAllLoopTemplateNames();
- }
-
- public List<LoopTemplate> getAllLoopTemplates() {
- return loopTemplatesRepository.findAll();
- }
-
- public LoopTemplate getLoopTemplate(String name) {
- return loopTemplatesRepository.findById(name).orElse(null);
- }
-
- public void deleteLoopTemplate(String name) {
- loopTemplatesRepository.deleteById(name);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/template/LoopType.java b/src/main/java/org/onap/policy/clamp/loop/template/LoopType.java
deleted file mode 100644
index eacfecb5e..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/template/LoopType.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.loop.template;
-
-/**
- * Enums for AllowedLoopType in LoopTemplate enity.
- *
- */
-public enum LoopType {
- OPEN("OPEN"), CLOSED("CLOSED"), HYBRID("HYBRID");
-
- private String value;
-
- private LoopType(String value) {
- this.value = value;
- }
-
- public String getValue() {
- return value;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/template/LoopTypeConvertor.java b/src/main/java/org/onap/policy/clamp/loop/template/LoopTypeConvertor.java
deleted file mode 100644
index 81ca18d57..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/template/LoopTypeConvertor.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.loop.template;
-
-import java.util.stream.Stream;
-import javax.persistence.AttributeConverter;
-
-/**
- * Attribute Converter to allow using LoopType Enum values in DB and Java classes.
- *
- */
-public class LoopTypeConvertor implements AttributeConverter<LoopType, String> {
-
- @Override
- public String convertToDatabaseColumn(LoopType loopType) {
- if (loopType == null) {
- return null;
- }
- return loopType.getValue();
- }
-
- @Override
- public LoopType convertToEntityAttribute(String value) {
- if (value == null) {
- return null;
- }
-
- return Stream.of(LoopType.values()).filter(c -> c.getValue().equals(value)).findFirst()
- .orElseThrow(IllegalArgumentException::new);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/template/PolicyModel.java b/src/main/java/org/onap/policy/clamp/loop/template/PolicyModel.java
deleted file mode 100644
index 2414377d7..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/template/PolicyModel.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.template;
-
-import com.google.gson.JsonObject;
-import com.google.gson.annotations.Expose;
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.IdClass;
-import javax.persistence.ManyToMany;
-import javax.persistence.Table;
-import org.hibernate.annotations.Type;
-import org.hibernate.annotations.TypeDef;
-import org.hibernate.annotations.TypeDefs;
-import org.onap.policy.clamp.dao.model.jsontype.StringJsonUserType;
-import org.onap.policy.clamp.loop.common.AuditEntity;
-import org.onap.policy.clamp.util.SemanticVersioning;
-
-/**
- * This class represents the policy model tosca revision that we can have to a
- * specific microservice.
- */
-@Entity
-@Table(name = "policy_models")
-@IdClass(PolicyModelId.class)
-@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)})
-public class PolicyModel extends AuditEntity implements Serializable, Comparable<PolicyModel> {
-
- /**
- * The serial version id.
- */
- private static final long serialVersionUID = -286522705701376645L;
-
- /**
- * This variable is used to store the type mentioned in the micro-service
- * blueprint.
- */
- @Id
- @Expose
- @Column(nullable = false, name = "policy_model_type")
- private String policyModelType;
-
- /**
- * Semantic versioning on policy side.
- */
- @Id
- @Expose
- @Column(name = "version", nullable = false)
- private String version;
-
- @Column(columnDefinition = "MEDIUMTEXT", name = "policy_tosca")
- private String policyModelTosca;
-
- @Expose
- @Column(name = "policy_acronym")
- private String policyAcronym;
-
- @ManyToMany(mappedBy = "policyModels", fetch = FetchType.EAGER)
- private Set<LoopElementModel> usedByElementModels = new HashSet<>();
-
- @Expose
- @Type(type = "json")
- @Column(columnDefinition = "json", name = "policy_pdp_group")
- private JsonObject policyPdpGroup;
-
- /**
- * usedByElementModels getter.
- *
- * @return the usedByElementModels
- */
- public Set<LoopElementModel> getUsedByElementModels() {
- return usedByElementModels;
- }
-
- /**
- * policyPdpGroup getter.
- *
- * @return the policyPdpGroup
- */
- public JsonObject getPolicyPdpGroup() {
- return policyPdpGroup;
- }
-
- /**
- * policyPdpGroup setter.
- *
- * @param policyPdpGroup the policyPdpGroup to set
- */
- public void setPolicyPdpGroup(JsonObject policyPdpGroup) {
- this.policyPdpGroup = policyPdpGroup;
- }
-
- /**
- * policyModelTosca getter.
- *
- * @return the policyModelTosca
- */
- public String getPolicyModelTosca() {
- return policyModelTosca;
- }
-
- /**
- * policyModelTosca setter.
- *
- * @param policyModelTosca the policyModelTosca to set
- */
- public void setPolicyModelTosca(String policyModelTosca) {
- this.policyModelTosca = policyModelTosca;
- }
-
- /**
- * policyModelType getter.
- *
- * @return the modelType
- */
- public String getPolicyModelType() {
- return policyModelType;
- }
-
- /**
- * policyModelType setter.
- *
- * @param modelType the modelType to set
- */
- public void setPolicyModelType(String modelType) {
- this.policyModelType = modelType;
- }
-
- /**
- * version getter.
- *
- * @return the version
- */
- public String getVersion() {
- return version;
- }
-
- /**
- * version setter.
- *
- * @param version the version to set
- */
- public void setVersion(String version) {
- // Try to convert it before
- this.version = version;
- }
-
- /**
- * policyAcronym getter.
- *
- * @return the policyAcronym value
- */
- public String getPolicyAcronym() {
- return policyAcronym;
- }
-
- /**
- * policyAcronym setter.
- *
- * @param policyAcronym The policyAcronym to set
- */
- public void setPolicyAcronym(String policyAcronym) {
- this.policyAcronym = policyAcronym;
- }
-
- /**
- * Default constructor for serialization.
- */
- public PolicyModel() {
- }
-
- /**
- * Constructor.
- *
- * @param policyType The policyType (referenced in the blueprint
- * @param policyModelTosca The policy tosca model in yaml
- * @param version the version like 1.0.0
- * @param policyAcronym Subtype for policy if it exists (could be used by UI)
- */
- public PolicyModel(String policyType, String policyModelTosca, String version,
- String policyAcronym) {
- this.policyModelType = policyType;
- this.policyModelTosca = policyModelTosca;
- this.version = version;
- this.policyAcronym = policyAcronym;
- if (this.policyAcronym == null) {
- this.policyAcronym = createDefaultPolicyAcronym(policyType);
- }
- }
-
- /**
- * Constructor with acronym generated by default from policyType.
- *
- * @param policyType The policyType (referenced in the blueprint
- * @param policyModelTosca The policy tosca model in yaml
- * @param version the version like 1.0.0
- */
- public PolicyModel(String policyType, String policyModelTosca, String version) {
- this(policyType, policyModelTosca, version, null);
- }
-
- public static String createDefaultPolicyAcronym(String policyType) {
- String[] policyNameArray = policyType.split("\\.");
- return policyNameArray[policyNameArray.length - 1];
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((policyModelType == null) ? 0 : policyModelType.hashCode());
- result = prime * result + ((version == null) ? 0 : version.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- PolicyModel other = (PolicyModel) obj;
- if (policyModelType == null) {
- if (other.policyModelType != null) {
- return false;
- }
- } else if (!policyModelType.equals(other.policyModelType)) {
- return false;
- }
- if (version == null) {
- if (other.version != null) {
- return false;
- }
- } else if (!version.equals(other.version)) {
- return false;
- }
- return true;
- }
-
- @Override
- public int compareTo(PolicyModel arg0) {
-
- if (this.getPolicyModelType().equals(arg0.getPolicyModelType())) {
- // Reverse it, so that by default we have the latest in they are same model type
- return SemanticVersioning.compare(arg0.getVersion(), this.version);
- } else {
- return this.getPolicyModelType().compareTo(arg0.getPolicyModelType());
- }
-
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelId.java b/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelId.java
deleted file mode 100644
index 2591bd174..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelId.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.template;
-
-import com.google.gson.annotations.Expose;
-import java.io.Serializable;
-
-public class PolicyModelId implements Serializable {
-
- /**
- * Serial Id.
- */
- private static final long serialVersionUID = -2846526482064334745L;
-
- @Expose
- private String policyModelType;
-
- @Expose
- private String version;
-
- /**
- * Default constructor for serialization.
- */
- public PolicyModelId() {
-
- }
-
- /**
- * Constructor.
- */
- public PolicyModelId(String policyModelType, String version) {
- this.policyModelType = policyModelType;
- this.version = version;
- }
-
- /**
- * policyModelType getter.
- *
- * @return the policyModelType
- */
- public String getPolicyModelType() {
- return policyModelType;
- }
-
- /**
- * policyModelType setter.
- *
- * @param policyModelType the policyModelType to set
- */
- public void setPolicyModelType(String policyModelType) {
- this.policyModelType = policyModelType;
- }
-
- /**
- * version getter.
- *
- * @return the version
- */
- public String getVersion() {
- return version;
- }
-
- /**
- * version setter.
- *
- * @param version the version to set
- */
- public void setVersion(String version) {
- this.version = version;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsRepository.java b/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsRepository.java
deleted file mode 100644
index 6ff7e3d0c..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsRepository.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.loop.template;
-
-import java.util.List;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface PolicyModelsRepository extends JpaRepository<PolicyModel, PolicyModelId> {
- @Query("SELECT policymodel.policyModelType FROM PolicyModel as policymodel")
- List<String> getAllPolicyModelType();
-
- List<PolicyModel> findByPolicyModelType(String policyModelType);
-}
diff --git a/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java b/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java
deleted file mode 100644
index fea58c552..000000000
--- a/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020-2021 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.policy.clamp.loop.template;
-
-import com.google.gson.JsonObject;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import org.onap.policy.clamp.clds.tosca.ToscaSchemaConstants;
-import org.onap.policy.clamp.clds.tosca.ToscaYamlToJsonConvertor;
-import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
-import org.onap.policy.clamp.clds.tosca.update.parser.ToscaConverterToJsonSchema;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.onap.policy.clamp.policy.pdpgroup.PdpGroupsAnalyzer;
-import org.onap.policy.clamp.util.SemanticVersioning;
-import org.onap.policy.models.pdp.concepts.PdpGroups;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * This class contains the methods to access the policyModel object in db.
- */
-@Service
-public class PolicyModelsService {
- private final PolicyModelsRepository policyModelsRepository;
- /**
- * This variable is there to support legacy saving of the tosca from the clamp UI.
- */
- private ToscaYamlToJsonConvertor toscaYamlToJsonConvertor;
-
- /**
- * This is the new tosca converter that must be used in clamp.
- */
- @Autowired
- private ToscaConverterWithDictionarySupport toscaConverterWithDictionarySupport;
-
- @Autowired
- public PolicyModelsService(PolicyModelsRepository policyModelrepo,
- ToscaYamlToJsonConvertor convertor) {
- policyModelsRepository = policyModelrepo;
- toscaYamlToJsonConvertor = convertor;
- }
-
- /**
- * Save or Update Policy Model.
- *
- * @param policyModel The policyModel
- * @return The Policy Model
- */
- public PolicyModel saveOrUpdatePolicyModel(PolicyModel policyModel) {
- return policyModelsRepository.saveAndFlush(policyModel);
- }
-
- /**
- * Verify whether Policy Model exist by ID.
- *
- * @param policyModelId The policyModel Id
- * @return The flag indicates whether Policy Model exist
- */
- public boolean existsById(PolicyModelId policyModelId) {
- return policyModelsRepository.existsById(policyModelId);
- }
-
- /**
- * Creates or updates the Tosca Policy Model.
- *
- * @param policyModelTosca The Policymodel object
- * @return The Policy Model created
- */
- public PolicyModel createNewPolicyModelFromTosca(String policyModelTosca) {
- JsonObject jsonObject = toscaYamlToJsonConvertor.validateAndConvertToJson(policyModelTosca);
- String policyModelTypeFromTosca = toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
- ToscaSchemaConstants.METADATA_POLICY_MODEL_TYPE);
- Iterable<PolicyModel> models = getAllPolicyModelsByType(policyModelTypeFromTosca);
- Collections.sort((List<PolicyModel>) models);
- PolicyModel newPolicyModel = new PolicyModel(policyModelTypeFromTosca, policyModelTosca,
- SemanticVersioning.incrementMajorVersion(((ArrayList) models).isEmpty() ? null
- : ((ArrayList<PolicyModel>) models).get(0).getVersion()),
- toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
- ToscaSchemaConstants.METADATA_ACRONYM));
- return saveOrUpdatePolicyModel(newPolicyModel);
- }
-
- /**
- * Update an existing Tosca Policy Model.
- *
- * @param policyModelType The policy Model type in Tosca yaml
- * @param policyModelVersion The policy Version to update
- * @param policyModelTosca The Policy Model tosca
- * @return The Policy Model updated
- */
- public PolicyModel updatePolicyModelTosca(String policyModelType, String policyModelVersion,
- String policyModelTosca) {
- JsonObject jsonObject = toscaYamlToJsonConvertor.validateAndConvertToJson(policyModelTosca);
- PolicyModel thePolicyModel = getPolicyModel(policyModelType, policyModelVersion);
- thePolicyModel.setPolicyAcronym(toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
- ToscaSchemaConstants.METADATA_ACRONYM));
- thePolicyModel.setPolicyModelTosca(policyModelTosca);
- return saveOrUpdatePolicyModel(thePolicyModel);
- }
-
- /**
- * This method retrieves the tosca model and convert it to a Json schema.
- * That json schema is normally used by the UI.
- *
- * @param policyType The policy model type id
- * @param policyTypeVersion The policy model type version
- * @return A JsonObject with the json schema describing the tosca
- */
- public JsonObject getPolicyModelJson(String policyType, String policyTypeVersion) {
- PolicyModel thePolicyModel = getPolicyModel(policyType, policyTypeVersion);
- // In the following use case we are not in the context of a closed loop, so the enrichment
- // of the json cannot be done, that's why the serviceModel provided is NULL.
- return toscaConverterWithDictionarySupport
- .convertToscaToJsonSchemaObject(thePolicyModel.getPolicyModelTosca(), policyType, null);
- }
-
- public List<String> getAllPolicyModelTypes() {
- return policyModelsRepository.getAllPolicyModelType();
- }
-
- public Iterable<PolicyModel> getAllPolicyModels() {
- return policyModelsRepository.findAll();
- }
-
- public PolicyModel getPolicyModel(String type, String version) {
- return policyModelsRepository.findById(new PolicyModelId(type, version)).orElse(null);
- }
-
- public Iterable<PolicyModel> getAllPolicyModelsByType(String type) {
- return policyModelsRepository.findByPolicyModelType(type);
- }
-
- /**
- * Retrieves the Tosca model Yaml string.
- *
- * @param type The Policy Model Type
- * @param version The policy model version
- * @return The Tosca model Yaml string
- */
- public String getPolicyModelTosca(String type, String version) {
- return policyModelsRepository.findById(new PolicyModelId(type, version))
- .orElse(new PolicyModel()).getPolicyModelTosca();
- }
-
- /**
- * This method creates an PolicyModel in Db if it does not exist.
- *
- * @param policyModel The policyModel to save
- */
- @Transactional(propagation = Propagation.REQUIRES_NEW)
- public PolicyModel savePolicyModelInNewTransaction(PolicyModel policyModel) {
- return policyModelsRepository.saveAndFlush(policyModel);
- }
-
- /**
- * Update the Pdp Group info in Policy Model DB.
- *
- * @param pdpGroups The list of Pdp Group info received from Policy Engine
- */
- public void updatePdpGroupInfo(PdpGroups pdpGroups) {
- List<PolicyModel> policyModelsList = policyModelsRepository.findAll();
- PdpGroupsAnalyzer.updatePdpGroupOfPolicyModels(policyModelsList, pdpGroups);
- this.policyModelsRepository.saveAll(policyModelsList);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/policy/Policy.java b/src/main/java/org/onap/policy/clamp/policy/Policy.java
deleted file mode 100644
index f8bdab6c2..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/Policy.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP POLICY-CLAMP
- * ================================================================================
- * Copyright (C) 2019 Nokia Intellectual Property. All rights
- * reserved.
- * ================================================================================
- * Modifications Copyright (C) 2021 AT&T
- * ================================================================================
- * 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.policy.clamp.policy;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import com.google.gson.annotations.Expose;
-import java.io.UnsupportedEncodingException;
-import java.util.Map;
-import javax.persistence.Column;
-import javax.persistence.FetchType;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
-import javax.persistence.ManyToOne;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.Transient;
-import org.hibernate.annotations.Type;
-import org.hibernate.annotations.TypeDef;
-import org.hibernate.annotations.TypeDefs;
-import org.json.JSONObject;
-import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
-import org.onap.policy.clamp.dao.model.jsontype.StringJsonUserType;
-import org.onap.policy.clamp.loop.common.AuditEntity;
-import org.onap.policy.clamp.loop.service.Service;
-import org.onap.policy.clamp.loop.template.LoopElementModel;
-import org.onap.policy.clamp.loop.template.PolicyModel;
-import org.yaml.snakeyaml.Yaml;
-
-@MappedSuperclass
-@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)})
-public abstract class Policy extends AuditEntity {
-
- @Transient
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(Policy.class);
-
- @Expose
- @Type(type = "json")
- @Column(columnDefinition = "json", name = "json_representation", nullable = false)
- private JsonObject jsonRepresentation;
-
- @Expose
- @Type(type = "json")
- @Column(columnDefinition = "json", name = "configurations_json")
- private JsonObject configurationsJson;
-
- /**
- * This attribute can be null when the user add a policy on the loop instance, not the template.
- * When null, It therefore indicates that this policy is not by default in the loop template.
- */
- @Expose
- @ManyToOne(fetch = FetchType.EAGER)
- @JoinColumn(name = "loop_element_model_id")
- private LoopElementModel loopElementModel;
-
- @Expose
- @Column(name = "pdp_group")
- private String pdpGroup;
-
- @Expose
- @Column(name = "pdp_sub_group")
- private String pdpSubgroup;
-
- @Expose
- @ManyToOne(fetch = FetchType.EAGER)
- @JoinColumns({@JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"),
- @JoinColumn(name = "policy_model_version", referencedColumnName = "version")})
- private PolicyModel policyModel;
-
- /**
- * This method create the policy payload that must be sent to PEF.
- *
- * @return A String containing the payload
- * @throws UnsupportedEncodingException In case of failure
- */
- public String createPolicyPayload() throws UnsupportedEncodingException {
- return PolicyPayload
- .createPolicyPayload(this.getPolicyModel().getPolicyModelType(), this.getPolicyModel().getVersion(),
- this.getName(), this.getPolicyModel().getVersion(), this.getConfigurationsJson(),
- this.getPolicyModel() != null ? this.getPolicyModel().getPolicyModelTosca() : "");
- }
-
- /**
- * Name getter.
- *
- * @return the name
- */
- public abstract String getName();
-
- /**
- * Name setter.
- */
- public abstract void setName(String name);
-
- /**
- * jsonRepresentation getter.
- *
- * @return the jsonRepresentation
- */
- public JsonObject getJsonRepresentation() {
- return jsonRepresentation;
- }
-
- /**
- * jsonRepresentation setter.
- *
- * @param jsonRepresentation The jsonRepresentation to set
- */
- public void setJsonRepresentation(JsonObject jsonRepresentation) {
- this.jsonRepresentation = jsonRepresentation;
- }
-
- /**
- * Regenerate the Policy Json Representation.
- *
- * @param toscaConverter The tosca converter required to regenerate the json schema
- * @param serviceModel The service model associated
- */
- public abstract void updateJsonRepresentation(ToscaConverterWithDictionarySupport toscaConverter,
- Service serviceModel);
-
- /**
- * policyModel getter.
- *
- * @return the policyModel
- */
- public PolicyModel getPolicyModel() {
- return policyModel;
- }
-
- /**
- * policyModel setter.
- *
- * @param policyModel The new policyModel
- */
- public void setPolicyModel(PolicyModel policyModel) {
- this.policyModel = policyModel;
- }
-
- /**
- * configurationsJson getter.
- *
- * @return The configurationsJson
- */
- public JsonObject getConfigurationsJson() {
- return configurationsJson;
- }
-
- /**
- * configurationsJson setter.
- *
- * @param configurationsJson the configurationsJson to set
- */
- public void setConfigurationsJson(JsonObject configurationsJson) {
- this.configurationsJson = configurationsJson;
- }
-
- /**
- * loopElementModel getter.
- *
- * @return the loopElementModel
- */
- public LoopElementModel getLoopElementModel() {
- return loopElementModel;
- }
-
- /**
- * loopElementModel setter.
- *
- * @param loopElementModel the loopElementModel to set
- */
- public void setLoopElementModel(LoopElementModel loopElementModel) {
- this.loopElementModel = loopElementModel;
- }
-
- /**
- * pdpGroup getter.
- *
- * @return the pdpGroup
- */
- public String getPdpGroup() {
- return pdpGroup;
- }
-
- /**
- * pdpGroup setter.
- *
- * @param pdpGroup the pdpGroup to set
- */
- public void setPdpGroup(String pdpGroup) {
- this.pdpGroup = pdpGroup;
- }
-
- /**
- * pdpSubgroup getter.
- *
- * @return the pdpSubgroup
- */
- public String getPdpSubgroup() {
- return pdpSubgroup;
- }
-
- /**
- * pdpSubgroup setter.
- *
- * @param pdpSubgroup the pdpSubgroup to set
- */
- public void setPdpSubgroup(String pdpSubgroup) {
- this.pdpSubgroup = pdpSubgroup;
- }
-
- /**
- * Generate the policy name.
- *
- * @param policyType The policy type
- * @param serviceName The service name
- * @param serviceVersion The service version
- * @param resourceName The resource name
- * @param blueprintFilename The blueprint file name
- * @return The generated policy name
- */
- public static String generatePolicyName(String policyType, String serviceName, String serviceVersion,
- String resourceName, String blueprintFilename) {
- StringBuilder buffer = new StringBuilder(policyType).append("_").append(serviceName).append("_v")
- .append(serviceVersion).append("_").append(resourceName).append("_")
- .append(blueprintFilename.replaceAll(".yaml", ""));
- return buffer.toString().replace('.', '_').replaceAll(" ", "");
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/policy/PolicyEngineServices.java b/src/main/java/org/onap/policy/clamp/policy/PolicyEngineServices.java
deleted file mode 100644
index bdd77cb41..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/PolicyEngineServices.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020-2021 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.policy.clamp.policy;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
-import org.apache.camel.builder.ExchangeBuilder;
-import org.onap.policy.clamp.clds.config.ClampProperties;
-import org.onap.policy.clamp.clds.sdc.controller.installer.BlueprintMicroService;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.onap.policy.clamp.loop.template.PolicyModel;
-import org.onap.policy.clamp.loop.template.PolicyModelsService;
-import org.onap.policy.models.pdp.concepts.PdpGroups;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.yaml.snakeyaml.DumperOptions;
-import org.yaml.snakeyaml.Yaml;
-
-
-/**
- * The class implements the communication with the Policy Engine to retrieve
- * policy models (tosca). It mainly delegates the physical calls to Camel
- * engine.
- * It supports a retry mechanism for these calls, configurations can be specified in the
- * application.properties "policy.retry.interval"(default 0) and "policy.retry.limit"(default 1).
- */
-@Component
-public class PolicyEngineServices {
- private final CamelContext camelContext;
-
- private final PolicyModelsService policyModelsService;
-
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyEngineServices.class);
- private static int retryInterval = 0;
- private static int retryLimit = 1;
-
- public static final String POLICY_RETRY_INTERVAL = "policy.retry.interval";
- public static final String POLICY_RETRY_LIMIT = "policy.retry.limit";
-
- /**
- * Default constructor.
- *
- * @param camelContext Camel context bean
- * @param clampProperties ClampProperties bean
- * @param policyModelsService policyModel service
- */
- @Autowired
- public PolicyEngineServices(CamelContext camelContext, ClampProperties clampProperties,
- PolicyModelsService policyModelsService) {
- this.camelContext = camelContext;
- this.policyModelsService = policyModelsService;
- if (clampProperties.getStringValue(POLICY_RETRY_LIMIT) != null) {
- retryLimit = Integer.parseInt(clampProperties.getStringValue(POLICY_RETRY_LIMIT));
- }
- if (clampProperties.getStringValue(POLICY_RETRY_INTERVAL) != null) {
- retryInterval = Integer.parseInt(clampProperties.getStringValue(POLICY_RETRY_INTERVAL));
- }
- }
-
- /**
- * This method query Policy engine and create a PolicyModel object with type and version.
- * If the policy already exist in the db it returns the existing one.
- *
- * @param policyType The policyType id
- * @param policyVersion The policy version of that type
- * @return A PolicyModel created from policyEngine data or null if nothing is found on policyEngine
- */
- public PolicyModel createPolicyModelFromPolicyEngine(String policyType, String policyVersion) {
- PolicyModel policyModelFound = policyModelsService.getPolicyModel(policyType, policyVersion);
- if (policyModelFound == null) {
- String policyTosca = this.downloadOnePolicyToscaModel(policyType, policyVersion);
- if (policyTosca != null && !policyTosca.isEmpty()) {
- return policyModelsService.savePolicyModelInNewTransaction(
- new PolicyModel(policyType, policyTosca, policyVersion));
- } else {
- logger.error("Policy not found in the Policy Engine, returning null: " + policyType
- + "/" + policyVersion);
- return null;
- }
- } else {
- logger.info("Skipping policy model download as it exists already in the database " + policyType
- + "/" + policyVersion);
- return policyModelFound;
- }
- }
-
- /**
- * This method query Policy engine and create a PolicyModel object with type and version.
- *
- * @param microService microservice object instance
- * @return A PolicyModel created from policyEngine data
- */
- public PolicyModel createPolicyModelFromPolicyEngine(BlueprintMicroService microService) {
- return createPolicyModelFromPolicyEngine(microService.getModelType(), microService.getModelVersion());
- }
-
- /**
- * This method synchronize the clamp database and the policy engine.
- * So it creates the required PolicyModel.
- */
- public void synchronizeAllPolicies() {
- LinkedHashMap<String, Object> loadedYaml;
- loadedYaml = new Yaml().load(downloadAllPolicyModels());
- if (loadedYaml == null || loadedYaml.isEmpty()) {
- logger.warn("getAllPolicyType yaml returned by policy engine could not be decoded, as it's null or empty");
- return;
- }
-
- LinkedHashMap<String, Object> policyTypesMap = (LinkedHashMap<String, Object>) loadedYaml
- .get("policy_types");
- policyTypesMap.forEach((key, value) ->
- this.createPolicyModelFromPolicyEngine(key,
- ((String) ((LinkedHashMap<String, Object>) value).get("version"))));
- }
-
- /**
- * This method can be used to download all policy types + data types defined in
- * policy engine.
- *
- * @return A yaml containing all policy Types and all data types
- */
- public String downloadAllPolicyModels() {
- return callCamelRoute(ExchangeBuilder.anExchange(camelContext).build(), "direct:get-all-policy-models",
- "Get all policies models");
- }
-
- /**
- * This method can be used to download a policy tosca model on the engine.
- *
- * @param policyType The policy type (id)
- * @param policyVersion The policy version
- * @return A string with the whole policy tosca model
- */
- public String downloadOnePolicyToscaModel(String policyType, String policyVersion) {
- logger.info("Downloading the policy tosca model " + policyType + "/" + policyVersion);
- DumperOptions options = new DumperOptions();
- options.setDefaultScalarStyle(DumperOptions.ScalarStyle.PLAIN);
- options.setIndent(4);
- options.setPrettyFlow(true);
- options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
- Yaml yamlParser = new Yaml(options);
- String responseBody = callCamelRoute(
- ExchangeBuilder.anExchange(camelContext).withProperty("policyModelType", policyType)
- .withProperty("policyModelVersion", policyVersion).build(), "direct:get-policy-tosca-model",
- "Get one policy");
-
- if (responseBody == null || responseBody.isEmpty()) {
- logger.warn("getPolicyToscaModel returned by policy engine could not be decoded, as it's null or empty");
- return null;
- }
-
- return yamlParser.dump((Map<String, Object>) yamlParser.load(responseBody));
- }
-
- /**
- * This method can be used to download all Pdp Groups data from policy engine.
- */
- public void downloadPdpGroups() {
- String responseBody =
- callCamelRoute(ExchangeBuilder.anExchange(camelContext).build(), "direct:get-all-pdp-groups",
- "Get Pdp Groups");
-
- if (responseBody == null || responseBody.isEmpty()) {
- logger.warn("getPdpGroups returned by policy engine could not be decoded, as it's null or empty");
- return;
- }
-
- policyModelsService.updatePdpGroupInfo(JsonUtils.GSON.fromJson(responseBody, PdpGroups.class));
- }
-
- private String callCamelRoute(Exchange exchange, String camelFlow, String logMsg) {
- for (int i = 0; i < retryLimit; i++) {
- Exchange exchangeResponse = camelContext.createProducerTemplate().send(camelFlow, exchange);
- if (Integer.valueOf(200).equals(exchangeResponse.getIn().getHeader("CamelHttpResponseCode"))) {
- return (String) exchangeResponse.getIn().getBody();
- } else {
- logger.info(logMsg + " query " + retryInterval + "ms before retrying ...");
- // wait for a while and try to connect to DCAE again
- try {
- Thread.sleep(retryInterval);
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- }
- return "";
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/policy/PolicyPayload.java b/src/main/java/org/onap/policy/clamp/policy/PolicyPayload.java
deleted file mode 100644
index d2c860150..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/PolicyPayload.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP POLICY-CLAMP
- * ================================================================================
- * Copyright (C) 2021 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.policy.clamp.policy;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import java.io.UnsupportedEncodingException;
-import java.util.Map;
-import org.apache.commons.lang3.StringUtils;
-import org.json.JSONObject;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.yaml.snakeyaml.Yaml;
-
-/**
- * This class is a utility class to create the policy payload.
- */
-public class PolicyPayload {
-
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyPayload.class);
-
- private static JsonObject createJsonFromPolicyTosca(String toscaContent) {
- Map<String, Object> map =
- new Yaml().load(!StringUtils.isEmpty(toscaContent) ? toscaContent : "");
- return JsonUtils.GSON.fromJson(new JSONObject(map).toString(), JsonObject.class);
- }
-
- /**
- * This method create the policy payload that must be sent to PEF.
- *
- * @return A String containing the payload
- * @throws UnsupportedEncodingException In case of failure
- */
- public static String createPolicyPayload(String policyModelType, String policyModelVersion, String policyName,
- String policyVersion, JsonObject policyProperties, String toscaContent)
- throws UnsupportedEncodingException {
- JsonObject policyPayloadResult = new JsonObject();
-
- policyPayloadResult.add("tosca_definitions_version",
- createJsonFromPolicyTosca(toscaContent).get("tosca_definitions_version"));
-
- JsonObject topologyTemplateNode = new JsonObject();
- policyPayloadResult.add("topology_template", topologyTemplateNode);
-
- JsonArray policiesArray = new JsonArray();
- topologyTemplateNode.add("policies", policiesArray);
-
- JsonObject thisPolicy = new JsonObject();
- policiesArray.add(thisPolicy);
-
- JsonObject policyDetails = new JsonObject();
- thisPolicy.add(policyName, policyDetails);
- policyDetails.addProperty("type", policyModelType);
- policyDetails.addProperty("type_version", policyModelVersion);
- policyDetails.addProperty("version", policyVersion);
- policyDetails.addProperty("name", policyName);
-
- JsonObject policyMetadata = new JsonObject();
- policyDetails.add("metadata", policyMetadata);
- policyMetadata.addProperty("policy-id", policyName);
- policyMetadata.addProperty("policy-version", policyVersion);
-
- policyDetails.add("properties", policyProperties);
-
- String policyPayload = JsonUtils.GSON.toJson(policyPayloadResult);
- logger.info("Policy payload: " + policyPayload);
- return policyPayload;
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/policy/PolicyService.java b/src/main/java/org/onap/policy/clamp/policy/PolicyService.java
deleted file mode 100644
index 35ffa2443..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/PolicyService.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 Nokia 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.policy.clamp.policy;
-
-import java.util.List;
-import java.util.Set;
-import org.onap.policy.clamp.loop.Loop;
-
-public interface PolicyService<T extends Policy> {
-
- Set<T> updatePolicies(Loop loop, List<T> newPolicies);
-
- boolean isExisting(String policyName);
-}
diff --git a/src/main/java/org/onap/policy/clamp/policy/downloader/PolicyEngineController.java b/src/main/java/org/onap/policy/clamp/policy/downloader/PolicyEngineController.java
deleted file mode 100644
index 81775e5da..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/downloader/PolicyEngineController.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020-2021 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.policy.clamp.policy.downloader;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.time.Instant;
-import org.json.simple.parser.ParseException;
-import org.onap.policy.clamp.loop.template.PolicyModelsRepository;
-import org.onap.policy.clamp.policy.PolicyEngineServices;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import org.springframework.scheduling.annotation.Scheduled;
-
-/**
- * This class implements a periodic job that is done in the background to
- * synchronize policy models available on the policy engine and the clamp
- * database table PolicyModel.
- */
-@Configuration
-@Profile("clamp-policy-controller")
-public class PolicyEngineController {
-
- protected static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyEngineController.class);
- protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
- protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
- public static final String POLICY_RETRY_INTERVAL = "policy.retry.interval";
- public static final String POLICY_RETRY_LIMIT = "policy.retry.limit";
-
- private final PolicyEngineServices policyEngineServices;
-
- private Instant lastInstantExecuted;
-
- @Autowired
- public PolicyEngineController(PolicyEngineServices policyEngineService,
- PolicyModelsRepository policyModelsRepository) {
- this.policyEngineServices = policyEngineService;
- }
-
- @Scheduled(fixedRate = 300000)
- public synchronized void synchronizeAllPolicies() {
- policyEngineServices.synchronizeAllPolicies();
- lastInstantExecuted = Instant.now();
- }
-
- public Instant getLastInstantExecuted() {
- return lastInstantExecuted;
- }
-
- @Scheduled(fixedRate = 300000)
- public synchronized void downloadPdpGroups() throws ParseException {
- policyEngineServices.downloadPdpGroups();
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicy.java b/src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicy.java
deleted file mode 100644
index 2e5db8e24..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicy.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.policy.microservice;
-
-import com.google.gson.JsonObject;
-import com.google.gson.annotations.Expose;
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-import javax.persistence.Table;
-import org.apache.commons.lang3.RandomStringUtils;
-import org.hibernate.annotations.TypeDef;
-import org.hibernate.annotations.TypeDefs;
-import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
-import org.onap.policy.clamp.dao.model.jsontype.StringJsonUserType;
-import org.onap.policy.clamp.loop.Loop;
-import org.onap.policy.clamp.loop.service.Service;
-import org.onap.policy.clamp.loop.template.LoopElementModel;
-import org.onap.policy.clamp.loop.template.PolicyModel;
-import org.onap.policy.clamp.policy.Policy;
-
-@Entity
-@Table(name = "micro_service_policies")
-@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)})
-public class MicroServicePolicy extends Policy implements Serializable {
- /**
- * The serial version ID.
- */
- private static final long serialVersionUID = 6271238288583332616L;
-
- @Expose
- @Id
- @Column(nullable = false, name = "name", unique = true)
- private String name;
-
- @Expose
- @Column(name = "context")
- private String context;
-
- @Expose
- @Column(name = "device_type_scope")
- private String deviceTypeScope;
-
- @Expose
- @Column(name = "shared", nullable = false)
- private Boolean shared;
-
- @ManyToMany(mappedBy = "microServicePolicies", fetch = FetchType.EAGER)
- private Set<Loop> usedByLoops = new HashSet<>();
-
- @Expose
- @Column(name = "dcae_deployment_id")
- private String dcaeDeploymentId;
-
- @Expose
- @Column(name = "dcae_deployment_status_url")
- private String dcaeDeploymentStatusUrl;
-
- @Expose
- @Column(name = "dcae_blueprint_id")
- private String dcaeBlueprintId;
-
- /**
- * Constructor for serialization.
- */
- public MicroServicePolicy() {
- }
-
- /**
- * The constructor that does not make use of ToscaYamlToJsonConvertor but take
- * the jsonRepresentation instead.
- *
- * @param name The name of the MicroService
- * @param policyModel The policy model type of the MicroService
- * @param shared The flag indicate whether the MicroService is
- * shared
- * @param jsonRepresentation The UI representation in json format
- * @param loopElementModel The loop element model from which this instance should be created
- * @param pdpGroup The Pdp Group info
- * @param pdpSubgroup The Pdp Subgroup info
- */
- public MicroServicePolicy(String name, PolicyModel policyModel, Boolean shared,
- JsonObject jsonRepresentation, LoopElementModel loopElementModel, String pdpGroup,
- String pdpSubgroup) {
- this.name = name;
- this.setPolicyModel(policyModel);
- this.shared = shared;
- this.setJsonRepresentation(jsonRepresentation);
- this.setLoopElementModel(loopElementModel);
- this.setPdpGroup(pdpGroup);
- this.setPdpSubgroup(pdpSubgroup);
- }
-
- /**
- * Constructor with tosca converter.
- *
- * @param loop The loop instance
- * @param service The service model object
- * @param loopElementModel The loop element model from which this microservice instance is created
- * @param toscaConverter The tosca converter that will used to convert the tosca policy model
- */
- public MicroServicePolicy(Loop loop, Service service, LoopElementModel loopElementModel,
- ToscaConverterWithDictionarySupport toscaConverter) {
- this(Policy.generatePolicyName("MICROSERVICE", service.getName(), service.getVersion(),
- loopElementModel.getPolicyModels().first().getPolicyAcronym() + '_'
- + loopElementModel.getPolicyModels().first().getVersion(),
- RandomStringUtils.randomAlphanumeric(3)),
- loopElementModel.getPolicyModels().first(), false, new JsonObject(), loopElementModel, null, null);
- this.updateJsonRepresentation(toscaConverter, service);
- }
-
- @Override
- public String getName() {
- return name;
- }
-
- /**
- * name setter.
- *
- * @param name the name to set
- */
- @Override
- public void setName(String name) {
- this.name = name;
- }
-
- @Override
- public void updateJsonRepresentation(ToscaConverterWithDictionarySupport toscaConverter, Service serviceModel) {
- this.setJsonRepresentation(
- toscaConverter.convertToscaToJsonSchemaObject(this.getPolicyModel().getPolicyModelTosca(),
- this.getPolicyModel().getPolicyModelType(), serviceModel));
- }
-
- public Boolean getShared() {
- return shared;
- }
-
- void setShared(Boolean shared) {
- this.shared = shared;
- }
-
- public Set<Loop> getUsedByLoops() {
- return usedByLoops;
- }
-
- void setUsedByLoops(Set<Loop> usedBy) {
- this.usedByLoops = usedBy;
- }
-
- public String getContext() {
- return context;
- }
-
- public void setContext(String context) {
- this.context = context;
- }
-
- public String getDeviceTypeScope() {
- return deviceTypeScope;
- }
-
- public void setDeviceTypeScope(String deviceTypeScope) {
- this.deviceTypeScope = deviceTypeScope;
- }
-
- /**
- * dcaeDeploymentId getter.
- *
- * @return the dcaeDeploymentId
- */
- public String getDcaeDeploymentId() {
- return dcaeDeploymentId;
- }
-
- /**
- * dcaeDeploymentId setter.
- *
- * @param dcaeDeploymentId the dcaeDeploymentId to set
- */
- public void setDcaeDeploymentId(String dcaeDeploymentId) {
- this.dcaeDeploymentId = dcaeDeploymentId;
- }
-
- /**
- * dcaeDeploymentStatusUrl getter.
- *
- * @return the dcaeDeploymentStatusUrl
- */
- public String getDcaeDeploymentStatusUrl() {
- return dcaeDeploymentStatusUrl;
- }
-
- /**
- * dcaeDeploymentStatusUrl setter.
- *
- * @param dcaeDeploymentStatusUrl the dcaeDeploymentStatusUrl to set
- */
- public void setDcaeDeploymentStatusUrl(String dcaeDeploymentStatusUrl) {
- this.dcaeDeploymentStatusUrl = dcaeDeploymentStatusUrl;
- }
-
- /**
- * dcaeBlueprintId getter.
- *
- * @return the dcaeBlueprintId
- */
- public String getDcaeBlueprintId() {
- return dcaeBlueprintId;
- }
-
- /**
- * dcaeBlueprintId setter.
- *
- * @param dcaeBlueprintId the dcaeBlueprintId to set
- */
- void setDcaeBlueprintId(String dcaeBlueprintId) {
- this.dcaeBlueprintId = dcaeBlueprintId;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- MicroServicePolicy other = (MicroServicePolicy) obj;
- if (name == null) {
- if (other.name != null) {
- return false;
- }
- } else if (!name.equals(other.name)) {
- return false;
- }
- return true;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicyRepository.java b/src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicyRepository.java
deleted file mode 100644
index 2ce2c4f17..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicyRepository.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.policy.microservice;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface MicroServicePolicyRepository extends JpaRepository<MicroServicePolicy, String> {
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicyService.java b/src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicyService.java
deleted file mode 100644
index b9871049e..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicyService.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 Nokia 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.policy.clamp.policy.microservice;
-
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
-import org.onap.policy.clamp.loop.Loop;
-import org.onap.policy.clamp.policy.PolicyService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class MicroServicePolicyService implements PolicyService<MicroServicePolicy> {
-
- private final MicroServicePolicyRepository microServiceRepository;
-
- @Autowired
- public MicroServicePolicyService(MicroServicePolicyRepository microServiceRepository) {
- this.microServiceRepository = microServiceRepository;
- }
-
- @Override
- public Set<MicroServicePolicy> updatePolicies(Loop loop, List<MicroServicePolicy> newMicroservicePolicies) {
- return newMicroservicePolicies.stream().map(policy -> getAndUpdateMicroServicePolicy(loop, policy))
- .collect(Collectors.toSet());
- }
-
- @Override
- public boolean isExisting(String policyName) {
- return microServiceRepository.existsById(policyName);
- }
-
- /**
- * Get and update the MicroService policy properties.
- *
- * @param loop The loop
- * @param policy The new MicroService policy
- * @return The updated MicroService policy
- */
- public MicroServicePolicy getAndUpdateMicroServicePolicy(Loop loop, MicroServicePolicy policy) {
- return microServiceRepository.save(
- microServiceRepository
- .findById(policy.getName()).map(p -> updateMicroservicePolicyProperties(p, policy, loop))
- .orElse(new MicroServicePolicy(policy.getName(), policy.getPolicyModel(),
- policy.getShared(), policy.getJsonRepresentation(), null, policy.getPdpGroup(),
- policy.getPdpSubgroup())));
- }
-
- private MicroServicePolicy updateMicroservicePolicyProperties(MicroServicePolicy oldPolicy,
- MicroServicePolicy newPolicy, Loop loop) {
- oldPolicy.setConfigurationsJson(newPolicy.getConfigurationsJson());
- if (!oldPolicy.getUsedByLoops().contains(loop)) {
- oldPolicy.getUsedByLoops().add(loop);
- }
- oldPolicy.setPdpGroup(newPolicy.getPdpGroup());
- oldPolicy.setPdpSubgroup(newPolicy.getPdpSubgroup());
- return oldPolicy;
- }
-
- /**
- * Update the MicroService policy deployment related parameters.
- *
- * @param microServicePolicy The micro service policy
- * @param deploymentId The deployment ID as returned by DCAE
- * @param deploymentUrl The Deployment URL as returned by DCAE
- */
- public void updateDcaeDeploymentFields(MicroServicePolicy microServicePolicy, String deploymentId,
- String deploymentUrl) {
- microServicePolicy.setDcaeDeploymentId(deploymentId);
- microServicePolicy.setDcaeDeploymentStatusUrl(deploymentUrl);
- microServiceRepository.saveAndFlush(microServicePolicy);
- }
-
-
- /**
- * Api to refresh the MicroService Policy UI window.
- *
- * @param microServicePolicy The micro Service policy object
- * @param toscaConverter The tosca converter required to convert the tosca model to json schema
- * @param loop As a microservice object can belong to multiple loops, we need it here
- */
- public void refreshMicroServicePolicyJsonRepresentation(MicroServicePolicy microServicePolicy,
- ToscaConverterWithDictionarySupport toscaConverter,
- Loop loop) {
- microServicePolicy.updateJsonRepresentation(toscaConverter, loop.getModelService());
- this.microServiceRepository.saveAndFlush(microServicePolicy);
-
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicy.java b/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicy.java
deleted file mode 100644
index 5b29f319c..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicy.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights
- * reserved.
- * Modifications Copyright (C) 2020 Huawei Technologies Co., Ltd.
- * ================================================================================
- * 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.policy.clamp.policy.operational;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonObject;
-import com.google.gson.annotations.Expose;
-import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-import javax.persistence.Transient;
-import org.apache.commons.lang3.RandomStringUtils;
-import org.hibernate.annotations.TypeDef;
-import org.hibernate.annotations.TypeDefs;
-import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
-import org.onap.policy.clamp.dao.model.jsontype.StringJsonUserType;
-import org.onap.policy.clamp.loop.Loop;
-import org.onap.policy.clamp.loop.service.Service;
-import org.onap.policy.clamp.loop.template.LoopElementModel;
-import org.onap.policy.clamp.loop.template.PolicyModel;
-import org.onap.policy.clamp.policy.Policy;
-
-@Entity
-@Table(name = "operational_policies")
-@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)})
-public class OperationalPolicy extends Policy implements Serializable {
- /**
- * The serial version ID.
- */
- private static final long serialVersionUID = 6117076450841538255L;
-
- @Transient
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(OperationalPolicy.class);
-
- @Id
- @Expose
- @Column(nullable = false, name = "name", unique = true)
- private String name;
-
- @ManyToOne(fetch = FetchType.LAZY)
- @JoinColumn(name = "loop_id", nullable = false)
- private Loop loop;
-
- /**
- * Constructor for serialization.
- */
- public OperationalPolicy() {
- }
-
- /**
- * The constructor.
- *
- * @param name The name of the operational policy
- * @param configurationsJson The operational policy property in the format of
- * json
- * @param jsonRepresentation The jsonObject defining the json schema
- * @param policyModel The policy model associated if any, can be null
- * @param loopElementModel The loop element from which this instance is supposed to be created
- * @param pdpGroup The Pdp Group info
- * @param pdpSubgroup The Pdp Subgroup info
- */
- public OperationalPolicy(String name, JsonObject configurationsJson,
- JsonObject jsonRepresentation, PolicyModel policyModel,
- LoopElementModel loopElementModel, String pdpGroup, String pdpSubgroup) {
- this.name = name;
- this.setPolicyModel(policyModel);
- this.setConfigurationsJson(configurationsJson);
- this.setPdpGroup(pdpGroup);
- this.setPdpSubgroup(pdpSubgroup);
- this.setLoopElementModel(loopElementModel);
- this.setJsonRepresentation(jsonRepresentation);
-
- }
-
- /**
- * Create an operational policy from a loop element model.
- *
- * @param loop The parent loop
- * @param service The loop service
- * @param loopElementModel The loop element model
- * @param toscaConverter The tosca converter that must be used to create the Json representation
- */
- public OperationalPolicy(Loop loop, Service service, LoopElementModel loopElementModel,
- ToscaConverterWithDictionarySupport toscaConverter) {
- this(Policy.generatePolicyName("OPERATIONAL", service.getName(), service.getVersion(),
- loopElementModel.getPolicyModels().first().getPolicyAcronym() + '_'
- + loopElementModel.getPolicyModels().first().getVersion(),
- RandomStringUtils.randomAlphanumeric(3)), new JsonObject(),
- new JsonObject(), loopElementModel.getPolicyModels().first(), loopElementModel, null, null);
- this.setLoop(loop);
- this.updateJsonRepresentation(toscaConverter, service);
- }
-
- /**
- * Create an operational policy from a policy model.
- *
- * @param loop The parent loop
- * @param service The loop service
- * @param policyModel The policy model
- * @param toscaConverter The tosca converter that must be used to create the Json representation
- */
- public OperationalPolicy(Loop loop, Service service, PolicyModel policyModel,
- ToscaConverterWithDictionarySupport toscaConverter) {
- this(Policy.generatePolicyName("OPERATIONAL", service.getName(), service.getVersion(),
- policyModel.getPolicyAcronym() + '_' + policyModel.getVersion(),
- RandomStringUtils.randomAlphanumeric(3)),
- new JsonObject(),
- new JsonObject(), policyModel, null, null, null);
- this.setLoop(loop);
- this.updateJsonRepresentation(toscaConverter, service);
- }
-
- public void setLoop(Loop loopName) {
- this.loop = loopName;
- }
-
- public Loop getLoop() {
- return loop;
- }
-
- @Override
- public String getName() {
- return name;
- }
-
- /**
- * name setter.
- *
- * @param name the name to set
- */
- @Override
- public void setName(String name) {
- this.name = name;
- }
-
- @Override
- public void updateJsonRepresentation(ToscaConverterWithDictionarySupport toscaConverter, Service serviceModel) {
- {
- this.setJsonRepresentation(new JsonObject());
- if (this.getPolicyModel() == null) {
- return;
- }
-
- // Generic Case
- this.setJsonRepresentation(toscaConverter.convertToscaToJsonSchemaObject(
- this.getPolicyModel().getPolicyModelTosca(),
- this.getPolicyModel().getPolicyModelType(), serviceModel));
-
- }
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- OperationalPolicy other = (OperationalPolicy) obj;
- if (name == null) {
- if (other.name != null) {
- return false;
- }
- } else {
- if (!name.equals(other.name)) {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public String createPolicyPayload() throws UnsupportedEncodingException {
- return super.createPolicyPayload();
-
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyRepository.java b/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyRepository.java
deleted file mode 100644
index b0a33669a..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyRepository.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.policy.operational;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface OperationalPolicyRepository extends JpaRepository<OperationalPolicy, String> {
- void deleteByName(String policyName);
-}
diff --git a/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java b/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java
deleted file mode 100644
index 8a1bb1abf..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java
+++ /dev/null
@@ -1,350 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights
- * reserved.
- * Modifications Copyright (C) 2020 Huawei Technologies Co., Ltd.
- * ================================================================================
- * 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.policy.clamp.policy.operational;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import java.io.IOException;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.onap.policy.clamp.clds.util.ResourceFileUtils;
-import org.onap.policy.clamp.loop.service.Service;
-
-public class OperationalPolicyRepresentationBuilder {
-
- private static final EELFLogger logger =
- EELFManager.getInstance().getLogger(OperationalPolicyRepresentationBuilder.class);
-
- public static final String PROPERTIES = "properties";
- public static final String ITEMS = "items";
- public static final String ANY_OF = "anyOf";
- public static final String TITLE = "title";
- public static final String RECIPE = "recipe";
- public static final String DEFAULT = "default";
- public static final String STRING = "string";
- public static final String TYPE = "type";
- public static final String TYPE_LIST = "list";
- public static final String TYPE_OBJECT = "object";
- public static final String TYPE_ARRAY = "array";
-
- private OperationalPolicyRepresentationBuilder() {
- throw new IllegalStateException("This is Utility class, not supposed to be initiated.");
- }
-
- /**
- * This method generates the operational policy json representation that will be
- * used by ui for rendering. It uses the model (VF and VFModule) defined in the
- * loop object to do so, so it's dynamic. It also uses the operational policy
- * schema template defined in the resource folder.
- *
- * @param modelJson The loop model json
- * @return The json representation
- */
- public static JsonObject generateOperationalPolicySchema(Service modelJson) {
-
- JsonObject jsonSchema = null;
- try {
- jsonSchema = JsonUtils.GSON.fromJson(
- ResourceFileUtils
- .getResourceAsString("clds/json-schema/operational_policies/operational_policy.json"),
- JsonObject.class);
- jsonSchema.get(PROPERTIES).getAsJsonObject()
- .get("operational_policy").getAsJsonObject().get(PROPERTIES).getAsJsonObject().get("policies")
- .getAsJsonObject().get(ITEMS).getAsJsonObject().get(PROPERTIES).getAsJsonObject().get("target")
- .getAsJsonObject().get(ANY_OF).getAsJsonArray().addAll(createAnyOfArray(modelJson, true));
-
- // update CDS recipe and payload information to schema
- JsonArray actors = jsonSchema.get(PROPERTIES).getAsJsonObject()
- .get("operational_policy").getAsJsonObject().get(PROPERTIES).getAsJsonObject().get("policies")
- .getAsJsonObject().get(ITEMS).getAsJsonObject().get(PROPERTIES).getAsJsonObject().get("actor")
- .getAsJsonObject().get(ANY_OF).getAsJsonArray();
-
- for (JsonElement actor : actors) {
- if ("CDS".equalsIgnoreCase(actor.getAsJsonObject().get(TITLE).getAsString())) {
- actor.getAsJsonObject().get(PROPERTIES).getAsJsonObject().get(RECIPE).getAsJsonObject()
- .get(ANY_OF).getAsJsonArray()
- .addAll(createAnyOfArrayForCdsRecipe(modelJson));
- }
- }
- return jsonSchema;
- } catch (IOException e) {
- logger.error("Unable to generate the json schema because of an exception", e);
- return new JsonObject();
- }
- }
-
- private static JsonObject createSchemaProperty(String title, String type, String defaultValue, String readOnlyFlag,
- String[] enumArray) {
- JsonObject property = new JsonObject();
- property.addProperty(TITLE, title);
- property.addProperty(TYPE, type);
- property.addProperty(DEFAULT, defaultValue);
- property.addProperty("readOnly", readOnlyFlag);
-
- if (enumArray != null) {
- JsonArray jsonArray = new JsonArray();
- property.add("enum", jsonArray);
- for (String val : enumArray) {
- jsonArray.add(val);
- }
- }
- return property;
- }
-
- private static JsonArray createVnfSchema(Service modelService, boolean generateType) {
- JsonArray vnfSchemaArray = new JsonArray();
- JsonObject modelVnfs = modelService.getResourceByType("VF");
-
- for (Entry<String, JsonElement> entry : modelVnfs.entrySet()) {
- JsonObject vnfOneOfSchema = new JsonObject();
- vnfOneOfSchema.addProperty(TITLE, "VNF" + "-" + entry.getKey());
- JsonObject properties = new JsonObject();
- if (generateType) {
- properties.add(TYPE, createSchemaProperty("Type", STRING, "VNF", "True", null));
- }
- properties.add("resourceID", createSchemaProperty("Resource ID", STRING,
- modelVnfs.get(entry.getKey()).getAsJsonObject().get("invariantUUID").getAsString(), "True", null));
-
- vnfOneOfSchema.add(PROPERTIES, properties);
- vnfSchemaArray.add(vnfOneOfSchema);
- }
- return vnfSchemaArray;
- }
-
- private static JsonArray createBlankEntry() {
- JsonArray result = new JsonArray();
- JsonObject blankObject = new JsonObject();
- blankObject.addProperty("title", "User defined");
- blankObject.add("properties", new JsonObject());
- result.add(blankObject);
- return result;
- }
-
- private static JsonArray createVfModuleSchema(Service modelService, boolean generateType) {
- JsonArray vfModuleOneOfSchemaArray = new JsonArray();
- JsonObject modelVfModules = modelService.getResourceByType("VFModule");
-
- for (Entry<String, JsonElement> entry : modelVfModules.entrySet()) {
- JsonObject vfModuleOneOfSchema = new JsonObject();
- vfModuleOneOfSchema.addProperty(TITLE, "VFMODULE" + "-" + entry.getKey());
- JsonObject properties = new JsonObject();
- if (generateType) {
- properties.add(TYPE, createSchemaProperty("Type", STRING, "VFMODULE", "True", null));
- }
- properties.add("resourceID",
- createSchemaProperty("Resource ID", STRING,
- modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelName").getAsString(),
- "True", null));
- properties.add("modelInvariantId",
- createSchemaProperty("Model Invariant Id (ModelInvariantUUID)", STRING,
- modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelInvariantUUID")
- .getAsString(),
- "True", null));
- properties.add("modelVersionId",
- createSchemaProperty("Model Version Id (ModelUUID)", STRING,
- modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelUUID").getAsString(),
- "True", null));
- properties.add("modelName",
- createSchemaProperty("Model Name", STRING,
- modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelName").getAsString(),
- "True", null));
- properties.add("modelVersion", createSchemaProperty("Model Version", STRING,
- modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelVersion").getAsString(),
- "True", null));
- properties
- .add("modelCustomizationId",
- createSchemaProperty("Customization ID", STRING,
- modelVfModules.get(entry.getKey()).getAsJsonObject()
- .get("vfModuleModelCustomizationUUID").getAsString(), "True",
- null));
-
- vfModuleOneOfSchema.add(PROPERTIES, properties);
- vfModuleOneOfSchemaArray.add(vfModuleOneOfSchema);
- }
- return vfModuleOneOfSchemaArray;
- }
-
- /**
- * Create an anyOf array of possible structure we may have for Target.
- *
- * @param modelJson The service object
- * @return A JsonArray with everything inside
- */
- public static JsonArray createAnyOfArray(Service modelJson, boolean generateType) {
- JsonArray targetOneOfStructure = new JsonArray();
- // First entry must be user defined
- targetOneOfStructure.addAll(createBlankEntry());
- targetOneOfStructure.addAll(createVnfSchema(modelJson, generateType));
- targetOneOfStructure.addAll(createVfModuleSchema(modelJson, generateType));
- return targetOneOfStructure;
- }
-
- private static JsonArray createAnyOfArrayForCdsRecipe(Service modelJson) {
- JsonArray anyOfStructure = new JsonArray();
- anyOfStructure.addAll(createAnyOfCdsRecipe(modelJson.getResourceDetails().getAsJsonObject("VF")));
- anyOfStructure.addAll(createAnyOfCdsRecipe(modelJson.getResourceDetails().getAsJsonObject("PNF")));
- return anyOfStructure;
- }
-
- private static JsonArray createAnyOfCdsRecipe(JsonObject jsonObject) {
- JsonArray schemaArray = new JsonArray();
- for (Entry<String, JsonElement> entry : jsonObject.entrySet()) {
- JsonObject controllerProperties = entry.getValue().getAsJsonObject()
- .getAsJsonObject("controllerProperties");
-
- if (controllerProperties != null && controllerProperties.getAsJsonObject("workflows") != null) {
- JsonObject workflows = controllerProperties.getAsJsonObject("workflows");
- for (Entry<String, JsonElement> workflowsEntry : workflows.entrySet()) {
- JsonObject obj = new JsonObject();
- obj.addProperty(TITLE, workflowsEntry.getKey());
- obj.addProperty(TYPE, "object");
- obj.add(PROPERTIES, createPayloadProperty(workflowsEntry.getValue().getAsJsonObject(),
- controllerProperties, workflowsEntry.getKey()));
- schemaArray.add(obj);
- }
-
- }
- }
- return schemaArray;
- }
-
- private static JsonObject createPayloadProperty(JsonObject workFlow,
- JsonObject controllerProperties, String workFlowName) {
- JsonObject payload = new JsonObject();
- payload.addProperty(TITLE, "Payload");
- payload.addProperty(TYPE, "object");
- payload.add(PROPERTIES, createInputPropertiesForPayload(workFlow, controllerProperties,
- workFlowName));
- JsonObject properties = new JsonObject();
- properties.add(RECIPE, createRecipeForCdsWorkflow(workFlowName));
- properties.add("payload", payload);
- return properties;
- }
-
- private static JsonObject createRecipeForCdsWorkflow(String workflow) {
- JsonObject recipe = new JsonObject();
- recipe.addProperty(TITLE, RECIPE);
- recipe.addProperty(TYPE, STRING);
- recipe.addProperty(DEFAULT, workflow);
- JsonObject options = new JsonObject();
- options.addProperty("hidden", true);
- recipe.add("options", options);
- return recipe;
- }
-
- /**
- * Returns the properties of payload based on the cds work flows.
- *
- * @param workFlow cds work flows to update payload
- * @param controllerProperties cds properties to get blueprint name and
- * version
- * @param workFlowName work flow name
- * @return returns the properties of payload
- */
- public static JsonObject createInputPropertiesForPayload(JsonObject workFlow,
- JsonObject controllerProperties,
- String workFlowName) {
- String artifactName = controllerProperties.get("sdnc_model_name").getAsString();
- String artifactVersion = controllerProperties.get("sdnc_model_version").getAsString();
- JsonObject inputs = workFlow.getAsJsonObject("inputs");
- JsonObject jsonObject = new JsonObject();
- jsonObject.add("artifact_name", createSchemaProperty(
- "artifact name", STRING, artifactName, "True", null));
- jsonObject.add("artifact_version", createSchemaProperty(
- "artifact version", STRING, artifactVersion, "True", null));
- jsonObject.add("mode", createCdsInputProperty(
- "mode", STRING, "async", null));
- jsonObject.add("data", createDataProperty(inputs, workFlowName));
- return jsonObject;
- }
-
- private static JsonObject createDataProperty(JsonObject inputs, String workflowName) {
- JsonObject data = new JsonObject();
- data.addProperty(TITLE, "data");
- JsonObject dataObj = new JsonObject();
- addDataFields(inputs, dataObj, workflowName);
- data.add(PROPERTIES, dataObj);
- return data;
- }
-
- private static void addDataFields(JsonObject inputs,
- JsonObject dataObj,
- String workFlowName) {
- Set<Map.Entry<String, JsonElement>> entrySet = inputs.entrySet();
- for (Map.Entry<String, JsonElement> entry : entrySet) {
- String key = entry.getKey();
- JsonObject inputProperty = inputs.getAsJsonObject(key);
- if (key.equalsIgnoreCase(workFlowName + "-properties")) {
- addDataFields(entry.getValue().getAsJsonObject().get("properties").getAsJsonObject(),
- dataObj, workFlowName);
- } else {
- dataObj.add(entry.getKey(),
- createCdsInputProperty(key, inputProperty.get(TYPE).getAsString(), null,
- entry.getValue().getAsJsonObject()));
- }
- }
- }
-
- private static JsonObject createCdsInputProperty(String title,
- String type,
- String defaultValue,
- JsonObject cdsProperty) {
- JsonObject property = new JsonObject();
- property.addProperty(TITLE, title);
-
- if (TYPE_LIST.equalsIgnoreCase(type)) {
- property.addProperty(TYPE, TYPE_ARRAY);
- if (cdsProperty != null && cdsProperty.get(PROPERTIES) != null) {
- JsonObject listProperties = new JsonObject();
- listProperties.add(PROPERTIES, getProperties(cdsProperty.get(PROPERTIES).getAsJsonObject()));
- property.add(ITEMS, listProperties);
- }
- } else if (TYPE_OBJECT.equalsIgnoreCase(type)) {
- property.addProperty(TYPE, TYPE_OBJECT);
- property.add(PROPERTIES, getProperties(cdsProperty.get(PROPERTIES).getAsJsonObject()));
- } else {
- property.addProperty(TYPE, type);
- }
-
- if (defaultValue != null) {
- property.addProperty(DEFAULT, defaultValue);
- }
- return property;
- }
-
- private static JsonObject getProperties(JsonObject inputProperties) {
- if (inputProperties == null) {
- return null;
- }
- JsonObject dataObject = new JsonObject();
- addDataFields(inputProperties, dataObject, null);
- return dataObject;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyService.java b/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyService.java
deleted file mode 100644
index 3f3f39b45..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyService.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 Nokia 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.policy.clamp.policy.operational;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
-import org.onap.policy.clamp.loop.Loop;
-import org.onap.policy.clamp.loop.template.PolicyModelsRepository;
-import org.onap.policy.clamp.policy.PolicyService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class OperationalPolicyService implements PolicyService<OperationalPolicy> {
-
- private final OperationalPolicyRepository operationalPolicyRepository;
-
- private final PolicyModelsRepository policyModelsRepository;
-
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(OperationalPolicyService.class);
-
- @Autowired
- public OperationalPolicyService(OperationalPolicyRepository repository,
- PolicyModelsRepository policyModelsRepository) {
- this.operationalPolicyRepository = repository;
- this.policyModelsRepository = policyModelsRepository;
- }
-
- @Override
- public Set<OperationalPolicy> updatePolicies(Loop loop, List<OperationalPolicy> operationalPolicies) {
- return operationalPolicies
- .parallelStream()
- .map(policy ->
- operationalPolicyRepository
- .findById(policy.getName())
- .map(p -> setConfiguration(p, policy))
- .orElse(initializeMissingFields(loop, policy)))
- .collect(Collectors.toSet());
- }
-
- @Override
- public boolean isExisting(String policyName) {
- return operationalPolicyRepository.existsById(policyName);
- }
-
- private OperationalPolicy initializeMissingFields(Loop loop, OperationalPolicy policy) {
- policy.setLoop(loop);
- return policy;
- }
-
- private OperationalPolicy setConfiguration(OperationalPolicy policy, OperationalPolicy newPolicy) {
- policy.setConfigurationsJson(newPolicy.getConfigurationsJson());
- policy.setPdpGroup(newPolicy.getPdpGroup());
- policy.setPdpSubgroup(newPolicy.getPdpSubgroup());
- return policy;
- }
-
- /**
- * Api to refresh the Operational Policy UI window.
- *
- * @param operationalPolicy The operational policy object
- * @param toscaConverter the tosca converter required to convert the tosca model to json schema
- */
- public void refreshOperationalPolicyJsonRepresentation(OperationalPolicy operationalPolicy,
- ToscaConverterWithDictionarySupport toscaConverter) {
- operationalPolicy.updateJsonRepresentation(toscaConverter, operationalPolicy.getLoop().getModelService());
- this.operationalPolicyRepository.saveAndFlush(operationalPolicy);
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupsAnalyzer.java b/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupsAnalyzer.java
deleted file mode 100644
index 768872750..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupsAnalyzer.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP POLICY-CLAMP
- * ================================================================================
- * Copyright (C) 2021 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.policy.clamp.policy.pdpgroup;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-import org.onap.policy.clamp.loop.template.PolicyModel;
-import org.onap.policy.models.pdp.concepts.PdpGroup;
-import org.onap.policy.models.pdp.concepts.PdpGroups;
-import org.onap.policy.models.pdp.concepts.PdpSubGroup;
-import org.onap.policy.models.pdp.enums.PdpState;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-
-/**
- * This is an utility class to do searching in pdp groups and create json object describing the result.
- */
-public class PdpGroupsAnalyzer {
-
- public static final String ASSIGNED_PDP_GROUPS_INFO = "pdpGroupInfo";
- public static final String SUPPORTED_PDP_GROUPS_INFO = "supportedPdpGroups";
-
- /**
- * Get supported subGroups based on the defined policy type and version for s specific PDPgroup.
- * It returns null if the Group is not ACTIVE or if the policytype/version has not been found in the PDPSubgroups.
- *
- * @param pdpGroup The pdpGroup that must be analyzed
- * @param policyType The policy type
- * @param version The version
- * @return The supported subGroups list in Json format
- * @see org.onap.policy.models.pdp.concepts.PdpGroup
- * @see org.onap.policy.models.pdp.enums.PdpState
- */
- private static JsonObject getSupportedPdpSubgroupsForModelType(PdpGroup pdpGroup, String policyType,
- String version) {
- if (!PdpState.ACTIVE.equals(pdpGroup.getPdpGroupState())) {
- return null;
- }
- JsonObject supportedPdpGroup = new JsonObject();
- JsonArray supportedSubgroups = new JsonArray();
- supportedPdpGroup.add(pdpGroup.getName(), supportedSubgroups);
- pdpGroup.getPdpSubgroups().stream().forEach(pdpSubGroup -> {
- if (pdpSubGroup.getSupportedPolicyTypes().stream().anyMatch(policyTypeIdentifier ->
- policyType.matches(policyTypeIdentifier.getName().replace(".", "\\.").replace("*", ".*"))
- && version.equals(policyTypeIdentifier.getVersion()))) {
- supportedSubgroups.add(pdpSubGroup.getPdpType());
- }
- });
- return supportedSubgroups.size() == 0 ? null : supportedPdpGroup;
- }
-
- /**
- * This method retrieves all supported pdpGroups and subgroups for a specific policy type/version.
- *
- * @param pdpGroups The PdpGroups object containing all PEF pdp groups info
- * @param policyType The policy type that must be used for searching
- * @param version THe policy type version that must be used for searching
- * @return It returns a JsonObject containing each pdpGroup and subgroups associated
- */
- public static JsonObject getSupportedPdpGroupsForModelType(PdpGroups pdpGroups, String policyType, String version) {
- JsonObject supportedPdpGroups = new JsonObject();
- JsonArray pdpGroupsArray = new JsonArray();
- supportedPdpGroups.add(SUPPORTED_PDP_GROUPS_INFO, pdpGroupsArray);
-
- pdpGroups.getGroups().stream().map(pdpGroup -> PdpGroupsAnalyzer.getSupportedPdpSubgroupsForModelType(pdpGroup,
- policyType, version)).filter(Objects::nonNull)
- .forEach(jsonPdpGroup -> pdpGroupsArray.add(jsonPdpGroup));
-
- return pdpGroupsArray.size() != 0 ? supportedPdpGroups : null;
- }
-
- /**
- * This method updates each element in the policyModelsList given in argument based on the pdpGroups given.
- *
- * @param policyModelsList The list of Policy Models where each PolicyModel will be updated
- * @param pdpGroups The PdpGroups containing all PDP group definition
- */
- public static void updatePdpGroupOfPolicyModels(List<PolicyModel> policyModelsList, PdpGroups pdpGroups) {
- policyModelsList.parallelStream().forEach(policyModel -> {
- policyModel.setPolicyPdpGroup(getSupportedPdpGroupsForModelType(pdpGroups, policyModel.getPolicyModelType(),
- policyModel.getVersion()));
- });
- }
-
- /**
- * This method searches for the PdpGroup/subgroup where the policy given is currently deployed.
- *
- * @param pdpGroups The pdpGroups info from PEF
- * @param policyName The policy Id
- * @param version The policy version
- * @return It returns a JsonObject containing the pdpGroup/subgroup info
- */
- public static JsonObject getPdpGroupDeploymentOfOnePolicy(PdpGroups pdpGroups, String policyName, String version) {
- JsonObject pdpGroupInfo = new JsonObject();
- JsonObject assignedPdpGroups = new JsonObject();
- pdpGroupInfo.add(ASSIGNED_PDP_GROUPS_INFO, assignedPdpGroups);
-
- ToscaConceptIdentifier toscaConceptIdentifier = new ToscaConceptIdentifier(policyName, version);
- pdpGroups.getGroups().stream().anyMatch(pdpGroup ->
- pdpGroup.getPdpSubgroups().stream().anyMatch(
- pdpSubGroup -> {
- if (pdpSubGroup.getPolicies() != null && pdpSubGroup.getPolicies()
- .contains(toscaConceptIdentifier)) {
- assignedPdpGroups.addProperty("pdpGroup", pdpGroup.getName());
- assignedPdpGroups.addProperty("pdpSubGroup", pdpSubGroup.getPdpType());
- return true;
- }
- return false;
- })
- );
- return assignedPdpGroups.entrySet().isEmpty() ? null : pdpGroupInfo;
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PoliciesPdpMerger.java b/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PoliciesPdpMerger.java
deleted file mode 100644
index 44b11119b..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PoliciesPdpMerger.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP POLICY-CLAMP
- * ================================================================================
- * Copyright (C) 2021 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.policy.clamp.policy.pdpgroup;
-
-import com.google.gson.Gson;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import java.util.Map;
-import java.util.stream.StreamSupport;
-import org.onap.policy.clamp.clds.util.JsonUtils;
-import org.onap.policy.models.pdp.concepts.PdpGroups;
-
-/**
- * This is an utility class that contains methods to work on the different results provided by the PEF.
- * Mainly used to aggregate the results.
- */
-public class PoliciesPdpMerger {
-
- /**
- * This method extract the content of a policy without knowing the key (policy Id).
- * This JsonElement normally contains only the policy ID then the content,
- * there is only one member in the Json element.
- * As this is not really practical to use this method remove that
- * nested Json.
- *
- * @param policyJsonElement The policy as JsonElement
- * @return It return the content as JsonObject
- */
- public static JsonObject getPolicyContentOutOfJsonElement(JsonElement policyJsonElement) {
- mergeJsonElement(policyJsonElement.getAsJsonObject(), policyJsonElement.getAsJsonObject()
- .remove(((String) policyJsonElement.getAsJsonObject().keySet().toArray()[0])).getAsJsonObject());
- return policyJsonElement.getAsJsonObject();
- }
-
- /**
- * This method merges 2 JsonElement together. If the jsonToMerge is null nothing is changed.
- *
- * @param json The initial json that will received the data
- * @param jsonToMerge The json that will be added to the first json object
- */
- public static void mergeJsonElement(JsonObject json, JsonObject jsonToMerge) {
- if (jsonToMerge != null) {
- jsonToMerge.entrySet().stream().forEach(entry -> json.add(entry.getKey(), entry.getValue()));
- }
- }
-
- /**
- * This method merges the result of the policy listing and the associated Pdp Group info.
- * It can be seen as an enrichment of the policy listing.
- *
- * @param jsonPoliciesList The Json containing the policies from the PEF
- * @param pdpGroupsJson The json containing the PDP groups info from the PEF
- * @return It returns a JsonObject containing the policies list enriched with PdpGroup info
- */
- public static JsonObject mergePoliciesAndPdpGroupStates(String jsonPoliciesList, String pdpGroupsJson) {
- PdpGroups pdpGroups = JsonUtils.GSON.fromJson(pdpGroupsJson, PdpGroups.class);
- JsonObject policiesListJson =
- JsonUtils.GSON.fromJson(jsonPoliciesList, JsonObject.class).get("topology_template")
- .getAsJsonObject();
- StreamSupport.stream(policiesListJson.get("policies").getAsJsonArray().spliterator(), true)
- .forEach(policyJson -> enrichOnePolicy(pdpGroups, getPolicyContentOutOfJsonElement(policyJson)));
- return policiesListJson;
- }
-
- /**
- * Enrich one policy json node object with pdpGroup info.
- *
- * @param pdpGroups The pdpGroups from PEF to search the policy
- * @param policyJsonNode The policy json node that must be enriched
- */
- private static void enrichOnePolicy(PdpGroups pdpGroups, JsonObject policyJsonNode) {
- JsonObject deploymentPdpJson = PdpGroupsAnalyzer
- .getPdpGroupDeploymentOfOnePolicy(pdpGroups, policyJsonNode.get("name").getAsString(),
- policyJsonNode.get("version").getAsString());
- mergeJsonElement(policyJsonNode, deploymentPdpJson);
-
- JsonObject supportedPdpGroupsJson = PdpGroupsAnalyzer
- .getSupportedPdpGroupsForModelType(pdpGroups, policyJsonNode.get("type").getAsString(),
- policyJsonNode.get("type_version").getAsString());
- mergeJsonElement(policyJsonNode, supportedPdpGroupsJson);
- }
-
- /**
- * This method removes the pdp States added for one policy.
- *
- * @param policyJsonNode The policy node Json as String
- * @return The Json with pdp group info removed
- */
- public static JsonObject removePdpStatesOnePolicy(JsonObject policyJsonNode) {
- //JsonObject policyJson = JsonUtils.GSON.fromJson(policyJsonNode, JsonObject.class);
- // Simply remove the nodes we have added.
- policyJsonNode.remove(PdpGroupsAnalyzer.ASSIGNED_PDP_GROUPS_INFO);
- policyJsonNode.remove(PdpGroupsAnalyzer.SUPPORTED_PDP_GROUPS_INFO);
- return policyJsonNode;
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/tosca/Dictionary.java b/src/main/java/org/onap/policy/clamp/tosca/Dictionary.java
deleted file mode 100644
index 4b01d6902..000000000
--- a/src/main/java/org/onap/policy/clamp/tosca/Dictionary.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.tosca;
-
-import com.google.gson.annotations.Expose;
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.Table;
-import org.onap.policy.clamp.loop.common.AuditEntity;
-
-/**
- * Represents Dictionary.
- */
-
-@Entity
-@Table(name = "dictionary")
-public class Dictionary extends AuditEntity implements Serializable {
-
- /**
- * The serial version id.
- */
- private static final long serialVersionUID = -286522707701388645L;
-
- @Id
- @Expose
- @Column(nullable = false, name = "name", unique = true)
- private String name;
-
- @Expose
- @Column(name = "dictionary_second_level")
- private int secondLevelDictionary = 0;
-
- @Expose
- @Column(name = "dictionary_type")
- private String subDictionaryType;
-
- @Expose
- @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
- @JoinTable(
- name = "dictionary_to_dictionaryelements",
- joinColumns = @JoinColumn(name = "dictionary_name", referencedColumnName = "name"),
- inverseJoinColumns = {@JoinColumn(
- name = "dictionary_element_short_name",
- referencedColumnName = "short_name")})
- private Set<DictionaryElement> dictionaryElements = new HashSet<>();
-
- /**
- * name getter.
- *
- * @return the name
- */
- public String getName() {
- return name;
- }
-
- /**
- * name setter.
- *
- * @param name the name to set
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * secondLevelDictionary getter.
- *
- * @return the secondLevelDictionary
- */
- public int getSecondLevelDictionary() {
- return secondLevelDictionary;
- }
-
- /**
- * secondLevelDictionary setter.
- *
- * @param secondLevelDictionary the secondLevelDictionary to set
- */
- public void setSecondLevelDictionary(int secondLevelDictionary) {
- this.secondLevelDictionary = secondLevelDictionary;
- }
-
- /**
- * subDictionaryType getter.
- *
- * @return the subDictionaryType
- */
- public String getSubDictionaryType() {
- return subDictionaryType;
- }
-
- /**
- * subDictionaryType setter.
- *
- * @param subDictionaryType the subDictionaryType to set
- */
- public void setSubDictionaryType(String subDictionaryType) {
- this.subDictionaryType = subDictionaryType;
- }
-
- /**
- * dictionaryElements getter.
- *
- * @return the dictionaryElements List of dictionary element
- */
- public Set<DictionaryElement> getDictionaryElements() {
- return dictionaryElements;
- }
-
- /**
- * Method to add a new dictionaryElement to the list.
- *
- * @param dictionaryElement The dictionary element
- */
- public void addDictionaryElements(DictionaryElement dictionaryElement) {
- dictionaryElements.add(dictionaryElement);
- dictionaryElement.getUsedByDictionaries().add(this);
- }
-
- /**
- * Method to set dictionaryElements.
- *
- * @param dictionaryElements The dictionary elements set
- */
- public void setDictionaryElements(Set<DictionaryElement> dictionaryElements) {
- this.dictionaryElements = dictionaryElements;
- }
-
- /**
- * Method to delete a dictionaryElement from the list.
- *
- * @param dictionaryElement The dictionary element
- */
- public void removeDictionaryElement(DictionaryElement dictionaryElement) {
- dictionaryElements.remove(dictionaryElement);
- dictionaryElement.getUsedByDictionaries().remove(this);
- }
-
- /**
- * Default Constructor.
- */
- public Dictionary() {
-
- }
-
- /**
- * Constructor.
- *
- * @param name The Dictionary name
- * @param secondLevelDictionary defines if dictionary is a secondary level
- * @param subDictionaryType defines the type of secondary level dictionary
- */
- public Dictionary(String name, int secondLevelDictionary, String subDictionaryType) {
- this.name = name;
- this.secondLevelDictionary = secondLevelDictionary;
- this.subDictionaryType = subDictionaryType;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- Dictionary other = (Dictionary) obj;
- if (name == null) {
- if (other.name != null) {
- return false;
- }
- } else if (!name.equals(other.name)) {
- return false;
- }
- return true;
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/tosca/DictionaryElement.java b/src/main/java/org/onap/policy/clamp/tosca/DictionaryElement.java
deleted file mode 100644
index ecf4b876c..000000000
--- a/src/main/java/org/onap/policy/clamp/tosca/DictionaryElement.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.tosca;
-
-import com.google.gson.annotations.Expose;
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-import javax.persistence.Table;
-import org.onap.policy.clamp.loop.common.AuditEntity;
-
-/**
- * Represents a Dictionary Item.
- */
-@Entity
-@Table(name = "dictionary_elements")
-public class DictionaryElement extends AuditEntity implements Serializable {
-
- /**
- * The serial version id.
- */
- private static final long serialVersionUID = -286522707701388644L;
-
- @Id
- @Expose
- @Column(nullable = false, name = "short_name")
- private String shortName;
-
- @Expose
- @Column(nullable = false, name = "name")
- private String name;
-
- @Expose
- @Column(nullable = false, name = "description")
- private String description;
-
- @Expose
- @Column(nullable = false, name = "type")
- private String type;
-
- @Expose
- @Column(nullable = true, name = "subdictionary_name")
- private String subDictionary;
-
- @ManyToMany(mappedBy = "dictionaryElements", fetch = FetchType.EAGER)
- private Set<Dictionary> usedByDictionaries = new HashSet<>();
-
- /**
- * name getter.
- *
- * @return the name
- */
- public String getName() {
- return name;
- }
-
- /**
- * name setter.
- *
- * @param name the name to set
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * shortName getter.
- *
- * @return the shortName
- */
- public String getShortName() {
- return shortName;
- }
-
- /**
- * shortName setter.
- *
- * @param shortName the shortName to set
- */
- public void setShortName(String shortName) {
- this.shortName = shortName;
- }
-
- /**
- * description getter.
- *
- * @return the description
- */
- public String getDescription() {
- return description;
- }
-
- /**
- * description setter.
- *
- * @param description the description to set
- */
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * type getter.
- *
- * @return the type
- */
- public String getType() {
- return type;
- }
-
- /**
- * type setter.
- *
- * @param type the type to set
- */
- public void setType(String type) {
- this.type = type;
- }
-
- /**
- * subDictionary getter.
- *
- * @return the subDictionary
- */
- public String getSubDictionary() {
- return subDictionary;
- }
-
- /**
- * subDictionary setter.
- *
- * @param subDictionary the subDictionary to set
- */
- public void setSubDictionary(String subDictionary) {
- this.subDictionary = subDictionary;
- }
-
- /**
- * usedByDictionaries getter.
- *
- * @return the usedByDictionaries
- */
- public Set<Dictionary> getUsedByDictionaries() {
- return usedByDictionaries;
- }
-
- /**
- * usedByDictionaries setter.
- *
- * @param usedByDictionaries the usedByDictionaries to set
- */
- public void setUsedByDictionaries(Set<Dictionary> usedByDictionaries) {
- this.usedByDictionaries = usedByDictionaries;
- }
-
- /**
- * Default Constructor.
- */
- public DictionaryElement() {
- }
-
- /**
- * Constructor.
- *
- * @param name The Dictionary element name
- * @param shortName The short name
- * @param description The description
- * @param type The type of element
- * @param subDictionary The sub type
- */
- public DictionaryElement(String name, String shortName, String description, String type,
- String subDictionary) {
- this.name = name;
- this.shortName = shortName;
- this.description = description;
- this.type = type;
- this.subDictionary = subDictionary;
- }
-
- /**
- * Constructor.
- *
- * @param name The Dictionary element name
- * @param shortName The short name
- * @param description The description
- * @param type The type of element
- * @param subDictionary The sub type
- */
- public DictionaryElement(String name, String shortName, String description, String type,
- String subDictionary, Set<Dictionary> usedByDictionaries) {
- this.name = name;
- this.shortName = shortName;
- this.description = description;
- this.type = type;
- this.subDictionary = subDictionary;
- this.usedByDictionaries = usedByDictionaries;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((shortName == null) ? 0 : shortName.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- DictionaryElement other = (DictionaryElement) obj;
- if (shortName == null) {
- if (other.shortName != null) {
- return false;
- }
- } else if (!shortName.equals(other.shortName)) {
- return false;
- }
- return true;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/tosca/DictionaryElementsRepository.java b/src/main/java/org/onap/policy/clamp/tosca/DictionaryElementsRepository.java
deleted file mode 100644
index 0bc50fe1a..000000000
--- a/src/main/java/org/onap/policy/clamp/tosca/DictionaryElementsRepository.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.tosca;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface DictionaryElementsRepository extends JpaRepository<DictionaryElement, String> {
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/tosca/DictionaryRepository.java b/src/main/java/org/onap/policy/clamp/tosca/DictionaryRepository.java
deleted file mode 100644
index a2f417d17..000000000
--- a/src/main/java/org/onap/policy/clamp/tosca/DictionaryRepository.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.tosca;
-
-import java.util.List;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface DictionaryRepository extends JpaRepository<Dictionary, String> {
-
- @Query("SELECT dict.name FROM Dictionary as dict")
- List<String> getAllDictionaryNames();
-
- @Query("SELECT dict.name FROM Dictionary as dict where dict.secondLevelDictionary = 1")
- List<String> getAllSecondaryLevelDictionaryNames();
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/tosca/DictionaryService.java b/src/main/java/org/onap/policy/clamp/tosca/DictionaryService.java
deleted file mode 100644
index 849d4baae..000000000
--- a/src/main/java/org/onap/policy/clamp/tosca/DictionaryService.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.tosca;
-
-import com.google.common.collect.Sets;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-import javax.persistence.EntityNotFoundException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class DictionaryService {
-
- private final DictionaryRepository dictionaryRepository;
- private final DictionaryElementsRepository dictionaryElementsRepository;
-
- /**
- * Constructor.
- */
- @Autowired
- public DictionaryService(DictionaryRepository dictionaryRepository,
- DictionaryElementsRepository dictionaryElementsRepository) {
- this.dictionaryRepository = dictionaryRepository;
- this.dictionaryElementsRepository = dictionaryElementsRepository;
-
- }
-
- public Dictionary saveOrUpdateDictionary(Dictionary dictionary) {
- return dictionaryRepository.saveAndFlush(dictionary);
- }
-
- /**
- * Creates or Updates Dictionary Element.
- *
- * @param dictionaryName The Dictionary name
- * @param dictionary The Dictionary object with dictionary elements
- * @return updated Dictionary object with all dictionary elements
- */
- public Dictionary saveOrUpdateDictionaryElement(String dictionaryName, Dictionary dictionary) {
- Dictionary dict = getDictionary(dictionaryName);
-
- Set<DictionaryElement> newDictionaryElements = dictionary.getDictionaryElements();
-
- if (newDictionaryElements != null && !newDictionaryElements.isEmpty()) {
- Set<DictionaryElement> updatedDictionaryElements = newDictionaryElements.stream()
- .map(dictionaryElement -> getAndUpdateDictionaryElement(dict, dictionaryElement))
- .collect(Collectors.toSet());
-
- dict.getDictionaryElements().forEach(dictElement -> {
- if (!updatedDictionaryElements.contains(dictElement)) {
- updatedDictionaryElements.add(dictElement);
- }
- });
- dict.setDictionaryElements(updatedDictionaryElements);
- }
- return dictionaryRepository.saveAndFlush(dict);
-
- }
-
- private DictionaryElement getAndUpdateDictionaryElement(Dictionary dictionary,
- DictionaryElement element) {
- return dictionaryElementsRepository
- .save(dictionaryElementsRepository.findById(element.getShortName())
- .map(p -> updateDictionaryElement(p, element, dictionary))
- .orElse(new DictionaryElement(element.getName(), element.getShortName(),
- element.getDescription(), element.getType(), element.getSubDictionary(),
- Sets.newHashSet(dictionary))));
- }
-
- public void deleteDictionary(Dictionary dictionary) {
- dictionaryRepository.delete(dictionary);
- }
-
- public void deleteDictionary(String dictionaryName) {
- dictionaryRepository.deleteById(dictionaryName);
- }
-
- public List<Dictionary> getAllDictionaries() {
- return dictionaryRepository.findAll();
- }
-
- public List<String> getAllSecondaryLevelDictionaryNames() {
- return dictionaryRepository.getAllSecondaryLevelDictionaryNames();
- }
-
- public Dictionary getDictionary(String dictionaryName) {
- return dictionaryRepository.findById(dictionaryName).orElseThrow(
- () -> new EntityNotFoundException("Couldn't find Dictionary named: " + dictionaryName));
- }
-
- /**
- * Deletes a dictionary element from Dictionary by shortName.
- *
- * @param dictionaryName The dictionary name
- * @param dictionaryElementShortName the dictionary Element Short name
- */
- public void deleteDictionaryElement(String dictionaryName, String dictionaryElementShortName) {
- if (dictionaryRepository.existsById(dictionaryName)) {
- DictionaryElement element =
- dictionaryElementsRepository.findById(dictionaryElementShortName).orElse(null);
- if (element != null) {
- Dictionary dict = getDictionary(dictionaryName);
- dict.removeDictionaryElement(element);
- dictionaryRepository.saveAndFlush(dict);
- }
- }
- }
-
- private DictionaryElement updateDictionaryElement(DictionaryElement oldDictionaryElement,
- DictionaryElement newDictionaryElement, Dictionary dictionary) {
- oldDictionaryElement.setName(newDictionaryElement.getName());
- oldDictionaryElement.setDescription(newDictionaryElement.getDescription());
- oldDictionaryElement.setType(newDictionaryElement.getType());
- oldDictionaryElement.setSubDictionary(newDictionaryElement.getSubDictionary());
- oldDictionaryElement.getUsedByDictionaries().add(dictionary);
- return oldDictionaryElement;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/util/PassDecoder.java b/src/main/java/org/onap/policy/clamp/util/PassDecoder.java
deleted file mode 100644
index f4b8ed4dc..000000000
--- a/src/main/java/org/onap/policy/clamp/util/PassDecoder.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.policy.clamp.util;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import java.io.IOException;
-import org.onap.aaf.cadi.Symm;
-import org.onap.policy.clamp.clds.util.ResourceFileUtils;
-
-/**
- * PassDecoder for decrypting the truststore and keystore password.
- */
-public class PassDecoder {
- /**
- * Used to log PassDecoder class.
- */
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(PassDecoder.class);
-
- /**
- * Decode the password.
- *
- * @param encryptedPass The encrypted password
- * @param keyFileName The key file name in String
- */
- public static String decode(String encryptedPass, String keyFileName) {
- if (null == keyFileName) {
- logger.debug("Key file is not defined, thus password will not be decrypted");
- return encryptedPass;
- }
- if (null == encryptedPass) {
- logger.error("Encrypted password is not defined");
- return null;
- }
- try {
- return Symm.obtain(ResourceFileUtils.getResourceAsStream(keyFileName)).depass(encryptedPass);
- } catch (IOException e) {
- logger.error("Exception occurred during the key decryption", e);
- return null;
- }
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/util/SemanticVersioning.java b/src/main/java/org/onap/policy/clamp/util/SemanticVersioning.java
deleted file mode 100644
index 58367193f..000000000
--- a/src/main/java/org/onap/policy/clamp/util/SemanticVersioning.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.util;
-
-/**
- * This class is the base class for object that requires semantic versioning.
- * ... This class supports also a.b.c.d... etc ... as a version.
- */
-public class SemanticVersioning {
- public static final int BEFORE = -1;
- public static final int EQUAL = 0;
- public static final int AFTER = 1;
- public static final String DEFAULT_VERSION = "1.0.0";
-
- /**
- * The compare method that compare arg0 to arg1.
- *
- * @param arg0 A version in string for semantic versioning (a.b.c.d...)
- * @param arg1 A version in string for semantic versioning (a.b.c.d...)
- * @return objects (arg0, arg1) given as parameters. It returns the value: 0: if
- * (arg0==arg1) -1: if (arg0 < arg1) 1: if (arg0 > arg1)
- */
- public static int compare(String arg0, String arg1) {
-
- if (arg0 == null && arg1 == null) {
- return EQUAL;
- }
- if (arg0 == null) {
- return BEFORE;
- }
- if (arg1 == null) {
- return AFTER;
- }
- String[] arg0Array = arg0.split("\\.");
- String[] arg1Array = arg1.split("\\.");
-
- int smalestStringLength = Math.min(arg0Array.length, arg1Array.length);
-
- for (int currentVersionIndex =
- 0; currentVersionIndex < smalestStringLength; ++currentVersionIndex) {
- if (Integer.parseInt(arg0Array[currentVersionIndex]) < Integer
- .parseInt(arg1Array[currentVersionIndex])) {
- return BEFORE;
- } else if (Integer.parseInt(arg0Array[currentVersionIndex]) > Integer
- .parseInt(arg1Array[currentVersionIndex])) {
- return AFTER;
- }
- // equals, so do not return anything, continue
- }
- if (arg0Array.length == arg1Array.length) {
- return EQUAL;
- } else {
- return Integer.compare(arg0Array.length, arg1Array.length);
- }
- }
-
- /**
- * Method to increment a version from its current version.
- *
- * @param currentVersion The current Version
- * @return the increment version string
- */
- public static String incrementMajorVersion(String currentVersion) {
- if (currentVersion == null || currentVersion.isEmpty()) {
- return DEFAULT_VERSION;
- }
- String[] versionArray = currentVersion.split("\\.");
- return String.valueOf(Integer.parseInt(versionArray[0]) + 1) + ".0.0";
- }
-}
diff --git a/src/main/resources/META-INF/resources/swagger.html b/src/main/resources/META-INF/resources/swagger.html
deleted file mode 100644
index 6712ab096..000000000
--- a/src/main/resources/META-INF/resources/swagger.html
+++ /dev/null
@@ -1,4247 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-<meta charset="UTF-8">
-<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 1.5.7.1">
-<title>Clamp Rest API</title>
-<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
-<style>
-/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
-/* Uncomment @import statement below to use as custom stylesheet */
-/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
-audio,canvas,video{display:inline-block}
-audio:not([controls]){display:none;height:0}
-script{display:none!important}
-html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
-a{background:transparent}
-a:focus{outline:thin dotted}
-a:active,a:hover{outline:0}
-h1{font-size:2em;margin:.67em 0}
-abbr[title]{border-bottom:1px dotted}
-b,strong{font-weight:bold}
-dfn{font-style:italic}
-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
-mark{background:#ff0;color:#000}
-code,kbd,pre,samp{font-family:monospace;font-size:1em}
-pre{white-space:pre-wrap}
-q{quotes:"\201C" "\201D" "\2018" "\2019"}
-small{font-size:80%}
-sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
-sup{top:-.5em}
-sub{bottom:-.25em}
-img{border:0}
-svg:not(:root){overflow:hidden}
-figure{margin:0}
-fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
-legend{border:0;padding:0}
-button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
-button,input{line-height:normal}
-button,select{text-transform:none}
-button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
-button[disabled],html input[disabled]{cursor:default}
-input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
-button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
-textarea{overflow:auto;vertical-align:top}
-table{border-collapse:collapse;border-spacing:0}
-*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
-html,body{font-size:100%}
-body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
-a:hover{cursor:pointer}
-img,object,embed{max-width:100%;height:auto}
-object,embed{height:100%}
-img{-ms-interpolation-mode:bicubic}
-.left{float:left!important}
-.right{float:right!important}
-.text-left{text-align:left!important}
-.text-right{text-align:right!important}
-.text-center{text-align:center!important}
-.text-justify{text-align:justify!important}
-.hide{display:none}
-img,object,svg{display:inline-block;vertical-align:middle}
-textarea{height:auto;min-height:50px}
-select{width:100%}
-.center{margin-left:auto;margin-right:auto}
-.stretch{width:100%}
-.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
-div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
-a{color:#2156a5;text-decoration:underline;line-height:inherit}
-a:hover,a:focus{color:#1d4b8f}
-a img{border:none}
-p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
-p aside{font-size:.875em;line-height:1.35;font-style:italic}
-h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
-h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
-h1{font-size:2.125em}
-h2{font-size:1.6875em}
-h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
-h4,h5{font-size:1.125em}
-h6{font-size:1em}
-hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
-em,i{font-style:italic;line-height:inherit}
-strong,b{font-weight:bold;line-height:inherit}
-small{font-size:60%;line-height:inherit}
-code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
-ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
-ul,ol{margin-left:1.5em}
-ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
-ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
-ul.square{list-style-type:square}
-ul.circle{list-style-type:circle}
-ul.disc{list-style-type:disc}
-ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
-dl dt{margin-bottom:.3125em;font-weight:bold}
-dl dd{margin-bottom:1.25em}
-abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
-abbr{text-transform:none}
-blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
-blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
-blockquote cite::before{content:"\2014 \0020"}
-blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
-blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
-@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
-h1{font-size:2.75em}
-h2{font-size:2.3125em}
-h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
-h4{font-size:1.4375em}}
-table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
-table thead,table tfoot{background:#f7f8f7}
-table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
-table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
-table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
-table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
-h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
-h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
-.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
-.clearfix::after,.float-group::after{clear:both}
-*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
-*:not(pre)>code.nobreak{word-wrap:normal}
-*:not(pre)>code.nowrap{white-space:nowrap}
-pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
-em em{font-style:normal}
-strong strong{font-weight:400}
-.keyseq{color:rgba(51,51,51,.8)}
-kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
-.keyseq kbd:first-child{margin-left:0}
-.keyseq kbd:last-child{margin-right:0}
-.menuseq,.menuref{color:#000}
-.menuseq b:not(.caret),.menuref{font-weight:inherit}
-.menuseq{word-spacing:-.02em}
-.menuseq b.caret{font-size:1.25em;line-height:.8}
-.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
-b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
-b.button::before{content:"[";padding:0 3px 0 2px}
-b.button::after{content:"]";padding:0 2px 0 3px}
-p a>code:hover{color:rgba(0,0,0,.9)}
-#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
-#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
-#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
-#content{margin-top:1.25em}
-#content::before{content:none}
-#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
-#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
-#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
-#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
-#header .details span:first-child{margin-left:-.125em}
-#header .details span.email a{color:rgba(0,0,0,.85)}
-#header .details br{display:none}
-#header .details br+span::before{content:"\00a0\2013\00a0"}
-#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
-#header .details br+span#revremark::before{content:"\00a0|\00a0"}
-#header #revnumber{text-transform:capitalize}
-#header #revnumber::after{content:"\00a0"}
-#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
-#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
-#toc>ul{margin-left:.125em}
-#toc ul.sectlevel0>li>a{font-style:italic}
-#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
-#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
-#toc li{line-height:1.3334;margin-top:.3334em}
-#toc a{text-decoration:none}
-#toc a:active{text-decoration:underline}
-#toctitle{color:#7a2518;font-size:1.2em}
-@media screen and (min-width:768px){#toctitle{font-size:1.375em}
-body.toc2{padding-left:15em;padding-right:0}
-#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
-#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
-#toc.toc2>ul{font-size:.9em;margin-bottom:0}
-#toc.toc2 ul ul{margin-left:0;padding-left:1em}
-#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
-body.toc2.toc-right{padding-left:0;padding-right:15em}
-body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
-@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
-#toc.toc2{width:20em}
-#toc.toc2 #toctitle{font-size:1.375em}
-#toc.toc2>ul{font-size:.95em}
-#toc.toc2 ul ul{padding-left:1.25em}
-body.toc2.toc-right{padding-left:0;padding-right:20em}}
-#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
-#content #toc>:first-child{margin-top:0}
-#content #toc>:last-child{margin-bottom:0}
-#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
-#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
-#content{margin-bottom:.625em}
-.sect1{padding-bottom:.625em}
-@media screen and (min-width:768px){#content{margin-bottom:1.25em}
-.sect1{padding-bottom:1.25em}}
-.sect1:last-child{padding-bottom:0}
-.sect1+.sect1{border-top:1px solid #efefed}
-#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
-#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
-#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
-#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
-#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
-.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
-.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
-table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
-.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
-table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
-.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
-.admonitionblock>table td.icon{text-align:center;width:80px}
-.admonitionblock>table td.icon img{max-width:none}
-.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
-.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
-.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
-.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
-.exampleblock>.content>:first-child{margin-top:0}
-.exampleblock>.content>:last-child{margin-bottom:0}
-.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
-.sidebarblock>:first-child{margin-top:0}
-.sidebarblock>:last-child{margin-bottom:0}
-.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
-.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
-.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
-.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
-.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
-.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
-@media screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
-@media screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
-.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
-.listingblock pre.highlightjs{padding:0}
-.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
-.listingblock pre.prettyprint{border-width:0}
-.listingblock>.content{position:relative}
-.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
-.listingblock:hover code[data-lang]::before{display:block}
-.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:#999}
-.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
-table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
-table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
-table.pyhltable td.code{padding-left:.75em;padding-right:0}
-pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
-pre.pygments .lineno{display:inline-block;margin-right:.25em}
-table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
-.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
-.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
-.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
-.quoteblock blockquote{margin:0;padding:0;border:0}
-.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
-.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
-.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
-.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
-.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
-.quoteblock .quoteblock blockquote::before{display:none}
-.verseblock{margin:0 1em 1.25em}
-.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
-.verseblock pre strong{font-weight:400}
-.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
-.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
-.quoteblock .attribution br,.verseblock .attribution br{display:none}
-.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
-.quoteblock.abstract{margin:0 1em 1.25em;display:block}
-.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
-.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{word-spacing:0;line-height:1.6}
-.quoteblock.abstract blockquote::before,.quoteblock.abstract p::before{display:none}
-table.tableblock{max-width:100%;border-collapse:separate}
-p.tableblock:last-child{margin-bottom:0}
-td.tableblock>.content{margin-bottom:-1.25em}
-table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
-table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
-table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
-table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
-table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
-table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
-table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
-table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
-table.frame-all{border-width:1px}
-table.frame-sides{border-width:0 1px}
-table.frame-topbot,table.frame-ends{border-width:1px 0}
-table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd){background:#f8f8f7}
-table.stripes-none tr,table.stripes-odd tr:nth-of-type(even){background:none}
-th.halign-left,td.halign-left{text-align:left}
-th.halign-right,td.halign-right{text-align:right}
-th.halign-center,td.halign-center{text-align:center}
-th.valign-top,td.valign-top{vertical-align:top}
-th.valign-bottom,td.valign-bottom{vertical-align:bottom}
-th.valign-middle,td.valign-middle{vertical-align:middle}
-table thead th,table tfoot th{font-weight:bold}
-tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
-tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
-p.tableblock>code:only-child{background:none;padding:0}
-p.tableblock{font-size:1em}
-td>div.verse{white-space:pre}
-ol{margin-left:1.75em}
-ul li ol{margin-left:1.5em}
-dl dd{margin-left:1.125em}
-dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
-ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
-ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
-ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
-ul.unstyled,ol.unstyled{margin-left:0}
-ul.checklist{margin-left:.625em}
-ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
-ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
-ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
-ul.inline>li{margin-left:1.25em}
-.unstyled dl dt{font-weight:400;font-style:normal}
-ol.arabic{list-style-type:decimal}
-ol.decimal{list-style-type:decimal-leading-zero}
-ol.loweralpha{list-style-type:lower-alpha}
-ol.upperalpha{list-style-type:upper-alpha}
-ol.lowerroman{list-style-type:lower-roman}
-ol.upperroman{list-style-type:upper-roman}
-ol.lowergreek{list-style-type:lower-greek}
-.hdlist>table,.colist>table{border:0;background:none}
-.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
-td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
-td.hdlist1{font-weight:bold;padding-bottom:1.25em}
-.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
-.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
-.colist td:not([class]):first-child img{max-width:none}
-.colist td:not([class]):last-child{padding:.25em 0}
-.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
-.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
-.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
-.imageblock>.title{margin-bottom:0}
-.imageblock.thumb,.imageblock.th{border-width:6px}
-.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
-.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
-.image.left{margin-right:.625em}
-.image.right{margin-left:.625em}
-a.image{text-decoration:none;display:inline-block}
-a.image object{pointer-events:none}
-sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
-sup.footnote a,sup.footnoteref a{text-decoration:none}
-sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
-#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
-#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
-#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
-#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
-#footnotes .footnote:last-of-type{margin-bottom:0}
-#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
-.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
-.gist .file-data>table td.line-data{width:99%}
-div.unbreakable{page-break-inside:avoid}
-.big{font-size:larger}
-.small{font-size:smaller}
-.underline{text-decoration:underline}
-.overline{text-decoration:overline}
-.line-through{text-decoration:line-through}
-.aqua{color:#00bfbf}
-.aqua-background{background-color:#00fafa}
-.black{color:#000}
-.black-background{background-color:#000}
-.blue{color:#0000bf}
-.blue-background{background-color:#0000fa}
-.fuchsia{color:#bf00bf}
-.fuchsia-background{background-color:#fa00fa}
-.gray{color:#606060}
-.gray-background{background-color:#7d7d7d}
-.green{color:#006000}
-.green-background{background-color:#007d00}
-.lime{color:#00bf00}
-.lime-background{background-color:#00fa00}
-.maroon{color:#600000}
-.maroon-background{background-color:#7d0000}
-.navy{color:#000060}
-.navy-background{background-color:#00007d}
-.olive{color:#606000}
-.olive-background{background-color:#7d7d00}
-.purple{color:#600060}
-.purple-background{background-color:#7d007d}
-.red{color:#bf0000}
-.red-background{background-color:#fa0000}
-.silver{color:#909090}
-.silver-background{background-color:#bcbcbc}
-.teal{color:#006060}
-.teal-background{background-color:#007d7d}
-.white{color:#bfbfbf}
-.white-background{background-color:#fafafa}
-.yellow{color:#bfbf00}
-.yellow-background{background-color:#fafa00}
-span.icon>.fa{cursor:default}
-a span.icon>.fa{cursor:inherit}
-.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
-.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
-.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
-.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
-.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
-.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
-.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
-.conum[data-value] *{color:#fff!important}
-.conum[data-value]+b{display:none}
-.conum[data-value]::after{content:attr(data-value)}
-pre .conum[data-value]{position:relative;top:-.125em}
-b.conum *{color:inherit!important}
-.conum:not([data-value]):empty{display:none}
-dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
-h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
-p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
-p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
-p{margin-bottom:1.25rem}
-.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
-.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
-.print-only{display:none!important}
-@page{margin:1.25cm .75cm}
-@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
-html{font-size:80%}
-a{color:inherit!important;text-decoration:underline!important}
-a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
-a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
-abbr[title]::after{content:" (" attr(title) ")"}
-pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
-thead{display:table-header-group}
-svg{max-width:100%}
-p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
-h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
-#toc,.sidebarblock,.exampleblock>.content{background:none!important}
-#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
-body.book #header{text-align:center}
-body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
-body.book #header .details{border:0!important;display:block;padding:0!important}
-body.book #header .details span:first-child{margin-left:0!important}
-body.book #header .details br{display:block}
-body.book #header .details br+span::before{content:none!important}
-body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
-body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
-.listingblock code[data-lang]::before{display:block}
-#footer{padding:0 .9375em}
-.hide-on-print{display:none!important}
-.print-only{display:block!important}
-.hide-for-print{display:none!important}
-.show-for-print{display:inherit!important}}
-@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
-.sect1{padding:0!important}
-.sect1+.sect1{border:0}
-#footer{background:none}
-#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
-@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
-</style>
-</head>
-<body class="book toc2 toc-left">
-<div id="header">
-<h1>Clamp Rest API</h1>
-<div id="toc" class="toc2">
-<div id="toctitle">Table of Contents</div>
-<ul class="sectlevel1">
-<li><a href="#_overview">1. Overview</a>
-<ul class="sectlevel2">
-<li><a href="#_version_information">1.1. Version information</a></li>
-<li><a href="#_uri_scheme">1.2. URI scheme</a></li>
-</ul>
-</li>
-<li><a href="#_paths">2. Paths</a>
-<ul class="sectlevel2">
-<li><a href="#_route184">2.1. GET /v1/healthcheck</a>
-<ul class="sectlevel3">
-<li><a href="#_responses">2.1.1. Responses</a></li>
-<li><a href="#_produces">2.1.2. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route185">2.2. GET /v1/user/getUser</a>
-<ul class="sectlevel3">
-<li><a href="#_responses_2">2.2.1. Responses</a></li>
-<li><a href="#_produces_2">2.2.2. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route183">2.3. GET /v2/clampInformation</a>
-<ul class="sectlevel3">
-<li><a href="#_responses_3">2.3.1. Responses</a></li>
-<li><a href="#_produces_3">2.3.2. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route167">2.4. GET /v2/dictionary</a>
-<ul class="sectlevel3">
-<li><a href="#_responses_4">2.4.1. Responses</a></li>
-<li><a href="#_produces_4">2.4.2. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route170">2.5. PUT /v2/dictionary</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters">2.5.1. Parameters</a></li>
-<li><a href="#_responses_5">2.5.2. Responses</a></li>
-<li><a href="#_consumes">2.5.3. Consumes</a></li>
-<li><a href="#_produces_5">2.5.4. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route168">2.6. GET /v2/dictionary/secondary/names</a>
-<ul class="sectlevel3">
-<li><a href="#_responses_6">2.6.1. Responses</a></li>
-<li><a href="#_produces_6">2.6.2. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route169">2.7. GET /v2/dictionary/{dictionaryName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_2">2.7.1. Parameters</a></li>
-<li><a href="#_responses_7">2.7.2. Responses</a></li>
-<li><a href="#_produces_7">2.7.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route171">2.8. PUT /v2/dictionary/{name}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_3">2.8.1. Parameters</a></li>
-<li><a href="#_responses_8">2.8.2. Responses</a></li>
-<li><a href="#_consumes_2">2.8.3. Consumes</a></li>
-<li><a href="#_produces_8">2.8.4. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route172">2.9. DELETE /v2/dictionary/{name}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_4">2.9.1. Parameters</a></li>
-<li><a href="#_responses_9">2.9.2. Responses</a></li>
-<li><a href="#_produces_9">2.9.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route173">2.10. DELETE /v2/dictionary/{name}/elements/{shortName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_5">2.10.1. Parameters</a></li>
-<li><a href="#_responses_10">2.10.2. Responses</a></li>
-<li><a href="#_produces_10">2.10.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route164">2.11. PUT /v2/loop/addOperationaPolicy/{loopName}/policyModel/{policyType}/{policyVersion}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_6">2.11.1. Parameters</a></li>
-<li><a href="#_responses_11">2.11.2. Responses</a></li>
-<li><a href="#_produces_11">2.11.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route166">2.12. POST /v2/loop/create/{loopName}?templateName={templateName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_7">2.12.1. Parameters</a></li>
-<li><a href="#_responses_12">2.12.2. Responses</a></li>
-<li><a href="#_consumes_3">2.12.3. Consumes</a></li>
-<li><a href="#_produces_12">2.12.4. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route162">2.13. PUT /v2/loop/delete/{loopName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_8">2.13.1. Parameters</a></li>
-<li><a href="#_responses_13">2.13.2. Responses</a></li>
-</ul>
-</li>
-<li><a href="#_route155">2.14. PUT /v2/loop/deploy/{loopName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_9">2.14.1. Parameters</a></li>
-<li><a href="#_responses_14">2.14.2. Responses</a></li>
-<li><a href="#_produces_13">2.14.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route150">2.15. GET /v2/loop/getAllNames</a>
-<ul class="sectlevel3">
-<li><a href="#_responses_15">2.15.1. Responses</a></li>
-<li><a href="#_produces_14">2.15.2. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route163">2.16. GET /v2/loop/getstatus/{loopName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_10">2.16.1. Parameters</a></li>
-<li><a href="#_responses_16">2.16.2. Responses</a></li>
-<li><a href="#_produces_15">2.16.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route156">2.17. PUT /v2/loop/refreshMicroServicePolicyJsonSchema/{loopName}/{microServicePolicyName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_11">2.17.1. Parameters</a></li>
-<li><a href="#_responses_17">2.17.2. Responses</a></li>
-<li><a href="#_produces_16">2.17.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route157">2.18. PUT /v2/loop/refreshOperationalPolicyJsonSchema/{loopName}/{operationalPolicyName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_12">2.18.1. Parameters</a></li>
-<li><a href="#_responses_18">2.18.2. Responses</a></li>
-<li><a href="#_produces_17">2.18.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route165">2.19. PUT /v2/loop/removeOperationaPolicy/{loopName}/policyModel/{policyType}/{policyVersion}/{policyName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_13">2.19.1. Parameters</a></li>
-<li><a href="#_responses_19">2.19.2. Responses</a></li>
-<li><a href="#_produces_18">2.19.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route160">2.20. PUT /v2/loop/restart/{loopName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_14">2.20.1. Parameters</a></li>
-<li><a href="#_responses_20">2.20.2. Responses</a></li>
-<li><a href="#_produces_19">2.20.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route159">2.21. PUT /v2/loop/stop/{loopName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_15">2.21.1. Parameters</a></li>
-<li><a href="#_responses_21">2.21.2. Responses</a></li>
-<li><a href="#_produces_20">2.21.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route161">2.22. PUT /v2/loop/submit/{loopName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_16">2.22.1. Parameters</a></li>
-<li><a href="#_responses_22">2.22.2. Responses</a></li>
-<li><a href="#_produces_21">2.22.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route158">2.23. PUT /v2/loop/undeploy/{loopName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_17">2.23.1. Parameters</a></li>
-<li><a href="#_responses_23">2.23.2. Responses</a></li>
-<li><a href="#_produces_22">2.23.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route152">2.24. POST /v2/loop/updateGlobalProperties/{loopName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_18">2.24.1. Parameters</a></li>
-<li><a href="#_responses_24">2.24.2. Responses</a></li>
-<li><a href="#_consumes_4">2.24.3. Consumes</a></li>
-<li><a href="#_produces_23">2.24.4. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route154">2.25. POST /v2/loop/updateMicroservicePolicy/{loopName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_19">2.25.1. Parameters</a></li>
-<li><a href="#_responses_25">2.25.2. Responses</a></li>
-<li><a href="#_consumes_5">2.25.3. Consumes</a></li>
-<li><a href="#_produces_24">2.25.4. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route153">2.26. POST /v2/loop/updateOperationalPolicies/{loopName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_20">2.26.1. Parameters</a></li>
-<li><a href="#_responses_26">2.26.2. Responses</a></li>
-<li><a href="#_consumes_6">2.26.3. Consumes</a></li>
-<li><a href="#_produces_25">2.26.4. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route151">2.27. GET /v2/loop/{loopName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_21">2.27.1. Parameters</a></li>
-<li><a href="#_responses_27">2.27.2. Responses</a></li>
-<li><a href="#_produces_26">2.27.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route182">2.28. GET /v2/policies/list</a>
-<ul class="sectlevel3">
-<li><a href="#_responses_28">2.28.1. Responses</a></li>
-<li><a href="#_produces_27">2.28.2. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route177">2.29. POST /v2/policyToscaModels</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_22">2.29.1. Parameters</a></li>
-<li><a href="#_responses_29">2.29.2. Responses</a></li>
-<li><a href="#_consumes_7">2.29.3. Consumes</a></li>
-<li><a href="#_produces_28">2.29.4. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route174">2.30. GET /v2/policyToscaModels</a>
-<ul class="sectlevel3">
-<li><a href="#_responses_30">2.30.1. Responses</a></li>
-<li><a href="#_produces_29">2.30.2. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route176">2.31. GET /v2/policyToscaModels/yaml/{policyModelType}/{policyModelVersion}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_23">2.31.1. Parameters</a></li>
-<li><a href="#_responses_31">2.31.2. Responses</a></li>
-<li><a href="#_produces_30">2.31.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route175">2.32. GET /v2/policyToscaModels/{policyModelType}/{policyModelVersion}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_24">2.32.1. Parameters</a></li>
-<li><a href="#_responses_32">2.32.2. Responses</a></li>
-<li><a href="#_produces_31">2.32.3. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route178">2.33. PUT /v2/policyToscaModels/{policyModelType}/{policyModelVersion}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_25">2.33.1. Parameters</a></li>
-<li><a href="#_responses_33">2.33.2. Responses</a></li>
-<li><a href="#_consumes_8">2.33.3. Consumes</a></li>
-<li><a href="#_produces_32">2.33.4. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route179">2.34. GET /v2/templates</a>
-<ul class="sectlevel3">
-<li><a href="#_responses_34">2.34.1. Responses</a></li>
-<li><a href="#_produces_33">2.34.2. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route181">2.35. GET /v2/templates/names</a>
-<ul class="sectlevel3">
-<li><a href="#_responses_35">2.35.1. Responses</a></li>
-<li><a href="#_produces_34">2.35.2. Produces</a></li>
-</ul>
-</li>
-<li><a href="#_route180">2.36. GET /v2/templates/{templateName}</a>
-<ul class="sectlevel3">
-<li><a href="#_parameters_26">2.36.1. Parameters</a></li>
-<li><a href="#_responses_36">2.36.2. Responses</a></li>
-<li><a href="#_produces_35">2.36.3. Produces</a></li>
-</ul>
-</li>
-</ul>
-</li>
-<li><a href="#_definitions">3. Definitions</a>
-<ul class="sectlevel2">
-<li><a href="#_clampinformation">3.1. ClampInformation</a></li>
-<li><a href="#_cldshealthcheck">3.2. CldsHealthCheck</a></li>
-<li><a href="#_dictionary">3.3. Dictionary</a></li>
-<li><a href="#_dictionaryelement">3.4. DictionaryElement</a></li>
-<li><a href="#_externalcomponent">3.5. ExternalComponent</a></li>
-<li><a href="#_externalcomponentstate">3.6. ExternalComponentState</a></li>
-<li><a href="#_jsonarray">3.7. JsonArray</a></li>
-<li><a href="#_jsonnull">3.8. JsonNull</a></li>
-<li><a href="#_jsonobject">3.9. JsonObject</a></li>
-<li><a href="#_jsonprimitive">3.10. JsonPrimitive</a></li>
-<li><a href="#_loop">3.11. Loop</a></li>
-<li><a href="#_loopelementmodel">3.12. LoopElementModel</a></li>
-<li><a href="#_looplog">3.13. LoopLog</a></li>
-<li><a href="#_looptemplate">3.14. LoopTemplate</a></li>
-<li><a href="#_looptemplateloopelementmodel">3.15. LoopTemplateLoopElementModel</a></li>
-<li><a href="#_microservicepolicy">3.16. MicroServicePolicy</a></li>
-<li><a href="#_number">3.17. Number</a></li>
-<li><a href="#_operationalpolicy">3.18. OperationalPolicy</a></li>
-<li><a href="#_policymodel">3.19. PolicyModel</a></li>
-<li><a href="#_service">3.20. Service</a></li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<div id="content">
-<div class="sect1">
-<h2 id="_overview"><a class="anchor" href="#_overview"></a><a class="link" href="#_overview">1. Overview</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="_version_information"><a class="anchor" href="#_version_information"></a><a class="link" href="#_version_information">1.1. Version information</a></h3>
-<div class="paragraph">
-<p><em>Version</em> : 6.0.0-SNAPSHOT</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_uri_scheme"><a class="anchor" href="#_uri_scheme"></a><a class="link" href="#_uri_scheme">1.2. URI scheme</a></h3>
-<div class="paragraph">
-<p><em>Host</em> : localhost:40283<br>
-<em>BasePath</em> : /restservices/clds/<br>
-<em>Schemes</em> : HTTP</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_paths"><a class="anchor" href="#_paths"></a><a class="link" href="#_paths">2. Paths</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="_route184"><a class="anchor" href="#_route184"></a><a class="link" href="#_route184">2.1. GET /v1/healthcheck</a></h3>
-<div class="sect3">
-<h4 id="_responses"><a class="anchor" href="#_responses"></a><a class="link" href="#_responses">2.1.1. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_cldshealthcheck">CldsHealthCheck</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces"><a class="anchor" href="#_produces"></a><a class="link" href="#_produces">2.1.2. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route185"><a class="anchor" href="#_route185"></a><a class="link" href="#_route185">2.2. GET /v1/user/getUser</a></h3>
-<div class="sect3">
-<h4 id="_responses_2"><a class="anchor" href="#_responses_2"></a><a class="link" href="#_responses_2">2.2.1. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">No Content</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_2"><a class="anchor" href="#_produces_2"></a><a class="link" href="#_produces_2">2.2.2. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>text/plain</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route183"><a class="anchor" href="#_route183"></a><a class="link" href="#_route183">2.3. GET /v2/clampInformation</a></h3>
-<div class="sect3">
-<h4 id="_responses_3"><a class="anchor" href="#_responses_3"></a><a class="link" href="#_responses_3">2.3.1. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_clampinformation">ClampInformation</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_3"><a class="anchor" href="#_produces_3"></a><a class="link" href="#_produces_3">2.3.2. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route167"><a class="anchor" href="#_route167"></a><a class="link" href="#_route167">2.4. GET /v2/dictionary</a></h3>
-<div class="sect3">
-<h4 id="_responses_4"><a class="anchor" href="#_responses_4"></a><a class="link" href="#_responses_4">2.4.1. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_dictionary">Dictionary</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_4"><a class="anchor" href="#_produces_4"></a><a class="link" href="#_produces_4">2.4.2. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route170"><a class="anchor" href="#_route170"></a><a class="link" href="#_route170">2.5. PUT /v2/dictionary</a></h3>
-<div class="sect3">
-<h4 id="_parameters"><a class="anchor" href="#_parameters"></a><a class="link" href="#_parameters">2.5.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Body</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>body</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_dictionary">Dictionary</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_5"><a class="anchor" href="#_responses_5"></a><a class="link" href="#_responses_5">2.5.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_dictionary">Dictionary</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_consumes"><a class="anchor" href="#_consumes"></a><a class="link" href="#_consumes">2.5.3. Consumes</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_produces_5"><a class="anchor" href="#_produces_5"></a><a class="link" href="#_produces_5">2.5.4. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route168"><a class="anchor" href="#_route168"></a><a class="link" href="#_route168">2.6. GET /v2/dictionary/secondary/names</a></h3>
-<div class="sect3">
-<h4 id="_responses_6"><a class="anchor" href="#_responses_6"></a><a class="link" href="#_responses_6">2.6.1. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; string &gt; array</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_6"><a class="anchor" href="#_produces_6"></a><a class="link" href="#_produces_6">2.6.2. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route169"><a class="anchor" href="#_route169"></a><a class="link" href="#_route169">2.7. GET /v2/dictionary/{dictionaryName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_2"><a class="anchor" href="#_parameters_2"></a><a class="link" href="#_parameters_2">2.7.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>dictionaryName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_7"><a class="anchor" href="#_responses_7"></a><a class="link" href="#_responses_7">2.7.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_dictionary">Dictionary</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_7"><a class="anchor" href="#_produces_7"></a><a class="link" href="#_produces_7">2.7.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route171"><a class="anchor" href="#_route171"></a><a class="link" href="#_route171">2.8. PUT /v2/dictionary/{name}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_3"><a class="anchor" href="#_parameters_3"></a><a class="link" href="#_parameters_3">2.8.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>name</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Body</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>body</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_dictionary">Dictionary</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_8"><a class="anchor" href="#_responses_8"></a><a class="link" href="#_responses_8">2.8.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_dictionary">Dictionary</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_consumes_2"><a class="anchor" href="#_consumes_2"></a><a class="link" href="#_consumes_2">2.8.3. Consumes</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_produces_8"><a class="anchor" href="#_produces_8"></a><a class="link" href="#_produces_8">2.8.4. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route172"><a class="anchor" href="#_route172"></a><a class="link" href="#_route172">2.9. DELETE /v2/dictionary/{name}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_4"><a class="anchor" href="#_parameters_4"></a><a class="link" href="#_parameters_4">2.9.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>name</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_9"><a class="anchor" href="#_responses_9"></a><a class="link" href="#_responses_9">2.9.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">No Content</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_9"><a class="anchor" href="#_produces_9"></a><a class="link" href="#_produces_9">2.9.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route173"><a class="anchor" href="#_route173"></a><a class="link" href="#_route173">2.10. DELETE /v2/dictionary/{name}/elements/{shortName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_5"><a class="anchor" href="#_parameters_5"></a><a class="link" href="#_parameters_5">2.10.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>name</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>shortName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_10"><a class="anchor" href="#_responses_10"></a><a class="link" href="#_responses_10">2.10.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">No Content</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_10"><a class="anchor" href="#_produces_10"></a><a class="link" href="#_produces_10">2.10.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route164"><a class="anchor" href="#_route164"></a><a class="link" href="#_route164">2.11. PUT /v2/loop/addOperationaPolicy/{loopName}/policyModel/{policyType}/{policyVersion}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_6"><a class="anchor" href="#_parameters_6"></a><a class="link" href="#_parameters_6">2.11.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyType</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyVersion</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_11"><a class="anchor" href="#_responses_11"></a><a class="link" href="#_responses_11">2.11.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_11"><a class="anchor" href="#_produces_11"></a><a class="link" href="#_produces_11">2.11.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route166"><a class="anchor" href="#_route166"></a><a class="link" href="#_route166">2.12. POST /v2/loop/create/{loopName}?templateName={templateName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_7"><a class="anchor" href="#_parameters_7"></a><a class="link" href="#_parameters_7">2.12.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName}?templateName={templateName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_12"><a class="anchor" href="#_responses_12"></a><a class="link" href="#_responses_12">2.12.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_consumes_3"><a class="anchor" href="#_consumes_3"></a><a class="link" href="#_consumes_3">2.12.3. Consumes</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_produces_12"><a class="anchor" href="#_produces_12"></a><a class="link" href="#_produces_12">2.12.4. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route162"><a class="anchor" href="#_route162"></a><a class="link" href="#_route162">2.13. PUT /v2/loop/delete/{loopName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_8"><a class="anchor" href="#_parameters_8"></a><a class="link" href="#_parameters_8">2.13.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_13"><a class="anchor" href="#_responses_13"></a><a class="link" href="#_responses_13">2.13.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 66.6667%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">No Content</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route155"><a class="anchor" href="#_route155"></a><a class="link" href="#_route155">2.14. PUT /v2/loop/deploy/{loopName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_9"><a class="anchor" href="#_parameters_9"></a><a class="link" href="#_parameters_9">2.14.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_14"><a class="anchor" href="#_responses_14"></a><a class="link" href="#_responses_14">2.14.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_13"><a class="anchor" href="#_produces_13"></a><a class="link" href="#_produces_13">2.14.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route150"><a class="anchor" href="#_route150"></a><a class="link" href="#_route150">2.15. GET /v2/loop/getAllNames</a></h3>
-<div class="sect3">
-<h4 id="_responses_15"><a class="anchor" href="#_responses_15"></a><a class="link" href="#_responses_15">2.15.1. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; string &gt; array</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_14"><a class="anchor" href="#_produces_14"></a><a class="link" href="#_produces_14">2.15.2. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route163"><a class="anchor" href="#_route163"></a><a class="link" href="#_route163">2.16. GET /v2/loop/getstatus/{loopName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_10"><a class="anchor" href="#_parameters_10"></a><a class="link" href="#_parameters_10">2.16.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_16"><a class="anchor" href="#_responses_16"></a><a class="link" href="#_responses_16">2.16.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_15"><a class="anchor" href="#_produces_15"></a><a class="link" href="#_produces_15">2.16.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route156"><a class="anchor" href="#_route156"></a><a class="link" href="#_route156">2.17. PUT /v2/loop/refreshMicroServicePolicyJsonSchema/{loopName}/{microServicePolicyName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_11"><a class="anchor" href="#_parameters_11"></a><a class="link" href="#_parameters_11">2.17.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>microServicePolicyName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_17"><a class="anchor" href="#_responses_17"></a><a class="link" href="#_responses_17">2.17.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_16"><a class="anchor" href="#_produces_16"></a><a class="link" href="#_produces_16">2.17.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route157"><a class="anchor" href="#_route157"></a><a class="link" href="#_route157">2.18. PUT /v2/loop/refreshOperationalPolicyJsonSchema/{loopName}/{operationalPolicyName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_12"><a class="anchor" href="#_parameters_12"></a><a class="link" href="#_parameters_12">2.18.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>operationalPolicyName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_18"><a class="anchor" href="#_responses_18"></a><a class="link" href="#_responses_18">2.18.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_17"><a class="anchor" href="#_produces_17"></a><a class="link" href="#_produces_17">2.18.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route165"><a class="anchor" href="#_route165"></a><a class="link" href="#_route165">2.19. PUT /v2/loop/removeOperationaPolicy/{loopName}/policyModel/{policyType}/{policyVersion}/{policyName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_13"><a class="anchor" href="#_parameters_13"></a><a class="link" href="#_parameters_13">2.19.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyType</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyVersion</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_19"><a class="anchor" href="#_responses_19"></a><a class="link" href="#_responses_19">2.19.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_18"><a class="anchor" href="#_produces_18"></a><a class="link" href="#_produces_18">2.19.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route160"><a class="anchor" href="#_route160"></a><a class="link" href="#_route160">2.20. PUT /v2/loop/restart/{loopName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_14"><a class="anchor" href="#_parameters_14"></a><a class="link" href="#_parameters_14">2.20.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_20"><a class="anchor" href="#_responses_20"></a><a class="link" href="#_responses_20">2.20.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_19"><a class="anchor" href="#_produces_19"></a><a class="link" href="#_produces_19">2.20.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route159"><a class="anchor" href="#_route159"></a><a class="link" href="#_route159">2.21. PUT /v2/loop/stop/{loopName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_15"><a class="anchor" href="#_parameters_15"></a><a class="link" href="#_parameters_15">2.21.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_21"><a class="anchor" href="#_responses_21"></a><a class="link" href="#_responses_21">2.21.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_20"><a class="anchor" href="#_produces_20"></a><a class="link" href="#_produces_20">2.21.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route161"><a class="anchor" href="#_route161"></a><a class="link" href="#_route161">2.22. PUT /v2/loop/submit/{loopName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_16"><a class="anchor" href="#_parameters_16"></a><a class="link" href="#_parameters_16">2.22.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_22"><a class="anchor" href="#_responses_22"></a><a class="link" href="#_responses_22">2.22.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_21"><a class="anchor" href="#_produces_21"></a><a class="link" href="#_produces_21">2.22.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route158"><a class="anchor" href="#_route158"></a><a class="link" href="#_route158">2.23. PUT /v2/loop/undeploy/{loopName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_17"><a class="anchor" href="#_parameters_17"></a><a class="link" href="#_parameters_17">2.23.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_23"><a class="anchor" href="#_responses_23"></a><a class="link" href="#_responses_23">2.23.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_22"><a class="anchor" href="#_produces_22"></a><a class="link" href="#_produces_22">2.23.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route152"><a class="anchor" href="#_route152"></a><a class="link" href="#_route152">2.24. POST /v2/loop/updateGlobalProperties/{loopName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_18"><a class="anchor" href="#_parameters_18"></a><a class="link" href="#_parameters_18">2.24.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Body</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>body</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonobject">JsonObject</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_24"><a class="anchor" href="#_responses_24"></a><a class="link" href="#_responses_24">2.24.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_consumes_4"><a class="anchor" href="#_consumes_4"></a><a class="link" href="#_consumes_4">2.24.3. Consumes</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_produces_23"><a class="anchor" href="#_produces_23"></a><a class="link" href="#_produces_23">2.24.4. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route154"><a class="anchor" href="#_route154"></a><a class="link" href="#_route154">2.25. POST /v2/loop/updateMicroservicePolicy/{loopName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_19"><a class="anchor" href="#_parameters_19"></a><a class="link" href="#_parameters_19">2.25.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Body</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>body</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_microservicepolicy">MicroServicePolicy</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_25"><a class="anchor" href="#_responses_25"></a><a class="link" href="#_responses_25">2.25.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_microservicepolicy">MicroServicePolicy</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_consumes_5"><a class="anchor" href="#_consumes_5"></a><a class="link" href="#_consumes_5">2.25.3. Consumes</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_produces_24"><a class="anchor" href="#_produces_24"></a><a class="link" href="#_produces_24">2.25.4. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route153"><a class="anchor" href="#_route153"></a><a class="link" href="#_route153">2.26. POST /v2/loop/updateOperationalPolicies/{loopName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_20"><a class="anchor" href="#_parameters_20"></a><a class="link" href="#_parameters_20">2.26.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Body</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>body</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonarray">JsonArray</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_26"><a class="anchor" href="#_responses_26"></a><a class="link" href="#_responses_26">2.26.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_consumes_6"><a class="anchor" href="#_consumes_6"></a><a class="link" href="#_consumes_6">2.26.3. Consumes</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_produces_25"><a class="anchor" href="#_produces_25"></a><a class="link" href="#_produces_25">2.26.4. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route151"><a class="anchor" href="#_route151"></a><a class="link" href="#_route151">2.27. GET /v2/loop/{loopName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_21"><a class="anchor" href="#_parameters_21"></a><a class="link" href="#_parameters_21">2.27.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_27"><a class="anchor" href="#_responses_27"></a><a class="link" href="#_responses_27">2.27.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_26"><a class="anchor" href="#_produces_26"></a><a class="link" href="#_produces_26">2.27.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route182"><a class="anchor" href="#_route182"></a><a class="link" href="#_route182">2.28. GET /v2/policies/list</a></h3>
-<div class="sect3">
-<h4 id="_responses_28"><a class="anchor" href="#_responses_28"></a><a class="link" href="#_responses_28">2.28.1. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_27"><a class="anchor" href="#_produces_27"></a><a class="link" href="#_produces_27">2.28.2. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route177"><a class="anchor" href="#_route177"></a><a class="link" href="#_route177">2.29. POST /v2/policyToscaModels</a></h3>
-<div class="sect3">
-<h4 id="_parameters_22"><a class="anchor" href="#_parameters_22"></a><a class="link" href="#_parameters_22">2.29.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Body</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>body</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_29"><a class="anchor" href="#_responses_29"></a><a class="link" href="#_responses_29">2.29.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_policymodel">PolicyModel</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_consumes_7"><a class="anchor" href="#_consumes_7"></a><a class="link" href="#_consumes_7">2.29.3. Consumes</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>plain/text</code></p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_produces_28"><a class="anchor" href="#_produces_28"></a><a class="link" href="#_produces_28">2.29.4. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route174"><a class="anchor" href="#_route174"></a><a class="link" href="#_route174">2.30. GET /v2/policyToscaModels</a></h3>
-<div class="sect3">
-<h4 id="_responses_30"><a class="anchor" href="#_responses_30"></a><a class="link" href="#_responses_30">2.30.1. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_policymodel">PolicyModel</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_29"><a class="anchor" href="#_produces_29"></a><a class="link" href="#_produces_29">2.30.2. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route176"><a class="anchor" href="#_route176"></a><a class="link" href="#_route176">2.31. GET /v2/policyToscaModels/yaml/{policyModelType}/{policyModelVersion}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_23"><a class="anchor" href="#_parameters_23"></a><a class="link" href="#_parameters_23">2.31.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyModelType</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyModelVersion</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_31"><a class="anchor" href="#_responses_31"></a><a class="link" href="#_responses_31">2.31.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_30"><a class="anchor" href="#_produces_30"></a><a class="link" href="#_produces_30">2.31.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route175"><a class="anchor" href="#_route175"></a><a class="link" href="#_route175">2.32. GET /v2/policyToscaModels/{policyModelType}/{policyModelVersion}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_24"><a class="anchor" href="#_parameters_24"></a><a class="link" href="#_parameters_24">2.32.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyModelType</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyModelVersion</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_32"><a class="anchor" href="#_responses_32"></a><a class="link" href="#_responses_32">2.32.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_policymodel">PolicyModel</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_31"><a class="anchor" href="#_produces_31"></a><a class="link" href="#_produces_31">2.32.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route178"><a class="anchor" href="#_route178"></a><a class="link" href="#_route178">2.33. PUT /v2/policyToscaModels/{policyModelType}/{policyModelVersion}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_25"><a class="anchor" href="#_parameters_25"></a><a class="link" href="#_parameters_25">2.33.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyModelType</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyModelVersion</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Body</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>body</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_33"><a class="anchor" href="#_responses_33"></a><a class="link" href="#_responses_33">2.33.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_policymodel">PolicyModel</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_consumes_8"><a class="anchor" href="#_consumes_8"></a><a class="link" href="#_consumes_8">2.33.3. Consumes</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>plain/text</code></p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_produces_32"><a class="anchor" href="#_produces_32"></a><a class="link" href="#_produces_32">2.33.4. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route179"><a class="anchor" href="#_route179"></a><a class="link" href="#_route179">2.34. GET /v2/templates</a></h3>
-<div class="sect3">
-<h4 id="_responses_34"><a class="anchor" href="#_responses_34"></a><a class="link" href="#_responses_34">2.34.1. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_looptemplate">LoopTemplate</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_33"><a class="anchor" href="#_produces_33"></a><a class="link" href="#_produces_33">2.34.2. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route181"><a class="anchor" href="#_route181"></a><a class="link" href="#_route181">2.35. GET /v2/templates/names</a></h3>
-<div class="sect3">
-<h4 id="_responses_35"><a class="anchor" href="#_responses_35"></a><a class="link" href="#_responses_35">2.35.1. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; string &gt; array</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_34"><a class="anchor" href="#_produces_34"></a><a class="link" href="#_produces_34">2.35.2. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_route180"><a class="anchor" href="#_route180"></a><a class="link" href="#_route180">2.36. GET /v2/templates/{templateName}</a></h3>
-<div class="sect3">
-<h4 id="_parameters_26"><a class="anchor" href="#_parameters_26"></a><a class="link" href="#_parameters_26">2.36.1. Parameters</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 22.2222%;">
-<col style="width: 33.3333%;">
-<col style="width: 44.4445%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Type</th>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>Path</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>templateName</strong><br>
-<em>required</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_responses_36"><a class="anchor" href="#_responses_36"></a><a class="link" href="#_responses_36">2.36.2. Responses</a></h4>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 10%;">
-<col style="width: 70%;">
-<col style="width: 20%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">HTTP Code</th>
-<th class="tableblock halign-left valign-middle">Description</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>200</strong></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">Output type</p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_looptemplate">LoopTemplate</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect3">
-<h4 id="_produces_35"><a class="anchor" href="#_produces_35"></a><a class="link" href="#_produces_35">2.36.3. Produces</a></h4>
-<div class="ulist">
-<ul>
-<li>
-<p><code>application/json</code></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_definitions"><a class="anchor" href="#_definitions"></a><a class="link" href="#_definitions">3. Definitions</a></h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="_clampinformation"><a class="anchor" href="#_clampinformation"></a><a class="link" href="#_clampinformation">3.1. ClampInformation</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>allPermissions</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; string &gt; array</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>cldsVersion</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>userName</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_cldshealthcheck"><a class="anchor" href="#_cldshealthcheck"></a><a class="link" href="#_cldshealthcheck">3.2. CldsHealthCheck</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>description</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>healthCheckComponent</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>healthCheckStatus</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_dictionary"><a class="anchor" href="#_dictionary"></a><a class="link" href="#_dictionary">3.3. Dictionary</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>dictionaryElements</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; <a href="#_dictionaryelement">DictionaryElement</a> &gt; array</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>name</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>secondLevelDictionary</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int32)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>subDictionaryType</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_dictionaryelement"><a class="anchor" href="#_dictionaryelement"></a><a class="link" href="#_dictionaryelement">3.4. DictionaryElement</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>description</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>name</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>shortName</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>subDictionary</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>type</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>usedByDictionaries</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; <a href="#_dictionary">Dictionary</a> &gt; array</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_externalcomponent"><a class="anchor" href="#_externalcomponent"></a><a class="link" href="#_externalcomponent">3.5. ExternalComponent</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>componentName</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>state</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_externalcomponentstate">ExternalComponentState</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_externalcomponentstate"><a class="anchor" href="#_externalcomponentstate"></a><a class="link" href="#_externalcomponentstate">3.6. ExternalComponentState</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>description</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>level</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int32)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>stateName</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_jsonarray"><a class="anchor" href="#_jsonarray"></a><a class="link" href="#_jsonarray">3.7. JsonArray</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asBigDecimal</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">number</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asBigInteger</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asBoolean</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asByte</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string (byte)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asCharacter</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asDouble</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">number (double)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asFloat</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">number (float)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asInt</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int32)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonArray</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonarray">JsonArray</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonNull</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonnull">JsonNull</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonObject</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonobject">JsonObject</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonPrimitive</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonprimitive">JsonPrimitive</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asLong</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asNumber</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_number">Number</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asShort</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int32)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asString</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonArray</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonNull</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonObject</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonPrimitive</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_jsonnull"><a class="anchor" href="#_jsonnull"></a><a class="link" href="#_jsonnull">3.8. JsonNull</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asBigDecimal</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">number</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asBigInteger</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asBoolean</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asByte</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string (byte)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asCharacter</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asDouble</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">number (double)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asFloat</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">number (float)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asInt</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int32)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonArray</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonarray">JsonArray</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonNull</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonnull">JsonNull</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonObject</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonobject">JsonObject</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonPrimitive</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonprimitive">JsonPrimitive</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asLong</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asNumber</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_number">Number</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asShort</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int32)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asString</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonArray</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonNull</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonObject</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonPrimitive</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_jsonobject"><a class="anchor" href="#_jsonobject"></a><a class="link" href="#_jsonobject">3.9. JsonObject</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asBigDecimal</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">number</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asBigInteger</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asBoolean</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asByte</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string (byte)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asCharacter</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asDouble</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">number (double)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asFloat</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">number (float)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asInt</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int32)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonArray</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonarray">JsonArray</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonNull</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonnull">JsonNull</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonObject</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonobject">JsonObject</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonPrimitive</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonprimitive">JsonPrimitive</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asLong</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asNumber</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_number">Number</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asShort</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int32)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asString</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonArray</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonNull</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonObject</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonPrimitive</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_jsonprimitive"><a class="anchor" href="#_jsonprimitive"></a><a class="link" href="#_jsonprimitive">3.10. JsonPrimitive</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asBigDecimal</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">number</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asBigInteger</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asBoolean</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asByte</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string (byte)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asCharacter</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asDouble</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">number (double)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asFloat</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">number (float)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asInt</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int32)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonArray</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonarray">JsonArray</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonNull</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonnull">JsonNull</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonObject</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonobject">JsonObject</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asJsonPrimitive</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonprimitive">JsonPrimitive</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asLong</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asNumber</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_number">Number</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asShort</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int32)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>asString</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>boolean</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonArray</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonNull</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonObject</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonPrimitive</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>number</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>string</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_loop"><a class="anchor" href="#_loop"></a><a class="link" href="#_loop">3.11. Loop</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>components</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; string, <a href="#_externalcomponent">ExternalComponent</a> &gt; map</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>dcaeDeploymentId</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>dcaeDeploymentStatusUrl</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>globalPropertiesJson</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonobject">JsonObject</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>lastComputedState</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">enum (DESIGN, SUBMITTED, DEPLOYED, RUNNING, STOPPED, IN_ERROR, WAITING)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopLogs</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; <a href="#_looplog">LoopLog</a> &gt; array</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopTemplate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_looptemplate">LoopTemplate</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>microServicePolicies</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; <a href="#_microservicepolicy">MicroServicePolicy</a> &gt; array</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>modelService</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_service">Service</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>name</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>operationalPolicies</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; <a href="#_operationalpolicy">OperationalPolicy</a> &gt; array</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_loopelementmodel"><a class="anchor" href="#_loopelementmodel"></a><a class="link" href="#_loopelementmodel">3.12. LoopElementModel</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>blueprint</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>dcaeBlueprintId</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopElementType</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>name</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyModels</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; <a href="#_policymodel">PolicyModel</a> &gt; array</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>shortName</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>usedByLoopTemplates</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; <a href="#_looptemplateloopelementmodel">LoopTemplateLoopElementModel</a> &gt; array</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_looplog"><a class="anchor" href="#_looplog"></a><a class="link" href="#_looplog">3.13. LoopLog</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>id</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>logComponent</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>logInstant</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>logType</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">enum (INFO, WARNING, ERROR)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loop</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>message</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_looptemplate"><a class="anchor" href="#_looptemplate"></a><a class="link" href="#_looptemplate">3.14. LoopTemplate</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>allowedLoopType</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">enum (OPEN, CLOSED, HYBRID)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>blueprint</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>dcaeBlueprintId</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopElementModelsUsed</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; <a href="#_looptemplateloopelementmodel">LoopTemplateLoopElementModel</a> &gt; array</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>maximumInstancesAllowed</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int32)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>modelService</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_service">Service</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>name</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>uniqueBlueprint</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_looptemplateloopelementmodel"><a class="anchor" href="#_looptemplateloopelementmodel"></a><a class="link" href="#_looptemplateloopelementmodel">3.15. LoopTemplateLoopElementModel</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>flowOrder</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int32)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopElementModel</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loopelementmodel">LoopElementModel</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopTemplate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_looptemplate">LoopTemplate</a></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_microservicepolicy"><a class="anchor" href="#_microservicepolicy"></a><a class="link" href="#_microservicepolicy">3.16. MicroServicePolicy</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>configurationsJson</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonobject">JsonObject</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>context</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>dcaeBlueprintId</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>dcaeDeploymentId</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>dcaeDeploymentStatusUrl</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>deviceTypeScope</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonRepresentation</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonobject">JsonObject</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopElementModel</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loopelementmodel">LoopElementModel</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>name</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>pdpGroup</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>pdpSubgroup</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyModel</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_policymodel">PolicyModel</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>shared</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>usedByLoops</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; <a href="#_loop">Loop</a> &gt; array</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_number"><a class="anchor" href="#_number"></a><a class="link" href="#_number">3.17. Number</a></h3>
-<div class="paragraph">
-<p><em>Type</em> : object</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_operationalpolicy"><a class="anchor" href="#_operationalpolicy"></a><a class="link" href="#_operationalpolicy">3.18. OperationalPolicy</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>configurationsJson</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonobject">JsonObject</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>jsonRepresentation</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonobject">JsonObject</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loop</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loop">Loop</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>loopElementModel</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_loopelementmodel">LoopElementModel</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>name</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>pdpGroup</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>pdpSubgroup</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyModel</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_policymodel">PolicyModel</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_policymodel"><a class="anchor" href="#_policymodel"></a><a class="link" href="#_policymodel">3.19. PolicyModel</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>createdDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyAcronym</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyModelTosca</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyModelType</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>policyPdpGroup</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonobject">JsonObject</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedBy</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>updatedDate</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">integer (int64)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>usedByElementModels</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">&lt; <a href="#_loopelementmodel">LoopElementModel</a> &gt; array</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>version</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="sect2">
-<h3 id="_service"><a class="anchor" href="#_service"></a><a class="link" href="#_service">3.20. Service</a></h3>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 42.8571%;">
-<col style="width: 57.1429%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-middle">Name</th>
-<th class="tableblock halign-left valign-middle">Schema</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>name</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>resourceDetails</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonobject">JsonObject</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>serviceDetails</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="#_jsonobject">JsonObject</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>serviceUuid</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-middle"><p class="tableblock"><strong>version</strong><br>
-<em>optional</em></p></td>
-<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-</div>
-</div>
-<div id="footer">
-<div id="footer-text">
-Last updated 2020-12-10 09:38:32 CET
-</div>
-</div>
-</body>
-</html> \ No newline at end of file
diff --git a/src/main/resources/META-INF/services/org/apache/camel/dataformat/clamp-gson b/src/main/resources/META-INF/services/org/apache/camel/dataformat/clamp-gson
deleted file mode 100644
index 04caffa99..000000000
--- a/src/main/resources/META-INF/services/org/apache/camel/dataformat/clamp-gson
+++ /dev/null
@@ -1,23 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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============================================
- * ===================================================================
- */
-
-class=org.onap.policy.clamp.configuration.ClampGsonDataFormat \ No newline at end of file
diff --git a/src/main/resources/application-noaaf.properties b/src/main/resources/application-noaaf.properties
deleted file mode 100644
index f398f8d98..000000000
--- a/src/main/resources/application-noaaf.properties
+++ /dev/null
@@ -1,187 +0,0 @@
-###
-# ============LICENSE_START=======================================================
-# ONAP CLAMP
-# ================================================================================
-# Copyright (C) 2017-2019,2021 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============================================
-# ===================================================================
-#
-###
-
-### Set the port for HTTP or HTTPS protocol (Controlled by Spring framework, only one at a time).
-### (See below for the parameter 'server.http.port' if you want to have both enabled)
-### To have only HTTP, keep the lines server.ssl.* commented
-### To have only HTTPS enabled, uncomment the server.ssl.* lines and specify a right keystore location
-### server.port=8080
-### Settings for HTTPS (this automatically enables the HTTPS on the port 'server.port')
-#server.ssl.key-store=file:/tmp/mykey.jks
-#server.ssl.key-store-password=pass
-#server.ssl.key-password=pass
-
-### In order to be user friendly when HTTPS is enabled,
-### you can add another HTTP port that will be automatically redirected to HTTPS
-### by enabling this parameter (server.http.port) and set it to another port (80 or 8080, 8090, etc ...)
-#server.http-to-https-redirection.port=8090
-
-### HTTP Example:
-###--------------
-### server.port=8080
-
-### HTTPS Example:
-### --------------
-### server.port=8443
-### server.ssl.key-store=file:/tmp/mykey.jks
-### server.ssl.key-store-password=mypass
-### server.ssl.key-password=mypass
-server.port=8443
-## Config part for Server certificates
-# Can be a classpath parameter instead of file:/
-server.ssl.key-store=classpath:/clds/aaf/org.onap.clamp.p12
-server.ssl.key-store-password=enc:WWCxchk4WGBNSvuzLq3MLjMs5ObRybJtts5AI0XD1Vc
-server.ssl.key-password=enc:WWCxchk4WGBNSvuzLq3MLjMs5ObRybJtts5AI0XD1Vc
-server.ssl.key-store-type=PKCS12
-server.ssl.key-alias=clamptest
-
-## Config part for Client certificates
-server.ssl.client-auth=want
-server.ssl.trust-store=classpath:/clds/aaf/truststoreONAPall.jks
-server.ssl.trust-store-password=enc:iDnPBBLq_EMidXlMa1FEuBR8TZzYxrCg66vq_XfLHdJ
-
-# The key file used to decode the key store and trust store password
-# If not defined, the key store and trust store password will not be decrypted
-clamp.config.keyFile=classpath:/clds/aaf/org.onap.clamp.keyfile
-
-#server.http-to-https-redirection.port=8080
-
-server.servlet.context-path=/
-#Modified engine-rest applicationpath
-spring.profiles.active=clamp-default,clamp-default-user,clamp-sdc-controller,clamp-ssl-config,clamp-policy-controller,default-dictionary-elements
-spring.http.converters.preferred-json-mapper=gson
-
-#The max number of active threads in this pool
-server.tomcat.max-threads=200
-#The minimum number of threads always kept alive
-server.tomcat.min-Spare-Threads=25
-#The number of milliseconds before an idle thread shutsdown, unless the number of active threads are less or equal to minSpareThreads
-server.tomcat.max-idle-time=60000
-
-#Servlet context parameters
-server.context_parameters.p-name=value #context parameter with p-name as key and value as value.
-
-camel.springboot.tracing=true
-camel.springboot.consumer-template-cache-size=1000
-camel.springboot.producer-template-cache-size=1000
-camel.springboot.jmx-enabled=true
-camel.defaultthreadpool.poolsize=10
-camel.defaultthreadpool.maxpoolsize=20
-camel.defaultthreadpool.maxqueuesize=1000
-camel.defaultthreadpool.keepaliveTime=60
-camel.defaultthreadpool.rejectpolicy=CallerRuns
-#camel.springboot.xmlRoutes = false
-camel.springboot.xmlRoutes=classpath:/clds/camel/routes/*.xml
-camel.springboot.xmlRests=classpath:/clds/camel/rest/*.xml
-#camel.springboot.typeConversion = false
-
-#clds datasource connection details
-spring.datasource.driverClassName=org.mariadb.jdbc.Driver
-spring.datasource.url=jdbc:mariadb:sequential://localhost:3306/cldsdb4?autoReconnect=true&connectTimeout=10000&socketTimeout=10000&retriesAllDown=3
-spring.datasource.username=clds
-spring.datasource.password=sidnnd83K
-spring.datasource.validationQuery=SELECT 1
-spring.datasource.validationQueryTimeout=20000
-spring.datasource.validationInterval=30000
-spring.datasource.testWhileIdle = true
-spring.datasource.minIdle = 0
-spring.datasource.initialSize=0
-# Automatically test whether a connection provided is good or not
-spring.datasource.testOnBorrow=true
-spring.datasource.ignoreExceptionOnPreLoad=true
-# control the sql db initialization (from schema.sql and data.sql)
-spring.datasource..initialize=false
-
-spring.jpa.properties.javax.persistence.schema-generation.database.action=none
-s#pring.jpa.properties.javax.persistence.schema-generation.create-source=metadata
-#spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create
-#spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql
-# disable Hibernate DDL generation because the schema will be generated from a sql script
-spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
-spring.jpa.properties.hibernate.ddl-auto=validate
-spring.jpa.properties.hibernate.hbm2ddl.delimiter=;
-spring.jpa.properties.hibernate.format_sql=true
-spring.jpa.properties.hibernate.use-new-id-generator-mappings=true
-
-# Whether to enable logging of SQL statements.
-#spring.jpa.show-sql=true
-
-#Async Executor default Parameters
-async.core.pool.size=10
-async.max.pool.size=20
-async.queue.capacity=500
-
-#For EELF logback file
-#clamp.config.logback.path=
-clamp.config.logback.filename=logback-default.xml
-#The log folder that will be used in logback.xml file
-clamp.config.log.path=/var/log/onap/clamp
-clamp.config.files.systemProperties=classpath:/system.properties
-clamp.config.files.cldsUsers=classpath:/clds/clds-users.json
-clamp.config.files.globalProperties=classpath:/clds/templates/globalProperties.json
-clamp.config.files.sdcController=classpath:/clds/sdc-controllers-config.json
-
-#
-# Configuration Settings for Policy Engine Components
-clamp.config.policy.api.url=http4://localhost:8085
-clamp.config.policy.api.userName=healthcheck
-clamp.config.policy.api.password=zb!XztG34
-clamp.config.policy.pap.url=http4://localhost:8085
-clamp.config.policy.pap.userName=healthcheck
-clamp.config.policy.pap.password=zb!XztG34
-
-#
-# Sdc service properties
-clamp.config.sdc.csarFolder = /tmp/sdc-controllers
-
-#DCAE Inventory Url Properties
-clamp.config.dcae.inventory.url=http4://localhost:8085
-clamp.config.dcae.intentory.retry.interval=10000
-clamp.config.dcae.intentory.retry.limit=5
-
-#DCAE Deployment Url Properties
-clamp.config.dcae.deployment.url=http4://localhost:8085
-clamp.config.dcae.deployment.userName=test
-clamp.config.dcae.deployment.password=test
-
-#Define user permission related parameters, the permission type can be changed but MUST be redefined in clds-users.properties in that case !
-clamp.config.security.permission.type.cl=org.onap.clamp.clds.cl
-clamp.config.security.permission.type.cl.manage=org.onap.clamp.clds.cl.manage
-clamp.config.security.permission.type.cl.event=org.onap.clamp.clds.cl.event
-clamp.config.security.permission.type.filter.vf=org.onap.clamp.clds.filter.vf
-clamp.config.security.permission.type.template=org.onap.clamp.clds.template
-clamp.config.security.permission.type.tosca=org.onap.clamp.clds.tosca
-clamp.config.security.permission.type.policies=org.onap.clamp.clds.policies
-#This one indicates the type of instances (dev|prod|perf...), this must be set accordingly in clds-users.properties
-clamp.config.security.permission.instance=dev
-clamp.config.security.authentication.class=org.onap.aaf.cadi.principal.X509Principal, org.onap.aaf.cadi.principal.CachedBasicPrincipal
-
-## Tosca converter
-clamp.config.tosca.converter.json.schema.templates=classpath:/clds/tosca-converter/templates.json
-clamp.config.tosca.converter.default.datatypes=classpath:/clds/tosca-converter/default-tosca-types.yaml
-clamp.config.tosca.converter.dictionary.support.enabled=true
-
-# Configuration settings for CDS
-clamp.config.cds.url=http4://cds-blueprints-processor-http:8080
-clamp.config.cds.userName=ccsdkapps
-clamp.config.cds.password=ccsdkapps \ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
deleted file mode 100644
index 97870d2b6..000000000
--- a/src/main/resources/application.properties
+++ /dev/null
@@ -1,201 +0,0 @@
-###
-# ============LICENSE_START=======================================================
-# ONAP CLAMP
-# ================================================================================
-# Copyright (C) 2017-2019, 2021 AT&T Intellectual Property. All rights
-# reserved.
-# ================================================================================
-# Modifications copyright (c) 2019 Nokia
-# ================================================================================\
-# 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============================================
-# ===================================================================
-#
-###
-
-### Set the port for HTTP or HTTPS protocol (Controlled by Spring framework, only one at a time).
-### (See below for the parameter 'server.http.port' if you want to have both enabled)
-### To have only HTTP, keep the lines server.ssl.* commented
-### To have only HTTPS enabled, uncomment the server.ssl.* lines and specify a right keystore location
-### server.port=8080
-### Settings for HTTPS (this automatically enables the HTTPS on the port 'server.port')
-#server.ssl.key-store=file:/tmp/mykey.jks
-#server.ssl.key-store-password=pass
-#server.ssl.key-password=pass
-
-### In order to be user friendly when HTTPS is enabled,
-### you can add another HTTP port that will be automatically redirected to HTTPS
-### by enabling this parameter (server.http.port) and set it to another port (80 or 8080, 8090, etc ...)
-#server.http-to-https-redirection.port=8090
-
-### HTTP Example:
-###--------------
-### server.port=8080
-
-### HTTPS Example:
-### --------------
-### server.port=8443
-### server.ssl.key-store=file:/tmp/mykey.jks
-### server.ssl.key-store-password=mypass
-### server.ssl.key-password=mypass
-
-### HTTP (Redirected to HTTPS) and HTTPS Example:
-### --------------------------------------------
-server.port=8443
-## Config part for Server certificates
-# Can be a classpath parameter instead of file:/
-server.ssl.key-store=classpath:/clds/aaf/org.onap.clamp.p12
-server.ssl.key-store-password=enc:WWCxchk4WGBNSvuzLq3MLjMs5ObRybJtts5AI0XD1Vc
-server.ssl.key-password=enc:WWCxchk4WGBNSvuzLq3MLjMs5ObRybJtts5AI0XD1Vc
-server.ssl.key-store-type=PKCS12
-server.ssl.key-alias=clamptest
-
-# The key file used to decode the key store and trust store password
-# If not defined, the key store and trust store password will not be decrypted
-clamp.config.keyFile=classpath:/clds/aaf/org.onap.clamp.keyfile
-clamp.config.caCerts=classpath:/clds/aaf/ssl/ca-certs.pem
-
-## Config part for Client certificates
-server.ssl.client-auth=want
-server.ssl.trust-store=classpath:/clds/aaf/truststoreONAPall.jks
-server.ssl.trust-store-password=enc:iDnPBBLq_EMidXlMa1FEuBR8TZzYxrCg66vq_XfLHdJ
-
-#server.http-to-https-redirection.port=8080
-
-server.servlet.context-path=/
-#Modified engine-rest applicationpath
-spring.profiles.active=clamp-default,clamp-aaf-authentication,clamp-sdc-controller,clamp-ssl-config,clamp-policy-controller,default-dictionary-elements
-spring.http.converters.preferred-json-mapper=gson
-
-#The max number of active threads in this pool
-server.tomcat.max-threads=200
-#The minimum number of threads always kept alive
-server.tomcat.min-Spare-Threads=25
-#The number of milliseconds before an idle thread shutsdown, unless the number of active threads are less or equal to minSpareThreads
-server.tomcat.max-idle-time=60000
-
-#Servlet context parameters
-server.context_parameters.p-name=value #context parameter with p-name as key and value as value.
-camel.springboot.tracing=true
-camel.springboot.consumer-template-cache-size=1000
-camel.springboot.producer-template-cache-size=1000
-camel.springboot.jmx-enabled=true
-camel.defaultthreadpool.poolsize=10
-camel.defaultthreadpool.maxpoolsize=20
-camel.defaultthreadpool.maxqueuesize=1000
-camel.defaultthreadpool.keepaliveTime=60
-camel.defaultthreadpool.rejectpolicy=CallerRuns
-#camel.springboot.xmlRoutes = false
-camel.springboot.xmlRoutes=classpath:/clds/camel/routes/*.xml
-camel.springboot.xmlRests=classpath:/clds/camel/rest/*.xml
-#camel.springboot.typeConversion = false
-
-#clds datasource connection details
-spring.datasource.driverClassName=org.mariadb.jdbc.Driver
-spring.datasource.url=jdbc:mariadb:sequential://localhost:3306/cldsdb4?autoReconnect=true&connectTimeout=10000&socketTimeout=10000&retriesAllDown=3
-spring.datasource.username=clds
-spring.datasource.password=sidnnd83K
-spring.datasource.validationQuery=SELECT 1
-spring.datasource.validationQueryTimeout=20000
-spring.datasource.validationInterval=30000
-spring.datasource.testWhileIdle = true
-spring.datasource.minIdle = 0
-spring.datasource.initialSize=0
-# Automatically test whether a connection provided is good or not
-spring.datasource.testOnBorrow=true
-spring.datasource.ignoreExceptionOnPreLoad=true
-
-spring.jpa.properties.javax.persistence.schema-generation.database.action=none
-#spring.jpa.properties.javax.persistence.schema-generation.create-source=metadata
-#spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create
-#spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql
-# disable Hibernate DDL generation because the schema will be generated from a sql script
-spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
-spring.jpa.properties.hibernate.ddl-auto=validate
-spring.jpa.properties.hibernate.hbm2ddl.delimiter=;
-spring.jpa.properties.hibernate.format_sql=true
-spring.jpa.properties.hibernate.use-new-id-generator-mappings=true
-
-# Whether to enable logging of SQL statements.
-#spring.jpa.show-sql=true
-
-#Async Executor default Parameters
-async.core.pool.size=10
-async.max.pool.size=20
-async.queue.capacity=500
-
-#For EELF logback file
-#clamp.config.logback.path=
-clamp.config.logback.filename=logback-default.xml
-#The log folder that will be used in logback.xml file
-clamp.config.log.path=/var/log/onap/clamp
-clamp.config.files.systemProperties=classpath:/system.properties
-clamp.config.files.cldsUsers=classpath:/clds/clds-users.json
-clamp.config.files.globalProperties=classpath:/clds/templates/globalProperties.json
-clamp.config.files.sdcController=classpath:/clds/sdc-controllers-config.json
-
-#
-# Configuration Settings for Policy Engine Components
-clamp.config.policy.api.url=http4://policy.api.simpledemo.onap.org:6969
-clamp.config.policy.api.userName=healthcheck
-clamp.config.policy.api.password=zb!XztG34
-clamp.config.policy.pap.url=http4://policy.api.simpledemo.onap.org:6969
-clamp.config.policy.pap.userName=healthcheck
-clamp.config.policy.pap.password=zb!XztG34
-
-#
-# Sdc service properties
-clamp.config.sdc.csarFolder=/tmp/sdc-controllers
-
-#DCAE Inventory Url Properties
-clamp.config.dcae.inventory.url=http4://dcae.api.simpledemo.onap.org:8080
-clamp.config.dcae.intentory.retry.interval=10000
-clamp.config.dcae.intentory.retry.limit=5
-
-#DCAE Deployment Url Properties
-clamp.config.dcae.deployment.url=http4://dcae.api.simpledemo.onap.org:8188
-clamp.config.dcae.deployment.userName=test
-clamp.config.dcae.deployment.password=test
-
-#Define user permission related parameters, the permission type can be changed but MUST be redefined in clds-users.properties in that case !
-clamp.config.security.permission.type.cl=org.onap.clamp.clds.cl
-clamp.config.security.permission.type.cl.manage=org.onap.clamp.clds.cl.manage
-clamp.config.security.permission.type.cl.event=org.onap.clamp.clds.cl.event
-clamp.config.security.permission.type.filter.vf=org.onap.clamp.clds.filter.vf
-clamp.config.security.permission.type.template=org.onap.clamp.clds.template
-clamp.config.security.permission.type.tosca=org.onap.clamp.clds.tosca
-clamp.config.security.permission.type.policies=org.onap.clamp.clds.policies
-#This one indicates the type of instances (dev|prod|perf...), this must be set accordingly in clds-users.properties
-clamp.config.security.permission.instance=dev
-clamp.config.security.authentication.class=org.onap.aaf.cadi.principal.X509Principal, org.onap.aaf.cadi.principal.CachedBasicPrincipal
-
-#AAF related parameters
-clamp.config.cadi.cadiLoglevel=DEBUG
-clamp.config.cadi.cadiLatitude=10
-clamp.config.cadi.cadiLongitude=10
-clamp.config.cadi.aafLocateUrl=https://aaf-locate:30251
-clamp.config.cadi.oauthTokenUrl= https://AAF_LOCATE_URL/locate/onap.org.osaaf.aaf.token:2.1/token
-clamp.config.cadi.oauthIntrospectUrll=https://AAF_LOCATE_URL/locate/onap.org.osaaf.aaf.introspect:2.1/introspect
-clamp.config.cadi.aafEnv=DEV
-clamp.config.cadi.aafUrl=https://AAF_LOCATE_URL/onap.org.osaaf.aaf.service:2.1
-clamp.config.cadi.cadiX509Issuers=CN=intermediateCA_1, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_7, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_9, OU=OSAAF, O=ONAP, C=US
-
-## Tosca converter
-clamp.config.tosca.converter.json.schema.templates=classpath:/clds/tosca-converter/templates.json
-clamp.config.tosca.converter.default.datatypes=classpath:/clds/tosca-converter/default-tosca-types.yaml
-clamp.config.tosca.converter.dictionary.support.enabled=true
-
-# Configuration settings for CDS
-clamp.config.cds.url=http4://cds-blueprints-processor-http:8080
-clamp.config.cds.userName=ccsdkapps
-clamp.config.cds.password=ccsdkapps \ No newline at end of file
diff --git a/src/main/resources/asciidoc/swagger.adoc b/src/main/resources/asciidoc/swagger.adoc
deleted file mode 100644
index 6896747fd..000000000
--- a/src/main/resources/asciidoc/swagger.adoc
+++ /dev/null
@@ -1,4 +0,0 @@
-include::{generated}/overview.adoc[]
-include::{generated}/paths.adoc[]
-include::{generated}/security.adoc[]
-include::{generated}/definitions.adoc[] \ No newline at end of file
diff --git a/src/main/resources/boot-message.txt b/src/main/resources/boot-message.txt
deleted file mode 100644
index b0d68e04c..000000000
--- a/src/main/resources/boot-message.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-
- ___ ____ ____ ____ __ __ ___ ____ ___ _ __ __ _ __ __
- / \ | \ / T| \ | T T / \ | \ / \ | T | T T| T | T T
-Y Y| _ YY o || o ) | l |Y Y| _ YY Y| | | | || | | | |
-| O || | || || _/ | _ || O || | || O || l___ | | || l___ | | |
-| || | || _ || | | | || || | || || T| : || T| : |
-l !| | || | || | | | |l !| | |l !| |l || |l |
- \___/ l__j__jl__j__jl__j l__j__j \___/ l__j__j \___/ l_____j \__,_jl_____j \__,_j
-
- ____ ___ _ ____ __ __ __ __ _ ____ ___ ___ ____
-| \ / \ | T l j / ]| T T / ]| T / T| T T| \
-| o )Y Y| | | T / / | | | _____ / / | | Y o || _ _ || o )
-| _/ | O || l___ | | / / | ~ || | / / | l___ | || \_/ || _/
-| | | || T | |/ \_ l___, |l_____j/ \_ | T| _ || | || |
-| | l !| | j l\ || ! \ || || | || | || |
-l__j \___/ l_____j|____j\____jl____/ \____jl_____jl__j__jl___j___jl__j
-
-
-
-
- :: Starting :: \ No newline at end of file
diff --git a/src/main/resources/clds-version.properties b/src/main/resources/clds-version.properties
deleted file mode 100644
index a0dbcdead..000000000
--- a/src/main/resources/clds-version.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-###
-# ============LICENSE_START=======================================================
-# ONAP CLAMP
-# ================================================================================
-# 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============================================
-# ===================================================================
-#
-###
-
-clds.version=${project.version} \ No newline at end of file
diff --git a/src/main/resources/clds/aaf/org.onap.clamp.keyfile b/src/main/resources/clds/aaf/org.onap.clamp.keyfile
deleted file mode 100644
index c2521fc81..000000000
--- a/src/main/resources/clds/aaf/org.onap.clamp.keyfile
+++ /dev/null
@@ -1,27 +0,0 @@
-kzJMxgphAoBxJz1_vYjxx-V87fahDQdYUqBIyWhZp8ojXdNpmB-96T9CvgJScJynbLcqw2Cj2CYx
-wd97vFOYhlyz5zK3tSyIuydOkVGJsJ1S4PviTtjhiJvNourJNDHgtas1Y1y2fQ5_8aVxj-s4W72N
-MNYhkeTinaQx_d_5hkBPABJlgCxKLnmxHo2jAJktnZYa5t5h48m7KiUx_RVEkQVtEvux-7vgXaC4
-ymTXj6zI9XoMTVxM0OAl4y7kBiUoOUaxS4tVKV34RJYNNqBjiUTQa_ag-KeUacRABk1ozfwzpvE5
-Sjz8WCy0L-LtCQnapkhKLt04ndCZtw8LDJ-Zz0ZgR2PVIPpTgs9VnVuOi5jf4LzTrtUatvOWkKB9
-drXKzp6cNXnZ0jkD3vV1BzqzhynKnZR2o_ilZv5CTTdpGUt906N_DwZuX6LfcV_7yvjX42bTfeIR
-ycPtodFPXlqqn9VUyh5nOauJlnOHAQmSDzjMEgjy17nQX3Ad7s4BfvujzUl-d0MqB_HCKbaW32UT
-xcY-0JfI1Y-2IdYfIkUdhVmxop6sSg0jAobWzgCRoRQkP3a2iIlKdfMyskshoWKIDVtlr-3fkDEb
-x_b_o1rRoUfzUzxEdphaUAq80Sc0i77ZLT3KF9vJOhyU_pBnApYFxVk7Hkk3VRxJKS7jyL4H7k1x
-2m5-2G8fB9XbYZT82xmAquNx4oBdpwj3_ncGF9YRF94K6NZgqemT5iWhpXMoelSU1blASgT3qlTm
-B6YgbD5owExNHwRVd8KeRsYrOnBWUiktsIhXFhNZmDUNWMFGQ2KxEcOt1tJwsQDehJFgY_l1JQ0d
-643wJ7rTJkGkYX309cydRQUX4Z0ckSQS9LhMd9stxF5XOHlvHdbW0pXNS7SaLbzKCVldUgncvI6z
-KWkwrWbftrZK2RT1UZKNngQDMGOk9OhbHAs7YzhFNFARZoRNobIv5tZVDomy-YgJb9-mD1UTkRBL
-WXOyoryDlgKrgFsgHclGDI1UFO5N-JfebPKxbP505f4924hxF2r8bspvVW8ZtHQo_SJmhauOX8n_
-eN_LK43LB9k53WAHZ_utvs0s6wGf7I73oj_N7DIFaHTDSm_MhDsFDLVG_wUzCpZ5FP2uL3nnqMkF
-Ob-l1fywfmfOmrz1BY6g4sRPPeWXuclYTnRnDRu5VQyc7_aBEVkyt3zw0JEex0vJNFUJl3pYjS55
-GplAB6p7VbS9ceZEtc5Z3qFIVHEzKWZxT190E23t_LlMuEoQ1zaqdHynNaMs61-q_A2aHRiTqlRm
-7FahVB3RX4AVLl23mu4u3A9ZDXc40nzjs9mwOVsuKlPvQ2rteDUG1njr2R1_V_MyQuoJjdfbIkPG
-4eF0QzlSMdbkeprdQxSfV5YT-yPpkBxSsCMMM43sKm4Hy7_CUdvp4Iayrp3vtK3oYMuCGi6qTadz
-KzxfTf8meKan3eMZW4RLByyniH5nQnX_KGfBly05AmFyVH_j0fyOg-48kDhtEKeqmDnP4C01jOID
-Ip_AKaB6e0GwsHzVTLZOklHwu_qzsaTzchBOG_dJJju7bxY7qv78Pa92wZIP311gSCVbc-gxxbsR
-qI555twmYEoasFm4xz10OYDOkvM1E1Rtxu3ymRLZpe6AoyFBVzEW7Dncdw7O98dKcgrp8ZlQ_8Wg
-5zZH0Cic7xnIZ0bNZyQXw56CSUiXVWuwVY3e0djXP3F-FO5gP8VTxbpW4C0t6McXAOlvSEfFKxN7
-u6OBeOKwjrtHaJk2ghF8MUcpDXanhbAgHez9larGlscCkgvoRLNaRH9GIdSVgY3HtNhJRaJIq01S
-OGeBjC5J4o-nTrqRFkwyDAYcPL373eYX1dBFFVHR-4q50H9m_zMxZHXETafxzV4DT3Qi8Sxh3uaS
-ZX7mRaNaOE0uC1n87_IZ9WhrwIQaZng2lnd9yZ-4rx8fB8WA8KQzifzvHAcMb_HV10JWGaz5A2Rm
-EXDsfexQC6CqYg5rdzzlNWDPNlHy5ubyz7fRXZ99uIwBY9aJcvCXCiEXJkC6utj3NcXQrJmk \ No newline at end of file
diff --git a/src/main/resources/clds/aaf/ssl/ca-certs.pem b/src/main/resources/clds/aaf/ssl/ca-certs.pem
deleted file mode 100644
index 70bb844b7..000000000
--- a/src/main/resources/clds/aaf/ssl/ca-certs.pem
+++ /dev/null
@@ -1,32 +0,0 @@
-Bag Attributes
- friendlyName: CN=intermediateCA_9,OU=OSAAF,O=ONAP,C=US
-subject=C = US, O = ONAP, OU = OSAAF, CN = intermediateCA_9
-
-issuer=OU = OSAAF, O = ONAP, C = US
-
------BEGIN CERTIFICATE-----
-MIIEdTCCAl2gAwIBAgIBBzANBgkqhkiG9w0BAQsFADAsMQ4wDAYDVQQLDAVPU0FB
-RjENMAsGA1UECgwET05BUDELMAkGA1UEBhMCVVMwHhcNMTgwODE3MTg1MTM3WhcN
-MjMwODE3MTg1MTM3WjBHMQswCQYDVQQGEwJVUzENMAsGA1UECgwET05BUDEOMAwG
-A1UECwwFT1NBQUYxGTAXBgNVBAMMEGludGVybWVkaWF0ZUNBXzkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCv0HHUkba3uNtNI3jPKimUcd6RNwmhSCJL
-neMWpnjqp5/A+HCKyNsEaT4y177hNLmCm/aMm1u2JIfikc+8wEqLCSBBPz+P0h+d
-o+sZ7U+4oeQizdYYpEdzHJ2SieHHa8vtu80rU3nO2NEIkuYC20HcKSEtl8fFKsk3
-nqlhY+tGfYJPTXcDOQAO40BTcgat3C3uIJHkWJJ4RivunE4LEuRv9QyKgAw7rkJV
-v+f7guqpZlXy6dzAkuU7XULWcgo55MkZlssoiErMvEZJad5aWKvRY3g7qUjaQ6wO
-15wOAUoRBW96eeZZbytgn8kybcBy++Ue49gPtgm1MF/KlAsp0MD5AgMBAAGjgYYw
-gYMwHQYDVR0OBBYEFIH3mVsQuciM3vNSXupOaaBDPqzdMB8GA1UdIwQYMBaAFFNV
-M/JL69BRscF4msEoMXvv6u1JMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/
-BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0B
-AQsFAAOCAgEADxNymiCNr2e37iLReoaxKmZvwox0cTiNAaj7iafRzmwIoY3VXO8Q
-ix5IYcp4FaQ7fV1jyp/AmaSnyHf6Osl0sx8PxsQkO7ALttxKUrjfbvNSVUA2C/vl
-u5m7UVJLIUtFDZBWanzUSmkTsYLHpiANFQKd2c/cU1qXcyzgJVFEFVyyHNkF7Is+
-+pjG9M1hwQHOoTnEuU013P7X1mHek+RXEfhJWwe7UsZnBKZaZKbQZu7hEtqKWYp/
-QsHgnjoLYXsh0WD5rz/mBxdTdDLGpFqWDzDqb8rsYnqBzoowvsasV8X8OSkov0Ht
-8Yka0ckFH9yf8j1Cwmbl6ttuonOhky3N/gwLEozuhy7TPcZGVyzevF70kXy7g1CX
-kpFGJyEHXoprlNi8FR4I+NFzbDe6a2cFow1JN19AJ9Z5Rk5m7M0mQPaQ4RcikjB3
-aoLsASCJTm1OpOFHfxEKiBW4Lsp3Uc5/Rb9ZNbfLrwqWZRM7buW1e3ekLqntgbky
-uKKISHqVJuw/vXHl1jNibEo9+JuQ88VNuAcm7WpGUogeCa2iAlPTckPZei+MwZ8w
-tpvxTyYlZEC8DWzY1VC29+W2N5cvh01e2E3Ql08W1zL63dqrgdEZ3VWjzooYi4ep
-BmMXTvouW+Flyvcw/0oTcfN0biDIt0mCkZ5CQVjfGL9DTOYteR5hw+k=
------END CERTIFICATE-----
diff --git a/src/main/resources/clds/aaf/ssl/clamp.key b/src/main/resources/clds/aaf/ssl/clamp.key
deleted file mode 100644
index bcbb9f17e..000000000
--- a/src/main/resources/clds/aaf/ssl/clamp.key
+++ /dev/null
@@ -1,32 +0,0 @@
-Bag Attributes
- friendlyName: clamp@clamp.onap.org
- localKeyID: 54 69 6D 65 20 31 35 38 30 38 32 39 30 36 35 34 37 39
-Key Attributes: <No Attributes>
------BEGIN PRIVATE KEY-----
-MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCTB30nMh0hczIk
-vWJo7Omg7cAHhz50NBhLB7u+60oXRGCya4SqssqqxNnNqNQQP9MmflW2q/bZepWn
-8Rk23X6CLmoIUlrj8BMPkUCRqzgvlaWPSNAK5QcOp6GUvXTuX4EsaWxJhbs9Ujz2
-+qi137iNOqfAx1sUygah1kjALrqHkXDqJGvIfxU5ES0akBi/lB7A3WpE52KTioSF
-JS5Kbnpj1ogffGNKyAiNqU61LcF1FjWmINat2z3ZMk/3Xm+HCDg/GLPnbh4E1KoE
-10O22AMys6YGEyPvgRfrTF13DsDX52PmmUHbkSB6kwS/CeV5Uu++8b6T2IWpPyZ2
-+5ptmL+tAgMBAAECggEBAIUplzRUswWEq7mSvPqC9+YE7pLi7rGYLRhnXKdBuszv
-5RQzROjFHcEkoI8fhVFiPP70FPVpMh0uZTTBrDCA0v9cwjPfQuqGmPzUdUJ5bF3M
-jzICpEn5vDaNpE5ueOUcIoXyxVyhfj+/p++YfgybHy7qHN0AsYFWqEMTLLjCmbYF
-pZozbAcGQoAR8PSfwuvgusuEezrhYertHsdFwlfZhDtJvnm/4YKRUVEBzuaaA7B9
-sUhnQFS8ScqiUbkAGdjfY9wOYRHnQgjtqiP8poIzLkqCNSoVctgh5Pdv4jp4HO90
-J5QC+f7m7rOoWUw8EYbRo/4C4Mckh0GQQ+oP4xzrtZECgYEA3DYALFgOEY+0RR1K
-61HAKqdNy1YbeuidpCBEJEwmIbzdgO1DcJdNznbfdRlmS7VB9orwRfNbf7Hxm2w/
-/xn9USENXWx7fvDoISqSDegvEsBSq5hSEMVl3f7CfQZrYl1f6gxfe7L/jtmbn0eQ
-avsr9RaUCWP794DEXKuA9pC8hVsCgYEAquy5I4hO4jNBQ6v5+omjsEgk4513/RNs
-f47Md8bsDHKJMbCMKCdqM1D3J1xbgV3DgSv0yNlKdU2wenWdgQAyBtz18NBgno85
-YNanFhp1CymgLFHdLJHSOqAkzutSuCNnGTT6AKspOQvy+cuj7XsnbsxtYK3Cgw5h
-Mom3RnUy9ZcCgYAnForHVEYDBgAYuI9g39z9dT8Q1dMA6SN6S6Ps0Xt/R5gF15e9
-941/FYiqr3yB+cWgrp7hu8XFD9/0F63waTuW2AgYSjZNnROHN5g/UbRxXqQOA3al
-tXRUiHEbYjVTe4GX+ORF/8rvH19JUZmn87ekxII4fH/wOfIhBOxaV+yuuwKBgHtz
-5Tizz/3y9TWSdkgtt6uwP+yipLKGn/v1wNrWM1G+PDdGg8TQyxTrasfkHjdu6LFY
-dUHIJ85X4ZphbvRolrl8SKq5Zr+/RLsb7qy5SUZZt1Wrfysc25H6bvuA3ksfTuzW
-5acr+Oc6KTGgkvMI229cebe1aONNtIhTDav3JGpbAoGAX5DQvNreqnP8qSAvUN2I
-TAHXIzawR3f6vgGgVIdkHkiS2eKzs/fgP3VAK80TbrGSR8HvBcPEcR/icOn1u/e6
-tDp0j6mGt5aPKK9VQkBn94bW35T12FUbdB+L8FWWTUrfiVWJtEW8tEsKil5ac8U4
-Bn3vC5WUeKhW6v6kD4AigqE=
------END PRIVATE KEY-----
diff --git a/src/main/resources/clds/aaf/ssl/clamp.pem b/src/main/resources/clds/aaf/ssl/clamp.pem
deleted file mode 100644
index a01b587a5..000000000
--- a/src/main/resources/clds/aaf/ssl/clamp.pem
+++ /dev/null
@@ -1,33 +0,0 @@
-Bag Attributes
- friendlyName: clamp@clamp.onap.org
- localKeyID: 54 69 6D 65 20 31 35 38 30 38 32 39 30 36 35 34 37 39
-subject=CN = clamp, emailAddress = mark.d.manager@people.osaaf.com, OU = clamp@clamp.onap.org:DEV, OU = OSAAF, O = ONAP, C = US
-
-issuer=C = US, O = ONAP, OU = OSAAF, CN = intermediateCA_9
-
------BEGIN CERTIFICATE-----
-MIIEWDCCA0CgAwIBAgIILw1zyDGqB5IwDQYJKoZIhvcNAQELBQAwRzELMAkGA1UE
-BhMCVVMxDTALBgNVBAoMBE9OQVAxDjAMBgNVBAsMBU9TQUFGMRkwFwYDVQQDDBBp
-bnRlcm1lZGlhdGVDQV85MB4XDTIwMDIwNDEyMjM1MloXDTIxMDIwNDEyMjM1Mlow
-gY8xDjAMBgNVBAMMBWNsYW1wMS4wLAYJKoZIhvcNAQkBFh9tYXJrLmQubWFuYWdl
-ckBwZW9wbGUub3NhYWYuY29tMSEwHwYDVQQLDBhjbGFtcEBjbGFtcC5vbmFwLm9y
-ZzpERVYxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQMQswCQYDVQQGEwJV
-UzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJMHfScyHSFzMiS9Ymjs
-6aDtwAeHPnQ0GEsHu77rShdEYLJrhKqyyqrE2c2o1BA/0yZ+Vbar9tl6lafxGTbd
-foIuaghSWuPwEw+RQJGrOC+VpY9I0ArlBw6noZS9dO5fgSxpbEmFuz1SPPb6qLXf
-uI06p8DHWxTKBqHWSMAuuoeRcOoka8h/FTkRLRqQGL+UHsDdakTnYpOKhIUlLkpu
-emPWiB98Y0rICI2pTrUtwXUWNaYg1q3bPdkyT/deb4cIOD8Ys+duHgTUqgTXQ7bY
-AzKzpgYTI++BF+tMXXcOwNfnY+aZQduRIHqTBL8J5XlS777xvpPYhak/Jnb7mm2Y
-v60CAwEAAaOB/jCB+zAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIF4DAgBgNVHSUB
-Af8EFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwVAYDVR0jBE0wS4AUgfeZWxC5yIze
-81Je6k5poEM+rN2hMKQuMCwxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQ
-MQswCQYDVQQGEwJVU4IBBzAdBgNVHQ4EFgQUzfIed+18wgFs7E6q0b6BbMICtfsw
-RwYDVR0RBEAwPoIFY2xhbXCCCmNsYW1wLW9uYXCCHWNsYW1wLmFwaS5zaW1wbGVk
-ZW1vLm9uYXAub3JnggpjbGFtcC5vbmFwMA0GCSqGSIb3DQEBCwUAA4IBAQBizhsW
-XrJ9wQy3PrBxgh90sOF15tayXPRZSFYPoQb5LhRh3IY/PvXLaSHlkgPHlCLLx36S
-0/DiVf86/83ABvyaq9gJIyg/m4ntNae23OKH1AkA1aN+JCKA8yhsAzDBcRF6Aj7E
-VJ+vQlSzz5oh+efP1e/8DUMd1/WwbTXvRd0Iqv/fyZunbjb82qNMrsK1mQ2q+87A
-0jx9u1EdeMihP6vWiuKzlwy4mKoNT573SPpvaOkjX3yDlmf2CTQZ9vdAvjmFmVsH
-1wyrNZOIgW4VjluiZfAk3mOEskrZiP/7aUXnxmNnYTpgZMbhiouLbRrTc4lLEyhx
-G7A61/KGTsLZlvxb
------END CERTIFICATE-----
diff --git a/src/main/resources/clds/aaf/truststoreONAPall.jks b/src/main/resources/clds/aaf/truststoreONAPall.jks
deleted file mode 100644
index ff844b109..000000000
--- a/src/main/resources/clds/aaf/truststoreONAPall.jks
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/clds/camel/rest/clamp-api-v2.xml b/src/main/resources/clds/camel/rest/clamp-api-v2.xml
deleted file mode 100644
index 7de2de1c9..000000000
--- a/src/main/resources/clds/camel/rest/clamp-api-v2.xml
+++ /dev/null
@@ -1,1472 +0,0 @@
-<rests xmlns="http://camel.apache.org/schema/spring">
- <rest>
- <get uri="/v2/loop/getAllNames" outType="java.lang.String[]"
- produces="application/json">
- <route>
- <removeHeaders pattern="*"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET ALL Loop')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopController?method=getLoopNames()"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="GET All Loop names FAILED: ${exception.stacktrace}"/>
-
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>GET All Loop names FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </get>
- <get uri="/v2/loop/{loopName}" outType="org.onap.policy.clamp.loop.Loop"
- produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET Loop')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopController?method=getLoop(${header.loopName})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="GET Loop request failed for loop: ${header.loopName}, ${exception.stacktrace}"/>
-
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>GET Loop FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </get>
-
- <post uri="/v2/loop/updateGlobalProperties/{loopName}"
- type="com.google.gson.JsonObject" consumes="application/json"
- outType="org.onap.policy.clamp.loop.Loop" produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Update the global properties')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')"/>
- <setHeader headerName="GlobalPropertiesJson">
- <simple>${body}</simple>
- </setHeader>
- <to uri="direct:load-loop"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopController?method=updateGlobalPropertiesJson(${header.loopName},${header.GlobalPropertiesJson})"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('Global Properties UPDATED','INFO',${exchangeProperty[loopObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="UPDATE Global properties FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
-
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>UPDATE Global properties FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </post>
- <post uri="/v2/loop/updateOperationalPolicies/{loopName}"
- type="com.google.gson.JsonArray" consumes="application/json"
- outType="org.onap.policy.clamp.loop.Loop" produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Update operational policies')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')"/>
- <setHeader headerName="OperationalPoliciesArray">
- <simple>${body}</simple>
- </setHeader>
- <to uri="direct:load-loop"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopController?method=updateOperationalPolicies(${header.loopName},${header.OperationalPoliciesArray})"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('Operational policies UPDATED','INFO',${exchangeProperty[loopObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="UPDATE Operational policies FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('UPDATE Operational policies request FAILED, Error reported: ${exception.message}','ERROR',${exchangeProperty[loopObject]})"/>
-
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>UPDATE Operational policies FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </post>
- <post uri="/v2/loop/updateMicroservicePolicy/{loopName}"
- type="org.onap.policy.clamp.policy.microservice.MicroServicePolicy"
- consumes="application/json"
- outType="org.onap.policy.clamp.policy.microservice.MicroServicePolicy"
- produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Update Microservice policies')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')"/>
- <setProperty propertyName="MicroServicePolicyObject">
- <simple>${body}</simple>
- </setProperty>
-
- <to uri="direct:load-loop"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopController?method=updateMicroservicePolicy(${header.loopName},${exchangeProperty[MicroServicePolicyObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('Micro Service policies UPDATED','INFO',${exchangeProperty[loopObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="UPDATE MicroService policy FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('UPDATE MicroService policy request FAILED, Error reported: ${exception.message}','ERROR',${exchangeProperty[loopObject]})"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>UPDATE MicroService policy FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </post>
- <put uri="/v2/loop/deploy/{loopName}"
- outType="org.onap.policy.clamp.loop.Loop" produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName"/>
- <doTry>
- <log loggingLevel="INFO"
- message="DCAE DEPLOY request for loop: ${header.loopName}"/>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">true</simple>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'DCAE DEPLOY request')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')"/>
- <to uri="direct:load-loop"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('DCAE DEPLOY request','INFO',${exchangeProperty[loopObject]})"/>
-
- <to uri="direct:deploy-loop"/>
-
- <log loggingLevel="INFO"
- message="DEPLOY request successfully executed for loop: ${header.loopName}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('DEPLOY request successfully executed','INFO',${exchangeProperty[loopObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="DEPLOY request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('DEPLOY request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>DEPLOY request FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </put>
- <put uri="/v2/loop/refreshMicroServicePolicyJsonSchema/{loopName}/{microServicePolicyName}"
- outType="org.onap.policy.clamp.loop.Loop" produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName|microServicePolicyName"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Refresh Micro Service Policy UI for loop: ${header.loopName} and ${header.microServicePolicyName}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'REFRESH Micro Service Policy UI request')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')"/>
- <to uri="direct:load-loop"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.cds.CdsDataInstaller?method=updateCdsServiceProperties(${exchangeProperty[loopObject].getModelService()})"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopController?method=refreshMicroServicePolicyJsonRepresentation(${exchangeProperty[loopObject]},${header.microServicePolicyName})"/>
- <log loggingLevel="INFO"
- message="REFRESH Micro Service policy request successfully executed for loop: ${header.loopName}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('REFRESH Micro Service policy request successfully executed','INFO',${exchangeProperty[loopObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="REFRESH json schema request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('REFRESH Json schema request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>REFRESH json schema request FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </put>
- <put uri="/v2/loop/refreshOperationalPolicyJsonSchema/{loopName}/{operationalPolicyName}"
- outType="org.onap.policy.clamp.loop.Loop" produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName|operationalPolicyName"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Refresh Operational Policy UI for loop: ${header.loopName} and ${header.operationalPolicyName}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'REFRESH Operational Policy UI request')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')"/>
- <to uri="direct:load-loop"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.cds.CdsDataInstaller?method=updateCdsServiceProperties(${exchangeProperty[loopObject].getModelService()})"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopController?method=refreshOperationalPolicyJsonRepresentation(${exchangeProperty[loopObject]},${header.operationalPolicyName})"/>
- <log loggingLevel="INFO"
- message="REFRESH operational policy request successfully executed for loop: ${header.loopName}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('REFRESH operational policy request successfully executed','INFO',${exchangeProperty[loopObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="REFRESH json schema request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('REFRESH Json schema request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>REFRESH json schema request FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </put>
- <put uri="/v2/loop/undeploy/{loopName}"
- outType="org.onap.policy.clamp.loop.Loop" produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName"/>
- <doTry>
- <log loggingLevel="INFO"
- message="DCAE UNDEPLOY request for loop: ${header.loopName}"/>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">true</simple>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'DCAE UNDEPLOY request')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')"/>
- <to uri="direct:load-loop"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('DCAE UNDEPLOY request','INFO',${exchangeProperty[loopObject]})"/>
- <to uri="direct:undeploy-loop"/>
-
- <log loggingLevel="INFO"
- message="UNDEPLOY request successfully executed for loop: ${header.loopName}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('UNDEPLOY request successfully executed','INFO',${exchangeProperty[loopObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="UNDEPLOY request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('UNDEPLOY request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>UNDEPLOY request FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </put>
- <put uri="/v2/loop/stop/{loopName}"
- outType="org.onap.policy.clamp.loop.Loop" produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName"/>
- <doTry>
- <log loggingLevel="INFO"
- message="STOP request for loop: ${header.loopName}"/>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">true</simple>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*,'STOP request')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')"/>
- <to uri="direct:load-loop"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('STOP request','INFO',${exchangeProperty[loopObject]})"/>
-
- <to uri="direct:remove-all-policy-from-active-pdp-group"/>
- <log loggingLevel="INFO"
- message="STOP request successfully executed for loop: ${header.loopName}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('STOP request successfully executed','INFO',${exchangeProperty[loopObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="STOP request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('STOP request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>STOP request FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </put>
- <put uri="/v2/loop/restart/{loopName}"
- outType="org.onap.policy.clamp.loop.Loop" produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName"/>
- <doTry>
- <log loggingLevel="INFO"
- message="RESTART request for loop: ${header.loopName}"/>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">true</simple>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*,'RESTART request')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')"/>
- <to uri="direct:load-loop"/>
-
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('RESTART request','INFO',${exchangeProperty[loopObject]})"/>
-
- <to uri="direct:add-all-to-active-pdp-group"/>
- <log loggingLevel="INFO"
- message="RESTART request successfully executed for loop: ${header.loopName}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('RESTART request successfully executed','INFO',${exchangeProperty[loopObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="RESTART request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('RESTART request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>RESTART request FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </put>
- <put uri="/v2/loop/submit/{loopName}"
- outType="org.onap.policy.clamp.loop.Loop" produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName"/>
- <doTry>
- <log loggingLevel="INFO"
- message="POLICY SUBMIT request for loop: ${header.loopName}"/>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">true</simple>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'POLICY SUBMIT request')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')"/>
- <to uri="direct:load-loop"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('POLICY SUBMIT request','INFO',${exchangeProperty[loopObject]})"/>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
- <to uri="direct:remove-all-policy-from-active-pdp-group"/>
- <log loggingLevel="INFO"
- message="Processing all MICRO-SERVICES policies defined in loop ${exchangeProperty[loopObject].getName()}"/>
- <split>
- <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
- </simple>
- <setProperty propertyName="policy">
- <simple>${body}</simple>
- </setProperty>
- <log loggingLevel="INFO"
- message="Processing Micro Service Policy: ${exchangeProperty[policy].getName()}"/>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
- <to uri="direct:delete-policy-from-loop-object"/>
- <to uri="direct:create-policy-from-loop-object"/>
- </split>
- <log loggingLevel="INFO"
- message="Processing all OPERATIONAL policies defined in loop ${exchangeProperty[loopObject].getName()}"/>
- <split>
- <simple>${exchangeProperty[loopObject].getOperationalPolicies()}
- </simple>
- <setProperty propertyName="policy">
- <simple>${body}</simple>
- </setProperty>
- <log loggingLevel="INFO"
- message="Processing Operational Policy: ${exchangeProperty[policy].getName()}"/>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
-
- <to uri="direct:delete-policy-from-loop-object"/>
- <to uri="direct:create-policy-from-loop-object"/>
- </split>
-
- <delay>
- <constant>3000</constant>
- </delay>
-
- <to uri="direct:add-all-to-active-pdp-group"/>
-
- <log loggingLevel="INFO"
- message="SUBMIT request successfully executed for loop: ${header.loopName}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('SUBMIT request successfully executed','INFO',${exchangeProperty[loopObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="SUBMIT request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('SUBMIT request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>SUBMIT request FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </put>
- <put uri="/v2/loop/delete/{loopName}">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName"/>
- <doTry>
- <log loggingLevel="INFO"
- message="DELETE request for loop: ${header.loopName}"/>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">true</simple>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*,'DELETE request')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')"/>
- <to uri="direct:load-loop"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('DELETE request','INFO',${exchangeProperty[loopObject]})"/>
- <to uri="direct:undeploy-loop"/>
- <to uri="direct:remove-all-policy-from-active-pdp-group"/>
- <log loggingLevel="INFO"
- message="Deleting all MICRO-SERVICES policies defined in loop ${exchangeProperty[loopObject].getName()}"/>
- <split>
- <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
- </simple>
- <setProperty propertyName="policy">
- <simple>${body}</simple>
- </setProperty>
- <log loggingLevel="INFO"
- message="Deleting Micro Service Policy: ${exchangeProperty[policy].getName()}"/>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
- <to uri="direct:delete-policy-from-loop-object"/>
- </split>
- <log loggingLevel="INFO"
- message="Deleting all OPERATIONAL policies defined in loop ${exchangeProperty[loopObject].getName()}"/>
- <split>
- <simple>${exchangeProperty[loopObject].getOperationalPolicies()}
- </simple>
- <setProperty propertyName="policy">
- <simple>${body}</simple>
- </setProperty>
- <log loggingLevel="INFO"
- message="Deleting Operational Policy: ${exchangeProperty[policy].getName()}"/>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
- <to uri="direct:delete-policy-from-loop-object"/>
- </split>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopController?method=deleteLoop(${header.loopName})"/>
- <log loggingLevel="INFO"
- message="DELETE request successfully executed for loop: ${header.loopName}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="DELETE request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('DELETE request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>DELETE request FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </put>
- <get uri="/v2/loop/getstatus/{loopName}"
- outType="org.onap.policy.clamp.loop.Loop" produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName"/>
- <doTry>
- <log loggingLevel="INFO"
- message="GET STATUS request for loop: ${header.loopName}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET STATUS request')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')"/>
- <to uri="direct:load-loop"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('GET STATUS request','INFO',${exchangeProperty[loopObject]})"/>
- <to uri="direct:update-policy-status-for-loop"/>
- <to uri="direct:update-dcae-status-for-loop"/>
- <to uri="direct:update-loop-state"/>
-
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('GET STATUS request successfully executed','INFO',${exchangeProperty[loopObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="GET STATUS request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('GET STATUS request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})"/>
- </doCatch>
- <doFinally>
- <setBody>
- <simple>${exchangeProperty[loopObject]}</simple>
- </setBody>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>200</constant>
- </setHeader>
- </doFinally>
- </doTry>
- </route>
- </get>
-
- <put uri="/v2/loop/addOperationaPolicy/{loopName}/policyModel/{policyType}/{policyVersion}"
- outType="org.onap.policy.clamp.loop.Loop" produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName|policyType|policyVersion"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Add operational Policy')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')"/>
- <to uri="direct:load-loop"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopController?method=addOperationalPolicy(${header.loopName},${header.policyType},${header.policyVersion})"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('ADD OperationalPolicy request successfully executed','INFO',${exchangeProperty[loopObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="ADD operational policy request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('ADD OperationalPolicy request failed','ERROR',${exchangeProperty[loopObject]})"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>ADD Operational policy request FAILED for loop: ${header.loopName},
- ${exception.message}"
- </simple>
- </setBody>
-
- </doCatch>
- </doTry>
- </route>
- </put>
- <put uri="/v2/loop/removeOperationaPolicy/{loopName}/policyModel/{policyType}/{policyVersion}/{policyName}"
- outType="org.onap.policy.clamp.loop.Loop" produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="loopName|policyType|policyVersion|policyName"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'REMOVE operational Policy')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')"/>
- <to uri="direct:load-loop"/>
- <setProperty propertyName="policyName">
- <simple>${header.policyName}</simple>
- </setProperty>
- <setProperty propertyName="policy">
- <simple>${exchangeProperty[loopObject].getOperationalPolicy(header.policyName)}</simple>
- </setProperty>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
- <to uri="direct:remove-one-policy-from-active-pdp-group"/>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
- <to uri="direct:delete-policy-from-loop-object"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopController?method=removeOperationalPolicy(${header.loopName},${header.policyType},${header.policyVersion})"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('REMOVE OperationalPolicy request successfully executed','INFO',${exchangeProperty[loopObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="REMOVE operational policy request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('REMOVE OperationalPolicy request failed','ERROR',${exchangeProperty[loopObject]})"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>REMOVE Operational policy request FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </put>
- <post
- uri="/v2/loop/create/{loopName}?templateName={templateName}"
- outType="org.onap.policy.clamp.loop.Loop" consumes="application/json"
- produces="application/json">
- <route>
- <removeHeaders
- pattern="*"
- excludePattern="loopName|templateName"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Create Loop')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopController?method=createLoop(${header.loopName}, ${header.templateName})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="CREATE Loop from Template request failed for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('CREATE Loop from template request failed','ERROR',${exchangeProperty[loopObject]})"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>CREATE Loop from template FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </post>
- <get uri="/v2/templates"
- outType="org.onap.policy.clamp.loop.template.LoopTemplate"
- produces="application/json">
- <route>
- <removeHeaders pattern="*"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET ALL Templates')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'template','','read')"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.template.LoopTemplatesService?method=getAllLoopTemplates()"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="GET ALL templates request failed: ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>GET ALL templates FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </get>
- <get uri="/v2/templates/{templateName}"
- outType="org.onap.policy.clamp.loop.template.LoopTemplate"
- produces="application/json">
- <route>
- <removeHeaders pattern="*"
- excludePattern="templateName"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET a Template by NAME')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'template','','read')"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.template.LoopTemplatesService?method=getLoopTemplate(${header.templateName})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="GET Template request failed for template: ${header.templateName}, ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>GET Template FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </get>
- <get uri="/v2/templates/names" outType="java.lang.String[]"
- produces="application/json">
- <route>
- <removeHeaders pattern="*"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET ALL Loop Template Names')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'template','','read')"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.template.LoopTemplatesService?method=getLoopTemplateNames()"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="GET All Template names request failed for template: ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>GET All Template names FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </get>
-
- <!-- NON LOOP related endpoints -->
- <get uri="/v2/dictionary"
- outType="org.onap.policy.clamp.tosca.Dictionary" produces="application/json">
- <route>
- <removeHeaders pattern="*"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET ALL Dictionaries')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'tosca','','read')"/>
- <to
- uri="bean:org.onap.policy.clamp.tosca.DictionaryService?method=getAllDictionaries()"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="GET Dictionary request failed: ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>GET Dictionary FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </get>
-
- <get uri="/v2/dictionary/secondary/names"
- outType="java.lang.String[]" produces="application/json">
- <route>
- <removeHeaders pattern="*"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET ALL Secondary Dictionary Level Names')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'tosca','','read')"/>
- <to
- uri="bean:org.onap.policy.clamp.tosca.DictionaryService?method=getAllSecondaryLevelDictionaryNames()"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="GET Dictionary request failed: ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>GET Dictionary FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </get>
- <get uri="/v2/dictionary/{dictionaryName}"
- outType="org.onap.policy.clamp.tosca.Dictionary" produces="application/json">
- <route>
- <removeHeaders pattern="*"
- excludePattern="dictionaryName"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET ALL Dictionary Elements for a Dictionary Name')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'tosca','','read')"/>
- <to
- uri="bean:org.onap.policy.clamp.tosca.DictionaryService?method=getDictionary(${header.dictionaryName})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="GET Dictionary request failed for: ${header.dictionaryName}, ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>GET Dictionary FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </get>
- <put uri="/v2/dictionary" type="org.onap.policy.clamp.tosca.Dictionary"
- outType="org.onap.policy.clamp.tosca.Dictionary" consumes="application/json"
- produces="application/json">
- <route>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Add New or Update Dictionary')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'tosca','','update')"/>
- <setProperty propertyName="DictionaryObject">
- <simple>${body}</simple>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.tosca.DictionaryService?method=saveOrUpdateDictionary(${exchangeProperty[DictionaryObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="PUT Dictionary request failed for: ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>PUT Dictionary FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </put>
-
- <put uri="/v2/dictionary/{name}"
- type="org.onap.policy.clamp.tosca.Dictionary"
- outType="org.onap.policy.clamp.tosca.Dictionary" consumes="application/json"
- produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="name"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Add New or Update Dictionary Element')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'tosca','','update')"/>
- <setProperty propertyName="DictionaryObject">
- <simple>${body}</simple>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.tosca.DictionaryService?method=saveOrUpdateDictionaryElement(${header.name}, ${exchangeProperty[DictionaryObject]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="PUT Dictionary request failed for: ${header.name}, ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>PUT Dictionary FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </put>
-
- <delete uri="/v2/dictionary/{name}" produces="application/json">
- <route>
- <removeHeaders pattern="*" excludePattern="name"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Delete Dictionary')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'tosca','','update')"/>
- <to
- uri="bean:org.onap.policy.clamp.tosca.DictionaryService?method=deleteDictionary(${header.name})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="DELETE Dictionary request failed for: ${header.name}, ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>DELETE Dictionary FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </delete>
-
- <delete uri="/v2/dictionary/{name}/elements/{shortName}"
- produces="application/json">
- <route>
- <removeHeaders pattern="*"
- excludePattern="name|shortName"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Delete Dictionary Element')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'tosca','','update')"/>
- <to
- uri="bean:org.onap.policy.clamp.tosca.DictionaryService?method=deleteDictionaryElement(${header.name}, ${header.shortName})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="DELETE Dictionary element request failed for: ${header.name}, ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>DELETE Dictionary element FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </delete>
-
- <get uri="/v2/policyToscaModels"
- outType="org.onap.policy.clamp.loop.template.PolicyModel"
- produces="application/json">
- <route>
- <removeHeaders pattern="*"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET ALL Tosca Policy Models')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'tosca','','read')"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.template.PolicyModelsService?method=getAllPolicyModels()"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="GET Policy Models request failed for: ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>GET Policy models FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </get>
- <get uri="/v2/policyToscaModels/{policyModelType}/{policyModelVersion}"
- outType="com.google.gson.JsonObject" produces="application/json">
- <route>
- <removeHeaders pattern="*"
- excludePattern="policyModelType|policyModelVersion"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET Tosca Policy Model by Name/Version')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'tosca','','read')"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.template.PolicyModelsService?method=getPolicyModelJson(${header.policyModelType},${header.policyModelVersion})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="GET Policy Model request failed for type: ${header.policyModelType}, ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>GET Policy model FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </get>
- <get uri="/v2/policyToscaModels/yaml/{policyModelType}/{policyModelVersion}"
- outType="java.lang.String" produces="application/json">
- <route>
- <removeHeaders pattern="*"
- excludePattern="policyModelType|policyModelVersion"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET Tosca Policy Model Yaml String by Name/Version')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'tosca','','read')"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.template.PolicyModelsService?method=getPolicyModelTosca(${header.policyModelType},${header.policyModelVersion})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="GET Policy Model YAML request failed for type: ${header.policyModelType}, ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>GET Policy model YAML FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </get>
-
- <post uri="/v2/policyToscaModels"
- type="java.lang.String"
- outType="org.onap.policy.clamp.loop.template.PolicyModel"
- consumes="plain/text" produces="application/json">
- <route>
- <removeHeaders pattern="*"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Upload New or Update Tosca Policy Model')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'tosca','','update')"/>
- <setProperty propertyName="PolicyModelTosca">
- <simple>${body}</simple>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.loop.template.PolicyModelsService?method=createNewPolicyModelFromTosca(${exchangeProperty[PolicyModelTosca]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="POST Policy Model YAML request failed: ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>POST Policy model YAML FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </post>
- <put uri="/v2/policyToscaModels/{policyModelType}/{policyModelVersion}"
- type="java.lang.String"
- outType="org.onap.policy.clamp.loop.template.PolicyModel"
- consumes="plain/text" produces="application/json">
- <route>
- <removeHeaders pattern="*"
- excludePattern="policyModelType|policyModelVersion"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Upload New or Update Tosca Policy Model')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'tosca','','update')"/>
- <setProperty propertyName="PolicyModelTosca">
- <simple>${body}</simple>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.loop.template.PolicyModelsService?method=updatePolicyModelTosca(${header.policyModelType},${policyModelVersion},${exchangeProperty[PolicyModelTosca]})"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="MODIFY Policy Model YAML request failed: ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>MODIFY Policy model YAML FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </put>
-
- <!-- Policy Related endpoints, not related to LOOP -->
- <get uri="/v2/policies" outType="com.google.gson.JsonObject" produces="application/json">
- <route>
- <removeHeaders pattern="*"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET Policies List ')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'policies','','read')"/>
-
- <to uri="direct:get-all-policies"/>
- <setProperty propertyName="policiesListResponse">
- <simple>${body}</simple>
- </setProperty>
- <to uri="direct:get-all-pdp-groups"/>
- <setProperty propertyName="pdpGroupInfoResponse">
- <simple>${body}</simple>
- </setProperty>
- <setBody>
- <method ref="org.onap.policy.clamp.policy.pdpgroup.PoliciesPdpMerger"
- method="mergePoliciesAndPdpGroupStates(${exchangeProperty[policiesListResponse]},${exchangeProperty[pdpGroupInfoResponse]})"/>
- </setBody>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="GET Policies list JSON request failed: ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>GET Policies list JSON FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </get>
-
- <!-- Create a new policy -->
- <post uri="/v2/policies/{policyModelType}/{policyModelVersion}/{policyName}/{policyVersion}"
- type="com.google.gson.JsonElement"
- consumes="application/json"
- outType="com.google.gson.JsonObject"
- produces="application/json">
- <route>
- <removeHeaders pattern="*"
- excludePattern="policyModelType|policyModelVersion|policyName|policyVersion"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'CREATE a new Policy ')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'policies','','update')"/>
- <setProperty propertyName="policyModelType">
- <simple>${header.policyModelType}</simple>
- </setProperty>
- <setProperty propertyName="policyModelVersion">
- <simple>${header.policyModelVersion}</simple>
- </setProperty>
- <setProperty propertyName="policyProperties">
- <simple>${body}</simple>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.loop.template.PolicyModelsService?method=getPolicyModelTosca(${header.policyModelType},${header.policyModelVersion})"/>
- <setBody>
- <method ref="org.onap.policy.clamp.policy.PolicyPayload"
- method="createPolicyPayload(${header.policyModelType}, ${header.policyModelVersion},
- ${header.policyName}, ${header.policyVersion}, ${exchangeProperty[policyProperties]}, ${body})"/>
- </setBody>
- <to uri="direct:create-policy"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="CREATE Policy request failed for type: ${header.policyModelType}/${header.policyModelVersion}, ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>CREATE Policy FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </post>
-
- <delete uri="/v2/policies/{policyModelType}/{policyModelVersion}/{policyName}/{policyVersion}">
- <route>
- <removeHeaders pattern="*"
- excludePattern="policyModelType|policyModelVersion|policyName|policyVersion"/>
- <doTry>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=startLog(*, 'DELETE a Policy ')"/>
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=authorize(*,'policies','','update')"/>
- <setProperty propertyName="policyModelType">
- <simple>${header.policyModelType}</simple>
- </setProperty>
- <setProperty propertyName="policyModelVersion">
- <simple>${header.policyModelVersion}</simple>
- </setProperty>
- <setProperty propertyName="policyName">
- <simple>${header.policyName}</simple>
- </setProperty>
- <setProperty propertyName="policyVersion">
- <simple>${header.policyVersion}</simple>
- </setProperty>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
- <to uri="direct:undeploy-one-policy-from-pap"/>
- <to uri="direct:delete-policy"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
- <log loggingLevel="ERROR"
- message="DELETE Policy request failed for policy: ${header.policyName}/${header.policyVersion}, ${exception.stacktrace}"/>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>500</constant>
- </setHeader>
- <setBody>
- <simple>DELETE Policy FAILED</simple>
- </setBody>
- </doCatch>
- </doTry>
- </route>
- </delete>
-
- <get uri="/v2/clampInformation" outType="org.onap.policy.clamp.clds.model.ClampInformation"
- produces="application/json">
- <to
- uri="bean:org.onap.policy.clamp.authorization.AuthorizationController?method=getClampInformation()"/>
- </get>
- </rest>
-</rests>
diff --git a/src/main/resources/clds/camel/rest/clds-services.xml b/src/main/resources/clds/camel/rest/clds-services.xml
deleted file mode 100644
index 61e1efbdc..000000000
--- a/src/main/resources/clds/camel/rest/clds-services.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<rests xmlns="http://camel.apache.org/schema/spring">
- <rest>
- <get uri="/v1/healthcheck" produces="application/json"
- outType="org.onap.policy.clamp.clds.model.CldsHealthCheck">
- <route>
- <setBody>
- <method ref="org.onap.policy.clamp.clds.service.CldsHealthcheckService"
- method="gethealthcheck()" />
- </setBody>
- <when>
- <simple> ${body} == 'NOT-OK'</simple>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>404</constant>
- </setHeader>
- <log loggingLevel="ERROR" message="HealthCheck failed" />
- </when>
- </route>
- </get>
-
- <get uri="/v1/user/getUser" produces="text/plain">
- <to uri="bean:org.onap.policy.clamp.authorization.UserService?method=getUser()" />
- </get>
- </rest>
-</rests>
diff --git a/src/main/resources/clds/camel/routes/cds-flows.xml b/src/main/resources/clds/camel/routes/cds-flows.xml
deleted file mode 100644
index 73f8cb849..000000000
--- a/src/main/resources/clds/camel/routes/cds-flows.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<routes xmlns="http://camel.apache.org/schema/spring">
- <route id="get-blueprint-workflow-list">
- <from uri="direct:get-blueprint-workflow-list"/>
- <log loggingLevel="INFO"
- message="Getting blueprint workflow list from CDS"/>
- <to uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('CDS', 'Getting workflow list from CDS')"/>
- <doTry>
- <setHeader headerName="CamelHttpMethod">
- <constant>GET</constant>
- </setHeader>
- <setHeader headerName="Content-Type">
- <constant>application/json</constant>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to query workflows from CDS : {{clamp.config.cds.url}}/api/v1/blueprint-model/workflows/blueprint-name/${exchangeProperty[blueprintName]}/version/${exchangeProperty[blueprintVersion]}"></log>
- <toD uri="{{clamp.config.cds.url}}/api/v1/blueprint-model/workflows/blueprint-name/${exchangeProperty[blueprintName]}/version/${exchangeProperty[blueprintVersion]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.cds.userName}}&amp;authPassword={{clamp.config.cds.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=30000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <convertBodyTo type="java.lang.String"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
-
- <log loggingLevel="ERROR"
- message="GET CDS request FAILED: ${exception.stacktrace}" />
- </doCatch>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- </doFinally>
- </doTry>
- </route>
- <route id="get-blueprint-workflow-input-properties">
- <from uri="direct:get-blueprint-workflow-input-properties"/>
- <log loggingLevel="INFO"
- message="Getting blueprint input properties for workflow"/>
- <to uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('CDS', 'Getting input properties for workflow')"/>
- <doTry>
- <setHeader headerName="CamelHttpMethod">
- <constant>POST</constant>
- </setHeader>
- <setHeader headerName="Content-Type">
- <constant>application/json</constant>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to query input properties for workflow from CDS : {{clamp.config.cds.url}}/api/v1/blueprint-model/workflow-spec"></log>
- <toD uri="{{clamp.config.cds.url}}/api/v1/blueprint-model/workflow-spec?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.cds.userName}}&amp;authPassword={{clamp.config.cds.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=30000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <convertBodyTo type="java.lang.String"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
-
- <log loggingLevel="ERROR"
- message="GET CDS workflow input request FAILED: ${exception.stacktrace}" />
- </doCatch>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- </doFinally>
- </doTry>
- </route>
-</routes> \ No newline at end of file
diff --git a/src/main/resources/clds/camel/routes/dcae-flows.xml b/src/main/resources/clds/camel/routes/dcae-flows.xml
deleted file mode 100644
index 1a0eb7b9a..000000000
--- a/src/main/resources/clds/camel/routes/dcae-flows.xml
+++ /dev/null
@@ -1,491 +0,0 @@
-<routes xmlns="http://camel.apache.org/schema/spring">
- <route id="deploy-loop">
- <from uri="direct:deploy-loop"/>
- <choice>
- <when>
- <simple>${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == true
- </simple>
- <to uri="direct:deploy-loop-single-blueprint"/>
- </when>
- <when>
- <simple>${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == false
- </simple>
- <to uri="direct:deploy-loop-multi-blueprint"/>
- </when>
- </choice>
- </route>
- <route id="deploy-loop-multi-blueprint">
- <from uri="direct:deploy-loop-multi-blueprint"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Deploying the blueprints for loop: ${exchangeProperty[loopObject].getName()}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Deploying the loop with multiple blueprints')"/>
- <split>
- <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
- </simple>
- <setProperty propertyName="microServicePolicy">
- <simple>${body}</simple>
- </setProperty>
- <log
- loggingLevel="INFO"
- message="Processing Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}"/>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
- <setBody>
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="getDeployPayload(${exchangeProperty[loopObject]},${exchangeProperty[microServicePolicy]})"/>
- </setBody>
- <setProperty propertyName="dcaeDeploymentId">
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="generateDeploymentId()"/>
- </setProperty>
- <setHeader headerName="CamelHttpMethod">
- <constant>PUT</constant>
- </setHeader>
- <setHeader headerName="Content-Type">
- <constant>application/json</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to deploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}"></log>
- <toD
- uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=300000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <convertBodyTo type="java.lang.String"/>
- <setProperty propertyName="dcaeResponse">
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="convertDcaeResponse(${body})"/>
- </setProperty>
- <setProperty propertyName="dcaeStatusUrl">
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="getStatusUrl(${exchangeProperty[dcaeResponse]})"/>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.policy.microservice.MicroServicePolicyService?method=updateDcaeDeploymentFields(${exchangeProperty[microServicePolicy]},${exchangeProperty[dcaeDeploymentId]},${exchangeProperty[dcaeStatusUrl]})"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLogForComponent('Deploy for the micro service: ${exchangeProperty[microServicePolicy].getName()} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}','INFO','DCAE',${exchangeProperty[loopObject]})"/>
- </split>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>false</constant>
- </handled>
- <setProperty propertyName="logMessage">
- <simple>DEPLOY micro service failed
- (MicroService name:${exchangeProperty[microServicePolicy].getName()}),
- Dep-id:${exchangeProperty[dcaeDeploymentId]},
- StatusUrl:${exchangeProperty[dcaeStatusUrl]})
- </simple>
- </setProperty>
- <setProperty propertyName="logComponent">
- <simple>DCAE</simple>
- </setProperty>
- <to uri="direct:dump-loop-log-http-response"/>
- </doCatch>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- </doFinally>
- </doTry>
- </route>
- <route id="deploy-loop-single-blueprint">
- <from uri="direct:deploy-loop-single-blueprint"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Deploying the loop: ${exchangeProperty[loopObject].getName()}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Deploying the loop')"/>
- <setBody>
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="getDeployPayload(${exchangeProperty[loopObject]})"/>
- </setBody>
- <setProperty propertyName="dcaeDeploymentId">
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="generateDeploymentId()"/>
- </setProperty>
- <setHeader headerName="CamelHttpMethod">
- <constant>PUT</constant>
- </setHeader>
- <setHeader headerName="Content-Type">
- <constant>application/json</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to deploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}"></log>
- <toD
- uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=300000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <convertBodyTo type="java.lang.String"/>
- <setProperty propertyName="dcaeResponse">
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="convertDcaeResponse(${body})"/>
- </setProperty>
-
-
- <setProperty propertyName="dcaeStatusUrl">
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="getStatusUrl(${exchangeProperty[dcaeResponse]})"/>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopService?method=updateDcaeDeploymentFields(${exchangeProperty[loopObject]},${exchangeProperty[dcaeDeploymentId]},${exchangeProperty[dcaeStatusUrl]})"/>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- <setProperty propertyName="logMessage">
- <simple>DEPLOY loop status
- (Dep-id:${exchangeProperty[dcaeDeploymentId]},
- StatusUrl:${exchangeProperty[dcaeStatusUrl]})
- </simple>
- </setProperty>
- <setProperty propertyName="logComponent">
- <simple>DCAE</simple>
- </setProperty>
- <to uri="direct:dump-loop-log-http-response"/>
- </doFinally>
- </doTry>
- </route>
- <route id="undeploy-loop">
- <from uri="direct:undeploy-loop"/>
- <choice>
- <when>
- <simple>${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == true
- </simple>
- <to uri="direct:undeploy-loop-single-blueprint"/>
- </when>
- <when>
- <simple>${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == false
- </simple>
- <to uri="direct:undeploy-loop-multi-blueprint"/>
- </when>
- </choice>
- </route>
- <route id="undeploy-loop-multi-blueprint">
- <from uri="direct:undeploy-loop-multi-blueprint"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Undeploying the blueprints for loop: ${exchangeProperty[loopObject].getName()}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Undeploying the loop with multiple blueprints')"/>
- <split>
- <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
- </simple>
- <setProperty propertyName="microServicePolicy">
- <simple>${body}</simple>
- </setProperty>
- <log
- loggingLevel="INFO"
- message="Processing Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}"/>
- <choice>
- <when>
- <simple>${exchangeProperty[microServicePolicy].getDcaeDeploymentId()} != null
- </simple>
- <setBody>
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="getUndeployPayload(${exchangeProperty[microServicePolicy]})"/>
- </setBody>
- <setHeader headerName="CamelHttpMethod">
- <constant>DELETE</constant>
- </setHeader>
- <setHeader headerName="Content-Type">
- <constant>application/json</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to undeploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[microServicePolicy].getDcaeDeploymentId()}"></log>
- <toD
- uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[microServicePolicy].getDcaeDeploymentId()}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=300000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <convertBodyTo type="java.lang.String"/>
- <setProperty propertyName="dcaeResponse">
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="convertDcaeResponse(${body})"/>
- </setProperty>
- <setProperty propertyName="dcaeStatusUrl">
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="getStatusUrl(${exchangeProperty[dcaeResponse]})"/>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.policy.microservice.MicroServicePolicyService?method=updateDcaeDeploymentFields(${exchangeProperty[microServicePolicy]},null,${exchangeProperty[dcaeStatusUrl]})"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLogForComponent('Undeploy for the micro service: ${exchangeProperty[microServicePolicy].getName()} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}','INFO','DCAE',${exchangeProperty[loopObject]})"/>
- </when>
- <otherwise>
- <log loggingLevel="WARNING"
- message="Cannot Undeploy for the micro service: ${exchangeProperty[microServicePolicy].getName()}, the Deployment ID does not exist !"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLogForComponent('Cannot Undeploy for the micro service: ${exchangeProperty[microServicePolicy].getName()}, the Deployment ID does not exist !','WARNING','DCAE',${exchangeProperty[loopObject]})"/>
- </otherwise>
- </choice>
- </split>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>false</constant>
- </handled>
- <setProperty propertyName="logMessage">
- <simple>UNDEPLOY micro service failed
- (MicroService name:${exchangeProperty[microServicePolicy].getName()})
- </simple>
- </setProperty>
- <setProperty propertyName="logComponent">
- <simple>DCAE</simple>
- </setProperty>
- <to uri="direct:dump-loop-log-http-response"/>
- </doCatch>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- </doFinally>
- </doTry>
- </route>
- <route id="undeploy-loop-single-blueprint">
- <from uri="direct:undeploy-loop-single-blueprint"/>
- <log loggingLevel="INFO"
- message="Undeploying the loop: ${exchangeProperty[loopObject].getName()} : ${exchangeProperty[loopObject].getDcaeDeploymentId()}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Undeploying the loop')"/>
- <choice>
- <when>
- <simple>${exchangeProperty[loopObject].getDcaeDeploymentId()}
- != null
- </simple>
- <doTry>
- <setBody>
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="getUndeployPayload(${exchangeProperty[loopObject]})"/>
- </setBody>
- <setHeader headerName="CamelHttpMethod">
- <constant>DELETE</constant>
- </setHeader>
- <setHeader headerName="Content-Type">
- <constant>application/json</constant>
- </setHeader>
-
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to undeploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[loopObject].getDcaeDeploymentId()}"></log>
- <toD
- uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[loopObject].getDcaeDeploymentId()}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=300000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <convertBodyTo type="java.lang.String"/>
- <setProperty propertyName="dcaeResponse">
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="convertDcaeResponse(${body})"/>
- </setProperty>
- <setProperty propertyName="dcaeStatusUrl">
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="getStatusUrl(${exchangeProperty[dcaeResponse]})"/>
- </setProperty>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopService?method=updateDcaeDeploymentFields(${exchangeProperty[loopObject]},null,${exchangeProperty[dcaeStatusUrl]})"/>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- <setProperty propertyName="logMessage">
- <simple>UNDEPLOY loop status</simple>
- </setProperty>
- <setProperty propertyName="logComponent">
- <simple>DCAE</simple>
- </setProperty>
- <to uri="direct:dump-loop-log-http-response"/>
- </doFinally>
- </doTry>
- </when>
- <otherwise>
- <log loggingLevel="WARNING"
- message="Cannot Undeploy for the loop: ${exchangeProperty[loopObject].getName()}, the Deployment ID does not exist !"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('Cannot Undeploy for the loop: ${exchangeProperty[loopObject].getName()}, the Deployment ID does not exist !','WARNING',${exchangeProperty[loopObject]})"/>
- </otherwise>
- </choice>
- </route>
- <route id="get-dcae-deployment-status">
- <from uri="direct:get-dcae-deployment-status"/>
- <log loggingLevel="INFO"
- message="Getting DCAE deployment status for loop: ${exchangeProperty[loopObject].getName()} - ${exchangeProperty[dcaeComponent].getComponentName()}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Getting Deployment status')"/>
- <doTry>
- <setHeader headerName="CamelHttpMethod">
- <constant>GET</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to query microservice deployment status: ${exchangeProperty[getStatusUrlModified]}"></log>
- <choice>
- <when>
- <simple>${exchangeProperty[getStatusUrl].contains("?")} == true
- </simple>
- <setProperty propertyName="uriSeparator">
- <simple>&amp;</simple>
- </setProperty>
- </when>
- <otherwise>
- <setProperty propertyName="uriSeparator">
- <simple>?</simple>
- </setProperty>
- </otherwise>
- </choice>
- <toD
- uri="${exchangeProperty[getStatusUrl]}${exchangeProperty[uriSeparator]}bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=30000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
-
- <log loggingLevel="ERROR"
- message="GET DCAE deployment request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('GET DCAE deployment request failed, Error reported: ${exception.message}','ERROR',${exchangeProperty[loopObject]})"/>
- </doCatch>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- <setProperty propertyName="logMessage">
- <simple>DCAE deployment status</simple>
- </setProperty>
- <setProperty propertyName="logComponent">
- <simple>DCAE</simple>
- </setProperty>
- <to uri="direct:dump-loop-log-http-response"/>
- </doFinally>
- </doTry>
- </route>
- <route id="get-dcae-blueprint-inventory">
- <from uri="direct:get-dcae-blueprint-inventory"/>
- <log loggingLevel="INFO"
- message="Getting DCAE blueprint id in inventory"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Getting blueprint id in inventory')"/>
- <doTry>
- <setHeader headerName="CamelHttpMethod">
- <constant>GET</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to query Dcae inventory Loop status: {{clamp.config.dcae.inventory.url}}/dcae-service-types?${header[CamelHttpQuery]}"></log>
- <toD
- uri="{{clamp.config.dcae.inventory.url}}/dcae-service-types?asdcResourceId=${exchangeProperty[blueprintResourceId]}&amp;asdcServiceId=${exchangeProperty[blueprintServiceId]}&amp;typeName=${exchangeProperty[blueprintName]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=30000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <convertBodyTo type="java.lang.String"/>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- </doFinally>
- </doTry>
-
- </route>
- <route id="get-all-dcae-blueprint-inventory">
- <from uri="direct:get-all-dcae-blueprint-inventory"/>
- <log loggingLevel="INFO"
- message="Getting all DCAE blueprint from inventory"/>
- <to uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Getting all blueprint from inventory')"/>
- <doTry>
- <setHeader headerName="CamelHttpMethod">
- <constant>GET</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to query Blueprints from DCAE inventory: {{clamp.config.dcae.inventory.url}}/dcae-service-types?${header[CamelHttpQuery]}"></log>
- <toD uri="{{clamp.config.dcae.inventory.url}}/dcae-service-types;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=30000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <convertBodyTo type="java.lang.String"/>
- <setProperty propertyName="dcaeResponseList">
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="convertToDcaeInventoryResponse(${body})"/>
- </setProperty>
- <split>
- <simple>${exchangeProperty[dcaeResponseList]}</simple>
- <convertBodyTo type="org.onap.policy.clamp.clds.model.dcae.DcaeInventoryResponse"/>
- <setProperty propertyName="dcaeResponse">
- <simple>${body}</simple>
- </setProperty>
- <to uri="bean:org.onap.policy.clamp.clds.model.dcae.DcaeInventoryCache?method=addDcaeInventoryResponse(${exchangeProperty[dcaeResponse]})"/>
- </split>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- </doFinally>
- </doTry>
- </route>
-</routes> \ No newline at end of file
diff --git a/src/main/resources/clds/camel/routes/loop-flows.xml b/src/main/resources/clds/camel/routes/loop-flows.xml
deleted file mode 100644
index f6a838ef0..000000000
--- a/src/main/resources/clds/camel/routes/loop-flows.xml
+++ /dev/null
@@ -1,256 +0,0 @@
-<routes xmlns="http://camel.apache.org/schema/spring">
- <route id="load-loop">
- <from uri="direct:load-loop" />
- <setBody>
- <simple>${header.loopName}</simple>
- </setBody>
- <setProperty propertyName="loopObject">
- <method ref="org.onap.policy.clamp.loop.LoopService" method="getLoop" />
- </setProperty>
-
- <when>
- <simple>${exchangeProperty[loopObject]} == null</simple>
- <setHeader headerName="CamelHttpResponseCode">
- <constant>404</constant>
- </setHeader>
- <log loggingLevel="WARN" message="Loop not found in database: ${body}" />
- <stop />
- </when>
- </route>
- <route id="update-policy-status-for-loop">
- <from uri="direct:update-policy-status-for-loop" />
- <setProperty propertyName="policyComponent">
- <simple>${exchangeProperty[loopObject].getComponent('POLICY')}
- </simple>
- </setProperty>
- <setProperty propertyName="policyFound">
- <simple resultType="java.lang.Boolean">true</simple>
- </setProperty>
- <setProperty propertyName="policyDeployed">
- <simple resultType="java.lang.Boolean">true</simple>
- </setProperty>
- <log loggingLevel="INFO"
- message="Processing all MICRO-SERVICES policies defined in loop ${exchangeProperty[loopObject].getName()}" />
- <split>
- <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
- </simple>
- <setProperty propertyName="policyName">
- <simple>${body.getName()}</simple>
- </setProperty>
- <setProperty propertyName="policyType">
- <simple>${body.getPolicyModel().getPolicyModelType()}</simple>
- </setProperty>
- <setProperty propertyName="policyTypeVersion">
- <simple>${body.getPolicyModel().getVersion()}</simple>
- </setProperty>
- <setProperty propertyName="policyPdpGroup">
- <simple>${body.getPdpGroup()}</simple>
- </setProperty>
- <setProperty propertyName="policyVersion">
- <simple>1.0.0</simple>
- </setProperty>
- <setBody>
- <constant>null</constant>
- </setBody>
- <log loggingLevel="INFO"
- message="Processing Micro Service Policy: ${exchangeProperty[policyName]} of type ${exchangeProperty[policyType]}" />
- <to uri="direct:verify-one-policy" />
- </split>
- <log loggingLevel="INFO"
- message="Processing all OPERATIONAL policies defined in loop ${exchangeProperty[loopObject].getName()}" />
- <split>
- <simple>${exchangeProperty[loopObject].getOperationalPolicies()}
- </simple>
- <setProperty propertyName="policyName">
- <simple>${body.getName()}</simple>
- </setProperty>
- <setProperty propertyName="policyType">
- <simple>${body.getPolicyModel().getPolicyModelType()}</simple>
- </setProperty>
- <setProperty propertyName="policyTypeVersion">
- <simple>${body.getPolicyModel().getVersion()}</simple>
- </setProperty>
- <setProperty propertyName="policyVersion">
- <simple>1.0.0</simple>
- </setProperty>
- <setProperty propertyName="policyPdpGroup">
- <simple>${body.getPdpGroup()}</simple>
- </setProperty>
- <setBody>
- <constant>null</constant>
- </setBody>
- <log loggingLevel="INFO"
- message="Processing Operational Policy: ${exchangeProperty[policyName]} of type ${exchangeProperty[policyType]}" />
- <to uri="direct:verify-one-policy" />
- </split>
- <setProperty propertyName="policyState">
- <simple> ${exchangeProperty[policyComponent].getState()}
- </simple>
- </setProperty>
- <log loggingLevel="INFO"
- message="Policy state set to: ${exchangeProperty[policyState].getStateName()}" />
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLogForComponent('Policy state set to: ${exchangeProperty[policyState].getStateName()}','INFO','POLICY',${exchangeProperty[loopObject]})" />
- </route>
- <route id="update-dcae-status-for-loop">
- <from uri="direct:update-dcae-status-for-loop" />
- <log loggingLevel="INFO"
- message="Updating DCAE status for loop: ${exchangeProperty[loopObject].getName()}" />
- <choice>
- <when>
- <simple>${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == true
- </simple>
- <setProperty propertyName="dcaeComponent">
- <simple>${exchangeProperty[loopObject].getComponent('DCAE')}</simple>
- </setProperty>
- <when>
- <simple>${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()} != null
- </simple>
- <setProperty propertyName="getStatusUrl">
- <simple>${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()}</simple>
- </setProperty>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
- <to uri="direct:get-dcae-deployment-status" />
- <when>
- <simple> ${header.CamelHttpResponseCode} == 200 </simple>
- <convertBodyTo type="java.lang.String" />
- <setProperty propertyName="dcaeResponse">
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="convertDcaeResponse(${body})" />
- </setProperty>
- </when>
- </when>
- <setProperty propertyName="dcaeState">
- <simple> ${exchangeProperty[dcaeComponent].computeState(*)}
- </simple>
- </setProperty>
- <log loggingLevel="INFO"
- message="DCAE state set to: ${exchangeProperty[dcaeState].getStateName()} - DCAE message: ${exchangeProperty[dcaeResponse].getError()}" />
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLogForComponent('DCAE state set to: ${exchangeProperty[dcaeState].getStateName()} - message: ${exchangeProperty[dcaeResponse].getError()}','INFO','DCAE',${exchangeProperty[loopObject]})" />
- </when>
- <when>
- <simple>${exchangeProperty['loopObject'].getLoopTemplate().getUniqueBlueprint()} == false
- </simple>
- <split>
- <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
- </simple>
- <setProperty propertyName="microServicePolicy">
- <simple>${body}</simple>
- </setProperty>
- <setProperty propertyName="dcaeComponent">
- <simple>${exchangeProperty[loopObject].getComponent('DCAE_' + ${exchangeProperty[microServicePolicy].getName()})}</simple>
- </setProperty>
- <when>
- <simple>${exchangeProperty[microServicePolicy].getDcaeDeploymentStatusUrl()} != null
- </simple>
- <setProperty propertyName="getStatusUrl">
- <simple>${exchangeProperty[microServicePolicy].getDcaeDeploymentStatusUrl()}</simple>
- </setProperty>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
- <to uri="direct:get-dcae-deployment-status" />
- <when>
- <simple> ${header.CamelHttpResponseCode} == 200 </simple>
- <convertBodyTo type="java.lang.String" />
- <setProperty propertyName="dcaeResponse">
- <method ref="org.onap.policy.clamp.loop.components.external.DcaeComponent"
- method="convertDcaeResponse(${body})" />
- </setProperty>
- </when>
- </when>
- <setProperty propertyName="dcaeState">
- <simple> ${exchangeProperty[dcaeComponent].computeState(*)}
- </simple>
- </setProperty>
- <log loggingLevel="INFO"
- message="DCAE state set to: ${exchangeProperty[dcaeState].getStateName()} - DCAE message: ${exchangeProperty[dcaeResponse].getError()}" />
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLogForComponent('DCAE state set to: ${exchangeProperty[dcaeState].getStateName()} - message: ${exchangeProperty[dcaeResponse].getError()}','INFO','DCAE',${exchangeProperty[microServicePolicy]})" />
- </split>>
- </when>
- </choice>
- </route>
- <route id="direct:update-loop-state">
- <from uri="direct:update-loop-state" />
- <log loggingLevel="INFO"
- message="Updating status for loop: ${exchangeProperty[loopObject].getName()}" />
- <choice>
- <when>
- <simple>${exchangeProperty['dcaeState'].getStateName()} ==
- 'BLUEPRINT_DEPLOYED' and ${exchangeProperty['policyState'].getStateName()}
- == 'NOT_SENT'
- </simple>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'DESIGN')" />
- </when>
- <when>
- <simple>${exchangeProperty['dcaeState'].getStateName()} == 'IN_ERROR' or
- ${exchangeProperty['dcaeState'].getStateName()} ==
- 'MICROSERVICE_INSTALLATION_FAILED'
- </simple>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'IN_ERROR')" />
- </when>
- <when>
- <simple>${exchangeProperty['dcaeState'].getStateName()} ==
- 'MICROSERVICE_UNINSTALLATION_FAILED' or
- ${exchangeProperty['policyState'].getStateName()} == 'IN_ERROR'
- </simple>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'IN_ERROR')" />
- </when>
- <when>
- <simple>${exchangeProperty['dcaeState'].getStateName()} ==
- 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and
- ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'
- </simple>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'RUNNING')" />
- </when>
- <when>
- <simple>${exchangeProperty['dcaeState'].getStateName()} ==
- 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and
- ${exchangeProperty['policyState'].getStateName()} == 'SENT'
- </simple>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'STOPPED')" />
- </when>
- <when>
- <simple>${exchangeProperty['dcaeState'].getStateName()} ==
- 'BLUEPRINT_DEPLOYED' or ${exchangeProperty['dcaeState'].getStateName()} ==
- 'MICROSERVICE_UNINSTALLED_SUCCESSFULLY' and
- ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'
- </simple>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'SUBMITTED')" />
- </when>
- <when>
- <simple>${exchangeProperty['dcaeState'].getStateName()} ==
- 'PROCESSING_MICROSERVICE_INSTALLATION' or
- ${exchangeProperty['dcaeState'].getStateName()} ==
- 'PROCESSING_MICROSERVICE_UNINSTALLATION' and
- ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'
- </simple>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'WAITING')" />
- </when>
- <when>
- <simple>${exchangeProperty['dcaeState'].getStateName()} ==
- 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and
- ${exchangeProperty['policyState'].getStateName()} != 'NOT_SENT'
- </simple>
- <to
- uri="bean:org.onap.policy.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'DEPLOYED')" />
- </when>
- </choice>
- <log loggingLevel="INFO"
- message="New loop state is: ${exchangeProperty[loopObject].getLastComputedState().toString()}" />
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('New loop state is: ${exchangeProperty[loopObject].getLastComputedState().toString()}','INFO',${exchangeProperty[loopObject]})" />
-
- </route>
-</routes> \ No newline at end of file
diff --git a/src/main/resources/clds/camel/routes/policy-flows.xml b/src/main/resources/clds/camel/routes/policy-flows.xml
deleted file mode 100644
index c92617856..000000000
--- a/src/main/resources/clds/camel/routes/policy-flows.xml
+++ /dev/null
@@ -1,601 +0,0 @@
-<routes xmlns="http://camel.apache.org/schema/spring">
- <route id="verify-one-policy">
- <from uri="direct:verify-one-policy"/>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
- <to uri="direct:get-policy"/>
- <when>
- <simple>${header.CamelHttpResponseCode} != 200</simple>
- <setProperty propertyName="policyFound">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
- <log loggingLevel="WARN"
- message="At least one policy has not been found on policy engine: ${exchangeProperty[policyName]}"/>
- </when>
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
- <to uri="direct:get-deployment-policy"/>
- <when>
- <simple>${header.CamelHttpResponseCode} != 200</simple>
- <setProperty propertyName="policyDeployed">
- <simple resultType="java.lang.Boolean">false</simple>
- </setProperty>
- <log loggingLevel="WARN"
- message="At least one policy has not been deployed on policy engine: ${exchangeProperty[policyName]}"/>
- </when>
- <setProperty propertyName="newPolicyState">
- <simple>${exchangeProperty[policyComponent].computeState(*)}</simple>
- </setProperty>
- </route>
-
- <route id="get-policy">
- <from uri="direct:get-policy"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Getting Policy: ${exchangeProperty[policyName]}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Get Policy')"/>
- <setHeader headerName="CamelHttpMethod">
- <constant>GET</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to get policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/${exchangeProperty[policyTypeVersion]}/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}"></log>
- <toD
- uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/${exchangeProperty[policyTypeVersion]}/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
-
- <log loggingLevel="ERROR"
- message="GET policy request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('GET policy request failed, Error reported: ${exception.message}','ERROR',${exchangeProperty[loopObject]})"/>
- </doCatch>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- <setProperty propertyName="logMessage">
- <simple>${exchangeProperty[policyName]} GET
- Policy status
- </simple>
- </setProperty>
- <setProperty propertyName="logComponent">
- <simple>POLICY</simple>
- </setProperty>
- <to uri="direct:dump-loop-log-http-response"/>
- </doFinally>
- </doTry>
- </route>
-
- <route id="get-deployment-policy">
- <from uri="direct:get-deployment-policy"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Getting the policy deployment in PDP: ${exchangeProperty[policyName]}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Getting the policy deployment in PDP')"/>
- <setHeader headerName="CamelHttpMethod">
- <constant>GET</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to get policy deployment status: {{clamp.config.policy.pap.url}}/policy/pap/v1/policies/status/${exchangeProperty[policyPdpGroup]}/${exchangeProperty[policyName]}/1.0.0"></log>
- <toD
- uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/policies/status/${exchangeProperty[policyPdpGroup]}/${exchangeProperty[policyName]}/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
-
- <log loggingLevel="ERROR"
- message="GET policy request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('GET policy request failed, Error reported: ${exception.message}','ERROR',${exchangeProperty[loopObject]})"/>
- </doCatch>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- <setProperty propertyName="logMessage">
- <simple>${exchangeProperty[policyName]} GET Policy deployment
- status
- </simple>
- </setProperty>
- <setProperty propertyName="logComponent">
- <simple>POLICY</simple>
- </setProperty>
- <to uri="direct:dump-loop-log-http-response"/>
- </doFinally>
- </doTry>
- </route>
-
- <route id="create-policy-from-loop-object">
- <from uri="direct:create-policy-from-loop-object"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Creating Policy from loop object: ${exchangeProperty[policy].getName()}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Creating Policy from loop object')"/>
- <setBody>
- <simple>${exchangeProperty[policy].createPolicyPayload()}
- </simple>
- </setBody>
- <setProperty propertyName="policyModelType">
- <simple>${exchangeProperty[policy].getPolicyModel().getPolicyModelType()}</simple>
- </setProperty>
- <setProperty propertyName="policyModelVersion">
- <simple>${exchangeProperty[policy].getPolicyModel().getVersion()}</simple>
- </setProperty>
- <to uri="direct:create-policy"/>
- <doFinally>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- <setProperty propertyName="logMessage">
- <simple>${exchangeProperty[policy].getName()} creation
- status
- </simple>
- </setProperty>
- <setProperty propertyName="logComponent">
- <simple>POLICY</simple>
- </setProperty>
- <to uri="direct:dump-loop-log-http-response"/>
- </doFinally>
- </doTry>
- </route>
-
- <route id="delete-policy-from-loop-object">
- <from uri="direct:delete-policy-from-loop-object"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Deleting Policy in a loop: ${exchangeProperty[policy].getName()}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Policy in a loop')"/>
- <setProperty propertyName="policyModelType">
- <simple>${exchangeProperty[policy].getPolicyModel().getPolicyModelType()}</simple>
- </setProperty>
- <setProperty propertyName="policyModelVersion">
- <simple>${exchangeProperty[policy].getPolicyModel().getVersion()}</simple>
- </setProperty>
- <setProperty propertyName="policyName">
- <simple>${exchangeProperty[policy].getName()}</simple>
- </setProperty>
- <setProperty propertyName="policyVersion">
- <simple>1.0.0</simple>
- </setProperty>
- <to uri="direct:delete-policy"/>
- <doFinally>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- <setProperty propertyName="logMessage">
- <simple>${exchangeProperty[policy].getName()} removal
- status
- </simple>
- </setProperty>
- <setProperty propertyName="logComponent">
- <simple>POLICY</simple>
- </setProperty>
- <to uri="direct:dump-loop-log-http-response"/>
- </doFinally>
- </doTry>
- </route>
-
- <route id="add-all-to-active-pdp-group">
- <from uri="direct:add-all-to-active-pdp-group"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Adding loop policies to PDP Group: ${exchangeProperty[loopObject].getName()}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Add policies to PDP group')"/>
- <setBody>
- <simple>
- ${exchangeProperty[loopObject].getComponent("POLICY").createPoliciesPayloadPdpGroup(exchangeProperty[loopObject],"POST")}
- </simple>
- </setBody>
- <setHeader headerName="CamelHttpMethod">
- <constant>POST</constant>
- </setHeader>
- <setHeader headerName="Content-Type">
- <constant>application/json</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to add policies to PDP Group: {{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/deployments/batch"></log>
- <toD
- uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/deployments/batch?bridgeEndpoint=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;useSystemProperties=true&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
-
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- <setProperty propertyName="logMessage">
- <simple>PDP Group push ALL status</simple>
- </setProperty>
- <setProperty propertyName="logComponent">
- <simple>POLICY</simple>
- </setProperty>
- <to uri="direct:dump-loop-log-http-response"/>
- </doFinally>
- </doTry>
- </route>
-
- <route id="remove-all-policy-from-active-pdp-group">
- <from uri="direct:remove-all-policy-from-active-pdp-group"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Removing loop policies from PDP Group: ${exchangeProperty[loopObject].getName()}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Remove policies from PDP group')"/>
- <setBody>
- <simple>
- ${exchangeProperty[loopObject].getComponent("POLICY").createPoliciesPayloadPdpGroup(exchangeProperty[loopObject],"DELETE")}
- </simple>
- </setBody>
- <setHeader headerName="CamelHttpMethod">
- <constant>POST</constant>
- </setHeader>
- <setHeader headerName="Content-Type">
- <constant>application/json</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to remove policies from PDP Group: {{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/deployments/batch"></log>
- <toD
- uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/deployments/batch?bridgeEndpoint=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;useSystemProperties=true&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
-
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- <setProperty propertyName="logMessage">
- <simple>PDP Group remove ALL status</simple>
- </setProperty>
- <setProperty propertyName="logComponent">
- <simple>POLICY</simple>
- </setProperty>
- <to uri="direct:dump-loop-log-http-response"/>
- </doFinally>
- </doTry>
- </route>
-
- <route id="remove-one-policy-from-active-pdp-group">
- <from uri="direct:remove-one-policy-from-active-pdp-group"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Removing policy from active PDP group for loop: ${exchangeProperty[loopObject].getName()}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Removing one policy PDP group')"/>
- <setProperty propertyName="policyVersion">
- <simple>1.0.0</simple>
- </setProperty>
- <to uri="direct:undeploy-one-policy-from-pap"/>
- <setProperty propertyName="logMessage">
- <simple>${exchangeProperty[policyName]} PDP Group removal status
- </simple>
- </setProperty>
- <setProperty propertyName="logComponent">
- <simple>POLICY</simple>
- </setProperty>
- <to uri="direct:dump-loop-log-http-response"/>
- <doCatch>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>false</constant>
- </handled>
- <setProperty propertyName="logMessage">
- <simple>PDP Group removal, Error reported: ${exception}</simple>
- </setProperty>
- <setProperty propertyName="logComponent">
- <simple>POLICY</simple>
- </setProperty>
- <to uri="direct:dump-loop-log-http-response"/>
- </doCatch>
- <doFinally>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- </doFinally>
- </doTry>
- </route>
-
- <!-- Camel routes not related to Loop context -->
- <route id="get-all-policy-models">
- <from uri="direct:get-all-policy-models"/>
- <doTry>
- <log loggingLevel="INFO" message="Getting all the policy models"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Getting all the policy models')"/>
- <setHeader headerName="CamelHttpMethod">
- <constant>GET</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to get all policy models: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes"></log>
- <toD
- uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <convertBodyTo type="java.lang.String"/>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- </doFinally>
- </doTry>
- </route>
-
- <route id="get-policy-tosca-model">
- <from uri="direct:get-policy-tosca-model"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Getting the policy tosca model: ${exchangeProperty[policyModelType]}/${exchangeProperty[policyModelVersion]}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Getting the policy model')"/>
- <setHeader headerName="CamelHttpMethod">
- <constant>GET</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to get policy model: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyModelType]}/versions/${exchangeProperty[policyModelVersion]}"></log>
- <toD
- uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyModelType]}/versions/${exchangeProperty[policyModelVersion]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <convertBodyTo type="java.lang.String"/>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- </doFinally>
- </doTry>
- </route>
-
- <route id="get-all-pdp-groups">
- <from uri="direct:get-all-pdp-groups"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Getting the list of PDP Groups"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Getting the PDP Group list')"/>
- <setHeader headerName="CamelHttpMethod">
- <constant>GET</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to get policy model: {{clamp.config.policy.pap.url}}/policy/pap/v1/pdps"></log>
- <toD
- uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <convertBodyTo type="java.lang.String"/>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- </doFinally>
- </doTry>
- </route>
-
- <route id="get-all-policies">
- <from uri="direct:get-all-policies"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Getting the policies list"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Getting the policies list')"/>
- <setHeader headerName="CamelHttpMethod">
- <constant>GET</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to get policies list: {{clamp.config.policy.api.url}}/policy/api/v1/policies"></log>
- <toD
- uri="{{clamp.config.policy.api.url}}/policy/api/v1/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <convertBodyTo type="java.lang.String"/>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- </doFinally>
- </doTry>
- </route>
-
- <route id="undeploy-one-policy-from-pap">
- <from uri="direct:undeploy-one-policy-from-pap"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Undeploy POLICY from PAP: ${exchangeProperty[policyName]}/${exchangeProperty[policyVersion]}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Undeploy POLICY from PAP')"/>
- <setBody>
- <constant>null</constant>
- </setBody>
- <setHeader headerName="CamelHttpMethod">
- <constant>DELETE</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to delete policy from PDP Group: {{clamp.config.policy.pap.url}}/pdps/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}"></log>
- <toD
- uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- </doFinally>
- </doTry>
- </route>
-
- <route id="create-policy">
- <!-- Body should come from outside, expect a json describing the policy -->
- <from uri="direct:create-policy"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Create Policy from model ${exchangeProperty[policyModelType]}/${exchangeProperty[policyModelVersion]}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Policy')"/>
- <setHeader headerName="CamelHttpMethod">
- <constant>POST</constant>
- </setHeader>
- <setHeader headerName="Content-Type">
- <constant>application/json</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to create policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyModelType]}/versions/${exchangeProperty[policyModelVersion]}/policies"></log>
- <toD
- uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyModelType]}/versions/${exchangeProperty[policyModelVersion]}/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- </doFinally>
- </doTry>
- </route>
- <route id="delete-policy">
- <from uri="direct:delete-policy"/>
- <doTry>
- <log loggingLevel="INFO"
- message="Deleting Policy: ${exchangeProperty[policyName]}"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Policy')"/>
- <setBody>
- <constant>null</constant>
- </setBody>
- <setHeader headerName="CamelHttpMethod">
- <constant>DELETE</constant>
- </setHeader>
- <setHeader headerName="X-ONAP-RequestID">
- <simple>${exchangeProperty[X-ONAP-RequestID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-InvocationID">
- <simple>${exchangeProperty[X-ONAP-InvocationID]}
- </simple>
- </setHeader>
- <setHeader headerName="X-ONAP-PartnerName">
- <simple>${exchangeProperty[X-ONAP-PartnerName]}
- </simple>
- </setHeader>
- <log loggingLevel="INFO"
- message="Endpoint to delete policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyModelType]}/versions/${exchangeProperty[policyModelVersion]}/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}"></log>
- <toD
- uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyModelType]}/versions/${exchangeProperty[policyModelVersion]}/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;deleteWithBody=false&amp;mapHttpMessageBody=false&amp;mapHttpMessageFormUrlEncodedBody=false&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
-
- <doFinally>
- <to uri="direct:reset-raise-http-exception-flag"/>
- <to
- uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
- </doFinally>
- </doTry>
- </route>
-</routes> \ No newline at end of file
diff --git a/src/main/resources/clds/camel/routes/utils-flows.xml b/src/main/resources/clds/camel/routes/utils-flows.xml
deleted file mode 100644
index d5da4faee..000000000
--- a/src/main/resources/clds/camel/routes/utils-flows.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<routes xmlns="http://camel.apache.org/schema/spring">
- <route id="reset-raise-http-exception-flag">
- <from uri="direct:reset-raise-http-exception-flag" />
- <setProperty propertyName="raiseHttpExceptionFlag">
- <simple resultType="java.lang.Boolean">true</simple>
- </setProperty>
- </route>
-
- <route id="dump-loop-log-http-response">
- <from uri="direct:dump-loop-log-http-response" />
- <log loggingLevel="INFO"
- message="${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}" />
- <choice>
- <when>
- <simple>${exchangeProperty[logComponent]} == null</simple>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}','INFO',${exchangeProperty[loopObject]})" />
- </when>
- <otherwise>
- <to
- uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLogForComponent('${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}','INFO','${exchangeProperty[logComponent]}',${exchangeProperty[loopObject]})" />
- <setProperty propertyName="logComponent">
- <constant>null</constant>
- </setProperty>
- </otherwise>
- </choice>
- </route>
-</routes> \ No newline at end of file
diff --git a/src/main/resources/clds/clds-users.json b/src/main/resources/clds/clds-users.json
deleted file mode 100644
index 5a7f43841..000000000
--- a/src/main/resources/clds/clds-users.json
+++ /dev/null
@@ -1,33 +0,0 @@
-[
- {
- "user": "admin",
- "password": "$2a$10$H/e21kl04Dw9C978CHuM7OewyMGUN5WGzAAx7SgIaR4ix8.wTcssi",
- "permissions": [
- "org.onap.clamp.clds.cl|dev|read",
- "org.onap.clamp.clds.cl|dev|update",
- "org.onap.clamp.clds.cl.manage|dev|*",
- "org.onap.clamp.clds.cl.event|dev|*",
- "org.onap.clamp.clds.filter.vf|dev|*",
- "org.onap.clamp.clds.template|dev|read",
- "org.onap.clamp.clds.template|dev|update",
- "org.onap.clamp.clds.tosca|dev|read",
- "org.onap.clamp.clds.tosca|dev|update",
- "org.onap.clamp.clds.policies|dev|read",
- "org.onap.clamp.clds.policies|dev|update"
- ]
- },
- {
- "user": "cs0008",
- "password": "$2a$10$H/e21kl04Dw9C978CHuM7OewyMGUN5WGzAAx7SgIaR4ix8.wTcssi",
- "permissions": [
- "org.onap.clamp.clds.cl|dev|read",
- "org.onap.clamp.clds.cl|dev|update",
- "org.onap.clamp.clds.cl.manage|dev|*",
- "org.onap.clamp.clds.filter.vf|dev|*",
- "org.onap.clamp.clds.template|dev|read",
- "org.onap.clamp.clds.template|dev|update",
- "org.onap.clamp.clds.tosca|dev|read",
- "org.onap.clamp.clds.tosca|dev|update"
- ]
- }
-]
diff --git a/src/main/resources/clds/json-schema/operational_policies/operational_policy.json b/src/main/resources/clds/json-schema/operational_policies/operational_policy.json
deleted file mode 100644
index 973028316..000000000
--- a/src/main/resources/clds/json-schema/operational_policies/operational_policy.json
+++ /dev/null
@@ -1,320 +0,0 @@
-{
- "type": "object",
- "title": "Configuration",
- "required": [
- "operational_policy"
- ],
- "properties": {
- "operational_policy": {
- "type": "object",
- "title": "Related Parameters",
- "required": [
- "controlLoop",
- "policies"
- ],
- "properties": {
- "controlLoop": {
- "type": "object",
- "title": "Control Loop details",
- "required": [
- "timeout",
- "abatement",
- "trigger_policy",
- "controlLoopName"
- ],
- "properties": {
- "timeout": {
- "type": "string",
- "title": "Overall Time Limit",
- "default": "0",
- "format": "number"
- },
- "abatement": {
- "type": "string",
- "title": "Abatement",
- "enum": [
- "True",
- "False"
- ]
- },
- "trigger_policy": {
- "type": "string",
- "title": "Policy Decision Entry"
- },
- "controlLoopName": {
- "type": "string",
- "title": "Control loop name",
- "readOnly": "True"
- }
- }
- },
- "policies": {
- "uniqueItems": "true",
- "id": "policies_array",
- "type": "array",
- "title": "Policy Decision Tree",
- "format": "tabs-top",
- "items": {
- "title": "Policy Decision",
- "type": "object",
- "id": "policy_item",
- "headerTemplate": "{{self.id}} - {{self.recipe}}",
- "format": "categories",
- "basicCategoryTitle": "recipe",
- "required": [
- "id",
- "retry",
- "timeout",
- "actor",
- "success",
- "failure",
- "failure_timeout",
- "failure_retries",
- "failure_exception",
- "failure_guard",
- "target"
- ],
- "properties": {
- "id": {
- "default": "Policy 1",
- "title": "Policy ID",
- "type": "string"
- },
- "retry": {
- "default": "0",
- "title": "Number of Retry",
- "type": "string",
- "format": "number"
- },
- "timeout": {
- "default": "0",
- "title": "Timeout",
- "type": "string",
- "format": "number"
- },
- "actor": {
- "type": "object",
- "title": "Actor",
- "anyOf": [
- {
- "title": "APPC",
- "type": "object",
- "properties": {
- "actor": {
- "title": "actor",
- "type": "string",
- "default": "APPC",
- "options": {
- "hidden": true
- }
- },
- "recipe": {
- "title": "recipe",
- "type": "string",
- "default": "",
- "enum": [
- "Restart",
- "Rebuild",
- "Migrate",
- "Health-Check",
- "ModifyConfig"
- ]
- },
- "payload": {
- "title": "Payload (YAML)",
- "type": "string",
- "format": "textarea"
- }
- }
- },
- {
- "title": "SO",
- "type": "object",
- "properties": {
- "actor": {
- "title": "actor",
- "type": "string",
- "default": "SO",
- "options": {
- "hidden": true
- }
- },
- "recipe": {
- "title": "recipe",
- "type": "string",
- "default": "",
- "enum": [
- "VF Module Create",
- "VF Module Delete"
- ]
- },
- "payload": {
- "title": "Payload (YAML)",
- "type": "string",
- "format": "textarea"
- }
- }
- },
- {
- "title": "SDNC",
- "type": "object",
- "properties": {
- "actor": {
- "title": "actor",
- "type": "string",
- "default": "SDNC",
- "options": {
- "hidden": true
- }
- },
- "recipe": {
- "title": "recipe",
- "type": "string",
- "default": "",
- "enum": [
- "Reroute",
- "BandwidthOnDemand"
- ]
- },
- "payload": {
- "title": "Payload (YAML)",
- "type": "string",
- "format": "textarea"
- }
- }
- },
- {
- "title": "VFC",
- "type": "object",
- "properties": {
- "actor": {
- "title": "actor",
- "type": "string",
- "default": "VFC",
- "options": {
- "hidden": true
- }
- },
- "recipe": {
- "title": "recipe",
- "type": "string",
- "default": "",
- "enum": [
- "ModifyConfig"
- ]
- },
- "payload": {
- "title": "Payload (YAML)",
- "type": "string",
- "format": "textarea"
- }
- }
- },
- {
- "title": "CDS",
- "type": "object",
- "properties": {
- "actor": {
- "title": "actor",
- "type": "string",
- "default": "CDS",
- "options": {
- "hidden": true
- }
- },
- "recipe": {
- "title": "recipe",
- "type": "object",
- "anyOf": [
- {
- "title": "user-defined",
- "type": "object",
- "properties": {
- "recipe": {
- "title": "recipe",
- "type": "string",
- "default": "user-defined",
- "format": "textarea"
- },
- "payload": {
- "title": "Payload (YAML)",
- "type": "string",
- "default": "",
- "format": "textarea"
- }
- }
- }
- ]
- }
- }
- }
- ]
- },
- "success": {
- "default": "final_success",
- "title": "When Success",
- "type": "string"
- },
- "failure": {
- "default": "final_failure",
- "title": "When Failure",
- "type": "string"
- },
- "failure_timeout": {
- "default": "final_failure_timeout",
- "title": "When Failure Timeout",
- "type": "string"
- },
- "failure_retries": {
- "default": "final_failure_retries",
- "title": "When Failure Retries",
- "type": "string"
- },
- "failure_exception": {
- "default": "final_failure_exception",
- "title": "When Failure Exception",
- "type": "string"
- },
- "failure_guard": {
- "default": "final_failure_guard",
- "title": "When Failure Guard",
- "type": "string"
- },
- "target": {
- "type": "object",
- "required": [
- "type",
- "resourceID"
- ],
- "anyOf": [
- {
- "title": "User Defined",
- "additionalProperties": "True",
- "properties": {
- "type": {
- "title": "Target type",
- "type": "string",
- "default": "",
- "enum": [
- "VNF",
- "VFMODULE",
- "VM"
- ]
- },
- "resourceID": {
- "title": "Target type",
- "type": "string",
- "default": ""
- }
- }
- }
- ]
- }
- }
- }
- }
- }
- }
- }
-}
-
diff --git a/src/main/resources/clds/key.properties b/src/main/resources/clds/key.properties
deleted file mode 100644
index dda2b87d0..000000000
--- a/src/main/resources/clds/key.properties
+++ /dev/null
@@ -1 +0,0 @@
-org.onap.policy.clamp.encryption.aes.key=aa3871669d893c7fb8abbcda31b88b4f \ No newline at end of file
diff --git a/src/main/resources/clds/sdc-controllers-config.json b/src/main/resources/clds/sdc-controllers-config.json
deleted file mode 100644
index b86732ec7..000000000
--- a/src/main/resources/clds/sdc-controllers-config.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "sdc-connections":{
- "sdc-controller":{
- "user": "clamp",
- "consumerGroup": "clamp",
- "consumerId": "clamp",
- "environmentName": "AUTO",
- "sdcAddress": "sdc.api.simpledemo.onap.org:8443",
- "password": "b7acccda32b98c5bb7acccda32b98c5b05D511BD6D93626E90D18E9D24D9B78CD34C7EE8012F0A189A28763E82271E50A5D4EC10C7D93E06E0A2D27CAE66B981",
- "pollingInterval":30,
- "pollingTimeout":30,
- "activateServerTLSAuth":"false",
- "keyStorePassword":"",
- "keyStorePath":"",
- "messageBusAddresses":["ueb.api.simpledemo.onap.org"]
- }
- }
-}
diff --git a/src/main/resources/clds/tosca-converter/default-tosca-types.yaml b/src/main/resources/clds/tosca-converter/default-tosca-types.yaml
deleted file mode 100644
index a11a73698..000000000
--- a/src/main/resources/clds/tosca-converter/default-tosca-types.yaml
+++ /dev/null
@@ -1,87 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-data_types:
- tosca.datatypes.Root:
- description: The TOSCA root Data Type all other TOSCA base Data Types derive from
- tosca.datatypes.Credential:
- derived_from: tosca.datatypes.Root
- properties:
- protocol:
- type: string
- required: false
- token_type:
- type: string
- default: password
- token:
- type: string
- keys:
- type: map
- required: false
- entry_schema:
- type: string
- user:
- type: string
- required: false
- tosca.datatypes.TimeInterval:
- derived_from: tosca.datatypes.Root
- properties:
- start_time:
- type: timestamp
- required: true
- end_time:
- type: timestamp
- required: true
- tosca.datatypes.network.NetworkInfo:
- derived_from: tosca.datatypes.Root
- properties:
- network_name:
- type: string
- network_id:
- type: string
- addresses:
- type: list
- entry_schema:
- type: string
- tosca.datatypes.network.PortInfo:
- derived_from: tosca.datatypes.Root
- properties:
- port_name:
- type: string
- port_id:
- type: string
- network_id:
- type: string
- mac_address:
- type: string
- addresses:
- type: list
- entry_schema:
- type: string
- # tosca.datatypes.network.PortDef:
- # derived_from: integer
- # constraints:
- # - in_range: [ 1, 65535 ]
- # tosca.datatypes.network.PortSpec:
- # derived_from: tosca.datatypes.Root
- # properties:
- # protocol:
- # type: string
- # required: true
- # default: tcp
- # constraints:
- # - valid_values: [ udp, tcp, igmp ]
- # target:
- # type: PortDef
- # required: false
- # target_range:
- # type: range
- # required: false
- # constraints:
- # - in_range: [ 1, 65535 ]
- # source:
- # type: PortDef
- # required: false
- # source_range:
- # type: range
- # required: false
- # constraints:
- # - in_range: [ 1, 65535 ] \ No newline at end of file
diff --git a/src/main/resources/clds/tosca-converter/templates.json b/src/main/resources/clds/tosca-converter/templates.json
deleted file mode 100644
index f709e2f6d..000000000
--- a/src/main/resources/clds/tosca-converter/templates.json
+++ /dev/null
@@ -1,398 +0,0 @@
-{
- "integer":{
- "type":{
- "defaultValue":"integer",
- "visible":true,
- "static":false
- },
- "description":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "title":{
- "defaultValue":"",
- "visible":true,
- "static":false
-
- },
- "deprecated":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "default":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "enum":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "const":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "multipleOf":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "maximum":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "exclusiveMaximum":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "minimum":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "exclusiveMinimum":{
- "defaultValue":"",
- "visible":true,
- "static":false
- }
- },
- "number":{
- "type":{
- "defaultValue":"number",
- "visible":true,
- "static":false
- },
- "description":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "title":{
- "defaultValue":"",
- "visible":true,
- "static":false
-
- },
- "deprecated":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "default":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "enum":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "const":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "multipleOf":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "maximum":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "exclusiveMaximum":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "minimum":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "exclusiveMinimum":{
- "defaultValue":"",
- "visible":true,
- "static":false
- }
- },
- "boolean":{
- "type":{
- "defaultValue":"boolean",
- "visible":true,
- "static":false
- },
- "description":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "title":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "deprecated":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "default":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "const":{
- "defaultValue":"",
- "visible":true,
- "static":false
- }
- },
- "string":{
- "type":{
- "defaultValue":"string",
- "visible":true,
- "static":false
- },
- "description":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "title":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "deprecated":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "default":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "enum":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "const":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "length":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "minLength":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "maxLength":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "pattern":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "format":{
- "defaultValue":"",
- "visible":true,
- "static":false
- }
- },
- "timestamp":{
- "type":{
- "defaultValue":"string",
- "visible":true,
- "static":false
- },
- "description":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "title":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "deprecated":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "default":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "enum":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "const":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "length":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "minLength":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "maxLength":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "pattern":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "format":{
- "defaultValue":"",
- "visible":true,
- "static":false
- }
- },
- "array":{
- "type":{
- "defaultValue":"array",
- "visible":true,
- "static":false
- },
- "description":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "title":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "deprecated":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "default":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "const":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "uniqueItems":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "properties":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "minContains":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "maxContains":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "minItems":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "maxItems":{
- "defaultValue":"",
- "visible":true,
- "static":false
- }
- },
- "object":{
- "type":{
- "defaultValue":"object",
- "visible":true,
- "static":false
- },
- "description":{
- "defaultValue":"",
- "visible":true,
- "static":true
- },
- "title":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "format":{
- "defaultValue":"tabs",
- "visible":true,
- "static":true
- },
- "required":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "minProperties":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "maxProperties":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "properties":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "dependentRequired":{
- "defaultValue":"",
- "visible":true,
- "static":false
- },
- "dependencies":{
- "defaultValue":"",
- "visible":true,
- "static":false
- }
- }
-} \ No newline at end of file
diff --git a/src/main/resources/logback-default.xml b/src/main/resources/logback-default.xml
deleted file mode 100644
index 5397eab04..000000000
--- a/src/main/resources/logback-default.xml
+++ /dev/null
@@ -1,329 +0,0 @@
-<included>
- <jmxConfigurator />
- <!-- Example evaluator filter applied against console appender -->
- <property
- name="p_tim"
- value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC}" />
- <property
- name="p_lvl"
- value="%level" />
- <property
- name="p_log"
- value="%logger" />
- <property
- name="p_mdc"
- value="%replace(%replace(%mdc){'\t','\\\\t'}){'\n', '\\\\n'}" />
- <property
- name="p_msg"
- value="%replace(%replace(%msg){'\t', '\\\\t'}){'\n','\\\\n'}" />
- <property
- name="p_exc"
- value="%replace(%replace(%rootException){'\t', '\\\\t'}){'\n','\\\\n'}" />
- <property
- name="p_mak"
- value="%replace(%replace(%marker){'\t', '\\\\t'}){'\n','\\\\n'}" />
- <property
- name="p_thr"
- value="%thread" />
- <property
- name="defaultPattern"
- value="%nopexception${p_tim}\t${p_thr}\t${p_lvl}\t${p_log}\t${p_mdc}\t${p_msg}\t${p_exc}\t${p_mak}\t%n" />
- <property
- name="debugPattern"
- value="%nopexception${p_tim}|${p_lvl}|${p_mdc}|${p_exc}|%msg%n" />
-
- <property
- name="errorPattern"
- value="%X{EntryTimestamp}|%X{RequestID}|%thread|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}||||%msg%n" />
-
- <property
- name="auditPattern"
- value="%X{EntryTimestamp}|%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX,UTC}|%X{RequestID}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{PartnerName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDesc}|%X{InstanceUUID}|%.-5level|%X{Severity}|%X{ServerIPAddress}|%X{ElapsedTime}|%X{ServerFQDN}|%X{RemoteHost}||||%marker|%mdc|||%msg%n" />
-
- <property
- name="metricPattern"
- value="%X{InvokeTimestamp}|%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX,UTC}|%X{RequestID}|%X{ServiceInstanceId}|%thread||%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDesc}|%X{InstanceUUID}|%.-5level|%X{Severity}|%X{ServerIPAddress}|%X{ElapsedTime}|%X{ServerFQDN}|%X{RemoteHost}||||%X{TargetVirtualEntity}|%marker|%mdc|||%msg%n" />
-
-
- <!-- Example evaluator filter applied against console appender -->
- <appender
- name="STDOUT"
- class="ch.qos.logback.core.ConsoleAppender">
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>INFO</level>
- </filter>
- <encoder>
- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{1024} - %msg%n
- </pattern>
- </encoder>
- </appender>
-
- <appender
- name="ERROR"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <filter class="ch.qos.logback.classic.filter.LevelFilter">
- <level>ERROR</level>
- <onMatch>ACCEPT</onMatch>
- <onMismatch>DENY</onMismatch>
- </filter>
- <file>${logDirectory}/error.log</file>
- <append>true</append>
- <encoder>
- <pattern>${errorPattern}</pattern>
- </encoder>
- <rollingPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
- <fileNamePattern>${logDirectory}/error.%d{yyyy-MM-dd}.%i.log.zip
- </fileNamePattern>
- <maxFileSize>50MB</maxFileSize>
- <maxHistory>20</maxHistory>
- <totalSizeCap>1GB</totalSizeCap>
- </rollingPolicy>
- </appender>
-
- <appender
- name="DEBUG"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>${logDirectory}/debug.log</file>
- <append>true</append>
- <encoder>
- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{1024} - %msg%n
- </pattern>
- </encoder>
- <rollingPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
- <fileNamePattern>${logDirectory}/debug.%d{yyyy-MM-dd}.%i.log.zip
- </fileNamePattern>
- <maxFileSize>50MB</maxFileSize>
- <maxHistory>20</maxHistory>
- <totalSizeCap>1GB</totalSizeCap>
- </rollingPolicy>
- </appender>
-
-
- <appender
- name="AUDIT"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
- <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
- <marker>ENTRY</marker>
- <marker>EXIT</marker>
- </evaluator>
- <onMismatch>DENY</onMismatch>
- <onMatch>ACCEPT</onMatch>
- </filter>
- <file>${logDirectory}/audit.log</file>
- <append>true</append>
- <encoder>
- <pattern>${auditPattern}</pattern>
- </encoder>
- <rollingPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
- <FileNamePattern>${logDirectory}/audit.%d{yyyy-MM-dd}.%i.log.zip
- </FileNamePattern>
- <maxFileSize>50MB</maxFileSize>
- <maxHistory>20</maxHistory>
- <totalSizeCap>1GB</totalSizeCap>
- </rollingPolicy>
- </appender>
- <appender
- name="asyncEELFAudit"
- class="ch.qos.logback.classic.AsyncAppender">
- <queueSize>256</queueSize>
- <appender-ref ref="AUDIT" />
- </appender>
-
- <appender
- name="METRIC"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
- <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
- <marker>INVOKE</marker>
- <marker>INVOKE-RETURN</marker>
- </evaluator>
- <onMismatch>DENY</onMismatch>
- <onMatch>ACCEPT</onMatch>
- </filter>
- <file>${logDirectory}/metric.log</file>
- <append>true</append>
- <encoder>
- <pattern>${metricPattern}</pattern>
- </encoder>
- <rollingPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
- <FileNamePattern>${logDirectory}/metric.%d{yyyy-MM-dd}.%i.log.zip
- </FileNamePattern>
- <maxFileSize>50MB</maxFileSize>
- <maxHistory>20</maxHistory>
- <totalSizeCap>1GB</totalSizeCap>
- </rollingPolicy>
- </appender>
-
- <appender
- name="asyncEELFMetrics"
- class="ch.qos.logback.classic.AsyncAppender">
- <queueSize>256</queueSize>
- <appender-ref ref="METRIC" />
- </appender>
-
- <!-- SECURITY related loggers -->
- <appender
- name="SECURITY"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>${logDirectory}/security.log</file>
- <append>true</append>
- <encoder>
- <pattern>%X{EntryTimestamp}|%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX,UTC}|%X{RequestID}|%X{ServiceInstanceId}|%.20thread|%X{VirtualServerName}|%X{ServiceName}|%X{PartnerName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDescription}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{ElapsedTime}|%X{ServerFQDN}|%X{RemoteHost}|%X{ClassName}|%X{Unused}|%X{ProcessKey}|%X{CustomField1}|%X{CustomField2}|%X{CustomField3}|%X{CustomField4}|%msg%n
- </pattern>
- </encoder>
- <rollingPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
- <FileNamePattern>${logDirectory}/security.%d{yyyy-MM-dd}.%i.log.zip
- </FileNamePattern>
- <maxFileSize>50MB</maxFileSize>
- <maxHistory>20</maxHistory>
- <totalSizeCap>1GB</totalSizeCap>
- </rollingPolicy>
- </appender>
-
- <appender
- name="asyncEELFSecurity"
- class="ch.qos.logback.classic.AsyncAppender">
- <queueSize>256</queueSize>
- <appender-ref ref="SECURITY" />
- </appender>
- <!-- logback jms appenders & loggers definition starts here -->
- <appender
- name="auditLogs"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- </filter>
- <file>${logDirectory}/Audits.log</file>
- <rollingPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
- <fileNamePattern>${logDirectory}/Audits-%d{yyyy-MM-dd}.%i.log.zip
- </fileNamePattern>
- <maxFileSize>50MB</maxFileSize>
- <maxHistory>20</maxHistory>
- <totalSizeCap>1GB</totalSizeCap>
- </rollingPolicy>
- <encoder>
- <pattern>"%d [%thread] %-5level %logger{1024} - %msg%n"</pattern>
- </encoder>
- </appender>
-
- <appender
- name="perfLogs"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- </filter>
- <file>${logDirectory}/Perform.log</file>
- <rollingPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
- <fileNamePattern>${logDirectory}/Perform--%d{yyyy-MM-dd}.%i.log.zip
- </fileNamePattern>
- <maxFileSize>50MB</maxFileSize>
- <maxHistory>20</maxHistory>
- <totalSizeCap>1GB</totalSizeCap>
- </rollingPolicy>
- <encoder>
- <pattern>"%d [%thread] %-5level %logger{1024} - %msg%n"</pattern>
- </encoder>
- </appender>
-
- <logger
- name="org.onap.aaf"
- level="DEBUG">
- <appender-ref ref="DEBUG" />
- </logger>
- <logger
- name="org.hibernate"
- level="INFO">
- <appender-ref ref="DEBUG" />
- </logger>
- <logger
- name="org.apache.camel.Tracing"
- level="INFO">
- <appender-ref ref="DEBUG" />
- </logger>
-
- <logger
- name="org.apache"
- level="INFO">
- <appender-ref ref="DEBUG" />
- </logger>
- <!-- Spring related loggers -->
- <logger
- name="org.springframework"
- level="INFO">
- <appender-ref ref="DEBUG" />
- </logger>
-
- <!-- CLAMP related loggers -->
- <logger
- name="org.onap.policy.clamp"
- level="DEBUG">
- <appender-ref ref="ERROR" />
- <appender-ref ref="DEBUG" />
- </logger>
-
- <logger
- name="com.att.eelf.error"
- level="OFF">
- <appender-ref ref="ERROR" />
- </logger>
- <!-- EELF related loggers -->
- <logger
- name="com.att.eelf.audit"
- level="INFO"
- additivity="false">
- <appender-ref ref="asyncEELFAudit" />
- </logger>
- <logger
- name="com.att.eelf.metrics"
- level="DEBUG"
- additivity="false">
- <appender-ref ref="asyncEELFMetrics" />
- </logger>
- <logger
- name="com.att.eelf.security"
- level="DEBUG"
- additivity="false">
- <appender-ref ref="asyncEELFSecurity" />
- </logger>
-
- <!-- logback internals logging -->
- <logger
- name="ch.qos.logback.classic"
- level="INFO" />
- <logger
- name="ch.qos.logback.core"
- level="INFO" />
- <logger
- name="AuditRecord"
- level="INFO"
- additivity="false">
- <appender-ref ref="auditLogs" />
- </logger>
- <logger
- name="AuditRecord_DirectCall"
- level="INFO"
- additivity="false">
- <appender-ref ref="auditLogs" />
- </logger>
- <logger
- name="PerfTrackerRecord"
- level="INFO"
- additivity="false">
- <appender-ref ref="perfLogs" />
- </logger>
- <!-- logback jms appenders & loggers definition ends here -->
-
- <root level="DEBUG">
- <appender-ref ref="DEBUG" />
- <appender-ref ref="STDOUT" />
- <appender-ref ref="AUDIT" />
- <appender-ref ref="METRIC" />
- <appender-ref ref="ERROR" />
- </root>
-</included>
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
deleted file mode 100644
index ffa497f1d..000000000
--- a/src/main/resources/logback-spring.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<configuration debug="true">
- <springProperty name="logbackFilePath"
- source="clamp.config.logback.path" />
- <springProperty name="logbackFileName"
- source="clamp.config.logback.filename" />
- <springProperty name="logDirectory"
- source="clamp.config.log.path" />
-
- <if condition='isNull("logbackFilePath")'>
- <then>
- <!-- Classpath case -->
- <include resource="${logbackFileName}" />
- </then>
- <else>
- <!-- File system case -->
- <include file="${logbackFilePath}/${logbackFileName}" />
- </else>
- </if>
-</configuration> \ No newline at end of file
diff --git a/src/main/resources/logmessages.properties b/src/main/resources/logmessages.properties
deleted file mode 100644
index fc9f74a36..000000000
--- a/src/main/resources/logmessages.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-###
-# ============LICENSE_START=======================================================
-# ONAP CLAMP
-# ================================================================================
-# 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============================================
-# ===================================================================
-#
-###
-
-LOGSERVICE_EMAIL_ERROR=SERVICE0007I|Exception while sending e-mail:{0}|Resolution needed|action is required
-LOGSERVICE_EMAIL_CLASS=SERVICE0008I|classUrl.getFile:{0}|Resolution needed|action is required
-LOGSERVICE_EMAIL_CLASS_NULL=SERVICE0009I|classUrl is NULL|Resolution needed|action is required
-PROCESS_INSTANCE_ID=SERVICE0010I|Process Instance Id:{0}|No resolution needed|No action is required
diff --git a/src/main/resources/system.properties b/src/main/resources/system.properties
deleted file mode 100644
index f95fc7009..000000000
--- a/src/main/resources/system.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-###
-# ============LICENSE_START=======================================================
-# ONAP CLAMP
-# ================================================================================
-# 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============================================
-# ===================================================================
-#
-### Static JVM parameters can be set here by the dev team
-### These will be loaded at Clamp startup
-#
-# JVM SSL/TLS properties
-jdk.tls.client.protocols=TLSv1.1,TLSv1.2
-https.protocols=TLSv1.1,TLSv1.2
diff --git a/src/main/script/SelectNpmRepo.groovy b/src/main/script/SelectNpmRepo.groovy
deleted file mode 100644
index 797d2d003..000000000
--- a/src/main/script/SelectNpmRepo.groovy
+++ /dev/null
@@ -1,34 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.clds.maven.scripts
-
-println project.properties['clamp.project.version'];
-
-if ( project.properties['clamp.project.version'].endsWith("-SNAPSHOT") ) {
- project.properties['npm.publish.url']="https://nexus3.onap.org/repository/npm.snapshot/"
-} else {
- project.properties['npm.publish.url']="https://nexus3.onap.org/repository/npm.snapshot/"
-}
-
-println 'NPM repository: ' + project.properties['npm.publish.url'];
diff --git a/src/main/script/TagVersion.groovy b/src/main/script/TagVersion.groovy
deleted file mode 100644
index 271e2967f..000000000
--- a/src/main/script/TagVersion.groovy
+++ /dev/null
@@ -1,40 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * 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.policy.clamp.maven.scripts
-
-println project.properties['clamp.project.version'];
-def versionArray;
-if ( project.properties['clamp.project.version'] != null ) {
- versionArray = project.properties['clamp.project.version'].split('\\.');
-}
-
-if ( project.properties['clamp.project.version'].endsWith("-SNAPSHOT") ) {
- project.properties['project.docker.latesttag.version']=versionArray[0] + '.' + versionArray[1] + "-SNAPSHOT-latest";
- project.properties['project.docker.latesttagtimestamp.version']=versionArray[0] + '.' + versionArray[1] + "-SNAPSHOT-"+project.properties['clamp.build.timestamp'];
-} else {
- project.properties['project.docker.latesttag.version']=versionArray[0] + '.' + versionArray[1] + "-STAGING-latest";
- project.properties['project.docker.latesttagtimestamp.version']=versionArray[0] + '.' + versionArray[1] + "-STAGING-"+project.properties['clamp.build.timestamp'];
-}
-
-println 'New Tag for docker:' + project.properties['project.docker.latesttag.version']; \ No newline at end of file
diff --git a/src/main/script/checkLibIndex.sh b/src/main/script/checkLibIndex.sh
deleted file mode 100755
index 9a28e7df9..000000000
--- a/src/main/script/checkLibIndex.sh
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/bin/bash
-###
-# ============LICENSE_START=======================================================
-# ONAP CLAMP
-# ================================================================================
-# Copyright (C) 2020 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============================================
-# ===================================================================
-#
-###
-
-baseDir=$(git rev-parse --show-toplevel)
-
-if [[ ! -d $baseDir ]]
-then
- echo "[ERROR] failed to determine git base directory"
- exit 1
-fi
-
-tmpSrcFileList=/tmp/upldateLibIndex.$$.list
-reactUiBaseDir="${baseDir}/ui-react"
-reactLibIndexFile="ui-react-lib/libIndex.js"
-exclusionList="ui-react-lib/libExportExclusions.dat"
-
-
-if [[ ! -d "$reactUiBaseDir" ]]
-then
- echo "[ERROR] reacUiBaseDir=$reacUiBaseDir is not accessible"
- exit 1
-fi
-
-if [[ ! -d "$baseDir/$reactLibBaseDir" ]]
-then
- echo "[ERROR] reactLibBaseDir=$baseDir/$reactLibBaseDir is not accessible"
- exit 1
-fi
-
-if [[ ! -r "$baseDir/$reactLibIndexFile" ]]
-then
- echo "[ERROR] file reactLibIndexFile=$baseDir/$reactLibIndexFile is not accessible"
- exit 1
-fi
-
-
-if ! cd $reactUiBaseDir
-then
- echo "[ERROR] could not cd to reactUiBaseDir=$reactUiBaseDir"
- exit 1
-fi
-
-find ./src -name \*.js | egrep -v "__snapshot|\.test\." 2>/dev/null | sed 's/.js$//' > $tmpSrcFileList
-
-if [[ ! -s $tmpSrcFileList ]]
-then
- echo "[ERROR] no source files found in reactUiBaseDir=$reactUiBaseDir"
- rm -f $tmpSrcFileList
- exit 1
-fi
-
-export nErrors=0
-
-# Verify that any .js file found within ui-react/src other than test related files
-# is also referenced in ui-react-lib/libIndex.js
-
-for srcFileName in `<$tmpSrcFileList`
-do
- if [[ -r "$baseDir/$exclusionList" ]]
- then
- if grep $srcFileName $baseDir/$exclusionList >/dev/null 2>&1
- then
- continue
- fi
- fi
-
- if ! grep $srcFileName "$baseDir/$reactLibIndexFile" > /dev/null 2>&1
- then
- echo "[ERROR] file=${srcFileName}.js is not declared in $reactLibIndexFile"
- echo "[ERROR] and not found in exclsionList=${exclusionList}."
- echo "[ERROR] Please either add it to $reactLibIndexFile"
- echo "[ERROR] or to the exclusion list in ${exclusionList}."
- echo ""
- (( nErrors++ ))
- fi
-done
-
-# Verify for each entry in ui-react-lib/libIndex.js, that the referenced source file exists
-# in ui-react/src; if not, developer probably forgot to remove it from libIndex.js.
-
-egrep '^export ' $baseDir/$reactLibIndexFile |\
-sed -e "s+.*\./src+./src+" -e "s+'.*+.js+" > $tmpSrcFileList
-
-for srcFileName in `<$tmpSrcFileList`
-do
- if [[ ! -r "$srcFileName" ]]
- then
- echo "[ERROR] source file=$srcFileName in libIndex.js is not accessible"
- (( nErrors++ ))
- fi
-done
-
-rm -f $tmpSrcFileList
-
-if (( nErrors == 0 ))
-then
- echo "[INFO] $reactLibIndexFile passes sanity check"
- exit 0
-fi
-
-exit $nErrors