/** * Serialize an RDF Quad. * @param quad the quad * @return a serialization of the quad */ public static String serializeQuad(final Quad quad) { return quad.getSubject() + SEP + quad.getPredicate() + SEP + quad.getObject() + SEP + quad.getGraphName().map(g -> g + " .").orElse("."); }
private Consumer<Quad> quadHandler(final String prefix) { return quad -> { if (quad.getGraphName().equals(of(LDP.PreferContainment)) || quad.getGraphName().equals(of(LDP.PreferMembership))) { hasContainerModificationQuads = true; } else { hasModificationQuads = true; } if (prefix.equals("D")) { patchDeleted.add(quad); } else if (prefix.equals("A") && !deleted.contains(quad)) { if (quad.getGraphName().filter(Trellis.PreferServerManaged::equals).isPresent() && quad.getPredicate().equals(type)) { interactionModel = (IRI) quad.getObject(); } patchAdded.add(quad); } }; }
@Override public Collection<IRI> getTargetTypes() { return data.stream().filter(quad -> quad.getGraphName().filter(graphsForTypes::contains).isPresent()) .filter(quad -> quad.getPredicate().equals(type)).map(Quad::getObject) .filter(term -> term instanceof IRI).map(term -> (IRI) term).distinct().collect(toList()); }
/** * Create a Linked Data Fragments filter. * * @param subject the LDF subject * @param predicate the LDF predicate * @param object the LDF object * @return a filtering predicate */ public static Predicate<Quad> filterWithLDF(final String subject, final String predicate, final String object) { return quad -> !(notCompareWithString(quad.getSubject(), subject) || notCompareWithString(quad.getPredicate(), predicate) || notCompareWithString(quad.getObject(), object)); }
String graphNameAsJsonLdString(final T tripleOrQuad) { if (tripleOrQuad instanceof org.apache.commons.rdf.api.Quad) { final org.apache.commons.rdf.api.Quad quad = (org.apache.commons.rdf.api.Quad) tripleOrQuad; return quad.getGraphName().map(factory::asJsonLdString).orElse("@default"); } return "@default"; }
@Test public void asQuad() throws Exception { final Quad q = new DummyQuad(); final Triple t = q.asTriple(); assertEquals(t, t); assertNotEquals(t, q); assertEquals(t, new DummyTriple()); assertEquals(t, new DummyQuad().asTriple()); // FIXME: This would not catch if asTriple() accidentally mixed up s/p/o // as they are here all the same assertEquals(new DummyIRI(1), t.getSubject()); assertEquals(new DummyIRI(2), t.getPredicate()); assertEquals(new DummyIRI(3), t.getObject()); assertEquals(Objects.hash(q.getSubject(), q.getPredicate(), q.getObject()), t.hashCode()); }
assertEquals("\"The Secret Club\"", stream.filter(t -> !dataset.contains(null, (BlankNodeOrIRI) t.getObject(), knows, t.getSubject())) .map(knowsQuad -> { try (Stream<? extends Quad> memberOf = dataset .stream(null, (BlankNodeOrIRI) knowsQuad.getObject(), member, null)) { return memberOf .filter(memberQuad -> dataset.contains(null, knowsQuad.getSubject(), member, memberQuad.getObject())) .findFirst().get().getObject(); try (Stream<? extends Quad> orgName = dataset.stream(null, (BlankNodeOrIRI) org, name, null)) { return orgName.findFirst().get().getObject().ntriplesString();
@Override public RDFTerm getObject() { return Quad.this.getObject(); }
if (!q.getGraphName().isPresent()) { graph.add(q.asTriple());
@Override public IRI getPredicate() { return Quad.this.getPredicate(); }
@Override public BlankNodeOrIRI getSubject() { return Quad.this.getSubject(); }
@Test public void getGraph2() throws Exception { // graph2 should be present, even if is named by a BlankNode // We'll look up the potentially mapped graph2 blanknode final BlankNodeOrIRI graph2Name = (BlankNodeOrIRI) dataset.stream(Optional.empty(), bob, isPrimaryTopicOf, null) .map(Quad::getObject).findAny().get(); try (final Graph g2 = dataset.getGraph(graph2Name).get()) { assertEquals(4, g2.size()); final Triple bobNameTriple = bobNameQuad.asTriple(); assertTrue(g2.contains(bobNameTriple)); assertTrue(g2.contains(bob, member, bnode1)); assertTrue(g2.contains(bob, member, bnode2)); assertFalse(g2.contains(bnode1, name, secretClubName)); assertTrue(g2.contains(bnode2, name, companyName)); } }
@Test public void testResourceWithAuditQuads() { final JenaDataset dataset = buildLdpDataset(LDP.RDFSource); auditService.creation(identifier, mockSession).forEach(q -> dataset.add(auditId, q.getSubject(), q.getPredicate(), q.getObject())); final TriplestoreResource res = new TriplestoreResource(connect(wrap(dataset.asJenaDatasetGraph())), identifier); res.fetchData(); assertTrue(res.exists(), "Missing resource!"); assertAll("Check resource", checkResource(res, identifier, LDP.RDFSource, false, false, false)); assertAll("Check LDP properties", checkLdpProperties(res, null, null, null, null)); assertAll("Check RDF stream", checkRdfStream(res, 2L, 0L, 5L, 0L, 0L)); }
/** * Stream a collection of quads into the event producer * @param quads the quads */ public void into(final Stream<? extends Quad> quads) { quads.filter(q -> q.getGraphName().filter(graphsOfInterest::contains).isPresent()) .forEachOrdered(existing::add); } }
/** * Stream out the removed quads * @return the removed quads */ public Stream<Quad> getRemoved() { return existing.stream().filter(q -> !dataset.contains(q)) // exclude the server-managed modified triple .filter(q -> !q.getGraphName().equals(of(PreferServerManaged)) || !modified.equals(q.getPredicate())) .map(q -> (Quad) q); }
stream.parallel().forEach(t -> whoIsWho.put(t.getObject().ntriplesString(), t.getSubject()));
private Optional<ProducerRecord<String, String>> buildMembershipMessage(final String topic, final IRI resource, final Resource parent, final Dataset dataset) throws Exception { try (final Dataset data = rdf.createDataset()) { if (DirectContainer.equals(parent.getInteractionModel())) { parent.getMembershipResource().ifPresent(member -> { parent.getMemberRelation().ifPresent(relation -> data.add(rdf.createQuad(PreferMembership, member, relation, resource))); parent.getMemberOfRelation().ifPresent(relation -> data.add(rdf.createQuad(PreferMembership, resource, relation, member))); }); } else if (IndirectContainer.equals(parent.getInteractionModel())) { parent.getMembershipResource().ifPresent(member -> parent.getMemberRelation().ifPresent(relation -> parent.getInsertedContentRelation().ifPresent(inserted -> dataset.stream(of(PreferUserManaged), null, inserted, null).sequential().forEachOrdered(q -> data.add(rdf.createQuad(PreferMembership, member, relation, q.getObject())))))); } final Optional<String> key = data.stream(of(PreferMembership), null, null, null).map(Quad::getSubject) .filter(x -> x instanceof IRI).map(x -> (IRI) x).map(IRI::getIRIString).findFirst(); if (key.isPresent()) { dataset.stream(of(PreferAudit), null, null, null).map(auditTypeMapper).forEachOrdered(data::add); return of(new ProducerRecord<>(topic, key.get(), serialize(data))); } return empty(); } }
@Test public void getPredicate() throws Exception { assertEquals(2, ((DummyIRI) quad.getPredicate()).i); } @Test
@Test public void getSubject() throws Exception { assertEquals(1, ((DummyIRI) quad.getSubject()).i); } @Test
@Override public void remove(final Quad q) { remove(q.getGraphName(), q.getSubject(), q.getPredicate(), q.getObject()); }