@@ -249,7 +249,7 @@ public enum DefaultIdManager {
249
249
250
250
private static final Logger LOGGER = LoggerFactory .getLogger (GafferPopGraph .class );
251
251
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* $" );
253
253
254
254
public GafferPopGraph (final Configuration configuration ) {
255
255
this (configuration , createGraph (configuration ));
@@ -405,19 +405,15 @@ public Iterator<Vertex> vertices(final Object... vertexIds) {
405
405
LOGGER .debug (GET_ALL_DEBUG_MSG , variables .getAllElementsLimit ());
406
406
getOperation = new Builder ()
407
407
.first (new GetAllElements .Builder ()
408
- .view (new View .Builder ()
409
- .entities (graph .getSchema ().getEntityGroups ())
410
- .build ())
408
+ .view (createAllEntitiesView ())
411
409
.build ())
412
410
.then (new Limit <Element >(variables .getAllElementsLimit (), true ))
413
411
.build ();
414
412
} else {
415
413
getOperation = new Builder ()
416
414
.first (new GetElements .Builder ()
417
415
.input (getElementSeeds (Arrays .asList (vertexIds )))
418
- .view (new View .Builder ()
419
- .entities (graph .getSchema ().getEntityGroups ())
420
- .build ())
416
+ .view (createAllEntitiesView ())
421
417
.build ())
422
418
.build ();
423
419
}
@@ -558,19 +554,26 @@ public Iterator<Edge> edges(final Object... elementIds) {
558
554
LOGGER .debug (GET_ALL_DEBUG_MSG , variables .getAllElementsLimit ());
559
555
getOperation = new Builder ()
560
556
.first (new GetAllElements .Builder ()
561
- .view (new View .Builder ()
562
- .edges (graph .getSchema ().getEdgeGroups ())
563
- .build ())
557
+ .view (createAllEdgesView ())
564
558
.build ())
565
559
.then (new Limit <>(variables .getAllElementsLimit (), true ))
566
560
.build ();
567
561
} 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
+
568
573
getOperation = new Builder ()
569
574
.first (new GetElements .Builder ()
570
575
.input (getElementSeeds (Arrays .asList (elementIds )))
571
- .view (new View .Builder ()
572
- .edges (getEdgeViewGroup (Arrays .asList (elementIds )))
573
- .build ())
576
+ .view (builder .build ())
574
577
.build ())
575
578
.build ();
576
579
}
@@ -725,9 +728,7 @@ private Iterator<GafferPopVertex> verticesWithSeedsAndView(final List<ElementSee
725
728
726
729
View entitiesView = view ;
727
730
if (null == entitiesView ) {
728
- entitiesView = new View .Builder ()
729
- .entities (graph .getSchema ().getEntityGroups ())
730
- .build ();
731
+ entitiesView = createAllEntitiesView ();
731
732
} else if (entitiesView .hasEdges ()) {
732
733
entitiesView = new View .Builder ()
733
734
.merge (entitiesView )
@@ -781,15 +782,16 @@ private Iterator<Vertex> adjVerticesWithSeedsAndView(final List<ElementSeed> see
781
782
throw new UnsupportedOperationException ("There could be a lot of vertices, so please add some seeds" );
782
783
}
783
784
784
- View processedView = view == null ? createAllEntitiesView () : view ;
785
785
final Iterable <? extends Element > result = execute (new OperationChain .Builder ()
786
786
.first (new GetAdjacentIds .Builder ()
787
787
.input (seeds )
788
- .view (processedView )
788
+ .view (view )
789
789
.inOutType (getInOutType (direction ))
790
790
.build ())
791
791
// 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 ())
793
795
.build ());
794
796
795
797
// Translate results to Gafferpop elements
@@ -808,9 +810,7 @@ private Iterator<Edge> edgesWithSeedsAndView(final List<ElementSeed> seeds, fina
808
810
809
811
View edgesView = view ;
810
812
if (null == edgesView ) {
811
- edgesView = new View .Builder ()
812
- .edges (graph .getSchema ().getEdgeGroups ())
813
- .build ();
813
+ edgesView = createAllEdgesView ();
814
814
} else if (edgesView .hasEntities ()) {
815
815
edgesView = new View .Builder ()
816
816
.merge (edgesView )
@@ -888,11 +888,11 @@ private View createView(final String... labels) {
888
888
}
889
889
890
890
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 ();
896
896
}
897
897
898
898
/**
@@ -941,17 +941,17 @@ private List<ElementSeed> getElementSeeds(final Iterable<Object> ids) {
941
941
}
942
942
943
943
/**
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 .
947
947
*
948
948
* @param ids The iterable of IDs
949
949
* @return Set of edge labels for the view
950
950
*/
951
- private Set <String > getEdgeViewGroup (final Iterable <Object > ids ) {
951
+ private Set <String > getEdgeLabelsFromIds (final Iterable <Object > ids ) {
952
952
Set <String > labels = new HashSet <>();
953
953
954
- ids . forEach ( id -> {
954
+ for ( final Object id : ids ) {
955
955
if ((id instanceof String ) && (EDGE_ID_REGEX .matcher ((String ) id ).matches ())) {
956
956
Matcher edgeIdWithLabelMatcher = EDGE_ID_REGEX .matcher ((String ) id );
957
957
@@ -960,10 +960,11 @@ private Set<String> getEdgeViewGroup(final Iterable<Object> ids) {
960
960
labels .add (edgeIdWithLabelMatcher .group ("label" ));
961
961
}
962
962
} 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 ();
965
966
}
966
- });
967
+ }
967
968
968
969
return labels ;
969
970
}
0 commit comments