diff options
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceImportManager.java')
-rw-r--r-- | catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceImportManager.java | 88 |
1 files changed, 81 insertions, 7 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceImportManager.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceImportManager.java index 7e26cb329f..6b0b6bf81c 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceImportManager.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceImportManager.java @@ -39,6 +39,8 @@ import org.openecomp.sdc.be.components.lifecycle.LifecycleChangeInfoWithAction; import org.openecomp.sdc.be.config.BeEcompErrorManager; import org.openecomp.sdc.be.config.BeEcompErrorManager.ErrorSeverity; import org.openecomp.sdc.be.dao.api.ActionStatus; +import org.openecomp.sdc.be.datatypes.elements.ArtifactDataDefinition; +import org.openecomp.sdc.be.datatypes.elements.OperationDataDefinition; import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum; import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields; import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum; @@ -92,11 +94,14 @@ import java.util.stream.Collectors; @Component("resourceImportManager") public class ResourceImportManager { static final Pattern PROPERTY_NAME_PATTERN_IGNORE_LENGTH = Pattern.compile("[\\w\\-\\_\\d\\:]+"); + private static final String IMPLEMENTATION = "implementation"; private ServletContext servletContext; private AuditingManager auditingManager; private ResourceBusinessLogic resourceBusinessLogic; + private InterfaceOperationBusinessLogic interfaceOperationBusinessLogic; + private IGraphLockOperation graphLockOperation; protected ToscaOperationFacade toscaOperationFacade; @@ -310,7 +315,7 @@ public class ResourceImportManager { while (interfacesNameValue.hasNext()) { Entry<String, Object> interfaceNameValue = interfacesNameValue.next(); Either<InterfaceDefinition, ResultStatusEnum> eitherInterface = createModuleInterface(interfaceNameValue - .getValue()); + .getValue(), resource); if (eitherInterface.isRight()) { log.info("error when creating interface:{}, for resource:{}", interfaceNameValue.getKey(), resource.getName()); } @@ -325,7 +330,7 @@ public class ResourceImportManager { } } - private Either<InterfaceDefinition, ResultStatusEnum> createModuleInterface(Object interfaceJson) { + private Either<InterfaceDefinition, ResultStatusEnum> createModuleInterface(Object interfaceJson, Resource resource) { InterfaceDefinition interf = new InterfaceDefinition(); Either<InterfaceDefinition, ResultStatusEnum> result = Either.left(interf); @@ -334,12 +339,31 @@ public class ResourceImportManager { String requirementJsonString = (String) interfaceJson; interf.setType(requirementJsonString); } - else if (interfaceJson instanceof Map) { + else if (interfaceJson instanceof Map && ResourceTypeEnum.VFC.equals(resource.getResourceType())) { Map<String, Object> requirementJsonMap = (Map<String, Object>) interfaceJson; - if (requirementJsonMap.containsKey(TypeUtils.ToscaTagNamesEnum.TYPE.getElementName())) { - String type = (String) requirementJsonMap.get(TypeUtils.ToscaTagNamesEnum.TYPE.getElementName()); - interf.setType(type); - interf.setUniqueId(type.toLowerCase()); + Map<String, OperationDataDefinition> operations = new HashMap<>(); + + for (final Entry<String, Object> entry : requirementJsonMap.entrySet()) { + if (entryIsInterfaceType(entry)) { + String type = (String) requirementJsonMap.get(TypeUtils.ToscaTagNamesEnum.TYPE.getElementName()); + interf.setType(type); + interf.setUniqueId(type.toLowerCase()); + } else if (entryContainsImplementationForAKnownOperation(entry, interf.getType())){ + + OperationDataDefinition operation = new OperationDataDefinition(); + operation.setName(entry.getKey()); + + ArtifactDataDefinition implementation = new ArtifactDataDefinition(); + // Adding the artifact name in quotes to indicate that this is a literal value, rather than a reference to + // an SDC artifact + implementation.setArtifactName(Constants.ESCAPED_DOUBLE_QUOTE + ((Map<String, String>)entry.getValue()).get(IMPLEMENTATION) + Constants.ESCAPED_DOUBLE_QUOTE); + operation.setImplementation(implementation); + + operations.put(entry.getKey(), operation); + } + } + if (!operations.isEmpty()) { + interf.setOperations(operations); } } else { @@ -355,6 +379,51 @@ public class ResourceImportManager { return result; } + + private boolean entryIsInterfaceType(final Entry<String, Object> entry) { + if(entry.getKey().equals(TypeUtils.ToscaTagNamesEnum.TYPE.getElementName())) { + if (entry.getValue() instanceof String) { + return true; + } + throw new ByActionStatusComponentException(ActionStatus.INVALID_YAML); + } + return false; + } + + private boolean entryContainsImplementationForAKnownOperation(final Entry<String, Object> entry, final String interfaceType) { + if (entry.getValue() instanceof Map && ((Map<?, ?>)entry.getValue()).containsKey(IMPLEMENTATION)) { + if (isAKnownOperation(interfaceType, entry.getKey())){ + return true; + } + throw new ByActionStatusComponentException(ActionStatus.INTERFACE_OPERATION_NOT_FOUND); + } + return false; + } + + private boolean isAKnownOperation(String interfaceType, String operation) { + Either<Map<String, InterfaceDefinition>, ResponseFormat> interfaceLifecycleTypes = interfaceOperationBusinessLogic.getAllInterfaceLifecycleTypes(); + if (interfaceLifecycleTypes.isRight() || interfaceLifecycleTypes.left().value() == null) { + return false; + } + + for (Entry<String, InterfaceDefinition> interfaceLifecycleType : interfaceLifecycleTypes.left().value().entrySet()) { + if (interfaceTypeAndOperationMatches(interfaceLifecycleType, interfaceType, operation)) { + return true; + } + } + return false; + } + + private boolean interfaceTypeAndOperationMatches(Entry<String, InterfaceDefinition> interfaceLifecycleType, String interfaceType, String operation) { + if (interfaceLifecycleType.getKey().equalsIgnoreCase(interfaceType) && interfaceLifecycleType.getValue().getOperations() != null) { + for (String interfaceLifecycleTypeOperation : interfaceLifecycleType.getValue().getOperations().keySet()) { + if (interfaceLifecycleTypeOperation != null && interfaceLifecycleTypeOperation.equalsIgnoreCase(operation)){ + return true; + } + } + } + return false; + } private void setRequirements(Map<String, Object> toscaJson, Resource resource, Resource parentResource) {// Note that parentResource can be null Either<List<Object>, ResultStatusEnum> toscaRequirements = ImportUtils.findFirstToscaListElement(toscaJson, TypeUtils.ToscaTagNamesEnum.REQUIREMENTS); @@ -898,6 +967,11 @@ public class ResourceImportManager { public void setResourceBusinessLogic(ResourceBusinessLogic resourceBusinessLogic) { this.resourceBusinessLogic = resourceBusinessLogic; } + + @Autowired + public void setInterfaceOperationBusinessLogic(InterfaceOperationBusinessLogic interfaceOperationBusinessLogic) { + this.interfaceOperationBusinessLogic = interfaceOperationBusinessLogic; + } public IGraphLockOperation getGraphLockOperation() { return graphLockOperation; |