Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Update fcr:fixity to produce asynchronous responses
  • Loading branch information
cbeer committed Oct 31, 2014
1 parent d55d2fd commit 25f6722
Show file tree
Hide file tree
Showing 3 changed files with 121 additions and 8 deletions.
Expand Up @@ -34,6 +34,8 @@
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.container.AsyncResponse;
import javax.ws.rs.container.Suspended;

import com.google.common.annotations.VisibleForTesting;
import org.fcrepo.http.commons.responses.HtmlTemplate;
Expand Down Expand Up @@ -80,23 +82,32 @@ public FedoraFixity(final String externalPath) {
*
* GET /path/to/some/datastream/fcr:fixity
*
* @return datastream fixity in the given format
*/
@GET
@Timed
@HtmlTemplate(value = "fcr:fixity")
@Produces({TURTLE + ";qs=10", JSON_LD + ";qs=8",
N3, N3_ALT2, RDF_XML, NTRIPLES, APPLICATION_XML, TEXT_PLAIN, TURTLE_X,
TEXT_HTML, APPLICATION_XHTML_XML, "*/*"})
public RdfStream getDatastreamFixity() {
public void getDatastreamFixity(@Suspended final AsyncResponse asyncResponse) {

if (!(resource() instanceof FedoraBinary)) {
throw new NotFoundException(resource() + " is not a binary");
}

return ((FedoraBinary)resource()).getFixity(translator())
.topic(translator().reverse().convert(resource()).asNode())
.session(session);
new Thread(new Runnable() {
@Override
public void run() {
final RdfStream result = getFixityStream();
asyncResponse.resume(result);
}

private RdfStream getFixityStream() {
return ((FedoraBinary)resource()).getFixity(translator())
.topic(translator().reverse().convert(resource()).asNode())
.session(session);
}
}).start();

}

Expand Down
Expand Up @@ -28,6 +28,8 @@
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.ws.rs.container.AsyncResponse;
import javax.ws.rs.container.TimeoutHandler;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriInfo;

Expand All @@ -38,6 +40,11 @@
import org.junit.Test;
import org.mockito.Mock;

import java.util.Collection;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
* <p>FedoraFixityTest class.</p>
*
Expand Down Expand Up @@ -76,13 +83,102 @@ public void setUp() throws RepositoryException {
}

@Test
public void testGetDatastreamFixity() throws RepositoryException {
public void testGetDatastreamFixity() throws RepositoryException, InterruptedException {
final RdfStream expected = new RdfStream();

when(mockBinary.getFixity(any(IdentifierConverter.class))).thenReturn(expected);

final RdfStream actual = testObj.getDatastreamFixity();
final TestAsyncResponse asyncResponse = new TestAsyncResponse();


synchronized (asyncResponse) {
testObj.getDatastreamFixity(asyncResponse);
asyncResponse.wait(1000);
}

assertEquals(expected, asyncResponse.getResponse());
}


assertEquals(expected, actual);
private class TestAsyncResponse implements AsyncResponse {
private Object response;

public Object getResponse() {
return response;
}

@Override
public boolean resume(final Object o) {
synchronized (this) {
this.response = o;
notify();
}
return true;
}

@Override
public boolean resume(final Throwable throwable) {
return false;
}

@Override
public boolean cancel() {
return false;
}

@Override
public boolean cancel(final int i) {
return false;
}

@Override
public boolean cancel(final Date date) {
return false;
}

@Override
public boolean isSuspended() {
return false;
}

@Override
public boolean isCancelled() {
return false;
}

@Override
public boolean isDone() {
return false;
}

@Override
public boolean setTimeout(final long l, final TimeUnit timeUnit) {
return false;
}

@Override
public void setTimeoutHandler(final TimeoutHandler timeoutHandler) {

}

@Override
public Collection<Class<?>> register(final Class<?> aClass) {
return null;
}

@Override
public Map<Class<?>, Collection<Class<?>>> register(final Class<?> aClass, final Class<?>... classes) {
return null;
}

@Override
public Collection<Class<?>> register(final Object o) {
return null;
}

@Override
public Map<Class<?>, Collection<Class<?>>> register(final Object o, final Object... objects) {
return null;
}
}
}
6 changes: 6 additions & 0 deletions fcrepo-webapp/pom.xml
Expand Up @@ -118,6 +118,12 @@
<artifactId>jersey-spring3</artifactId>
<version>${jersey.version}</version>
</dependency>

<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Expand Down

0 comments on commit 25f6722

Please sign in to comment.