1 package org.openecomp.sdc.be.model.operations.impl;
4 import org.apache.commons.lang3.tuple.Pair;
5 import org.openecomp.sdc.be.dao.graph.datatype.GraphNode;
6 import org.openecomp.sdc.be.dao.graph.datatype.GraphRelation;
7 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
8 import org.openecomp.sdc.be.dao.titan.TitanGenericDao;
9 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
10 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
11 import org.openecomp.sdc.be.model.operations.api.DerivedFromOperation;
12 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
13 import org.openecomp.sdc.be.resources.data.UniqueIdData;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16 import org.springframework.stereotype.Component;
19 public class DefaultDerivedFromOperation implements DerivedFromOperation {
21 private static final Logger log = LoggerFactory.getLogger(DefaultDerivedFromOperation.class);
22 private TitanGenericDao titanGenericDao;
24 public DefaultDerivedFromOperation(TitanGenericDao titanGenericDao) {
25 this.titanGenericDao = titanGenericDao;
29 public Either<GraphRelation, StorageOperationStatus> addDerivedFromRelation(String parentUniqueId, String derivedFromUniqueId, NodeTypeEnum nodeType) {
30 UniqueIdData from = new UniqueIdData(NodeTypeEnum.PolicyType, parentUniqueId);
31 UniqueIdData to = new UniqueIdData(NodeTypeEnum.PolicyType, derivedFromUniqueId);
32 return titanGenericDao.createRelation(from, to, GraphEdgeLabels.DERIVED_FROM, null)
34 .map(DaoStatusConverter::convertTitanStatusToStorageStatus);
38 public <T extends GraphNode> Either<T, StorageOperationStatus> getDerivedFromChild(String uniqueId, NodeTypeEnum nodeType, Class<T> clazz) {
39 log.debug("#getDerivedFromChild - fetching derived from entity for node type {} with id {}", nodeType, uniqueId);
40 return titanGenericDao.getChild(UniqueIdBuilder.getKeyByNodeType(nodeType), uniqueId, GraphEdgeLabels.DERIVED_FROM, nodeType, clazz)
42 DaoStatusConverter::convertTitanStatusToStorageStatus);
46 public StorageOperationStatus removeDerivedFromRelation(String uniqueId, String derivedFromUniqueId, NodeTypeEnum nodeType) {
47 UniqueIdData from = new UniqueIdData(NodeTypeEnum.PolicyType, uniqueId);
48 UniqueIdData to = new UniqueIdData(NodeTypeEnum.PolicyType, derivedFromUniqueId);
49 return isDerivedFromExists(from, to)
50 .either(isRelationExist -> isRelationExist ? deleteDerivedFrom(from, to) : StorageOperationStatus.OK,
51 DaoStatusConverter::convertTitanStatusToStorageStatus);
56 private StorageOperationStatus deleteDerivedFrom(UniqueIdData from, UniqueIdData to) {
57 return titanGenericDao.deleteRelation(from, to, GraphEdgeLabels.DERIVED_FROM)
58 .either(deletedRelation -> StorageOperationStatus.OK,
59 DaoStatusConverter::convertTitanStatusToStorageStatus);
62 private Either<Boolean, TitanOperationStatus> isDerivedFromExists(UniqueIdData from, UniqueIdData to) {
63 return titanGenericDao.isRelationExist(from, to, GraphEdgeLabels.DERIVED_FROM);