visualization/visualization-model/src/main/java/se/jguru/nazgul/tools/visualization/model/diagram/statement/Statements.java
public Node findNode(final String identifier, final boolean recursive) {

        Optional<Node> toReturn = getNodes().stream().filter(c -> c.getId().equals(identifier)).findFirst();
        if (!toReturn.isPresent() && recursive && getSubgraphs() != null && !getSubgraphs().isEmpty()) {

            // Does the Node with the given identifier exist in any Subgraph?
            toReturn = getSubgraphs().stream()
                    .map(c -> c.getStatements().findNode(identifier, true))
                    .filter(c -> c != null)
                    .findFirst();
        }

        // All Done.
        return toReturn.orElse(null);
    }
public Node findNode(final String identifier, final boolean recursive) {

        Optional<Node> toReturn = getNodes().stream().filter(c -> c.getId().equals(identifier)).findFirst();
        if (!toReturn.isPresent() && recursive && getSubgraphs() != null && !getSubgraphs().isEmpty()) {

            // Does the Node with the given identifier exist in any Subgraph?
            toReturn = getSubgraphs().stream()
                    .map(c -> c.getStatements().findNode(identifier, true))
                    .filter(c -> c != null)
                    .findFirst();
        }

        // All Done.
        return toReturn.orElse(null);
    }
Finds the Node with the supplied identifier within this Statements (and within any contained Subgraphs, if the
{@code recursive} flag is true).

@param identifier The identifier to match against the {@link Node#getId()} of a matching Node.
@param recursive  If {@code true}, the search should recurse into the Statements of Subgraphs.
@return The Node with the supplied identifier - or null if none was found.