Skip to content

Commit

Permalink
Even more JAXB goodness
Browse files Browse the repository at this point in the history
  • Loading branch information
ajs6f committed Feb 5, 2013
1 parent f6e84b1 commit 2bd5b0e
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 31 deletions.
28 changes: 10 additions & 18 deletions src/main/java/org/fcrepo/modeshape/FedoraDatastreams.java
Expand Up @@ -25,11 +25,9 @@
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;

import org.fcrepo.modeshape.jaxb.responses.ObjectDatastreams;
import org.fcrepo.modeshape.jaxb.responses.ObjectDatastreams.Datastream;
Expand Down Expand Up @@ -127,19 +125,16 @@ public Response addDatastream(@PathParam("pid") final String pid,

if (session.hasPermission(dspath, "add_node")) {
if (!session.nodeExists(dspath)) {
final UriBuilder ub = uriInfo.getAbsolutePathBuilder();
return Response.created(
ub.path(addDatastreamNode(dspath, contentType,
requestBodyStream, session)).build()).build();
addDatastreamNode(dspath, contentType,
requestBodyStream, session)).build();
} else {
if (session.hasPermission(dspath, "remove")) {
session.getNode(dspath).remove();
session.save();
final UriBuilder ub = uriInfo.getAbsolutePathBuilder();
return Response.created(
ub.path(addDatastreamNode(dspath, contentType,
requestBodyStream, session)).build())
.build();
addDatastreamNode(dspath, contentType,
requestBodyStream, session)).build();

} else {
session.logout();
Expand Down Expand Up @@ -181,19 +176,16 @@ public Response modifyDatastream(@PathParam("pid") final String pid,
String dspath = "/" + pid + "/" + dsid;

if (session.hasPermission(dspath, "add_node")) {

return Response
.status(Response.Status.CREATED)
.entity(addDatastreamNode(dspath, contentType,
requestBodyStream, session).toString()).build();

return Response.created(
addDatastreamNode(dspath, contentType, requestBodyStream,
session)).build();
} else {
session.logout();
return four01;
}
}

private String addDatastreamNode(final String dsPath,
private URI addDatastreamNode(final String dsPath,
final MediaType contentType, final InputStream requestBodyStream,
final Session session) throws RepositoryException, IOException {

Expand Down Expand Up @@ -244,8 +236,8 @@ private String addDatastreamNode(final String dsPath,
session.save();
session.logout();
logger.debug("Finished adding datastream node at path: " + dsPath);

return dsId;
final UriBuilder ub = uriInfo.getAbsolutePathBuilder();
return ub.path(dsId).build();
}

/**
Expand Down
17 changes: 6 additions & 11 deletions src/main/java/org/fcrepo/modeshape/FedoraIdentifiers.java
Expand Up @@ -13,19 +13,18 @@
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;

import org.fcrepo.modeshape.jaxb.responses.NextPid;

import com.google.common.base.Function;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;

import freemarker.template.TemplateException;

/**
* JAX-RS Resource offering PID creation.
*
* @author ajs6f
*
*
*/
@Path("nextPID")
public class FedoraIdentifiers extends AbstractResource {
Expand All @@ -39,17 +38,13 @@ public class FedoraIdentifiers extends AbstractResource {
*/
@POST
@Produces("text/xml")
public Response getNextPid(
public NextPid getNextPid(
@QueryParam("numPids") @DefaultValue("1") Integer numPids)
throws RepositoryException, IOException, TemplateException {

ImmutableSet<String> pids = copyOf(transform(
closed(1, numPids).asSet(integers()), makePid));
return new NextPid(copyOf(transform(closed(1, numPids)
.asSet(integers()), makePid)));

return Response
.ok()
.entity(renderTemplate("nextPid.ftl",
ImmutableMap.of("pids", (Object) pids))).build();
}

private Function<Integer, String> makePid = new Function<Integer, String>() {
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/org/fcrepo/modeshape/FedoraObjects.java
Expand Up @@ -70,7 +70,8 @@ public Response ingest(@PathParam("pid") final String pid)
session.save();
session.logout();
logger.debug("Finished ingest with pid: " + pid);
return Response.status(Response.Status.CREATED).entity(pid).build();
final UriBuilder ub = uriInfo.getAbsolutePathBuilder();
return Response.created(ub.path(pid).build()).build();
} else {
session.logout();
return four01;
Expand Down
21 changes: 21 additions & 0 deletions src/main/java/org/fcrepo/modeshape/jaxb/responses/NextPid.java
@@ -0,0 +1,21 @@
package org.fcrepo.modeshape.jaxb.responses;

import java.util.Set;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "pids", namespace = "")
public class NextPid {

@XmlElement(name = "pid")
Set<String> pids;

public NextPid(Set<String> pids) {
this.pids = pids;
}

public NextPid() {
}

}
Expand Up @@ -30,7 +30,6 @@ public Datastream(String dsid, String label, String mimeType) {
public String mimeType;

public Datastream() {
super();
}
}
}

0 comments on commit 2bd5b0e

Please sign in to comment.