aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/AbstractValidationsServlet.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/servlets/AbstractValidationsServlet.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/servlets/AbstractValidationsServlet.java458
1 files changed, 437 insertions, 21 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/AbstractValidationsServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/AbstractValidationsServlet.java
index 0cdf872f71..cb0cc239f2 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/AbstractValidationsServlet.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/AbstractValidationsServlet.java
@@ -28,6 +28,7 @@ import com.google.gson.JsonSyntaxException;
import fj.data.Either;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Type;
@@ -52,6 +53,7 @@ import org.openecomp.sdc.be.components.impl.ImportUtils;
import org.openecomp.sdc.be.components.impl.ImportUtils.ResultStatusEnum;
import org.openecomp.sdc.be.components.impl.ImportUtils.ToscaElementTypeEnum;
import org.openecomp.sdc.be.components.impl.ResourceImportManager;
+import org.openecomp.sdc.be.components.impl.ServiceImportManager;
import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException;
import org.openecomp.sdc.be.components.impl.exceptions.ByResponseFormatComponentException;
import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
@@ -62,12 +64,17 @@ import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
import org.openecomp.sdc.be.impl.ComponentsUtils;
import org.openecomp.sdc.be.impl.ServletUtils;
+import org.openecomp.sdc.be.impl.WebAppContextWrapper;
import org.openecomp.sdc.be.model.ArtifactDefinition;
+import org.openecomp.sdc.be.model.Component;
import org.openecomp.sdc.be.model.Resource;
+import org.openecomp.sdc.be.model.Service;
import org.openecomp.sdc.be.model.UploadResourceInfo;
+import org.openecomp.sdc.be.model.UploadServiceInfo;
import org.openecomp.sdc.be.model.User;
import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
import org.openecomp.sdc.be.servlets.ResourceUploadServlet.ResourceAuthorityTypeEnum;
+import org.openecomp.sdc.be.servlets.ServiceUploadServlet.ServiceAuthorityTypeEnum;
import org.openecomp.sdc.be.user.Role;
import org.openecomp.sdc.be.user.UserBusinessLogic;
import org.openecomp.sdc.be.utils.TypeUtils;
@@ -80,6 +87,7 @@ import org.openecomp.sdc.common.util.YamlToObjectConverter;
import org.openecomp.sdc.common.zip.ZipUtils;
import org.openecomp.sdc.common.zip.exception.ZipException;
import org.openecomp.sdc.exception.ResponseFormat;
+import org.springframework.web.context.WebApplicationContext;
import org.yaml.snakeyaml.Yaml;
public abstract class AbstractValidationsServlet extends BeGenericServlet {
@@ -94,12 +102,13 @@ public abstract class AbstractValidationsServlet extends BeGenericServlet {
TOSCA_SIMPLE_YAML_PREFIX + "1_1",
TOSCA_SIMPLE_YAML_PREFIX + "1_2",
TOSCA_SIMPLE_YAML_PREFIX + "1_3");
- private static final List<String> TOSCA_YML_CSAR_VALID_SUFFIX = Arrays.asList(".yml", ".yaml", ".csar");
+ private static final List<String> TOSCA_YML_CSAR_VALID_SUFFIX = Arrays.asList(".yml", ".yaml", ".csar", ".meta");
protected ServletUtils servletUtils;
protected ResourceImportManager resourceImportManager;
protected final ComponentInstanceBusinessLogic componentInstanceBusinessLogic;
+ protected ServiceImportManager serviceImportManager;
public AbstractValidationsServlet(UserBusinessLogic userBusinessLogic,
ComponentInstanceBusinessLogic componentInstanceBL, ComponentsUtils componentsUtils,
@@ -113,6 +122,16 @@ public abstract class AbstractValidationsServlet extends BeGenericServlet {
protected void init() {
}
+ protected synchronized void initSpringFromContext() {
+ if (serviceImportManager == null) {
+ ServletContext context = servletRequest.getSession().getServletContext();
+ WebAppContextWrapper webApplicationContextWrapper = (WebAppContextWrapper) context
+ .getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR);
+ WebApplicationContext webApplicationContext = webApplicationContextWrapper.getWebAppContext(context);
+ serviceImportManager = webApplicationContext.getBean(ServiceImportManager.class);
+ }
+ }
+
protected void validateResourceDoesNotExist(Wrapper<Response> responseWrapper, User user, String resourceName) {
if (resourceImportManager.isResourceExist(resourceName)) {
ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.RESOURCE_ALREADY_EXISTS);
@@ -483,19 +502,23 @@ public abstract class AbstractValidationsServlet extends BeGenericServlet {
private void validateToscaTemplatePayloadName(Wrapper<Response> responseWrapper, UploadResourceInfo uploadResourceInfo, User user) {
String toscaTemplatePayloadName = uploadResourceInfo.getPayloadName();
- boolean isValidSuffix = false;
- if (toscaTemplatePayloadName != null && !toscaTemplatePayloadName.isEmpty()) {
- for (String validSuffix : TOSCA_YML_CSAR_VALID_SUFFIX) {
- isValidSuffix = isValidSuffix || toscaTemplatePayloadName.toLowerCase().endsWith(validSuffix);
- }
- }
+ boolean isValidSuffix = isToscaTemplatePayloadNameValid(responseWrapper, toscaTemplatePayloadName);
if (!isValidSuffix) {
ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_TOSCA_FILE_EXTENSION);
Response errorResponse = buildErrorResponse(responseFormat);
getComponentsUtils().auditResource(responseFormat, user, uploadResourceInfo.getName(), AuditingActionEnum.IMPORT_RESOURCE);
responseWrapper.setInnerElement(errorResponse);
}
+ }
+ private boolean isToscaTemplatePayloadNameValid(Wrapper<Response> responseWrapper, String toscaTemplatePayloadName) {
+ boolean isValidSuffix = false;
+ if (toscaTemplatePayloadName != null && !toscaTemplatePayloadName.isEmpty()) {
+ for (String validSuffix : TOSCA_YML_CSAR_VALID_SUFFIX) {
+ isValidSuffix = isValidSuffix || toscaTemplatePayloadName.toLowerCase().endsWith(validSuffix);
+ }
+ }
+ return isValidSuffix;
}
private void validateMD5(Wrapper<Response> responseWrapper, User user, UploadResourceInfo resourceInfo, HttpServletRequest request, String resourceInfoJsonString) {
@@ -721,19 +744,29 @@ public abstract class AbstractValidationsServlet extends BeGenericServlet {
return new ImmutablePair<>(newResource, actionStatus);
}
- private Resource throwComponentException(ResponseFormat responseFormat) {
+ protected Resource throwComponentException(ResponseFormat responseFormat) {
throw new ByResponseFormatComponentException(responseFormat);
}
private void getAndValidateCsarYaml(Map<String, byte[]> csarUIPayload, Resource resource, User user, String csarUUID) {
+ getAndValidateComponentCsarYaml(csarUIPayload, resource, user, csarUUID);
+ }
+
+ private void getAndValidateComponentCsarYaml(Map<String, byte[]> csarUIPayload, Component component, User user, String csarUUID) {
Either<ImmutablePair<String, String>, ResponseFormat> getToscaYamlRes = CsarValidationUtils.getToscaYaml(csarUIPayload, csarUUID, getComponentsUtils());
if (getToscaYamlRes.isRight()) {
ResponseFormat responseFormat = getToscaYamlRes.right().value();
log.debug("Error when try to get csar toscayamlFile with csar ID {}, error: {}", csarUUID, responseFormat);
- BeEcompErrorManager.getInstance().logBeDaoSystemError("Creating resource from CSAR: fetching CSAR with id " + csarUUID + " failed");
- getComponentsUtils().auditResource(responseFormat, user, resource, AuditingActionEnum.CREATE_RESOURCE);
+ if (component instanceof Resource) {
+ BeEcompErrorManager.getInstance()
+ .logBeDaoSystemError("Creating resource from CSAR: fetching CSAR with id " + csarUUID + " failed");
+ getComponentsUtils().auditResource(responseFormat, user, (Resource)component, AuditingActionEnum.CREATE_RESOURCE);
+ }else {
+ BeEcompErrorManager.getInstance()
+ .logBeDaoSystemError("Creating service from CSAR: fetching CSAR with id " + csarUUID + " failed");
+ }
throwComponentException(responseFormat);
}
String toscaYaml = getToscaYamlRes.left().value().getValue();
@@ -743,7 +776,9 @@ public abstract class AbstractValidationsServlet extends BeGenericServlet {
boolean isValid = yamlConvertor.isValidYaml(toscaYaml.getBytes());
if (!isValid) {
ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_YAML_FILE);
- getComponentsUtils().auditResource(responseFormat, user, resource, AuditingActionEnum.IMPORT_RESOURCE);
+ if (component instanceof Resource) {
+ getComponentsUtils().auditResource(responseFormat, user, (Resource)component, AuditingActionEnum.IMPORT_RESOURCE);
+ }
throwComponentException(responseFormat);
}
@@ -764,7 +799,10 @@ public abstract class AbstractValidationsServlet extends BeGenericServlet {
if (!isValid) {
ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_TOSCA_TEMPLATE);
- getComponentsUtils().auditResource(responseFormat, user, resource, AuditingActionEnum.IMPORT_RESOURCE);
+ if (component instanceof Resource) {
+ log.debug("enter getAndValidateComponentCsarYaml,component instanceof Resource");
+ getComponentsUtils().auditResource(responseFormat, user, (Resource)component, AuditingActionEnum.IMPORT_RESOURCE);
+ }
throwComponentException(responseFormat);
}
}
@@ -780,23 +818,32 @@ public abstract class AbstractValidationsServlet extends BeGenericServlet {
List<UploadArtifactInfo> artifactList = resourceInfoObject.getArtifactList();
if (artifactList != null) {
Map<String, ArtifactDefinition> artifactsHM = new HashMap<>();
- for (UploadArtifactInfo artifact : artifactList) {
- ArtifactDefinition artifactDef = new ArtifactDefinition();
- artifactDef.setArtifactName(artifact.getArtifactName());
- artifactDef.setArtifactType(artifact.getArtifactType().getType());
- artifactDef.setDescription(artifact.getArtifactDescription());
- artifactDef.setPayloadData(artifact.getArtifactData());
- artifactDef.setArtifactRef(artifact.getArtifactPath());
- artifactsHM.put(artifactDef.getArtifactName(), artifactDef);
- }
+ buildArtifactsHM(artifactList, artifactsHM);
resource.setArtifacts(artifactsHM);
}
}
}
+ private void buildArtifactsHM(List<UploadArtifactInfo> artifactList, Map<String, ArtifactDefinition> artifactsHM){
+ for (UploadArtifactInfo artifact : artifactList) {
+ ArtifactDefinition artifactDef = new ArtifactDefinition();
+ artifactDef.setArtifactName(artifact.getArtifactName());
+ artifactDef.setArtifactType(artifact.getArtifactType().getType());
+ artifactDef.setDescription(artifact.getArtifactDescription());
+ artifactDef.setPayloadData(artifact.getArtifactData());
+ artifactDef.setArtifactRef(artifact.getArtifactPath());
+ artifactsHM.put(artifactDef.getArtifactName(), artifactDef);
+ }
+ }
+
private Map<String, byte[]> getCsarFromPayload(UploadResourceInfo innerElement) {
String csarUUID = innerElement.getPayloadName();
String payloadData = innerElement.getPayloadData();
+
+ return getComponentCsarFromPayload(csarUUID, payloadData);
+ }
+
+ private Map<String, byte[]> getComponentCsarFromPayload(String csarUUID, String payloadData){
if (payloadData == null) {
log.info("Failed to decode received csar {}", csarUUID);
throw new ByActionStatusComponentException(ActionStatus.CSAR_NOT_FOUND, csarUUID);
@@ -911,4 +958,373 @@ public abstract class AbstractValidationsServlet extends BeGenericServlet {
throw new ByActionStatusComponentException(ActionStatus.MISSING_BODY);
}
}
+
+ protected void commonServiceGeneralValidations(
+ Wrapper<Response> responseWrapper, Wrapper<User> userWrapper,
+ Wrapper<UploadServiceInfo> uploadServiceInfoWrapper, ServiceAuthorityTypeEnum serviceAuthorityEnum,
+ String userUserId,
+ String serviceInfoJsonString) {
+
+ if (responseWrapper.isEmpty()) {
+ validateUserExist(responseWrapper, userWrapper, userUserId);
+ }
+
+ if (responseWrapper.isEmpty()) {
+ validateUserRole(responseWrapper, userWrapper.getInnerElement(), serviceAuthorityEnum);
+ }
+
+ if (responseWrapper.isEmpty()) {
+ validateAndFillServiceJson(responseWrapper, uploadServiceInfoWrapper, userWrapper.getInnerElement(),
+ serviceAuthorityEnum, serviceInfoJsonString);
+ }
+
+ if (responseWrapper.isEmpty()) {
+ validateToscaTemplatePayloadName(responseWrapper, uploadServiceInfoWrapper.getInnerElement(),
+ userWrapper.getInnerElement());
+ }
+
+ }
+
+ protected void validateUserRole(Wrapper<Response> errorResponseWrapper, User user,
+ ServiceAuthorityTypeEnum serviceAuthority) {
+ log.debug("validate user role");
+ if (serviceAuthority == ServiceAuthorityTypeEnum.NORMATIVE_TYPE_BE) {
+ if (!user.getRole().equals(Role.ADMIN.name())) {
+ log.info("user is not in appropriate role to perform action");
+ ResponseFormat responseFormat =
+ getComponentsUtils().getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
+ log.debug("audit before sending response");
+ Response response = buildErrorResponse(responseFormat);
+ errorResponseWrapper.setInnerElement(response);
+ }
+ } else {
+ validateUserRole(errorResponseWrapper, user);
+ }
+
+ }
+
+ protected void validateAndFillServiceJson(Wrapper<Response> responseWrapper,
+ Wrapper<UploadServiceInfo> uploadServiceInfoWrapper, User user,
+ ServiceAuthorityTypeEnum serviceAuthorityEnum, String serviceInfo) {
+ boolean isValid;
+ try {
+ log.debug("The received json is {}", serviceInfo);
+ UploadServiceInfo serviceInfoObject = gson.fromJson(serviceInfo, UploadServiceInfo.class);
+ if (serviceInfoObject == null) {
+ isValid = false;
+ } else {
+ if (!serviceAuthorityEnum.isBackEndImport()) {
+ isValid =
+ serviceInfoObject.getPayloadName() != null && !serviceInfoObject.getPayloadName().isEmpty();
+ //only service name is checked
+ } else {
+ isValid = true;
+ }
+ uploadServiceInfoWrapper.setInnerElement(serviceInfoObject);
+ log.debug("get isValid:{},serviceInfoObject get name:{},get tags:{},getContactId:{}," +
+ " getPayloadName:{}",isValid,
+ uploadServiceInfoWrapper.getInnerElement().getName(),
+ uploadServiceInfoWrapper.getInnerElement().getTags(),
+ uploadServiceInfoWrapper.getInnerElement().getContactId(),
+ uploadServiceInfoWrapper.getInnerElement().getPayloadName());
+ }
+
+ } catch (JsonSyntaxException e) {
+ log.debug("enter validateAndFillServiceJson,Invalid json was received. {}", e.getMessage(), e);
+ isValid = false;
+
+ }
+ if (!isValid) {
+ log.info("Invalid json was received.");
+ ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT);
+ Response errorResp = buildErrorResponse(responseFormat);
+ responseWrapper.setInnerElement(errorResp);
+ }
+ }
+
+ protected void validateToscaTemplatePayloadName(Wrapper<Response> responseWrapper,
+ UploadServiceInfo uploadServiceInfo, User user) {
+ String toscaTemplatePayloadName = uploadServiceInfo.getPayloadName();
+ boolean isValidSuffix = isToscaTemplatePayloadNameValid(responseWrapper, toscaTemplatePayloadName);
+ if (!isValidSuffix) {
+ ResponseFormat responseFormat =
+ getComponentsUtils().getResponseFormat(ActionStatus.INVALID_TOSCA_FILE_EXTENSION);
+ Response errorResponse = buildErrorResponse(responseFormat);
+ responseWrapper.setInnerElement(errorResponse);
+ }
+
+ }
+
+
+ protected void specificServiceAuthorityValidations(Wrapper<Response> responseWrapper,
+ Wrapper<UploadServiceInfo> uploadServiceInfoWrapper, Wrapper<String> yamlStringWrapper, User user,
+ HttpServletRequest request, String serviceInfoJsonString, ServiceAuthorityTypeEnum serviceAuthorityEnum)
+ throws FileNotFoundException {
+
+ if (responseWrapper.isEmpty()) {
+ // UI Only Validation
+ if (!serviceAuthorityEnum.isBackEndImport()) {
+ importUIValidations(responseWrapper, uploadServiceInfoWrapper.getInnerElement(), user, request,
+ serviceInfoJsonString);
+ }
+
+ // User Defined Type Services
+ if (serviceAuthorityEnum.isUserTypeService() && !CsarValidationUtils.isCsarPayloadName(
+ uploadServiceInfoWrapper.getInnerElement().getPayloadName())) {
+ if (responseWrapper.isEmpty()) {
+ validatePayloadNameSpace(responseWrapper, uploadServiceInfoWrapper.getInnerElement(), user,
+ yamlStringWrapper.getInnerElement());
+ }
+
+ }
+ }
+ }
+
+ protected void importUIValidations(Wrapper<Response> responseWrapper, UploadServiceInfo serviceInfo, User user,
+ HttpServletRequest request, String serviceInfoJsonString) {
+ if (responseWrapper.isEmpty()) {
+ validateMD5(responseWrapper, user, serviceInfo, request, serviceInfoJsonString);
+ }
+ if (responseWrapper.isEmpty() && request != null && request.getMethod() != null && request.getMethod()
+ .equals("POST")) {
+ validateServiceDoesNotExist(responseWrapper, user, serviceInfo.getName());
+ }
+ }
+
+ protected void validatePayloadNameSpace(Wrapper<Response> responseWrapper, UploadServiceInfo serviceInfo, User user,
+ String toscaPayload) {
+ boolean isValid;
+ String nameSpace = "";
+ Map<String, Object> mappedToscaTemplate = (Map<String, Object>) new Yaml().load(toscaPayload);
+ Either<Map<String, Object>, ResultStatusEnum> toscaElement =
+ ImportUtils.findFirstToscaMapElement(mappedToscaTemplate, TypeUtils.ToscaTagNamesEnum.NODE_TYPES);
+ if (toscaElement.isRight() || toscaElement.left().value().size() != 1) {
+ isValid = false;
+ } else {
+ nameSpace = toscaElement.left().value().keySet().iterator().next();
+ isValid = nameSpace.startsWith(Constants.USER_DEFINED_SERVICE_NAMESPACE_PREFIX);
+ log.debug("enter validatePayloadNameSpace,get nameSpace:{},get Valid is:{}",nameSpace,isValid);
+ }
+ if (!isValid) {
+ ResponseFormat responseFormat =
+ getComponentsUtils().getResponseFormat(ActionStatus.INVALID_SERVICE_NAMESPACE);
+ Response errorResponse = buildErrorResponse(responseFormat);
+ responseWrapper.setInnerElement(errorResponse);
+ } else {
+ String str1 = nameSpace.substring(Constants.USER_DEFINED_SERVICE_NAMESPACE_PREFIX.length());
+ String[] findTypes = str1.split("\\.");
+ if (ResourceTypeEnum.containsName(findTypes[0].toUpperCase())) {
+ String type = findTypes[0].toUpperCase();
+ serviceInfo.setServiceType(type);
+ } else {
+ serviceInfo.setServiceType(ResourceTypeEnum.SERVICE.name());
+ }
+ }
+
+ }
+
+ protected void validateMD5(Wrapper<Response> responseWrapper, User user, UploadServiceInfo serviceInfo,
+ HttpServletRequest request, String serviceInfoJsonString) {
+ boolean isValid;
+ String recievedMD5 = request.getHeader(Constants.MD5_HEADER);
+ if (recievedMD5 == null) {
+ isValid = false;
+ } else {
+ String calculateMD5 = GeneralUtility.calculateMD5Base64EncodedByString(serviceInfoJsonString);
+ isValid = calculateMD5.equals(recievedMD5);
+ }
+ if (!isValid) {
+ ResponseFormat responseFormat =
+ getComponentsUtils().getResponseFormat(ActionStatus.INVALID_SERVICE_CHECKSUM);
+ Response errorResponse = buildErrorResponse(responseFormat);
+ responseWrapper.setInnerElement(errorResponse);
+ }
+ }
+
+
+ protected void validateServiceDoesNotExist(Wrapper<Response> responseWrapper, User user, String serviceName) {
+ if (serviceImportManager.isServiceExist(serviceName)) {
+ ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.SERVICE_ALREADY_EXISTS);
+ Response errorResponse = buildErrorResponse(responseFormat);
+ responseWrapper.setInnerElement(errorResponse);
+ }
+ }
+
+ protected void handleImportService(Wrapper<Response> responseWrapper, User user,
+ UploadServiceInfo serviceInfoObject, String yamlAsString, ServiceAuthorityTypeEnum authority,
+ boolean createNewVersion, String serviceUniqueId) throws ZipException {
+
+ Response response = null;
+ Object representation = null;
+ ImmutablePair<Service, ActionStatus> importedServiceStatus = null;
+ if (CsarValidationUtils.isCsarPayloadName(serviceInfoObject.getPayloadName())) {
+ log.debug("import service from csar");
+ importedServiceStatus = importServiceFromUICsar(serviceInfoObject, user, serviceUniqueId);
+ }
+
+ if (importedServiceStatus != null) {
+ try {
+ representation = RepresentationUtils.toRepresentation(importedServiceStatus.left);
+ } catch (IOException e) {
+ log.debug("Error while building service representation : {}", e.getMessage(), e);
+ }
+ response = buildOkResponse(getComponentsUtils().getResponseFormat(importedServiceStatus.right),
+ representation);
+ }
+ responseWrapper.setInnerElement(response);
+ }
+
+ private ImmutablePair<Service, ActionStatus> importServiceFromUICsar(UploadServiceInfo serviceInfoObject, User user,
+ String serviceUniqueId) throws ZipException {
+
+ Service newService;
+ ImmutablePair<Service, ActionStatus> result = null;
+ ActionStatus actionStatus;
+ Service service = new Service();
+ String payloadName = serviceInfoObject.getPayloadName();
+ fillServiceFromServiceInfoObject(service, serviceInfoObject);
+
+ Map<String, byte[]> csarUIPayloadRes = getCsarFromPayload(serviceInfoObject);
+
+ getAndValidateCsarYaml(csarUIPayloadRes, service, user, payloadName);
+
+ newService = serviceImportManager.getServiceImportBusinessLogic()
+ .createService(service, AuditingActionEnum.CREATE_SERVICE, user, csarUIPayloadRes,
+ payloadName);
+ actionStatus = ActionStatus.CREATED;
+
+ return new ImmutablePair<>(newService, actionStatus);
+ }
+
+
+ private void fillServiceFromServiceInfoObject(Service service, UploadServiceInfo serviceInfoObject) {
+ serviceImportManager.populateServiceMetadata(serviceInfoObject, service);
+ fillArtifacts(service, serviceInfoObject);
+
+ }
+
+ private Map<String, byte[]> getCsarFromPayload(UploadServiceInfo innerElement)
+ throws ZipException {
+ String csarUUID = innerElement.getPayloadName();
+ String payloadData = innerElement.getPayloadData();
+ return getComponentCsarFromPayload(csarUUID, payloadData);
+ }
+
+ private void getAndValidateCsarYaml(Map<String, byte[]> csarUIPayload, Service service, User user,
+ String csarUUID) {
+ getAndValidateComponentCsarYaml(csarUIPayload, service, user, csarUUID);
+ }
+
+ private void fillArtifacts(Service service, UploadServiceInfo serviceInfoObject) {
+ if (service != null && serviceInfoObject != null) {
+ List<UploadArtifactInfo> artifactList = serviceInfoObject.getArtifactList();
+ if (artifactList != null) {
+ Map<String, ArtifactDefinition> artifactsHM = new HashMap<>();
+ buildArtifactsHM(artifactList, artifactsHM);
+ service.setArtifacts(artifactsHM);
+ }
+ }
+ }
+ /**
+ * import service payload to postman
+ * @param responseWrapper
+ * @param uploadServiceInfoWrapper
+ * @param yamlStringWrapper
+ * @param user
+ * @param serviceInfoJsonString
+ * @param serviceAuthorityEnum
+ * @param file
+ * @throws ZipException
+ */
+ protected void fillServicePayload(Wrapper<Response> responseWrapper, Wrapper<UploadServiceInfo> uploadServiceInfoWrapper, Wrapper<String> yamlStringWrapper, User user, String serviceInfoJsonString, ServiceAuthorityTypeEnum serviceAuthorityEnum,
+ File file) throws ZipException {
+ log.debug("enter fillServicePayload");
+ if (responseWrapper.isEmpty()) {
+ log.debug("enter fillServicePayload,get responseWrapper is empty");
+ if (serviceAuthorityEnum.isBackEndImport()) {
+ // PrePayload Validations
+ if (responseWrapper.isEmpty()) {
+ validateDataNotNull(responseWrapper, file, serviceInfoJsonString);
+ }
+ if (responseWrapper.isEmpty()){
+ log.debug("enter fillServicePayload,responseWrapper is empty");
+ }
+ if(!serviceAuthorityEnum.equals(ServiceAuthorityTypeEnum.CSAR_TYPE_BE)){
+ if (responseWrapper.isEmpty()) {
+ validateZip(responseWrapper, file, uploadServiceInfoWrapper.getInnerElement().getPayloadName());
+ }
+
+ // Fill PayLoad From File
+ if (responseWrapper.isEmpty()) {
+ fillToscaTemplateFromZip(yamlStringWrapper, uploadServiceInfoWrapper.getInnerElement().getPayloadName(), file);
+ }
+ }else{
+
+ log.debug("enter fillServicePayload,ServiceAuthorityTypeEnum is CSAR_TYPE_BE");
+ if (responseWrapper.isEmpty()) {
+ validateCsar(responseWrapper, file, uploadServiceInfoWrapper.getInnerElement().getPayloadName());
+ }
+ if (!responseWrapper.isEmpty()) {
+ log.debug("enter fillServicePayload,get responseWrapper:{}", responseWrapper);
+ }
+ // Fill PayLoad From File
+ if (responseWrapper.isEmpty()) {
+ fillServicePayloadDataFromFile(responseWrapper, uploadServiceInfoWrapper.getInnerElement(), file);
+ }
+
+ }
+
+ } else {
+ // Fill PayLoad From JSON
+ if (responseWrapper.isEmpty()) {
+ fillServiceToscaTemplateFromJson(responseWrapper, yamlStringWrapper, user, uploadServiceInfoWrapper.getInnerElement());
+ }
+ }
+
+ }
+
+ }
+
+ protected void fillServicePayloadDataFromFile(Wrapper<Response> responseWrapper, UploadServiceInfo uploadServiceInfoWrapper, File file) {
+ try(InputStream fileInputStream = new FileInputStream(file)){
+
+ log.debug("enter fillServicePayloadDataFromFile");
+ byte [] data = new byte[(int)file.length()];
+ if( fileInputStream.read(data) == -1){
+ log.info("Invalid json was received.");
+ ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT);
+
+ Response errorResp = buildErrorResponse(responseFormat);
+ responseWrapper.setInnerElement(errorResp);
+ }
+ String payloadData = Base64.encodeBase64String(data);
+ uploadServiceInfoWrapper.setPayloadData(payloadData);
+ log.debug("enter fillServicePayloadDataFromFile,get payloadData:{}",
+ uploadServiceInfoWrapper.getPayloadData());
+
+ log.debug("enter fillServicePayloadDataFromFile,get uploadService:{}",uploadServiceInfoWrapper);
+
+ } catch (IOException e) {
+ log.info("Invalid json was received or Error while closing input Stream.");
+ log.debug("Invalid json was received or Error while closing input Stream. {}", e.getMessage(), e);
+ ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT);
+
+ Response errorResp = buildErrorResponse(responseFormat);
+ responseWrapper.setInnerElement(errorResp);
+ }
+ }
+
+ private void fillServiceToscaTemplateFromJson(Wrapper<Response> responseWrapper, Wrapper<String> yamlStringWrapper, User user, UploadServiceInfo serviceInfo) {
+ if (serviceInfo.getPayloadData() == null || serviceInfo.getPayloadData().isEmpty()) {
+ ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_RESOURCE_PAYLOAD);
+ Response errorResponse = buildErrorResponse(responseFormat);
+ getComponentsUtils().auditResource(responseFormat, user, serviceInfo.getName(), AuditingActionEnum.IMPORT_RESOURCE);
+ responseWrapper.setInnerElement(errorResponse);
+ } else {
+ String toscaPayload = serviceInfo.getPayloadData();
+ String decodedPayload = new String(Base64.decodeBase64(toscaPayload));
+ yamlStringWrapper.setInnerElement(decodedPayload);
+ }
+ }
+
}