From dfb6f09c9577a7cc16272ed37a780fd7ea2a3e74 Mon Sep 17 00:00:00 2001 From: Idan Amit Date: Sun, 17 Sep 2017 17:10:53 +0300 Subject: [PATCH] Merged origin/release/1710 branch Change-Id: If6900101b206d48112a6b2e25b33957b37083479 Issue-Id: SDC-329 Signed-off-by: Idan Amit --- .../be/components/impl/CsarValidationUtils.java | 53 +++++++++++++++++---- .../java/org/openecomp/sdc/be/tosca/CsarUtils.java | 17 +++++-- .../import/tosca/categories/categoryTypes.yml | 13 ++++- .../import/tosca/categories/categoryTypes.zip | Bin 1061 -> 1079 bytes 4 files changed, 67 insertions(+), 16 deletions(-) diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/CsarValidationUtils.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/CsarValidationUtils.java index 8198ef3d85..8b0c6fa8bf 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/CsarValidationUtils.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/CsarValidationUtils.java @@ -20,11 +20,16 @@ package org.openecomp.sdc.be.components.impl; +import static org.openecomp.sdc.be.tosca.CsarUtils.VF_NODE_TYPE_ARTIFACTS_PATH_PATTERN; + import java.io.ByteArrayInputStream; import java.io.IOException; +import java.io.StringReader; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -55,7 +60,13 @@ public class CsarValidationUtils { private static final String NEW_LINE_DELM = "\n"; - public final static String TOSCA_METADATA_FILE = "TOSCA-Metadata/TOSCA.meta"; + //public final static String TOSCA_METADATA_FILE = "TOSCA-Metadata/TOSCA.meta"; + public final static String TOSCA_METADATA = "TOSCA-Metadata"; + public final static String TOSCA_FILE = "TOSCA.meta"; + public final static String DEL_PATTERN = "([/\\\\]+)"; + public static final String TOSCA_METADATA_PATH_PATTERN = TOSCA_METADATA + + // Artifact Group (i.e Deployment/Informational) + DEL_PATTERN + TOSCA_FILE; public static final String TOSCA_META_ENTRY_DEFINITIONS = "Entry-Definitions"; @@ -134,10 +145,19 @@ public class CsarValidationUtils { if (validateStatus.isRight()) { return Either.right(validateStatus.right().value()); } - byte[] toscaMetaBytes = csar.get(TOSCA_METADATA_FILE); + Pattern pattern = Pattern.compile(TOSCA_METADATA_PATH_PATTERN); + Optional keyOp = csar.keySet().stream().filter(k -> pattern.matcher(k).matches()).findAny(); + if(!keyOp.isPresent()){ + log.debug("TOSCA-Metadata/TOSCA.meta file is not in expected key-value form in csar, csar ID {}", csarUUID); + BeEcompErrorManager.getInstance().logInternalDataError("TOSCA-Metadata/TOSCA.meta file not in expected key-value form in CSAR with id " + csarUUID, "CSAR internals are invalid", ErrorSeverity.ERROR); + return Either.right(componentsUtils.getResponseFormat(ActionStatus.CSAR_INVALID_FORMAT, csarUUID)); + } + byte[] toscaMetaBytes = csar.get(keyOp.get()); Properties props = new Properties(); try { - props.load(new ByteArrayInputStream(toscaMetaBytes)); + //props.load(new ByteArrayInputStream(toscaMetaBytes)); + String propStr = new String(toscaMetaBytes); + props.load(new StringReader(propStr.replace("\\","\\\\"))); } catch (IOException e) { log.debug("TOSCA-Metadata/TOSCA.meta file is not in expected key-value form in csar, csar ID {}", csarUUID, e); BeEcompErrorManager.getInstance().logInternalDataError("TOSCA-Metadata/TOSCA.meta file not in expected key-value form in CSAR with id " + csarUUID, "CSAR internals are invalid", ErrorSeverity.ERROR); @@ -145,13 +165,16 @@ public class CsarValidationUtils { } String yamlFileName = props.getProperty(TOSCA_META_ENTRY_DEFINITIONS); - - if (!csar.containsKey(yamlFileName)) { + String[] ops = yamlFileName.split(DEL_PATTERN); + List list = Arrays.asList(ops); + String result = list.stream().map(x -> x).collect(Collectors.joining(DEL_PATTERN)); + keyOp = csar.keySet().stream().filter(k -> Pattern.compile(result).matcher(k).matches()).findAny(); + if(!keyOp.isPresent()){ log.debug("Entry-Definitions entry not found in TOSCA-Metadata/TOSCA.meta file, csar ID {}", csarUUID); BeEcompErrorManager.getInstance().logInternalDataError("Entry-Definitions entry not found in TOSCA-Metadata/TOSCA.meta file in CSAR with id " + csarUUID, "CSAR internals are invalid", ErrorSeverity.ERROR); return Either.right(componentsUtils.getResponseFormat(ActionStatus.YAML_NOT_FOUND_IN_CSAR, csarUUID, yamlFileName)); } - + log.trace("Found Entry-Definitions property in TOSCA-Metadata/TOSCA.meta, Entry-Definitions: {}, CSAR id: {}", yamlFileName, csarUUID); byte[] yamlFileBytes = csar.get(yamlFileName); if (yamlFileBytes == null) { @@ -205,8 +228,16 @@ public class CsarValidationUtils { } private static Either validateTOSCAMetadataFile(Map csar, String csarUUID, ComponentsUtils componentsUtils) { + + Pattern pattern = Pattern.compile(TOSCA_METADATA_PATH_PATTERN); + Optional keyOp = csar.keySet().stream().filter(k -> pattern.matcher(k).matches()).findAny(); + if(!keyOp.isPresent()){ + log.debug("TOSCA-Metadata/TOSCA.meta file is not in expected key-value form in csar, csar ID {}", csarUUID); + BeEcompErrorManager.getInstance().logInternalDataError("TOSCA-Metadata/TOSCA.meta file not in expected key-value form in CSAR with id " + csarUUID, "CSAR internals are invalid", ErrorSeverity.ERROR); + return Either.right(componentsUtils.getResponseFormat(ActionStatus.CSAR_INVALID_FORMAT, csarUUID)); + } - byte[] toscaMetaBytes = csar.get(TOSCA_METADATA_FILE); + byte[] toscaMetaBytes = csar.get(keyOp.get()); String toscaMetadata = new String(toscaMetaBytes); String[] splited = toscaMetadata.split(NEW_LINE_DELM); if (splited == null || splited.length < TOSCA_METADATA_FIELDS.length) { @@ -283,12 +314,16 @@ public class CsarValidationUtils { ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.CSAR_INVALID, csarUUID); return Either.right(responseFormat); } - if (!csar.containsKey(TOSCA_METADATA_FILE)) { + + Pattern pattern = Pattern.compile(TOSCA_METADATA_PATH_PATTERN); + Optional keyOp = csar.keySet().stream().filter(k -> pattern.matcher(k).matches()).findAny(); + if(!keyOp.isPresent()){ + log.debug("TOSCA-Metadata/TOSCA.meta file not found in csar, csar ID {}", csarUUID); BeEcompErrorManager.getInstance().logInternalDataError("TOSCA-Metadata/TOSCA.meta file not found in CSAR with id " + csarUUID, "CSAR structure is invalid", ErrorSeverity.ERROR); return Either.right(componentsUtils.getResponseFormat(ActionStatus.CSAR_INVALID, csarUUID)); } - byte[] toscaMetaBytes = csar.get(TOSCA_METADATA_FILE); + byte[] toscaMetaBytes = csar.get(keyOp.get()); // && exchanged for || if (toscaMetaBytes == null || toscaMetaBytes.length == 0) { log.debug("TOSCA-Metadata/TOSCA.meta file not found in csar, csar ID {}", csarUUID); diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java index 66627086f6..a0cc347e09 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java @@ -137,19 +137,26 @@ public class CsarUtils { private static final String TOSCA_META_PATH_FILE_NAME = "TOSCA-Metadata/TOSCA.meta"; private static final String TOSCA_META_VERSION = "1.0"; private static final String CSAR_VERSION = "1.1"; + public static final String ARTIFACTS = "Artifacts"; + public static final String DEFINITION = "Definitions"; + public static final String DEL_PATTERN = "([/\\\\]+)"; private static String versionFirstThreeOctates; - public static final String VFC_NODE_TYPE_ARTIFACTS_PATH_PATTERN = ARTIFACTS_PATH + ImportUtils.Constants.USER_DEFINED_RESOURCE_NAMESPACE_PREFIX + "([\\d\\w\\_\\-\\.\\s]+)(/)([\\d\\w\\_\\-\\.\\s]+)(/)([\\d\\w\\_\\-\\.\\s\\/]+)"; + public static final String VFC_NODE_TYPE_ARTIFACTS_PATH_PATTERN = ARTIFACTS + DEL_PATTERN + + ImportUtils.Constants.USER_DEFINED_RESOURCE_NAMESPACE_PREFIX + + "([\\d\\w\\_\\-\\.\\s]+)" + DEL_PATTERN + + "([\\d\\w\\_\\-\\.\\s]+)" + DEL_PATTERN + + "([\\d\\w\\_\\-\\.\\s]+)" + DEL_PATTERN; - public static final String VF_NODE_TYPE_ARTIFACTS_PATH_PATTERN = ARTIFACTS_PATH + + public static final String VF_NODE_TYPE_ARTIFACTS_PATH_PATTERN = ARTIFACTS + DEL_PATTERN+ // Artifact Group (i.e Deployment/Informational) - "([\\w\\_\\-\\.\\s]+)(/)" + + "([\\w\\_\\-\\.\\s]+)" + DEL_PATTERN + // Artifact Type - "([\\w\\_\\-\\.\\s]+)(/)" + + "([\\w\\_\\-\\.\\s]+)" + DEL_PATTERN + // Artifact Any File Name ".+"; public static final String VALID_ENGLISH_ARTIFACT_NAME = "([\\w\\_\\-\\.\\s]+)"; - public static final String SERVICE_TEMPLATE_PATH_PATTERN = Constants.SERVICE_TEMPLATES_CONTAINING_FOLDER + + public static final String SERVICE_TEMPLATE_PATH_PATTERN = DEFINITION + DEL_PATTERN+ // Service Template File Name "([\\w\\_\\-\\.\\s]+)"; diff --git a/catalog-be/src/main/resources/import/tosca/categories/categoryTypes.yml b/catalog-be/src/main/resources/import/tosca/categories/categoryTypes.yml index 8914207b0f..4c7ca11f13 100644 --- a/catalog-be/src/main/resources/import/tosca/categories/categoryTypes.yml +++ b/catalog-be/src/main/resources/import/tosca/categories/categoryTypes.yml @@ -11,6 +11,12 @@ services: VoIP_Call_Control: name: "VoIP Call Control" icons: ['call_controll'] + E2E_Service: + name: "E2E Service" + icons: ['network_l_1-3'] + Network_Service: + name: "Network Service" + icons: ['network_l_1-3'] resources: NetworkLayer23: name: "Network L2-3" @@ -137,7 +143,10 @@ resources: icons: ['service_admin'] ContrailRoute: name: "Contrail Route" - icons: ['contrail_route'] + icons: ['contrail_route'] SecurityZone: name: "Security Zone" - icons: ['security_zone'] \ No newline at end of file + icons: ['security_zone'] + NetworkService: + name: "Network Service" + icons: ['network'] \ No newline at end of file diff --git a/catalog-be/src/main/resources/import/tosca/categories/categoryTypes.zip b/catalog-be/src/main/resources/import/tosca/categories/categoryTypes.zip index 7a0e6bcad7464cc3b9f099c5c5dc6e1931d9dd04..314a12ea5562e06c5a353d745d2b91ff91d0ad57 100644 GIT binary patch delta 1046 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 -- 2.16.6