Skip to content

Commit

Permalink
Merge pull request #827 from awoods/fcrepo-1539
Browse files Browse the repository at this point in the history
Eliminate the publishing of UUID triples
  • Loading branch information
ajs6f committed Jul 9, 2015
2 parents 9676db5 + b13e961 commit 2a4e650
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 57 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1451,27 +1451,16 @@ public void testGetObjectReferences() throws Exception {
}

@Test
public void testGetObjectGraphByUUID() throws Exception {
public void testGetObjectGraphLacksUUID() throws Exception {
final HttpResponse createResponse = createObject("");

final String location = createResponse.getFirstHeader("Location").getValue();

final HttpGet getObjMethod = new HttpGet(location);
final GraphStore graphStore = getGraphStore(getObjMethod);
final Iterator<Quad> iterator =
graphStore.find(ANY, createURI(location),
HAS_PRIMARY_IDENTIFIER.asNode(), ANY);

assertTrue("Expected graph to contain a UUID", iterator.hasNext());

final String uuid = iterator.next().getObject().getLiteralLexicalForm();

final HttpGet getObjMethodByUuid =
new HttpGet(serverAddress + "%5B" + uuid + "%5D");
getObjMethodByUuid.addHeader("Accept", "application/n3");
final HttpResponse uuidResponse = client.execute(getObjMethod);
assertEquals(200, uuidResponse.getStatusLine().getStatusCode());

graphStore.find(ANY, createURI(location), HAS_PRIMARY_IDENTIFIER.asNode(), ANY);
assertFalse("Graph should not contain a UUID!", iterator.hasNext());
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@
package org.fcrepo.kernel.impl.rdf.impl;

import static org.fcrepo.kernel.impl.utils.FedoraTypesUtils.isInternalProperty;
import static org.fcrepo.kernel.utils.UncheckedPredicate.uncheck;
import static org.slf4j.LoggerFactory.getLogger;

import java.util.Iterator;
import java.util.function.Predicate;

import javax.jcr.Property;
import javax.jcr.RepositoryException;
Expand Down Expand Up @@ -47,6 +49,8 @@ public class PropertiesRdfContext extends NodeRdfContext {

private static final Logger LOGGER = getLogger(PropertiesRdfContext.class);

private static final Predicate<Property> IS_NOT_UUID = uncheck(p -> !p.getName().equals("jcr:uuid"));

/**
* Default constructor.
*
Expand Down Expand Up @@ -76,7 +80,7 @@ private Iterator<Triple> triplesFromProperties(final FedoraResource n)
}

final UnmodifiableIterator<Property> properties =
Iterators.filter(allProperties, isInternalProperty.negate()::test);
Iterators.filter(allProperties, isInternalProperty.negate().and(IS_NOT_UUID)::test);
return Iterators.concat(Iterators.transform(properties, property2triple));

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package org.fcrepo.integration.kernel.impl;

import static com.hp.hpl.jena.graph.Node.ANY;
import static com.hp.hpl.jena.graph.NodeFactory.createLiteral;
import static com.hp.hpl.jena.graph.NodeFactory.createURI;
import static com.hp.hpl.jena.rdf.model.ResourceFactory.createPlainLiteral;
Expand Down Expand Up @@ -202,14 +203,14 @@ public void testObjectGraph() throws RepositoryException {
final Graph graph = object.getTriples(subjects, PropertiesRdfContext.class).asModel().getGraph();

// jcr property
final Node s = createGraphSubjectNode(object);
Node s = createGraphSubjectNode(object);
Node p = createURI(REPOSITORY_NAMESPACE + "uuid");
Node o = createLiteral(object.getNode().getIdentifier());
assertTrue(graph.contains(s, p, o));
assertFalse(graph.contains(s, p, ANY));

// multivalued property
s = createGraphSubjectNode(object);
p = createURI(REPOSITORY_NAMESPACE + "mixinTypes");
o = createLiteral(FEDORA_RESOURCE);
Node o = createLiteral(FEDORA_RESOURCE);
assertTrue(graph.contains(s, p, o));

o = createLiteral(FEDORA_CONTAINER);
Expand Down Expand Up @@ -249,7 +250,7 @@ public void testObjectGraphWithCustomProperty() throws RepositoryException {
o = createLiteral("this-is-some-subject-stored-as-a-binary");
assertTrue(graph.contains(s, p, o));

p = Node.ANY;
p = ANY;
o = createLiteral("jcr-data-should-be-ignored");
assertFalse(graph.contains(s, p, o));

Expand Down Expand Up @@ -315,17 +316,10 @@ public void testDatastreamGraph() throws RepositoryException, InvalidChecksumExc

final Graph graph = object.getTriples(subjects, PropertiesRdfContext.class).asModel().getGraph();


// jcr property
final Node s = createGraphSubjectNode(object);
Node p = createURI(REPOSITORY_NAMESPACE + "uuid");
Node o = createLiteral(object.getNode().getIdentifier());

assertTrue(graph.contains(s, p, o));

// multivalued property
p = createURI(REPOSITORY_NAMESPACE + "mixinTypes");
o = createLiteral(FEDORA_RESOURCE);
final Node s = createGraphSubjectNode(object);
Node p = createURI(REPOSITORY_NAMESPACE + "mixinTypes");
Node o = createLiteral(FEDORA_RESOURCE);
assertTrue(graph.contains(s, p, o));

o = createLiteral(FEDORA_NON_RDF_SOURCE_DESCRIPTION);
Expand Down Expand Up @@ -436,7 +430,7 @@ public void testUpdateDenied() throws RepositoryException {
subjects,
"INSERT { <> <http://purl.org/dc/elements/1.1/title> \"test-original\". }"
+ " WHERE { }", new RdfStream());
} catch (AccessDeniedException e) {
} catch (final AccessDeniedException e) {
fail("Should fail at update, not create property");
}
final AccessControlManager acm = session.getAccessControlManager();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,8 @@ public void testGetPredicateForProperty() throws RepositoryException {
@Test
public final void shouldMapRdfPredicatesToJcrProperties() throws RepositoryException {

final Property p = createProperty(REPOSITORY_NAMESPACE, "uuid");
assertEquals("jcr:uuid", getPropertyNameFromPredicate(mockNode, p, EMPTY_NAMESPACE_MAP));

final Property p = createProperty(REPOSITORY_NAMESPACE, "created");
assertEquals("jcr:created", getPropertyNameFromPredicate(mockNode, p, EMPTY_NAMESPACE_MAP));
}

@Test(expected = FedoraInvalidNamespaceException.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,6 @@ public interface FedoraJcrTypes {

String FROZEN_MIXIN_TYPES = "jcr:frozenMixinTypes";

String JCR_UUID = "jcr:uuid";

String JCR_PRIMARY_TYPE = "jcr:primaryType";

String JCR_MIXIN_TYPES = "jcr:mixinTypes";
Expand All @@ -84,6 +82,6 @@ public interface FedoraJcrTypes {
String LDP_IS_MEMBER_OF_RELATION = "ldp:isMemberOfRelation";
String LDP_MEMBER_RESOURCE = "ldp:membershipResource";

List<String> EXPOSED_PROTECTED_JCR_TYPES = of(JCR_UUID, JCR_LASTMODIFIED, JCR_CREATED, JCR_CREATEDBY,
List<String> EXPOSED_PROTECTED_JCR_TYPES = of(JCR_LASTMODIFIED, JCR_CREATED, JCR_CREATEDBY,
JCR_PRIMARY_TYPE, JCR_MIXIN_TYPES);
}
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,7 @@ public void shouldDoStuff() throws RepositoryException {
final String s = "@prefix dces : <http://purl.org/dc/elements/1.1/>\n" +
"@prefix fcrepo : <" + REPOSITORY_NAMESPACE + ">\n" +
"id = . :: xsd:string ;\n" +
"title = dc:title :: xsd:string ;\n" +
"uuid = fcrepo:uuid :: xsd:string ;";
"title = dc:title :: xsd:string ;";
final InputStream stringReader = new ByteArrayInputStream(s.getBytes());

testObj = new LDPathTransform(stringReader);
Expand All @@ -103,6 +102,5 @@ public void shouldDoStuff() throws RepositoryException {
assertEquals("Got wrong subject in identifier!", subjects.toDomain("/testObject").getURI(), stuff.get(
"id").iterator().next());
assertEquals("Got wrong title!", "some-title", stuff.get("title").iterator().next());
assertEquals("Got wrong UUID!", object.getNode().getIdentifier(), stuff.get("uuid").iterator().next());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,12 @@
import javax.jcr.Session;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

import static java.util.Objects.requireNonNull;
import static java.util.UUID.randomUUID;
import static org.fcrepo.kernel.RdfLexicon.REPOSITORY_NAMESPACE;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;


Expand All @@ -49,6 +52,7 @@
*
* @author cbeer
* @author ajs6f
* @author awoods
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/spring-test/master.xml"})
Expand All @@ -64,24 +68,50 @@ public class SparqlQueryTransformIT extends AbstractResourceIT {
private SparqlQueryTransform testObj;

@Test
public void shouldDoStuff() throws RepositoryException {
public void testQueryPrimaryType() throws RepositoryException, IOException {
final Session session = repo.login();
try {
final Container object = containerService.findOrCreate(session, "/testObject-" + randomUUID());

final String s = "SELECT ?x ?type\n" +
"WHERE { ?x <" + REPOSITORY_NAMESPACE + "primaryType> ?type }";
try (final InputStream stringReader = new ByteArrayInputStream(s.getBytes())) {

testObj = new SparqlQueryTransform(stringReader);

final RdfStream stream = object.getTriples(new DefaultIdentifierTranslator(session),
PropertiesRdfContext.class);
try (final QueryExecution qexec = testObj.apply(stream)) {
final ResultSet results = requireNonNull(qexec).execSelect();
assertTrue(requireNonNull(results).hasNext());
}
}
} finally {
session.logout();
}
}

final Container object = containerService.findOrCreate(session, "/testObject");

final String s = "SELECT ?x ?uuid\n" +
"WHERE { ?x <" + REPOSITORY_NAMESPACE + "uuid> ?uuid }";
final InputStream stringReader = new ByteArrayInputStream(s.getBytes());

testObj = new SparqlQueryTransform(stringReader);

final RdfStream stream = object.getTriples(new DefaultIdentifierTranslator(session),
PropertiesRdfContext.class);
try (final QueryExecution qexec = testObj.apply(stream)) {
assert (qexec != null);
final ResultSet results = qexec.execSelect();
assert (results != null);
assertTrue(results.hasNext());
@Test
public void testQueryNoUUID() throws RepositoryException, IOException {
final Session session = repo.login();
try {
final Container object = containerService.findOrCreate(session, "/testObject-" + randomUUID());

final String s = "SELECT ?x ?uuid\n" +
"WHERE { ?x <" + REPOSITORY_NAMESPACE + "uuid> ?uuid }";
try (final InputStream stringReader = new ByteArrayInputStream(s.getBytes())) {

testObj = new SparqlQueryTransform(stringReader);

final RdfStream stream = object.getTriples(new DefaultIdentifierTranslator(session),
PropertiesRdfContext.class);
try (final QueryExecution qexec = testObj.apply(stream)) {
final ResultSet results = requireNonNull(qexec).execSelect();
assertFalse(requireNonNull(results).hasNext());
}
}
} finally {
session.logout();
}
}
}

0 comments on commit 2a4e650

Please sign in to comment.