diff options
Diffstat (limited to 'catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/GroupOperation.java')
-rw-r--r-- | catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/GroupOperation.java | 879 |
1 files changed, 461 insertions, 418 deletions
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/GroupOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/GroupOperation.java index 9312be45c1..52bcae36db 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/GroupOperation.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/GroupOperation.java @@ -25,8 +25,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.stream.Collectors; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.openecomp.sdc.be.config.BeEcompErrorManager; import org.openecomp.sdc.be.config.BeEcompErrorManager.ErrorSeverity; @@ -44,6 +47,7 @@ import org.openecomp.sdc.be.model.GroupDefinition; import org.openecomp.sdc.be.model.GroupProperty; import org.openecomp.sdc.be.model.GroupTypeDefinition; import org.openecomp.sdc.be.model.PropertyDefinition; +import org.openecomp.sdc.be.model.Resource; import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache; import org.openecomp.sdc.be.model.operations.api.IGroupOperation; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; @@ -57,6 +61,7 @@ import org.openecomp.sdc.be.resources.data.PropertyValueData; import org.openecomp.sdc.be.resources.data.ResourceMetadataData; import org.openecomp.sdc.be.resources.data.ServiceMetadataData; import org.openecomp.sdc.be.resources.data.UniqueIdData; +import org.openecomp.sdc.common.datastructure.Wrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @@ -82,15 +87,16 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation @javax.annotation.Resource private ApplicationDataTypeCache dataTypeCache; + @javax.annotation.Resource + protected ResourceOperation resourceOperation; + @Override - public Either<GroupData, TitanOperationStatus> addGroupToGraph(NodeTypeEnum nodeTypeEnum, String componentId, - GroupDefinition groupDefinition) { + public Either<GroupData, TitanOperationStatus> addGroupToGraph(NodeTypeEnum nodeTypeEnum, String componentId, GroupDefinition groupDefinition) { String groupTypeUid = groupDefinition.getTypeUid(); if (groupTypeUid == null) { - BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, "Group type id is empty", - ErrorSeverity.ERROR); + BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, "Group type id is empty", ErrorSeverity.ERROR); return Either.right(TitanOperationStatus.INVALID_ID); } @@ -112,41 +118,35 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation TitanOperationStatus status = null; // Adding group data node to graph log.debug("Before adding group to graph {}", groupData.toString()); - Either<GroupData, TitanOperationStatus> createNodeResult = titanGenericDao.createNode(groupData, - GroupData.class); + Either<GroupData, TitanOperationStatus> createNodeResult = titanGenericDao.createNode(groupData, GroupData.class); log.debug("After adding group to graph {}", groupData.toString()); if (createNodeResult.isRight()) { status = createNodeResult.right().value(); - log.error("Failed to add group {} to graph. Status is {}", groupDefinition.getName(), status); + log.error("Failed to add group {} to graph. status is {}", groupDefinition.getName(), status); return Either.right(status); } // Associate group to group type log.debug("Going to associate group {} to its groupType {}", groupDefinition.getName(), groupDefinition.getType()); - Either<GraphRelation, TitanOperationStatus> associateGroupTypeRes = associateGroupToGroupType(groupData, - groupTypeUid); - log.debug("After associating group {} to its groupType {}. Status is {}", groupDefinition.getName(), groupDefinition.getType(), associateGroupTypeRes); + Either<GraphRelation, TitanOperationStatus> associateGroupTypeRes = associateGroupToGroupType(groupData, groupTypeUid); + log.debug("After associating group {} to its groupType {}. status is {}", groupDefinition.getName(), groupDefinition.getType(), associateGroupTypeRes); if (associateGroupTypeRes.isRight()) { status = associateGroupTypeRes.right().value(); - String description = "Failed to associate group " + groupDefinition.getName() + " to its groupType " - + groupDefinition.getType() + " in graph."; + String description = "Failed to associate group " + groupDefinition.getName() + " to its groupType " + groupDefinition.getType() + " in graph."; BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(status); } // Associate group to component RESOURCE/SERVICE/PRODUCT - Either<GraphRelation, TitanOperationStatus> associateComponentRes = associateGroupToComponent(groupData, - nodeTypeEnum, componentId); + Either<GraphRelation, TitanOperationStatus> associateComponentRes = associateGroupToComponent(groupData, nodeTypeEnum, componentId); if (associateComponentRes.isRight()) { status = associateComponentRes.right().value(); - String description = "Failed to associate group " + groupDefinition.getName() + " to " - + nodeTypeEnum.getName() + " " + componentId + ". status is " + status; + String description = "Failed to associate group " + groupDefinition.getName() + " to " + nodeTypeEnum.getName() + " " + componentId + ". status is " + status; BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(status); } - Either<GroupTypeDefinition, TitanOperationStatus> groupTypeRes = groupTypeOperation - .getGroupTypeByUid(groupDefinition.getTypeUid()); + Either<GroupTypeDefinition, TitanOperationStatus> groupTypeRes = groupTypeOperation.getGroupTypeByUid(groupDefinition.getTypeUid()); if (groupTypeRes.isRight()) { TitanOperationStatus operationStatus = groupTypeRes.right().value(); log.debug("Failed to find group type {}", groupDefinition.getTypeUid()); @@ -164,18 +164,16 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation // points to the parent unique id // Adding properties to group - List<GroupProperty> properties = groupDefinition.getProperties(); + List<GroupProperty> properties = groupDefinition.convertToGroupProperties(); if (properties != null && false == properties.isEmpty()) { if (groupTypeProperties == null || true == groupTypeProperties.isEmpty()) { - BeEcompErrorManager.getInstance().logInvalidInputError(ADDING_GROUP, - "group type does not have properties", ErrorSeverity.INFO); + BeEcompErrorManager.getInstance().logInvalidInputError(ADDING_GROUP, "group type does not have properties", ErrorSeverity.INFO); return Either.right(TitanOperationStatus.MATCH_NOT_FOUND); } - Map<String, PropertyDefinition> groupTypePropertiesMap = groupTypeProperties.stream() - .collect(Collectors.toMap(p -> p.getName(), p -> p)); + Map<String, PropertyDefinition> groupTypePropertiesMap = groupTypeProperties.stream().collect(Collectors.toMap(p -> p.getName(), p -> p)); Either<PropertyValueData, TitanOperationStatus> addPropertyResult = null; int i = 1; @@ -183,10 +181,8 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation addPropertyResult = addPropertyToGroup(groupData, prop, groupTypePropertiesMap.get(prop.getName()), i); if (addPropertyResult.isRight()) { status = addPropertyResult.right().value(); - String description = "Failed to associate group " + groupData.getUniqueId() + " to property " - + prop.getName() + " in graph. Status is " + status; - BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, - ErrorSeverity.ERROR); + String description = "Failed to associate group " + groupData.getUniqueId() + " to property " + prop.getName() + " in graph. Status is " + status; + BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(status); } i++; @@ -196,41 +192,22 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation // Associate artifacts to group List<String> artifacts = groupDefinition.getArtifacts(); - Either<GroupDefinition, TitanOperationStatus> associateArtifactsToGroupOnGraph = associateArtifactsToGroupOnGraph( - groupData.getGroupDataDefinition().getUniqueId(), artifacts); - if (associateArtifactsToGroupOnGraph.isRight() - && associateArtifactsToGroupOnGraph.right().value() != TitanOperationStatus.OK) { + Either<GroupDefinition, TitanOperationStatus> associateArtifactsToGroupOnGraph = associateArtifactsToGroupOnGraph(groupData.getGroupDataDefinition().getUniqueId(), artifacts); + if (associateArtifactsToGroupOnGraph.isRight() && associateArtifactsToGroupOnGraph.right().value() != TitanOperationStatus.OK) { return Either.right(status); } /* - * Either<GraphRelation, TitanOperationStatus> addArtifactsRefResult = - * null; if (artifacts != null) { for (String artifactId : artifacts) { - * Either<ArtifactData, TitanOperationStatus> findArtifactRes = - * titanGenericDao .getNode(UniqueIdBuilder - * .getKeyByNodeType(NodeTypeEnum.ArtifactRef), artifactId, - * ArtifactData.class); if (findArtifactRes.isRight()) { status = - * findArtifactRes.right().value(); if (status == - * TitanOperationStatus.NOT_FOUND) { status = - * TitanOperationStatus.INVALID_ID; } String description = - * "Failed to associate group " + groupData.getUniqueId() + - * " to artifact " + artifactId + " in graph. Status is " + status; - * BeEcompErrorManager.getInstance().logInternalFlowError( ADDING_GROUP, - * description, ErrorSeverity.ERROR); return Either.right(status); } + * Either<GraphRelation, TitanOperationStatus> addArtifactsRefResult = null; if (artifacts != null) { for (String artifactId : artifacts) { Either<ArtifactData, TitanOperationStatus> findArtifactRes = titanGenericDao .getNode(UniqueIdBuilder + * .getKeyByNodeType(NodeTypeEnum.ArtifactRef), artifactId, ArtifactData.class); if (findArtifactRes.isRight()) { status = findArtifactRes.right().value(); if (status == TitanOperationStatus.NOT_FOUND) { status = + * TitanOperationStatus.INVALID_ID; } String description = "Failed to associate group " + groupData.getUniqueId() + " to artifact " + artifactId + " in graph. Status is " + status; BeEcompErrorManager.getInstance().logInternalFlowError( + * ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(status); } * - * Map<String, Object> props = new HashMap<String, Object>(); - * props.put(GraphPropertiesDictionary.NAME.getProperty(), - * findArtifactRes.left().value().getLabel()); + * Map<String, Object> props = new HashMap<String, Object>(); props.put(GraphPropertiesDictionary.NAME.getProperty(), findArtifactRes.left().value().getLabel()); * - * addArtifactsRefResult = titanGenericDao.createRelation( groupData, - * findArtifactRes.left().value(), GraphEdgeLabels.GROUP_ARTIFACT_REF, - * props); + * addArtifactsRefResult = titanGenericDao.createRelation( groupData, findArtifactRes.left().value(), GraphEdgeLabels.GROUP_ARTIFACT_REF, props); * - * if (addArtifactsRefResult.isRight()) { status = - * addArtifactsRefResult.right().value(); String description = - * "Failed to associate group " + groupData.getUniqueId() + - * " to artifact " + artifactId + " in graph. Status is " + status; - * BeEcompErrorManager.getInstance().logInternalFlowError( ADDING_GROUP, - * description, ErrorSeverity.ERROR); return Either.right(status); } } } + * if (addArtifactsRefResult.isRight()) { status = addArtifactsRefResult.right().value(); String description = "Failed to associate group " + groupData.getUniqueId() + " to artifact " + artifactId + " in graph. Status is " + status; + * BeEcompErrorManager.getInstance().logInternalFlowError( ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(status); } } } */ // Associate group to members @@ -243,31 +220,24 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation if (member.getValue() == null || member.getValue().isEmpty()) { continue; } - Either<ComponentInstanceData, TitanOperationStatus> findComponentInstanceRes = titanGenericDao.getNode( - UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceInstance), member.getValue(), - ComponentInstanceData.class); + Either<ComponentInstanceData, TitanOperationStatus> findComponentInstanceRes = titanGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceInstance), member.getValue(), ComponentInstanceData.class); if (findComponentInstanceRes.isRight()) { status = findComponentInstanceRes.right().value(); if (status == TitanOperationStatus.NOT_FOUND) { status = TitanOperationStatus.INVALID_ID; } - String description = "Failed to find to find member of group " + member.getValue() - + " in graph. Status is " + status; - BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, - ErrorSeverity.ERROR); + String description = "Failed to find to find member of group " + member.getValue() + " in graph. Status is " + status; + BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(status); } Map<String, Object> props = new HashMap<String, Object>(); props.put(GraphPropertiesDictionary.NAME.getProperty(), member.getKey()); - addMembersRefResult = titanGenericDao.createRelation(groupData, findComponentInstanceRes.left().value(), - GraphEdgeLabels.GROUP_MEMBER, props); + addMembersRefResult = titanGenericDao.createRelation(groupData, findComponentInstanceRes.left().value(), GraphEdgeLabels.GROUP_MEMBER, props); if (addMembersRefResult.isRight()) { status = addMembersRefResult.right().value(); - String description = "Failed to associate group " + groupData.getUniqueId() - + " to component instance " + member.getValue() + " in graph. Status is " + status; - BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, - ErrorSeverity.ERROR); + String description = "Failed to associate group " + groupData.getUniqueId() + " to component instance " + member.getValue() + " in graph. Status is " + status; + BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(status); } } @@ -275,8 +245,221 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation return Either.left(groupData); } + + private Either<PropertyDefinition, TitanOperationStatus> getPropertyDefFromGroupType(GroupProperty groupProperty) { + Either<PropertyDefinition, TitanOperationStatus> ret; + Either<GroupTypeDefinition, TitanOperationStatus> groupTypeRes = groupTypeOperation + .getGroupTypeByUid(groupProperty.getParentUniqueId()); + if (groupTypeRes.isRight()) { + TitanOperationStatus operationStatus = groupTypeRes.right().value(); + log.debug("Failed to find group type {}", groupProperty.getParentUniqueId()); + if (operationStatus == TitanOperationStatus.NOT_FOUND) { + ret = Either.right(TitanOperationStatus.INVALID_ID); + } else { + ret = Either.right(operationStatus); + } + } else { + GroupTypeDefinition groupTypeDefinition = groupTypeRes.left().value(); + List<PropertyDefinition> groupTypeProperties = groupTypeDefinition.getProperties(); + + Map<String, PropertyDefinition> groupTypePropertiesMap = groupTypeProperties.stream() + .collect(Collectors.toMap(p -> p.getName(), p -> p)); + if (groupTypeProperties == null || true == groupTypeProperties.isEmpty()) { + BeEcompErrorManager.getInstance().logInvalidInputError(ADDING_GROUP, + "group type does not have properties", ErrorSeverity.INFO); + ret = Either.right(TitanOperationStatus.MATCH_NOT_FOUND); + } else { + PropertyDefinition propertyDefinition = groupTypePropertiesMap.get(groupProperty.getName()); + ret = Either.left(propertyDefinition); + } + } + return ret; + } + + /** + * Updates GroupProperty Value + * @param componentId TODO + * @param groupId TODO + * @param groupProperties + * @param inTransaction TODO + * + * @return + */ + public Either<List<GroupProperty>, StorageOperationStatus> updateGroupProperties(String componentId, + String groupId, List<GroupProperty> groupProperties, boolean inTransaction) { + + Wrapper<Long> lastUpdateTimeWrapper = new Wrapper<>(); + TitanOperationStatus titanStatus = TitanOperationStatus.OK; + Either<List<GroupProperty>, StorageOperationStatus> result = null; + //Get Group Data + final GroupData groupData; + Either<GroupData, TitanOperationStatus> eitherGroupData = titanGenericDao + .getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Group), groupId, GroupData.class); + if( eitherGroupData.isRight() ){ + log.debug("Error: Could not fetch group with groupId = {}", groupId); + return Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(eitherGroupData.right().value())); + } + else{ + groupData = eitherGroupData.left().value(); + } + + try { + Optional<TitanOperationStatus> optionalError = + //Stream of group properties to be updated + groupProperties.stream(). + //updating each property and mapping to the TitanOperationStatus + map(e -> updateGroupProperty(e, groupData, lastUpdateTimeWrapper)). + //filtering in errors if there are such + filter( e -> e != TitanOperationStatus.OK). + //collect + findFirst(); + if( optionalError.isPresent() ){ + titanStatus = optionalError.get(); + result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(titanStatus)); + } + else{ + result = updateLastModificationTimeOnVf(componentId, groupId, groupProperties, lastUpdateTimeWrapper); + } + + } + finally { + handleTransactionCommitRollback(inTransaction, result); + } + + return result; + } + + private Either<List<GroupProperty>, StorageOperationStatus> updateLastModificationTimeOnVf(String componentId, + String groupId, List<GroupProperty> groupProperties, Wrapper<Long> lastUpdateTimeWrapper) { + Either<List<GroupProperty>, StorageOperationStatus> result; + Either<Resource, StorageOperationStatus> eitherResource = resourceOperation.getResource(componentId); + if( eitherResource.isRight() ){ + result = Either.right(eitherResource.right().value()); + } + else{ + Either<ComponentMetadataData, StorageOperationStatus> eitherLastUpdateDateUpdatedOnResource = resourceOperation + .updateComponentLastUpdateDateOnGraph(eitherResource.left().value(), NodeTypeEnum.Resource, + lastUpdateTimeWrapper.getInnerElement(), true); + if (eitherLastUpdateDateUpdatedOnResource.isLeft()) { + + groupProperties = + //Group Stream From VF + eitherResource.left().value().getGroups().stream(). + //Filter in Only the relevant group + filter( e -> e.getUniqueId().equals(groupId)). + //Get it + findAny().get(). + //Get Group Properties from it + convertToGroupProperties(); + + result = Either.left(groupProperties); + } + else{ + result = Either.right(eitherLastUpdateDateUpdatedOnResource.right().value()); + } + } + return result; + } + + + private TitanOperationStatus updateGroupProperty(GroupProperty groupProperty, GroupData groupData, + Wrapper<Long> lastUpdateTimeWrapper) { + TitanOperationStatus titanStatus = TitanOperationStatus.OK; + // PropertyValueData node does not exist + if (StringUtils.isEmpty(groupProperty.getValueUniqueUid())) { + // create new node + if (!StringUtils.isEmpty(groupProperty.getValue())) { + // Value does not exit and was not updated as well. no need + // to do anything + } else { + titanStatus = addGroupPropertyToGraph(groupProperty, groupData, lastUpdateTimeWrapper); - private Either<PropertyValueData, TitanOperationStatus> addPropertyToGroup(GroupData groupData, + } + } + + else { + titanStatus = updateGroupPropertyInGraph(groupProperty, lastUpdateTimeWrapper); + } + return titanStatus; + } + + private TitanOperationStatus updateGroupPropertyInGraph(GroupProperty groupProperty, + Wrapper<Long> lastUpdateTimeWrapper) { + TitanOperationStatus titanStatus; + Either<PropertyValueData, TitanOperationStatus> eitherGroupPropertyValue = titanGenericDao.getNode( + UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.PropertyValue), groupProperty.getValueUniqueUid(), + PropertyValueData.class); + if (eitherGroupPropertyValue.isRight()) { + + titanStatus = eitherGroupPropertyValue.right().value(); + + } else { + PropertyValueData groupPropertyValue = eitherGroupPropertyValue.left().value(); + // Actual Update only if value changed + if (!StringUtils.equals(groupPropertyValue.getValue(), groupProperty.getValue())) { + long modificationTime = lastUpdateTimeWrapper.isEmpty() ? System.currentTimeMillis() + : lastUpdateTimeWrapper.getInnerElement(); + groupPropertyValue.setValue(groupProperty.getValue()); + groupPropertyValue.setModificationTime(modificationTime); + Either<PropertyValueData, TitanOperationStatus> eitherUpdateNode = titanGenericDao + .updateNode(groupPropertyValue, PropertyValueData.class); + if( eitherUpdateNode.isLeft() ){ + titanStatus = TitanOperationStatus.OK; + lastUpdateTimeWrapper.setInnerElement(modificationTime); + } + else{ + titanStatus = eitherUpdateNode.right().value(); + } + + } else { + titanStatus = TitanOperationStatus.OK; + } + } + return titanStatus; + } + + private TitanOperationStatus addGroupPropertyToGraph(GroupProperty groupProperty, GroupData groupData, + Wrapper<Long> lastUpdateTimeWrapper) { + PropertyDefinition propertyDefinition = null; + TitanOperationStatus ret = TitanOperationStatus.OK; + if (ret == TitanOperationStatus.OK) { + Either<PropertyDefinition, TitanOperationStatus> eitherPropertyDefFromGroupType = getPropertyDefFromGroupType( + groupProperty); + if (eitherPropertyDefFromGroupType.isRight()) { + log.debug("Error: Could not fetch group property from group Type with groupTypeId = {}", + groupProperty.getParentUniqueId()); + ret = eitherPropertyDefFromGroupType.right().value(); + } else { + propertyDefinition = eitherPropertyDefFromGroupType.left().value(); + } + } + if (ret == TitanOperationStatus.OK){ + final int groupPropCounter = groupData.getGroupDataDefinition().getPropertyValueCounter() + NumberUtils.INTEGER_ONE; + Either<PropertyValueData, TitanOperationStatus> eitherAddPropertyToGroup = addPropertyToGroup(groupData, + groupProperty, propertyDefinition, groupPropCounter); + + if( eitherAddPropertyToGroup.isLeft() ){ + ret = TitanOperationStatus.OK; + if( lastUpdateTimeWrapper.isEmpty() ){ + lastUpdateTimeWrapper.setInnerElement(eitherAddPropertyToGroup.left().value().getCreationTime()); + } + } + else{ + ret = eitherAddPropertyToGroup.right().value(); + } + if( ret == TitanOperationStatus.OK){ + groupData.getGroupDataDefinition().setPropertyValueCounter(groupPropCounter); + Either<GroupData, TitanOperationStatus> updateNode = titanGenericDao .updateNode(groupData, GroupData.class); + if( updateNode.isRight() ){ + ret = updateNode.right().value(); + } + } + + } + return ret; + } + + public Either<PropertyValueData, TitanOperationStatus> addPropertyToGroup(GroupData groupData, GroupProperty groupProperty, PropertyDefinition prop, Integer index) { if (prop == null) { @@ -312,15 +495,13 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation Either<Map<String, DataTypeDefinition>, TitanOperationStatus> allDataTypes = dataTypeCache.getAll(); if (allDataTypes.isRight()) { TitanOperationStatus status = allDataTypes.right().value(); - BeEcompErrorManager.getInstance().logInternalFlowError("AddPropertyToGroup", - "Failed to add property to group. Status is " + status, ErrorSeverity.ERROR); + BeEcompErrorManager.getInstance().logInternalFlowError("AddPropertyToGroup", "Failed to add property to group. Status is " + status, ErrorSeverity.ERROR); return Either.right(status); } log.debug("Before validateAndUpdatePropertyValue"); - Either<Object, Boolean> isValid = propertyOperation.validateAndUpdatePropertyValue(propertyType, value, - innerType, allDataTypes.left().value()); + Either<Object, Boolean> isValid = propertyOperation.validateAndUpdatePropertyValue(propertyType, value, innerType, allDataTypes.left().value()); log.debug("After validateAndUpdatePropertyValue. isValid = {}", isValid); String newValue = value; @@ -341,9 +522,8 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation propertyValueData.setUniqueId(uniqueId); propertyValueData.setValue(newValue); - log.debug("Before adding property value to graph {}",propertyValueData); - Either<PropertyValueData, TitanOperationStatus> createNodeResult = titanGenericDao.createNode(propertyValueData, - PropertyValueData.class); + log.debug("Before adding property value to graph {}", propertyValueData); + Either<PropertyValueData, TitanOperationStatus> createNodeResult = titanGenericDao.createNode(propertyValueData, PropertyValueData.class); log.debug("After adding property value to graph {}", propertyValueData); if (createNodeResult.isRight()) { @@ -351,24 +531,20 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation return Either.right(operationStatus); } - Either<GraphRelation, TitanOperationStatus> createRelResult = titanGenericDao.createRelation(propertyValueData, - propertyData, GraphEdgeLabels.PROPERTY_IMPL, null); + Either<GraphRelation, TitanOperationStatus> createRelResult = titanGenericDao.createRelation(propertyValueData, propertyData, GraphEdgeLabels.PROPERTY_IMPL, null); if (createRelResult.isRight()) { TitanOperationStatus operationStatus = createRelResult.right().value(); - String description = "Failed to associate property value " + uniqueId + " to property " + propertyId - + " in graph. status is " + operationStatus; + String description = "Failed to associate property value " + uniqueId + " to property " + propertyId + " in graph. status is " + operationStatus; BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(operationStatus); } - createRelResult = titanGenericDao.createRelation(groupData, propertyValueData, GraphEdgeLabels.PROPERTY_VALUE, - null); + createRelResult = titanGenericDao.createRelation(groupData, propertyValueData, GraphEdgeLabels.PROPERTY_VALUE, null); if (createRelResult.isRight()) { TitanOperationStatus operationStatus = createNodeResult.right().value(); - String description = "Failed to associate group " + groupData.getGroupDataDefinition().getName() - + " to property value " + uniqueId + " in graph. Status is " + operationStatus; + String description = "Failed to associate group " + groupData.getGroupDataDefinition().getName() + " to property value " + uniqueId + " in graph. Status is " + operationStatus; BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(operationStatus); } @@ -376,16 +552,14 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation return Either.left(createNodeResult.left().value()); } - private Either<GraphRelation, TitanOperationStatus> associateGroupToComponent(GroupData groupData, - NodeTypeEnum nodeTypeEnum, String componentId) { + private Either<GraphRelation, TitanOperationStatus> associateGroupToComponent(GroupData groupData, NodeTypeEnum nodeTypeEnum, String componentId) { UniqueIdData componentIdData = new UniqueIdData(nodeTypeEnum, componentId); - log.debug("Before associating component {} to group {}.", componentId, groupData); + log.debug("Before associating component {} to group {}", componentId, groupData); Map<String, Object> props = new HashMap<String, Object>(); props.put(GraphPropertiesDictionary.NAME.getProperty(), groupData.getGroupDataDefinition().getName()); - Either<GraphRelation, TitanOperationStatus> createRelResult = titanGenericDao.createRelation(componentIdData, - groupData, GraphEdgeLabels.GROUP, props); - log.debug("After associating component {} to group {}. Status is {}", componentId, groupData, createRelResult); + Either<GraphRelation, TitanOperationStatus> createRelResult = titanGenericDao.createRelation(componentIdData, groupData, GraphEdgeLabels.GROUP, props); + log.debug("After associating component {} to group {}. status is {}", componentId, groupData, createRelResult); if (createRelResult.isRight()) { TitanOperationStatus operationStatus = createRelResult.right().value(); log.debug("Failed to associate component {} to group {} in graph. Status is {}", componentId, groupData, operationStatus); @@ -395,18 +569,13 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation return Either.left(createRelResult.left().value()); } - private Either<GraphRelation, TitanOperationStatus> associateGroupToGroupType(GroupData groupData, - String groupTypeUid) { + private Either<GraphRelation, TitanOperationStatus> associateGroupToGroupType(GroupData groupData, String groupTypeUid) { UniqueIdData groupTypeIdData = new UniqueIdData(NodeTypeEnum.GroupType, groupTypeUid); - log.debug("Before associating {} to group type {} (uid = {}).", groupData, groupData.getGroupDataDefinition().getType(), groupTypeUid); - Either<GraphRelation, TitanOperationStatus> createRelResult = titanGenericDao.createRelation(groupData, - groupTypeIdData, GraphEdgeLabels.TYPE_OF, null); - - if (log.isDebugEnabled()) { - log.debug("After associating {} to group type {} (uid = {}). Result is {}", groupData, groupData.getGroupDataDefinition().getType(), groupTypeUid, createRelResult); - } + log.debug("Before associating {} to group type {} (uid = {})", groupData, groupData.getGroupDataDefinition().getType(), groupTypeUid); + Either<GraphRelation, TitanOperationStatus> createRelResult = titanGenericDao.createRelation(groupData, groupTypeIdData, GraphEdgeLabels.TYPE_OF, null); + log.debug("After associating {} to group type {} (uid = {}). Result is {}", groupData, groupData.getGroupDataDefinition().getType(), groupTypeUid, createRelResult); if (createRelResult.isRight()) { TitanOperationStatus operationStatus = createRelResult.right().value(); return Either.right(operationStatus); @@ -415,19 +584,16 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } @Override - public Either<GroupDefinition, StorageOperationStatus> addGroup(NodeTypeEnum nodeTypeEnum, String componentId, - GroupDefinition groupDefinition) { + public Either<GroupDefinition, StorageOperationStatus> addGroup(NodeTypeEnum nodeTypeEnum, String componentId, GroupDefinition groupDefinition) { return addGroup(nodeTypeEnum, componentId, groupDefinition, false); } @Override - public Either<GroupDefinition, StorageOperationStatus> addGroup(NodeTypeEnum nodeTypeEnum, String componentId, - GroupDefinition groupDefinition, boolean inTransaction) { + public Either<GroupDefinition, StorageOperationStatus> addGroup(NodeTypeEnum nodeTypeEnum, String componentId, GroupDefinition groupDefinition, boolean inTransaction) { Either<GroupDefinition, StorageOperationStatus> result = null; try { - Either<GroupData, TitanOperationStatus> addGroupRes = addGroupToGraph(nodeTypeEnum, componentId, - groupDefinition); + Either<GroupData, TitanOperationStatus> addGroupRes = addGroupToGraph(nodeTypeEnum, componentId, groupDefinition); if (addGroupRes.isRight()) { TitanOperationStatus status = addGroupRes.right().value(); result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); @@ -506,52 +672,6 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } /** - * get the list of artifacts related to a given group - * - * @param groupUniqueId - * @return - */ - // private Either<List<String>, TitanOperationStatus> getGroupArtifacts( - // String groupUniqueId) { - // - // Either<List<String>, TitanOperationStatus> result = null; - // - // Either<List<ImmutablePair<ArtifactData, GraphEdge>>, - // TitanOperationStatus> childrenNodes = titanGenericDao - // .getChildrenNodes( - // UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Group), - // groupUniqueId, GraphEdgeLabels.GROUP_ARTIFACT_REF, - // NodeTypeEnum.ArtifactRef, ArtifactData.class); - // if (childrenNodes.isRight()) { - // TitanOperationStatus status = childrenNodes.right().value(); - // if (status == TitanOperationStatus.NOT_FOUND) { - // status = TitanOperationStatus.OK; - // } - // result = Either.right(status); - // - // } else { - // - // List<String> artifactsList = new ArrayList<>(); - // List<ImmutablePair<ArtifactData, GraphEdge>> list = childrenNodes - // .left().value(); - // if (list != null) { - // for (ImmutablePair<ArtifactData, GraphEdge> pair : list) { - // ArtifactData artifactData = pair.getKey(); - // String uniqueId = artifactData.getArtifactDataDefinition() - // .getUniqueId(); - // artifactsList.add(uniqueId); - // } - // } - // - // log.debug("The artifacts list related to group {} is {}", groupUniqueId, artifactsList); - // result = Either.left(artifactsList); - // } - // - // return result; - // - // } - - /** * get members of group * * @param groupUniqueId @@ -561,9 +681,8 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation Either<Map<String, String>, TitanOperationStatus> result = null; - Either<List<ImmutablePair<ComponentInstanceData, GraphEdge>>, TitanOperationStatus> childrenNodes = titanGenericDao - .getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Group), groupUniqueId, - GraphEdgeLabels.GROUP_MEMBER, NodeTypeEnum.ResourceInstance, ComponentInstanceData.class); + Either<List<ImmutablePair<ComponentInstanceData, GraphEdge>>, TitanOperationStatus> childrenNodes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Group), groupUniqueId, GraphEdgeLabels.GROUP_MEMBER, + NodeTypeEnum.ResourceInstance, ComponentInstanceData.class); if (childrenNodes.isRight()) { TitanOperationStatus status = childrenNodes.right().value(); @@ -594,23 +713,20 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation public Either<GroupTypeDefinition, TitanOperationStatus> getGroupTypeOfGroup(String groupUniqueId) { - Either<ImmutablePair<GroupTypeData, GraphEdge>, TitanOperationStatus> groupTypeRes = titanGenericDao.getChild( - UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Group), groupUniqueId, GraphEdgeLabels.TYPE_OF, - NodeTypeEnum.GroupType, GroupTypeData.class); + Either<ImmutablePair<GroupTypeData, GraphEdge>, TitanOperationStatus> groupTypeRes = titanGenericDao.getChild(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Group), groupUniqueId, GraphEdgeLabels.TYPE_OF, NodeTypeEnum.GroupType, + GroupTypeData.class); if (groupTypeRes.isRight()) { TitanOperationStatus status = groupTypeRes.right().value(); log.debug("Cannot find group type associated with capability {}. Status is {}", groupUniqueId, status); - BeEcompErrorManager.getInstance().logBeFailedFindAssociationError("Fetch Group type", - NodeTypeEnum.GroupType.getName(), groupUniqueId, String.valueOf(status)); + BeEcompErrorManager.getInstance().logBeFailedFindAssociationError("Fetch Group type", NodeTypeEnum.GroupType.getName(), groupUniqueId, String.valueOf(status)); return Either.right(groupTypeRes.right().value()); } GroupTypeData groupTypeData = groupTypeRes.left().value().getKey(); - Either<GroupTypeDefinition, TitanOperationStatus> groupTypeByUid = groupTypeOperation - .getGroupTypeByUid(groupTypeData.getGroupTypeDataDefinition().getUniqueId()); + Either<GroupTypeDefinition, TitanOperationStatus> groupTypeByUid = groupTypeOperation.getGroupTypeByUid(groupTypeData.getGroupTypeDataDefinition().getUniqueId()); return groupTypeByUid; @@ -644,19 +760,16 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation return Either.right(TitanOperationStatus.OK); } - Map<String, PropertyDefinition> uidToPropDefMap = groupTypeProperties.stream() - .collect(Collectors.toMap(p -> p.getUniqueId(), p -> p)); + Map<String, PropertyDefinition> uidToPropDefMap = groupTypeProperties.stream().collect(Collectors.toMap(p -> p.getUniqueId(), p -> p)); // Find all properties values on the group - Either<List<ImmutablePair<PropertyValueData, GraphEdge>>, TitanOperationStatus> propertyImplNodes = titanGenericDao - .getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Group), groupUid, - GraphEdgeLabels.PROPERTY_VALUE, NodeTypeEnum.PropertyValue, PropertyValueData.class); + Either<List<ImmutablePair<PropertyValueData, GraphEdge>>, TitanOperationStatus> propertyImplNodes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Group), groupUid, GraphEdgeLabels.PROPERTY_VALUE, + NodeTypeEnum.PropertyValue, PropertyValueData.class); if (propertyImplNodes.isRight()) { TitanOperationStatus status = propertyImplNodes.right().value(); if (status == TitanOperationStatus.NOT_FOUND) { - groupPropertiesList = groupTypeProperties.stream() - .map(p -> new GroupProperty(p, p.getDefaultValue(), null)).collect(Collectors.toList()); + groupPropertiesList = groupTypeProperties.stream().map(p -> new GroupProperty(p, p.getDefaultValue(), null)).collect(Collectors.toList()); return Either.left(groupPropertiesList); } else { return Either.right(status); @@ -676,9 +789,8 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation String propertyValueUid = propertyValueData.getUniqueId(); String value = propertyValueData.getValue(); - Either<ImmutablePair<PropertyData, GraphEdge>, TitanOperationStatus> propertyDefRes = titanGenericDao - .getChild(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.PropertyValue), propertyValueUid, - GraphEdgeLabels.PROPERTY_IMPL, NodeTypeEnum.Property, PropertyData.class); + Either<ImmutablePair<PropertyData, GraphEdge>, TitanOperationStatus> propertyDefRes = titanGenericDao.getChild(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.PropertyValue), propertyValueUid, GraphEdgeLabels.PROPERTY_IMPL, + NodeTypeEnum.Property, PropertyData.class); if (propertyDefRes.isRight()) { TitanOperationStatus status = propertyDefRes.right().value(); if (status == TitanOperationStatus.NOT_FOUND) { @@ -704,8 +816,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation // Find all properties which does not have property value on the group. List<GroupProperty> leftProps = groupTypeProperties.stream() // filter out the group type properties which already processed - .filter(p -> false == processedProps.contains(p.getUniqueId())) - .map(p -> new GroupProperty(p, p.getDefaultValue(), null)).collect(Collectors.toList()); + .filter(p -> false == processedProps.contains(p.getUniqueId())).map(p -> new GroupProperty(p, p.getDefaultValue(), null)).collect(Collectors.toList()); if (leftProps != null) { groupPropertiesList.addAll(leftProps); } @@ -713,28 +824,24 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation return Either.left(groupPropertiesList); } - public Either<List<GroupDefinition>, TitanOperationStatus> getAllGroupsFromGraph(String componentId, - NodeTypeEnum componentTypeEnum) { + public Either<List<GroupDefinition>, TitanOperationStatus> getAllGroupsFromGraph(String componentId, NodeTypeEnum componentTypeEnum) { return getAllGroupsFromGraph(componentId, componentTypeEnum, false, false, false); } @Override - public Either<List<GroupDefinition>, StorageOperationStatus> getAllGroups(String componentId, - NodeTypeEnum compTypeEnum, boolean inTransaction) { + public Either<List<GroupDefinition>, StorageOperationStatus> getAllGroups(String componentId, NodeTypeEnum compTypeEnum, boolean inTransaction) { Either<List<GroupDefinition>, StorageOperationStatus> result = null; try { - Either<List<GroupDefinition>, TitanOperationStatus> allGroups = this.getAllGroupsFromGraph(componentId, - compTypeEnum); + Either<List<GroupDefinition>, TitanOperationStatus> allGroups = this.getAllGroupsFromGraph(componentId, compTypeEnum); if (allGroups.isRight()) { TitanOperationStatus status = allGroups.right().value(); - log.debug("Failed to retrieve all groups of component {} from graph. Status is {}", componentId, - status); + log.debug("Failed to retrieve all groups of component {} from graph. Status is {}", componentId, status); if (status == TitanOperationStatus.NOT_FOUND) { status = TitanOperationStatus.OK; } @@ -762,8 +869,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } @Override - public Either<List<GroupDefinition>, StorageOperationStatus> getAllGroups(String componentId, - NodeTypeEnum compTypeEnum) { + public Either<List<GroupDefinition>, StorageOperationStatus> getAllGroups(String componentId, NodeTypeEnum compTypeEnum) { return getAllGroups(componentId, compTypeEnum, false); } @@ -778,27 +884,21 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation GroupDefinition groupDefinition = groupFromGraph.left().value(); // 1. delete all properties values nodes - List<GroupProperty> properties = groupDefinition.getProperties(); + List<GroupProperty> properties = groupDefinition.convertToGroupProperties(); if (properties != null) { for (GroupProperty groupProperty : properties) { String propValueUniqueId = groupProperty.getValueUniqueUid(); if (propValueUniqueId != null) { UniqueIdData uniqueIdData = new UniqueIdData(NodeTypeEnum.PropertyValue, propValueUniqueId); - Either<PropertyValueData, TitanOperationStatus> deleteNode = titanGenericDao - .deleteNode(uniqueIdData, PropertyValueData.class); + Either<PropertyValueData, TitanOperationStatus> deleteNode = titanGenericDao.deleteNode(uniqueIdData, PropertyValueData.class); if (deleteNode.isRight()) { TitanOperationStatus status = groupFromGraph.right().value(); - String description = String.format( - "Failed to delete property {} under group {}" + groupUniqueId - + " on graph. Status is {}", - propValueUniqueId, groupDefinition.getName(), status.name()); - log.debug(description); - BeEcompErrorManager.getInstance().logBeFailedDeleteNodeError(DELETING_GROUP, propValueUniqueId, - status.name()); + log.debug("Failed to delete property {} under group {} {} on graph. Status is {}", propValueUniqueId, groupDefinition.getName(), groupUniqueId, status.name()); + BeEcompErrorManager.getInstance().logBeFailedDeleteNodeError(DELETING_GROUP, propValueUniqueId, status.name()); return Either.right(status); } else { - log.trace("Property {} was deleted from geoup {}", propValueUniqueId, groupDefinition.getName()); + log.trace("Property {} was deleted from group {}" ,propValueUniqueId, groupDefinition.getName()); } } } @@ -809,10 +909,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation Either<GroupData, TitanOperationStatus> deleteNode = titanGenericDao.deleteNode(uniqueIdData, GroupData.class); if (deleteNode.isRight()) { TitanOperationStatus status = groupFromGraph.right().value(); - String description = String.format( - "Failed to delete group {} with uid " + groupUniqueId + " on graph. Status is {}", - groupDefinition.getName(), groupUniqueId, status.name()); - log.debug(description); + log.debug("Failed to delete group {} with uid {} on graph. Status is {}", groupDefinition.getName(), groupUniqueId, status.name()); BeEcompErrorManager.getInstance().logBeFailedDeleteNodeError(DELETING_GROUP, groupUniqueId, status.name()); return Either.right(status); } else { @@ -863,18 +960,15 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } @Override - public Either<List<GroupDefinition>, TitanOperationStatus> deleteAllGroupsFromGraph(String componentId, - NodeTypeEnum componentTypeEnum) { + public Either<List<GroupDefinition>, TitanOperationStatus> deleteAllGroupsFromGraph(String componentId, NodeTypeEnum componentTypeEnum) { - Either<List<ImmutablePair<GroupData, GraphEdge>>, TitanOperationStatus> childrenNodes = titanGenericDao - .getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(componentTypeEnum), componentId, - GraphEdgeLabels.GROUP, NodeTypeEnum.Group, GroupData.class); + Either<List<ImmutablePair<GroupData, GraphEdge>>, TitanOperationStatus> childrenNodes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(componentTypeEnum), componentId, GraphEdgeLabels.GROUP, NodeTypeEnum.Group, + GroupData.class); if (childrenNodes.isRight()) { TitanOperationStatus status = childrenNodes.right().value(); if (status != TitanOperationStatus.NOT_FOUND) { - BeEcompErrorManager.getInstance().logBeFailedFindAllNodesError(DELETING_ALL_GROUPS, - NodeTypeEnum.Group.name(), componentId, status.name()); + BeEcompErrorManager.getInstance().logBeFailedFindAllNodesError(DELETING_ALL_GROUPS, NodeTypeEnum.Group.name(), componentId, status.name()); } return Either.right(status); } @@ -888,8 +982,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation Either<GroupData, TitanOperationStatus> deleteGroupFromGraph = deleteGroupFromGraph(uniqueId); if (deleteGroupFromGraph.isRight()) { TitanOperationStatus status = deleteGroupFromGraph.right().value(); - BeEcompErrorManager.getInstance().logBeFailedDeleteNodeError(DELETING_ALL_GROUPS, uniqueId, - status.name()); + BeEcompErrorManager.getInstance().logBeFailedDeleteNodeError(DELETING_ALL_GROUPS, uniqueId, status.name()); return Either.right(status); } GroupData groupData = deleteGroupFromGraph.left().value(); @@ -902,15 +995,13 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } @Override - public Either<List<GroupDefinition>, StorageOperationStatus> deleteAllGroups(String componentId, - NodeTypeEnum compTypeEnum, boolean inTransaction) { + public Either<List<GroupDefinition>, StorageOperationStatus> deleteAllGroups(String componentId, NodeTypeEnum compTypeEnum, boolean inTransaction) { Either<List<GroupDefinition>, StorageOperationStatus> result = null; try { - Either<List<GroupDefinition>, TitanOperationStatus> allGroups = this.deleteAllGroupsFromGraph(componentId, - compTypeEnum); + Either<List<GroupDefinition>, TitanOperationStatus> allGroups = this.deleteAllGroupsFromGraph(componentId, compTypeEnum); if (allGroups.isRight()) { TitanOperationStatus status = allGroups.right().value(); @@ -942,14 +1033,11 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } @Override - public Either<List<GroupDefinition>, StorageOperationStatus> deleteAllGroups(String componentId, - NodeTypeEnum compTypeEnum) { + public Either<List<GroupDefinition>, StorageOperationStatus> deleteAllGroups(String componentId, NodeTypeEnum compTypeEnum) { return deleteAllGroups(componentId, compTypeEnum, false); } - public Either<List<GroupDefinition>, StorageOperationStatus> prepareGroupsForCloning( - org.openecomp.sdc.be.model.Component origResource, - ImmutablePair<List<ComponentInstance>, Map<String, String>> cloneInstances) { + public Either<List<GroupDefinition>, StorageOperationStatus> prepareGroupsForCloning(org.openecomp.sdc.be.model.Component origResource, ImmutablePair<List<ComponentInstance>, Map<String, String>> cloneInstances) { List<GroupDefinition> groupsToCreate = new ArrayList<>(); Either<List<GroupDefinition>, StorageOperationStatus> result = Either.left(groupsToCreate); @@ -966,19 +1054,18 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation gdToCreate.setUniqueId(null); gdToCreate.setMembers(null); - List<GroupProperty> properties = groupDefinition.getProperties(); + List<GroupProperty> properties = groupDefinition.convertToGroupProperties(); if (properties != null) { // Take properties which was updated in the // group(getValueUniqueUid != null), // Then set null instead of the value(prepare for the // creation). - List<GroupProperty> propertiesToUpdate = properties.stream() - .filter(p -> p.getValueUniqueUid() != null).map(p -> { - p.setValueUniqueUid(null); - return p; - }).collect(Collectors.toList()); + List<GroupProperty> propertiesToUpdate = properties.stream().filter(p -> p.getValueUniqueUid() != null).map(p -> { + p.setValueUniqueUid(null); + return p; + }).collect(Collectors.toList()); - gdToCreate.setProperties(propertiesToUpdate); + gdToCreate.convertFromGroupProperties(propertiesToUpdate); } @@ -988,8 +1075,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation Map<String, String> oldCompUidToNew = cloneInstances.right; if (members != null && createdInstances != null) { - Map<String, String> compInstIdToName = createdInstances.stream() - .collect(Collectors.toMap(p -> p.getUniqueId(), p -> p.getName())); + Map<String, String> compInstIdToName = createdInstances.stream().collect(Collectors.toMap(p -> p.getUniqueId(), p -> p.getName())); Map<String, String> membersToCreate = new HashMap<>(); @@ -1018,8 +1104,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } @Override - public Either<List<GroupDefinition>, StorageOperationStatus> addGroups(NodeTypeEnum nodeTypeEnum, - String componentId, List<GroupDefinition> groups, boolean inTransaction) { + public Either<List<GroupDefinition>, StorageOperationStatus> addGroups(NodeTypeEnum nodeTypeEnum, String componentId, List<GroupDefinition> groups, boolean inTransaction) { List<GroupDefinition> createdGroups = new ArrayList<>(); @@ -1029,8 +1114,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation if (groups != null) { for (GroupDefinition groupDefinition : groups) { - Either<GroupDefinition, StorageOperationStatus> addGroup = this.addGroup(nodeTypeEnum, componentId, - groupDefinition, true); + Either<GroupDefinition, StorageOperationStatus> addGroup = this.addGroup(nodeTypeEnum, componentId, groupDefinition, true); if (addGroup.isRight()) { StorageOperationStatus status = addGroup.right().value(); result = Either.right(status); @@ -1059,29 +1143,25 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } @Override - public Either<List<String>, TitanOperationStatus> getAssociatedGroupsToComponentInstanceFromGraph( - String componentInstanceId) { + public Either<List<String>, TitanOperationStatus> getAssociatedGroupsToComponentInstanceFromGraph(String componentInstanceId) { List<String> groups = new ArrayList<>(); Either<List<String>, TitanOperationStatus> result = Either.left(groups); - Either<List<ImmutablePair<GroupData, GraphEdge>>, TitanOperationStatus> parentNodes = titanGenericDao - .getParentNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceInstance), componentInstanceId, - GraphEdgeLabels.GROUP_MEMBER, NodeTypeEnum.Group, GroupData.class); + Either<List<ImmutablePair<GroupData, GraphEdge>>, TitanOperationStatus> parentNodes = titanGenericDao.getParentNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceInstance), componentInstanceId, GraphEdgeLabels.GROUP_MEMBER, + NodeTypeEnum.Group, GroupData.class); if (parentNodes.isRight()) { TitanOperationStatus status = parentNodes.right().value(); if (status != TitanOperationStatus.NOT_FOUND) { - BeEcompErrorManager.getInstance().logBeFailedFindParentError("FetchGroupMembers", componentInstanceId, - status.name()); + BeEcompErrorManager.getInstance().logBeFailedFindParentError("FetchGroupMembers", componentInstanceId, status.name()); } return Either.right(status); } List<ImmutablePair<GroupData, GraphEdge>> fetchedGroups = parentNodes.left().value(); if (fetchedGroups != null) { - List<String> list = fetchedGroups.stream().map(p -> p.left.getGroupDataDefinition().getUniqueId()) - .collect(Collectors.toList()); + List<String> list = fetchedGroups.stream().map(p -> p.left.getGroupDataDefinition().getUniqueId()).collect(Collectors.toList()); groups.addAll(list); } @@ -1090,15 +1170,13 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } @Override - public Either<List<String>, StorageOperationStatus> getAssociatedGroupsToComponentInstance( - String componentInstanceId, boolean inTransaction) { + public Either<List<String>, StorageOperationStatus> getAssociatedGroupsToComponentInstance(String componentInstanceId, boolean inTransaction) { Either<List<String>, StorageOperationStatus> result = null; try { - Either<List<String>, TitanOperationStatus> groups = this - .getAssociatedGroupsToComponentInstanceFromGraph(componentInstanceId); + Either<List<String>, TitanOperationStatus> groups = this.getAssociatedGroupsToComponentInstanceFromGraph(componentInstanceId); if (groups.isRight()) { TitanOperationStatus status = groups.right().value(); @@ -1129,14 +1207,12 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } @Override - public Either<List<String>, StorageOperationStatus> getAssociatedGroupsToComponentInstance( - String componentInstanceId) { + public Either<List<String>, StorageOperationStatus> getAssociatedGroupsToComponentInstance(String componentInstanceId) { return getAssociatedGroupsToComponentInstance(componentInstanceId, false); } @Override - public Either<List<GraphRelation>, TitanOperationStatus> associateGroupsToComponentInstanceOnGraph( - List<String> groups, String componentInstanceId, String compInstName) { + public Either<List<GraphRelation>, TitanOperationStatus> associateGroupsToComponentInstanceOnGraph(List<String> groups, String componentInstanceId, String compInstName) { List<GraphRelation> relations = new ArrayList<>(); Either<List<GraphRelation>, TitanOperationStatus> result = Either.left(relations); @@ -1150,14 +1226,11 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation Map<String, Object> props = new HashMap<String, Object>(); props.put(GraphPropertiesDictionary.NAME.getProperty(), compInstName); - Either<GraphRelation, TitanOperationStatus> createRelation = titanGenericDao.createRelation(groupData, - compInstData, GraphEdgeLabels.GROUP_MEMBER, props); + Either<GraphRelation, TitanOperationStatus> createRelation = titanGenericDao.createRelation(groupData, compInstData, GraphEdgeLabels.GROUP_MEMBER, props); if (createRelation.isRight()) { TitanOperationStatus status = createRelation.right().value(); - String description = "Failed to associate group " + groupData.getUniqueId() - + " to component instance " + compInstName + " in graph. Status is " + status; - BeEcompErrorManager.getInstance().logInternalFlowError(ASSOCIATING_GROUP_TO_COMP_INST, description, - ErrorSeverity.ERROR); + String description = "Failed to associate group " + groupData.getUniqueId() + " to component instance " + compInstName + " in graph. Status is " + status; + BeEcompErrorManager.getInstance().logInternalFlowError(ASSOCIATING_GROUP_TO_COMP_INST, description, ErrorSeverity.ERROR); result = Either.right(status); break; } @@ -1171,21 +1244,18 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation return result; } - public StorageOperationStatus associateGroupsToComponentInstance(List<String> groups, String componentInstanceId, - String compInstName) { + public StorageOperationStatus associateGroupsToComponentInstance(List<String> groups, String componentInstanceId, String compInstName) { return associateGroupsToComponentInstance(groups, componentInstanceId, compInstName, false); } @Override - public StorageOperationStatus associateGroupsToComponentInstance(List<String> groups, String componentInstanceId, - String compInstName, boolean inTransaction) { + public StorageOperationStatus associateGroupsToComponentInstance(List<String> groups, String componentInstanceId, String compInstName, boolean inTransaction) { StorageOperationStatus result = null; try { - Either<List<GraphRelation>, TitanOperationStatus> either = this - .associateGroupsToComponentInstanceOnGraph(groups, componentInstanceId, compInstName); + Either<List<GraphRelation>, TitanOperationStatus> either = this.associateGroupsToComponentInstanceOnGraph(groups, componentInstanceId, compInstName); if (either.isRight()) { TitanOperationStatus status = either.right().value(); @@ -1215,14 +1285,12 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } @Override - public Either<List<GraphRelation>, TitanOperationStatus> dissociateAllGroupsFromArtifactOnGraph(String componentId, - NodeTypeEnum componentTypeEnum, String artifactId) { + public Either<List<GraphRelation>, TitanOperationStatus> dissociateAllGroupsFromArtifactOnGraph(String componentId, NodeTypeEnum componentTypeEnum, String artifactId) { List<GraphRelation> relations = new ArrayList<>(); Either<List<GraphRelation>, TitanOperationStatus> result = Either.left(relations); - Either<List<GroupDefinition>, TitanOperationStatus> allGroupsFromGraph = getAllGroupsFromGraph(componentId, - componentTypeEnum, true, true, false); + Either<List<GroupDefinition>, TitanOperationStatus> allGroupsFromGraph = getAllGroupsFromGraph(componentId, componentTypeEnum, true, true, false); if (allGroupsFromGraph.isRight()) { TitanOperationStatus status = allGroupsFromGraph.right().value(); return Either.right(status); @@ -1234,9 +1302,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } // Find all groups which contains this artifact id - List<GroupDefinition> associatedGroups = allGroups.stream() - .filter(p -> p.getArtifacts() != null && p.getArtifacts().contains(artifactId)) - .collect(Collectors.toList()); + List<GroupDefinition> associatedGroups = allGroups.stream().filter(p -> p.getArtifacts() != null && p.getArtifacts().contains(artifactId)).collect(Collectors.toList()); if (associatedGroups != null && false == associatedGroups.isEmpty()) { log.debug("The groups {} contains the artifact {}", associatedGroups.stream().map(p -> p.getName()).collect(Collectors.toList()), artifactId); @@ -1244,8 +1310,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation UniqueIdData artifactData = new UniqueIdData(NodeTypeEnum.ArtifactRef, artifactId); for (GroupDefinition groupDefinition : associatedGroups) { UniqueIdData groupData = new UniqueIdData(NodeTypeEnum.Group, groupDefinition.getUniqueId()); - Either<GraphRelation, TitanOperationStatus> deleteRelation = titanGenericDao.deleteRelation(groupData, - artifactData, GraphEdgeLabels.GROUP_ARTIFACT_REF); + Either<GraphRelation, TitanOperationStatus> deleteRelation = titanGenericDao.deleteRelation(groupData, artifactData, GraphEdgeLabels.GROUP_ARTIFACT_REF); if (deleteRelation.isRight()) { TitanOperationStatus status = deleteRelation.right().value(); if (status == TitanOperationStatus.NOT_FOUND) { @@ -1266,18 +1331,15 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } - public Either<GroupDefinition, TitanOperationStatus> getGroupFromGraph(String uniqueId, boolean skipProperties, - boolean skipMembers, boolean skipArtifacts) { + public Either<GroupDefinition, TitanOperationStatus> getGroupFromGraph(String uniqueId, boolean skipProperties, boolean skipMembers, boolean skipArtifacts) { Either<GroupDefinition, TitanOperationStatus> result = null; - Either<GroupData, TitanOperationStatus> groupRes = titanGenericDao - .getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Group), uniqueId, GroupData.class); + Either<GroupData, TitanOperationStatus> groupRes = titanGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Group), uniqueId, GroupData.class); if (groupRes.isRight()) { TitanOperationStatus status = groupRes.right().value(); log.debug("Failed to retrieve group {} from graph. Status is {}", uniqueId, status); - BeEcompErrorManager.getInstance().logBeFailedRetrieveNodeError("Fetch Group", uniqueId, - String.valueOf(status)); + BeEcompErrorManager.getInstance().logBeFailedRetrieveNodeError("Fetch Group", uniqueId, String.valueOf(status)); result = Either.right(status); return result; } @@ -1324,13 +1386,12 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } } else { List<GroupProperty> properties = propertiesRes.left().value(); - groupDefinition.setProperties(properties); + groupDefinition.convertFromGroupProperties(properties); } } if (false == skipArtifacts) { - Either<List<ImmutablePair<String, String>>, TitanOperationStatus> artifactsRes = getGroupArtifactsPairs( - uniqueId); + Either<List<ImmutablePair<String, String>>, TitanOperationStatus> artifactsRes = getGroupArtifactsPairs(uniqueId); if (artifactsRes.isRight()) { TitanOperationStatus status = artifactsRes.right().value(); if (status != TitanOperationStatus.OK) { @@ -1376,14 +1437,12 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } } - protected Either<List<GroupDefinition>, TitanOperationStatus> getAllGroupsFromGraph(String componentId, - NodeTypeEnum componentTypeEnum, boolean skipProperties, boolean skipMembers, boolean skipArtifacts) { + protected Either<List<GroupDefinition>, TitanOperationStatus> getAllGroupsFromGraph(String componentId, NodeTypeEnum componentTypeEnum, boolean skipProperties, boolean skipMembers, boolean skipArtifacts) { List<GroupDefinition> groups = new ArrayList<GroupDefinition>(); - Either<List<ImmutablePair<GroupData, GraphEdge>>, TitanOperationStatus> childrenNodes = titanGenericDao - .getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(componentTypeEnum), componentId, - GraphEdgeLabels.GROUP, NodeTypeEnum.Group, GroupData.class); + Either<List<ImmutablePair<GroupData, GraphEdge>>, TitanOperationStatus> childrenNodes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(componentTypeEnum), componentId, GraphEdgeLabels.GROUP, NodeTypeEnum.Group, + GroupData.class); if (childrenNodes.isRight()) { TitanOperationStatus status = childrenNodes.right().value(); @@ -1403,8 +1462,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation for (ImmutablePair<GroupData, GraphEdge> pair : graphGroups) { String groupUniqueId = pair.left.getGroupDataDefinition().getUniqueId(); - Either<GroupDefinition, TitanOperationStatus> groupRes = this.getGroupFromGraph(groupUniqueId, - skipProperties, skipMembers, skipArtifacts); + Either<GroupDefinition, TitanOperationStatus> groupRes = this.getGroupFromGraph(groupUniqueId, skipProperties, skipMembers, skipArtifacts); if (groupRes.isRight()) { TitanOperationStatus status = groupRes.right().value(); @@ -1422,14 +1480,12 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } @Override - public StorageOperationStatus dissociateAllGroupsFromArtifact(String componentId, NodeTypeEnum componentTypeEnum, - String artifactId, boolean inTransaction) { + public StorageOperationStatus dissociateAllGroupsFromArtifact(String componentId, NodeTypeEnum componentTypeEnum, String artifactId, boolean inTransaction) { StorageOperationStatus result = null; try { - Either<List<GraphRelation>, TitanOperationStatus> either = this - .dissociateAllGroupsFromArtifactOnGraph(componentId, componentTypeEnum, artifactId); + Either<List<GraphRelation>, TitanOperationStatus> either = this.dissociateAllGroupsFromArtifactOnGraph(componentId, componentTypeEnum, artifactId); if (either.isRight()) { TitanOperationStatus status = either.right().value(); @@ -1459,18 +1515,15 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } @Override - public StorageOperationStatus dissociateAllGroupsFromArtifact(String componentId, NodeTypeEnum componentTypeEnum, - String artifactId) { + public StorageOperationStatus dissociateAllGroupsFromArtifact(String componentId, NodeTypeEnum componentTypeEnum, String artifactId) { return dissociateAllGroupsFromArtifact(componentId, componentTypeEnum, artifactId, false); } @Override - public TitanOperationStatus dissociateAndAssociateGroupsFromArtifactOnGraph(String componentId, - NodeTypeEnum componentTypeEnum, String oldArtifactId, ArtifactData newArtifact) { + public TitanOperationStatus dissociateAndAssociateGroupsFromArtifactOnGraph(String componentId, NodeTypeEnum componentTypeEnum, String oldArtifactId, ArtifactData newArtifact) { - Either<List<GroupDefinition>, TitanOperationStatus> allGroupsFromGraph = getAllGroupsFromGraph(componentId, - componentTypeEnum, true, true, false); + Either<List<GroupDefinition>, TitanOperationStatus> allGroupsFromGraph = getAllGroupsFromGraph(componentId, componentTypeEnum, true, true, false); if (allGroupsFromGraph.isRight()) { TitanOperationStatus status = allGroupsFromGraph.right().value(); return status; @@ -1482,26 +1535,22 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } // Find all groups which contains this artifact id - List<GroupDefinition> associatedGroups = allGroups.stream() - .filter(p -> p.getArtifacts() != null && p.getArtifacts().contains(oldArtifactId)) - .collect(Collectors.toList()); + List<GroupDefinition> associatedGroups = allGroups.stream().filter(p -> p.getArtifacts() != null && p.getArtifacts().contains(oldArtifactId)).collect(Collectors.toList()); if (associatedGroups != null && false == associatedGroups.isEmpty()) { log.debug("The groups {} contains the artifact {}", associatedGroups.stream().map(p -> p.getName()).collect(Collectors.toList()), oldArtifactId); UniqueIdData oldArtifactData = new UniqueIdData(NodeTypeEnum.ArtifactRef, oldArtifactId); - UniqueIdData newArtifactData = new UniqueIdData(NodeTypeEnum.ArtifactRef, - newArtifact.getArtifactDataDefinition().getUniqueId()); + UniqueIdData newArtifactData = new UniqueIdData(NodeTypeEnum.ArtifactRef, newArtifact.getArtifactDataDefinition().getUniqueId()); Map<String, Object> props = new HashMap<String, Object>(); props.put(GraphPropertiesDictionary.NAME.getProperty(), newArtifactData.getLabel()); for (GroupDefinition groupDefinition : associatedGroups) { UniqueIdData groupData = new UniqueIdData(NodeTypeEnum.Group, groupDefinition.getUniqueId()); - Either<GraphRelation, TitanOperationStatus> deleteRelation = titanGenericDao.deleteRelation(groupData, - oldArtifactData, GraphEdgeLabels.GROUP_ARTIFACT_REF); - log.trace("After dissociate group {} from artifac {}", groupDefinition.getName(), oldArtifactId); + Either<GraphRelation, TitanOperationStatus> deleteRelation = titanGenericDao.deleteRelation(groupData, oldArtifactData, GraphEdgeLabels.GROUP_ARTIFACT_REF); + log.trace("After dissociate group {} from artifact {}" , groupDefinition.getName(), oldArtifactId); if (deleteRelation.isRight()) { TitanOperationStatus status = deleteRelation.right().value(); if (status == TitanOperationStatus.NOT_FOUND) { @@ -1510,9 +1559,8 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation return status; } - Either<GraphRelation, TitanOperationStatus> createRelation = titanGenericDao.createRelation(groupData, - newArtifactData, GraphEdgeLabels.GROUP_ARTIFACT_REF, props); - log.trace("After associate group {} to artifact {}", groupDefinition.getName(), newArtifact.getUniqueIdKey()); + Either<GraphRelation, TitanOperationStatus> createRelation = titanGenericDao.createRelation(groupData, newArtifactData, GraphEdgeLabels.GROUP_ARTIFACT_REF, props); + log.trace("After associate group {} to artifact {}" , groupDefinition.getName(), newArtifact.getUniqueIdKey()); if (createRelation.isRight()) { TitanOperationStatus status = createRelation.right().value(); if (status == TitanOperationStatus.NOT_FOUND) { @@ -1527,14 +1575,12 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } @Override - public StorageOperationStatus dissociateAndAssociateGroupsFromArtifact(String componentId, - NodeTypeEnum componentTypeEnum, String oldArtifactId, ArtifactData newArtifact, boolean inTransaction) { + public StorageOperationStatus dissociateAndAssociateGroupsFromArtifact(String componentId, NodeTypeEnum componentTypeEnum, String oldArtifactId, ArtifactData newArtifact, boolean inTransaction) { StorageOperationStatus result = null; try { - TitanOperationStatus status = this.dissociateAndAssociateGroupsFromArtifactOnGraph(componentId, - componentTypeEnum, oldArtifactId, newArtifact); + TitanOperationStatus status = this.dissociateAndAssociateGroupsFromArtifactOnGraph(componentId, componentTypeEnum, oldArtifactId, newArtifact); if (status != TitanOperationStatus.OK && status != TitanOperationStatus.NOT_FOUND) { result = DaoStatusConverter.convertTitanStatusToStorageStatus(status); @@ -1560,20 +1606,16 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } @Override - public StorageOperationStatus dissociateAndAssociateGroupsFromArtifact(String componentId, - NodeTypeEnum componentTypeEnum, String oldArtifactId, ArtifactData newArtifact) { - return dissociateAndAssociateGroupsFromArtifact(componentId, componentTypeEnum, oldArtifactId, newArtifact, - false); + public StorageOperationStatus dissociateAndAssociateGroupsFromArtifact(String componentId, NodeTypeEnum componentTypeEnum, String oldArtifactId, ArtifactData newArtifact) { + return dissociateAndAssociateGroupsFromArtifact(componentId, componentTypeEnum, oldArtifactId, newArtifact, false); } - private Either<List<ImmutablePair<String, String>>, TitanOperationStatus> getGroupArtifactsPairs( - String groupUniqueId) { + private Either<List<ImmutablePair<String, String>>, TitanOperationStatus> getGroupArtifactsPairs(String groupUniqueId) { Either<List<ImmutablePair<String, String>>, TitanOperationStatus> result = null; - Either<List<ImmutablePair<ArtifactData, GraphEdge>>, TitanOperationStatus> childrenNodes = titanGenericDao - .getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Group), groupUniqueId, - GraphEdgeLabels.GROUP_ARTIFACT_REF, NodeTypeEnum.ArtifactRef, ArtifactData.class); + Either<List<ImmutablePair<ArtifactData, GraphEdge>>, TitanOperationStatus> childrenNodes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Group), groupUniqueId, GraphEdgeLabels.GROUP_ARTIFACT_REF, + NodeTypeEnum.ArtifactRef, ArtifactData.class); if (childrenNodes.isRight()) { TitanOperationStatus status = childrenNodes.right().value(); if (status == TitanOperationStatus.NOT_FOUND) { @@ -1631,8 +1673,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation */ public Either<GroupDefinition, TitanOperationStatus> updateGroupVersionOnGraph(String groupUniqueId) { - Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupUniqueId, false, - false, false); + Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupUniqueId, false, false, false); if (groupFromGraph.isRight()) { TitanOperationStatus status = groupFromGraph.right().value(); @@ -1661,10 +1702,11 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } } + + /** - * The version of the group is an integer. In order to support BC, we might - * get a version in a float format. + * The version of the group is an integer. In order to support BC, we might get a version in a float format. * * @param version * @return @@ -1680,23 +1722,20 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } - public Either<GroupDefinition, TitanOperationStatus> associateArtifactsToGroupOnGraph(String groupId, - List<String> artifactsId) { + public Either<GroupDefinition, TitanOperationStatus> associateArtifactsToGroupOnGraph(String groupId, List<String> artifactsId) { if (artifactsId == null || artifactsId.isEmpty()) { return Either.right(TitanOperationStatus.OK); } for (String artifactId : artifactsId) { - Either<ArtifactData, TitanOperationStatus> findArtifactRes = titanGenericDao.getNode( - UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ArtifactRef), artifactId, ArtifactData.class); + Either<ArtifactData, TitanOperationStatus> findArtifactRes = titanGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ArtifactRef), artifactId, ArtifactData.class); if (findArtifactRes.isRight()) { TitanOperationStatus status = findArtifactRes.right().value(); if (status == TitanOperationStatus.NOT_FOUND) { status = TitanOperationStatus.INVALID_ID; } - String description = "Failed to associate group " + groupId + " to artifact " + artifactId - + " in graph. Status is " + status; + String description = "Failed to associate group " + groupId + " to artifact " + artifactId + " in graph. Status is " + status; BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(status); } @@ -1705,69 +1744,56 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation props.put(GraphPropertiesDictionary.NAME.getProperty(), findArtifactRes.left().value().getLabel()); GraphNode groupData = new UniqueIdData(NodeTypeEnum.Group, groupId); - Either<GraphRelation, TitanOperationStatus> addArtifactsRefResult = titanGenericDao.createRelation( - groupData, findArtifactRes.left().value(), GraphEdgeLabels.GROUP_ARTIFACT_REF, props); + Either<GraphRelation, TitanOperationStatus> addArtifactsRefResult = titanGenericDao.createRelation(groupData, findArtifactRes.left().value(), GraphEdgeLabels.GROUP_ARTIFACT_REF, props); if (addArtifactsRefResult.isRight()) { TitanOperationStatus status = addArtifactsRefResult.right().value(); - String description = "Failed to associate group " + groupData.getUniqueId() + " to artifact " - + artifactId + " in graph. Status is " + status; + String description = "Failed to associate group " + groupData.getUniqueId() + " to artifact " + artifactId + " in graph. Status is " + status; BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(status); } } - Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupId, true, true, - false); + Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupId, true, true, false); return groupFromGraph; } - public Either<GroupDefinition, TitanOperationStatus> associateMembersToGroupOnGraph(String groupId, - Map<String, String> members) { + public Either<GroupDefinition, TitanOperationStatus> associateMembersToGroupOnGraph(String groupId, Map<String, String> members) { if (members != null && false == members.isEmpty()) { Either<GraphRelation, TitanOperationStatus> addMembersRefResult = null; for (Entry<String, String> member : members.entrySet()) { - Either<ComponentInstanceData, TitanOperationStatus> findComponentInstanceRes = titanGenericDao.getNode( - UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceInstance), member.getValue(), - ComponentInstanceData.class); + Either<ComponentInstanceData, TitanOperationStatus> findComponentInstanceRes = titanGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceInstance), member.getValue(), ComponentInstanceData.class); if (findComponentInstanceRes.isRight()) { TitanOperationStatus status = findComponentInstanceRes.right().value(); if (status == TitanOperationStatus.NOT_FOUND) { status = TitanOperationStatus.INVALID_ID; } - String description = "Failed to find to find component instance group " + member.getValue() - + " in graph. Status is " + status; - BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, - ErrorSeverity.ERROR); + String description = "Failed to find to find component instance group " + member.getValue() + " in graph. Status is " + status; + BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(status); } Map<String, Object> props = new HashMap<String, Object>(); props.put(GraphPropertiesDictionary.NAME.getProperty(), member.getKey()); GraphNode groupData = new UniqueIdData(NodeTypeEnum.Group, groupId); - addMembersRefResult = titanGenericDao.createRelation(groupData, findComponentInstanceRes.left().value(), - GraphEdgeLabels.GROUP_MEMBER, props); + addMembersRefResult = titanGenericDao.createRelation(groupData, findComponentInstanceRes.left().value(), GraphEdgeLabels.GROUP_MEMBER, props); if (addMembersRefResult.isRight()) { TitanOperationStatus status = addMembersRefResult.right().value(); - String description = "Failed to associate group " + groupData.getUniqueId() - + " to component instance " + member.getValue() + " in graph. Status is " + status; - BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, - ErrorSeverity.ERROR); + String description = "Failed to associate group " + groupData.getUniqueId() + " to component instance " + member.getValue() + " in graph. Status is " + status; + BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(status); } } } - Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupId, true, false, - true); + Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupId, true, false, true); return groupFromGraph; } - public Either<GroupDefinition, TitanOperationStatus> dissociateArtifactsFromGroupOnGraph(String groupId, - List<String> artifactsId) { + public Either<GroupDefinition, TitanOperationStatus> dissociateArtifactsFromGroupOnGraph(String groupId, List<String> artifactsId) { if (artifactsId == null || artifactsId.isEmpty()) { return Either.right(TitanOperationStatus.OK); @@ -1777,32 +1803,28 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation for (String artifactId : artifactsId) { UniqueIdData artifactData = new UniqueIdData(NodeTypeEnum.Group, artifactId); - Either<GraphRelation, TitanOperationStatus> deleteRelation = titanGenericDao.deleteRelation(groupData, - artifactData, GraphEdgeLabels.GROUP_ARTIFACT_REF); - log.trace("After dissociate group {} from artifact {}", groupId, artifactId); + Either<GraphRelation, TitanOperationStatus> deleteRelation = titanGenericDao.deleteRelation(groupData, artifactData, GraphEdgeLabels.GROUP_ARTIFACT_REF); + log.trace("After dissociate group {} from artifact {}" ,groupId, artifactId); if (deleteRelation.isRight()) { TitanOperationStatus status = deleteRelation.right().value(); if (status == TitanOperationStatus.NOT_FOUND) { status = TitanOperationStatus.INVALID_ID; } - String description = "Failed to diassociate group " + groupId + " from artifact " + artifactId - + " in graph. Status is " + status; + String description = "Failed to diassociate group " + groupId + " from artifact " + artifactId + " in graph. Status is " + status; BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(status); } } - Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupId, true, true, - false); + Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupId, true, true, false); return groupFromGraph; } - public Either<GroupDefinition, TitanOperationStatus> dissociateMembersFromGroupOnGraph(String groupId, - Map<String, String> members) { + public Either<GroupDefinition, TitanOperationStatus> dissociateMembersFromGroupOnGraph(String groupId, Map<String, String> members) { if (members == null || members.isEmpty()) { return Either.right(TitanOperationStatus.OK); @@ -1812,25 +1834,22 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation for (Entry<String, String> member : members.entrySet()) { UniqueIdData artifactData = new UniqueIdData(NodeTypeEnum.Group, member.getValue()); - Either<GraphRelation, TitanOperationStatus> deleteRelation = titanGenericDao.deleteRelation(groupData, - artifactData, GraphEdgeLabels.GROUP_MEMBER); - log.trace("After dissociate group {} from members", groupId, member.getValue()); + Either<GraphRelation, TitanOperationStatus> deleteRelation = titanGenericDao.deleteRelation(groupData, artifactData, GraphEdgeLabels.GROUP_MEMBER); + log.trace("After dissociate group {} from members {}" ,groupId, member.getValue()); if (deleteRelation.isRight()) { TitanOperationStatus status = deleteRelation.right().value(); if (status == TitanOperationStatus.NOT_FOUND) { status = TitanOperationStatus.INVALID_ID; } - String description = "Failed to diassociate group " + groupId + " from member " + member.getValue() - + " in graph. Status is " + status; + String description = "Failed to diassociate group " + groupId + " from member " + member.getValue() + " in graph. Status is " + status; BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); return Either.right(status); } } - Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupId, true, true, - false); + Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupId, true, true, false); return groupFromGraph; @@ -1844,18 +1863,15 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation * @param inTransaction * @return */ - public Either<GroupDefinition, StorageOperationStatus> dissociateArtifactsFromGroup(String groupId, - List<String> artifactsId, boolean inTransaction) { + public Either<GroupDefinition, StorageOperationStatus> dissociateArtifactsFromGroup(String groupId, List<String> artifactsId, boolean inTransaction) { Either<GroupDefinition, StorageOperationStatus> result = null; try { - Either<GroupDefinition, TitanOperationStatus> titanRes = this.dissociateArtifactsFromGroupOnGraph(groupId, - artifactsId); + Either<GroupDefinition, TitanOperationStatus> titanRes = this.dissociateArtifactsFromGroupOnGraph(groupId, artifactsId); if (titanRes.isRight()) { - StorageOperationStatus storageOperationStatus = DaoStatusConverter - .convertTitanStatusToStorageStatus(titanRes.right().value()); + StorageOperationStatus storageOperationStatus = DaoStatusConverter.convertTitanStatusToStorageStatus(titanRes.right().value()); result = Either.right(storageOperationStatus); return result; } @@ -1878,18 +1894,15 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } - public Either<GroupDefinition, StorageOperationStatus> dissociateMembersFromGroup(String groupId, - Map<String, String> members, boolean inTransaction) { + public Either<GroupDefinition, StorageOperationStatus> dissociateMembersFromGroup(String groupId, Map<String, String> members, boolean inTransaction) { Either<GroupDefinition, StorageOperationStatus> result = null; try { - Either<GroupDefinition, TitanOperationStatus> titanRes = this.dissociateMembersFromGroupOnGraph(groupId, - members); + Either<GroupDefinition, TitanOperationStatus> titanRes = this.dissociateMembersFromGroupOnGraph(groupId, members); if (titanRes.isRight()) { - StorageOperationStatus storageOperationStatus = DaoStatusConverter - .convertTitanStatusToStorageStatus(titanRes.right().value()); + StorageOperationStatus storageOperationStatus = DaoStatusConverter.convertTitanStatusToStorageStatus(titanRes.right().value()); result = Either.right(storageOperationStatus); return result; } @@ -1920,19 +1933,16 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation * @param inTransaction * @return */ - public Either<GroupDefinition, StorageOperationStatus> associateArtifactsToGroup(String groupId, - List<String> artifactsId, boolean inTransaction) { + public Either<GroupDefinition, StorageOperationStatus> associateArtifactsToGroup(String groupId, List<String> artifactsId, boolean inTransaction) { Either<GroupDefinition, StorageOperationStatus> result = null; try { - Either<GroupDefinition, TitanOperationStatus> titanRes = this.associateArtifactsToGroupOnGraph(groupId, - artifactsId); + Either<GroupDefinition, TitanOperationStatus> titanRes = this.associateArtifactsToGroupOnGraph(groupId, artifactsId); if (titanRes.isRight()) { - StorageOperationStatus status = DaoStatusConverter - .convertTitanStatusToStorageStatus(titanRes.right().value()); + StorageOperationStatus status = DaoStatusConverter.convertTitanStatusToStorageStatus(titanRes.right().value()); result = Either.right(status); } @@ -1962,19 +1972,16 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation * @param inTransaction * @return */ - public Either<GroupDefinition, StorageOperationStatus> associateMembersToGroup(String groupId, - Map<String, String> members, boolean inTransaction) { + public Either<GroupDefinition, StorageOperationStatus> associateMembersToGroup(String groupId, Map<String, String> members, boolean inTransaction) { Either<GroupDefinition, StorageOperationStatus> result = null; try { - Either<GroupDefinition, TitanOperationStatus> titanRes = this.associateMembersToGroupOnGraph(groupId, - members); + Either<GroupDefinition, TitanOperationStatus> titanRes = this.associateMembersToGroupOnGraph(groupId, members); if (titanRes.isRight()) { - StorageOperationStatus status = DaoStatusConverter - .convertTitanStatusToStorageStatus(titanRes.right().value()); + StorageOperationStatus status = DaoStatusConverter.convertTitanStatusToStorageStatus(titanRes.right().value()); result = Either.right(status); return result; } @@ -1997,18 +2004,15 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } - public Either<List<GroupDefinition>, StorageOperationStatus> updateGroupVersion(List<String> groupsId, - boolean inTransaction) { + public Either<List<GroupDefinition>, StorageOperationStatus> updateGroupVersion(List<String> groupsId, boolean inTransaction) { Either<List<GroupDefinition>, StorageOperationStatus> result = null; try { - Either<List<GroupDefinition>, TitanOperationStatus> updateGroupVersionOnGraph = this - .updateGroupVersionOnGraph(groupsId); + Either<List<GroupDefinition>, TitanOperationStatus> updateGroupVersionOnGraph = this.updateGroupVersionOnGraph(groupsId); if (updateGroupVersionOnGraph.isRight()) { - result = Either.right(DaoStatusConverter - .convertTitanStatusToStorageStatus(updateGroupVersionOnGraph.right().value())); + result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(updateGroupVersionOnGraph.right().value())); return result; } @@ -2029,42 +2033,53 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } } - - public Either<GroupDefinition, StorageOperationStatus> updateGroupName(String uniqueId, String newName, - boolean inTransaction) { + /** + * This method updates group name + * @param groupToUpdateFromUniqueId + * @param newName + * @param inTransaction + * @return + */ + public Either<GroupDefinition, StorageOperationStatus> updateGroupName(String groupToUpdateFromUniqueId, + String newName, boolean inTransaction) { Either<GroupDefinition, StorageOperationStatus> result = null; try { - Either<GroupDefinition, TitanOperationStatus> updateGroupNameOnGraph = this.updateGroupNameOnGraph(uniqueId, - newName); + //Update Name + Either<GroupDefinition, TitanOperationStatus> updateGroupNameOnGraph = updateGroupNameOnGraph( + groupToUpdateFromUniqueId, newName); if (updateGroupNameOnGraph.isRight()) { result = Either.right( DaoStatusConverter.convertTitanStatusToStorageStatus(updateGroupNameOnGraph.right().value())); - return result; + } + else{ + result = Either.left(updateGroupNameOnGraph.left().value()); } + return result; - result = Either.left(updateGroupNameOnGraph.left().value()); + } finally { + handleTransactionCommitRollback(inTransaction, result); + } + } + @Override + public Either<GroupDefinition, StorageOperationStatus> updateGroupName(String groupToUpdateFromUniqueId, + String newName, GroupDefinition groupToUpdateTo, boolean inTransaction) { + Either<GroupDefinition, StorageOperationStatus> result = null; + + try { + //Update Name + result = updateGroupName(groupToUpdateFromUniqueId, newName, true); 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(); - } - } + handleTransactionCommitRollback(inTransaction, result); } } private Either<GroupDefinition, TitanOperationStatus> updateGroupNameOnGraph(String uniqueId, String newName) { - Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(uniqueId, false, false, - false); + Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(uniqueId, false, false, false); if (groupFromGraph.isRight()) { TitanOperationStatus status = groupFromGraph.right().value(); @@ -2090,4 +2105,32 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } } } + + + @Override + public StorageOperationStatus validateAndUpdatePropertyValue(GroupProperty property) { + + StorageOperationStatus result = null; + String innerType = property.getSchema() == null ? null : property.getSchema().getProperty() == null ? null : property.getSchema().getProperty().getType(); + Either<Map<String, DataTypeDefinition>, TitanOperationStatus> allDataTypes = dataTypeCache.getAll(); + Either<Object, Boolean> isValid = null; + if (allDataTypes.isRight()) { + TitanOperationStatus status = allDataTypes.right().value(); + log.debug("Failed to fetch data types from cache. Status is {}. ", status); + result = DaoStatusConverter.convertTitanStatusToStorageStatus(status); + } + if(result == null){ + isValid = propertyOperation.validateAndUpdatePropertyValue(property.getType(), property.getValue(), innerType, allDataTypes.left().value()); + if(isValid.isRight()){ + log.debug("Failed to validate property value {}. Status is {}. ", property.getValue(), StorageOperationStatus.INVALID_PROPERTY); + result = StorageOperationStatus.INVALID_PROPERTY; + } + } + if(result == null){ + String validValue = String.valueOf(isValid.left().value()); + property.setValue(validValue); + result = StorageOperationStatus.OK; + } + return result; + } } |