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 | 1565 |
1 files changed, 5 insertions, 1560 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 52bcae36db..02c5194da3 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 @@ -71,10 +71,6 @@ import fj.data.Either; @Component("group-operation") public class GroupOperation extends AbstractOperation implements IGroupOperation { - private static String ADDING_GROUP = "AddingGroup"; - private static String DELETING_GROUP = "DeletingGroup"; - private static String DELETING_ALL_GROUPS = "DeletingAllGroups"; - private static String ASSOCIATING_GROUP_TO_COMP_INST = "AssociatingGroupToComponentInstance"; private static Logger log = LoggerFactory.getLogger(GroupOperation.class.getName()); @@ -87,597 +83,18 @@ 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) { - - String groupTypeUid = groupDefinition.getTypeUid(); - - if (groupTypeUid == null) { - BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, "Group type id is empty", ErrorSeverity.ERROR); - return Either.right(TitanOperationStatus.INVALID_ID); - } - - ComponentMetadataData metaData = null; - if (nodeTypeEnum == NodeTypeEnum.Resource) { - metaData = new ResourceMetadataData(); - } else { - metaData = new ServiceMetadataData(); - } - metaData.getMetadataDataDefinition().setUniqueId(componentId); - - groupDefinition.setUniqueId(UniqueIdBuilder.buildGroupUniqueId(componentId, groupDefinition.getName())); - - int propertiesSize = groupDefinition.getProperties() == null ? 0 : groupDefinition.getProperties().size(); - groupDefinition.setPropertyValueCounter(propertiesSize); - - GroupData groupData = new GroupData(groupDefinition); - - 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); - 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); - 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); - if (associateGroupTypeRes.isRight()) { - status = associateGroupTypeRes.right().value(); - 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); - if (associateComponentRes.isRight()) { - status = associateComponentRes.right().value(); - 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()); - if (groupTypeRes.isRight()) { - TitanOperationStatus operationStatus = groupTypeRes.right().value(); - log.debug("Failed to find group type {}", groupDefinition.getTypeUid()); - if (operationStatus == TitanOperationStatus.NOT_FOUND) { - return Either.right(TitanOperationStatus.INVALID_ID); - } - } - GroupTypeDefinition groupTypeDefinition = groupTypeRes.left().value(); - // 1. find properties from group type - List<PropertyDefinition> groupTypeProperties = groupTypeDefinition.getProperties(); - - // 2. check the properties exists in the group type. - // 3. add parent unique id to the properties - // 4. add node per group property which the group point to it and it - // points to the parent unique id - - // Adding properties to group - 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); - return Either.right(TitanOperationStatus.MATCH_NOT_FOUND); - } - - Map<String, PropertyDefinition> groupTypePropertiesMap = groupTypeProperties.stream().collect(Collectors.toMap(p -> p.getName(), p -> p)); - - Either<PropertyValueData, TitanOperationStatus> addPropertyResult = null; - int i = 1; - for (GroupProperty prop : properties) { - 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); - return Either.right(status); - } - i++; - } - } - - // 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) { - 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()); - * - * 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); } } } - */ - - // Associate group to members - // map of componentInstances <name: uniqueId> - Map<String, String> members = groupDefinition.getMembers(); - - if (members != null && false == members.isEmpty()) { - Either<GraphRelation, TitanOperationStatus> addMembersRefResult = null; - for (Entry<String, String> member : members.entrySet()) { - if (member.getValue() == null || member.getValue().isEmpty()) { - continue; - } - 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); - 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); - - 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); - return Either.right(status); - } - } - } - - 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); - - } - } - - 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) { - return Either.right(TitanOperationStatus.ILLEGAL_ARGUMENT); - } - - String propertyId = prop.getUniqueId(); - Either<PropertyData, TitanOperationStatus> findPropertyDefRes = titanGenericDao - .getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Property), propertyId, PropertyData.class); - - if (findPropertyDefRes.isRight()) { - TitanOperationStatus status = findPropertyDefRes.right().value(); - if (status == TitanOperationStatus.NOT_FOUND) { - status = TitanOperationStatus.INVALID_ID; - } - return Either.right(status); - } - - PropertyData propertyData = findPropertyDefRes.left().value(); - - PropertyDataDefinition propDataDef = propertyData.getPropertyDataDefinition(); - String propertyType = propDataDef.getType(); - String value = groupProperty.getValue(); - - Either<String, TitanOperationStatus> checkInnerType = propertyOperation.checkInnerType(propDataDef); - if (checkInnerType.isRight()) { - TitanOperationStatus status = checkInnerType.right().value(); - return Either.right(status); - } - - String innerType = checkInnerType.left().value(); - - 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); - return Either.right(status); - - } - - log.debug("Before validateAndUpdatePropertyValue"); - Either<Object, Boolean> isValid = propertyOperation.validateAndUpdatePropertyValue(propertyType, value, innerType, allDataTypes.left().value()); - log.debug("After validateAndUpdatePropertyValue. isValid = {}", isValid); - - String newValue = value; - if (isValid.isRight()) { - Boolean res = isValid.right().value(); - if (res == false) { - return Either.right(TitanOperationStatus.ILLEGAL_ARGUMENT); - } - } else { - Object object = isValid.left().value(); - if (object != null) { - newValue = object.toString(); - } - } - - String uniqueId = UniqueIdBuilder.buildGroupPropertyValueUid((String) groupData.getUniqueId(), index); - PropertyValueData propertyValueData = new PropertyValueData(); - 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("After adding property value to graph {}", propertyValueData); - - if (createNodeResult.isRight()) { - TitanOperationStatus operationStatus = createNodeResult.right().value(); - return Either.right(operationStatus); - } - - 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; - BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); - return Either.right(operationStatus); - } - - 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; - BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); - return Either.right(operationStatus); - } - - return Either.left(createNodeResult.left().value()); - } - - 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); - 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); - if (createRelResult.isRight()) { - TitanOperationStatus operationStatus = createRelResult.right().value(); - log.debug("Failed to associate component {} to group {} in graph. Status is {}", componentId, groupData, operationStatus); - return Either.right(operationStatus); - } - - return Either.left(createRelResult.left().value()); - } - - 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); - 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); - } - return createRelResult; - } - - @Override - 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) { - - Either<GroupDefinition, StorageOperationStatus> result = null; - try { - Either<GroupData, TitanOperationStatus> addGroupRes = addGroupToGraph(nodeTypeEnum, componentId, groupDefinition); - if (addGroupRes.isRight()) { - TitanOperationStatus status = addGroupRes.right().value(); - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - } else { - - GroupData groupData = addGroupRes.left().value(); - String groupUid = groupData.getGroupDataDefinition().getUniqueId(); - result = this.getGroup(groupUid, true); - - } - - return result; - - } finally { - if (false == inTransaction) { - if (result == null || result.isRight()) { - log.debug("Going to execute rollback on graph. Failed to add group {} to {}", groupDefinition.getName(), nodeTypeEnum.toString()); - titanGenericDao.rollback(); - } else { - log.debug("Going to execute commit on graph."); - titanGenericDao.commit(); - } - } - } - } - private GroupDefinition convertGroupDataToGroupDefinition(GroupData groupData) { GroupDefinition newGroupDefinition = new GroupDefinition(groupData.getGroupDataDefinition()); return newGroupDefinition; } - public Either<GroupDefinition, StorageOperationStatus> getGroup(String uniqueId) { - return getGroup(uniqueId, false); - } - - @Override - public Either<GroupDefinition, StorageOperationStatus> getGroup(String uniqueId, boolean inTransaction) { - - Either<GroupDefinition, StorageOperationStatus> result = null; - - try { - - Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(uniqueId); - - if (groupFromGraph.isRight()) { - TitanOperationStatus status = groupFromGraph.right().value(); - log.debug("Failed to retrieve group {} from graph. Status is {}", uniqueId, status); - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - } else { - GroupDefinition groupDefinition = groupFromGraph.left().value(); - result = Either.left(groupDefinition); - } - - 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 Either<GroupDefinition, TitanOperationStatus> getGroupFromGraph(String uniqueId) { - - return getGroupFromGraph(uniqueId, false, false, false); - - } - /** * get members of group * * @param groupUniqueId * @return */ - protected Either<Map<String, String>, TitanOperationStatus> getGroupMembers(String groupUniqueId) { + private Either<Map<String, String>, TitanOperationStatus> getGroupMembers(String groupUniqueId) { Either<Map<String, String>, TitanOperationStatus> result = null; @@ -711,7 +128,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation return result; } - public Either<GroupTypeDefinition, TitanOperationStatus> getGroupTypeOfGroup(String groupUniqueId) { + private 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); @@ -726,9 +143,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation GroupTypeData groupTypeData = groupTypeRes.left().value().getKey(); - Either<GroupTypeDefinition, TitanOperationStatus> groupTypeByUid = groupTypeOperation.getGroupTypeByUid(groupTypeData.getGroupTypeDataDefinition().getUniqueId()); - - return groupTypeByUid; + return groupTypeOperation.getGroupTypeByUid(groupTypeData.getGroupTypeDataDefinition().getUniqueId()); } @@ -740,7 +155,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation * @param groupUid * @return */ - public Either<List<GroupProperty>, TitanOperationStatus> getGroupProperties(String groupUid) { + private Either<List<GroupProperty>, TitanOperationStatus> getGroupProperties(String groupUid) { List<GroupProperty> groupPropertiesList = new ArrayList<>(); @@ -824,466 +239,6 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation return Either.left(groupPropertiesList); } - 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) { - - Either<List<GroupDefinition>, StorageOperationStatus> result = null; - - try { - - 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); - if (status == TitanOperationStatus.NOT_FOUND) { - status = TitanOperationStatus.OK; - } - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - } else { - List<GroupDefinition> groupsDefinition = allGroups.left().value(); - result = Either.left(groupsDefinition); - } - - 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 Either<List<GroupDefinition>, StorageOperationStatus> getAllGroups(String componentId, NodeTypeEnum compTypeEnum) { - return getAllGroups(componentId, compTypeEnum, false); - } - - public Either<GroupData, TitanOperationStatus> deleteGroupFromGraph(String groupUniqueId) { - - Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupUniqueId); - if (groupFromGraph.isRight()) { - TitanOperationStatus status = groupFromGraph.right().value(); - log.debug("Cannot find group {} on graph. Status is {}", groupUniqueId, status); - return Either.right(status); - } - - GroupDefinition groupDefinition = groupFromGraph.left().value(); - // 1. delete all properties values nodes - 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); - if (deleteNode.isRight()) { - TitanOperationStatus status = groupFromGraph.right().value(); - 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 group {}" ,propValueUniqueId, groupDefinition.getName()); - } - } - } - } - - // 2. delete the group node - UniqueIdData uniqueIdData = new UniqueIdData(NodeTypeEnum.Group, groupUniqueId); - Either<GroupData, TitanOperationStatus> deleteNode = titanGenericDao.deleteNode(uniqueIdData, GroupData.class); - if (deleteNode.isRight()) { - TitanOperationStatus status = groupFromGraph.right().value(); - 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 { - log.trace("Group {} was deleted from group", groupUniqueId); - } - - GroupData groupData = deleteNode.left().value(); - return Either.left(groupData); - } - - public Either<GroupDefinition, StorageOperationStatus> deleteGroup(String groupUniqueId) { - return deleteGroup(groupUniqueId, false); - } - - public Either<GroupDefinition, StorageOperationStatus> deleteGroup(String groupUniqueId, boolean inTransaction) { - - Either<GroupDefinition, StorageOperationStatus> result = null; - - try { - - Either<GroupData, TitanOperationStatus> deleteGroup = this.deleteGroupFromGraph(groupUniqueId); - - if (deleteGroup.isRight()) { - TitanOperationStatus status = deleteGroup.right().value(); - log.debug("Failed to delete group {} from graph. Status is ", groupUniqueId, status.name()); - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - } else { - GroupData groupData = deleteGroup.left().value(); - GroupDefinition groupDefinition = convertGroupDataToGroupDefinition(groupData); - result = Either.left(groupDefinition); - } - - 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 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); - - 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()); - } - return Either.right(status); - } - - List<GroupDefinition> result = new ArrayList<>(); - - List<ImmutablePair<GroupData, GraphEdge>> list = childrenNodes.left().value(); - if (list != null) { - for (ImmutablePair<GroupData, GraphEdge> pair : list) { - String uniqueId = pair.left.getGroupDataDefinition().getUniqueId(); - Either<GroupData, TitanOperationStatus> deleteGroupFromGraph = deleteGroupFromGraph(uniqueId); - if (deleteGroupFromGraph.isRight()) { - TitanOperationStatus status = deleteGroupFromGraph.right().value(); - BeEcompErrorManager.getInstance().logBeFailedDeleteNodeError(DELETING_ALL_GROUPS, uniqueId, status.name()); - return Either.right(status); - } - GroupData groupData = deleteGroupFromGraph.left().value(); - GroupDefinition groupDefinition = convertGroupDataToGroupDefinition(groupData); - result.add(groupDefinition); - } - } - - return Either.left(result); - } - - @Override - 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); - - if (allGroups.isRight()) { - TitanOperationStatus status = allGroups.right().value(); - log.debug("Failed to delete all groups of component {} from graph. Status is {}", componentId, status); - if (status == TitanOperationStatus.NOT_FOUND) { - status = TitanOperationStatus.OK; - } - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - } else { - List<GroupDefinition> groupsDefinition = allGroups.left().value(); - result = Either.left(groupsDefinition); - } - - 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 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) { - - List<GroupDefinition> groupsToCreate = new ArrayList<>(); - Either<List<GroupDefinition>, StorageOperationStatus> result = Either.left(groupsToCreate); - - List<GroupDefinition> groups = origResource.getGroups(); - - if (groups != null) { - // keep typeUid - // keep artifacts uids - // remove properties without valueUniqueId - for (GroupDefinition groupDefinition : groups) { - - GroupDefinition gdToCreate = new GroupDefinition(groupDefinition); - gdToCreate.setUniqueId(null); - gdToCreate.setMembers(null); - - 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()); - - gdToCreate.convertFromGroupProperties(propertiesToUpdate); - - } - - Map<String, String> members = groupDefinition.getMembers(); - if (cloneInstances != null) { - List<ComponentInstance> createdInstances = cloneInstances.left; - 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> membersToCreate = new HashMap<>(); - - for (String oldCompInstId : members.values()) { - String newCompInstUid = oldCompUidToNew.get(oldCompInstId); - if (newCompInstUid == null) { - result = Either.right(StorageOperationStatus.MATCH_NOT_FOUND); - return result; - } - String newCompInstName = compInstIdToName.get(newCompInstUid); - membersToCreate.put(newCompInstName, newCompInstUid); - } - - gdToCreate.setMembers(membersToCreate); - } - } - - log.debug("The group definition for creation is {}", gdToCreate); - - groupsToCreate.add(gdToCreate); - } - - } - - return result; - } - - @Override - public Either<List<GroupDefinition>, StorageOperationStatus> addGroups(NodeTypeEnum nodeTypeEnum, String componentId, List<GroupDefinition> groups, boolean inTransaction) { - - List<GroupDefinition> createdGroups = new ArrayList<>(); - - Either<List<GroupDefinition>, StorageOperationStatus> result = null; - - try { - - if (groups != null) { - for (GroupDefinition groupDefinition : groups) { - Either<GroupDefinition, StorageOperationStatus> addGroup = this.addGroup(nodeTypeEnum, componentId, groupDefinition, true); - if (addGroup.isRight()) { - StorageOperationStatus status = addGroup.right().value(); - result = Either.right(status); - return result; - } - - createdGroups.add(addGroup.left().value()); - } - } - - result = Either.left(createdGroups); - 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 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); - - if (parentNodes.isRight()) { - TitanOperationStatus status = parentNodes.right().value(); - if (status != TitanOperationStatus.NOT_FOUND) { - 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()); - groups.addAll(list); - } - - return result; - - } - - @Override - 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); - - if (groups.isRight()) { - TitanOperationStatus status = groups.right().value(); - if (status == TitanOperationStatus.NOT_FOUND) { - status = TitanOperationStatus.OK; - } - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - return result; - } - - List<String> list = groups.left().value(); - - return Either.left(list); - - } 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 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) { - - List<GraphRelation> relations = new ArrayList<>(); - Either<List<GraphRelation>, TitanOperationStatus> result = Either.left(relations); - - if (groups != null && false == groups.isEmpty()) { - - UniqueIdData compInstData = new UniqueIdData(NodeTypeEnum.ResourceInstance, componentInstanceId); - - for (String groupId : groups) { - UniqueIdData groupData = new UniqueIdData(NodeTypeEnum.Group, groupId); - - 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); - 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); - result = Either.right(status); - break; - } - GraphRelation graphRelation = createRelation.left().value(); - relations.add(graphRelation); - } - } else { - result = Either.right(TitanOperationStatus.OK); - } - - return result; - } - - 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) { - - StorageOperationStatus result = null; - - try { - Either<List<GraphRelation>, TitanOperationStatus> either = this.associateGroupsToComponentInstanceOnGraph(groups, componentInstanceId, compInstName); - - if (either.isRight()) { - TitanOperationStatus status = either.right().value(); - if (status == TitanOperationStatus.NOT_FOUND) { - status = TitanOperationStatus.OK; - } - result = DaoStatusConverter.convertTitanStatusToStorageStatus(status); - return result; - } - - result = StorageOperationStatus.OK; - return result; - - } finally { - if (false == inTransaction) { - if (result == null || result != StorageOperationStatus.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(); - } - } - } - - } - @Override public Either<List<GraphRelation>, TitanOperationStatus> dissociateAllGroupsFromArtifactOnGraph(String componentId, NodeTypeEnum componentTypeEnum, String artifactId) { @@ -1479,49 +434,7 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation return Either.left(groups); } - @Override - 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); - - if (either.isRight()) { - TitanOperationStatus status = either.right().value(); - if (status == TitanOperationStatus.NOT_FOUND) { - status = TitanOperationStatus.OK; - } - result = DaoStatusConverter.convertTitanStatusToStorageStatus(status); - return result; - } - - result = StorageOperationStatus.OK; - return result; - - } finally { - if (false == inTransaction) { - if (result == null || result != StorageOperationStatus.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(); - } - } - } - - } - - @Override - 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) { + private TitanOperationStatus dissociateAndAssociateGroupsFromArtifactOnGraph(String componentId, NodeTypeEnum componentTypeEnum, String oldArtifactId, ArtifactData newArtifact) { Either<List<GroupDefinition>, TitanOperationStatus> allGroupsFromGraph = getAllGroupsFromGraph(componentId, componentTypeEnum, true, true, false); if (allGroupsFromGraph.isRight()) { @@ -1602,12 +515,6 @@ 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); } private Either<List<ImmutablePair<String, String>>, TitanOperationStatus> getGroupArtifactsPairs(String groupUniqueId) { @@ -1645,468 +552,6 @@ public class GroupOperation extends AbstractOperation implements IGroupOperation } - public Either<List<GroupDefinition>, TitanOperationStatus> updateGroupVersionOnGraph(List<String> groupsUniqueId) { - - if (groupsUniqueId != null) { - - List<GroupDefinition> groups = new ArrayList<>(); - for (String groupUid : groupsUniqueId) { - Either<GroupDefinition, TitanOperationStatus> either = updateGroupVersionOnGraph(groupUid); - if (either.isRight()) { - log.debug("Failed to update version of group {}", groupUid); - return Either.right(either.right().value()); - } - groups.add(either.left().value()); - } - return Either.left(groups); - } - - return Either.right(TitanOperationStatus.OK); - - } - - /** - * update the group version of a given group. It also creates a new UUID. - * - * @param groupUniqueId - * @return - */ - public Either<GroupDefinition, TitanOperationStatus> updateGroupVersionOnGraph(String groupUniqueId) { - - Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupUniqueId, false, false, false); - - if (groupFromGraph.isRight()) { - TitanOperationStatus status = groupFromGraph.right().value(); - return Either.right(status); - } else { - GroupDefinition groupDefinition = groupFromGraph.left().value(); - String version = groupDefinition.getVersion(); - String newVersion = increaseMajorVersion(version); - Integer pvCounter = groupDefinition.getPropertyValueCounter(); - - GroupData groupData = new GroupData(); - groupData.getGroupDataDefinition().setUniqueId(groupUniqueId); - groupData.getGroupDataDefinition().setVersion(newVersion); - groupData.getGroupDataDefinition().setPropertyValueCounter(pvCounter); - - String groupUUID = UniqueIdBuilder.generateUUID(); - groupData.getGroupDataDefinition().setGroupUUID(groupUUID); - - Either<GroupData, TitanOperationStatus> updateNode = titanGenericDao.updateNode(groupData, GroupData.class); - if (updateNode.isRight()) { - return Either.right(updateNode.right().value()); - } else { - groupFromGraph = this.getGroupFromGraph(groupUniqueId, false, false, false); - return groupFromGraph; - } - - } - } - - - - /** - * 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 - */ - private String increaseMajorVersion(String version) { - - String[] versionParts = version.split(LifecycleOperation.VERSION_DELIMETER_REGEXP); - Integer majorVersion = Integer.parseInt(versionParts[0]); - - majorVersion++; - - return String.valueOf(majorVersion); - - } - - 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); - 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; - 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()); - - GraphNode groupData = new UniqueIdData(NodeTypeEnum.Group, groupId); - 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; - BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); - return Either.right(status); - } - } - - Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupId, true, true, false); - - return groupFromGraph; - } - - 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); - 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); - 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); - 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); - return Either.right(status); - } - } - } - - Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupId, true, false, true); - - return groupFromGraph; - } - - public Either<GroupDefinition, TitanOperationStatus> dissociateArtifactsFromGroupOnGraph(String groupId, List<String> artifactsId) { - - if (artifactsId == null || artifactsId.isEmpty()) { - return Either.right(TitanOperationStatus.OK); - } - - UniqueIdData groupData = new UniqueIdData(NodeTypeEnum.Group, groupId); - 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); - - 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; - BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); - return Either.right(status); - } - - } - - Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupId, true, true, false); - - return groupFromGraph; - - } - - public Either<GroupDefinition, TitanOperationStatus> dissociateMembersFromGroupOnGraph(String groupId, Map<String, String> members) { - - if (members == null || members.isEmpty()) { - return Either.right(TitanOperationStatus.OK); - } - - UniqueIdData groupData = new UniqueIdData(NodeTypeEnum.Group, groupId); - 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()); - - 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; - BeEcompErrorManager.getInstance().logInternalFlowError(ADDING_GROUP, description, ErrorSeverity.ERROR); - return Either.right(status); - } - - } - - Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(groupId, true, true, false); - - return groupFromGraph; - - } - - /** - * dissociate artifacts from a group. It do not delete the artifacts !!! - * - * @param groupId - * @param artifactsId - * @param inTransaction - * @return - */ - 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); - - if (titanRes.isRight()) { - StorageOperationStatus storageOperationStatus = DaoStatusConverter.convertTitanStatusToStorageStatus(titanRes.right().value()); - result = Either.right(storageOperationStatus); - return result; - } - - result = Either.left(titanRes.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<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); - - if (titanRes.isRight()) { - StorageOperationStatus storageOperationStatus = DaoStatusConverter.convertTitanStatusToStorageStatus(titanRes.right().value()); - result = Either.right(storageOperationStatus); - return result; - } - - result = Either.left(titanRes.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(); - } - } - } - - } - - /** - * Associate artifacts to a given group - * - * @param groupId - * @param artifactsId - * @param inTransaction - * @return - */ - 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); - - if (titanRes.isRight()) { - StorageOperationStatus status = DaoStatusConverter.convertTitanStatusToStorageStatus(titanRes.right().value()); - result = Either.right(status); - } - - result = Either.left(titanRes.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(); - } - } - } - - } - - /** - * Associate artifacts to a given group - * - * @param groupId - * @param artifactsId - * @param inTransaction - * @return - */ - 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); - - if (titanRes.isRight()) { - StorageOperationStatus status = DaoStatusConverter.convertTitanStatusToStorageStatus(titanRes.right().value()); - result = Either.right(status); - return result; - } - - result = Either.left(titanRes.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<List<GroupDefinition>, StorageOperationStatus> updateGroupVersion(List<String> groupsId, boolean inTransaction) { - - Either<List<GroupDefinition>, StorageOperationStatus> result = null; - - try { - Either<List<GroupDefinition>, TitanOperationStatus> updateGroupVersionOnGraph = this.updateGroupVersionOnGraph(groupsId); - - if (updateGroupVersionOnGraph.isRight()) { - result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(updateGroupVersionOnGraph.right().value())); - return result; - } - - result = Either.left(updateGroupVersionOnGraph.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(); - } - } - } - - } - /** - * 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 { - //Update Name - Either<GroupDefinition, TitanOperationStatus> updateGroupNameOnGraph = updateGroupNameOnGraph( - groupToUpdateFromUniqueId, newName); - - if (updateGroupNameOnGraph.isRight()) { - result = Either.right( - DaoStatusConverter.convertTitanStatusToStorageStatus(updateGroupNameOnGraph.right().value())); - } - else{ - result = Either.left(updateGroupNameOnGraph.left().value()); - } - return result; - - } 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 { - handleTransactionCommitRollback(inTransaction, result); - } - } - - private Either<GroupDefinition, TitanOperationStatus> updateGroupNameOnGraph(String uniqueId, String newName) { - - Either<GroupDefinition, TitanOperationStatus> groupFromGraph = this.getGroupFromGraph(uniqueId, false, false, false); - - if (groupFromGraph.isRight()) { - TitanOperationStatus status = groupFromGraph.right().value(); - return Either.right(status); - } else { - GroupDefinition groupDefinition = groupFromGraph.left().value(); - String version = groupDefinition.getVersion(); - String newVersion = increaseMajorVersion(version); - Integer pvCounter = groupDefinition.getPropertyValueCounter(); - - GroupData groupData = new GroupData(); - groupData.getGroupDataDefinition().setUniqueId(uniqueId); - groupData.getGroupDataDefinition().setVersion(newVersion); - groupData.getGroupDataDefinition().setName(newName); - groupData.getGroupDataDefinition().setPropertyValueCounter(pvCounter); - - Either<GroupData, TitanOperationStatus> updateNode = titanGenericDao.updateNode(groupData, GroupData.class); - if (updateNode.isRight()) { - return Either.right(updateNode.right().value()); - } else { - groupFromGraph = this.getGroupFromGraph(uniqueId, false, false, false); - return groupFromGraph; - } - } - } - - @Override public StorageOperationStatus validateAndUpdatePropertyValue(GroupProperty property) { |