summaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/info/ArtifactTemplateInfo.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/info/ArtifactTemplateInfo.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/info/ArtifactTemplateInfo.java630
1 files changed, 312 insertions, 318 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/info/ArtifactTemplateInfo.java b/catalog-be/src/main/java/org/openecomp/sdc/be/info/ArtifactTemplateInfo.java
index f78b7dfead..9b8e81cc7b 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/info/ArtifactTemplateInfo.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/info/ArtifactTemplateInfo.java
@@ -20,12 +20,9 @@
package org.openecomp.sdc.be.info;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import fj.data.Either;
import org.openecomp.sdc.be.config.BeEcompErrorManager;
import org.openecomp.sdc.be.config.Configuration.ArtifactTypeConfig;
import org.openecomp.sdc.be.config.ConfigurationManager;
@@ -38,319 +35,316 @@ import org.openecomp.sdc.exception.ResponseFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.gson.Gson;
-import com.google.gson.JsonObject;
-
-import fj.data.Either;
+import java.util.*;
public class ArtifactTemplateInfo {
- public static final String TYPE = "type";
- public static final String FILE_NAME = "fileName";
- public static final String ENV = "env";
- public static final String IS_BASE = "isBase";
-
- public static final String CSAR_HEAT = "HEAT";
- public static final String CSAR_ARTIFACT = "artifacts";
- public static final String CSAR_NETWORK = "network";
- public static final String CSAR_VOLUME = "volume";
- public static final String CSAR_NESTED = "nested";
- private static final Object DESC = "description";
- private static Logger log = LoggerFactory.getLogger(ArtifactTemplateInfo.class.getName());
- String type;
- String fileName;
- String env;
- boolean isBase;
- String groupName;
- String description;
-
- List<ArtifactTemplateInfo> relatedArtifactsInfo;
- private static Gson gson = new Gson();
-
- public ArtifactTemplateInfo() {
- super();
- }
-
- public ArtifactTemplateInfo(String type, String fileName, String env, List<ArtifactTemplateInfo> relatedArtifactsInfo) {
- super();
- this.type = type;
- this.fileName = fileName;
- this.env = env;
- this.relatedArtifactsInfo = relatedArtifactsInfo;
- }
-
- public String getType() {
- return type;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-
- public String getFileName() {
- return fileName;
- }
-
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
-
- public String getEnv() {
- return env;
- }
-
- public void setEnv(String env) {
- this.env = env;
- }
-
- public List<ArtifactTemplateInfo> getRelatedArtifactsInfo() {
- return relatedArtifactsInfo;
- }
-
- public void setRelatedArtifactsInfo(List<ArtifactTemplateInfo> relatedArtifactsInfo) {
- this.relatedArtifactsInfo = relatedArtifactsInfo;
- }
-
- public String getGroupName() {
- return groupName;
- }
-
- public void setGroupName(String groupName) {
- this.groupName = groupName;
- }
-
- public boolean isBase() {
- return isBase;
- }
-
- public void setBase(boolean isBase) {
- this.isBase = isBase;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- @Override
- public String toString() {
- return "ArtifactTemplateInfo [type=" + type + ", fileName=" + fileName + ", env=" + env + ", isBase=" + isBase + ", groupName=" + groupName + ", description=" + description + ", relatedArtifactsInfo=" + relatedArtifactsInfo + "]";
- }
-
- public static Either<ArtifactTemplateInfo, ResponseFormat> createArtifactTemplateInfoFromJson(ComponentsUtils componentsUtils, String type, Map<String, Object> o, List<ArtifactTemplateInfo> createdArtifactTemplateInfoList,
- ArtifactTemplateInfo parentArtifact) {
- String content = gson.toJson(o);
- JsonObject jsonElement = new JsonObject();
- ArtifactTemplateInfo resourceInfo = new ArtifactTemplateInfo();
-
- jsonElement = gson.fromJson(content, jsonElement.getClass());
-
- Map<String, Object> artifactTemplateMap = componentsUtils.parseJsonToObject(jsonElement.toString(), HashMap.class);
- if (artifactTemplateMap.containsKey(TYPE))
- resourceInfo.setType((String) artifactTemplateMap.get(TYPE));
- if (artifactTemplateMap.containsKey(FILE_NAME))
- resourceInfo.setFileName((String) artifactTemplateMap.get(FILE_NAME));
- if (artifactTemplateMap.containsKey(IS_BASE))
- resourceInfo.setBase((Boolean) artifactTemplateMap.get(IS_BASE));
- if (artifactTemplateMap.containsKey(ENV)) {
- Object envObj = artifactTemplateMap.get(ENV);
- String envStr = "";
- if (envObj instanceof String) {
- envStr = (String) envObj;
- } else if (envObj instanceof Map) {
- Map envMap = (Map) envObj;
- if (envMap.containsKey(FILE_NAME)) {
- envStr = (String) envMap.get(FILE_NAME);
- }
- }
- resourceInfo.setEnv(envStr);
- }
- if (artifactTemplateMap.containsKey(DESC)) {
- resourceInfo.setDescription((String) artifactTemplateMap.get(DESC));
- } else {
- resourceInfo.setDescription((String) artifactTemplateMap.get(FILE_NAME));
- }
-
- boolean artifactTypeExist = false;
- String correctType = type;
- if (type.equalsIgnoreCase(CSAR_NESTED))
- correctType = ArtifactTypeEnum.HEAT_NESTED.getType();
- else if (type.equalsIgnoreCase(CSAR_VOLUME))
- correctType = ArtifactTypeEnum.HEAT_VOL.getType();
- else if (type.equalsIgnoreCase(CSAR_NETWORK))
- correctType = ArtifactTypeEnum.HEAT_NET.getType();
- else if (type.equalsIgnoreCase(CSAR_ARTIFACT)){
- if( parentArtifact != null)
- correctType = ArtifactTypeEnum.HEAT_ARTIFACT.getType();
- else
- correctType = resourceInfo.type;
- }
- else if (type.equalsIgnoreCase(CSAR_HEAT))
- correctType = ArtifactTypeEnum.HEAT.getType();
- else
- correctType = ArtifactTypeEnum.OTHER.getType();
- Either<List<ArtifactType>, ActionStatus> allArtifactTypes = getDeploymentArtifactTypes(NodeTypeEnum.Resource);
-
- if (allArtifactTypes.isRight()) {
- BeEcompErrorManager.getInstance().logBeInvalidConfigurationError("Artifact Upload / Update", "artifactTypes", allArtifactTypes.right().value().name());
- return Either.right(componentsUtils.getResponseFormat(ActionStatus.FAILED_RETRIVE_ARTIFACTS_TYPES));
- }
-
- for (ArtifactType artType : allArtifactTypes.left().value()) {
-
- if (artType.getName().contains(correctType)) {
- resourceInfo.type = artType.getName();
- artifactTypeExist = true;
- break;
- }
- }
-
- if (!artifactTypeExist) {
- BeEcompErrorManager.getInstance().logBeInvalidTypeError("Artifact", "-Not supported artifact type ", correctType);
- log.debug("Not supported artifact type = {}" , correctType);
- return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_TYPE_NOT_SUPPORTED, correctType));
- }
-
- Either<Boolean, ResponseFormat> eitherNeedToCreate = validateEnv(componentsUtils, createdArtifactTemplateInfoList, resourceInfo);
- if (eitherNeedToCreate.isRight())
- return Either.right(eitherNeedToCreate.right().value());
- eitherNeedToCreate = validateParentType(componentsUtils, resourceInfo, parentArtifact);
- if (eitherNeedToCreate.isRight())
- return Either.right(eitherNeedToCreate.right().value());
- eitherNeedToCreate = validateIsAlreadyExist(componentsUtils, resourceInfo, createdArtifactTemplateInfoList, parentArtifact);
- if (eitherNeedToCreate.isRight())
- return Either.right(eitherNeedToCreate.right().value());
- Set<String> keys = o.keySet();
- for (String key : keys) {
- if (o.get(key) instanceof List) {
- List<Map<String, Object>> artifList = (List<Map<String, Object>>) o.get(key);
- for (Map<String, Object> relatedArtifactsMap : artifList) {
- Either<ArtifactTemplateInfo, ResponseFormat> relatedArtifact = ArtifactTemplateInfo.createArtifactTemplateInfoFromJson(componentsUtils, key, relatedArtifactsMap, createdArtifactTemplateInfoList, resourceInfo);
- if (relatedArtifact.isRight())
- return relatedArtifact;
- if (resourceInfo.relatedArtifactsInfo == null)
- resourceInfo.relatedArtifactsInfo = new ArrayList<ArtifactTemplateInfo>();
- resourceInfo.relatedArtifactsInfo.add(relatedArtifact.left().value());
- }
- }
- }
- return Either.left(resourceInfo);
- }
-
- private static Either<Boolean, ResponseFormat> validateIsAlreadyExist(ComponentsUtils componentsUtils, ArtifactTemplateInfo resourceInfo, List<ArtifactTemplateInfo> createdArtifactTemplateInfoList, ArtifactTemplateInfo parentArtifact) {
-
- if (parentArtifact == null) {
- if (createdArtifactTemplateInfoList == null || createdArtifactTemplateInfoList.isEmpty())
- return Either.left(true);
- for (ArtifactTemplateInfo createdArtifact : createdArtifactTemplateInfoList) {
- if (createdArtifact.getType().equalsIgnoreCase(resourceInfo.getType()) && createdArtifact.getFileName().equalsIgnoreCase(resourceInfo.getFileName())) {
- return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_ALRADY_EXIST_IN_MASTER_IN_CSAR, resourceInfo.getFileName(), createdArtifact.type));
- }
- }
- return Either.left(true);
- } else {
- List<ArtifactTemplateInfo> relatedArtifacts = parentArtifact.getRelatedArtifactsInfo();
- if (relatedArtifacts == null || relatedArtifacts.isEmpty())
- return Either.left(true);
- for (ArtifactTemplateInfo relatedArtifact : relatedArtifacts) {
- if (relatedArtifact.getType().equalsIgnoreCase(resourceInfo.getType())) {
- if (relatedArtifact.getFileName().equalsIgnoreCase(resourceInfo.getFileName())) {
- return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_ALRADY_EXIST_IN_MASTER_IN_CSAR, resourceInfo.getFileName(), parentArtifact.getFileName()));
- }
- }
- }
- return Either.left(true);
- }
- }
-
- private static Either<Boolean, ResponseFormat> validateParentType(ComponentsUtils componentsUtils, ArtifactTemplateInfo resourceInfo, ArtifactTemplateInfo parentArtifact) {
-
- if (parentArtifact == null)
- return Either.left(true);
- if (resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_ARTIFACT.getType()))
- return Either.left(true);
- if (resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT.getType()) && parentArtifact != null) {
- return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_NOT_VALID_IN_MASTER, resourceInfo.getFileName(), resourceInfo.getType(), parentArtifact.getFileName(), parentArtifact.getType()));
- }
- if ((resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_NET.getType()) || resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_VOL.getType()))
- && !parentArtifact.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT.getType())) {
- return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_NOT_VALID_IN_MASTER, resourceInfo.getFileName(), resourceInfo.getType(), parentArtifact.getFileName(), parentArtifact.getType()));
- }
- if (parentArtifact.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_NESTED.getType())) {
- if (resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_ARTIFACT.getType()) || resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_NESTED.getType())) {
- return Either.left(true);
- }
- return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_NOT_VALID_IN_MASTER, resourceInfo.getFileName(), resourceInfo.getType(), parentArtifact.getFileName(), parentArtifact.getType()));
- }
- if (parentArtifact.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT.getType()) && resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT.getType())) {
- return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_NOT_VALID_IN_MASTER, resourceInfo.getFileName(), resourceInfo.getType(), parentArtifact.getFileName(), parentArtifact.getType()));
- }
-
- if (parentArtifact.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT.getType())) {
- return Either.left(true);
- }
- return Either.left(true);
- }
-
- private static Either<Boolean, ResponseFormat> validateEnv(ComponentsUtils componentsUtils, List<ArtifactTemplateInfo> createdArtifactTemplateInfoList, ArtifactTemplateInfo resourceInfo) {
-
- if (createdArtifactTemplateInfoList == null || createdArtifactTemplateInfoList.isEmpty())
- return Either.left(true);
- if (resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_NESTED.getType()) || resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_ARTIFACT.getType()))
- return Either.left(true);
- for (ArtifactTemplateInfo createdArtifactTemplateInfo : createdArtifactTemplateInfoList) {
- // check if artifact with this name already parsed. If parsed check
- // env name. it must be the same.
- if (resourceInfo.getFileName().equalsIgnoreCase(createdArtifactTemplateInfo.getFileName())) {
- if ((resourceInfo.getEnv() == null || resourceInfo.getEnv().isEmpty()) && (createdArtifactTemplateInfo.getEnv() != null && !createdArtifactTemplateInfo.getEnv().isEmpty())) {
- log.debug("Artifact file with name {} type{} already parsed but with env {}", resourceInfo.getFileName(), resourceInfo.getType(), createdArtifactTemplateInfo.getEnv());
- return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_NOT_VALID_ENV, resourceInfo.getFileName(), resourceInfo.getType(), resourceInfo.getEnv(), createdArtifactTemplateInfo.getEnv()));
- }
- if (resourceInfo.getEnv() != null && !resourceInfo.getEnv().isEmpty() && createdArtifactTemplateInfo.getEnv() != null && !createdArtifactTemplateInfo.getEnv().isEmpty()
- && !createdArtifactTemplateInfo.getEnv().equalsIgnoreCase(resourceInfo.getEnv())) {
- log.debug("Artifact file with name {} type{} env {} already parsed but with env {}", resourceInfo.getFileName(), resourceInfo.getType(), resourceInfo.getEnv(), createdArtifactTemplateInfo.getEnv());
- return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_NOT_VALID_ENV, resourceInfo.getFileName(), resourceInfo.getType(), resourceInfo.getEnv(), createdArtifactTemplateInfo.getEnv()));
- }
- if ((resourceInfo.getEnv() != null && !resourceInfo.getEnv().isEmpty()) && (createdArtifactTemplateInfo.getEnv() == null || createdArtifactTemplateInfo.getEnv().isEmpty())) {
- log.debug("Artifact file with name {} type{} env {} already parsed but with env {}", resourceInfo.getFileName(), resourceInfo.getType(), resourceInfo.getEnv(), createdArtifactTemplateInfo.getEnv());
- return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_NOT_VALID_ENV, resourceInfo.getFileName(), resourceInfo.getType(), resourceInfo.getEnv(), createdArtifactTemplateInfo.getEnv()));
- }
- }
- List<ArtifactTemplateInfo> relatedArtifacts = createdArtifactTemplateInfo.getRelatedArtifactsInfo();
- Either<Boolean, ResponseFormat> status = validateEnv(componentsUtils, relatedArtifacts, resourceInfo);
- if (status.isRight())
- return status;
- }
- return Either.left(true);
- }
-
- private static Either<List<ArtifactType>, ActionStatus> getDeploymentArtifactTypes(NodeTypeEnum parentType) {
-
- Map<String, ArtifactTypeConfig> deploymentArtifacts = null;
- List<ArtifactType> artifactTypes = new ArrayList<ArtifactType>();
-
- if (parentType.equals(NodeTypeEnum.Service)) {
- deploymentArtifacts = ConfigurationManager.getConfigurationManager().getConfiguration().getServiceDeploymentArtifacts();
- } else {
- deploymentArtifacts = ConfigurationManager.getConfigurationManager().getConfiguration().getResourceDeploymentArtifacts();
- }
- if (deploymentArtifacts != null) {
- for (String artifactType : deploymentArtifacts.keySet()) {
- ArtifactType artifactT = new ArtifactType();
- artifactT.setName(artifactType);
- artifactTypes.add(artifactT);
- }
- return Either.left(artifactTypes);
- } else {
- return Either.right(ActionStatus.GENERAL_ERROR);
- }
-
- }
-
- public static int compareByGroupName(ArtifactTemplateInfo art1, ArtifactTemplateInfo art2) {
- return art1.isBase ? (art2.isBase ? 0 : -1) : (art2.isBase ? 1 : 0);
- }
+ public static final String TYPE = "type";
+ public static final String FILE_NAME = "fileName";
+ public static final String ENV = "env";
+ public static final String IS_BASE = "isBase";
+
+ public static final String CSAR_HEAT = "HEAT";
+ public static final String CSAR_ARTIFACT = "artifacts";
+ public static final String CSAR_NETWORK = "network";
+ public static final String CSAR_VOLUME = "volume";
+ public static final String CSAR_NESTED = "nested";
+ private static final Object DESC = "description";
+ private static final Logger log = LoggerFactory.getLogger(ArtifactTemplateInfo.class);
+ String type;
+ String fileName;
+ String env;
+ boolean isBase;
+ String groupName;
+ String description;
+
+ List<ArtifactTemplateInfo> relatedArtifactsInfo;
+ private static Gson gson = new Gson();
+
+ public ArtifactTemplateInfo() {
+ super();
+ }
+
+ public ArtifactTemplateInfo(String type, String fileName, String env, List<ArtifactTemplateInfo> relatedArtifactsInfo) {
+ super();
+ this.type = type;
+ this.fileName = fileName;
+ this.env = env;
+ this.relatedArtifactsInfo = relatedArtifactsInfo;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ public String getEnv() {
+ return env;
+ }
+
+ public void setEnv(String env) {
+ this.env = env;
+ }
+
+ public List<ArtifactTemplateInfo> getRelatedArtifactsInfo() {
+ return relatedArtifactsInfo;
+ }
+
+ public void setRelatedArtifactsInfo(List<ArtifactTemplateInfo> relatedArtifactsInfo) {
+ this.relatedArtifactsInfo = relatedArtifactsInfo;
+ }
+
+ public String getGroupName() {
+ return groupName;
+ }
+
+ public void setGroupName(String groupName) {
+ this.groupName = groupName;
+ }
+
+ public boolean isBase() {
+ return isBase;
+ }
+
+ public void setBase(boolean isBase) {
+ this.isBase = isBase;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @Override
+ public String toString() {
+ return "ArtifactTemplateInfo [type=" + type + ", fileName=" + fileName + ", env=" + env + ", isBase=" + isBase + ", groupName=" + groupName + ", description=" + description + ", relatedArtifactsInfo=" + relatedArtifactsInfo + "]";
+ }
+
+ public static Either<ArtifactTemplateInfo, ResponseFormat> createArtifactTemplateInfoFromJson(ComponentsUtils componentsUtils, String type, Map<String, Object> o, List<ArtifactTemplateInfo> createdArtifactTemplateInfoList,
+ ArtifactTemplateInfo parentArtifact) {
+ String content = gson.toJson(o);
+ JsonObject jsonElement = new JsonObject();
+ ArtifactTemplateInfo resourceInfo = new ArtifactTemplateInfo();
+
+ jsonElement = gson.fromJson(content, jsonElement.getClass());
+
+ Map<String, Object> artifactTemplateMap = componentsUtils.parseJsonToObject(jsonElement.toString(), HashMap.class);
+ if (artifactTemplateMap.containsKey(TYPE))
+ resourceInfo.setType((String) artifactTemplateMap.get(TYPE));
+ if (artifactTemplateMap.containsKey(FILE_NAME))
+ resourceInfo.setFileName((String) artifactTemplateMap.get(FILE_NAME));
+ if (artifactTemplateMap.containsKey(IS_BASE))
+ resourceInfo.setBase((Boolean) artifactTemplateMap.get(IS_BASE));
+ if (artifactTemplateMap.containsKey(ENV)) {
+ Object envObj = artifactTemplateMap.get(ENV);
+ String envStr = "";
+ if (envObj instanceof String) {
+ envStr = (String) envObj;
+ } else if (envObj instanceof Map) {
+ Map envMap = (Map) envObj;
+ if (envMap.containsKey(FILE_NAME)) {
+ envStr = (String) envMap.get(FILE_NAME);
+ }
+ }
+ resourceInfo.setEnv(envStr);
+ }
+ if (artifactTemplateMap.containsKey(DESC)) {
+ resourceInfo.setDescription((String) artifactTemplateMap.get(DESC));
+ } else {
+ resourceInfo.setDescription((String) artifactTemplateMap.get(FILE_NAME));
+ }
+
+ boolean artifactTypeExist = false;
+ String correctType = type;
+ if (type.equalsIgnoreCase(CSAR_NESTED))
+ correctType = ArtifactTypeEnum.HEAT_NESTED.getType();
+ else if (type.equalsIgnoreCase(CSAR_VOLUME))
+ correctType = ArtifactTypeEnum.HEAT_VOL.getType();
+ else if (type.equalsIgnoreCase(CSAR_NETWORK))
+ correctType = ArtifactTypeEnum.HEAT_NET.getType();
+ else if (type.equalsIgnoreCase(CSAR_ARTIFACT)){
+ if( parentArtifact != null)
+ correctType = ArtifactTypeEnum.HEAT_ARTIFACT.getType();
+ else
+ correctType = resourceInfo.type;
+ }
+ else if (type.equalsIgnoreCase(CSAR_HEAT))
+ correctType = ArtifactTypeEnum.HEAT.getType();
+ else
+ correctType = ArtifactTypeEnum.OTHER.getType();
+ Either<List<ArtifactType>, ActionStatus> allArtifactTypes = getDeploymentArtifactTypes(NodeTypeEnum.Resource);
+
+ if (allArtifactTypes.isRight()) {
+ BeEcompErrorManager.getInstance().logBeInvalidConfigurationError("Artifact Upload / Update", "artifactTypes", allArtifactTypes.right().value().name());
+ return Either.right(componentsUtils.getResponseFormat(ActionStatus.FAILED_RETRIVE_ARTIFACTS_TYPES));
+ }
+
+ for (ArtifactType artType : allArtifactTypes.left().value()) {
+
+ if (artType.getName().contains(correctType)) {
+ resourceInfo.type = artType.getName();
+ artifactTypeExist = true;
+ break;
+ }
+ }
+
+ if (!artifactTypeExist) {
+ BeEcompErrorManager.getInstance().logBeInvalidTypeError("Artifact", "-Not supported artifact type ", correctType);
+ log.debug("Not supported artifact type = {}" , correctType);
+ return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_TYPE_NOT_SUPPORTED, correctType));
+ }
+
+ Either<Boolean, ResponseFormat> eitherNeedToCreate = validateEnv(componentsUtils, createdArtifactTemplateInfoList, resourceInfo);
+ if (eitherNeedToCreate.isRight())
+ return Either.right(eitherNeedToCreate.right().value());
+ eitherNeedToCreate = validateParentType(componentsUtils, resourceInfo, parentArtifact);
+ if (eitherNeedToCreate.isRight())
+ return Either.right(eitherNeedToCreate.right().value());
+ eitherNeedToCreate = validateIsAlreadyExist(componentsUtils, resourceInfo, createdArtifactTemplateInfoList, parentArtifact);
+ if (eitherNeedToCreate.isRight())
+ return Either.right(eitherNeedToCreate.right().value());
+ Set<String> keys = o.keySet();
+ for (String key : keys) {
+ if (o.get(key) instanceof List) {
+ List<Map<String, Object>> artifList = (List<Map<String, Object>>) o.get(key);
+ for (Map<String, Object> relatedArtifactsMap : artifList) {
+ Either<ArtifactTemplateInfo, ResponseFormat> relatedArtifact = ArtifactTemplateInfo.createArtifactTemplateInfoFromJson(componentsUtils, key, relatedArtifactsMap, createdArtifactTemplateInfoList, resourceInfo);
+ if (relatedArtifact.isRight())
+ return relatedArtifact;
+ if (resourceInfo.relatedArtifactsInfo == null)
+ resourceInfo.relatedArtifactsInfo = new ArrayList<ArtifactTemplateInfo>();
+ resourceInfo.relatedArtifactsInfo.add(relatedArtifact.left().value());
+ }
+ }
+ }
+ return Either.left(resourceInfo);
+ }
+
+ private static Either<Boolean, ResponseFormat> validateIsAlreadyExist(ComponentsUtils componentsUtils, ArtifactTemplateInfo resourceInfo, List<ArtifactTemplateInfo> createdArtifactTemplateInfoList, ArtifactTemplateInfo parentArtifact) {
+
+ if (parentArtifact == null) {
+ if (createdArtifactTemplateInfoList == null || createdArtifactTemplateInfoList.isEmpty())
+ return Either.left(true);
+ for (ArtifactTemplateInfo createdArtifact : createdArtifactTemplateInfoList) {
+ if (createdArtifact.getType().equalsIgnoreCase(resourceInfo.getType()) && createdArtifact.getFileName().equalsIgnoreCase(resourceInfo.getFileName())) {
+ return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_ALRADY_EXIST_IN_MASTER_IN_CSAR, resourceInfo.getFileName(), createdArtifact.type));
+ }
+ }
+ return Either.left(true);
+ } else {
+ List<ArtifactTemplateInfo> relatedArtifacts = parentArtifact.getRelatedArtifactsInfo();
+ if (relatedArtifacts == null || relatedArtifacts.isEmpty())
+ return Either.left(true);
+ for (ArtifactTemplateInfo relatedArtifact : relatedArtifacts) {
+ if (relatedArtifact.getType().equalsIgnoreCase(resourceInfo.getType())) {
+ if (relatedArtifact.getFileName().equalsIgnoreCase(resourceInfo.getFileName())) {
+ return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_ALRADY_EXIST_IN_MASTER_IN_CSAR, resourceInfo.getFileName(), parentArtifact.getFileName()));
+ }
+ }
+ }
+ return Either.left(true);
+ }
+ }
+
+ private static Either<Boolean, ResponseFormat> validateParentType(ComponentsUtils componentsUtils, ArtifactTemplateInfo resourceInfo, ArtifactTemplateInfo parentArtifact) {
+
+ if (parentArtifact == null)
+ return Either.left(true);
+ if (resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_ARTIFACT.getType()))
+ return Either.left(true);
+ if (resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT.getType()) && parentArtifact != null) {
+ return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_NOT_VALID_IN_MASTER, resourceInfo.getFileName(), resourceInfo.getType(), parentArtifact.getFileName(), parentArtifact.getType()));
+ }
+ if ((resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_NET.getType()) || resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_VOL.getType()))
+ && !parentArtifact.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT.getType())) {
+ return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_NOT_VALID_IN_MASTER, resourceInfo.getFileName(), resourceInfo.getType(), parentArtifact.getFileName(), parentArtifact.getType()));
+ }
+ if (parentArtifact.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_NESTED.getType())) {
+ if (resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_ARTIFACT.getType()) || resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_NESTED.getType())) {
+ return Either.left(true);
+ }
+ return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_NOT_VALID_IN_MASTER, resourceInfo.getFileName(), resourceInfo.getType(), parentArtifact.getFileName(), parentArtifact.getType()));
+ }
+ if (parentArtifact.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT.getType()) && resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT.getType())) {
+ return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_NOT_VALID_IN_MASTER, resourceInfo.getFileName(), resourceInfo.getType(), parentArtifact.getFileName(), parentArtifact.getType()));
+ }
+
+ if (parentArtifact.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT.getType())) {
+ return Either.left(true);
+ }
+ return Either.left(true);
+ }
+
+ private static Either<Boolean, ResponseFormat> validateEnv(ComponentsUtils componentsUtils, List<ArtifactTemplateInfo> createdArtifactTemplateInfoList, ArtifactTemplateInfo resourceInfo) {
+
+ if (createdArtifactTemplateInfoList == null || createdArtifactTemplateInfoList.isEmpty())
+ return Either.left(true);
+ if (resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_NESTED.getType()) || resourceInfo.getType().equalsIgnoreCase(ArtifactTypeEnum.HEAT_ARTIFACT.getType()))
+ return Either.left(true);
+ for (ArtifactTemplateInfo createdArtifactTemplateInfo : createdArtifactTemplateInfoList) {
+ // check if artifact with this name already parsed. If parsed check
+ // env name. it must be the same.
+ if (resourceInfo.getFileName().equalsIgnoreCase(createdArtifactTemplateInfo.getFileName())) {
+ if ((resourceInfo.getEnv() == null || resourceInfo.getEnv().isEmpty()) && (createdArtifactTemplateInfo.getEnv() != null && !createdArtifactTemplateInfo.getEnv().isEmpty())) {
+ log.debug("Artifact file with name {} type{} already parsed but with env {}", resourceInfo.getFileName(), resourceInfo.getType(), createdArtifactTemplateInfo.getEnv());
+ return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_NOT_VALID_ENV, resourceInfo.getFileName(), resourceInfo.getType(), resourceInfo.getEnv(), createdArtifactTemplateInfo.getEnv()));
+ }
+ if (resourceInfo.getEnv() != null && !resourceInfo.getEnv().isEmpty() && createdArtifactTemplateInfo.getEnv() != null && !createdArtifactTemplateInfo.getEnv().isEmpty()
+ && !createdArtifactTemplateInfo.getEnv().equalsIgnoreCase(resourceInfo.getEnv())) {
+ log.debug("Artifact file with name {} type{} env {} already parsed but with env {}", resourceInfo.getFileName(), resourceInfo.getType(), resourceInfo.getEnv(), createdArtifactTemplateInfo.getEnv());
+ return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_NOT_VALID_ENV, resourceInfo.getFileName(), resourceInfo.getType(), resourceInfo.getEnv(), createdArtifactTemplateInfo.getEnv()));
+ }
+ if ((resourceInfo.getEnv() != null && !resourceInfo.getEnv().isEmpty()) && (createdArtifactTemplateInfo.getEnv() == null || createdArtifactTemplateInfo.getEnv().isEmpty())) {
+ log.debug("Artifact file with name {} type{} env {} already parsed but with env {}", resourceInfo.getFileName(), resourceInfo.getType(), resourceInfo.getEnv(), createdArtifactTemplateInfo.getEnv());
+ return Either.right(componentsUtils.getResponseFormat(ActionStatus.ARTIFACT_NOT_VALID_ENV, resourceInfo.getFileName(), resourceInfo.getType(), resourceInfo.getEnv(), createdArtifactTemplateInfo.getEnv()));
+ }
+ }
+ List<ArtifactTemplateInfo> relatedArtifacts = createdArtifactTemplateInfo.getRelatedArtifactsInfo();
+ Either<Boolean, ResponseFormat> status = validateEnv(componentsUtils, relatedArtifacts, resourceInfo);
+ if (status.isRight())
+ return status;
+ }
+ return Either.left(true);
+ }
+
+ private static Either<List<ArtifactType>, ActionStatus> getDeploymentArtifactTypes(NodeTypeEnum parentType) {
+
+ Map<String, ArtifactTypeConfig> deploymentArtifacts = null;
+ List<ArtifactType> artifactTypes = new ArrayList<ArtifactType>();
+
+ if (parentType.equals(NodeTypeEnum.Service)) {
+ deploymentArtifacts = ConfigurationManager.getConfigurationManager().getConfiguration().getServiceDeploymentArtifacts();
+ } else {
+ deploymentArtifacts = ConfigurationManager.getConfigurationManager().getConfiguration().getResourceDeploymentArtifacts();
+ }
+ if (deploymentArtifacts != null) {
+ for (String artifactType : deploymentArtifacts.keySet()) {
+ ArtifactType artifactT = new ArtifactType();
+ artifactT.setName(artifactType);
+ artifactTypes.add(artifactT);
+ }
+ return Either.left(artifactTypes);
+ } else {
+ return Either.right(ActionStatus.GENERAL_ERROR);
+ }
+
+ }
+
+ public static int compareByGroupName(ArtifactTemplateInfo art1, ArtifactTemplateInfo art2) {
+ return art1.isBase ? (art2.isBase ? 0 : -1) : (art2.isBase ? 1 : 0);
+ }
}