aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-dao/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-dao/src/main')
-rw-r--r--catalog-dao/src/main/java/org/openecomp/sdc/be/dao/janusgraph/JanusGraphDao.java406
1 files changed, 170 insertions, 236 deletions
diff --git a/catalog-dao/src/main/java/org/openecomp/sdc/be/dao/janusgraph/JanusGraphDao.java b/catalog-dao/src/main/java/org/openecomp/sdc/be/dao/janusgraph/JanusGraphDao.java
index ed69992715..38dc522247 100644
--- a/catalog-dao/src/main/java/org/openecomp/sdc/be/dao/janusgraph/JanusGraphDao.java
+++ b/catalog-dao/src/main/java/org/openecomp/sdc/be/dao/janusgraph/JanusGraphDao.java
@@ -31,11 +31,13 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
-import java.util.Optional;
+import lombok.Getter;
import org.apache.commons.collections.MapUtils;
+import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.tinkerpop.gremlin.structure.Direction;
@@ -72,7 +74,9 @@ import org.springframework.beans.factory.annotation.Qualifier;
public class JanusGraphDao {
private static final Logger logger = Logger.getLogger(JanusGraphDao.class);
- JanusGraphClient janusGraphClient;
+ private static final String FAILED_TO_GET_BY_CRITERIA_FOR_TYPE_AND_PROPERTIES = "Failed to get by criteria for type '{}' and properties '{}'";
+ @Getter
+ private final JanusGraphClient janusGraphClient;
public JanusGraphDao(@Qualifier("janusgraph-client") JanusGraphClient janusGraphClient) {
this.janusGraphClient = janusGraphClient;
@@ -89,10 +93,6 @@ public class JanusGraphDao {
return janusGraphClient.rollback();
}
- public Either<JanusGraph, JanusGraphOperationStatus> getGraph() {
- return janusGraphClient.getGraph();
- }
-
/**
* @param graphVertex
* @return
@@ -157,28 +157,22 @@ public class JanusGraphDao {
if (graph.isLeft()) {
try {
JanusGraph tGraph = graph.left().value();
- @SuppressWarnings("unchecked") Iterable<JanusGraphVertex> vertecies = tGraph.query().has(name.getProperty(), value)
+ @SuppressWarnings("unchecked") Iterable<JanusGraphVertex> vertices = tGraph.query().has(name.getProperty(), value)
.has(GraphPropertyEnum.LABEL.getProperty(), label.getName()).vertices();
- java.util.Iterator<JanusGraphVertex> iterator = vertecies.iterator();
+ java.util.Iterator<JanusGraphVertex> iterator = vertices.iterator();
if (iterator.hasNext()) {
JanusGraphVertex vertex = iterator.next();
GraphVertex graphVertex = createAndFill(vertex, parseFlag);
return Either.left(graphVertex);
}
- 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 = {} and value = {} label = {}", name, value, label);
return Either.right(JanusGraphOperationStatus.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(JanusGraphClient.handleJanusGraphException(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());
}
}
@@ -199,37 +193,29 @@ public class JanusGraphDao {
public Either<GraphVertex, JanusGraphOperationStatus> getVertexById(String id, JsonParseFlagEnum parseFlag) {
Either<JanusGraph, JanusGraphOperationStatus> graph = janusGraphClient.getGraph();
if (id == null) {
- if (logger.isDebugEnabled()) {
- logger.debug("No vertex in graph for id = {} ", id);
- }
+ logger.debug("No vertex in graph for id = {} ", id);
return Either.right(JanusGraphOperationStatus.NOT_FOUND);
}
if (graph.isLeft()) {
try {
JanusGraph tGraph = graph.left().value();
- @SuppressWarnings("unchecked") Iterable<JanusGraphVertex> vertecies = tGraph.query()
+ @SuppressWarnings("unchecked") Iterable<JanusGraphVertex> vertices = tGraph.query()
.has(GraphPropertyEnum.UNIQUE_ID.getProperty(), id).vertices();
- java.util.Iterator<JanusGraphVertex> iterator = vertecies.iterator();
+ java.util.Iterator<JanusGraphVertex> iterator = vertices.iterator();
if (iterator.hasNext()) {
JanusGraphVertex vertex = iterator.next();
GraphVertex graphVertex = createAndFill(vertex, parseFlag);
return Either.left(graphVertex);
} else {
- if (logger.isDebugEnabled()) {
- logger.debug("No vertex in graph for id = {}", id);
- }
+ logger.debug("No vertex in graph for id = {}", id);
return Either.right(JanusGraphOperationStatus.NOT_FOUND);
}
} catch (Exception e) {
- if (logger.isDebugEnabled()) {
- logger.debug("Failed to get vertex in graph for id {} ", id);
- }
+ logger.debug("Failed to get vertex in graph for id {} ", id);
return Either.right(JanusGraphClient.handleJanusGraphException(e));
}
} else {
- if (logger.isDebugEnabled()) {
- logger.debug("No vertex in graph for id {} error : {}", id, graph.right().value());
- }
+ logger.debug("No vertex in graph for id {} error : {}", id, graph.right().value());
return Either.right(graph.right().value());
}
}
@@ -255,7 +241,7 @@ public class JanusGraphDao {
}
}
- public void setVertexProperties(Vertex vertex, Map<String, Object> properties) throws IOException {
+ public void setVertexProperties(Vertex vertex, Map<String, Object> properties) {
for (Map.Entry<String, Object> entry : properties.entrySet()) {
if (entry.getValue() != null) {
vertex.property(entry.getKey(), entry.getValue());
@@ -315,11 +301,9 @@ public class JanusGraphDao {
}
public JanusGraphOperationStatus createEdge(Vertex from, Vertex to, EdgeLabelEnum label, Map<EdgePropertyEnum, Object> properties) {
- if (logger.isTraceEnabled()) {
- logger.trace("Try to connect {} with {} label {} properties {}",
- from == null ? "NULL" : from.property(GraphPropertyEnum.UNIQUE_ID.getProperty()),
- to == null ? "NULL" : to.property(GraphPropertyEnum.UNIQUE_ID.getProperty()), label, properties);
- }
+ logger.trace("Try to connect {} with {} label {} properties {}",
+ from == null ? "NULL" : from.property(GraphPropertyEnum.UNIQUE_ID.getProperty()),
+ to == null ? "NULL" : to.property(GraphPropertyEnum.UNIQUE_ID.getProperty()), label, properties);
if (from == null || to == null) {
logger.trace("No JanusGraph vertex for id from {} or id to {}",
from == null ? "NULL" : from.property(GraphPropertyEnum.UNIQUE_ID.getProperty()),
@@ -340,7 +324,7 @@ public class JanusGraphDao {
public Map<GraphPropertyEnum, Object> getVertexProperties(Element element) {
Map<GraphPropertyEnum, Object> result = new HashMap<>();
- if (element != null && element.keys() != null && element.keys().size() > 0) {
+ if (element != null && CollectionUtils.isNotEmpty(element.keys())) {
Map<String, Property> propertyMap = ElementHelper.propertyMap(element, element.keys().toArray(new String[element.keys().size()]));
for (Entry<String, Property> entry : propertyMap.entrySet()) {
String key = entry.getKey();
@@ -357,7 +341,7 @@ public class JanusGraphDao {
public Map<EdgePropertyEnum, Object> getEdgeProperties(Element element) {
Map<EdgePropertyEnum, Object> result = new HashMap<>();
- if (element != null && element.keys() != null && element.keys().size() > 0) {
+ if (element != null && CollectionUtils.isNotEmpty(element.keys())) {
Map<String, Property> propertyMap = ElementHelper.propertyMap(element, element.keys().toArray(new String[element.keys().size()]));
for (Entry<String, Property> entry : propertyMap.entrySet()) {
String key = entry.getKey();
@@ -421,36 +405,29 @@ public class JanusGraphDao {
List<GraphVertex> result = new ArrayList<>();
while (iterator.hasNext()) {
JanusGraphVertex vertex = iterator.next();
- Map<GraphPropertyEnum, Object> newProp = getVertexProperties(vertex);
+ getVertexProperties(vertex);
GraphVertex graphVertex = createAndFill(vertex, parseFlag);
result.add(graphVertex);
}
- if (logger.isDebugEnabled()) {
- logger
- .debug("Number of fetced nodes in graph for criteria : from type = {} and properties = {} is {}", type, props, result.size());
- }
+ logger.debug("Number of fetched nodes in graph for criteria : from type = {} and properties = {} is {}", type, props, result.size());
if (result.size() == 0) {
return Either.right(JanusGraphOperationStatus.NOT_FOUND);
}
return Either.left(result);
} catch (Exception e) {
- if (logger.isDebugEnabled()) {
- logger.debug("Failed get by criteria for type = {} and properties = {}", type, props, e);
- }
+ logger.debug("Failed get by criteria for type = {} and properties = {}", type, props, e);
return Either.right(JanusGraphClient.handleJanusGraphException(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());
}
}
-
+
public Either<List<GraphVertex>, JanusGraphOperationStatus> getByCriteria(final VertexTypeEnum type, final Map<GraphPropertyEnum, Object> props,
- final Map<GraphPropertyEnum, Object> hasNotProps,
- final JsonParseFlagEnum parseFlag,
- final String model) {
+ final Map<GraphPropertyEnum, Object> hasNotProps,
+ final JsonParseFlagEnum parseFlag,
+ final String model) {
return getByCriteria(type, props, hasNotProps, null, parseFlag, model, false);
}
@@ -461,14 +438,14 @@ public class JanusGraphDao {
final boolean includeNormativeExtensionModels) {
return getByCriteria(type, props, hasNotProps, null, parseFlag, model, includeNormativeExtensionModels);
}
-
+
public Either<List<GraphVertex>, JanusGraphOperationStatus> getByCriteria(final VertexTypeEnum type,
- final Map<GraphPropertyEnum, Object> hasProps,
- final Map<GraphPropertyEnum, Object> hasNotProps,
- final Map<String, Entry<JanusGraphPredicate, Object>> predicates,
- final JsonParseFlagEnum parseFlag,
- final String model) {
- return getByCriteria(type, hasProps, hasNotProps, predicates, parseFlag, model, false);
+ final Map<GraphPropertyEnum, Object> hasProps,
+ final Map<GraphPropertyEnum, Object> hasNotProps,
+ final Map<String, Entry<JanusGraphPredicate, Object>> predicates,
+ final JsonParseFlagEnum parseFlag,
+ final String model) {
+ return getByCriteria(type, hasProps, hasNotProps, predicates, parseFlag, model, false);
}
public Either<List<GraphVertex>, JanusGraphOperationStatus> getByCriteria(final VertexTypeEnum type,
@@ -481,137 +458,74 @@ public class JanusGraphDao {
Either<JanusGraph, JanusGraphOperationStatus> graph = janusGraphClient.getGraph();
if (graph.isLeft()) {
try {
- JanusGraph tGraph = graph.left().value();
- JanusGraphQuery<? extends JanusGraphQuery> query = tGraph.query();
-
- if (type != null) {
- query = query.has(GraphPropertyEnum.LABEL.getProperty(), type.getName());
- }
- if (hasProps != null && !hasProps.isEmpty()) {
- for (Map.Entry<GraphPropertyEnum, Object> entry : hasProps.entrySet()) {
- query = query.has(entry.getKey().getProperty(), entry.getValue());
- }
- }
- if (hasNotProps != null && !hasNotProps.isEmpty()) {
- for (Map.Entry<GraphPropertyEnum, Object> entry : hasNotProps.entrySet()) {
- if (entry.getValue() instanceof List) {
- buildMultipleNegateQueryFromList(entry, query);
- } else {
- query = query.hasNot(entry.getKey().getProperty(), entry.getValue());
- }
- }
- }
- if (predicates != null && !predicates.isEmpty()) {
- for (Map.Entry<String, Entry<JanusGraphPredicate, Object>> entry : predicates.entrySet()) {
- JanusGraphPredicate predicate = entry.getValue().getKey();
- Object object = entry.getValue().getValue();
- query = query.has(entry.getKey(), predicate, object);
- }
- }
- Iterable<JanusGraphVertex> vertices = query.vertices();
+ JanusGraphQuery<? extends JanusGraphQuery> query = getJanusGraphQuery(type, hasProps, hasNotProps, predicates, graph.left().value());
+ final Iterable<JanusGraphVertex> vertices = query.vertices();
if (vertices == null || !vertices.iterator().hasNext()) {
return Either.right(JanusGraphOperationStatus.NOT_FOUND);
}
- List<GraphVertex> result = new ArrayList<>();
- final Predicate<? super JanusGraphVertex> filterPredicate = StringUtils.isEmpty(model) ? this::vertexNotConnectedToAnyModel : vertex -> vertexValidForModel(vertex, model, includeNormativeExtensionModels);
- final List<JanusGraphVertex> verticesForModel = StreamSupport.stream(vertices.spliterator(), false).filter(filterPredicate).collect(Collectors.toList());
- if (verticesForModel == null || verticesForModel.size() == 0) {
+ final Predicate<? super JanusGraphVertex> filterPredicate = StringUtils.isEmpty(model) ? this::vertexNotConnectedToAnyModel
+ : vertex -> vertexValidForModel(vertex, model, includeNormativeExtensionModels);
+ final List<JanusGraphVertex> verticesForModel = StreamSupport.stream(vertices.spliterator(), false).filter(filterPredicate)
+ .collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(verticesForModel)) {
return Either.right(JanusGraphOperationStatus.NOT_FOUND);
}
-
- verticesForModel.forEach(vertex -> result.add(createAndFill(vertex, parseFlag)));
- if (logger.isDebugEnabled()) {
- logger.debug("Number of fetched nodes in graph for criteria : from type '{}' and properties '{}' is '{}'", type, hasProps,
- result.size());
- }
+
+ final List<GraphVertex> result = new ArrayList<>();
+ verticesForModel.forEach(vertex -> result.add(createAndFill(vertex, parseFlag)));
+ logger.debug("Number of fetched nodes in graph for criteria : from type '{}' and properties '{}' is '{}'", type, hasProps,
+ result.size());
return Either.left(result);
} catch (Exception e) {
- if (logger.isDebugEnabled()) {
- logger.debug("Failed to get by criteria for type '{}' and properties '{}'", type, hasProps, e);
- }
+ logger.debug(FAILED_TO_GET_BY_CRITERIA_FOR_TYPE_AND_PROPERTIES, type, hasProps, e);
return Either.right(JanusGraphClient.handleJanusGraphException(e));
}
} else {
- if (logger.isDebugEnabled()) {
- logger.debug("Failed to get by criteria for type '{}' and properties '{}'. Error : '{}'", type, hasProps, graph.right().value());
- }
+ logger.debug("Failed to get by criteria for type '{}' and properties '{}'. Error : '{}'", type, hasProps, graph.right().value());
return Either.right(graph.right().value());
}
}
-
+
public Either<List<GraphVertex>, JanusGraphOperationStatus> getByCriteria(VertexTypeEnum type,
- Map<GraphPropertyEnum, Object> props, Map<GraphPropertyEnum, Object> hasNotProps,
- JsonParseFlagEnum parseFlag) {
+ Map<GraphPropertyEnum, Object> props,
+ Map<GraphPropertyEnum, Object> hasNotProps,
+ JsonParseFlagEnum parseFlag) {
return getByCriteria(type, props, hasNotProps, null, parseFlag);
}
public Either<List<GraphVertex>, JanusGraphOperationStatus> getByCriteria(final VertexTypeEnum type,
- final Map<GraphPropertyEnum, Object> hasProps, final Map<GraphPropertyEnum, Object> hasNotProps,
- final Map<String, Entry<JanusGraphPredicate, Object>> predicates, final JsonParseFlagEnum parseFlag) {
- Either<JanusGraph, JanusGraphOperationStatus> graph = janusGraphClient.getGraph();
+ final Map<GraphPropertyEnum, Object> hasProps,
+ final Map<GraphPropertyEnum, Object> hasNotProps,
+ final Map<String, Entry<JanusGraphPredicate, Object>> predicates,
+ final JsonParseFlagEnum parseFlag) {
+ final Either<JanusGraph, JanusGraphOperationStatus> graph = janusGraphClient.getGraph();
if (graph.isLeft()) {
try {
- JanusGraph tGraph = graph.left().value();
- JanusGraphQuery<? extends JanusGraphQuery> query = tGraph.query();
-
- if (type != null) {
- query = query.has(GraphPropertyEnum.LABEL.getProperty(), type.getName());
- }
- if (hasProps != null && !hasProps.isEmpty()) {
- for (Map.Entry<GraphPropertyEnum, Object> entry : hasProps.entrySet()) {
- query = query.has(entry.getKey().getProperty(), entry.getValue());
- }
- }
- if (hasNotProps != null && !hasNotProps.isEmpty()) {
- for (Map.Entry<GraphPropertyEnum, Object> entry : hasNotProps.entrySet()) {
- if (entry.getValue() instanceof List) {
- buildMultipleNegateQueryFromList(entry, query);
- } else {
- query = query.hasNot(entry.getKey().getProperty(), entry.getValue());
- }
- }
- }
- if (predicates != null && !predicates.isEmpty()) {
- for (Map.Entry<String, Entry<JanusGraphPredicate, Object>> entry : predicates.entrySet()) {
- JanusGraphPredicate predicate = entry.getValue().getKey();
- Object object = entry.getValue().getValue();
- query = query.has(entry.getKey(), predicate, object);
- }
- }
+ JanusGraphQuery<? extends JanusGraphQuery> query = getJanusGraphQuery(type, hasProps, hasNotProps, predicates, graph.left().value());
Iterable<JanusGraphVertex> vertices = query.vertices();
if (vertices == null || !vertices.iterator().hasNext()) {
return Either.right(JanusGraphOperationStatus.NOT_FOUND);
}
List<GraphVertex> result = new ArrayList<>();
-
vertices.forEach(vertex -> result.add(createAndFill(vertex, parseFlag)));
- if (logger.isDebugEnabled()) {
- logger.debug(
- "Number of fetched nodes in graph for criteria : from type '{}' and properties '{}' is '{}'",
- type, hasProps, result.size());
- }
+ logger.debug("Number of fetched nodes in graph for criteria : from type '{}' and properties '{}' is '{}'", type, hasProps,
+ result.size());
return Either.left(result);
} catch (Exception e) {
- if (logger.isDebugEnabled()) {
- logger.debug("Failed to get by criteria for type '{}' and properties '{}'", type, hasProps, e);
- }
+ logger.debug(FAILED_TO_GET_BY_CRITERIA_FOR_TYPE_AND_PROPERTIES, type, hasProps, e);
return Either.right(JanusGraphClient.handleJanusGraphException(e));
}
} else {
- if (logger.isDebugEnabled()) {
- logger.debug("Failed to get by criteria for type '{}' and properties '{}'. Error : '{}'", type,
- hasProps, graph.right().value());
- }
+ logger.debug("Failed to get by criteria for type '{}' and properties '{}'. Error : '{}'", type, hasProps, graph.right().value());
return Either.right(graph.right().value());
}
}
-
/**
* Finds the vertices that have the given invariant id and any additional property provided.
*
- * @param invariantUuid the invariant uuid
+ * @param invariantUuid the invariant uuid
* @param additionalPropertiesToMatch any additional property to match along with the {@link GraphPropertyEnum#INVARIANT_UUID}
* @return the list of vertex that has the given invariant uuid
* @throws JanusGraphException if the find operation was returned an error status
@@ -624,7 +538,7 @@ public class JanusGraphDao {
}
propertiesToMatch.put(GraphPropertyEnum.INVARIANT_UUID, invariantUuid);
final Either<List<GraphVertex>, JanusGraphOperationStatus> vertexEither =
- getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata);
+ getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata);
if (vertexEither.isRight()) {
final JanusGraphOperationStatus status = vertexEither.right().value();
if (status == JanusGraphOperationStatus.NOT_FOUND) {
@@ -641,49 +555,52 @@ public class JanusGraphDao {
}
private boolean vertexValidForModel(final JanusGraphVertex vertex, final String model, final boolean includeNormativeExtensions) {
- final String vertexLabel = (String)vertex.property(GraphPropertyEnum.LABEL.getProperty()).value();
+ final String vertexLabel = (String) vertex.property(GraphPropertyEnum.LABEL.getProperty()).value();
final VertexTypeEnum vertexType = VertexTypeEnum.getByName(vertexLabel);
- final GraphEdgeLabels edgeLabel = vertexType.equals(VertexTypeEnum.TOPOLOGY_TEMPLATE) ? GraphEdgeLabels.MODEL : GraphEdgeLabels.MODEL_ELEMENT;
- final Either<List<ImmutablePair<JanusGraphVertex, Edge>>, JanusGraphOperationStatus> modelVertices = getParentVerticies(vertex, edgeLabel);
+ final GraphEdgeLabels edgeLabel = VertexTypeEnum.TOPOLOGY_TEMPLATE.equals(vertexType) ? GraphEdgeLabels.MODEL : GraphEdgeLabels.MODEL_ELEMENT;
+ final Either<List<ImmutablePair<JanusGraphVertex, Edge>>, JanusGraphOperationStatus> modelVertices = getParentVertices(vertex, edgeLabel);
- return modelVertices.isLeft() && modelVertices.left().value().stream().anyMatch(vertexPair -> modelVertexMatchesModel(vertexPair.getLeft(), model, includeNormativeExtensions));
+ return modelVertices.isLeft() && modelVertices.left().value().stream()
+ .anyMatch(vertexPair -> modelVertexMatchesModel(vertexPair.getLeft(), model, includeNormativeExtensions));
}
-
+
private boolean modelVertexMatchesModel(final JanusGraphVertex modelVertex, final String model, final boolean includeNormativeExtensions) {
- if (model.equals((String)modelVertex.property("name").value())) {
+ if (model.equals((String) modelVertex.property("name").value())) {
return true;
}
final Either<List<ImmutablePair<JanusGraphVertex, Edge>>, JanusGraphOperationStatus> derivedModels =
- getParentVerticies(modelVertex, GraphEdgeLabels.DERIVED_FROM);
- if (derivedModels.isLeft() && derivedModels.left().value().stream().anyMatch(derivedModel ->modelVertexMatchesModel(derivedModel.left, model, includeNormativeExtensions))) {
+ getParentVertices(modelVertex, GraphEdgeLabels.DERIVED_FROM);
+ if (derivedModels.isLeft() && derivedModels.left().value().stream()
+ .anyMatch(derivedModel -> modelVertexMatchesModel(derivedModel.left, model, includeNormativeExtensions))) {
return true;
}
-
+
if (includeNormativeExtensions && isANormativeExtension(modelVertex)) {
- final Either<List<Vertex>,JanusGraphOperationStatus> derivedFromModels =
- getChildrenVertices(modelVertex, EdgeLabelEnum.DERIVED_FROM, JsonParseFlagEnum.ParseAll);
- return derivedFromModels.isLeft() && derivedFromModels.left().value().stream().anyMatch(derivedFromModel -> model.equals((String)derivedFromModel.property("name").value()));
+ final Either<List<Vertex>, JanusGraphOperationStatus> derivedFromModels =
+ getChildrenVertices(modelVertex, EdgeLabelEnum.DERIVED_FROM);
+ return derivedFromModels.isLeft() && derivedFromModels.left().value().stream()
+ .anyMatch(derivedFromModel -> model.equals((String) derivedFromModel.property("name").value()));
}
return false;
}
-
+
private boolean isANormativeExtension(final JanusGraphVertex modelVertex) {
- return ModelTypeEnum.NORMATIVE_EXTENSION.getValue().equals((String)modelVertex.property(GraphPropertyEnum.MODEL_TYPE.getProperty()).value());
+ return ModelTypeEnum.NORMATIVE_EXTENSION.getValue().equals((String) modelVertex.property(GraphPropertyEnum.MODEL_TYPE.getProperty()).value());
}
-
- private Either<List<ImmutablePair<JanusGraphVertex, Edge>>, JanusGraphOperationStatus> getParentVerticies(
- final JanusGraphVertex rootVertex, final GraphEdgeLabels edgeType) {
- return getEdgeVerticies(rootVertex, Direction.IN, edgeType);
+
+ private Either<List<ImmutablePair<JanusGraphVertex, Edge>>, JanusGraphOperationStatus> getParentVertices(
+ final JanusGraphVertex rootVertex, final GraphEdgeLabels edgeType) {
+ return getEdgeVertices(rootVertex, Direction.IN, edgeType);
}
-
- private Either<List<ImmutablePair<JanusGraphVertex, Edge>>, JanusGraphOperationStatus> getEdgeVerticies(
- final JanusGraphVertex rootVertex, final Direction direction, final GraphEdgeLabels edgeType) {
+
+ private Either<List<ImmutablePair<JanusGraphVertex, Edge>>, JanusGraphOperationStatus> getEdgeVertices(
+ final JanusGraphVertex rootVertex, final Direction direction, final GraphEdgeLabels edgeType) {
final List<ImmutablePair<JanusGraphVertex, Edge>> immutablePairs = new ArrayList<>();
final Iterator<Edge> edgesCreatorIterator = rootVertex.edges(direction, edgeType.getProperty());
if (edgesCreatorIterator != null) {
while (edgesCreatorIterator.hasNext()) {
Edge edge = edgesCreatorIterator.next();
- JanusGraphVertex vertex = Direction.OUT.equals(direction)? (JanusGraphVertex) edge.inVertex() : (JanusGraphVertex) edge.outVertex();
+ JanusGraphVertex vertex = Direction.OUT.equals(direction) ? (JanusGraphVertex) edge.inVertex() : (JanusGraphVertex) edge.outVertex();
ImmutablePair<JanusGraphVertex, Edge> immutablePair = new ImmutablePair<>(vertex, edge);
immutablePairs.add(immutablePair);
}
@@ -693,15 +610,15 @@ public class JanusGraphDao {
}
return Either.left(immutablePairs);
}
-
+
private boolean vertexNotConnectedToAnyModel(final JanusGraphVertex vertex) {
- String vt = (String)vertex.property(GraphPropertyEnum.LABEL.getProperty()).value();
+ String vt = (String) vertex.property(GraphPropertyEnum.LABEL.getProperty()).value();
VertexTypeEnum vertexType = VertexTypeEnum.getByName(vt);
- EdgeLabelEnum edgeLabel = vertexType.equals(VertexTypeEnum.TOPOLOGY_TEMPLATE) ? EdgeLabelEnum.MODEL : EdgeLabelEnum.MODEL_ELEMENT;
+ EdgeLabelEnum edgeLabel = VertexTypeEnum.TOPOLOGY_TEMPLATE.equals(vertexType) ? EdgeLabelEnum.MODEL : EdgeLabelEnum.MODEL_ELEMENT;
return !vertex.edges(Direction.IN, edgeLabel.name()).hasNext();
}
- public Either<Iterator<Vertex>, JanusGraphOperationStatus> getCatalogOrArchiveVerticies(boolean isCatalog) {
+ public Either<Iterator<Vertex>, JanusGraphOperationStatus> getCatalogOrArchiveVertices(boolean isCatalog) {
Either<JanusGraph, JanusGraphOperationStatus> graph = janusGraphClient.getGraph();
if (graph.isLeft()) {
try {
@@ -721,22 +638,17 @@ public class JanusGraphDao {
Iterator<Vertex> vertices = catalogV.vertices(Direction.OUT, edgeLabel);
return Either.left(vertices);
} catch (Exception e) {
- if (logger.isDebugEnabled()) {
- logger.debug("Failed get by criteria: ", e);
- }
+ logger.debug("Failed get by criteria: ", e);
return Either.right(JanusGraphClient.handleJanusGraphException(e));
}
} else {
- if (logger.isDebugEnabled()) {
- logger.debug("Failed get by criteria : ", graph.right().value());
- }
+ logger.debug("Failed get by criteria : {}", graph.right().value());
return Either.right(graph.right().value());
}
}
private void buildMultipleNegateQueryFromList(Map.Entry<GraphPropertyEnum, Object> entry, JanusGraphQuery query) {
- List<Object> negateList = (List<Object>) entry.getValue();
- for (Object listItem : negateList) {
+ for (Object listItem : (List<Object>) entry.getValue()) {
query.hasNot(entry.getKey().getProperty(), listItem);
}
}
@@ -749,48 +661,47 @@ public class JanusGraphDao {
*/
public Either<GraphVertex, JanusGraphOperationStatus> getChildVertex(GraphVertex parentVertex, EdgeLabelEnum edgeLabel,
JsonParseFlagEnum parseFlag) {
- Either<List<GraphVertex>, JanusGraphOperationStatus> childrenVertecies = getChildrenVertices(parentVertex, edgeLabel, parseFlag);
- if (childrenVertecies.isRight()) {
- return Either.right(childrenVertecies.right().value());
+ Either<List<GraphVertex>, JanusGraphOperationStatus> childrenVertices = getChildrenVertices(parentVertex, edgeLabel, parseFlag);
+ if (childrenVertices.isRight()) {
+ return Either.right(childrenVertices.right().value());
}
- return Either.left(childrenVertecies.left().value().get(0));
+ return Either.left(childrenVertices.left().value().get(0));
}
/**
* @param parentVertex
* @param edgeLabel
- * @param parseFlag
* @return
*/
- public Either<Vertex, JanusGraphOperationStatus> getChildVertex(Vertex parentVertex, EdgeLabelEnum edgeLabel, JsonParseFlagEnum parseFlag) {
- Either<List<Vertex>, JanusGraphOperationStatus> childrenVertecies = getChildrenVertices(parentVertex, edgeLabel, parseFlag);
- if (childrenVertecies.isRight()) {
- return Either.right(childrenVertecies.right().value());
+ public Either<Vertex, JanusGraphOperationStatus> getChildVertex(Vertex parentVertex, EdgeLabelEnum edgeLabel) {
+ Either<List<Vertex>, JanusGraphOperationStatus> childrenVertices = getChildrenVertices(parentVertex, edgeLabel);
+ if (childrenVertices.isRight()) {
+ return Either.right(childrenVertices.right().value());
}
- return Either.left(childrenVertecies.left().value().get(0));
+ return Either.left(childrenVertices.left().value().get(0));
}
public Either<GraphVertex, JanusGraphOperationStatus> getParentVertex(GraphVertex parentVertex, EdgeLabelEnum edgeLabel,
JsonParseFlagEnum parseFlag) {
- Either<List<GraphVertex>, JanusGraphOperationStatus> childrenVertecies = getParentVertices(parentVertex, edgeLabel, parseFlag);
- if (childrenVertecies.isRight()) {
- return Either.right(childrenVertecies.right().value());
+ Either<List<GraphVertex>, JanusGraphOperationStatus> childrenVertices = getParentVertices(parentVertex, edgeLabel, parseFlag);
+ if (childrenVertices.isRight()) {
+ return Either.right(childrenVertices.right().value());
}
- if (isEmpty(childrenVertecies.left().value())) {
+ if (isEmpty(childrenVertices.left().value())) {
return Either.right(JanusGraphOperationStatus.NOT_FOUND);
}
- return Either.left(childrenVertecies.left().value().get(0));
+ return Either.left(childrenVertices.left().value().get(0));
}
- public Either<Vertex, JanusGraphOperationStatus> getParentVertex(Vertex parentVertex, EdgeLabelEnum edgeLabel, JsonParseFlagEnum parseFlag) {
- Either<List<Vertex>, JanusGraphOperationStatus> childrenVertecies = getParentVertices(parentVertex, edgeLabel, parseFlag);
- if (childrenVertecies.isRight()) {
- return Either.right(childrenVertecies.right().value());
+ public Either<Vertex, JanusGraphOperationStatus> getParentVertex(Vertex parentVertex, EdgeLabelEnum edgeLabel) {
+ Either<List<Vertex>, JanusGraphOperationStatus> childrenVertices = getParentVertices(parentVertex, edgeLabel);
+ if (childrenVertices.isRight()) {
+ return Either.right(childrenVertices.right().value());
}
- if (isEmpty(childrenVertecies.left().value())) {
+ if (isEmpty(childrenVertices.left().value())) {
return Either.right(JanusGraphOperationStatus.NOT_FOUND);
}
- return Either.left(childrenVertecies.left().value().get(0));
+ return Either.left(childrenVertices.left().value().get(0));
}
/**
@@ -809,13 +720,11 @@ public class JanusGraphDao {
return getAdjacentVertices(parentVertex, edgeLabel, parseFlag, Direction.IN);
}
- public Either<List<Vertex>, JanusGraphOperationStatus> getParentVertices(Vertex parentVertex, EdgeLabelEnum edgeLabel,
- JsonParseFlagEnum parseFlag) {
- return getAdjacentVertices(parentVertex, edgeLabel, parseFlag, Direction.IN);
+ public Either<List<Vertex>, JanusGraphOperationStatus> getParentVertices(Vertex parentVertex, EdgeLabelEnum edgeLabel) {
+ return getAdjacentVertices(parentVertex, edgeLabel, Direction.IN);
}
- private Either<List<Vertex>, JanusGraphOperationStatus> getAdjacentVertices(Vertex parentVertex, EdgeLabelEnum edgeLabel,
- JsonParseFlagEnum parseFlag, Direction direction) {
+ private Either<List<Vertex>, JanusGraphOperationStatus> getAdjacentVertices(Vertex parentVertex, EdgeLabelEnum edgeLabel, Direction direction) {
List<Vertex> list = new ArrayList<>();
try {
Either<JanusGraph, JanusGraphOperationStatus> graphRes = janusGraphClient.getGraph();
@@ -833,7 +742,6 @@ public class JanusGraphDao {
} else {
vertex = (JanusGraphVertex) edge.inVertex();
}
- // GraphVertex graphVertex = createAndFill(vertex, parseFlag);
list.add(vertex);
}
}
@@ -850,25 +758,21 @@ public class JanusGraphDao {
/**
* @param parentVertex
* @param edgeLabel
- * @param parseFlag
* @return
*/
- public Either<List<Vertex>, JanusGraphOperationStatus> getChildrenVertices(Vertex parentVertex, EdgeLabelEnum edgeLabel,
- JsonParseFlagEnum parseFlag) {
- return getAdjacentVertices(parentVertex, edgeLabel, parseFlag, Direction.OUT);
+ public Either<List<Vertex>, JanusGraphOperationStatus> getChildrenVertices(Vertex parentVertex, EdgeLabelEnum edgeLabel) {
+ return getAdjacentVertices(parentVertex, edgeLabel, Direction.OUT);
}
private Either<List<GraphVertex>, JanusGraphOperationStatus> getAdjacentVertices(GraphVertex parentVertex, EdgeLabelEnum edgeLabel,
JsonParseFlagEnum parseFlag, Direction direction) {
List<GraphVertex> list = new ArrayList<>();
- Either<List<Vertex>, JanusGraphOperationStatus> adjacentVerticies = getAdjacentVertices(parentVertex.getVertex(), edgeLabel, parseFlag,
+ Either<List<Vertex>, JanusGraphOperationStatus> adjacentVertices = getAdjacentVertices(parentVertex.getVertex(), edgeLabel,
direction);
- if (adjacentVerticies.isRight()) {
- return Either.right(adjacentVerticies.right().value());
+ if (adjacentVertices.isRight()) {
+ return Either.right(adjacentVertices.right().value());
}
- adjacentVerticies.left().value().stream().forEach(vertex -> {
- list.add(createAndFill((JanusGraphVertex) vertex, parseFlag));
- });
+ adjacentVertices.left().value().stream().forEach(vertex -> list.add(createAndFill((JanusGraphVertex) vertex, parseFlag)));
return Either.left(list);
}
@@ -990,15 +894,15 @@ public class JanusGraphDao {
* @return
*/
public Either<Edge, JanusGraphOperationStatus> deleteEdge(GraphVertex fromVertex, GraphVertex toVertex, EdgeLabelEnum label) {
- return deleteEdge(fromVertex.getVertex(), toVertex.getVertex(), label, fromVertex.getUniqueId(), toVertex.getUniqueId(), false);
+ return deleteEdge(fromVertex.getVertex(), label, fromVertex.getUniqueId(), toVertex.getUniqueId(), false);
}
public Either<Edge, JanusGraphOperationStatus> deleteAllEdges(GraphVertex fromVertex, GraphVertex toVertex, EdgeLabelEnum label) {
- return deleteEdge(fromVertex.getVertex(), toVertex.getVertex(), label, fromVertex.getUniqueId(), toVertex.getUniqueId(), true);
+ return deleteEdge(fromVertex.getVertex(), label, fromVertex.getUniqueId(), toVertex.getUniqueId(), true);
}
- public Either<Edge, JanusGraphOperationStatus> deleteEdge(JanusGraphVertex fromVertex, JanusGraphVertex toVertex, EdgeLabelEnum label,
- String uniqueIdFrom, String uniqueIdTo, boolean deleteAll) {
+ private Either<Edge, JanusGraphOperationStatus> deleteEdge(JanusGraphVertex fromVertex, EdgeLabelEnum label,
+ String uniqueIdFrom, String uniqueIdTo, boolean deleteAll) {
Either<Edge, JanusGraphOperationStatus> result = null;
Vertex problemV = null;
try {
@@ -1012,16 +916,15 @@ public class JanusGraphDao {
currVertexUniqueId = edge.inVertex().value(GraphPropertyEnum.UNIQUE_ID.getProperty());
} catch (Exception e) {
// AutoHealing procedure
- logger.info("Corrupted vertex and edge were found and deleted {}", e);
+ logger.info("Corrupted vertex and edge were found and deleted ", e);
if (problemV != null) {
Map<GraphPropertyEnum, Object> props = getVertexProperties(problemV);
logger.debug("problematic Vertex properties:");
logger.debug("props size: {}", props.size());
for (Map.Entry<GraphPropertyEnum, Object> entry : props.entrySet()) {
- logger.debug("{}{}", entry.getKey() + ":" + entry.getValue());
+ logger.debug("{}:{}", entry.getKey(), entry.getValue());
}
- Either<List<Vertex>, JanusGraphOperationStatus> childrenVertices = getChildrenVertices(problemV, EdgeLabelEnum.VERSION,
- JsonParseFlagEnum.NoParse);
+ Either<List<Vertex>, JanusGraphOperationStatus> childrenVertices = getChildrenVertices(problemV, EdgeLabelEnum.VERSION);
if (childrenVertices.isLeft()) {
childrenVertices.left().value().size();
logger.debug("number of children that problematic Vertex has: {}", props.size());
@@ -1029,12 +932,12 @@ public class JanusGraphDao {
try {
edge.remove();
} catch (Exception e1) {
- logger.debug("failed to remove problematic edge. {}", e1);
+ logger.debug("failed to remove problematic edge.", e1);
}
try {
problemV.remove();
} catch (Exception e2) {
- logger.debug("failed to remove problematic vertex . {}", e2);
+ logger.debug("failed to remove problematic vertex.", e2);
}
}
continue;
@@ -1275,7 +1178,7 @@ public class JanusGraphDao {
public JanusGraphOperationStatus moveEdge(GraphVertex vertexA, GraphVertex vertexB, EdgeLabelEnum label, Direction direction) {
JanusGraphOperationStatus result = deleteEdgeByDirection(vertexA, direction, label);
if (result != JanusGraphOperationStatus.OK) {
- logger.error("Failed to diassociate {} from element {}. error {} ", label, vertexA.getUniqueId(), result);
+ logger.error("Failed to disassociate {} from element {}. error {} ", label, vertexA.getUniqueId(), result);
return result;
}
JanusGraphOperationStatus createRelation;
@@ -1298,4 +1201,35 @@ public class JanusGraphDao {
}
return getBelongingEdgeByCriteria(getVertexRes.left().value(), label, properties);
}
+
+ private JanusGraphQuery<? extends JanusGraphQuery> getJanusGraphQuery(final VertexTypeEnum type, final Map<GraphPropertyEnum, Object> hasProps,
+ final Map<GraphPropertyEnum, Object> hasNotProps,
+ final Map<String, Entry<JanusGraphPredicate, Object>> predicates,
+ final JanusGraph graph) {
+ JanusGraphQuery<? extends JanusGraphQuery> query = graph.query();
+
+ if (type != null) {
+ query = query.has(GraphPropertyEnum.LABEL.getProperty(), type.getName());
+ }
+ if (hasProps != null && !hasProps.isEmpty()) {
+ for (Entry<GraphPropertyEnum, Object> entry : hasProps.entrySet()) {
+ query = query.has(entry.getKey().getProperty(), entry.getValue());
+ }
+ }
+ if (hasNotProps != null && !hasNotProps.isEmpty()) {
+ for (Entry<GraphPropertyEnum, Object> entry : hasNotProps.entrySet()) {
+ if (entry.getValue() instanceof List) {
+ buildMultipleNegateQueryFromList(entry, query);
+ } else {
+ query = query.hasNot(entry.getKey().getProperty(), entry.getValue());
+ }
+ }
+ }
+ if (predicates != null && !predicates.isEmpty()) {
+ for (Entry<String, Entry<JanusGraphPredicate, Object>> entry : predicates.entrySet()) {
+ query = query.has(entry.getKey(), entry.getValue().getKey(), entry.getValue().getValue());
+ }
+ }
+ return query;
+ }
}