Fix NSD plugin get version from model name
[sdc.git] / catalog-be-plugins / etsi-nfv-nsd-csar-plugin / src / main / java / org / openecomp / sdc / be / plugins / etsi / nfv / nsd / generator / EtsiNfvNsCsarEntryGenerator.java
index ff20a3e..f5d7828 100644 (file)
@@ -16,7 +16,6 @@
  *  SPDX-License-Identifier: Apache-2.0
  *  ============LICENSE_END=========================================================
  */
-
 package org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator;
 
 import static org.openecomp.sdc.common.api.ArtifactTypeEnum.ETSI_PACKAGE;
@@ -25,11 +24,13 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
+import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.config.CategoriesToGenerateNsd;
 import org.openecomp.sdc.be.model.Component;
 import org.openecomp.sdc.be.plugins.CsarEntryGenerator;
 import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.exception.NsdException;
 import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.factory.EtsiNfvNsdCsarGeneratorFactory;
 import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.config.EtsiVersion;
+import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.model.NsdCsar;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -39,11 +40,11 @@ import org.slf4j.LoggerFactory;
 @org.springframework.stereotype.Component("etsiNfvNsCsarEntryGenerator")
 public class EtsiNfvNsCsarEntryGenerator implements CsarEntryGenerator {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(EtsiNfvNsCsarEntryGenerator.class);
-    static final String ETSI_NS_COMPONENT_CATEGORY = "ETSI NFV Network Service";
-    static final String NSD_FILE_PATH_FORMAT = "Artifacts/%s/%s.csar";
+    static final String NSD_FILE_PATH_FORMAT = "Artifacts/%s/%s.%s";
+    static final String SIGNED_CSAR_EXTENSION = "zip";
+    static final String UNSIGNED_CSAR_EXTENSION = "csar";
     static final String ETSI_VERSION_METADATA = "ETSI Version";
-
+    private static final Logger LOGGER = LoggerFactory.getLogger(EtsiNfvNsCsarEntryGenerator.class);
     private final EtsiNfvNsdCsarGeneratorFactory etsiNfvNsdCsarGeneratorFactory;
 
     public EtsiNfvNsCsarEntryGenerator(final EtsiNfvNsdCsarGeneratorFactory etsiNfvNsdCsarGeneratorFactory) {
@@ -51,8 +52,8 @@ public class EtsiNfvNsCsarEntryGenerator implements CsarEntryGenerator {
     }
 
     /**
-     * Generates a Network Service CSAR based on a SERVICE component of category {@link
-     * EtsiNfvNsCsarEntryGenerator#ETSI_NS_COMPONENT_CATEGORY} and wraps it in a SDC CSAR entry.
+     * Generates a Network Service CSAR based on a SERVICE component that has category configured in
+     * {@link CategoriesToGenerateNsd } enum and wraps it in a SDC CSAR entry.
      *
      * @param component the component to create the NS CSAR from
      * @return an entry to be added in the Component CSAR by SDC
@@ -64,43 +65,44 @@ public class EtsiNfvNsCsarEntryGenerator implements CsarEntryGenerator {
             LOGGER.debug("Ignoring NSD CSAR generation for component '{}' as it is not a SERVICE", componentName);
             return Collections.emptyMap();
         }
-
-        final boolean isEOTemplate = component.getCategories().stream()
-            .anyMatch(category -> ETSI_NS_COMPONENT_CATEGORY.equals(category.getName()));
+        final boolean isEOTemplate = component.getCategories().stream().anyMatch(category ->
+                CategoriesToGenerateNsd.hasCategoryName(category.getName()));
         if (!isEOTemplate) {
-            LOGGER.debug("Ignoring NSD CSAR generation for component '{}' as it does not belong to the category '{}'",
-                componentName, ETSI_NS_COMPONENT_CATEGORY);
+            LOGGER.debug("Ignoring NSD CSAR generation for component '{}' as it does not belong to any of the categories '{}'",
+                    componentName, CategoriesToGenerateNsd.getCategories());
             return Collections.emptyMap();
         }
 
-        final byte[] nsdCsar;
+        final NsdCsar nsdCsar;
         try {
             final EtsiVersion etsiVersion = getComponentEtsiVersion(component);
-            final EtsiNfvNsdCsarGenerator etsiNfvNsdCsarGenerator =
-                etsiNfvNsdCsarGeneratorFactory.create(etsiVersion);
+            final EtsiNfvNsdCsarGenerator etsiNfvNsdCsarGenerator = etsiNfvNsdCsarGeneratorFactory.create(etsiVersion);
             nsdCsar = etsiNfvNsdCsarGenerator.generateNsdCsar(component);
         } catch (final NsdException e) {
-            LOGGER.error("Could not create NSD CSAR entry for component '{}'"
-                , component.getName(), e);
+            LOGGER.error("Could not create NSD CSAR entry for component '{}'", component.getName(), e);
             return Collections.emptyMap();
         } catch (final Exception e) {
-            LOGGER.error("Could not create NSD CSAR entry for component '{}'. An unexpected exception occurred"
-                , component.getName(), e);
+            LOGGER.error("Could not create NSD CSAR entry for component '{}'. An unexpected exception occurred", component.getName(), e);
             return Collections.emptyMap();
         }
 
-        return createEntry(component.getNormalizedName(), nsdCsar);
+        return createEntry(nsdCsar);
     }
 
     private EtsiVersion getComponentEtsiVersion(Component component) {
-        final String etsiVersion = component.getCategorySpecificMetadata().get(ETSI_VERSION_METADATA);
+        String etsiVersion = component.getCategorySpecificMetadata().get(ETSI_VERSION_METADATA);
+        final String modelName = component.getModel();
+        if (etsiVersion == null && modelName.matches(".*\\d+\\.\\d+\\.\\d+.*" )){
+            etsiVersion = modelName.replaceAll(".*?(\\d+\\.\\d+\\.\\d+).*", "$1");
+        }
         return EtsiVersion.convertOrNull(etsiVersion);
     }
 
-    private Map<String, byte[]> createEntry(final String csarName, final byte[] nsdCsar) {
+    private Map<String, byte[]> createEntry(final NsdCsar nsdCsar) {
         final Map<String, byte[]> entryMap = new HashMap<>();
-        final String entryKey = String.format(NSD_FILE_PATH_FORMAT, ETSI_PACKAGE, csarName);
-        entryMap.put(entryKey, nsdCsar);
+        final String extension = nsdCsar.isSigned() ? SIGNED_CSAR_EXTENSION : UNSIGNED_CSAR_EXTENSION;
+        final String entryKey = String.format(NSD_FILE_PATH_FORMAT, ETSI_PACKAGE, nsdCsar.getFileName(), extension);
+        entryMap.put(entryKey, nsdCsar.getCsarPackage());
         return entryMap;
     }
 }