Predicate quadFilter()

in commons-rdf-jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java [167:198]


    Predicate<RDFDataset.Quad> quadFilter(final BlankNodeOrIRI subject, final IRI predicate, final RDFTerm object) {
        final Optional<Node> subjectNode = Optional.ofNullable(subject).map(factory::asJsonLdNode);
        final Optional<Node> predicateNode = Optional.ofNullable(predicate).map(factory::asJsonLdNode);
        final Optional<Node> objectNode = Optional.ofNullable(object).map(factory::asJsonLdNode);

        return q -> {
            if (subjectNode.isPresent() && subjectNode.get().compareTo(q.getSubject()) != 0) {
                return false;
            }
            if (predicateNode.isPresent() && predicateNode.get().compareTo(q.getPredicate()) != 0) {
                return false;
            }
            if (objectNode.isPresent()) {
                if (object instanceof Literal && q.getObject().isLiteral()) {
                    // Special handling for COMMONSRDF-56, COMMONSRDF-51:
                    // Less efficient wrapper to a Commons RDF Literal so
                    // we can use our RDF 1.1-compliant .equals()
                    final RDFTerm otherObj = factory.asRDFTerm(q.getObject());
                    if (! (object.equals(otherObj))) {
                        return false;
                    }
                } else {
                    // JSONLD-Java's .compareTo can handle IRI, BlankNode and type-mismatch
                    if (objectNode.get().compareTo(q.getObject()) != 0) {
                        return false;
                    }
                }
            }
            // All patterns checked, must be good!
            return true;
        };
    }