diff options
Diffstat (limited to 'catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/CapabilityOperation.java')
-rw-r--r-- | catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/CapabilityOperation.java | 1038 |
1 files changed, 0 insertions, 1038 deletions
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/CapabilityOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/CapabilityOperation.java index ad43c60b0f..a4be274781 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/CapabilityOperation.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/CapabilityOperation.java @@ -89,934 +89,8 @@ public class CapabilityOperation extends AbstractOperation implements ICapabilit this.titanGenericDao = titanGenericDao; } - @Override - public Either<CapabilityDefinition, StorageOperationStatus> addCapability(String resourceId, String capabilityName, CapabilityDefinition capabilityDefinition, boolean inTransaction) { - - Either<CapabilityDefinition, StorageOperationStatus> result = null; - - try { - - Either<CapabilityData, TitanOperationStatus> addCapStatus = addCapabilityToResource(resourceId, capabilityName, capabilityDefinition); - - if (addCapStatus.isRight()) { - log.debug("Failed to add capability {} [{}] to Graph", capabilityName, capabilityDefinition); - BeEcompErrorManager.getInstance().logBeFailedCreateNodeError("Add Capability", capabilityName, String.valueOf(addCapStatus.right().value())); - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(addCapStatus.right().value())); - return result; - } else { - CapabilityData capabilityData = addCapStatus.left().value(); - - String capabilityUid = capabilityData.getUniqueId(); - Either<CapabilityDefinition, StorageOperationStatus> capabilityRes = getCapability(capabilityUid, true); - log.debug("After fetching capability {} with uid {}. status is {}" ,capabilityName, capabilityUid,capabilityRes); - - if (capabilityRes.isRight()) { - StorageOperationStatus status = capabilityRes.right().value(); - log.debug("Failed to fetch capability {} with uid {}. status is {}", capabilityName, capabilityUid, status); - result = Either.right(status); - return result; - } - - CapabilityDefinition value = capabilityRes.left().value(); - log.debug("The returned CapabilityDefinition is {}", value); - result = Either.left(value); - - return result; - } - } finally { - if (false == inTransaction) { - if (result == null || result.isRight()) { - log.debug("Going to execute rollback on graph."); - BeEcompErrorManager.getInstance().logBeExecuteRollbackError("Rollback on graph"); - titanGenericDao.rollback(); - } else { - log.debug("Going to execute commit on graph."); - titanGenericDao.commit(); - } - } - } - - } - - @Override - public StorageOperationStatus addCapability(TitanVertex metadataVertex, String resourceId, String capabilityName, CapabilityDefinition capabilityDefinition, boolean inTransaction) { - - StorageOperationStatus result = StorageOperationStatus.OK; - try { - - TitanOperationStatus addCapStatus = addCapabilityToResource(metadataVertex, resourceId, capabilityName, capabilityDefinition); - - if (!addCapStatus.equals(TitanOperationStatus.OK)) { - log.debug("Failed to add capability {} [{}] to Graph", capabilityName, capabilityDefinition); - BeEcompErrorManager.getInstance().logBeFailedCreateNodeError("Add Capability", capabilityName, String.valueOf(addCapStatus)); - result = DaoStatusConverter.convertTitanStatusToStorageStatus(addCapStatus); - } - } finally { - if (false == inTransaction) { - if (result == null || !result.equals(TitanOperationStatus.OK)) { - log.debug("Going to execute rollback on graph."); - BeEcompErrorManager.getInstance().logBeExecuteRollbackError("Rollback on graph"); - titanGenericDao.rollback(); - } else { - log.debug("Going to execute commit on graph."); - titanGenericDao.commit(); - } - } - } - return result; - } - - private CapabilityDefinition convertCDataToCDefinition(CapabilityData capabilityData) { - - CapabilityDefinition capabilityDefinition = new CapabilityDefinition(); - capabilityDefinition.setType(capabilityData.getType()); - - return capabilityDefinition; - } - - @Override - public Either<CapabilityDefinition, StorageOperationStatus> getCapability(String uniqueId) { - - return getCapability(uniqueId, false); - } - - public Either<Map<String, CapabilityDefinition>, StorageOperationStatus> getAllCapabilitiesOfResource(String resourceId, boolean recursively, boolean inTransaction) { - - Map<String, CapabilityDefinition> capabilities = new HashMap<>(); - Either<Map<String, CapabilityDefinition>, StorageOperationStatus> result = null; - Set<String> caseInsensitiveCapabilityNames = new HashSet<>(); - - try { - TitanOperationStatus status = getAllCapabilitiesRecusive(NodeTypeEnum.Resource, resourceId, recursively, capabilities, caseInsensitiveCapabilityNames, inTransaction); - if (!status.equals(TitanOperationStatus.OK)) { - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - return result; - } - result = Either.left(capabilities); - return result; - } finally { - if (false == inTransaction) { - if (result == null || result.isRight()) { - log.debug("Going to execute rollback on graph."); - BeEcompErrorManager.getInstance().logBeExecuteRollbackError("Rollback on graph"); - titanGenericDao.rollback(); - } else { - log.debug("Going to execute commit on graph."); - titanGenericDao.commit(); - } - } - } - - } - - public TitanOperationStatus getAllCapabilitiesRecusive(NodeTypeEnum nodeType, String resourceId, boolean recursively, Map<String, CapabilityDefinition> capabilities, Set<String> caseInsensitiveCapabilityNames, boolean inTransaction) { - - TitanOperationStatus findStatus; - - if (recursively) { - findStatus = findAllCapabilitiesRecursively(resourceId, capabilities, caseInsensitiveCapabilityNames); - - } else { - findStatus = getCapabilitisOfResourceOnly(resourceId, capabilities, caseInsensitiveCapabilityNames); - } - if (!findStatus.equals(TitanOperationStatus.OK)) { - return findStatus; - } - - List<String> derivedFromList = new ArrayList<>(); - TitanOperationStatus fillResourceDerivedListFromGraph = fillResourceDerivedListFromGraph(resourceId, derivedFromList); - if (!fillResourceDerivedListFromGraph.equals(TitanOperationStatus.OK)) { - log.debug("fail to find all valid sources of capability. status = {}", fillResourceDerivedListFromGraph.name()); - return fillResourceDerivedListFromGraph; - } - capabilities.forEach((name, capability) -> capability.setCapabilitySources(derivedFromList)); - return TitanOperationStatus.OK; - } - - protected TitanOperationStatus findAllCapabilitiesRecursively(String resourceId, Map<String, CapabilityDefinition> capabilities, Set<String> caseInsensitiveCapabilityNames) { - - TitanOperationStatus resourceCapabilitiesStatus = getCapabilitisOfResourceOnly(resourceId, capabilities, caseInsensitiveCapabilityNames); - - if (!resourceCapabilitiesStatus.equals(TitanOperationStatus.OK)) { - return resourceCapabilitiesStatus; - } - - Either<ImmutablePair<ResourceMetadataData, GraphEdge>, TitanOperationStatus> parentNodes = titanGenericDao.getChild(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Resource), resourceId, GraphEdgeLabels.DERIVED_FROM, NodeTypeEnum.Resource, - ResourceMetadataData.class); - - if (parentNodes.isRight()) { - TitanOperationStatus parentNodesStatus = parentNodes.right().value(); - if (!parentNodesStatus.equals(TitanOperationStatus.NOT_FOUND)) { - log.debug("Failed to find parent capabilities of resource {}. status is {}", resourceId, parentNodesStatus); - BeEcompErrorManager.getInstance().logBeFailedFindParentError("Fetch parent capabilities", resourceId, String.valueOf(parentNodesStatus)); - return parentNodesStatus; - } - } - if (parentNodes.isLeft()) { - ImmutablePair<ResourceMetadataData, GraphEdge> parnetNodePair = parentNodes.left().value(); - String parentUniqueId = parnetNodePair.getKey().getMetadataDataDefinition().getUniqueId(); - TitanOperationStatus addParentIntStatus = findAllCapabilitiesRecursively(parentUniqueId, capabilities, caseInsensitiveCapabilityNames); - - if (addParentIntStatus != TitanOperationStatus.OK) { - log.debug("Failed to fetch all capabilities of resource {}", parentUniqueId); - return addParentIntStatus; - } - } - return TitanOperationStatus.OK; - } - - private TitanOperationStatus getCapabilitisOfResourceOnly(String resourceId, Map<String, CapabilityDefinition> capabilities, Set<String> caseInsensitiveCapabilityNames) { - Either<List<ImmutablePair<CapabilityData, GraphEdge>>, TitanOperationStatus> allCapabilitiesRes = getAllCapabilitiesPairs(resourceId); - if (allCapabilitiesRes.isRight()) { - TitanOperationStatus status = allCapabilitiesRes.right().value(); - log.debug("After fetching all capabilities of resource {}. status is {}", resourceId, status); - if (status.equals(TitanOperationStatus.NOT_FOUND)) { - status = TitanOperationStatus.OK; - } - return status; - } - - List<ImmutablePair<CapabilityData, GraphEdge>> capabilityPairs = allCapabilitiesRes.left().value(); - - if (capabilityPairs != null) { - for (ImmutablePair<CapabilityData, GraphEdge> capabilityPair : capabilityPairs) { - CapabilityData capabilityData = capabilityPair.getKey(); - GraphEdge graphEdge = capabilityPair.getValue(); - Map<String, Object> edgeProps = graphEdge.getProperties(); - if (edgeProps != null) { - String capabilityName = (String) edgeProps.get(GraphPropertiesDictionary.NAME.getProperty()); - if (capabilityName == null) { - log.error("Capability name was not found for capability {}", capabilityData.getUniqueId()); - return TitanOperationStatus.INVALID_ELEMENT; - } - Either<CapabilityDefinition, TitanOperationStatus> capabilityDefRes = getCapabilityByCapabilityData(capabilityData); - if (capabilityDefRes.isRight()) { - TitanOperationStatus status = capabilityDefRes.right().value(); - return status; - } - CapabilityDefinition capabilityDefinition = capabilityDefRes.left().value(); - capabilityDefinition.setOwnerId(resourceId); - log.debug("Before adding capability {} with definition {} to result.", capabilityName, capabilityDefinition); - // US631462 - if (caseInsensitiveCapabilityNames.contains(capabilityName.toLowerCase())) { - log.debug("The capability {} was already defined in derived resource (case insensitive). Ignore {} from resource {}", capabilityName, capabilityName, resourceId); - } else { - capabilities.put(capabilityName, capabilityDefinition); - caseInsensitiveCapabilityNames.add(capabilityName.toLowerCase()); - } - } else { - log.debug("Capability name was not found for capability {}", capabilityData.getUniqueId()); - BeEcompErrorManager.getInstance().logBeFailedRetrieveNodeError("Fetch Capability", capabilityData.getUniqueId(), String.valueOf(TitanOperationStatus.INVALID_ELEMENT)); - return TitanOperationStatus.INVALID_ELEMENT; - } - - } - } - return TitanOperationStatus.OK; - } - - @Override - public Either<CapabilityDefinition, StorageOperationStatus> getCapability(String uniqueId, boolean inTransaction) { - - Either<CapabilityDefinition, StorageOperationStatus> result = null; - - try { - Either<CapabilityData, TitanOperationStatus> capabiltyRes = titanGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Capability), uniqueId, CapabilityData.class); - if (capabiltyRes.isRight()) { - TitanOperationStatus status = capabiltyRes.right().value(); - log.debug("Failed to retrieve capability {} from graph. status is {}", uniqueId, status); - - BeEcompErrorManager.getInstance().logBeFailedRetrieveNodeError("Fetch Capability", uniqueId, String.valueOf(status)); - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - return result; - } - CapabilityData capabilityData = capabiltyRes.left().value(); - CapabilityDefinition capabilityDefinition = new CapabilityDefinition(); - capabilityDefinition.setDescription(capabilityData.getDescription()); - capabilityDefinition.setUniqueId(capabilityData.getUniqueId()); - capabilityDefinition.setValidSourceTypes(capabilityData.getValidSourceTypes()); - capabilityDefinition.setMinOccurrences(capabilityData.getMinOccurrences()); - capabilityDefinition.setMaxOccurrences(capabilityData.getMaxOccurrences()); - - Either<CapabilityTypeData, TitanOperationStatus> capabilityTypeRes = getCapabilityTypeOfCapability(uniqueId); - if (capabilityTypeRes.isRight()) { - TitanOperationStatus status = capabilityTypeRes.right().value(); - log.debug("Failed to retrieve capability type of capability {}. status is {}", uniqueId, status); - BeEcompErrorManager.getInstance().logBeFailedRetrieveNodeError("Fetch Capability", uniqueId, String.valueOf(status)); - - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - return result; - } - - CapabilityTypeData capabilityTypeData = capabilityTypeRes.left().value(); - capabilityDefinition.setType(capabilityTypeData.getCapabilityTypeDataDefinition().getType()); - - Either<ImmutablePair<ResourceMetadataData, GraphEdge>, TitanOperationStatus> parentNode = titanGenericDao.getParentNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Capability), uniqueId, GraphEdgeLabels.CAPABILITY, - NodeTypeEnum.Resource, ResourceMetadataData.class); - if (parentNode.isRight()) { - return Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(parentNode.right().value())); - } else { - ImmutablePair<ResourceMetadataData, GraphEdge> pair = parentNode.left().value(); - capabilityDefinition.setOwnerId(pair.left.getMetadataDataDefinition().getUniqueId()); - List<String> derivedFromList = new ArrayList<>(); - TitanOperationStatus fillResourceDerivedListFromGraph = fillResourceDerivedListFromGraph(pair.left.getMetadataDataDefinition().getUniqueId(), derivedFromList); - if (fillResourceDerivedListFromGraph.equals(TitanOperationStatus.OK)) { - capabilityDefinition.setCapabilitySources(derivedFromList); - } - } - - Either<List<PropertyDefinition>, TitanOperationStatus> getPropertiesRes = getPropertiesOfCapability(uniqueId, capabilityTypeData.getCapabilityTypeDataDefinition().getType()); - if (getPropertiesRes.isRight() && !getPropertiesRes.right().value().equals(TitanOperationStatus.NOT_FOUND)) { - TitanOperationStatus status = getPropertiesRes.right().value(); - log.debug("Failed to retrieve properties of capability {}. status is {}", uniqueId, status); - BeEcompErrorManager.getInstance().logBeFailedRetrieveNodeError("Fetch Properties of Capability", uniqueId, String.valueOf(status)); - - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - return result; - } - if (getPropertiesRes.isLeft()) { - List<ComponentInstanceProperty> properties = new ArrayList<>(); - for (PropertyDefinition property : getPropertiesRes.left().value()) { - properties.add(new ComponentInstanceProperty(property, null, null)); - } - capabilityDefinition.setProperties(properties); - } - result = Either.left(capabilityDefinition); - - return result; - - } finally { - if (false == inTransaction) { - if (result == null || result.isRight()) { - log.debug("Going to execute rollback on graph."); - BeEcompErrorManager.getInstance().logBeExecuteRollbackError("Rollback on graph"); - titanGenericDao.rollback(); - } else { - log.debug("Going to execute commit on graph."); - titanGenericDao.commit(); - } - } - } - - } - - private TitanOperationStatus fillResourceDerivedListFromGraph(String uniqueId, List<String> derivedFromList) { - - Either<ResourceMetadataData, TitanOperationStatus> resourceNode = titanGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Resource), uniqueId, ResourceMetadataData.class); - - if (resourceNode.isRight()) { - TitanOperationStatus parentNodesStatus = resourceNode.right().value(); - if (!parentNodesStatus.equals(TitanOperationStatus.NOT_FOUND)) { - log.debug("Failed to find resource {} . status is {}", uniqueId, parentNodesStatus); - return parentNodesStatus; - } - } - - derivedFromList.add(((ResourceMetadataDataDefinition) resourceNode.left().value().getMetadataDataDefinition()).getToscaResourceName()); - Either<List<ImmutablePair<ResourceMetadataData, GraphEdge>>, TitanOperationStatus> childrenNodes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Resource), uniqueId, GraphEdgeLabels.DERIVED_FROM, - NodeTypeEnum.Resource, ResourceMetadataData.class); - - if (childrenNodes.isRight() && (childrenNodes.right().value() != TitanOperationStatus.NOT_FOUND)) { - return childrenNodes.right().value(); - } else if (childrenNodes.isLeft()) { - - List<ImmutablePair<ResourceMetadataData, GraphEdge>> pairList = childrenNodes.left().value(); - for (ImmutablePair<ResourceMetadataData, GraphEdge> pair : pairList) { - return fillResourceDerivedListFromGraph(pair.left.getMetadataDataDefinition().getUniqueId(), derivedFromList); - } - } - return TitanOperationStatus.OK; - } - - public Either<CapabilityDefinition, TitanOperationStatus> getCapabilityByCapabilityData(CapabilityData capabilityData) { - - Either<CapabilityDefinition, TitanOperationStatus> result; - - CapabilityDefinition capabilityDefinition = new CapabilityDefinition(); - capabilityDefinition.setDescription(capabilityData.getDescription()); - capabilityDefinition.setUniqueId(capabilityData.getUniqueId()); - capabilityDefinition.setValidSourceTypes(capabilityData.getValidSourceTypes()); - capabilityDefinition.setMinOccurrences(capabilityData.getMinOccurrences()); - capabilityDefinition.setMaxOccurrences(capabilityData.getMaxOccurrences()); - - String capabilityUid = capabilityData.getUniqueId(); - Either<CapabilityTypeData, TitanOperationStatus> capabilityTypeRes = getCapabilityTypeOfCapability(capabilityUid); - if (capabilityTypeRes.isRight()) { - TitanOperationStatus status = capabilityTypeRes.right().value(); - log.debug("Failed to retrieve capability type of capability {} . status is {}", capabilityUid, status); - BeEcompErrorManager.getInstance().logBeFailedRetrieveNodeError("Fetch Capability", capabilityUid, String.valueOf(status)); - - return Either.right(status); - } - - CapabilityTypeData capabilityTypeData = capabilityTypeRes.left().value(); - capabilityDefinition.setType(capabilityTypeData.getCapabilityTypeDataDefinition().getType()); - - Either<List<PropertyDefinition>, TitanOperationStatus> capabilityPropertiesRes = getPropertiesOfCapability(capabilityUid, capabilityDefinition.getType()); - if (capabilityPropertiesRes.isRight() && !capabilityPropertiesRes.right().value().equals(TitanOperationStatus.NOT_FOUND)) { - TitanOperationStatus status = capabilityPropertiesRes.right().value(); - log.debug("Failed to retrieve properties of capability {} . status is {}", capabilityUid, status); - BeEcompErrorManager.getInstance().logBeFailedRetrieveNodeError("Fetch Capability", capabilityUid, String.valueOf(status)); - - result = Either.right(status); - return result; - } - if (capabilityPropertiesRes.isLeft()) { - List<ComponentInstanceProperty> properties = new ArrayList<>(); - for (PropertyDefinition property : capabilityPropertiesRes.left().value()) { - properties.add(new ComponentInstanceProperty(property, null, null)); - } - capabilityDefinition.setProperties(properties); - } - result = Either.left(capabilityDefinition); - return result; - } - - public Either<CapabilityDefinition, TitanOperationStatus> getCapabilityByCapabilityData(TitanVertex capabilityDataVertex) { - - Either<CapabilityDefinition, TitanOperationStatus> result; - - CapabilityDefinition capabilityDefinition = new CapabilityDefinition(); - Map<String, Object> props = titanGenericDao.getProperties(capabilityDataVertex); - CapabilityData capabilityData = GraphElementFactory.createElement((String) props.get(GraphPropertiesDictionary.LABEL.getProperty()), GraphElementTypeEnum.Node, props, CapabilityData.class); - capabilityDefinition.setDescription(capabilityData.getDescription()); - capabilityDefinition.setUniqueId(capabilityData.getUniqueId()); - capabilityDefinition.setValidSourceTypes(capabilityData.getValidSourceTypes()); - capabilityDefinition.setMinOccurrences(capabilityData.getMinOccurrences()); - capabilityDefinition.setMaxOccurrences(capabilityData.getMaxOccurrences()); - - String capabilityUid = capabilityData.getUniqueId(); - Either<CapabilityTypeData, TitanOperationStatus> capabilityTypeRes = getCapabilityTypeOfCapability(capabilityUid); - if (capabilityTypeRes.isRight()) { - TitanOperationStatus status = capabilityTypeRes.right().value(); - log.debug("Failed to retrieve capability type of capability {} . status is {}", capabilityUid, status); - BeEcompErrorManager.getInstance().logBeFailedRetrieveNodeError("Fetch Capability", capabilityUid, String.valueOf(status)); - - return Either.right(status); - } - - CapabilityTypeData capabilityTypeData = capabilityTypeRes.left().value(); - capabilityDefinition.setType(capabilityTypeData.getCapabilityTypeDataDefinition().getType()); - - Either<List<PropertyDefinition>, TitanOperationStatus> capabilityPropertiesRes = getPropertiesOfCapability(capabilityUid, capabilityDefinition.getType()); - if (capabilityPropertiesRes.isRight() && !capabilityPropertiesRes.right().value().equals(TitanOperationStatus.NOT_FOUND)) { - TitanOperationStatus status = capabilityPropertiesRes.right().value(); - log.debug("Failed to retrieve properties of capability {} . status is {}", capabilityUid, status); - BeEcompErrorManager.getInstance().logBeFailedRetrieveNodeError("Fetch Capability", capabilityUid, String.valueOf(status)); - - result = Either.right(status); - return result; - } - if (capabilityPropertiesRes.isLeft()) { - List<ComponentInstanceProperty> properties = new ArrayList<>(); - for (PropertyDefinition property : capabilityPropertiesRes.left().value()) { - properties.add(new ComponentInstanceProperty(property, null, null)); - } - capabilityDefinition.setProperties(properties); - } - result = Either.left(capabilityDefinition); - return result; - } - - public Either<List<PropertyDefinition>, TitanOperationStatus> getPropertiesOfCapability(String capabilityUid, String capabilityType) { - log.debug("Before getting properties of capability {} from graph " , capabilityUid); - - List<PropertyDefinition> properties; - Either<List<PropertyDefinition>, TitanOperationStatus> result = null; - Either<Map<String, PropertyDefinition>, TitanOperationStatus> getPropertiesOfCapabilityTypeRes = null; - Either<List<ImmutablePair<PropertyData, GraphEdge>>, TitanOperationStatus> getPropertiesOfCapabilityRes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Capability), capabilityUid, GraphEdgeLabels.PROPERTY, - NodeTypeEnum.Property, PropertyData.class); - if (getPropertiesOfCapabilityRes.isRight() && !getPropertiesOfCapabilityRes.right().value().equals(TitanOperationStatus.NOT_FOUND)) { - TitanOperationStatus status = getPropertiesOfCapabilityRes.right().value(); - log.debug("failed to get properties of capability with id {}. status={}", capabilityUid, status); - result = Either.right(status); - } - if (result == null) { - String capabilityTypeUid = UniqueIdBuilder.buildCapabilityTypeUid(capabilityType); - getPropertiesOfCapabilityTypeRes = getAllCapabilityTypePropertiesFromAllDerivedFrom(capabilityTypeUid); - if (getPropertiesOfCapabilityTypeRes.isRight() && !getPropertiesOfCapabilityTypeRes.right().value().equals(TitanOperationStatus.NOT_FOUND)) { - TitanOperationStatus status = getPropertiesOfCapabilityTypeRes.right().value(); - log.error("Failed to retrieve properties for capability type {} from graph. status is {}", capabilityType, status); - result = Either.right(status); - } - } - if (result == null) { - result = getPropertiesOfCapabilityTypeRes.isRight() - ? (getPropertiesOfCapabilityRes.isRight() ? Either.right(TitanOperationStatus.NOT_FOUND) - : Either.left(getPropertiesOfCapabilityRes.left().value().stream().map(p -> propertyOperation.convertPropertyDataToPropertyDefinition(p.getKey(), null, capabilityUid)).collect(Collectors.toList()))) - : (getPropertiesOfCapabilityRes.isRight() ? Either.left(getPropertiesOfCapabilityTypeRes.left().value().values().stream().collect(Collectors.toList())) : null); - } - if (result == null) { - Map<String, PropertyDefinition> propertiesOfCapabilityType = getPropertiesOfCapabilityTypeRes.left().value(); - properties = getPropertiesOfCapabilityRes.left().value().stream() - .map(p -> propertyOperation.convertPropertyDataToPropertyDefinition(p.getKey(), (String) p.getRight().getProperties().get(GraphPropertiesDictionary.NAME.getProperty()), capabilityUid)).collect(Collectors.toList()); - properties.stream().forEach(p -> propertiesOfCapabilityType.remove(p.getName())); - properties.addAll(propertiesOfCapabilityType.values()); - result = Either.left(properties); - } - return result; - } - - @Override - public Either<CapabilityTypeData, TitanOperationStatus> getCapabilityTypeOfCapability(String uniqueId) { - - Either<ImmutablePair<CapabilityTypeData, GraphEdge>, TitanOperationStatus> capabilityTypeRes = titanGenericDao.getChild(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Capability), uniqueId, GraphEdgeLabels.TYPE_OF, NodeTypeEnum.CapabilityType, - CapabilityTypeData.class); - - if (capabilityTypeRes.isRight()) { - TitanOperationStatus status = capabilityTypeRes.right().value();// - log.debug("Cannot find capability type associated with capability {}. status is {}", uniqueId, status); - BeEcompErrorManager.getInstance().logBeFailedFindAssociationError("Fetch Capability type", NodeTypeEnum.CapabilityType.getName(), uniqueId, String.valueOf(status)); - return Either.right(capabilityTypeRes.right().value()); - } - - CapabilityTypeData capabilityTypeData = capabilityTypeRes.left().value().getKey(); - - return Either.left(capabilityTypeData); - - } - - @Override - public Either<CapabilityDefinition, StorageOperationStatus> getCapability(String capabilityName, String resourceId) { - return getCapability(UniqueIdBuilder.buildCapabilityUid(resourceId, capabilityName)); - } - - @Override - public Either<CapabilityDefinition, StorageOperationStatus> getCapability(String capabilityName, String resourceId, boolean inTransaction) { - return getCapability(UniqueIdBuilder.buildCapabilityUid(resourceId, capabilityName), inTransaction); - } - - @Override - public Either<List<ImmutablePair<CapabilityData, GraphEdge>>, TitanOperationStatus> getAllCapabilitiesPairs(String resourceId) { - - Either<List<ImmutablePair<CapabilityData, GraphEdge>>, TitanOperationStatus> capabilitiesNodes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Resource), resourceId, GraphEdgeLabels.CAPABILITY, - NodeTypeEnum.Capability, CapabilityData.class); - - log.debug("After looking for all capabilities under resource {}. status is {}" , resourceId , capabilitiesNodes); - if (capabilitiesNodes.isRight()) { - TitanOperationStatus status = capabilitiesNodes.right().value(); - return Either.right(status); - } - - List<ImmutablePair<CapabilityData, GraphEdge>> capabilities = capabilitiesNodes.left().value(); - if (capabilities == null || true == capabilities.isEmpty()) { - return Either.right(TitanOperationStatus.NOT_FOUND); - } - - return Either.left(capabilitiesNodes.left().value()); - } - - private Either<CapabilityData, TitanOperationStatus> addCapabilityToResource(String resourceId, String capabilityName, CapabilityDefinition capabilityDefinition) { - - log.debug("Going to add capability {} [ {} ] to resource uid {}" , capabilityName, capabilityDefinition, resourceId); - - Either<CapabilityData, TitanOperationStatus> createCapRes = createCapability(resourceId, capabilityName, capabilityDefinition); - - log.debug("After creating capability node in graph. status is {}", createCapRes); - if (createCapRes.isRight()) { - TitanOperationStatus status = createCapRes.right().value(); - log.error("Failed to create capability data node in graph. status is {}", status); - return Either.right(status); - } - CapabilityData capabilityData = createCapRes.left().value(); - - String capabilityType = capabilityDefinition.getType(); - - log.debug("Going to associate capability {} to its capabilityType {}", capabilityName, capabilityType); - - Either<GraphRelation, TitanOperationStatus> associateCapabilityTypeRes = associateCapabilityToCapabilityType(capabilityData, capabilityType); - log.debug("After associating capability {} to its capabilityType {}. status is {}", capabilityName, capabilityType, associateCapabilityTypeRes); - if (associateCapabilityTypeRes.isRight()) { - TitanOperationStatus status = associateCapabilityTypeRes.right().value(); - log.error("Failed to associate capability {} to its capabilityType {} in graph. status is {} ", capabilityName, capabilityType, status); - - return Either.right(status); - } - List<ComponentInstanceProperty> ciProperties = capabilityDefinition.getProperties(); - if (ciProperties != null && !ciProperties.isEmpty()) { - List<PropertyDefinition> properties = ciProperties.stream().map(prop -> new PropertyDefinition(prop)).collect(Collectors.toList()); - Either<Map<String, PropertyData>, TitanOperationStatus> addPropertiesRes = addPropertiesToCapability(capabilityData, capabilityType, properties); - if (addPropertiesRes.isRight()) { - TitanOperationStatus operationStatus = addPropertiesRes.right().value(); - return Either.right(operationStatus); - } - } - - Either<GraphRelation, TitanOperationStatus> associateResourceRes = associateResourceToCapability(resourceId, capabilityName, capabilityData); - if (associateResourceRes.isRight()) { - TitanOperationStatus status = associateResourceRes.right().value(); - log.error("Failed to associate resource {} to capability {}. status is {}", resourceId, capabilityData, status); - return Either.right(status); - } - - return Either.left(capabilityData); - - } - - private TitanOperationStatus addCapabilityToResource(TitanVertex metadataVertex, String resourceId, String capabilityName, CapabilityDefinition capabilityDefinition) { - - log.debug("Going to add capability {} [ {} ] to resource uid {}", capabilityName, capabilityDefinition, resourceId); - - Either<TitanVertex, TitanOperationStatus> createCapRes = createCapabilityVertex(resourceId, capabilityName, capabilityDefinition); - - log.debug("After creating capability node in graph. status is {}", createCapRes); - if (createCapRes.isRight()) { - TitanOperationStatus status = createCapRes.right().value(); - log.error("Failed to create capability data node in graph. status is {}", status); - return status; - } - TitanVertex capabilityVertex = createCapRes.left().value(); - - String capabilityType = capabilityDefinition.getType(); - - log.debug("Going to associate capability {} to its capabilityType {}", capabilityName, capabilityType); - - TitanOperationStatus associateCapabilityTypeRes = associateCapabilityToCapabilityType(capabilityVertex, capabilityType); - log.debug("After associating capability {} to its capabilityType {}. status is {}", capabilityName, capabilityType, associateCapabilityTypeRes); - if (!associateCapabilityTypeRes.equals(TitanOperationStatus.OK)) { - log.error("Failed to associate capability {} to its capabilityType {} in graph. status is {} ", capabilityName, capabilityType, associateCapabilityTypeRes); - return associateCapabilityTypeRes; - } - List<ComponentInstanceProperty> ciProperties = capabilityDefinition.getProperties(); - if (ciProperties != null && !ciProperties.isEmpty()) { - String capabiltyId = (String) titanGenericDao.getProperty(capabilityVertex, GraphPropertiesDictionary.UNIQUE_ID.getProperty()); - List<PropertyDefinition> properties = ciProperties.stream().map(prop -> new PropertyDefinition(prop)).collect(Collectors.toList()); - TitanOperationStatus addPropertiesRes = addPropertiesToCapability(capabilityVertex, capabilityType, properties, capabiltyId); - if (!addPropertiesRes.equals(TitanOperationStatus.OK)) { - return addPropertiesRes; - } - } - - TitanOperationStatus associateResourceRes = associateResourceToCapability(resourceId, capabilityName, capabilityVertex, metadataVertex); - if (!associateResourceRes.equals(TitanOperationStatus.OK)) { - log.error("Failed to associate resource{} to capability {}. status is {} ", resourceId, capabilityName, associateResourceRes); - } - - return associateResourceRes; - - } - - private Either<GraphRelation, TitanOperationStatus> associateCapabilityToCapabilityType(CapabilityData capabilityData, String capabilityType) { - UniqueIdData capabilityTypeIdData = new UniqueIdData(NodeTypeEnum.CapabilityType, UniqueIdBuilder.buildCapabilityTypeUid(capabilityType)); - log.debug("Before associating {} to capability type {}.", capabilityData, capabilityType); - Either<GraphRelation, TitanOperationStatus> createRelResult = titanGenericDao.createRelation(capabilityData, capabilityTypeIdData, GraphEdgeLabels.TYPE_OF, null); - log.debug("After associating {} to capability type {}. status is {}" , capabilityData, capabilityType, createRelResult); - if (createRelResult.isRight()) { - TitanOperationStatus operationStatus = createRelResult.right().value(); - log.error("Failed to associate capability {} to capability type {} in graph. status is {}", capabilityData, capabilityTypeIdData, operationStatus); - return Either.right(operationStatus); - } - return Either.left(createRelResult.left().value()); - - } - - private TitanOperationStatus associateCapabilityToCapabilityType(TitanVertex capabilityVertex, String capabilityType) { - - UniqueIdData capabilityTypeIdData = new UniqueIdData(NodeTypeEnum.CapabilityType, UniqueIdBuilder.buildCapabilityTypeUid(capabilityType)); - - log.debug("Before associating {} to capability type {}.", capabilityVertex, capabilityType); - TitanOperationStatus createRelResult = titanGenericDao.createEdge(capabilityVertex, capabilityTypeIdData, GraphEdgeLabels.TYPE_OF, null); - log.trace("After associating {} to capability type {}. status is {}", capabilityVertex, capabilityType, createRelResult); - if (!createRelResult.equals(TitanOperationStatus.OK)) { - log.error("Failed to associate capability {} to capability type {} in graph. status is {}", capabilityVertex, capabilityTypeIdData, createRelResult); - } - return createRelResult; - } - - private Either<GraphRelation, TitanOperationStatus> associateResourceToCapability(String resourceId, String capabilityName, CapabilityData capabilityData) { - - UniqueIdData resourceIdData = new UniqueIdData(NodeTypeEnum.Resource, resourceId); - - log.debug("Before associating resource {} to capability {}.", resourceId, capabilityData); - Map<String, Object> props = new HashMap<>(); - props.put(GraphPropertiesDictionary.NAME.getProperty(), capabilityName); - Either<GraphRelation, TitanOperationStatus> createRelResult = titanGenericDao.createRelation(resourceIdData, capabilityData, GraphEdgeLabels.CAPABILITY, props); - log.debug("After associating resource {} to capability {}. status is {}" , resourceId, capabilityData, createRelResult); - if (createRelResult.isRight()) { - TitanOperationStatus operationStatus = createRelResult.right().value(); - log.error("Failed to associate resource {} to capability {} in graph. status is {}", resourceId, capabilityData, operationStatus); - return Either.right(operationStatus); - } - - return Either.left(createRelResult.left().value()); - - } - - private TitanOperationStatus associateResourceToCapability(String resourceId, String capabilityName, TitanVertex capabilityVertex, TitanVertex resourceVertex) { - - log.debug("Before associating resource {} to capability {}.", resourceId, capabilityName); - Map<String, Object> props = new HashMap<>(); - props.put(GraphPropertiesDictionary.NAME.getProperty(), capabilityName); - TitanOperationStatus createRelResult = titanGenericDao.createEdge(resourceVertex, capabilityVertex, GraphEdgeLabels.CAPABILITY, props); - log.debug("After associating resource {} to capability {}. status is {}", resourceId, capabilityName, createRelResult); - if (!createRelResult.equals(TitanOperationStatus.OK)) { - log.error("Failed to associate resource {} to capability {} in graph. status is {}", resourceId, capabilityName, createRelResult); - } - - return createRelResult; - - } - - /** - * - * create capability node in the graph - * - * @param resourceId - * @param capabilityName - * @param capabilityDefinition - * @return - */ - private Either<CapabilityData, TitanOperationStatus> createCapability(String resourceId, String capabilityName, CapabilityDefinition capabilityDefinition) { - - CapabilityData capabilityData = new CapabilityData(); - String uid = UniqueIdBuilder.buildCapabilityUid(resourceId, capabilityName); - capabilityData.setUniqueId(uid); - Long creationTime = System.currentTimeMillis(); - capabilityData.setCreationTime(creationTime); - capabilityData.setModificationTime(creationTime); - capabilityData.setValidSourceTypes(capabilityDefinition.getValidSourceTypes()); - capabilityData.setMinOccurrences(capabilityDefinition.getMinOccurrences()); - capabilityData.setMaxOccurrences(capabilityDefinition.getMaxOccurrences()); - capabilityData.setDescription(capabilityDefinition.getDescription()); - - Either<CapabilityData, TitanOperationStatus> createNode = titanGenericDao.createNode(capabilityData, CapabilityData.class); - - log.debug("After creating capability node in the graph. status is {}", createNode); - - return createNode; - } - - private Either<TitanVertex, TitanOperationStatus> createCapabilityVertex(String resourceId, String capabilityName, CapabilityDefinition capabilityDefinition) { - - CapabilityData capabilityData = new CapabilityData(); - String uid = UniqueIdBuilder.buildCapabilityUid(resourceId, capabilityName); - capabilityData.setUniqueId(uid); - Long creationTime = System.currentTimeMillis(); - capabilityData.setCreationTime(creationTime); - capabilityData.setModificationTime(creationTime); - capabilityData.setValidSourceTypes(capabilityDefinition.getValidSourceTypes()); - capabilityData.setMinOccurrences(capabilityDefinition.getMinOccurrences()); - capabilityData.setMaxOccurrences(capabilityDefinition.getMaxOccurrences()); - capabilityData.setDescription(capabilityDefinition.getDescription()); - - Either<TitanVertex, TitanOperationStatus> createNode = titanGenericDao.createNode(capabilityData); - - log.debug("After creating capability node in the graph. status is {}", createNode); - - return createNode; - } @Override - public Either<CapabilityDefinition, StorageOperationStatus> addCapability(String resourceId, String capabilityName, CapabilityDefinition capabilityDefinition) { - - return addCapability(resourceId, capabilityName, capabilityDefinition, false); - - } - - public StorageOperationStatus deleteCapabilityFromGraph(String capabilityUid) { - - TitanOperationStatus resultStatus = null; - - Either<List<ImmutablePair<PropertyData, GraphEdge>>, TitanOperationStatus> deletePropertiesStatus = deletePropertiesOfCapability(capabilityUid); - - if (deletePropertiesStatus.isRight() && !deletePropertiesStatus.right().value().equals(TitanOperationStatus.NOT_FOUND)) { - resultStatus = deletePropertiesStatus.right().value(); - } - if (resultStatus == null) { - log.debug("Before deleting capability from graph {}" , capabilityUid); - Either<CapabilityData, TitanOperationStatus> deleteNodeStatus = titanGenericDao.deleteNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Capability), capabilityUid, CapabilityData.class); - if (deleteNodeStatus.isRight()) { - resultStatus = deleteNodeStatus.right().value(); - } - } - if (resultStatus != null) { - log.debug("failed to delete capability with id {}. status={}", capabilityUid, resultStatus); - BeEcompErrorManager.getInstance().logBeFailedDeleteNodeError("Delete capability", capabilityUid, String.valueOf(resultStatus)); - return DaoStatusConverter.convertTitanStatusToStorageStatus(resultStatus); - } - return StorageOperationStatus.OK; - } - - public Either<Map<String, CapabilityDefinition>, StorageOperationStatus> deleteAllCapabilities(String resourceId, boolean inTransaction) { - - Either<Map<String, CapabilityDefinition>, StorageOperationStatus> result = null; - try { - - Either<Map<String, CapabilityDefinition>, TitanOperationStatus> deleteAllRes = deleteAllCapabilitiesOfResource(resourceId); - if (deleteAllRes.isRight()) { - TitanOperationStatus status = deleteAllRes.right().value(); - if (status != TitanOperationStatus.NOT_FOUND) { - log.debug("Failed to delete capabilities of resource {}. status is {}", resourceId, status); - } - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - return result; - } - - Map<String, CapabilityDefinition> value = deleteAllRes.left().value(); - result = Either.left(value); - return result; - - } finally { - if (false == inTransaction) { - if (result == null || result.isRight()) { - log.debug("Going to execute rollback on graph."); - BeEcompErrorManager.getInstance().logBeExecuteRollbackError("Rollback on graph"); - titanGenericDao.rollback(); - } else { - log.debug("Going to execute commit on graph."); - titanGenericDao.commit(); - } - } - } - } - - public Either<Map<String, CapabilityDefinition>, StorageOperationStatus> deleteAllCapabilities(String resourceId) { - - return deleteAllCapabilities(resourceId, false); - - } - - private Either<Map<String, CapabilityDefinition>, TitanOperationStatus> deleteAllCapabilitiesOfResource(String resourceId) { - TitanOperationStatus resultStatus = null; - Map<String, CapabilityDefinition> capabilities = new HashMap<>(); - Set<String> caseInsensitiveCapabilityNames = new HashSet<>(); - TitanOperationStatus capabilitisRes = getCapabilitisOfResourceOnly(resourceId, capabilities, caseInsensitiveCapabilityNames); - if (capabilitisRes != TitanOperationStatus.OK) { - return Either.right(capabilitisRes); - } - - if (capabilities.isEmpty()) { - return Either.right(TitanOperationStatus.NOT_FOUND); - } - - for (Entry<String, CapabilityDefinition> entry : capabilities.entrySet()) { - CapabilityDefinition capabilityDefinition = entry.getValue(); - String capabilityUid = capabilityDefinition.getUniqueId(); - - log.debug("Before deleting properties of capability {} from graph " , capabilityUid); - - Either<List<ImmutablePair<PropertyData, GraphEdge>>, TitanOperationStatus> deletePropertiesStatus = deletePropertiesOfCapability(capabilityUid); - if (deletePropertiesStatus.isRight() && !deletePropertiesStatus.right().value().equals(TitanOperationStatus.NOT_FOUND)) { - resultStatus = deletePropertiesStatus.right().value(); - } - if (resultStatus == null) { - Either<CapabilityData, TitanOperationStatus> deleteNodeRes = titanGenericDao.deleteNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Capability), capabilityUid, CapabilityData.class); - if (deleteNodeRes.isRight()) { - resultStatus = deleteNodeRes.right().value(); - } - } - if (resultStatus != null) { - log.debug("Failed to delete capability {} of resource {}", capabilityUid, resourceId); - BeEcompErrorManager.getInstance().logBeFailedDeleteNodeError("Delete capability", capabilityUid, String.valueOf(resultStatus)); - return Either.right(resultStatus); - } - } - - return Either.left(capabilities); - - } - - public Map<String, List<CapabilityDefinition>> convertCapabilityMap(Map<String, CapabilityDefinition> capabilityMap, String ownerId, String ownerName) { - - Map<String, List<CapabilityDefinition>> typeToRequirementMap = new HashMap<>(); - capabilityMap.forEach((capabilityName, capability) -> { - capability.setName(capabilityName); - if (typeToRequirementMap.containsKey(capability.getType())) { - typeToRequirementMap.get(capability.getType()).add(capability); - } else { - List<CapabilityDefinition> list = new ArrayList<>(); - list.add(capability); - typeToRequirementMap.put(capability.getType(), list); - } - }); - return typeToRequirementMap; - } - - public TitanOperationStatus getCapabilitySourcesList(String resourceId, List<String> derivedFromList) { - Map<String, Object> propertiesToMatch = new HashMap<>(); - propertiesToMatch.put(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Resource), resourceId); - Either<List<ResourceMetadataData>, TitanOperationStatus> getResponse = titanGenericDao.getByCriteria(NodeTypeEnum.Resource, propertiesToMatch, ResourceMetadataData.class); - if (getResponse.isRight()) { - return getResponse.right().value(); - } else { - String toscaResourceName = ((ResourceMetadataDataDefinition) getResponse.left().value().get(0).getMetadataDataDefinition()).getToscaResourceName(); - derivedFromList.add(toscaResourceName); - } - - Either<List<ImmutablePair<ResourceMetadataData, GraphEdge>>, TitanOperationStatus> childrenNodes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Resource), resourceId, GraphEdgeLabels.DERIVED_FROM, - NodeTypeEnum.Resource, ResourceMetadataData.class); - - while (childrenNodes.isLeft()) { - - List<ImmutablePair<ResourceMetadataData, GraphEdge>> pairList = childrenNodes.left().value(); - ResourceMetadataData left = pairList.get(0).left; - derivedFromList.add(((ResourceMetadataDataDefinition) left.getMetadataDataDefinition()).getToscaResourceName()); - String id = left.getMetadataDataDefinition().getUniqueId(); - childrenNodes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Resource), id, GraphEdgeLabels.DERIVED_FROM, NodeTypeEnum.Resource, ResourceMetadataData.class); - } - return TitanOperationStatus.OK; - } - - private Either<Map<String, PropertyData>, TitanOperationStatus> addPropertiesToCapability(CapabilityData capabilityData, String capabilityType, List<PropertyDefinition> properties) { - String capabilityTypeUid = UniqueIdBuilder.buildCapabilityTypeUid(capabilityType); - Either<Map<String, PropertyDefinition>, TitanOperationStatus> allPropertiesOfCapabilityTypeRes = getAllCapabilityTypePropertiesFromAllDerivedFrom(capabilityTypeUid); - if (allPropertiesOfCapabilityTypeRes.isRight() && !allPropertiesOfCapabilityTypeRes.right().value().equals(TitanOperationStatus.NOT_FOUND)) { - TitanOperationStatus operationStatus = allPropertiesOfCapabilityTypeRes.right().value(); - log.error("Failed to retrieve properties for capability type {} from graph. status is {}", capabilityType, operationStatus); - return Either.right(operationStatus); - } - - Map<String, PropertyDefinition> propertiesOfCapabilityType = null; - - if (allPropertiesOfCapabilityTypeRes.isLeft() && allPropertiesOfCapabilityTypeRes.left() != null && !allPropertiesOfCapabilityTypeRes.left().value().isEmpty()) { - - propertiesOfCapabilityType = allPropertiesOfCapabilityTypeRes.left().value(); - Either<List<PropertyDefinition>, TitanOperationStatus> validateAndReducePropertiesRes = validatePropertyUniqueness(propertiesOfCapabilityType, properties); - if (validateAndReducePropertiesRes.isRight()) { - TitanOperationStatus operationStatus = validateAndReducePropertiesRes.right().value(); - log.error("Failed to add properties to capability {} in graph. status is {}", capabilityData.getUniqueId(), operationStatus); - return Either.right(operationStatus); - } - } - - Either<Map<String, PropertyData>, TitanOperationStatus> addPropertiesToCapabilityRes = propertyOperation.addPropertiesToElementType(capabilityData.getUniqueId(), NodeTypeEnum.Capability, properties); - if (addPropertiesToCapabilityRes.isRight()) { - TitanOperationStatus operationStatus = addPropertiesToCapabilityRes.right().value(); - log.error("Failed to add properties to capability {} in graph. status is {}", capabilityData.getUniqueId(), operationStatus); - return Either.right(operationStatus); - } - return Either.left(addPropertiesToCapabilityRes.left().value()); - } - - private TitanOperationStatus addPropertiesToCapability(TitanVertex capabilityVertex, String capabilityType, List<PropertyDefinition> properties, String uniqueId) { - String capabilityTypeUid = UniqueIdBuilder.buildCapabilityTypeUid(capabilityType); - Either<Map<String, PropertyDefinition>, TitanOperationStatus> allPropertiesOfCapabilityTypeRes = getAllCapabilityTypePropertiesFromAllDerivedFrom(capabilityTypeUid); - if (allPropertiesOfCapabilityTypeRes.isRight() && !allPropertiesOfCapabilityTypeRes.right().value().equals(TitanOperationStatus.NOT_FOUND)) { - TitanOperationStatus operationStatus = allPropertiesOfCapabilityTypeRes.right().value(); - log.error("Failed to retrieve properties for capability type {} from graph. status is {}", capabilityType, operationStatus); - return operationStatus; - } - Map<String, PropertyDefinition> propertiesOfCapabilityType = null; - - if (allPropertiesOfCapabilityTypeRes.isLeft() && allPropertiesOfCapabilityTypeRes.left() != null && !allPropertiesOfCapabilityTypeRes.left().value().isEmpty()) { - - propertiesOfCapabilityType = allPropertiesOfCapabilityTypeRes.left().value(); - Either<List<PropertyDefinition>, TitanOperationStatus> validateAndReducePropertiesRes = validatePropertyUniqueness(propertiesOfCapabilityType, properties); - if (validateAndReducePropertiesRes.isRight()) { - TitanOperationStatus operationStatus = validateAndReducePropertiesRes.right().value(); - log.error("Failed to add properties to capability {} in graph. status is {}", capabilityVertex, operationStatus); - return operationStatus; - } - } - - String capabiltyId = (String) titanGenericDao.getProperty(capabilityVertex, GraphPropertiesDictionary.UNIQUE_ID.getProperty()); - TitanOperationStatus addPropertiesToCapabilityRes = propertyOperation.addPropertiesToElementType(capabilityVertex, capabiltyId, NodeTypeEnum.Capability, properties); - if (!addPropertiesToCapabilityRes.equals(TitanOperationStatus.OK)) { - log.error("Failed to add properties to capability {} in graph. status is {}", capabiltyId, addPropertiesToCapabilityRes); - } - return addPropertiesToCapabilityRes; - } - public Either<List<PropertyDefinition>, TitanOperationStatus> validatePropertyUniqueness(Map<String, PropertyDefinition> propertiesOfCapabilityType, List<PropertyDefinition> properties) { Either<List<PropertyDefinition>, TitanOperationStatus> result = Either.left(properties); @@ -1043,119 +117,7 @@ public class CapabilityOperation extends AbstractOperation implements ICapabilit return result; } - public StorageOperationStatus validateUpdateCapabilityProperty(PropertyDefinition property) { - Either<Map<String, DataTypeDefinition>, TitanOperationStatus> allDataTypes = applicationDataTypeCache.getAll(); - if (allDataTypes.isRight()) { - TitanOperationStatus status = allDataTypes.right().value(); - BeEcompErrorManager.getInstance().logInternalFlowError("UpdatePropertyValueOnComponentInstance", "Failed to update property value on instance. Status is " + status, ErrorSeverity.ERROR); - return DaoStatusConverter.convertTitanStatusToStorageStatus(allDataTypes.right().value()); - } - return propertyOperation.validateAndUpdateProperty(property, allDataTypes.left().value()); - } - - public StorageOperationStatus validateCapabilityProperties(List<PropertyDefinition> properties) { - StorageOperationStatus result = StorageOperationStatus.OK; - for (PropertyDefinition property : properties) { - result = validateUpdateCapabilityProperty(property); - if (!result.equals(StorageOperationStatus.OK)) - break; - } - return result; - } - - public Either<List<ImmutablePair<PropertyData, GraphEdge>>, TitanOperationStatus> deletePropertiesOfCapability(String capabilityUid) { - log.debug("Before deleting properties of capability {} from graph " , capabilityUid); - - Either<List<ImmutablePair<PropertyData, GraphEdge>>, TitanOperationStatus> deletePropertiesStatus = titanGenericDao.deleteChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Capability), capabilityUid, GraphEdgeLabels.PROPERTY, - NodeTypeEnum.Property, PropertyData.class); - if (deletePropertiesStatus.isRight()) { - TitanOperationStatus status = deletePropertiesStatus.right().value(); - if (status != TitanOperationStatus.NOT_FOUND) { - log.debug("failed to delete properties of capability with id {}. status={}", capabilityUid, status); - } else { - log.debug("The Capability with id {} have no Properties. status={}", capabilityUid, status); - } - return Either.right(status); - } - return Either.left(deletePropertiesStatus.left().value()); - } - - @Override - public Either<Map<String, PropertyData>, StorageOperationStatus> updatePropertiesOfCapability(String uniqueId, String capabilityType, List<PropertyDefinition> newProperties) { - return updatePropertiesOfCapability(uniqueId, capabilityType, newProperties, false); - } - @Override - public Either<Map<String, PropertyData>, StorageOperationStatus> updatePropertiesOfCapability(String uniqueId, String capabilityType, List<PropertyDefinition> newProperties, boolean inTransaction) { - - Either<Map<String, PropertyData>, StorageOperationStatus> result = null; - try { - Either<CapabilityData, TitanOperationStatus> capabiltyRes = titanGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Capability), uniqueId, CapabilityData.class); - if (capabiltyRes.isRight()) { - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(capabiltyRes.right().value())); - } - CapabilityData capabilityData = capabiltyRes.left().value(); - if (result == null) { - StorageOperationStatus propertiesValidationRes = validateCapabilityProperties(newProperties); - if (!propertiesValidationRes.equals(StorageOperationStatus.OK)) { - result = Either.right(propertiesValidationRes); - } - } - if (result == null) { - Either<List<ImmutablePair<PropertyData, GraphEdge>>, TitanOperationStatus> deletePropertiesRes = deletePropertiesOfCapability(uniqueId); - if (deletePropertiesRes.isRight() && !deletePropertiesRes.right().value().equals(TitanOperationStatus.NOT_FOUND)) { - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(deletePropertiesRes.right().value())); - } - } - if (result == null) { - Either<Map<String, PropertyData>, TitanOperationStatus> addPropertiesRes = addPropertiesToCapability(capabilityData, capabilityType, newProperties); - if (addPropertiesRes.isRight()) { - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(addPropertiesRes.right().value())); - } else { - result = Either.left(addPropertiesRes.left().value()); - } - } - if (result.isRight()) { - log.debug("Failed to update properties of capability {}. status is {}", uniqueId, result); - } - return result; - } finally { - if (!inTransaction) { - if (result == null || result.isRight()) { - log.debug("Going to execute rollback on graph."); - titanGenericDao.rollback(); - } else { - log.debug("Going to execute commit on graph."); - titanGenericDao.commit(); - } - } - } - } - - public Either<CapabilityData, TitanOperationStatus> getCapabilityRelatedToResourceInstance(String resourceInstanceId, String capabilityUid) { - TitanOperationStatus error = null; - CapabilityData capability = null; - Either<List<ImmutablePair<CapabilityData, GraphEdge>>, TitanOperationStatus> getCapabilitiesRes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceInstance), resourceInstanceId, - GraphEdgeLabels.CALCULATED_CAPABILITY, NodeTypeEnum.Capability, CapabilityData.class); - if (getCapabilitiesRes.isRight()) { - error = getCapabilitiesRes.right().value(); - log.debug("Failed to retrieve capabilities for resource instance {}. status is {}", resourceInstanceId, error); - } else { - List<ImmutablePair<CapabilityData, GraphEdge>> capabilityPairsList = getCapabilitiesRes.left().value(); - List<CapabilityData> capabilityPair = capabilityPairsList.stream().filter(pair -> pair.getLeft().getUniqueId().equals(capabilityUid)).map(pair -> pair.getLeft()).collect(Collectors.toList()); - if (capabilityPair.isEmpty()) { - error = TitanOperationStatus.NOT_FOUND; - log.debug("Failed to retrieve capability {} for resource instance {}. status is {}", capabilityUid, resourceInstanceId, error); - } else { - capability = capabilityPair.get(0); - } - } - if (error == null) { - return Either.left(capability); - } - return Either.right(error); - } - public Either<Map<String, PropertyDefinition>, TitanOperationStatus> getAllCapabilityTypePropertiesFromAllDerivedFrom(String firstParentType) { Map<String, PropertyDefinition> allProperies = new HashMap<>(); return getCapabilityTypePropertiesFromDerivedFromRecursively(firstParentType, allProperies); |