From 5032434b101f25fa44d2e1f8dc8393e30af1ed4f Mon Sep 17 00:00:00 2001 From: "Stone, Avi (as206k)" Date: Thu, 12 Apr 2018 15:46:31 +0300 Subject: DCAE-D be initial commit DCAE-D be initial commit Issue-ID: SDC-1218 Change-Id: Id18ba96c499e785aa9ac395fbaf32d57f08c281b Signed-off-by: Stone, Avi (as206k) --- dcaedt_be/.gitignore | 30 + dcaedt_be/pom.xml | 193 ++ .../sdc/dcae/composition/CompositionConfig.java | 87 + .../sdc/dcae/composition/CompositionEngine.java | 140 + .../composition/controller/BaseController.java | 80 + .../controller/BlueprintController.java | 239 ++ .../controller/CompositionController.java | 338 ++ .../controller/ConfigurationController.java | 63 + .../controller/LifecycleController.java | 84 + .../controller/RuleEditorController.java | 453 +++ .../composition/controller/ServicesController.java | 230 ++ .../composition/controller/VfcmtController.java | 183 + .../controller/health/HealthController.java | 77 + .../controller/health/HealthPoller.java | 97 + .../controller/health/ToscaLabHealthState.java | 29 + .../controller/swagger/SwaggerConfig.java | 23 + .../dcae/composition/impl/BaseBusinessLogic.java | 49 + .../composition/impl/ReferenceBusinessLogic.java | 74 + .../dcae/composition/impl/VfcmtBusinessLogic.java | 283 ++ .../org/onap/sdc/dcae/errormng/ActionStatus.java | 48 + .../onap/sdc/dcae/errormng/BasicConfiguration.java | 5 + .../org/onap/sdc/dcae/errormng/DcaeException.java | 15 + .../org/onap/sdc/dcae/errormng/ErrConfMgr.java | 306 ++ .../onap/sdc/dcae/errormng/ErrorConfiguration.java | 46 + .../dcae/errormng/ErrorConfigurationLoader.java | 121 + .../java/org/onap/sdc/dcae/errormng/ErrorInfo.java | 99 + .../sdc/dcae/errormng/ResponseFormatManager.java | 103 + .../org/onap/sdc/dcae/filter/LoggingFilter.java | 247 ++ .../dcae/rule/editor/enums/ConditionTypeEnum.java | 22 + .../dcae/rule/editor/enums/OperatorTypeEnum.java | 32 + .../rule/editor/enums/RuleEditorElementType.java | 58 + .../dcae/rule/editor/impl/RulesBusinessLogic.java | 149 + .../translators/ConditionGroupTranslator.java | 47 + .../editor/translators/ConditionTranslator.java | 40 + .../editor/translators/CopyActionTranslator.java | 47 + .../translators/DateFormatterTranslator.java | 49 + .../translators/FieldConditionTranslator.java | 43 + .../editor/translators/IRuleElementTranslator.java | 50 + .../editor/translators/MapActionTranslator.java | 50 + .../editor/translators/MappingRulesTranslator.java | 69 + .../editor/translators/RegexActionTranslator.java | 44 + .../rule/editor/translators/RuleTranslator.java | 51 + .../utils/EmptyStringTranslationSerializer.java | 14 + .../dcae/rule/editor/utils/RulesPayloadUtils.java | 38 + .../dcae/rule/editor/utils/ValidationUtils.java | 20 + .../rule/editor/validators/ActionValidator.java | 40 + .../editor/validators/ConcatActionValidator.java | 29 + .../editor/validators/ConditionGroupValidator.java | 40 + .../rule/editor/validators/ConditionValidator.java | 40 + .../editor/validators/DateFormatterValidator.java | 41 + .../editor/validators/IRuleElementValidator.java | 9 + .../rule/editor/validators/MapActionValidator.java | 49 + .../dcae/rule/editor/validators/RuleValidator.java | 56 + .../onap/sdc/dcae/ves/EventListenerDefinition.java | 101 + .../onap/sdc/dcae/ves/VesDataItemsDefinition.java | 9 + .../onap/sdc/dcae/ves/VesDataTypeDefinition.java | 270 ++ .../org/onap/sdc/dcae/ves/VesJsonDeserializer.java | 20 + .../org/onap/sdc/dcae/ves/VesSimpleTypesEnum.java | 26 + .../org/onap/sdc/dcae/ves/VesStructureLoader.java | 115 + dcaedt_be/src/main/resources/logback-spring.xml | 181 + dcaedt_be/src/main/resources/schema.sql | 4 + dcaedt_be/src/main/webapp/META-INF/MANIFEST.MF | 8 + .../WEB-INF/config/dcae-be/application.properties | 22 + .../config/dcae-be/error-configuration.yaml | 286 ++ .../dcae-be/ves-schema/CommonEventFormat_v4.1.json | 1165 +++++++ .../dcae-be/ves-schema/CommonEventFormat_v5.3.json | 2004 +++++++++++ dcaedt_be/src/main/webapp/WEB-INF/jetty-web.xml | 12 + dcaedt_be/src/main/webapp/WEB-INF/web.xml | 5 + .../org/onap/sdc/dcae/VesStructureLoaderMock.java | 116 + .../impl/ReferenceBusinessLogicTest.java | 123 + .../composition/impl/VfcmtBusinessLogicTest.java | 310 ++ .../rule/editor/impl/RulesBusinessLogicTest.java | 304 ++ .../onap/sdc/dcae/services/GetServicesTest.java | 143 + .../sdc/dcae/ves/EventListenerDefinitionTest.java | 61 + .../onap/sdc/dcae/ves/VesStructureLoaderTest.java | 129 + .../ves-schema/CommonEventFormat_v4.1.json | 1165 +++++++ ...onEventFormat_v4.1WithoutCommonEventHeader.json | 1087 ++++++ .../ves-schema/CommonEventFormat_v5.3.json | 2004 +++++++++++ .../ves-schema/CommonEventFormat_vInvalidJson.json | 288 ++ .../CommonEventFormat_vInvalidRequiredEntry.json | 1165 +++++++ .../CommonEventFormat_vInvalidSchemaStructure.json | 1165 +++++++ .../ves-schema/CommonEventFormat_vInvalidType.json | 1165 +++++++ .../CommonEventFormat_vNoEventProperty.json | 1165 +++++++ .../CommonEventFormat_vUnresolvable.json | 288 ++ .../resources/ves-schema/unsupportedFilename.json | 1165 +++++++ dcaedt_catalog/.gitignore | 12 + dcaedt_catalog/api/pom.xml | 198 ++ .../java/org/onap/sdc/dcae/catalog/Catalog.java | 440 +++ .../onap/sdc/dcae/catalog/asdc/ASDCCatalog.java | 1227 +++++++ .../api/src/main/resources/log4j.properties | 8 + .../org/onap/sdc/dcae/catalog/ASDCCatalogTest.java | 88 + dcaedt_catalog/asdc/pom.xml | 139 + .../java/org/onap/sdc/dcae/catalog/asdc/ASDC.java | 1101 ++++++ .../onap/sdc/dcae/catalog/asdc/ASDCController.java | 0 .../org/onap/sdc/dcae/catalog/asdc/ASDCEngine.java | 25 + .../onap/sdc/dcae/catalog/asdc/ASDCException.java | 18 + .../org/onap/sdc/dcae/catalog/asdc/ASDCUtils.java | 448 +++ .../sdc/dcae/catalog/asdc/ASDCUtilsController.java | 76 + .../onap/sdc/dcae/catalog/asdc/Blueprinter.java | 76 + .../org/onap/sdc/dcae/catalog/asdc/Cloudify.java | 249 ++ .../java/org/onap/sdc/dcae/client/ISdcClient.java | 47 + .../org/onap/sdc/dcae/client/SdcRestClient.java | 221 ++ .../org/onap/sdc/dcae/enums/ArtifactGroupType.java | 5 + .../java/org/onap/sdc/dcae/enums/ArtifactType.java | 16 + .../java/org/onap/sdc/dcae/enums/AssetType.java | 5 + .../sdc/dcae/enums/LifecycleOperationType.java | 16 + .../org/onap/sdc/dcae/enums/SdcConsumerInfo.java | 5 + .../sdc/dcae/errormng/AbstractSdncException.java | 97 + .../org/onap/sdc/dcae/errormng/BaseException.java | 61 + .../org/onap/sdc/dcae/errormng/OkResponseInfo.java | 8 + .../onap/sdc/dcae/errormng/PolicyException.java | 11 + .../org/onap/sdc/dcae/errormng/RequestError.java | 65 + .../org/onap/sdc/dcae/errormng/ResponseFormat.java | 75 + .../onap/sdc/dcae/errormng/ServiceException.java | 12 + .../java/org/onap/sdc/dcae/utils/Normalizers.java | 34 + .../sdc/dcae/utils/SDCResponseErrorHandler.java | 43 + .../onap/sdc/dcae/utils/SdcRestClientUtils.java | 85 + .../org/onap/sdc/dcae/utils/NormalizersTest.java | 51 + dcaedt_catalog/commons/pom.xml | 135 + .../org/onap/sdc/dcae/catalog/commons/Action.java | 11 + .../org/onap/sdc/dcae/catalog/commons/Actions.java | 201 ++ .../org/onap/sdc/dcae/catalog/commons/Future.java | 35 + .../sdc/dcae/catalog/commons/FutureHandler.java | 13 + .../org/onap/sdc/dcae/catalog/commons/Futures.java | 257 ++ .../org/onap/sdc/dcae/catalog/commons/Http.java | 107 + .../catalog/commons/JSONHttpMessageConverter.java | 100 + .../onap/sdc/dcae/catalog/commons/ListBuilder.java | 59 + .../onap/sdc/dcae/catalog/commons/MapBuilder.java | 80 + .../org/onap/sdc/dcae/catalog/commons/Neo.java | 54 + .../org/onap/sdc/dcae/catalog/commons/Proxies.java | 37 + .../org/onap/sdc/dcae/catalog/commons/Proxy.java | 144 + .../org/onap/sdc/dcae/catalog/commons/Proxy.pojo | 145 + .../sdc/dcae/catalog/commons/ProxyBuilder.java | 92 + .../onap/sdc/dcae/catalog/commons/Recycler.java | 329 ++ dcaedt_catalog/db/pom.xml | 149 + .../java/org/onap/sdc/dcae/db/neo4j/Modeled.java | 1980 +++++++++++ .../db/src/main/resources/tosca-schema.yaml | 1231 +++++++ .../src/main/resources/tosca-storage-schema.yaml | 37 + dcaedt_catalog/pom.xml | 29 + dcaedt_catalog/service/README.md | 4 + dcaedt_catalog/service/pom.xml | 80 + .../sdc/dcae/catalog/engine/CatalogController.java | 594 ++++ .../sdc/dcae/catalog/engine/CatalogEngine.java | 26 + .../onap/sdc/dcae/catalog/engine/CatalogError.java | 20 + .../sdc/dcae/catalog/engine/CatalogMessage.java | 27 + .../sdc/dcae/catalog/engine/CatalogRequest.java | 27 + .../sdc/dcae/catalog/engine/CatalogResponse.java | 39 + .../sdc/dcae/catalog/engine/ElementRequest.java | 6 + .../sdc/dcae/catalog/engine/ElementsLookup.java | 49 + .../onap/sdc/dcae/catalog/engine/ItemsRequest.java | 16 + .../service/src/main/resources/log4j.properties | 15 + dcaedt_tools/pom.xml | 136 + dcaedt_tools/src/ReadMe.txt | 64 + dcaedt_tools/src/main/java/json/Credential.java | 62 + dcaedt_tools/src/main/java/json/Credentials.java | 23 + dcaedt_tools/src/main/java/json/Environment.java | 51 + .../java/json/response/ElementsResponse/Data.java | 23 + .../json/response/ElementsResponse/Element.java | 73 + .../ElementsResponse/ElementsResponse.java | 53 + .../src/main/java/json/response/Error.java | 11 + .../java/json/response/ItemsResponse/Artifact.java | 102 + .../java/json/response/ItemsResponse/Data.java | 22 + .../java/json/response/ItemsResponse/Element.java | 53 + .../java/json/response/ItemsResponse/Item.java | 203 ++ .../json/response/ItemsResponse/ItemsResponse.java | 53 + .../java/json/response/ItemsResponse/Model.java | 62 + .../json/response/ModelResponse/Assignment.java | 22 + .../json/response/ModelResponse/Capability.java | 63 + .../java/json/response/ModelResponse/Data.java | 22 + .../DcaeCapabilitiesStreamSubscribe.java | 23 + .../java/json/response/ModelResponse/Format.java | 22 + .../java/json/response/ModelResponse/Model.java | 73 + .../json/response/ModelResponse/ModelResponse.java | 52 + .../java/json/response/ModelResponse/Node.java | 73 + .../json/response/ModelResponse/NodeFilter.java | 23 + .../java/json/response/ModelResponse/Property.java | 53 + .../json/response/ModelResponse/Relationship.java | 22 + .../json/response/ModelResponse/Requirement.java | 52 + .../java/json/response/ModelResponse/Type.java | 32 + .../main/java/json/templateInfo/Composition.java | 32 + .../json/templateInfo/DeployTemplateConfig.java | 22 + .../src/main/java/json/templateInfo/Relation.java | 50 + .../main/java/json/templateInfo/TemplateInfo.java | 83 + .../src/main/java/tools/DeployTemplate.java | 157 + .../src/main/java/tools/EntitiesRetriever.java | 33 + dcaedt_tools/src/main/java/tools/LoggerDebug.java | 13 + dcaedt_tools/src/main/java/tools/LoggerError.java | 13 + dcaedt_tools/src/main/java/tools/Main.java | 80 + dcaedt_tools/src/main/java/tools/NodeData.java | 40 + .../src/main/java/tools/TemplateContainer.java | 329 ++ .../src/main/java/utilities/DcaeRestClient.java | 151 + .../src/main/java/utilities/IDcaeRestClient.java | 37 + dcaedt_tools/src/main/java/utilities/IReport.java | 8 + dcaedt_tools/src/main/java/utilities/Report.java | 54 + dcaedt_tools/src/main/resources/conf/config.json | 51 + .../src/main/resources/conf/environment.json | 12 + dcaedt_tools/src/test/java/BaseTest.java | 151 + dcaedt_tools/src/test/java/DeployTemplateTest.java | 54 + .../src/test/java/EntitiesRetrieverTest.java | 29 + .../src/test/java/TemplateContainerTest.java | 157 + dcaedt_validator/.gitignore | 14 + dcaedt_validator/checker/.gitignore | 1 + dcaedt_validator/checker/pom.xml | 160 + .../java/org/onap/sdc/dcae/checker/Catalog.java | 444 +++ .../onap/sdc/dcae/checker/CatalogException.java | 14 + .../java/org/onap/sdc/dcae/checker/Checker.java | 3643 ++++++++++++++++++++ .../onap/sdc/dcae/checker/CheckerException.java | 18 + .../org/onap/sdc/dcae/checker/CommonLocator.java | 144 + .../java/org/onap/sdc/dcae/checker/Construct.java | 22 + .../main/java/org/onap/sdc/dcae/checker/Data.java | 895 +++++ .../main/java/org/onap/sdc/dcae/checker/Facet.java | 37 + .../main/java/org/onap/sdc/dcae/checker/JSP.java | 624 ++++ .../java/org/onap/sdc/dcae/checker/Process.java | 29 + .../org/onap/sdc/dcae/checker/ProcessBuilder.java | 24 + .../java/org/onap/sdc/dcae/checker/Processor.java | 11 + .../onap/sdc/dcae/checker/ProcessorException.java | 28 + .../java/org/onap/sdc/dcae/checker/Report.java | 102 + .../java/org/onap/sdc/dcae/checker/Repository.java | 50 + .../java/org/onap/sdc/dcae/checker/Target.java | 80 + .../org/onap/sdc/dcae/checker/TargetError.java | 43 + .../java/org/onap/sdc/dcae/checker/TargetInfo.java | 20 + .../org/onap/sdc/dcae/checker/TargetLocator.java | 20 + .../java/org/onap/sdc/dcae/checker/Workflows.java | 120 + .../dcae/checker/annotations/.Validates.java.swp | Bin 0 -> 12288 bytes .../sdc/dcae/checker/annotations/Catalogs.java | 14 + .../onap/sdc/dcae/checker/annotations/Checks.java | 19 + .../sdc/dcae/checker/annotations/Validates.java | 15 + .../org/onap/sdc/dcae/checker/package-info.java | 101 + .../main/resources/tosca/tosca-common-types.yaml | 665 ++++ .../main/resources/tosca/tosca-examples-types.yaml | 117 + .../main/resources/tosca/tosca-network-types.yaml | 103 + .../src/main/resources/tosca/tosca-nfv-types.yaml | 143 + .../resources/tosca/tosca_simple_yaml_1_0.grammar | 1262 +++++++ .../resources/tosca/tosca_simple_yaml_1_1.grammar | 1583 +++++++++ dcaedt_validator/configure-and-run.sh | 7 + dcaedt_validator/kwalify/.gitignore | 1 + dcaedt_validator/kwalify/pom.xml | 80 + .../src/main/java/kwalify/BaseException.java | 32 + .../main/java/kwalify/CommandOptionException.java | 33 + .../kwalify/src/main/java/kwalify/Defaultable.java | 13 + .../src/main/java/kwalify/DefaultableHashMap.java | 31 + .../main/java/kwalify/InvalidPathException.java | 23 + .../main/java/kwalify/InvalidTypeException.java | 21 + .../src/main/java/kwalify/KwalifyException.java | 20 + .../main/java/kwalify/KwalifyRuntimeException.java | 19 + .../kwalify/src/main/java/kwalify/Main.java | 311 ++ .../kwalify/src/main/java/kwalify/Messages.java | 51 + .../src/main/java/kwalify/MetaValidator.java | 445 +++ .../kwalify/src/main/java/kwalify/Parser.java | 19 + .../src/main/java/kwalify/PlainYamlParser.java | 742 ++++ .../kwalify/src/main/java/kwalify/Rule.java | 750 ++++ .../src/main/java/kwalify/SchemaException.java | 17 + .../src/main/java/kwalify/SyntaxException.java | 28 + .../kwalify/src/main/java/kwalify/Types.java | 105 + .../kwalify/src/main/java/kwalify/Util.java | 456 +++ .../src/main/java/kwalify/ValidationException.java | 15 + .../kwalify/src/main/java/kwalify/Validator.java | 382 ++ .../kwalify/src/main/java/kwalify/YamlParser.java | 101 + .../src/main/java/kwalify/YamlSyntaxException.java | 23 + .../kwalify/src/main/java/kwalify/YamlUtil.java | 20 + .../src/main/java/kwalify/messages.properties | 108 + .../src/main/resources/kwalify/messages.properties | 107 + dcaedt_validator/pom.xml | 36 + pom.xml | 247 ++ 264 files changed, 49917 insertions(+) create mode 100644 dcaedt_be/.gitignore create mode 100644 dcaedt_be/pom.xml create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/CompositionConfig.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/CompositionEngine.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/BaseController.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/BlueprintController.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/CompositionController.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/ConfigurationController.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/LifecycleController.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/RuleEditorController.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/ServicesController.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/VfcmtController.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/health/HealthController.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/health/HealthPoller.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/health/ToscaLabHealthState.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/swagger/SwaggerConfig.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/impl/BaseBusinessLogic.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/impl/ReferenceBusinessLogic.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/impl/VfcmtBusinessLogic.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/errormng/ActionStatus.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/errormng/BasicConfiguration.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/errormng/DcaeException.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/errormng/ErrConfMgr.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/errormng/ErrorConfiguration.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/errormng/ErrorConfigurationLoader.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/errormng/ErrorInfo.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/errormng/ResponseFormatManager.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/filter/LoggingFilter.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/enums/ConditionTypeEnum.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/enums/OperatorTypeEnum.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/enums/RuleEditorElementType.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/impl/RulesBusinessLogic.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/ConditionGroupTranslator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/ConditionTranslator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/CopyActionTranslator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/DateFormatterTranslator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/FieldConditionTranslator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/IRuleElementTranslator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/MapActionTranslator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/MappingRulesTranslator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/RegexActionTranslator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/RuleTranslator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/utils/EmptyStringTranslationSerializer.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/utils/RulesPayloadUtils.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/utils/ValidationUtils.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/ActionValidator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/ConcatActionValidator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/ConditionGroupValidator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/ConditionValidator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/DateFormatterValidator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/IRuleElementValidator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/MapActionValidator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/RuleValidator.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/ves/EventListenerDefinition.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/ves/VesDataItemsDefinition.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/ves/VesDataTypeDefinition.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/ves/VesJsonDeserializer.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/ves/VesSimpleTypesEnum.java create mode 100644 dcaedt_be/src/main/java/org/onap/sdc/dcae/ves/VesStructureLoader.java create mode 100644 dcaedt_be/src/main/resources/logback-spring.xml create mode 100644 dcaedt_be/src/main/resources/schema.sql create mode 100644 dcaedt_be/src/main/webapp/META-INF/MANIFEST.MF create mode 100644 dcaedt_be/src/main/webapp/WEB-INF/config/dcae-be/application.properties create mode 100644 dcaedt_be/src/main/webapp/WEB-INF/config/dcae-be/error-configuration.yaml create mode 100644 dcaedt_be/src/main/webapp/WEB-INF/config/dcae-be/ves-schema/CommonEventFormat_v4.1.json create mode 100644 dcaedt_be/src/main/webapp/WEB-INF/config/dcae-be/ves-schema/CommonEventFormat_v5.3.json create mode 100644 dcaedt_be/src/main/webapp/WEB-INF/jetty-web.xml create mode 100644 dcaedt_be/src/main/webapp/WEB-INF/web.xml create mode 100644 dcaedt_be/src/test/java/org/onap/sdc/dcae/VesStructureLoaderMock.java create mode 100644 dcaedt_be/src/test/java/org/onap/sdc/dcae/composition/impl/ReferenceBusinessLogicTest.java create mode 100644 dcaedt_be/src/test/java/org/onap/sdc/dcae/composition/impl/VfcmtBusinessLogicTest.java create mode 100644 dcaedt_be/src/test/java/org/onap/sdc/dcae/rule/editor/impl/RulesBusinessLogicTest.java create mode 100644 dcaedt_be/src/test/java/org/onap/sdc/dcae/services/GetServicesTest.java create mode 100644 dcaedt_be/src/test/java/org/onap/sdc/dcae/ves/EventListenerDefinitionTest.java create mode 100644 dcaedt_be/src/test/java/org/onap/sdc/dcae/ves/VesStructureLoaderTest.java create mode 100644 dcaedt_be/src/test/resources/ves-schema/CommonEventFormat_v4.1.json create mode 100644 dcaedt_be/src/test/resources/ves-schema/CommonEventFormat_v4.1WithoutCommonEventHeader.json create mode 100644 dcaedt_be/src/test/resources/ves-schema/CommonEventFormat_v5.3.json create mode 100644 dcaedt_be/src/test/resources/ves-schema/CommonEventFormat_vInvalidJson.json create mode 100644 dcaedt_be/src/test/resources/ves-schema/CommonEventFormat_vInvalidRequiredEntry.json create mode 100644 dcaedt_be/src/test/resources/ves-schema/CommonEventFormat_vInvalidSchemaStructure.json create mode 100644 dcaedt_be/src/test/resources/ves-schema/CommonEventFormat_vInvalidType.json create mode 100644 dcaedt_be/src/test/resources/ves-schema/CommonEventFormat_vNoEventProperty.json create mode 100644 dcaedt_be/src/test/resources/ves-schema/CommonEventFormat_vUnresolvable.json create mode 100644 dcaedt_be/src/test/resources/ves-schema/unsupportedFilename.json create mode 100644 dcaedt_catalog/.gitignore create mode 100644 dcaedt_catalog/api/pom.xml create mode 100644 dcaedt_catalog/api/src/main/java/org/onap/sdc/dcae/catalog/Catalog.java create mode 100644 dcaedt_catalog/api/src/main/java/org/onap/sdc/dcae/catalog/asdc/ASDCCatalog.java create mode 100644 dcaedt_catalog/api/src/main/resources/log4j.properties create mode 100644 dcaedt_catalog/api/src/test/java/org/onap/sdc/dcae/catalog/ASDCCatalogTest.java create mode 100644 dcaedt_catalog/asdc/pom.xml create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/catalog/asdc/ASDC.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/catalog/asdc/ASDCController.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/catalog/asdc/ASDCEngine.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/catalog/asdc/ASDCException.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/catalog/asdc/ASDCUtils.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/catalog/asdc/ASDCUtilsController.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/catalog/asdc/Blueprinter.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/catalog/asdc/Cloudify.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/client/ISdcClient.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/client/SdcRestClient.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/enums/ArtifactGroupType.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/enums/ArtifactType.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/enums/AssetType.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/enums/LifecycleOperationType.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/enums/SdcConsumerInfo.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/errormng/AbstractSdncException.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/errormng/BaseException.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/errormng/OkResponseInfo.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/errormng/PolicyException.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/errormng/RequestError.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/errormng/ResponseFormat.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/errormng/ServiceException.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/utils/Normalizers.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/utils/SDCResponseErrorHandler.java create mode 100644 dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/utils/SdcRestClientUtils.java create mode 100644 dcaedt_catalog/asdc/src/test/org/onap/sdc/dcae/utils/NormalizersTest.java create mode 100644 dcaedt_catalog/commons/pom.xml create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/Action.java create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/Actions.java create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/Future.java create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/FutureHandler.java create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/Futures.java create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/Http.java create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/JSONHttpMessageConverter.java create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/ListBuilder.java create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/MapBuilder.java create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/Neo.java create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/Proxies.java create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/Proxy.java create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/Proxy.pojo create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/ProxyBuilder.java create mode 100644 dcaedt_catalog/commons/src/main/java/org/onap/sdc/dcae/catalog/commons/Recycler.java create mode 100644 dcaedt_catalog/db/pom.xml create mode 100644 dcaedt_catalog/db/src/main/java/org/onap/sdc/dcae/db/neo4j/Modeled.java create mode 100644 dcaedt_catalog/db/src/main/resources/tosca-schema.yaml create mode 100644 dcaedt_catalog/db/src/main/resources/tosca-storage-schema.yaml create mode 100644 dcaedt_catalog/pom.xml create mode 100644 dcaedt_catalog/service/README.md create mode 100644 dcaedt_catalog/service/pom.xml create mode 100644 dcaedt_catalog/service/src/main/java/org/onap/sdc/dcae/catalog/engine/CatalogController.java create mode 100644 dcaedt_catalog/service/src/main/java/org/onap/sdc/dcae/catalog/engine/CatalogEngine.java create mode 100644 dcaedt_catalog/service/src/main/java/org/onap/sdc/dcae/catalog/engine/CatalogError.java create mode 100644 dcaedt_catalog/service/src/main/java/org/onap/sdc/dcae/catalog/engine/CatalogMessage.java create mode 100644 dcaedt_catalog/service/src/main/java/org/onap/sdc/dcae/catalog/engine/CatalogRequest.java create mode 100644 dcaedt_catalog/service/src/main/java/org/onap/sdc/dcae/catalog/engine/CatalogResponse.java create mode 100644 dcaedt_catalog/service/src/main/java/org/onap/sdc/dcae/catalog/engine/ElementRequest.java create mode 100644 dcaedt_catalog/service/src/main/java/org/onap/sdc/dcae/catalog/engine/ElementsLookup.java create mode 100644 dcaedt_catalog/service/src/main/java/org/onap/sdc/dcae/catalog/engine/ItemsRequest.java create mode 100644 dcaedt_catalog/service/src/main/resources/log4j.properties create mode 100644 dcaedt_tools/pom.xml create mode 100644 dcaedt_tools/src/ReadMe.txt create mode 100644 dcaedt_tools/src/main/java/json/Credential.java create mode 100644 dcaedt_tools/src/main/java/json/Credentials.java create mode 100644 dcaedt_tools/src/main/java/json/Environment.java create mode 100644 dcaedt_tools/src/main/java/json/response/ElementsResponse/Data.java create mode 100644 dcaedt_tools/src/main/java/json/response/ElementsResponse/Element.java create mode 100644 dcaedt_tools/src/main/java/json/response/ElementsResponse/ElementsResponse.java create mode 100644 dcaedt_tools/src/main/java/json/response/Error.java create mode 100644 dcaedt_tools/src/main/java/json/response/ItemsResponse/Artifact.java create mode 100644 dcaedt_tools/src/main/java/json/response/ItemsResponse/Data.java create mode 100644 dcaedt_tools/src/main/java/json/response/ItemsResponse/Element.java create mode 100644 dcaedt_tools/src/main/java/json/response/ItemsResponse/Item.java create mode 100644 dcaedt_tools/src/main/java/json/response/ItemsResponse/ItemsResponse.java create mode 100644 dcaedt_tools/src/main/java/json/response/ItemsResponse/Model.java create mode 100644 dcaedt_tools/src/main/java/json/response/ModelResponse/Assignment.java create mode 100644 dcaedt_tools/src/main/java/json/response/ModelResponse/Capability.java create mode 100644 dcaedt_tools/src/main/java/json/response/ModelResponse/Data.java create mode 100644 dcaedt_tools/src/main/java/json/response/ModelResponse/DcaeCapabilitiesStreamSubscribe.java create mode 100644 dcaedt_tools/src/main/java/json/response/ModelResponse/Format.java create mode 100644 dcaedt_tools/src/main/java/json/response/ModelResponse/Model.java create mode 100644 dcaedt_tools/src/main/java/json/response/ModelResponse/ModelResponse.java create mode 100644 dcaedt_tools/src/main/java/json/response/ModelResponse/Node.java create mode 100644 dcaedt_tools/src/main/java/json/response/ModelResponse/NodeFilter.java create mode 100644 dcaedt_tools/src/main/java/json/response/ModelResponse/Property.java create mode 100644 dcaedt_tools/src/main/java/json/response/ModelResponse/Relationship.java create mode 100644 dcaedt_tools/src/main/java/json/response/ModelResponse/Requirement.java create mode 100644 dcaedt_tools/src/main/java/json/response/ModelResponse/Type.java create mode 100644 dcaedt_tools/src/main/java/json/templateInfo/Composition.java create mode 100644 dcaedt_tools/src/main/java/json/templateInfo/DeployTemplateConfig.java create mode 100644 dcaedt_tools/src/main/java/json/templateInfo/Relation.java create mode 100644 dcaedt_tools/src/main/java/json/templateInfo/TemplateInfo.java create mode 100644 dcaedt_tools/src/main/java/tools/DeployTemplate.java create mode 100644 dcaedt_tools/src/main/java/tools/EntitiesRetriever.java create mode 100644 dcaedt_tools/src/main/java/tools/LoggerDebug.java create mode 100644 dcaedt_tools/src/main/java/tools/LoggerError.java create mode 100644 dcaedt_tools/src/main/java/tools/Main.java create mode 100644 dcaedt_tools/src/main/java/tools/NodeData.java create mode 100644 dcaedt_tools/src/main/java/tools/TemplateContainer.java create mode 100644 dcaedt_tools/src/main/java/utilities/DcaeRestClient.java create mode 100644 dcaedt_tools/src/main/java/utilities/IDcaeRestClient.java create mode 100644 dcaedt_tools/src/main/java/utilities/IReport.java create mode 100644 dcaedt_tools/src/main/java/utilities/Report.java create mode 100644 dcaedt_tools/src/main/resources/conf/config.json create mode 100644 dcaedt_tools/src/main/resources/conf/environment.json create mode 100644 dcaedt_tools/src/test/java/BaseTest.java create mode 100644 dcaedt_tools/src/test/java/DeployTemplateTest.java create mode 100644 dcaedt_tools/src/test/java/EntitiesRetrieverTest.java create mode 100644 dcaedt_tools/src/test/java/TemplateContainerTest.java create mode 100644 dcaedt_validator/.gitignore create mode 100644 dcaedt_validator/checker/.gitignore create mode 100644 dcaedt_validator/checker/pom.xml create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/Catalog.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/CatalogException.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/Checker.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/CheckerException.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/CommonLocator.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/Construct.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/Data.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/Facet.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/JSP.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/Process.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/ProcessBuilder.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/Processor.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/ProcessorException.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/Report.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/Repository.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/Target.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/TargetError.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/TargetInfo.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/TargetLocator.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/Workflows.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/annotations/.Validates.java.swp create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/annotations/Catalogs.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/annotations/Checks.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/annotations/Validates.java create mode 100644 dcaedt_validator/checker/src/main/java/org/onap/sdc/dcae/checker/package-info.java create mode 100644 dcaedt_validator/checker/src/main/resources/tosca/tosca-common-types.yaml create mode 100644 dcaedt_validator/checker/src/main/resources/tosca/tosca-examples-types.yaml create mode 100644 dcaedt_validator/checker/src/main/resources/tosca/tosca-network-types.yaml create mode 100644 dcaedt_validator/checker/src/main/resources/tosca/tosca-nfv-types.yaml create mode 100644 dcaedt_validator/checker/src/main/resources/tosca/tosca_simple_yaml_1_0.grammar create mode 100644 dcaedt_validator/checker/src/main/resources/tosca/tosca_simple_yaml_1_1.grammar create mode 100644 dcaedt_validator/configure-and-run.sh create mode 100644 dcaedt_validator/kwalify/.gitignore create mode 100644 dcaedt_validator/kwalify/pom.xml create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/BaseException.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/CommandOptionException.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/Defaultable.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/DefaultableHashMap.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/InvalidPathException.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/InvalidTypeException.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/KwalifyException.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/KwalifyRuntimeException.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/Main.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/Messages.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/MetaValidator.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/Parser.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/PlainYamlParser.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/Rule.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/SchemaException.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/SyntaxException.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/Types.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/Util.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/ValidationException.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/Validator.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/YamlParser.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/YamlSyntaxException.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/YamlUtil.java create mode 100644 dcaedt_validator/kwalify/src/main/java/kwalify/messages.properties create mode 100644 dcaedt_validator/kwalify/src/main/resources/kwalify/messages.properties create mode 100644 dcaedt_validator/pom.xml create mode 100644 pom.xml diff --git a/dcaedt_be/.gitignore b/dcaedt_be/.gitignore new file mode 100644 index 0000000..e6bf4f8 --- /dev/null +++ b/dcaedt_be/.gitignore @@ -0,0 +1,30 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ +/compositiondb* + +bin/ + +### testng ### +test-output/ + diff --git a/dcaedt_be/pom.xml b/dcaedt_be/pom.xml new file mode 100644 index 0000000..b236858 --- /dev/null +++ b/dcaedt_be/pom.xml @@ -0,0 +1,193 @@ + + + 4.0.0 + org.onap.sdc.dcae.composition + dcae_dt_be + war + DCAE DT BE + + org.onap.sdc.dcae + dcae_dt_be_main + 1806.0.1-SNAPSHOT + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.apache.commons + commons-lang3 + 3.5 + + + commons-net + commons-net + 3.3 + + + com.jcraft + jsch + 0.1.54 + + + com.google.code.gson + gson + 2.8.0 + + + org.json + json + 20160810 + + + org.onap.sdc.dcae + DCAE-DT-Catalog-ASDC + ${project.version} + + + org.onap.sdc.dcae + DCAE-DT-Catalog-API + ${project.version} + + + org.onap.sdc.dcae + DCAE-DT-Catalog-Commons + ${project.version} + + + org.onap.sdc.dcae + DCAE-DT-Catalog-DB + ${project.version} + + + org.onap.sdc.dcae + DCAE-DT-Catalog-Service + ${project.version} + + + org.powermock + powermock-module-junit4 + 1.6.4 + test + + + org.powermock + powermock-api-mockito + 1.6.4 + test + + + org.testng + testng + 6.9.10 + test + + + + com.googlecode.json-simple + json-simple + 1.1.1 + + + io.springfox + springfox-swagger2 + 2.6.1 + compile + + + io.springfox + springfox-swagger-ui + 2.6.1 + compile + + + + + local + + false + + + + org.springframework.boot + spring-boot-starter-jetty + 1.5.2.RELEASE + + + org.eclipse.jetty.websocket + * + + + + + javax.servlet + javax.servlet-api + 4.0.0 + provided + + + + + server + + true + + + + javax.servlet + javax.servlet-api + 4.0.0 + + + + + + dcae + + + org.apache.maven.plugins + maven-surefire-plugin + + + org.springframework.boot + spring-boot-maven-plugin + + src/main/webapp/WEB-INF/web.xml + + + + src/main/webapp/ + + + + + + + org.apache.maven.plugins + maven-war-plugin + + + + ${project.version} + + + + + + + diff --git a/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/CompositionConfig.java b/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/CompositionConfig.java new file mode 100644 index 0000000..ee8f5c6 --- /dev/null +++ b/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/CompositionConfig.java @@ -0,0 +1,87 @@ +package org.onap.sdc.dcae.composition; + +import java.lang.reflect.Type; +import java.util.Map; +import java.util.Set; + +import javax.annotation.PostConstruct; + +import org.onap.sdc.common.onaplog.OnapLoggerDebug; +import org.onap.sdc.common.onaplog.OnapLoggerError; +import org.onap.sdc.common.onaplog.Enums.LogLevel; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.PropertySource; +import org.springframework.context.annotation.PropertySources; +import org.springframework.stereotype.Component; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +@Component +@PropertySources({ + @PropertySource(value="classpath:application-fe.properties", ignoreResourceNotFound=true), + @PropertySource(value="file:${jetty.base}/config/dcae-be/application.properties", ignoreResourceNotFound=true) +}) + +public class CompositionConfig { + + private static OnapLoggerError errLogger = OnapLoggerError.getInstance(); + private static OnapLoggerDebug debugLogger = OnapLoggerDebug.getInstance(); + + @Value("${compositionConfig.flowTypes}") + private String flowTypes; + @JsonIgnore + private Map flowTypesMap; + @Value("${compositionConfig.isRuleEditorActive}") + private boolean isRuleEditorActive; + + // get flowTypes as the parsed keySet + public Set getFlowTypes() { + return flowTypesMap.keySet(); + } + + @JsonProperty("isRuleEditorActive") + public boolean isRuleEditorActive() { + return isRuleEditorActive; + } + + public Map getFlowTypesMap() { + return flowTypesMap; + } + + public static class FlowType { + + private String entryPointPhaseName; + private String lastPhaseName; + + public String getEntryPointPhaseName() { + return entryPointPhaseName; + } + + public void setEntryPointPhaseName(String entryPointPhaseName) { + this.entryPointPhaseName = entryPointPhaseName; + } + + public String getLastPhaseName() { + return lastPhaseName; + } + + public void setLastPhaseName(String lastPhaseName) { + this.lastPhaseName = lastPhaseName; + } + } + + + @PostConstruct + public void init() { + try { + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Reading flow type definitions from configuration"); + Type map = new TypeToken>(){}.getType(); + flowTypesMap = new Gson().fromJson(flowTypes, map); + } catch (Exception e) { + errLogger.log(LogLevel.ERROR, this.getClass().getName(), "Error – Failed to read flow type definitions"); + } + } +} \ No newline at end of file diff --git a/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/CompositionEngine.java b/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/CompositionEngine.java new file mode 100644 index 0000000..186f3f6 --- /dev/null +++ b/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/CompositionEngine.java @@ -0,0 +1,140 @@ +package org.onap.sdc.dcae.composition; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Properties; +import java.util.jar.Attributes; +import java.util.jar.Manifest; + +import javax.servlet.ServletContext; + +import org.onap.sdc.common.onaplog.OnapLoggerDebug; +import org.onap.sdc.common.onaplog.OnapLoggerError; +import org.onap.sdc.common.onaplog.Enums.LogLevel; +import org.onap.sdc.dcae.composition.util.SystemProperties; +import org.onap.sdc.dcae.filter.LoggingFilter; +import org.onap.sdc.dcae.errormng.ErrConfMgr; +import org.onap.sdc.dcae.errormng.ErrorConfiguration; +import org.onap.sdc.dcae.errormng.ErrorConfigurationLoader; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.boot.web.support.SpringBootServletInitializer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +@Configuration +@EnableScheduling +@SpringBootApplication +@ComponentScan("org.onap.sdc.dcae") +@EnableAutoConfiguration +@PropertySource("file:${jetty.base}/config/dcae-be/application.properties") +public class CompositionEngine extends SpringBootServletInitializer implements CommandLineRunner{ + private static final String SPECIFICATION_VERSION = "Specification-Version"; + @Autowired + ServletContext servletContext; + private static final String MANIFEST_FILE_NAME = "/META-INF/MANIFEST.MF"; + private static String dcaeVersion; + private OnapLoggerError errLogger = OnapLoggerError.getInstance(); + private OnapLoggerDebug debugLogger = OnapLoggerDebug.getInstance(); + + public static void main(String[] args) { + SpringApplication.run(CompositionEngine.class, args); + } + + /** + * Creates and returns a new instance of a {@link SystemProperties} class. + * + * @return New instance of {@link SystemProperties}. + */ + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(CompositionEngine.class); + } + + + @Bean + public WebMvcConfigurer corsConfigurer() { + return new WebMvcConfigurerAdapter() { + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") + .allowedHeaders("*") + .allowedMethods("GET", "POST", "OPTIONS", "PUT") + .allowCredentials(false) + .maxAge(3600); + + } + }; + } + + @Override + public void run(String... args) throws Exception { + + ErrorConfigurationLoader errorConfigurationLoader = new ErrorConfigurationLoader(System.getProperty("jetty.base")); + ErrConfMgr instance = ErrConfMgr.INSTANCE; + InputStream inputStream = servletContext.getResourceAsStream(MANIFEST_FILE_NAME); + + //setLogbackXmlLocation(); + + String version = null; + try { + Manifest mf = new Manifest(inputStream); + Attributes atts = mf.getMainAttributes(); + version = atts.getValue(SPECIFICATION_VERSION); + if (version == null || version.isEmpty()) { + errLogger.log(LogLevel.ERROR, this.getClass().getName(), "failed to read DCAE version from MANIFEST."); + } else { + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "DCAE version from MANIFEST is {}", version); + dcaeVersion = version; + } + + } catch (IOException e) { + errLogger.log(LogLevel.ERROR, this.getClass().getName(), "failed to read DCAE version from MANIFEST: {}", e.getMessage()); + } + + } + + private void setLogbackXmlLocation() throws Exception { + String jettyBase = System.getProperty("config.home"); + Properties props = System.getProperties(); + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Current System Properties are: {}", props); + if (jettyBase == null) { + String msg = "Couldn't resolve config.home environmental variable"; + errLogger.log(LogLevel.ERROR, this.getClass().getName(), msg); + throw new Exception(msg + ". Failed to configure logback.xml location... aborting."); + } + String logbackXmlLocation = jettyBase+"/dcae-be/logback.xml"; + props.setProperty("logback.configurationFile", logbackXmlLocation); + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Successfuly set the logback.xml location to {}", logbackXmlLocation); + } + + @Bean + public FilterRegistrationBean contextLifecycleFilter() { + Collection urlPatterns = new ArrayList<>(); + urlPatterns.add("/*"); + + FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new LoggingFilter()); + filterRegistrationBean.setUrlPatterns(urlPatterns); + + return filterRegistrationBean; + } + + public static String getDcaeVersion() { + return dcaeVersion; + } + +} diff --git a/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/BaseController.java b/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/BaseController.java new file mode 100644 index 0000000..8b590ca --- /dev/null +++ b/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/BaseController.java @@ -0,0 +1,80 @@ +package org.onap.sdc.dcae.composition.controller; + +import javax.servlet.http.HttpServletRequest; + +import org.onap.sdc.common.onaplog.OnapLoggerDebug; +import org.onap.sdc.common.onaplog.OnapLoggerError; +import org.onap.sdc.common.onaplog.Enums.LogLevel; +import org.onap.sdc.dcae.composition.impl.BaseBusinessLogic; +import org.onap.sdc.dcae.composition.restmodels.sdc.Asset; +import org.onap.sdc.dcae.composition.restmodels.sdc.ResourceDetailed; +import org.onap.sdc.dcae.composition.util.DcaeBeConstants; +import org.onap.sdc.dcae.composition.util.SystemProperties; +import org.onap.sdc.dcae.enums.AssetType; +import org.onap.sdc.dcae.enums.LifecycleOperationType; +import org.onap.sdc.dcae.errormng.ActionStatus; +import org.onap.sdc.dcae.errormng.DcaeException; +import org.onap.sdc.dcae.errormng.ErrConfMgr; +import org.onap.sdc.dcae.errormng.ErrConfMgr.ApiType; +import org.onap.sdc.dcae.errormng.ResponseFormat; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ModelAttribute; + +import com.google.gson.Gson; + +public abstract class BaseController { + + protected Gson gson = new Gson(); + + @Autowired + protected SystemProperties systemProperties; + + @Autowired + protected BaseBusinessLogic baseBusinessLogic; + + protected OnapLoggerError errLogger = OnapLoggerError.getInstance(); + protected OnapLoggerDebug debugLogger = OnapLoggerDebug.getInstance(); + + @ModelAttribute("requestId") + public String getRequestId(HttpServletRequest request) { + return request.getAttribute("requestId").toString(); + } + + Asset checkout(String userId, String uuid, AssetType assetType, String requestId) throws Exception { + return baseBusinessLogic.getSdcRestClient().changeAssetLifecycleState(userId, uuid, LifecycleOperationType.CHECKOUT.name(), null, assetType, requestId); + } + + Asset checkin(String userId, String uuid, AssetType assetType, String requestId) throws Exception { + return baseBusinessLogic.getSdcRestClient().changeAssetLifecycleState(userId, uuid, LifecycleOperationType.CHECKIN.name(), "checking in " + assetType.name() + uuid, assetType, requestId); + } + + + boolean isNeedToCheckOut(String lifecycleState) { + return DcaeBeConstants.LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT != DcaeBeConstants.LifecycleStateEnum.findState(lifecycleState); + } + + void checkUserIfResourceCheckedOut(String userId, Asset asset) throws DcaeException { + if (DcaeBeConstants.LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT == DcaeBeConstants.LifecycleStateEnum.findState(asset.getLifecycleState())) { + String lastUpdaterUserId = asset.getLastUpdaterUserId(); + if (lastUpdaterUserId != null && !lastUpdaterUserId.equals(userId)) { + errLogger.log(LogLevel.ERROR, this.getClass().getName(), "User conflicts. Operation not allowed for user {} on resource checked out by {}", userId, lastUpdaterUserId); + ResponseFormat responseFormat = ErrConfMgr.INSTANCE.getResponseFormat(ActionStatus.USER_CONFLICT, null, userId, asset.getName(), lastUpdaterUserId); + throw new DcaeException(HttpStatus.FORBIDDEN, responseFormat.getRequestError()); + } + } + } + + void checkVfcmtType(ResourceDetailed vfcmt) { + if (!"VFCMT".equals(vfcmt.getResourceType()) || !"Template".equals(vfcmt.getCategory())) { + ResponseFormat responseFormat = ErrConfMgr.INSTANCE.getResponseFormat(ActionStatus.RESOURCE_NOT_VFCMT_ERROR, null, vfcmt.getUuid()); + throw new DcaeException(HttpStatus.BAD_REQUEST, responseFormat.getRequestError()); + } + } + + ResponseEntity handleException(Exception e, ApiType apiType, String... variables){ + errLogger.log(LogLevel.ERROR, this.getClass().getName(), e.getMessage()); + return ErrConfMgr.INSTANCE.handleException(e, apiType, variables); + } +} diff --git a/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/BlueprintController.java b/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/BlueprintController.java new file mode 100644 index 0000000..a12c6b8 --- /dev/null +++ b/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/BlueprintController.java @@ -0,0 +1,239 @@ +package org.onap.sdc.dcae.composition.controller; + +import org.apache.commons.lang.StringUtils; +import org.onap.sdc.common.onaplog.Enums.LogLevel; +import org.onap.sdc.dcae.composition.restmodels.MessageResponse; +import org.onap.sdc.dcae.catalog.asdc.ASDC; +import org.onap.sdc.dcae.catalog.asdc.ASDCUtils; +import org.onap.sdc.dcae.catalog.asdc.Blueprinter; +import org.onap.sdc.dcae.composition.restmodels.sdc.*; +import org.onap.sdc.dcae.utils.Normalizers; +import org.onap.sdc.dcae.composition.util.DcaeBeConstants; +import org.onap.sdc.dcae.enums.ArtifactType; +import org.onap.sdc.dcae.enums.AssetType; +import org.onap.sdc.dcae.enums.LifecycleOperationType; +import org.onap.sdc.dcae.errormng.ActionStatus; +import org.onap.sdc.dcae.errormng.ErrConfMgr; +import org.onap.sdc.dcae.errormng.ErrConfMgr.ApiType; +import org.onap.sdc.dcae.utils.SdcRestClientUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.util.Base64Utils; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.PostConstruct; +import java.io.StringReader; +import java.net.URI; + +@RestController +@EnableAutoConfiguration +@CrossOrigin +public class BlueprintController extends BaseController{ + + @Autowired + private Blueprinter blueprinter; + + @Autowired + private ASDC asdc; + + private static final String CREATE_DESC = "creating new artifact blueprint on the service vfi"; + private static final String UPDATE_DESC = "updating artifact blueprint on the service vfi"; + + + + @PostConstruct + public void init(){ + URI sdcUri = URI.create(systemProperties.getProperties().getProperty(DcaeBeConstants.Config.URI)); + asdc.setUri(sdcUri); + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "SDC uri: {}", sdcUri); + } + + /*** + * VFCMT - Resource, blueprint - as an artifact as an service. + * @param userId + * @param vfcmtUuid + * @param serviceUuid + * @param serviceInstanceName + * @param monitoringFlowType + * @return ResponseEntity + */ + @RequestMapping(value = "/createBluePrint/{VFCMTUuid}/{serviceUuid}/{instanceName}/{monitoringFlowType}", method = RequestMethod.POST) + public ResponseEntity createBluePrint(@RequestHeader("USER_ID") String userId, + @PathVariable("VFCMTUuid") String vfcmtUuid, + @PathVariable("serviceUuid") String serviceUuid, + @PathVariable("instanceName") String serviceInstanceName, + @PathVariable("monitoringFlowType") String monitoringFlowType, + @ModelAttribute("requestId") String requestId) { + try { + + ResourceDetailed vfcmt = baseBusinessLogic.getSdcRestClient().getResource(vfcmtUuid, requestId); + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), vfcmt.toString()); + checkVfcmtType(vfcmt); + Artifact cdumpArtifactData = findCdumpArtifactData(vfcmt); + if (null != cdumpArtifactData) { + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Found the cdump (composition.yml) on top of VFCMT {}", vfcmtUuid); + String cdump = baseBusinessLogic.getSdcRestClient().getResourceArtifact(vfcmtUuid, cdumpArtifactData.getArtifactUUID(), requestId); + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "---------------------------------------------------------------CDUMP: -----------------------------------------------------------------------------"); + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), cdump); + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "---------------------------------------------------------------------------------------------------------------------------------------------------"); + ASDCUtils utils = new ASDCUtils(asdc, blueprinter); + + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Going to use python procedure to create a blueprint...."); + String resultBlueprintCreation; + try{ + resultBlueprintCreation = utils.buildBlueprintViaToscaLab(new StringReader(cdump)).waitForResult().waitForResult(); + }catch (Exception e){ + return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.GENERATE_BLUEPRINT_ERROR, e.getMessage(), vfcmt.getName()); + } + if (StringUtils.isEmpty(resultBlueprintCreation)) { + return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.GENERATE_BLUEPRINT_ERROR, "", vfcmt.getName()); + } + + // 1806 US374595 flowType in cdump + String flowTypeFromCdump = StringUtils.substringBetween(cdump,"\"flowType\":\"","\""); + if(StringUtils.isNotBlank(flowTypeFromCdump)) { + monitoringFlowType = flowTypeFromCdump; + } + // saving to serviceVfInstance + Artifact savedBluePrint = saveBluePrint(userId, serviceUuid, serviceInstanceName, resultBlueprintCreation, monitoringFlowType, vfcmt.getName(), requestId); + if(savedBluePrint!=null){ + MessageResponse response = new MessageResponse(); + response.setSuccessResponse("Blueprint build complete \n. Blueprint="+savedBluePrint.getArtifactName()); + //1806 US374593 - certify VFCMT after BP generation + certifyVfcmt(vfcmt, requestId); + return new ResponseEntity<>(response, HttpStatus.OK); + } + else{ + return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.SUBMIT_BLUEPRINT_ERROR); + } + + }else{ + return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.MISSING_TOSCA_FILE, "", vfcmt.getName()); + } + } catch (Exception e) { + return handleException(e, ApiType.SUBMIT_BLUEPRINT); + } + } + + + /********************* private function ********************/ + + /** + * @param userId + * @param serviceUuid + * @param resourceInstanceName + * @param bluePrint + * @param monitoringFlowType + * @param vfcmtName + * @param requestId + * @return + * @throws Exception + */ + private Artifact saveBluePrint(String userId, String serviceUuid, String resourceInstanceName, String bluePrint, String monitoringFlowType, String vfcmtName, String requestId) throws Exception { + + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "BLUEPRINT:\n{}", bluePrint); + try { + ServiceDetailed service = baseBusinessLogic.getSdcRestClient().getService(serviceUuid, requestId); + //Validations + checkUserIfResourceCheckedOut(userId, service); + ResourceInstance vfi = findVfiOnService(service, resourceInstanceName); + if(null == vfi){ + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "VF instance {} not found on service {}", resourceInstanceName, serviceUuid); + return null; + } + + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), service.toString()); + + String normalizedArtifactLabel = Normalizers.normalizeArtifactLabel("blueprint-" + monitoringFlowType); + Artifact blueprintArtifact = CollectionUtils.isEmpty(vfi.getArtifacts()) ? null : vfi.getArtifacts().stream() + .filter(p -> normalizedArtifactLabel.equals(Normalizers.normalizeArtifactLabel(p.getArtifactLabel()))) + .findAny() + .orElse(null); + + boolean isNeed2Checkout = isNeedToCheckOut(service.getLifecycleState()); + if (isNeed2Checkout) { + Asset result = checkout(userId, serviceUuid, AssetType.SERVICE, requestId); + if (result != null) { + serviceUuid = result.getUuid(); + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "New service after checkout is: {}", serviceUuid); + } + } + //update mode + if (null != blueprintArtifact) { + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Found that service {} already consist of {} ----> updateMode", serviceUuid, normalizedArtifactLabel); + blueprintArtifact.setDescription(UPDATE_DESC); + blueprintArtifact.setPayloadData(Base64Utils.encodeToString(bluePrint.getBytes())); + blueprintArtifact = baseBusinessLogic.getSdcRestClient().updateVfInstanceArtifact(userId, serviceUuid, Normalizers.normalizeComponentInstanceName(resourceInstanceName), blueprintArtifact, requestId); + //create mode + } else { + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Service {} does not consist {} ----> createMode", serviceUuid, normalizedArtifactLabel); + blueprintArtifact = SdcRestClientUtils.generateDeploymentArtifact(CREATE_DESC, generateBlueprintFileName(monitoringFlowType, vfcmtName), ArtifactType.DCAE_INVENTORY_BLUEPRINT.name(), normalizedArtifactLabel, bluePrint.getBytes()); + blueprintArtifact = baseBusinessLogic.getSdcRestClient().createVfInstanceArtifact(userId, serviceUuid, Normalizers.normalizeComponentInstanceName(resourceInstanceName), blueprintArtifact, requestId); + } + + //No need to check the service in in 1806 +// Asset blueprintAsJson = checkin(user_id, serviceUuid, AssetType.SERVICE); +// debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "service result after check-in: {}", blueprintAsJson.toString()); + + return blueprintArtifact; + + } catch (Exception e) { + errLogger.log(LogLevel.ERROR, this.getClass().getName(), "Error occurred while trying to save blueprint {}", e.toString()); + throw e; + } + } + + /** + * + * @param monitoringFlowType + * @param vfcmtName + * @return + */ + private String generateBlueprintFileName(String monitoringFlowType, String vfcmtName) { + StringBuffer sb = new StringBuffer(); + sb.append(monitoringFlowType); + sb.append("."); + sb.append(Normalizers.normalizeComponentName(vfcmtName)); + sb.append("."); + sb.append(DcaeBeConstants.Composition.fileNames.EVENT_PROC_BP_YAML); + return sb.toString(); + } + + private ResourceInstance findVfiOnService(ServiceDetailed service, String vfiName) { + return null == service ? null : CollectionUtils.isEmpty(service.getResources()) ? null : service.getResources().stream().filter(p -> vfiName.equals(p.getResourceInstanceName())).findAny().orElse(null); + } + + private Artifact findCdumpArtifactData(ResourceDetailed vfcmt) { + return null == vfcmt ? null : CollectionUtils.isEmpty(vfcmt.getArtifacts()) ? null : vfcmt.getArtifacts().stream() + .filter(p -> DcaeBeConstants.Composition.fileNames.COMPOSITION_YML.equals(p.getArtifactName())).findAny().orElse(null); + } + + private void certifyVfcmt(ResourceDetailed vfcmt, String requestId){ + String state = vfcmt.getLifecycleState(); + if(null == state) { + debugLogger.log(LogLevel.ERROR, this.getClass().getName(), "Couldn't read Vfcmt lifecycle state"); + return; + } + DcaeBeConstants.LifecycleStateEnum lifeCycleState = DcaeBeConstants.LifecycleStateEnum.findState(state); + if(null == lifeCycleState) { + debugLogger.log(LogLevel.ERROR, this.getClass().getName(), "Undefined lifecycle state: {}", state); + return; + } + try{ + switch (lifeCycleState){ + case NOT_CERTIFIED_CHECKOUT: + baseBusinessLogic.getSdcRestClient().changeResourceLifecycleState(vfcmt.getLastUpdaterUserId(), vfcmt.getUuid(), LifecycleOperationType.CHECKIN.name(), "check in VFCMT after blueprint successful submission", requestId); + case NOT_CERTIFIED_CHECKIN: + baseBusinessLogic.getSdcRestClient().changeResourceLifecycleState(vfcmt.getLastUpdaterUserId(), vfcmt.getUuid(), LifecycleOperationType.CERTIFY.name(), "certify VFCMT after blueprint successful submission", requestId); + } + } + catch (Exception e){ + //informative only. no message to user (TBA) + debugLogger.log(LogLevel.ERROR, this.getClass().getName(), "Error occurred during vfcmt lifecycle operation: {}", e.toString()); + } + } + +} diff --git a/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/CompositionController.java b/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/CompositionController.java new file mode 100644 index 0000000..5cba14f --- /dev/null +++ b/dcaedt_be/src/main/java/org/onap/sdc/dcae/composition/controller/CompositionController.java @@ -0,0 +1,338 @@ +package org.onap.sdc.dcae.composition.controller; + +import org.json.JSONArray; +import org.json.JSONException; +import org.onap.sdc.common.onaplog.Enums.LogLevel; +import org.onap.sdc.dcae.composition.restmodels.MessageResponse; +import org.onap.sdc.dcae.composition.restmodels.sdc.Artifact; +import org.onap.sdc.dcae.composition.restmodels.sdc.Asset; +import org.onap.sdc.dcae.composition.restmodels.sdc.ResourceDetailed; +import org.onap.sdc.dcae.catalog.Catalog; +import org.onap.sdc.dcae.catalog.Catalog.*; +import org.onap.sdc.dcae.catalog.engine.*; +import org.onap.sdc.dcae.composition.util.DcaeBeConstants; +import org.onap.sdc.dcae.enums.ArtifactType; +import org.onap.sdc.dcae.enums.LifecycleOperationType; +import org.onap.sdc.dcae.errormng.ActionStatus; +import org.onap.sdc.dcae.errormng.ErrConfMgr; +import org.onap.sdc.dcae.errormng.ErrConfMgr.ApiType; +import org.onap.sdc.dcae.utils.SdcRestClientUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.util.Base64Utils; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.async.DeferredResult; + +import javax.annotation.PostConstruct; +import java.net.URI; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@RestController +@EnableAutoConfiguration +@CrossOrigin +public class CompositionController extends BaseController{ + + @Autowired + private CatalogController catalogController; + + @PostConstruct + public void init() { + catalogController.setDefaultCatalog(URI.create(systemProperties.getProperties().getProperty(DcaeBeConstants.Config.ASDC_CATALOG_URL))); + } + + @RequestMapping(value = { "/utils/clone/{assetType}/{sourceId}/{targetId}" }, method = {RequestMethod.GET }, produces = { "application/json" }) + public ResponseEntity clone(@RequestHeader("USER_ID") String userId, @PathVariable("assetType") String theAssetType, @PathVariable("sourceId") String theSourceId, @PathVariable("targetId") String theTargetId, + @ModelAttribute("requestId") String requestId) { + MessageResponse response = new MessageResponse(); + + try { + // fetch the source and assert it is a vfcmt containing clone worthy artifacts (composition + rules) + ResourceDetailed sourceVfcmt = baseBusinessLogic.getSdcRestClient().getResource(theSourceId, requestId); + checkVfcmtType(sourceVfcmt); + List artifactsToClone = CollectionUtils.isEmpty(sourceVfcmt.getArtifacts()) ? null : sourceVfcmt.getArtifacts().stream() + .filter(p -> DcaeBeConstants.Composition.fileNames.COMPOSITION_YML.equals(p.getArtifactName()) || p.getArtifactName().endsWith(DcaeBeConstants.Composition.fileNames.MAPPING_RULE_POSTFIX)) + .collect(Collectors.toList()); + if(CollectionUtils.isEmpty(artifactsToClone)) { + response.setSuccessResponse("Nothing to clone"); + return new ResponseEntity<>(response ,HttpStatus.NO_CONTENT); + } + + // fetch the target + ResourceDetailed vfcmt = baseBusinessLogic.getSdcRestClient().getResource(theTargetId, requestId); + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), vfcmt.toString()); + checkVfcmtType(vfcmt); + checkUserIfResourceCheckedOut(userId, vfcmt); + boolean isTargetNeed2Checkout = isNeedToCheckOut(vfcmt.getLifecycleState()); + if (isTargetNeed2Checkout) { + ResourceDetailed targetVfcmt = baseBusinessLogic.getSdcRestClient().changeResourceLifecycleState(userId, theTargetId, LifecycleOperationType.CHECKOUT.name(), "checking out VFCMT before clone", requestId); + if(null == targetVfcmt){ + return ErrConfMgr.INSTANCE.buildErrorResponse(ActionStatus.GENERAL_ERROR); + } + theTargetId = targetVfcmt.getUuid(); + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "New targetVfcmt (for artifact clone) after checkout is: {}", theTargetId); + } + + Map currentArtifacts = CollectionUtils.isEmpty(vfcmt.getArtifacts()) ? new HashMap<>() : vfcmt.getArtifacts().stream() + .collect(Collectors.toMap(Artifact::getArtifactName, Function.identity())); + + //TODO target VFCMT rule artifacts should be removed + for(Artifact artifactToClone : artifactsToClone) { + String payload = baseBusinessLogic.getSdcRestClient().getResourceArtifact(theSourceId, artifactToClone.getArtifactUUID(), requestId); + baseBusinessLogic.cloneArtifactToTarget(userId, theTargetId, payload, artifactToClone, currentArtifacts.get(artifactToClone.getArtifactName()), requestId); + } + + baseBusinessLogic.getSdcRestClient().changeResourceLifecycleState(userId, theTargetId, LifecycleOperationType.CHECKIN.name(), "check in VFCMT after clone", requestId); + debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Cloning {} from {} has finished successfully", theSourceId, theTargetId); + response.setSuccessResponse("Clone VFCMT complete"); + return new ResponseEntity<>(response, HttpStatus.OK); + } catch (Exception e) { + return handleException(e, ApiType.CLONE_VFCMT); + } + } + + @RequestMapping(value = "/elements", method = { RequestMethod.POST, RequestMethod.GET }, produces = "application/json") + public DeferredResult items(@RequestBody(required = false) ItemsRequest theRequest) { + + final ItemsRequest request = (theRequest == null) ? ItemsRequest.EMPTY_REQUEST : theRequest; + + Catalog catalog = catalogController.getCatalog(request.getCatalog()); + DeferredResult result = new DeferredResult(request.getTimeout()); + + catalog.rootsByLabel(request.getStartingLabel()) + .setHandler(catalogController.new CatalogHandler(request, result) { + public CatalogResponse handleData(Folders theFolders) { + JSONArray ja = new JSONArray(); + if (theFolders != null) { + for (Folder folder : theFolders) { + ja.put(catalogController.patchData(catalog, folder.data())); + } + } + CatalogResponse response = new CatalogResponse(this.request); + try { + response.data().put("elements", ja); + } catch (JSONException e) { + errLogger.log(LogLevel.ERROR, this.getClass().getName(), "JSONException putting json elements to response {}", e); + } + return response; + } + }); + return result; + } + + @RequestMapping(value = "/{theItemId}/elements", method = { RequestMethod.POST, RequestMethod.GET }, produces = "application/json") + public DeferredResult items(@RequestBody(required = false) ItemsRequest theRequest, @PathVariable String theItemId) { + + final ItemsRequest request = (theRequest == null) ? ItemsRequest.EMPTY_REQUEST : theRequest; + + Catalog catalog = catalogController.getCatalog(request.getCatalog()); + DeferredResult result = new DeferredResult(request.getTimeout()); + + catalog + // .fetchFolderByItemId(theItemId) + .folder(theItemId).withParts().withPartAnnotations().withItems().withItemAnnotations().withItemModels() + .execute().setHandler(catalogController.new CatalogHandler(request, result) { + public CatalogResponse handleData(Folder theFolder) { + CatalogResponse response = new CatalogResponse(this.request); + if (theFolder == null) { + return response; + } + + try { + Elements folders = theFolder.elements("parts", Folders.class); + if (folders != null) { + for (Object folder : folders) { + catalogController.patchData(catalog, ((Element) folder).data()); + // lots of ephemere proxies created here .. + Elements annotations = ((Element) folder).elements("annotations", + Annotations.class); + if (annotations != null) { + for (Object a : annotations) { + catalogController.patchData(catalog, ((Annotation) a).data()); + } + } + } + } + Elements items = theFolder.elements("items", Items.class); + if (items != null) { + for (Object i : items) { + catalogController.patchData(catalog, ((Element) i).data()); + // lots of ephemere proxies created here .. + Elements annotations = ((Element) i).elements("annotations", Annotations.class); + if (annotations != null) { + for (Object a : annotations) { + catalogController.patchData(catalog, ((Annotation) a).data()); + } + } + } + } + } catch (Exception x) { + errLogger.log(LogLevel.ERROR, this.getClass().getName(), "Exception processing catalog {}", x); + return new CatalogError(this.request, "", x); + } + + try { + response.data().put("element", theFolder.data()); + } catch (JSONException e) { + errLogger.log(LogLevel.ERROR, this.getClass().getName(), "JSONException putting element to response {}", e); + } + return response; + } + }); + + return result; + } + + @RequestMapping(value = "/{theItemId}/model", method = { RequestMethod.POST,RequestMethod.GET }, produces = "application/json") + public DeferredResult model(@RequestBody(required = false) ElementRequest theRequest, + @PathVariable String theItemId) { + final ElementRequest request = (theRequest == null) ? ElementRequest.EMPTY_REQUEST : theRequest; + + Catalog catalog = catalogController.getCatalog(request.getCatalog()); + DeferredResult result = new DeferredResult<>(request.getTimeout()); + + catalog + .item(theItemId).withModels().execute() + .setHandler(catalogController.new CatalogHandler(request, result) { + public CatalogResponse handleData(Item theItem) { + if (theItem == null) { + return new CatalogError(this.request, "No such item"); + } + Templates models = null; + try { + models = (Templates) theItem.elements("models", Templates.class); + if (models == null || models.isEmpty()) { + return new CatalogError(this.request, "Item has no models"); + } + if (models.size() > 1) { + return new CatalogError(this.request, "Item has more than one model !?"); + } + catalog.template(models.get(0).id()).withInputs().withOutputs().withNodes() + .withNodeProperties().withNodePropertiesAssignments().withNodeRequirements() + .withNodeCapabilities().withNodeCapabilityProperties() + .withNodeCapabilityPropertyAssignments().withPolicies().withPolicyProperties() + .withPolicyPropertiesAssignments().execute().setHandler( + catalogController.new CatalogHandler