diff options
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/GroupTypeImportManager.java')
-rw-r--r-- | catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/GroupTypeImportManager.java | 249 |
1 files changed, 145 insertions, 104 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/GroupTypeImportManager.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/GroupTypeImportManager.java index b3448b27ef..5cdb589d2a 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/GroupTypeImportManager.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/GroupTypeImportManager.java @@ -20,21 +20,14 @@ package org.openecomp.sdc.be.components.impl; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Consumer; -import java.util.stream.Collectors; - -import javax.annotation.Resource; - +import fj.data.Either; import org.apache.commons.lang3.tuple.ImmutablePair; import org.openecomp.sdc.be.components.impl.CommonImportManager.ElementTypeEnum; import org.openecomp.sdc.be.components.impl.ImportUtils.ToscaTagNamesEnum; import org.openecomp.sdc.be.config.BeEcompErrorManager; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.impl.ComponentsUtils; +import org.openecomp.sdc.be.model.CapabilityTypeDefinition; import org.openecomp.sdc.be.model.GroupTypeDefinition; import org.openecomp.sdc.be.model.PropertyDefinition; import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade; @@ -45,104 +38,152 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; -import fj.data.Either; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; @Component("groupTypeImportManager") public class GroupTypeImportManager { - public static void main(String[] args) { - - List<PropertyDefinition> properties = new ArrayList<>(); - PropertyDefinition propertyDefintion = new PropertyDefinition(); - propertyDefintion.setName("aaa"); - properties.add(propertyDefintion); - - List<String> allParentsProps = new ArrayList<>(); - allParentsProps.add("aaa"); - allParentsProps.add("bbb"); - - Set<String> alreadyExistPropsCollection = properties.stream().filter(p -> allParentsProps.contains(p.getName())).map(p -> p.getName()).collect(Collectors.toSet()); - System.out.println(alreadyExistPropsCollection); - - } - - private static Logger log = LoggerFactory.getLogger(GroupTypeImportManager.class.getName()); - @Resource - private IGroupTypeOperation groupTypeOperation; - @Resource - private ComponentsUtils componentsUtils; - @Resource - private ToscaOperationFacade toscaOperationFacade; - - @Resource - private CommonImportManager commonImportManager; - - public Either<List<ImmutablePair<GroupTypeDefinition, Boolean>>, ResponseFormat> createGroupTypes(String groupTypesYml) { - return commonImportManager.createElementTypes(groupTypesYml, elementTypeYml -> createGroupTypesFromYml(elementTypeYml), groupTypesList -> createGroupTypesByDao(groupTypesList), ElementTypeEnum.GroupType); - } - - private Either<List<GroupTypeDefinition>, ActionStatus> createGroupTypesFromYml(String groupTypesYml) { - - return commonImportManager.createElementTypesFromYml(groupTypesYml, (groupTypeName, groupTypeJsonData) -> createGroupType(groupTypeName, groupTypeJsonData)); - } - - private Either<List<ImmutablePair<GroupTypeDefinition, Boolean>>, ResponseFormat> createGroupTypesByDao(List<GroupTypeDefinition> groupTypesToCreate) { - return commonImportManager.createElementTypesByDao(groupTypesToCreate, groupType -> validateGroupType(groupType), groupType -> new ImmutablePair<>(ElementTypeEnum.GroupType, groupType.getType()), - groupTypeName -> groupTypeOperation.getLatestGroupTypeByType(groupTypeName), groupType -> groupTypeOperation.addGroupType(groupType), null); - } - - private Either<ActionStatus, ResponseFormat> validateGroupType(GroupTypeDefinition groupType) { - Either<ActionStatus, ResponseFormat> result = Either.left(ActionStatus.OK); - if (groupType.getMembers() != null) { - if (groupType.getMembers().isEmpty()) { - ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.GROUP_MEMBER_EMPTY, groupType.getType()); - result = Either.right(responseFormat); - } else { - for (String member : groupType.getMembers()) { - // Verify that such Resource exist - Either<org.openecomp.sdc.be.model.Resource, StorageOperationStatus> eitherMemberExist = toscaOperationFacade.getLatestByToscaResourceName(member); - if (eitherMemberExist.isRight()) { - StorageOperationStatus operationStatus = eitherMemberExist.right().value(); - log.debug("Error when fetching parent resource {}, error: {}", member, operationStatus); - ActionStatus convertFromStorageResponse = componentsUtils.convertFromStorageResponse(operationStatus); - BeEcompErrorManager.getInstance().logBeComponentMissingError("Import GroupType", "resource", member); - result = Either.right(componentsUtils.getResponseFormat(convertFromStorageResponse, member)); - break; - } - } - - } - } - return result; - } - - private GroupTypeDefinition createGroupType(String groupTypeName, Map<String, Object> toscaJson) { - - GroupTypeDefinition groupType = new GroupTypeDefinition(); - - if (toscaJson != null) { - // Description - final Consumer<String> descriptionSetter = description -> groupType.setDescription(description); - commonImportManager.setField(toscaJson, ToscaTagNamesEnum.DESCRIPTION.getElementName(), descriptionSetter); - // Derived From - final Consumer<String> derivedFromSetter = derivedFrom -> groupType.setDerivedFrom(derivedFrom); - commonImportManager.setField(toscaJson, ToscaTagNamesEnum.DERIVED_FROM.getElementName(), derivedFromSetter); - // Properties - commonImportManager.setProperties(toscaJson, (values) -> groupType.setProperties(values)); - // Metadata - final Consumer<Map<String, String>> metadataSetter = metadata -> groupType.setMetadata(metadata); - commonImportManager.setField(toscaJson, ToscaTagNamesEnum.METADATA.getElementName(), metadataSetter); - // Members - final Consumer<List<String>> membersSetter = members -> groupType.setMembers(members); - commonImportManager.setField(toscaJson, ToscaTagNamesEnum.MEMBERS.getElementName(), membersSetter); - - groupType.setType(groupTypeName); - - groupType.setHighestVersion(true); - - groupType.setVersion(ImportUtils.Constants.FIRST_CERTIFIED_VERSION_VERSION); - } - return groupType; - } + public static void main(String[] args) { + + List<PropertyDefinition> properties = new ArrayList<>(); + PropertyDefinition propertyDefintion = new PropertyDefinition(); + propertyDefintion.setName("aaa"); + properties.add(propertyDefintion); + + List<String> allParentsProps = new ArrayList<>(); + allParentsProps.add("aaa"); + allParentsProps.add("bbb"); + + Set<String> alreadyExistPropsCollection = properties.stream().filter(p -> allParentsProps.contains(p.getName())).map(p -> p.getName()).collect(Collectors.toSet()); + System.out.println(alreadyExistPropsCollection); + + } + + private static final Logger log = LoggerFactory.getLogger(GroupTypeImportManager.class); + @Resource + private IGroupTypeOperation groupTypeOperation; + @Resource + private ComponentsUtils componentsUtils; + @Resource + private ToscaOperationFacade toscaOperationFacade; + + @Resource + private CommonImportManager commonImportManager; + + public Either<List<ImmutablePair<GroupTypeDefinition, Boolean>>, ResponseFormat> createGroupTypes(String groupTypesYml) { + return commonImportManager.createElementTypes(groupTypesYml, elementTypeYml -> createGroupTypesFromYml(elementTypeYml), groupTypesList -> createGroupTypesByDao(groupTypesList), ElementTypeEnum.GroupType); + } + + private Either<List<GroupTypeDefinition>, ActionStatus> createGroupTypesFromYml(String groupTypesYml) { + + return commonImportManager.createElementTypesFromYml(groupTypesYml, (groupTypeName, groupTypeJsonData) -> createGroupType(groupTypeName, groupTypeJsonData)); + } + + private Either<List<ImmutablePair<GroupTypeDefinition, Boolean>>, ResponseFormat> createGroupTypesByDao(List<GroupTypeDefinition> groupTypesToCreate) { + return commonImportManager.createElementTypesByDao(groupTypesToCreate, groupType -> validateGroupType(groupType), groupType -> new ImmutablePair<>(ElementTypeEnum.GroupType, groupType.getType()), + groupTypeName -> groupTypeOperation.getLatestGroupTypeByType(groupTypeName), groupType -> groupTypeOperation.addGroupType(groupType), groupTypeOperation::upgradeGroupType); + } + + private Either<ActionStatus, ResponseFormat> validateGroupType(GroupTypeDefinition groupType) { + Either<ActionStatus, ResponseFormat> result = Either.left(ActionStatus.OK); + if (groupType.getMembers() != null) { + if (groupType.getMembers().isEmpty()) { + ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.GROUP_MEMBER_EMPTY, groupType.getType()); + result = Either.right(responseFormat); + } else { + for (String member : groupType.getMembers()) { + // Verify that such Resource exist + Either<org.openecomp.sdc.be.model.Resource, StorageOperationStatus> eitherMemberExist = toscaOperationFacade.getLatestByToscaResourceName(member); + if (eitherMemberExist.isRight()) { + StorageOperationStatus operationStatus = eitherMemberExist.right().value(); + log.debug("Error when fetching parent resource {}, error: {}", member, operationStatus); + ActionStatus convertFromStorageResponse = componentsUtils.convertFromStorageResponse(operationStatus); + BeEcompErrorManager.getInstance().logBeComponentMissingError("Import GroupType", "resource", member); + result = Either.right(componentsUtils.getResponseFormat(convertFromStorageResponse, member)); + break; + } + } + + } + } + return result; + } + + private GroupTypeDefinition createGroupType(String groupTypeName, Map<String, Object> toscaJson) { + + GroupTypeDefinition groupType = new GroupTypeDefinition(); + + if (toscaJson != null) { + // Description + commonImportManager.setField(toscaJson, ToscaTagNamesEnum.DESCRIPTION.getElementName(), groupType::setDescription); + // Derived From + commonImportManager.setField(toscaJson, ToscaTagNamesEnum.DERIVED_FROM.getElementName(), groupType::setDerivedFrom); + // Properties + commonImportManager.setProperties(toscaJson, groupType::setProperties); + // Metadata + commonImportManager.setField(toscaJson, ToscaTagNamesEnum.METADATA.getElementName(), groupType::setMetadata); + // Capabilities + List<CapabilityTypeDefinition> capabilityTypes = createGroupCapabilityTypes(toscaJson); + groupType.setCapabilityTypes(capabilityTypes); + // Members + commonImportManager.setField(toscaJson, ToscaTagNamesEnum.MEMBERS.getElementName(), groupType::setMembers); + + groupType.setType(groupTypeName); + + groupType.setHighestVersion(true); + + groupType.setVersion(ImportUtils.Constants.FIRST_CERTIFIED_VERSION_VERSION); + } + return groupType; + } + + /** + * @param toscaJson + * @return + */ + private List<CapabilityTypeDefinition> createGroupCapabilityTypes(Map<String, Object> toscaJson) { + CapabilityTypeToscaJsonHolder capabilityTypeToscaJsonHolder = new CapabilityTypeToscaJsonHolder(); + commonImportManager.setField(toscaJson, ToscaTagNamesEnum.CAPABILITIES.getElementName(), capabilityTypeToscaJsonHolder::setCapabilityTypeToscaJson); + List<CapabilityTypeDefinition> capabilityTypes; + if (capabilityTypeToscaJsonHolder.isEmpty()) { + capabilityTypes = Collections.emptyList(); + } + else { + capabilityTypes = commonImportManager.createElementTypesFromToscaJsonMap(this::createGroupCapabilityType, capabilityTypeToscaJsonHolder.getCapabilityTypeToscaJson()); + } + return capabilityTypes; + } + + private class CapabilityTypeToscaJsonHolder { + private Map<String, Object> capabilityTypeToscaJson; + + public Map<String, Object> getCapabilityTypeToscaJson() { + return capabilityTypeToscaJson; + } + + public boolean isEmpty() { + return capabilityTypeToscaJson == null; + } + + public void setCapabilityTypeToscaJson(Map<String, Object> capabilityTypeToscaJson) { + this.capabilityTypeToscaJson = capabilityTypeToscaJson; + } + } + + private CapabilityTypeDefinition createGroupCapabilityType(String capabilityTypeName, Map<String, Object> toscaJson) { + CapabilityTypeDefinition capabilityType = new CapabilityTypeDefinition(); + + commonImportManager.setField(toscaJson, ToscaTagNamesEnum.TYPE.getElementName(), capabilityType::setType); + // Properties + commonImportManager.setPropertiesMap(toscaJson, capabilityType::setProperties); + + return capabilityType; + } } |