Skip to content

Commit

Permalink
Added basic version creation on all REST API updates commands.
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Durbin authored and Andrew Woods committed Nov 15, 2013
1 parent 26c4fbe commit ece5e32
Show file tree
Hide file tree
Showing 12 changed files with 264 additions and 13 deletions.
Expand Up @@ -63,8 +63,12 @@ public void testDeniedAddDatastream() throws Exception {
postObjMethod("FedoraDatastreamsTest2Permit");

assertEquals(201, getStatus(objMethod));
final HttpPost method =
postDSMethod("FedoraDatastreamsTest2Permit", "zxc", "foo");
final HttpPost obj2Method = postObjMethod(
"FedoraDatastreamsTest2Permit/FedoraDatastreamsTest2Deny");
assertEquals(201, getStatus(obj2Method));
final HttpPost method = postDSMethod(
"FedoraDatastreamsTest2Permit/FedoraDatastreamsTest2Deny",
"zxc", "foo");
final HttpResponse response = client.execute(method);
assertEquals(403, response.getStatusLine().getStatusCode());
}
Expand All @@ -90,7 +94,7 @@ public void testAllowedAddDeepDatastream() throws Exception {
public void testDeniedAddDeepDatastream() throws Exception {
final HttpPost method =
postDSMethod(
"FedoraDatastreamsTest2_permit/does_permit/not_permit/exist_permit/yet_permit",
"FedoraDatastreamsTest2_permit/does_permit/not_permit/exist_permit/yet_permit/allowed_child",
"zxc", "foo");
final HttpResponse response = client.execute(method);
assertEquals(403, response.getStatusLine().getStatusCode());
Expand All @@ -111,11 +115,11 @@ public void testAllowedPutDatastream() throws Exception {
@Test
public void testDeniedPutDatastream() throws Exception {
final HttpPost objMethod =
postObjMethod("FedoraDatastreamsTestPut_permit");
postObjMethod("FedoraDatastreamsTestPut_permit/allowed_child");
assertEquals(201, getStatus(objMethod));
final HttpPut method =
putDSMethod("FedoraDatastreamsTestPut_permit", "zxc",
"foo");
putDSMethod("FedoraDatastreamsTestPut_permit/allowed_child",
"zxc", "foo");
final HttpResponse response = client.execute(method);
assertEquals(403, response.getStatusLine().getStatusCode());
}
Expand Down
Expand Up @@ -67,7 +67,14 @@ public boolean hasModeShapePermission(final Path absPath,
return absPath.getParent().getLastSegment().getName()
.getLocalName().toLowerCase().endsWith("permit");
}
return false;

// due to the fact that versioning creates version nodes under the
// created node, for the test implementation we should allow actions
// on nodes whose parents end with "permit".
return (!absPath.getParent().isRoot() && absPath.getParent()
.getLastSegment().getName().getLocalName().toLowerCase()
.endsWith("permit"));

}

/*
Expand Down
Expand Up @@ -108,7 +108,6 @@ public Response create(@PathParam("path")
final String newDatastreamPath;
final String path = toPath(pathList);


if (nodeService.exists(session, path)) {
final String pid;

Expand Down Expand Up @@ -151,6 +150,7 @@ public Response create(@PathParam("path")
uriInfo);

session.save();
versionService.checkpoint(session, path);
return created(
new URI(subjects.getGraphSubject(
datastreamNode.getNode(JCR_CONTENT)).getURI()))
Expand Down Expand Up @@ -211,6 +211,7 @@ public Response modifyContent(@PathParam("path")
contentType.toString(), requestBodyStream);
final boolean isNew = datastreamNode.isNew();
session.save();
versionService.checkpoint(session, path);

if (isNew) {
final HttpGraphSubjects subjects =
Expand Down
Expand Up @@ -31,7 +31,9 @@
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.jcr.Node;
import javax.jcr.NodeIterator;
Expand Down Expand Up @@ -107,9 +109,11 @@ public Response modifyDatastreams(@PathParam("path")

final String path = toPath(pathList);
try {
Set<String> pathsChanged = new HashSet<String>();
for (final String dsid : dsidList) {
logger.debug("Purging datastream: " + dsid);
nodeService.deleteObject(session, path + "/" + dsid);
String dsPath = path + "/" + dsid;
nodeService.deleteObject(session, dsPath);
}

for (final BodyPart part : multipart.getBodyParts()) {
Expand All @@ -129,9 +133,14 @@ public Response modifyDatastreams(@PathParam("path")
}
datastreamService.createDatastreamNode(session, dsPath, part
.getMediaType().toString(), src);
pathsChanged.add(dsPath);
}

session.save();
versionService.checkpoint(session, path);
for (String dsPath : pathsChanged) {
versionService.checkpoint(session, dsPath);
}

final HttpGraphSubjects subjects =
new HttpGraphSubjects(session, FedoraNodes.class, uriInfo);
Expand Down Expand Up @@ -162,10 +171,12 @@ public Response deleteDatastreams(@PathParam("path")
try {
final String path = toPath(pathList);
for (final String dsid : dsidList) {
logger.debug("purging datastream {}", path + "/" + dsid);
nodeService.deleteObject(session, path + "/" + dsid);
String dsPath = path + "/" + dsid;
logger.debug("purging datastream {}", dsPath);
nodeService.deleteObject(session, dsPath);
}
session.save();
versionService.checkpoint(session, path);
return noContent().build();
} finally {
session.logout();
Expand Down
Expand Up @@ -266,7 +266,6 @@ public Response updateSparql(@PathParam("path")
try {

if (requestBodyStream != null) {

final FedoraResource resource =
nodeService.getObject(session, path);

Expand Down Expand Up @@ -302,6 +301,7 @@ public Response updateSparql(@PathParam("path")
}

session.save();
versionService.checkpoint(session, path);

return status(SC_NO_CONTENT).build();
} else {
Expand Down Expand Up @@ -338,7 +338,6 @@ public Response createOrReplaceObjectRdf(
try {
final FedoraResource resource =
nodeService.getObject(session, path);

final Date date = resource.getLastModifiedDate();
final Date roundedDate = new Date();

Expand Down Expand Up @@ -373,6 +372,7 @@ public Response createOrReplaceObjectRdf(
}

session.save();
versionService.checkpoint(session, path);

return status(SC_NO_CONTENT).build();
} finally {
Expand Down Expand Up @@ -509,6 +509,7 @@ public Response createObject(@PathParam("path")
}

session.save();
versionService.checkpoint(session, newObjectPath);

logger.debug("Finished creating {} with path: {}", mixin, newObjectPath);

Expand Down Expand Up @@ -601,6 +602,7 @@ public Response copyObject(@PathParam("path") final List<PathSegment> path,

nodeService.copyObject(session, toPath(path), destination);
session.save();
versionService.checkpoint(session, destination);
return created(new URI(destinationUri)).build();
} catch (final ItemExistsException e) {
return status(SC_PRECONDITION_FAILED).entity("Destination resource already exists").build();
Expand Down Expand Up @@ -641,6 +643,7 @@ public Response moveObject(@PathParam("path") final List<PathSegment> path,

nodeService.moveObject(session, toPath(path), destination);
session.save();
versionService.checkpoint(session, destination);
return created(new URI(destinationUri)).build();
} catch (final ItemExistsException e) {
return status(SC_PRECONDITION_FAILED).entity("Destination resource already exists").build();
Expand Down
Expand Up @@ -44,6 +44,8 @@
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Workspace;
import javax.jcr.version.VersionManager;
import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
Expand All @@ -54,6 +56,7 @@
import org.fcrepo.kernel.identifiers.PidMinter;
import org.fcrepo.kernel.services.DatastreamService;
import org.fcrepo.kernel.services.NodeService;
import org.fcrepo.kernel.services.VersionService;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
Expand All @@ -68,6 +71,9 @@ public class FedoraContentTest {
@Mock
private NodeService mockNodeService;

@Mock
private VersionService mockVersions;

@Mock
private Session mockSession;

Expand All @@ -87,8 +93,14 @@ public void setUp() throws Exception {
setField(testObj, "datastreamService", mockDatastreams);
setField(testObj, "nodeService", mockNodeService);
setField(testObj, "uriInfo", getUriInfoImpl());
setField(testObj, "versionService", mockVersions);
mockSession = mockSession(testObj);
setField(testObj, "session", mockSession);
final Workspace mockWorkspace = mock(Workspace.class);
when(mockWorkspace.getName()).thenReturn("default");
when(mockSession.getWorkspace()).thenReturn(mockWorkspace);
final VersionManager mockVM = mock(VersionManager.class);
when(mockWorkspace.getVersionManager()).thenReturn(mockVM);
}

@Test
Expand Down
Expand Up @@ -33,6 +33,7 @@
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.mock;
import static org.mockito.MockitoAnnotations.initMocks;

import java.io.IOException;
Expand All @@ -49,6 +50,8 @@
import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Workspace;
import javax.jcr.version.VersionManager;
import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
Expand All @@ -59,6 +62,8 @@
import org.fcrepo.kernel.exception.InvalidChecksumException;
import org.fcrepo.kernel.services.DatastreamService;
import org.fcrepo.kernel.services.NodeService;
import org.fcrepo.kernel.services.VersionService;

import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
Expand All @@ -78,6 +83,9 @@ public class FedoraDatastreamsTest {
@Mock
private NodeService mockNodes;

@Mock
private VersionService mockVersions;

@Mock
private Node mockDsNode;

Expand All @@ -102,8 +110,14 @@ public void setUp() throws Exception {
setField(testObj, "datastreamService", mockDatastreams);
setField(testObj, "nodeService", mockNodes);
setField(testObj, "uriInfo", getUriInfoImpl());
setField(testObj, "versionService", mockVersions);
mockSession = mockSession(testObj);
setField(testObj, "session", mockSession);
final Workspace mockWorkspace = mock(Workspace.class);
when(mockWorkspace.getName()).thenReturn("default");
when(mockSession.getWorkspace()).thenReturn(mockWorkspace);
final VersionManager mockVM = mock(VersionManager.class);
when(mockWorkspace.getVersionManager()).thenReturn(mockVM);
}

@Test
Expand Down
Expand Up @@ -55,6 +55,8 @@
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.ValueFactory;
import javax.jcr.Workspace;
import javax.jcr.version.VersionManager;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
Expand All @@ -70,6 +72,7 @@
import org.fcrepo.kernel.services.DatastreamService;
import org.fcrepo.kernel.services.NodeService;
import org.fcrepo.kernel.services.ObjectService;
import org.fcrepo.kernel.services.VersionService;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
Expand All @@ -79,6 +82,7 @@
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.sparql.util.Context;


public class FedoraNodesTest {

FedoraNodes testObj;
Expand All @@ -89,6 +93,9 @@ public class FedoraNodesTest {
@Mock
private NodeService mockNodes;

@Mock
private VersionService mockVersions;

@Mock
private Node mockNode;

Expand Down Expand Up @@ -129,12 +136,18 @@ public void setUp() throws Exception {
testObj = new FedoraNodes();
setField(testObj, "datastreamService", mockDatastreams);
setField(testObj, "nodeService", mockNodes);
setField(testObj, "versionService", mockVersions);
this.uriInfo = getUriInfoImpl();
setField(testObj, "uriInfo", uriInfo);
setField(testObj, "pidMinter", mockPidMinter);
setField(testObj, "objectService", mockObjects);
mockSession = mockSession(testObj);
setField(testObj, "session", mockSession);
final Workspace mockWorkspace = mock(Workspace.class);
when(mockWorkspace.getName()).thenReturn("default");
when(mockSession.getWorkspace()).thenReturn(mockWorkspace);
final VersionManager mockVM = mock(VersionManager.class);
when(mockWorkspace.getVersionManager()).thenReturn(mockVM);
}

@Test
Expand Down
Expand Up @@ -52,6 +52,7 @@
import org.fcrepo.kernel.services.DatastreamService;
import org.fcrepo.kernel.services.NodeService;
import org.fcrepo.kernel.services.ObjectService;
import org.fcrepo.kernel.services.VersionService;
import org.modeshape.jcr.api.JcrTools;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -96,6 +97,12 @@ public abstract class AbstractResource {
@Autowired
protected DatastreamService datastreamService;

/**
* The fcrepo version service
*/
@Autowired
protected VersionService versionService;

@Autowired(required = false)
private HttpTripleUtil httpTripleUtil;

Expand Down

0 comments on commit ece5e32

Please sign in to comment.