Skip to content

Commit

Permalink
use an RDF Lexicon to contain consts for all of our made-up predicate…
Browse files Browse the repository at this point in the history
… values
  • Loading branch information
cbeer committed May 30, 2013
1 parent ba7b5bc commit 4735d28
Show file tree
Hide file tree
Showing 21 changed files with 212 additions and 103 deletions.
Expand Up @@ -25,8 +25,12 @@
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.core.Variant;

import com.google.common.collect.ImmutableBiMap;
import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import org.fcrepo.AbstractResource;
import org.fcrepo.RdfLexicon;
import org.fcrepo.api.rdf.HttpGraphSubjects;
import org.fcrepo.http.RDFMediaType;
import org.fcrepo.utils.FedoraJcrTypes;
Expand All @@ -37,6 +41,8 @@
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.ResourceFactory;

import java.util.Map;

/**
* @author Frank Asseg
*/
Expand Down Expand Up @@ -81,6 +87,11 @@ public Dataset searchSubmitRdf(@QueryParam("q")
FedoraNodes.class, uriInfo), searchResult, session,
terms, limit, offset);

final Model searchModel = ModelFactory.createDefaultModel();
Map<String, ?> pathMap = ImmutableBiMap.of("q", terms, "offset", offset + limit, "limit", limit);
searchModel.add(searchResult, RdfLexicon.SEARCH_NEXT_PAGE, searchModel.createResource(uriInfo.getRequestUriBuilder().path(FedoraFieldSearch.class).buildFromMap(pathMap).toString()));
dataset.addNamedModel("search-pagination", searchModel);

return dataset;

} finally {
Expand Down
Expand Up @@ -35,6 +35,7 @@
import com.hp.hpl.jena.rdf.model.ResourceFactory;
import com.hp.hpl.jena.update.GraphStoreFactory;
import org.fcrepo.AbstractResource;
import org.fcrepo.RdfLexicon;
import org.springframework.stereotype.Component;

import com.codahale.metrics.annotation.Timed;
Expand Down Expand Up @@ -93,7 +94,7 @@ public Dataset getNextPid(@PathParam("path") final List<PathSegment> pathList, @

final String s = builder.buildFromMap(ImmutableBiMap.of("path", absPath)).toASCIIString();

model.add(pidsResult, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#hasMember"), ResourceFactory.createResource(s));
model.add(pidsResult, RdfLexicon.HAS_MEMBER_OF_RESULT, ResourceFactory.createResource(s));
}

return GraphStoreFactory.create(model).toDataset();
Expand Down
Expand Up @@ -5,6 +5,7 @@
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Resource;
import org.fcrepo.FedoraResource;
import org.fcrepo.RdfLexicon;
import org.fcrepo.api.FedoraExport;
import org.fcrepo.api.FedoraFieldSearch;
import org.fcrepo.api.FedoraFixity;
Expand Down Expand Up @@ -35,26 +36,26 @@ public Model createModelForResource(FedoraResource resource, UriInfo uriInfo, Gr
final Resource s = graphSubjects.getGraphSubject(resource.getNode());

if (resource.getNode().getPrimaryNodeType().isNodeType("mode:root")) {
model.add(s, model.createProperty("http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#link-type-search"), model.createResource(uriInfo.getBaseUriBuilder().path(FedoraFieldSearch.class).build().toASCIIString()));
model.add(s, model.createProperty("http://microformats.org/wiki/rel-sitemap"), model.createResource(uriInfo.getBaseUriBuilder().path(FedoraSitemap.class).build().toASCIIString()));
model.add(s, model.createProperty("info:fedora/hasTransactionProvider"), model.createResource(uriInfo.getBaseUriBuilder().path(FedoraTransactions.class).build().toASCIIString()));
model.add(s, model.createProperty("info:fedora/hasNamespaces"), model.createResource(uriInfo.getBaseUriBuilder().path(FedoraRepositoryNamespaces.class).build().toASCIIString()));
model.add(s, RdfLexicon.HAS_SEARCH_SERVICE, model.createResource(uriInfo.getBaseUriBuilder().path(FedoraFieldSearch.class).build().toASCIIString()));
model.add(s, RdfLexicon.HAS_SITEMAP, model.createResource(uriInfo.getBaseUriBuilder().path(FedoraSitemap.class).build().toASCIIString()));
model.add(s, RdfLexicon.HAS_TRANSACTION_SERVICE, model.createResource(uriInfo.getBaseUriBuilder().path(FedoraTransactions.class).build().toASCIIString()));
model.add(s, RdfLexicon.HAS_NAMESPACE_SERVICE, model.createResource(uriInfo.getBaseUriBuilder().path(FedoraRepositoryNamespaces.class).build().toASCIIString()));

} else {

for (String key : serializers.keySet()) {
final Map<String, String> pathMap = ImmutableBiMap.of("path", resource.getPath().substring(1), "format", key);
model.add(s, model.createProperty("info:fedora/exportsAs"), model.createResource(uriInfo.getBaseUriBuilder().path(FedoraExport.class).buildFromMap(pathMap).toASCIIString()));
model.add(s, RdfLexicon.HAS_SERIALIZATION, model.createResource(uriInfo.getBaseUriBuilder().path(FedoraExport.class).buildFromMap(pathMap).toASCIIString()));
}

final Map<String, String> pathMap = ImmutableBiMap.of("path", resource.getPath().substring(1));
model.add(s, model.createProperty("info:fedora/hasVersions"), model.createResource(uriInfo.getBaseUriBuilder().path(FedoraVersions.class).buildFromMap(pathMap).toASCIIString()));
model.add(s, RdfLexicon.HAS_VERSION_HISTORY, model.createResource(uriInfo.getBaseUriBuilder().path(FedoraVersions.class).buildFromMap(pathMap).toASCIIString()));

}

if (resource.hasContent()) {
final Map<String, String> pathMap = ImmutableBiMap.of("path", resource.getPath().substring(1));
model.add(s, model.createProperty("info:fedora/runFixityCheck"), model.createResource(uriInfo.getBaseUriBuilder().path(FedoraFixity.class).buildFromMap(pathMap).toASCIIString()));
model.add(s, RdfLexicon.HAS_FIXITY_SERVICE, model.createResource(uriInfo.getBaseUriBuilder().path(FedoraFixity.class).buildFromMap(pathMap).toASCIIString()));
}

return model;
Expand Down
Expand Up @@ -10,12 +10,14 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import java.util.Map;

import javax.jcr.LoginException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.core.Variant;

Expand Down Expand Up @@ -63,6 +65,12 @@ public void testFieldSearch() throws RepositoryException, URISyntaxException {
null));

when(mockNodeService.searchRepository(any(GraphSubjects.class), eq(ResourceFactory.createResource("http://localhost/fcrepo/path/to/query/endpoint")), eq(mockSession), eq("ZZZ"), eq(0), eq(0L))).thenReturn(DatasetFactory.create());
final UriBuilder mockUriBuilder = mock(UriBuilder.class);

when(mockUriBuilder.path(FedoraFieldSearch.class)).thenReturn(mockUriBuilder);
when(mockUriBuilder.buildFromMap(any(Map.class))).thenReturn(new URI("path/to/object"));

when(uriInfo.getRequestUriBuilder()).thenReturn(mockUriBuilder);

testObj.searchSubmitRdf("ZZZ", 0, 0, mockRequest, uriInfo);

Expand Down
Expand Up @@ -9,6 +9,7 @@

import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.rdf.model.ResourceFactory;
import org.fcrepo.RdfLexicon;
import org.fcrepo.identifiers.PidMinter;
import org.fcrepo.test.util.TestHelpers;
import org.junit.Before;
Expand Down Expand Up @@ -65,7 +66,7 @@ public String apply(final Object input) {
final Dataset np = testObj.getNextPid(createPathList(""), 2, uriInfo);

LOGGER.debug("Got dataset {}", np.getDefaultModel().toString());
assertTrue(np.getDefaultModel().contains(ResourceFactory.createResource("http://localhost/fcrepo/rest/fcr:pid"), ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#hasMember"), ResourceFactory.createResource("http://localhost/fcrepo/rest/asdf:123")));
assertTrue(np.getDefaultModel().contains(ResourceFactory.createResource("http://localhost/fcrepo/rest/fcr:pid"), RdfLexicon.HAS_MEMBER_OF_RESULT, ResourceFactory.createResource("http://localhost/fcrepo/rest/asdf:123")));

}
}
Expand Up @@ -12,6 +12,7 @@
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.fcrepo.RdfLexicon;
import org.fcrepo.test.util.TestHelpers;
import org.junit.Test;

Expand Down Expand Up @@ -69,7 +70,7 @@ public void testSearchSubmitPaging() throws Exception {

logger.debug("Got search results graph: {}", graphStore);
assertEquals(200, resp.getStatusLine().getStatusCode());
assertFalse(graphStore.contains(Node.ANY, ResourceFactory.createResource(serverAddress + "fcr:search?q=testobj&offset=1&limit=1").asNode(), ResourceFactory.createResource("info:fedora/iterator#hasNode").asNode(), Node.ANY));
assertFalse(graphStore.contains(Node.ANY, ResourceFactory.createResource(serverAddress + "fcr:search?q=testobj&offset=1&limit=1").asNode(), RdfLexicon.HAS_MEMBER_OF_RESULT.asNode(), Node.ANY));


}
Expand Down
Expand Up @@ -4,17 +4,20 @@
import static org.junit.Assert.assertTrue;

import com.hp.hpl.jena.graph.Node;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.ResourceFactory;
import com.hp.hpl.jena.update.GraphStore;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.fcrepo.RdfLexicon;
import org.fcrepo.test.util.TestHelpers;
import org.junit.Test;

public class FedoraFixityIT extends AbstractResourceIT {
@Test

@Test
public void testCheckDatastreamFixity() throws Exception {
final HttpPost objMethod = postObjMethod("FedoraDatastreamsTest11");
assertEquals(201, getStatus(objMethod));
Expand All @@ -31,10 +34,10 @@ public void testCheckDatastreamFixity() throws Exception {

logger.info("Got triples {}", graphStore);

assertTrue(graphStore.contains(Node.ANY, Node.ANY, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#isFixityResultOf").asNode(), ResourceFactory.createResource(serverAddress + "objects/FedoraDatastreamsTest11/zxc").asNode()));
assertTrue(graphStore.contains(Node.ANY, Node.ANY, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#status").asNode(), ResourceFactory.createPlainLiteral("SUCCESS").asNode()));
assertTrue(graphStore.contains(Node.ANY, Node.ANY, RdfLexicon.IS_FIXITY_RESULT_OF.asNode(), ResourceFactory.createResource(serverAddress + "objects/FedoraDatastreamsTest11/zxc").asNode()));
assertTrue(graphStore.contains(Node.ANY, Node.ANY, RdfLexicon.HAS_FIXITY_STATE.asNode(), ResourceFactory.createPlainLiteral("SUCCESS").asNode()));

assertTrue(graphStore.contains(Node.ANY, Node.ANY, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#computedChecksum").asNode(),ResourceFactory.createResource("urn:sha1:0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33").asNode()));
assertTrue(graphStore.contains(Node.ANY, Node.ANY, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#computedSize").asNode(),ResourceFactory.createTypedLiteral(3).asNode()));
assertTrue(graphStore.contains(Node.ANY, Node.ANY, RdfLexicon.HAS_COMPUTED_CHECKSUM.asNode(),ResourceFactory.createResource("urn:sha1:0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33").asNode()));
assertTrue(graphStore.contains(Node.ANY, Node.ANY, RdfLexicon.HAS_COMPUTED_SIZE.asNode(),ResourceFactory.createTypedLiteral(3).asNode()));
}
}
Expand Up @@ -14,6 +14,7 @@
import com.hp.hpl.jena.update.GraphStore;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.fcrepo.RdfLexicon;
import org.fcrepo.test.util.TestHelpers;
import org.junit.Test;

Expand All @@ -33,7 +34,7 @@ public void testGetNextHasAPid() throws IOException {
final HttpResponse response = client.execute(method);
logger.debug("Executed testGetNextHasAPid()");
final GraphStore graphStore = TestHelpers.parseTriples(response.getEntity().getContent());
assertTrue("Didn't find a single dang PID!", graphStore.contains(Node.ANY, ResourceFactory.createResource(serverAddress + "fcr:pid").asNode(), ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#hasMember").asNode(), Node.ANY));
assertTrue("Didn't find a single dang PID!", graphStore.contains(Node.ANY, ResourceFactory.createResource(serverAddress + "fcr:pid").asNode(), RdfLexicon.HAS_MEMBER_OF_RESULT.asNode(), Node.ANY));

}

Expand All @@ -44,7 +45,7 @@ public void testGetNextHasTwoPids() throws IOException {
final HttpResponse response = client.execute(method);
logger.debug("Executed testGetNextHasTwoPids()");
final GraphStore graphStore = TestHelpers.parseTriples(response.getEntity().getContent());
assertEquals("Didn't find two dang PIDs!", 2, Iterators.size(graphStore.find(Node.ANY, ResourceFactory.createResource(serverAddress + "fcr:pid").asNode(), ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#hasMember").asNode(), Node.ANY)));
assertEquals("Didn't find two dang PIDs!", 2, Iterators.size(graphStore.find(Node.ANY, ResourceFactory.createResource(serverAddress + "fcr:pid").asNode(), RdfLexicon.HAS_MEMBER_OF_RESULT.asNode(), Node.ANY)));

}

Expand All @@ -62,7 +63,7 @@ public void testGetNextHasAPidWithPath() throws IOException {
final HttpResponse response = client.execute(method);
logger.debug("Executed testGetNextHasAPidWithPath()");
final GraphStore graphStore = TestHelpers.parseTriples(response.getEntity().getContent());
assertTrue("Didn't find a single dang PID!", graphStore.contains(Node.ANY, ResourceFactory.createResource(serverAddress + "objects/fcr:pid").asNode(), ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#hasMember").asNode(), Node.ANY));
assertTrue("Didn't find a single dang PID!", graphStore.contains(Node.ANY, ResourceFactory.createResource(serverAddress + "objects/fcr:pid").asNode(), RdfLexicon.HAS_MEMBER_OF_RESULT.asNode(), Node.ANY));

}

Expand All @@ -73,7 +74,7 @@ public void testGetNextHasTwoPidsWithPath() throws IOException {
final HttpResponse response = client.execute(method);
logger.debug("Executed testGetNextHasTwoPidsWithPath()");
final GraphStore graphStore = TestHelpers.parseTriples(response.getEntity().getContent());
assertEquals("Didn't find two dang PIDs!", 2, Iterators.size(graphStore.find(Node.ANY, ResourceFactory.createResource(serverAddress + "objects/fcr:pid").asNode(), ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#hasMember").asNode(), Node.ANY)));
assertEquals("Didn't find two dang PIDs!", 2, Iterators.size(graphStore.find(Node.ANY, ResourceFactory.createResource(serverAddress + "objects/fcr:pid").asNode(), RdfLexicon.HAS_MEMBER_OF_RESULT.asNode(), Node.ANY)));

}
}

1 comment on commit 4735d28

@eddies
Copy link

@eddies eddies commented on 4735d28 May 31, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's a laundry list of vocabs: http://lov.okfn.org/dataset/lov/

Please sign in to comment.