Import VSP with non-standard data types
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / impl / ResourceBusinessLogic.java
index c291c57..6185dc9 100644 (file)
@@ -118,6 +118,7 @@ import org.openecomp.sdc.be.model.InputDefinition;
 import org.openecomp.sdc.be.model.InterfaceDefinition;
 import org.openecomp.sdc.be.model.LifeCycleTransitionEnum;
 import org.openecomp.sdc.be.model.LifecycleStateEnum;
+import org.openecomp.sdc.be.model.Model;
 import org.openecomp.sdc.be.model.NodeTypeInfo;
 import org.openecomp.sdc.be.model.Operation;
 import org.openecomp.sdc.be.model.ParsedToscaYamlInfo;
@@ -212,6 +213,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
     private final CsarBusinessLogic csarBusinessLogic;
     private final PropertyBusinessLogic propertyBusinessLogic;
     private final PolicyBusinessLogic policyBusinessLogic;
+    private final ModelBusinessLogic modelBusinessLogic;
     private IInterfaceLifecycleOperation interfaceTypeOperation;
     private LifecycleBusinessLogic lifecycleBusinessLogic;
     @Autowired
@@ -225,6 +227,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
     @Autowired
     private SoftwareInformationBusinessLogic softwareInformationBusinessLogic;
 
+
     @Autowired
     public ResourceBusinessLogic(final IElementOperation elementDao, final IGroupOperation groupOperation,
                                  final IGroupInstanceOperation groupInstanceOperation, final IGroupTypeOperation groupTypeOperation,
@@ -242,7 +245,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
                                  final ComponentNameValidator componentNameValidator, final ComponentTagsValidator componentTagsValidator,
                                  final ComponentValidator componentValidator, final ComponentIconValidator componentIconValidator,
                                  final ComponentProjectCodeValidator componentProjectCodeValidator,
-                                 final ComponentDescriptionValidator componentDescriptionValidator, final PolicyBusinessLogic policyBusinessLogic) {
+                                 final ComponentDescriptionValidator componentDescriptionValidator, final PolicyBusinessLogic policyBusinessLogic,
+                                 final ModelBusinessLogic modelBusinessLogic) {
         super(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation, groupBusinessLogic, interfaceOperation,
             interfaceLifecycleTypeOperation, artifactsBusinessLogic, artifactToscaOperation, componentContactIdValidator, componentNameValidator,
             componentTagsValidator, componentValidator, componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator);
@@ -258,6 +262,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
         this.csarBusinessLogic = csarBusinessLogic;
         this.propertyBusinessLogic = propertyBusinessLogic;
         this.policyBusinessLogic = policyBusinessLogic;
+        this.modelBusinessLogic = modelBusinessLogic;
     }
 
     static <T> Either<T, RuntimeException> rollbackWithEither(final JanusGraphDao janusGraphDao, final ActionStatus actionStatus,
@@ -508,7 +513,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
         List<ArtifactDefinition> createdArtifacts = new ArrayList<>();
         CsarInfo csarInfo = csarBusinessLogic.getCsarInfo(newResource, oldResource, user, csarUIPayload, csarUUID);
         lockComponent(lockedResourceId, oldResource, "update Resource From Csar");
-        Map<String, NodeTypeInfo> nodeTypesInfo = csarInfo.extractNodeTypesInfo();
+        Map<String, NodeTypeInfo> nodeTypesInfo = csarInfo.extractTypesInfo();
         Either<Map<String, EnumMap<ArtifactOperationEnum, List<ArtifactDefinition>>>, ResponseFormat> findNodeTypesArtifactsToHandleRes = findNodeTypesArtifactsToHandle(
             nodeTypesInfo, csarInfo, oldResource);
         if (findNodeTypesArtifactsToHandleRes.isRight()) {
@@ -1017,7 +1022,23 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
             .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, StatusCode.STARTED, "Starting to create Resource From Csar by user {}",
                 user.getUserId());
         CsarInfo csarInfo = csarBusinessLogic.getCsarInfo(resource, null, user, csarUIPayload, csarUUID);
-        Map<String, NodeTypeInfo> nodeTypesInfo = csarInfo.extractNodeTypesInfo();
+        Map<String, NodeTypeInfo> nodeTypesInfo = csarInfo.extractTypesInfo();
+        if (StringUtils.isNotEmpty(resource.getModel())) {
+            final Map<String, Object> dataTypesToCreate = new HashMap<>();
+            for (final String dataType: csarInfo.getDataTypes().keySet()) {
+                final Either<DataTypeDefinition, StorageOperationStatus> result = propertyOperation.getDataTypeByName(dataType, resource.getModel());
+                if (result.isRight() && result.right().value().equals(StorageOperationStatus.NOT_FOUND)) {
+                    dataTypesToCreate.put(dataType, csarInfo.getDataTypes().get(dataType));
+                }
+            }
+            if (MapUtils.isNotEmpty(dataTypesToCreate)) {
+                final String nameForGeneratedModel = resource.getModel() + "_" + csarInfo.getVfResourceName() + resource.getCsarVersion();
+                final Model model = new Model(nameForGeneratedModel, resource.getModel());
+                modelBusinessLogic.createModel(model, new Yaml().dump(dataTypesToCreate));
+                resource.setModel(nameForGeneratedModel);
+            }
+        }
+        
         Either<Map<String, EnumMap<ArtifactOperationEnum, List<ArtifactDefinition>>>, ResponseFormat> findNodeTypesArtifactsToHandleRes = findNodeTypesArtifactsToHandle(
             nodeTypesInfo, csarInfo, resource);
         if (findNodeTypesArtifactsToHandleRes.isRight()) {