From 630e46ef816ea2d16d358ed3fab0d9ebed884c19 Mon Sep 17 00:00:00 2001 From: vasraz Date: Fri, 25 Nov 2022 12:48:58 +0000 Subject: Fix issues while importing a Service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The import service was ignoring the selected model for imported nodes. It was also trying to set a different icon for resources that already exist in the database, creating a validation error. There was also a nullpointer in relation to not found capability. Change-Id: Ifa9320c5554bbf5e8fed0cc2e2dea6b05503d213 Issue-ID: SDC-4266 Signed-off-by: André Schmid Signed-off-by: Vasyl Razinkov --- .../sdc/be/components/csar/CsarBusinessLogic.java | 3 +- .../sdc/be/components/csar/ServiceCsarInfo.java | 37 ++++++++++++---------- .../be/components/impl/ResourceBusinessLogic.java | 1 + .../impl/ServiceImportBusinessLogic.java | 32 +++++++++++-------- .../org/openecomp/sdc/be/impl/ComponentsUtils.java | 3 ++ .../openecomp/sdc/be/servlets/ServiceServlet.java | 6 ++-- 6 files changed, 48 insertions(+), 34 deletions(-) (limited to 'catalog-be/src/main/java') diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/CsarBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/CsarBusinessLogic.java index aa5706c77f..e4b54c18b5 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/CsarBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/CsarBusinessLogic.java @@ -157,7 +157,8 @@ public class CsarBusinessLogic extends BaseBusinessLogic { csarUUID, oldResource.getComponentMetadataDefinition().getMetadataDataDefinition().getImportedToscaChecksum(), checksum); oldResource.getComponentMetadataDefinition().getMetadataDataDefinition().setImportedToscaChecksum(checksum); } - return new ServiceCsarInfo(user, csarUUID, csar, service.getName(), toscaYamlCsarStatus.getKey(), toscaYamlCsarStatus.getValue(), true); + return new ServiceCsarInfo(user, csarUUID, csar, service.getName(), service.getModel(), toscaYamlCsarStatus.getKey(), + toscaYamlCsarStatus.getValue(), true); } public ParsedToscaYamlInfo getParsedToscaYamlInfo(String topologyTemplateYaml, String yamlName, Map nodeTypesInfo, diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/ServiceCsarInfo.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/ServiceCsarInfo.java index 3e0ea35713..af4d6e48e0 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/ServiceCsarInfo.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/ServiceCsarInfo.java @@ -62,11 +62,13 @@ public class ServiceCsarInfo extends CsarInfo { private static final Logger log = Logger.getLogger(ServiceCsarInfo.class); private final Map> mainTemplateImports; private List nodeTypeDefinitions; + private final String model; - public ServiceCsarInfo(final User modifier, final String csarUUID, final Map csar, final String vfResourceName, + public ServiceCsarInfo(final User modifier, final String csarUUID, final Map csar, + final String vfResourceName, final String model, final String mainTemplateName, final String mainTemplateContent, final boolean isUpdate) { super(modifier, csarUUID, csar, vfResourceName, mainTemplateName, mainTemplateContent, isUpdate); - + this.model = model; final Path mainTemplateDir = Paths.get(getMainTemplateName().substring(0, getMainTemplateName().lastIndexOf('/') + 1)); final Collection filesHandled = new HashSet<>(); filesHandled.add(Paths.get(mainTemplateName)); @@ -105,9 +107,12 @@ public class ServiceCsarInfo extends CsarInfo { if (CollectionUtils.isNotEmpty(importsList)) { if (importsList.get(0) instanceof String) { List importPaths = new ArrayList<>(); - importsList.stream() - .forEach(importPath -> importPaths.add(fileParentDir == null ? Paths.get((String) importPath) - : fileParentDir.resolve(Paths.get((String) importPath)).normalize())); + importsList.forEach( + importPath -> { + final Path path = fileParentDir == null ? + Paths.get((String) importPath) : fileParentDir.resolve(Paths.get((String) importPath)).normalize(); + importPaths.add(path); + }); return importPaths; } else if (importsList.get(0) instanceof Map) { return getTemplateImportFilePathsMultiLineGrammar(importsList, fileParentDir); @@ -162,14 +167,14 @@ public class ServiceCsarInfo extends CsarInfo { private Map getTypes(ToscaTagNamesEnum toscaTag) { final Map types = new HashMap<>(); - mainTemplateImports.entrySet().stream().forEach(entry -> types.putAll(getTypesFromTemplate(entry.getValue(), toscaTag))); + mainTemplateImports.entrySet().forEach(entry -> types.putAll(getTypesFromTemplate(entry.getValue(), toscaTag))); types.putAll(getTypesFromTemplate(getMappedToscaMainTemplate(), toscaTag)); return types; } public Map getArtifactTypes() { final Map artifactsTypes = new HashMap<>(); - mainTemplateImports.entrySet().stream() + mainTemplateImports.entrySet() .forEach(entry -> artifactsTypes.putAll(getTypesFromTemplate(entry.getValue(), TypeUtils.ToscaTagNamesEnum.ARTIFACT_TYPES))); artifactsTypes.putAll(getTypesFromTemplate(getMappedToscaMainTemplate(), TypeUtils.ToscaTagNamesEnum.ARTIFACT_TYPES)); return artifactsTypes; @@ -199,7 +204,7 @@ public class ServiceCsarInfo extends CsarInfo { for (final String dependencyName : getDependencyTypes(nodeType, nodeTypes)) { final NodeTypeDefinition dependency = nodeTypeDefinitionsMap.get(dependencyName); final int indexOfDependency = sortedNodeTypeDefinitions.lastIndexOf(dependency); - highestDependencyIndex = indexOfDependency > highestDependencyIndex ? indexOfDependency : highestDependencyIndex; + highestDependencyIndex = Math.max(indexOfDependency, highestDependencyIndex); } sortedNodeTypeDefinitions.add(highestDependencyIndex + 1, nodeType); nodeTypeDefinitionsMap.put(nodeType.getMappedNodeType().getKey(), nodeType); @@ -221,11 +226,10 @@ public class ServiceCsarInfo extends CsarInfo { } private Set getNodeTypeDefinitions(final Set nodeTypesToGet) { - final Set nodeTypesToReturn = new HashSet<>(); final Set foundNodeTypes = getTypes(nodeTypesToGet); - nodeTypesToReturn.addAll(foundNodeTypes); + final Set nodeTypesToReturn = new HashSet<>(foundNodeTypes); final Set recursiveNodeTypesToGet = new HashSet<>(); - foundNodeTypes.stream().forEach(nodeTypeDef -> { + foundNodeTypes.forEach(nodeTypeDef -> { Either derivedFromTypeEither = findToscaElement((Map) nodeTypeDef.getMappedNodeType().getValue(), TypeUtils.ToscaTagNamesEnum.DERIVED_FROM, ToscaElementTypeEnum.STRING); @@ -243,12 +247,12 @@ public class ServiceCsarInfo extends CsarInfo { private Set getTypes(final Set nodeTypes) { Set nodeTypeDefinitionsLocal = new HashSet<>(); - mainTemplateImports.entrySet().forEach(entry -> { - final Map types = getTypesFromTemplate(entry.getValue(), TypeUtils.ToscaTagNamesEnum.NODE_TYPES, nodeTypes); + mainTemplateImports.values().forEach(template -> { + final Map types = getTypesFromTemplate(template, ToscaTagNamesEnum.NODE_TYPES, nodeTypes); if (MapUtils.isNotEmpty(types)) { - types.entrySet().stream().forEach(typesEntry -> { + types.entrySet().forEach(typesEntry -> { final NodeTypeMetadata metadata = - getMetaDataFromTemplate(entry.getValue(), typesEntry.getKey()); + getMetaDataFromTemplate(template, typesEntry.getKey()); nodeTypeDefinitionsLocal.add(new NodeTypeDefinition(typesEntry, metadata)); }); } @@ -306,13 +310,14 @@ public class ServiceCsarInfo extends CsarInfo { nodeTypeMetadata.setResourceType((String) metadata.get("type")); nodeTypeMetadata.setVendorName((String) metadata.get("resourceVendor")); nodeTypeMetadata.setVendorRelease(String.valueOf(metadata.get("resourceVendorRelease"))); - nodeTypeMetadata.setModel((String) metadata.get("model")); + nodeTypeMetadata.setModel(model); nodeTypeMetadata.setNormative(false); } private NullNodeTypeMetadata createDefaultMetadata(String nodeTemplateType) { NullNodeTypeMetadata nodeTypeMetadata = new NullNodeTypeMetadata(); nodeTypeMetadata.setToscaName(nodeTemplateType); + nodeTypeMetadata.setModel(model); return nodeTypeMetadata; } } diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogic.java index 992216db7e..cb57ab3b12 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogic.java @@ -3710,6 +3710,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (newResource.getContactId() == null) { newResource.setContactId(oldResource.getContactId()); } + newResource.setIcon(oldResource.getIcon()); newResource.setCategories(oldResource.getCategories()); if (newResource.getVendorName() == null) { newResource.setVendorName(oldResource.getVendorName()); diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceImportBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceImportBusinessLogic.java index 82add987f2..7bdaaee9a6 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceImportBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceImportBusinessLogic.java @@ -296,10 +296,9 @@ public class ServiceImportBusinessLogic { final Map dataTypesToCreate = getDatatypesToCreate(service.getModel(), csarInfo); if (MapUtils.isNotEmpty(dataTypesToCreate)) { dataTypeBusinessLogic.createDataTypeFromYaml(new Yaml().dump(dataTypesToCreate), service.getModel(), true); - dataTypesToCreate.entrySet().stream().forEach(createdOrUpdatedDataType -> { - applicationDataTypeCache.reload(service.getModel(), - UniqueIdBuilder.buildDataTypeUid(service.getModel(), createdOrUpdatedDataType.getKey())); - }); + dataTypesToCreate.keySet().forEach(key -> + applicationDataTypeCache.reload(service.getModel(), UniqueIdBuilder.buildDataTypeUid(service.getModel(), key)) + ); } final Map artifactTypesToCreate = getArtifactTypesToCreate(service.getModel(), csarInfo); @@ -465,7 +464,7 @@ public class ServiceImportBusinessLogic { NodeTypesMetadataList nodeTypesMetadataList = new NodeTypesMetadataList(); List nodeTypeMetadataList = new ArrayList<>(); final Map allTypesToCreate = new HashMap<>(); - nodeTypesToCreate.stream().forEach(nodeType -> { + nodeTypesToCreate.forEach(nodeType -> { allTypesToCreate.put(nodeType.getMappedNodeType().getKey(), nodeType.getMappedNodeType().getValue()); nodeTypeMetadataList.add(nodeType.getNodeTypeMetadata()); }); @@ -2675,7 +2674,8 @@ public class ServiceImportBusinessLogic { if (nodeNamespaceMap.containsKey(uploadComponentInstanceInfo.getType())) { uploadComponentInstanceInfo.setType(nodeNamespaceMap.get(uploadComponentInstanceInfo.getType()).getToscaResourceName()); } - Resource refResource = validateResourceInstanceBeforeCreate(yamlName, uploadComponentInstanceInfo, existingnodeTypeMap); + Resource refResource = + validateResourceInstanceBeforeCreate(yamlName, component.getModel(), uploadComponentInstanceInfo, existingnodeTypeMap); ComponentInstance componentInstance = new ComponentInstance(); componentInstance.setComponentUid(refResource.getUniqueId()); Collection directives = uploadComponentInstanceInfo.getDirectives(); @@ -2707,26 +2707,28 @@ public class ServiceImportBusinessLogic { componentInstance.setName(uploadComponentInstanceInfo.getName()); componentInstance.setIcon(origResource.getIcon()); resourcesInstancesMap.put(componentInstance, origResource); - } catch (Exception e) { + } catch (final ComponentException e) { + throw e; + } catch (final Exception e) { throw new ComponentException(ActionStatus.GENERAL_ERROR, e.getMessage()); } } - protected Resource validateResourceInstanceBeforeCreate(String yamlName, UploadComponentInstanceInfo uploadComponentInstanceInfo, + protected Resource validateResourceInstanceBeforeCreate(String yamlName, String model, UploadComponentInstanceInfo uploadComponentInstanceInfo, Map nodeNamespaceMap) { Resource refResource; try { if (nodeNamespaceMap.containsKey(uploadComponentInstanceInfo.getType())) { refResource = nodeNamespaceMap.get(uploadComponentInstanceInfo.getType()); } else { - Either findResourceEither = toscaOperationFacade - .getLatestResourceByToscaResourceName(uploadComponentInstanceInfo.getType()); - if (findResourceEither.isRight()) { + final Either resourceEither = + toscaOperationFacade.getLatestByToscaResourceName(uploadComponentInstanceInfo.getType(), model); + if (resourceEither.isRight()) { ResponseFormat responseFormat = componentsUtils - .getResponseFormat(componentsUtils.convertFromStorageResponse(findResourceEither.right().value())); + .getResponseFormat(componentsUtils.convertFromStorageResponse(resourceEither.right().value())); throw new ComponentException(responseFormat); } - refResource = findResourceEither.left().value(); + refResource = (Resource) resourceEither.left().value(); nodeNamespaceMap.put(refResource.getToscaResourceName(), refResource); } String componentState = refResource.getComponentMetadataDefinition().getMetadataDataDefinition().getState(); @@ -2744,7 +2746,9 @@ public class ServiceImportBusinessLogic { throw new ComponentException(responseFormat); } return refResource; - } catch (Exception e) { + } catch (final ComponentException e) { + throw e; + } catch (final Exception e) { throw new ComponentException(ActionStatus.GENERAL_ERROR, e.getMessage()); } } diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/impl/ComponentsUtils.java b/catalog-be/src/main/java/org/openecomp/sdc/be/impl/ComponentsUtils.java index dfe065a79e..36975f81d8 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/impl/ComponentsUtils.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/impl/ComponentsUtils.java @@ -800,6 +800,9 @@ public class ComponentsUtils { case SCHEMA_VIOLATION: responseEnum = ActionStatus.CAPABILITY_TYPE_ALREADY_EXIST; break; + case NOT_FOUND: + responseEnum = ActionStatus.CAPABILITY_NOT_FOUND; + break; default: responseEnum = ActionStatus.GENERAL_ERROR; break; diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ServiceServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ServiceServlet.java index d314f6a01d..fcac7dce35 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ServiceServlet.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ServiceServlet.java @@ -661,7 +661,7 @@ public class ServiceServlet extends AbstractValidationsServlet { log.debug(START_HANDLE_REQUEST_OF, url); log.debug(MODIFIER_ID_IS, userId); try { - final Wrapper responseWrapper = performUIImport(data, request, userId, null); + final Wrapper responseWrapper = performUIImport(data, request, userId); return responseWrapper.getInnerElement(); } catch (IOException | ZipException e) { BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Import Service"); @@ -670,8 +670,8 @@ public class ServiceServlet extends AbstractValidationsServlet { } } - private Wrapper performUIImport(String data, final HttpServletRequest request, String userId, - String serviceUniqueId) throws FileNotFoundException, ZipException { + private Wrapper performUIImport(String data, final HttpServletRequest request, + String userId) throws FileNotFoundException, ZipException { Wrapper responseWrapper = new Wrapper<>(); Wrapper userWrapper = new Wrapper<>(); Wrapper uploadServiceInfoWrapper = new Wrapper<>(); -- cgit 1.2.3-korg