aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-dao/src/main/java/org/openecomp/sdc/be/dao/titan/TitanGenericDao.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-dao/src/main/java/org/openecomp/sdc/be/dao/titan/TitanGenericDao.java')
-rw-r--r--catalog-dao/src/main/java/org/openecomp/sdc/be/dao/titan/TitanGenericDao.java170
1 files changed, 69 insertions, 101 deletions
diff --git a/catalog-dao/src/main/java/org/openecomp/sdc/be/dao/titan/TitanGenericDao.java b/catalog-dao/src/main/java/org/openecomp/sdc/be/dao/titan/TitanGenericDao.java
index 535146d692..8445d58873 100644
--- a/catalog-dao/src/main/java/org/openecomp/sdc/be/dao/titan/TitanGenericDao.java
+++ b/catalog-dao/src/main/java/org/openecomp/sdc/be/dao/titan/TitanGenericDao.java
@@ -26,6 +26,8 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
import javax.annotation.Resource;
@@ -45,6 +47,7 @@ import org.openecomp.sdc.be.dao.graph.datatype.GraphElementTypeEnum;
import org.openecomp.sdc.be.dao.graph.datatype.GraphNode;
import org.openecomp.sdc.be.dao.graph.datatype.GraphRelation;
import org.openecomp.sdc.be.dao.graph.datatype.RelationEndPoint;
+import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
@@ -62,17 +65,16 @@ import com.thinkaurelius.titan.core.TitanVertexQuery;
import com.thinkaurelius.titan.graphdb.query.TitanPredicate;
import fj.data.Either;
-
@Component("titan-generic-dao")
public class TitanGenericDao {
- @Resource
- TitanGraphClient titanClient;
+ private TitanGraphClient titanClient;
private static Logger logger = LoggerFactory.getLogger(TitanGenericDao.class.getName());
private static final String LOCK_NODE_PREFIX = "lock_";
- public TitanGenericDao() {
+ public TitanGenericDao(TitanGraphClient titanClient) {
+ this.titanClient = titanClient;
logger.info("** TitanGenericDao created");
}
@@ -231,14 +233,9 @@ public class TitanGenericDao {
}
}
- public TitanOperationStatus createEdge(TitanVertex vertexOut, TitanVertex vertexIn, GraphEdgeLabels type, Map<String, Object> properties) {
+ public TitanOperationStatus createEdge(Vertex vertexOut, Vertex vertexIn, GraphEdgeLabels type, Map<String, Object> properties) {
try {
- Edge edge = vertexOut.addEdge(type.getProperty(), vertexIn);
-
- if (properties != null) {
-
- setProperties(edge, properties);
- }
+ Edge edge = addEdge(vertexOut, vertexIn, type, properties);
} catch (Exception e) {
logger.debug("Failed to create edge from [{}] to [{}]", vertexOut, vertexIn, e);
return TitanGraphClient.handleTitanException(e);
@@ -246,6 +243,42 @@ public class TitanGenericDao {
return TitanOperationStatus.OK;
}
+
+ private Edge addEdge(Vertex vertexOut, Vertex vertexIn, GraphEdgeLabels type, Map<String, Object> properties) {
+ Edge edge = vertexOut.addEdge(type.getProperty(), vertexIn);
+
+ if (properties != null) {
+
+ setProperties(edge, properties);
+ }
+ return edge;
+ }
+
+ /**
+ * creates an identical edge in the graph
+ * @param edge
+ * @return the copy operation status
+ */
+ public Either<Edge, TitanOperationStatus> copyEdge(Vertex out, Vertex in, Edge edge) {
+ GraphEdgeLabels byName = GraphEdgeLabels.getByName(edge.label());
+ return this.saveEdge(out, in, byName, edgePropertiesToMap(edge));
+ }
+
+ private <V> Map<String, Object> edgePropertiesToMap(Edge edge) {
+ Iterable<Property<Object>> propertiesIterable = edge::properties;
+ return StreamSupport.stream(propertiesIterable.spliterator(), false).collect(Collectors.toMap(Property::key, Property::value));
+ }
+
+ public Either<Edge, TitanOperationStatus> saveEdge(Vertex vertexOut, Vertex vertexIn, GraphEdgeLabels type, Map<String, Object> properties) {
+ try {
+ Edge edge = addEdge(vertexOut, vertexIn, type, properties);
+ return Either.left(edge);
+ } catch (Exception e) {
+ logger.debug("Failed to create edge from [{}] to [{}]", vertexOut, vertexIn, e);
+ return Either.right(TitanGraphClient.handleTitanException(e));
+ }
+
+ }
public TitanOperationStatus createEdge(TitanVertex vertexOut, GraphNode to, GraphEdgeLabels type, Map<String, Object> properties) {
@@ -336,10 +369,7 @@ public class TitanGenericDao {
public Either<GraphRelation, TitanOperationStatus> getRelation(GraphNode from, GraphNode to, GraphEdgeLabels label) {
logger.debug("try to get relation from [{}] to [{}]", from.getKeyValueId(), to.getKeyValueId());
- ImmutablePair<String, Object> keyValueIdFrom = from.getKeyValueId();
- ImmutablePair<String, Object> keyValueIdTo = to.getKeyValueId();
-
- Either<Edge, TitanOperationStatus> edge = getEdgeByVerticies(keyValueIdFrom.getKey(), keyValueIdFrom.getValue(), keyValueIdTo.getKey(), keyValueIdTo.getValue(), label.getProperty());
+ Either<Edge, TitanOperationStatus> edge = getEdgeByNodes(from, to, label);
if (edge.isLeft()) {
try {
@@ -356,6 +386,13 @@ public class TitanGenericDao {
}
}
+ public Either<Edge, TitanOperationStatus> getEdgeByNodes(GraphNode from, GraphNode to, GraphEdgeLabels label) {
+ ImmutablePair<String, Object> keyValueIdFrom = from.getKeyValueId();
+ ImmutablePair<String, Object> keyValueIdTo = to.getKeyValueId();
+
+ return getEdgeByVerticies(keyValueIdFrom.getKey(), keyValueIdFrom.getValue(), keyValueIdTo.getKey(), keyValueIdTo.getValue(), label.getProperty());
+ }
+
public Either<GraphRelation, TitanOperationStatus> deleteIncomingRelationByCriteria(GraphNode to, GraphEdgeLabels label, Map<String, Object> props) {
Either<Edge, TitanOperationStatus> edgeByCriteria = getIncomingEdgeByCriteria(to, label, props);
@@ -445,7 +482,7 @@ public class TitanGenericDao {
return Either.left(matchingEdge);
}
- private Either<Edge, TitanOperationStatus> getEdgeByVerticies(String keyNameFrom, Object keyValueFrom, String keyNameTo, Object keyValueTo, String label) {
+ public Either<Edge, TitanOperationStatus> getEdgeByVerticies(String keyNameFrom, Object keyValueFrom, String keyNameTo, Object keyValueTo, String label) {
Either<TitanGraph, TitanOperationStatus> graph = titanClient.getGraph();
if (graph.isLeft()) {
@@ -549,18 +586,18 @@ public class TitanGenericDao {
GraphRelation newRelation = GraphElementFactory.createRelation(edge.label(), getProperties(edge), nodeOut, nodeIn);
if (logger.isDebugEnabled()) {
- logger.debug("Relation was updated from [ {} ] to [ {} ]", from, to);
+ logger.debug("Relation was updated from [{}] to [{}] ", from, to);
}
return Either.left(newRelation);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
- logger.debug("Failed to update relation from [ {} ] [ {} ] {}", from, to, e);
+ logger.debug("Failed to update relation from [{}] to [{}] ", from, to, e);
}
return Either.right(TitanGraphClient.handleTitanException(e));
}
} else {
if (logger.isDebugEnabled()) {
- logger.debug("Failed to update relation from [ {} ] [ {} ] {}", from, to, edgeS.right().value());
+ logger.debug("Failed to update relation from [{}] to [{}] {}", from, to, edgeS.right().value());
}
return Either.right(edgeS.right().value());
}
@@ -598,19 +635,19 @@ public class TitanGenericDao {
return Either.left(vertex);
}
if (logger.isDebugEnabled()) {
- logger.debug("No vertex in graph for key = {} and value = {} label = {}", name, value, label);
+ logger.debug("No vertex in graph for key =" + name + " and value = " + value + " label = " + label);
}
return Either.right(TitanOperationStatus.NOT_FOUND);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
- logger.debug("Failed to get vertex in graph for key = {} and value = {} label = {}", name, value, label);
+ logger.debug("Failed to get vertex in graph for key ={} and value = {} label = {}",name,value,label);
}
return Either.right(TitanGraphClient.handleTitanException(e));
}
} else {
if (logger.isDebugEnabled()) {
- logger.debug("No vertex in graph for key = {} and value = {} label = {}. error : {}", name, value, label, graph.right().value());
+ logger.debug("No vertex in graph for key ={} and value = {} label = {} error : {}",name,value,label,graph.right().value());
}
return Either.right(graph.right().value());
}
@@ -847,75 +884,6 @@ public class TitanGenericDao {
}
}
- // public <T extends GraphNode> Either<List<T>, TitanOperationStatus>
- // getByCriteria_tx(NodeTypeEnum type, Map<String, Object> props, Class<T>
- // clazz) {
- // Either<TitanGraph, TitanOperationStatus> graph = titanClient.getGraph();
- // TitanTransaction tx=null;
- // if (graph.isLeft()) {
- // try {
- // TitanGraph tGraph = graph.left().value();
- // tx = tGraph.newTransaction();
- //
- // TitanGraphQuery<? extends TitanGraphQuery> query = tx.query();
- // query = query.has(GraphPropertiesDictionary.LABEL.getProperty(),
- // type.getName());
- //
- // if (props != null && !props.isEmpty()) {
- // for (Map.Entry<String, Object> entry : props.entrySet()) {
- // query = query.has(entry.getKey(), entry.getValue());
- // }
- // }
- // Iterable<TitanVertex> vertices = query.vertices();
- // if (vertices == null) {
- // tx.commit();
- // return Either.right(TitanOperationStatus.NOT_FOUND);
- // }
- //
- //
- // Iterator<TitanVertex> iterator = vertices.iterator();
- // List<T> result = new ArrayList<T>();
- //
- // while (iterator.hasNext()) {
- // Vertex vertex = iterator.next();
- //
- // Map<String, Object> newProp = getProperties(vertex);
- //
- // T element = GraphElementFactory.createElement(type.getName(),
- // GraphElementTypeEnum.Node, newProp, clazz);
- // result.add(element);
- // }
- // if (logger.isDebugEnabled()) {
- // logger.debug("Number of fetced nodes in graph for criteria : from type ="
- // + type + " and properties = " + props + " is " + result.size());
- // }
- // tx.commit();
- // if (result.size() == 0) {
- // return Either.right(TitanOperationStatus.NOT_FOUND);
- // }
- //
- // return Either.left(result);
- // } catch (Exception e) {
- // if (tx != null)
- // try {
- // tx.commit();
- // } catch (Exception e1) {
- // logger.debug("failed to commit after get", e);
- // }
- // if (logger.isDebugEnabled()) {
- // logger.debug("Failed get by criteria for type = {} and properties = {}. {}", type, props, e);
- // }
- // return Either.right(TitanGraphClient.handleTitanException(e));
- // }
- //
- // } else {
- // if (logger.isDebugEnabled()) {
- // logger.debug("Failed get by criteria for type = {} and properties {}. error : {}", type, props, graph.right().value());
- // }
- // return Either.right(graph.right().value());
- // }
- // }
-
private boolean vertexLeftContainsRightProps(Map<String, Object> leftProps, Map<String, Object> rightProps) {
if (rightProps != null) {
@@ -986,14 +954,14 @@ public class TitanGenericDao {
return Either.left(result);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
- logger.debug("Failed get by criteria for type = {} amd properties = {}. error: {}", type, props, e);
+ logger.debug("Failed get by criteria for type = {} and properties = {}", type, props, e);
}
return Either.right(TitanGraphClient.handleTitanException(e));
}
} else {
if (logger.isDebugEnabled()) {
- logger.debug("Failed get by criteria for type = {} and properties = {}. error : {}", type, props, graph.right().value());
+ logger.debug("Failed get by criteria for type = {} and properties = {} error : {}", type, props, graph.right().value());
}
return Either.right(graph.right().value());
}
@@ -1050,7 +1018,7 @@ public class TitanGenericDao {
}
- public TitanOperationStatus updateVertex(GraphNode node, TitanVertex vertex) {
+ public TitanOperationStatus updateVertex(GraphNode node, Vertex vertex) {
logger.debug("Try to update node for {}", node.getKeyValueId());
try {
@@ -1114,19 +1082,19 @@ public class TitanGenericDao {
return Either.left(node);
} else {
if (logger.isDebugEnabled()) {
- logger.debug("Failed to delete node for {} = {}. Missing label property on node", keyName, keyValue);
+ logger.debug("Failed to delete node for {} = {} Missing label property on node", keyName, keyValue);
}
return Either.right(TitanOperationStatus.MISSING_NODE_LABEL);
}
} else {
if (logger.isDebugEnabled()) {
- logger.debug("Failed to delete node for {} = {}. Missing label property on node", keyName, keyValue);
+ logger.debug("Failed to delete node for {} = {} Missing label property on node", keyName, keyValue);
}
return Either.right(TitanOperationStatus.MISSING_NODE_LABEL);
}
} catch (Exception e) {
if (logger.isDebugEnabled()) {
- logger.debug("Failed to delete node for {} = {}. error: {}", keyName, keyValue, e);
+ logger.debug("Failed to delete node for {} = {}", keyName, keyValue, e);
}
return Either.right(TitanGraphClient.handleTitanException(e));
}
@@ -1173,20 +1141,20 @@ public class TitanGenericDao {
;
} else {
if (logger.isDebugEnabled()) {
- logger.debug("Failed to delete relation {} from {} to {}. error: {}", type, fromKeyId, toKeyId, graph.right().value());
+ logger.debug("Failed to delete relation {} from {} to {} error : {}",type,fromKeyId,toKeyId,graph.right().value());
}
return Either.right(graph.right().value());
}
return Either.left(newRelation);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
- logger.debug("Failed to delete relation {} from {} to {}. error: {}", type, fromKeyId, toKeyId, e);
+ logger.debug("Failed to delete relation {} from {} to {}", type, fromKeyId, toKeyId, e);
}
return Either.right(TitanGraphClient.handleTitanException(e));
}
} else {
if (logger.isDebugEnabled()) {
- logger.debug("Failed to delete relation {} from {} to {}. error: {}", type, fromKeyId, toKeyId, edgeS.right().value());
+ logger.debug("Failed to delete relation {} from {} to {} error : {}", type, fromKeyId, toKeyId, edgeS.right().value());
}
return Either.right(edgeS.right().value());
}
@@ -1624,7 +1592,7 @@ public class TitanGenericDao {
Either<Edge, TitanOperationStatus> outgoingEdgeByCriteria = getOutgoingEdgeByCriteria(key, uniqueId, edgeType, edgeProperties);
if (outgoingEdgeByCriteria.isRight()) {
TitanOperationStatus status = outgoingEdgeByCriteria.right().value();
- logger.debug("Cannot find outgoing edge from vertex {} with label {} and properties {}", uniqueId, edgeType, edgeProperties);
+ logger.debug("Cannot find outgoing edge from vertex {} with label {} and properties {}" + uniqueId, edgeType, edgeProperties);
return Either.right(status);
}