public GraphTraversal apply()

in src/main/java/com/amazonaws/services/neptune/propertygraph/SpecifiedLabels.java [44:82]


    public GraphTraversal<? extends Element, ?> apply(GraphTraversal<? extends Element, ?> traversal, FeatureToggles featureToggles, GraphElementType graphElementType) {

        boolean simpleEdgeLabels = graphElementType == GraphElementType.edges &&
                labels.stream().allMatch(l -> !l.hasFromLabels() && !l.hasToLabels());

        if (simpleEdgeLabels || featureToggles.containsFeature(FeatureToggle.ExportByIndividualLabels)) {

            List<String> labelList = labels.stream()
                    .flatMap((Function<Label, Stream<String>>) label -> label.labels().stream())
                    .collect(Collectors.toList());

            String firstLabel = labelList.stream().findFirst().orElseThrow(() -> new IllegalStateException("No labels specified"));
            String[] remainingLabels = labelList.stream()
                    .skip(1)
                    .collect(Collectors.toList())
                    .toArray(new String[]{});

            return traversal.hasLabel(firstLabel, remainingLabels);
        } else {

            if (labels.size() > 1) {

                List<Traversal<?, ?>> traversals = new ArrayList<>();
                for (Label label : labels) {
                    traversals.add(createFilterForLabel(label, null));
                }
                traversal = traversal.or(traversals.toArray(new Traversal<?, ?>[]{}));


            } else {

                Label label = labels.iterator().next();
                traversal = createFilterForLabel(label, traversal);

            }

            return traversal;
        }
    }