Skip to content

Commit b103962

Browse files
p29876wb36499
andauthored
Gh-3220: Standardise GafferPop Tests (#3243)
* update graph IT tests * Rename GraphIT -> GraphTest * create graph IT * Create Modern Federated example graph run graph tests on multiple graph types * Update federated IT tests move non-federates specific tests to graph tests * tidying * remove public + spotless * sonarcloud * sonarcloud * Use allEdges/allEntities * tidy --------- Co-authored-by: wb36499 <166839644+wb36499@users.noreply.github.com>
1 parent b6f0849 commit b103962

16 files changed

+1557
-1431
lines changed

library/tinkerpop/src/main/java/uk/gov/gchq/gaffer/tinkerpop/GafferPopGraph.java

+36-35
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ public enum DefaultIdManager {
249249

250250
private static final Logger LOGGER = LoggerFactory.getLogger(GafferPopGraph.class);
251251
private static final String GET_ALL_DEBUG_MSG = "Requested a GetAllElements, results will be truncated to: {}.";
252-
private static final Pattern EDGE_ID_REGEX = Pattern.compile("^\\[\\s*(?<src>[a-zA-Z0-9|-]*)\\s*(,\\s*(?<label>[a-zA-Z0-9|-]*))?\\s*,\\s*(?<dest>[a-zA-Z0-9|-]*)\\s*\\]$");
252+
private static final Pattern EDGE_ID_REGEX = Pattern.compile("^\\s*\\[\\s*(?<src>[a-zA-Z0-9|-]*)\\s*(,\\s*(?<label>[a-zA-Z0-9|-]*))?\\s*,\\s*(?<dest>[a-zA-Z0-9|-]*)\\s*\\]\\s*$");
253253

254254
public GafferPopGraph(final Configuration configuration) {
255255
this(configuration, createGraph(configuration));
@@ -405,19 +405,15 @@ public Iterator<Vertex> vertices(final Object... vertexIds) {
405405
LOGGER.debug(GET_ALL_DEBUG_MSG, variables.getAllElementsLimit());
406406
getOperation = new Builder()
407407
.first(new GetAllElements.Builder()
408-
.view(new View.Builder()
409-
.entities(graph.getSchema().getEntityGroups())
410-
.build())
408+
.view(createAllEntitiesView())
411409
.build())
412410
.then(new Limit<Element>(variables.getAllElementsLimit(), true))
413411
.build();
414412
} else {
415413
getOperation = new Builder()
416414
.first(new GetElements.Builder()
417415
.input(getElementSeeds(Arrays.asList(vertexIds)))
418-
.view(new View.Builder()
419-
.entities(graph.getSchema().getEntityGroups())
420-
.build())
416+
.view(createAllEntitiesView())
421417
.build())
422418
.build();
423419
}
@@ -558,19 +554,26 @@ public Iterator<Edge> edges(final Object... elementIds) {
558554
LOGGER.debug(GET_ALL_DEBUG_MSG, variables.getAllElementsLimit());
559555
getOperation = new Builder()
560556
.first(new GetAllElements.Builder()
561-
.view(new View.Builder()
562-
.edges(graph.getSchema().getEdgeGroups())
563-
.build())
557+
.view(createAllEdgesView())
564558
.build())
565559
.then(new Limit<>(variables.getAllElementsLimit(), true))
566560
.build();
567561
} else {
562+
563+
View.Builder builder = new View.Builder();
564+
Set<String> edgeLabels = getEdgeLabelsFromIds(Arrays.asList(elementIds));
565+
if (edgeLabels.isEmpty()) {
566+
// Default to all edges
567+
builder.allEdges(true);
568+
} else {
569+
// Get requested edges
570+
builder.edges(edgeLabels);
571+
}
572+
568573
getOperation = new Builder()
569574
.first(new GetElements.Builder()
570575
.input(getElementSeeds(Arrays.asList(elementIds)))
571-
.view(new View.Builder()
572-
.edges(getEdgeViewGroup(Arrays.asList(elementIds)))
573-
.build())
576+
.view(builder.build())
574577
.build())
575578
.build();
576579
}
@@ -725,9 +728,7 @@ private Iterator<GafferPopVertex> verticesWithSeedsAndView(final List<ElementSee
725728

726729
View entitiesView = view;
727730
if (null == entitiesView) {
728-
entitiesView = new View.Builder()
729-
.entities(graph.getSchema().getEntityGroups())
730-
.build();
731+
entitiesView = createAllEntitiesView();
731732
} else if (entitiesView.hasEdges()) {
732733
entitiesView = new View.Builder()
733734
.merge(entitiesView)
@@ -781,15 +782,16 @@ private Iterator<Vertex> adjVerticesWithSeedsAndView(final List<ElementSeed> see
781782
throw new UnsupportedOperationException("There could be a lot of vertices, so please add some seeds");
782783
}
783784

784-
View processedView = view == null ? createAllEntitiesView() : view;
785785
final Iterable<? extends Element> result = execute(new OperationChain.Builder()
786786
.first(new GetAdjacentIds.Builder()
787787
.input(seeds)
788-
.view(processedView)
788+
.view(view)
789789
.inOutType(getInOutType(direction))
790790
.build())
791791
// GetAdjacentIds provides list of entity seeds so run a GetElements to get the actual Entities
792-
.then(new GetElements())
792+
.then(new GetElements.Builder()
793+
.view(createAllEntitiesView())
794+
.build())
793795
.build());
794796

795797
// Translate results to Gafferpop elements
@@ -808,9 +810,7 @@ private Iterator<Edge> edgesWithSeedsAndView(final List<ElementSeed> seeds, fina
808810

809811
View edgesView = view;
810812
if (null == edgesView) {
811-
edgesView = new View.Builder()
812-
.edges(graph.getSchema().getEdgeGroups())
813-
.build();
813+
edgesView = createAllEdgesView();
814814
} else if (edgesView.hasEntities()) {
815815
edgesView = new View.Builder()
816816
.merge(edgesView)
@@ -888,11 +888,11 @@ private View createView(final String... labels) {
888888
}
889889

890890
private View createAllEntitiesView() {
891-
final View.Builder viewBuilder = new View.Builder();
892-
for (final String group : graph.getSchema().getEntityGroups()) {
893-
viewBuilder.entity(group);
894-
}
895-
return viewBuilder.build();
891+
return new View.Builder().allEntities(true).build();
892+
}
893+
894+
private View createAllEdgesView() {
895+
return new View.Builder().allEdges(true).build();
896896
}
897897

898898
/**
@@ -941,17 +941,17 @@ private List<ElementSeed> getElementSeeds(final Iterable<Object> ids) {
941941
}
942942

943943
/**
944-
* Determines the edge group used in the view based on supplied IDs.
945-
* If ID contains a label, this is extracted and used in the view.
946-
* If not, all edge groups are used.
944+
* Extracts edge labels from edge IDs if found.
945+
* All ids must be of the [src, label, dest] format.
946+
* Otherwise, returns an empty set.
947947
*
948948
* @param ids The iterable of IDs
949949
* @return Set of edge labels for the view
950950
*/
951-
private Set<String> getEdgeViewGroup(final Iterable<Object> ids) {
951+
private Set<String> getEdgeLabelsFromIds(final Iterable<Object> ids) {
952952
Set<String> labels = new HashSet<>();
953953

954-
ids.forEach(id -> {
954+
for (final Object id: ids) {
955955
if ((id instanceof String) && (EDGE_ID_REGEX.matcher((String) id).matches())) {
956956
Matcher edgeIdWithLabelMatcher = EDGE_ID_REGEX.matcher((String) id);
957957

@@ -960,10 +960,11 @@ private Set<String> getEdgeViewGroup(final Iterable<Object> ids) {
960960
labels.add(edgeIdWithLabelMatcher.group("label"));
961961
}
962962
} else {
963-
// Fallback is to use all schema edge groups
964-
labels.addAll(graph.getSchema().getEdgeGroups());
963+
// If a single ID isn't of the format [src, label, dest]
964+
// Then all edge labels must be used
965+
return Collections.emptySet();
965966
}
966-
});
967+
}
967968

968969
return labels;
969970
}

0 commit comments

Comments
 (0)