Skip to content

Commit

Permalink
rdf properties extraction interface
Browse files Browse the repository at this point in the history
  • Loading branch information
barmintor committed Jul 11, 2013
1 parent 1dcd3be commit 2d3ce80
Show file tree
Hide file tree
Showing 27 changed files with 783 additions and 148 deletions.
11 changes: 6 additions & 5 deletions fcrepo-http-api/src/main/java/org/fcrepo/api/FedoraNodes.java
Expand Up @@ -32,6 +32,7 @@
import static org.fcrepo.http.RDFMediaType.RDF_JSON;
import static org.fcrepo.http.RDFMediaType.RDF_XML;
import static org.fcrepo.http.RDFMediaType.TURTLE;
import static org.fcrepo.rdf.GraphProperties.PROBLEMS_MODEL_NAME;
import static org.slf4j.LoggerFactory.getLogger;

import java.io.IOException;
Expand Down Expand Up @@ -71,13 +72,13 @@
import org.fcrepo.exception.InvalidChecksumException;
import org.fcrepo.session.InjectedSession;
import org.fcrepo.utils.FedoraJcrTypes;
import org.modeshape.common.collection.Problems;
import org.slf4j.Logger;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import com.codahale.metrics.annotation.Timed;
import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.rdf.model.Model;

/**
* CRUD operations on Fedora Nodes
Expand Down Expand Up @@ -250,14 +251,14 @@ public Response updateSparql(@PathParam("path")
final FedoraResource result =
nodeService.getObject(session, path);

result.updatePropertiesDataset(new HttpGraphSubjects(
Dataset properties = result.updatePropertiesDataset(new HttpGraphSubjects(
FedoraNodes.class, uriInfo, session), IOUtils
.toString(requestBodyStream));
final Problems problems = result.getDatasetProblems();
if (problems != null && problems.hasProblems()) {
Model problems = properties.getNamedModel(PROBLEMS_MODEL_NAME);
if (problems.size() > 0) {
logger.info(
"Found these problems updating the properties for {}: {}",
path, problems.toString());
path, problems);
return status(FORBIDDEN).entity(problems.toString())
.build();

Expand Down
Expand Up @@ -37,13 +37,15 @@
import org.fcrepo.FedoraResource;
import org.fcrepo.api.FedoraNodes;
import org.fcrepo.api.rdf.HttpGraphSubjects;
import org.fcrepo.rdf.GraphProperties;
import org.fcrepo.session.InjectedSession;
import org.modeshape.common.collection.Problems;
import org.slf4j.Logger;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import com.codahale.metrics.annotation.Timed;
import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.rdf.model.Model;

/**
* Utility endpoint for running SPARQL Update queries on any object
Expand Down Expand Up @@ -79,11 +81,12 @@ public Response updateSparql(final InputStream requestBodyStream)
final FedoraResource result =
nodeService.getObject(session, "/");

result.updatePropertiesDataset(new HttpGraphSubjects(
Dataset dataset = result.updatePropertiesDataset(new HttpGraphSubjects(
FedoraNodes.class, uriInfo, session), IOUtils
.toString(requestBodyStream));
final Problems problems = result.getDatasetProblems();
if (problems != null && problems.hasProblems()) {
if (dataset.containsNamedModel(GraphProperties.PROBLEMS_MODEL_NAME)) {
Model problems = dataset.getNamedModel(GraphProperties.PROBLEMS_MODEL_NAME);

logger.info(
"Found these problems updating the properties for {}: {}",
"/", problems.toString());
Expand Down
Expand Up @@ -57,6 +57,7 @@
import org.fcrepo.FedoraResource;
import org.fcrepo.exception.InvalidChecksumException;
import org.fcrepo.identifiers.UUIDPidMinter;
import org.fcrepo.rdf.GraphProperties;
import org.fcrepo.rdf.GraphSubjects;
import org.fcrepo.services.DatastreamService;
import org.fcrepo.services.NodeService;
Expand Down Expand Up @@ -101,7 +102,7 @@ public class FedoraNodesTest {

@Mock
private Model mockModel;

private UriInfo uriInfo;

@Before
Expand Down Expand Up @@ -230,11 +231,13 @@ public void testDescribeObject() throws RepositoryException, IOException {
public void testSparqlUpdate() throws RepositoryException, IOException {
final String pid = "FedoraObjectsRdfTest1";
final String path = "/" + pid;
when(mockObject.getDatasetProblems()).thenReturn(null);
final InputStream mockStream =
new ByteArrayInputStream("my-sparql-statement".getBytes());
when(mockNodes.getObject(mockSession, path)).thenReturn(mockObject);

when(mockObject.updatePropertiesDataset(any(GraphSubjects.class), any(String.class)))
.thenReturn(mockDataset);
when(mockDataset.getNamedModel(GraphProperties.PROBLEMS_MODEL_NAME))
.thenReturn(mockModel);
testObj.updateSparql(createPathList(pid), getUriInfoImpl(), mockStream);

verify(mockObject).updatePropertiesDataset(any(GraphSubjects.class),
Expand Down
Expand Up @@ -17,7 +17,6 @@
package org.fcrepo.api.repository;

import static org.fcrepo.test.util.TestHelpers.getUriInfoImpl;
import static org.fcrepo.test.util.TestHelpers.mockSession;
import static org.fcrepo.test.util.TestHelpers.setField;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
Expand All @@ -39,6 +38,8 @@
import org.junit.Test;
import org.mockito.Mock;

import com.hp.hpl.jena.query.Dataset;

public class FedoraRepositoriesPropertiesTest {

private FedoraRepositoriesProperties testObj;
Expand All @@ -48,25 +49,29 @@ public class FedoraRepositoriesPropertiesTest {

@Mock
private FedoraObject mockObject;

@Mock
private Dataset mockDataset;

@Mock
private Session mockSession;

@Before
public void setUp() throws Exception {
initMocks(this);
testObj = new FedoraRepositoriesProperties();
mockSession = mockSession(testObj);
setField(testObj, "session", mockSession);
setField(testObj, "nodeService", mockNodes);
setField(testObj, "uriInfo", getUriInfoImpl());
}

@Test
public void testSparqlUpdate() throws RepositoryException, IOException {
when(mockObject.getDatasetProblems()).thenReturn(null);
final InputStream mockStream =
new ByteArrayInputStream("my-sparql-statement".getBytes());
when(mockNodes.getObject(mockSession, "/")).thenReturn(mockObject);
when(mockObject.updatePropertiesDataset(any(GraphSubjects.class), any(String.class)))
.thenReturn(mockDataset);
testObj.updateSparql(mockStream);

verify(mockObject).updatePropertiesDataset(any(GraphSubjects.class),
Expand Down
Expand Up @@ -326,10 +326,11 @@ public void testUpdateObjectGraphWithProblems() throws Exception {
.getBytes()));
getObjMethod.setEntity(e);
final HttpResponse response = client.execute(getObjMethod);
if (response.getStatusLine().getStatusCode() != 403 && response.getEntity() != null) {
final String content = EntityUtils.toString(response.getEntity());
logger.error("Got unexpected update response:\n" + content);
}
assertEquals(403, response.getStatusLine().getStatusCode());
final String content = EntityUtils.toString(response.getEntity());

logger.debug("Got update response:\n" + content);

}

Expand Down
Expand Up @@ -28,6 +28,7 @@
import javax.ws.rs.core.MultivaluedMap;

import org.fcrepo.rdf.SerializationUtils;
import org.fcrepo.rdf.GraphProperties;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormatter;
import org.slf4j.Logger;
Expand All @@ -36,6 +37,7 @@
import com.hp.hpl.jena.graph.Node;
import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.sparql.core.Quad;
import com.hp.hpl.jena.sparql.util.Context;

/**
* Utilities to help with serializing a graph to an HTTP resource
Expand Down Expand Up @@ -90,6 +92,23 @@ static String getFirstValueForPredicate(final Dataset rdf,
}
}

/**
* Get the subject of the dataset, given by the context's "uri"
*
* @param rdf
* @return
*/
static Node getDatasetSubject(final Dataset rdf) {
Context context = rdf.getContext();
String uri = context.getAsString(GraphProperties.URI_SYMBOL);
logger.debug("uri from context: {}", uri);
if (uri != null) {
return createURI(uri);
} else {
return null;
}
}

/**
* Set the cache control and last modified HTTP headers from data in the
* graph
Expand Down
Expand Up @@ -50,9 +50,6 @@ public class HttpGraphSubjectsTest {
@Mock
private Session mockSession;

@Mock private UriInfo ui ;
@Mock private UriBuilder ub;

@Mock
private Workspace mockWorkspace;

Expand Down
Expand Up @@ -35,9 +35,6 @@ public class InjectableSessionTest {

InjectableSession testObj;

@Mock
private Repository mockRepo;

@Mock
private Session mockSession;

Expand Down
Expand Up @@ -39,9 +39,6 @@ public class SessionProviderTest {

SessionProvider testObj;

@Mock
private Repository mockRepo;

@Mock
private Session mockSession;

Expand Down
Expand Up @@ -59,7 +59,7 @@ public void testGetMessage() throws Exception {
NodeType[] mockTypes = new NodeType[] {mockType};
when(mockSource.getMixinNodeTypes()).thenReturn(mockTypes);
when(mockJCR.getNode(testPath)).thenReturn(mockSource);
Message actual = testObj.getMessage(mockEvent, mockJCR, mockJMS);
testObj.getMessage(mockEvent, mockJCR, mockJMS);
verify(mockText).setStringProperty("methodName", "ingest");
}
}
6 changes: 4 additions & 2 deletions fcrepo-kernel/src/main/java/org/fcrepo/Datastream.java
Expand Up @@ -55,7 +55,8 @@ public class Datastream extends FedoraResource implements FedoraJcrTypes {

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

static final Histogram contentSizeHistogram = getMetrics().histogram(name(Datastream.class, "content-size"));
static final Histogram contentSizeHistogram =
getMetrics().histogram(name(Datastream.class, "content-size"));

/**
* The JCR node for this datastream
Expand Down Expand Up @@ -168,7 +169,8 @@ public void setContent(final InputStream content, final String contentType,
final Property dataProperty = contentNode.setProperty(JCR_DATA, binary);

final String dsChecksum = binary.getHexHash();
if (checksum != null && !checksum.equals(ContentDigest.asURI("SHA-1", dsChecksum))) {
if (checksum != null &&
!checksum.equals(ContentDigest.asURI("SHA-1", dsChecksum))) {
LOGGER.debug("Failed checksum test");
throw new InvalidChecksumException("Checksum Mismatch of " +
dsChecksum + " and " + checksum);
Expand Down

0 comments on commit 2d3ce80

Please sign in to comment.