Skip to content

Commit

Permalink
Replaced some Freemarker usage with JAXB
Browse files Browse the repository at this point in the history
  • Loading branch information
ajs6f committed Feb 5, 2013
1 parent abfc2cd commit f6e84b1
Show file tree
Hide file tree
Showing 13 changed files with 267 additions and 169 deletions.
187 changes: 92 additions & 95 deletions pom.xml
Expand Up @@ -48,19 +48,19 @@
<artifactId>modeshape-jcr</artifactId>
</dependency>

<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-core</artifactId>
<version>5.2.0.Final</version>
</dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-core</artifactId>
<version>5.2.0.Final</version>
</dependency>

<dependency>
<groupId>org.jgroups</groupId>
<artifactId>jgroups</artifactId>
<version>3.2.6.Final</version>
</dependency>
<dependency>
<groupId>org.jgroups</groupId>
<artifactId>jgroups</artifactId>
<version>3.2.6.Final</version>
</dependency>

<dependency>
<dependency>
<groupId>org.modeshape</groupId>
<artifactId>modeshape-jcr-api</artifactId>
</dependency>
Expand Down Expand Up @@ -127,78 +127,78 @@
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-spring</artifactId>
<version>${activemq.version}</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-spring</artifactId>
<version>${activemq.version}</version>
</dependency>

<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>3.9</version>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>3.9</version>
</dependency>

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>13.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.abdera</groupId>
<artifactId>abdera-parser</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>13.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.abdera</groupId>
<artifactId>abdera-parser</artifactId>
<version>1.1.3</version>
</dependency>
</dependencies>

<build>
<pluginManagement>
<!--This plugin's configuration is used to store Eclipse m2e settings only.
It has no influence on the Maven build itself. -->
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<versionRange>[2.1,)</versionRange>
<goals>
<goal>copy</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<versionRange>[2.15.2,)</versionRange>
<goals>
<goal>add-source</goal>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<pluginManagement>
<!--This plugin's configuration is used to store Eclipse m2e settings
only. It has no influence on the Maven build itself. -->
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<versionRange>[2.1,)</versionRange>
<goals>
<goal>copy</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<versionRange>[2.15.2,)</versionRange>
<goals>
<goal>add-source</goal>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
Expand Down Expand Up @@ -300,26 +300,23 @@
</webApp>
</configuration>
</plugin>
<!--
<plugin>
<groupId>org.codehaus.enunciate</groupId>
<artifactId>maven-enunciate-plugin</artifactId>
<plugin>
<groupId>org.codehaus.enunciate</groupId>
<artifactId>maven-enunciate-plugin</artifactId>
<!-- check for the latest version -->
<version>1.26</version>
<executions>
<execution>
<goals>
<goal>docs</goal>
</goals>
<configuration>

<!-- the directory where to put the docs -->
<docsDir>${project.build.directory}/docs</docsDir>

</configuration>
</execution>
</executions>
</plugin>
<version>1.26</version>
<executions>
<execution>
<goals>
<goal>docs</goal>
</goals>
<configuration>
<docsDir>${project.build.directory}/docs</docsDir>
</configuration>
</execution>
</executions>
</plugin>-->
</plugins>
</build>

Expand Down
8 changes: 8 additions & 0 deletions src/main/java/org/fcrepo/modeshape/AbstractResource.java
Expand Up @@ -14,7 +14,9 @@
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Workspace;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

import org.codehaus.jackson.map.ObjectMapper;
import org.fcrepo.modeshape.identifiers.PidMinter;
Expand All @@ -39,6 +41,12 @@ public abstract class AbstractResource extends Constants {

final private Logger logger = LoggerFactory
.getLogger(AbstractResource.class);

/**
* Useful for constructing URLs
*/
@Context
UriInfo uriInfo;

/**
* Jackson JSON mapper. Should eventually be replaced by the use of proper
Expand Down
73 changes: 47 additions & 26 deletions src/main/java/org/fcrepo/modeshape/FedoraDatastreams.java
@@ -1,13 +1,18 @@
package org.fcrepo.modeshape;

import static com.google.common.collect.ImmutableMap.builder;
import static com.google.common.collect.ImmutableSet.copyOf;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static javax.ws.rs.core.MediaType.TEXT_XML;
import static org.modeshape.jcr.api.JcrConstants.JCR_CONTENT;
import static org.modeshape.jcr.api.JcrConstants.JCR_DATA;

import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.util.Calendar;

import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.RepositoryException;
Expand All @@ -20,9 +25,15 @@
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;
import org.modeshape.jcr.api.Binary;
import org.modeshape.jcr.api.JcrConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -49,22 +60,31 @@ public class FedoraDatastreams extends AbstractResource {
* @throws IOException
* @throws TemplateException
*/
@SuppressWarnings("unchecked")

@GET
@Path("/")
@Produces("text/xml")
@Produces({ TEXT_XML, APPLICATION_JSON })
public Response getDatastreams(@PathParam("pid") final String pid)
throws RepositoryException, IOException, TemplateException {

final Session session = repo.login();

if (session.nodeExists("/" + pid)) {
final ImmutableSet<Node> datastreams = copyOf(session.getNode(
"/" + pid).getNodes());
final InputStream content = renderTemplate("listDatastreams.ftl",
ImmutableMap.of("datastreams", datastreams));
final ObjectDatastreams objectDatastreams = new ObjectDatastreams();
final ImmutableSet.Builder<Datastream> datastreams = ImmutableSet
.builder();

NodeIterator i = session.getNode("/" + pid).getNodes();
while (i.hasNext()) {
final Node ds = i.nextNode();
final Binary content = (Binary) ds.getNode(JCR_CONTENT)
.getProperty(JCR_DATA).getBinary();
datastreams.add(new Datastream(ds.getName(), ds.getName(),
content.getMimeType()));
}
objectDatastreams.datastreams = datastreams.build();
session.logout();
return Response.ok().entity(content).build();
return Response.ok().entity(objectDatastreams).build();
} else {
session.logout();
return four04;
Expand Down Expand Up @@ -100,30 +120,31 @@ public Response addDatastream(@PathParam("pid") final String pid,
String dspath = "/" + pid + "/" + dsid;

if (!session.nodeExists("/" + pid)) {
logger.debug("This bozo tried to create a datastream for an object that doesn't exist, at resource path: "
logger.debug("Tried to create a datastream for an object that doesn't exist, at resource path: "
+ dspath);
return Response.notAcceptable(null).build();
}

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

} else
} else {
session.logout();
return four01;
return four01;
}
}
} else {
session.logout();
Expand Down Expand Up @@ -172,17 +193,17 @@ public Response modifyDatastream(@PathParam("pid") final String pid,
}
}

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

logger.debug("Attempting to add datastream node at path: " + dspath);
logger.debug("Attempting to add datastream node at path: " + dsPath);
Boolean created = false;
if (!session.nodeExists(dspath)) {
if (!session.nodeExists(dsPath)) {
created = true;
}

final Node ds = jcrTools.findOrCreateNode(session, dspath,
final Node ds = jcrTools.findOrCreateNode(session, dsPath,
JcrConstants.NT_FILE);
ds.addMixin("fedora:datastream");
final Node contentNode = jcrTools.findOrCreateChild(ds,
Expand Down Expand Up @@ -219,12 +240,12 @@ private Node addDatastreamNode(final String dspath,
ds.setProperty("fedora:created", Calendar.getInstance());
}
ds.setProperty("jcr:lastModified", Calendar.getInstance());

final String dsId = ds.getName();
session.save();
session.logout();
logger.debug("Finished adding datastream node at path: " + dspath);
logger.debug("Finished adding datastream node at path: " + dsPath);

return ds;
return dsId;
}

/**
Expand Down

0 comments on commit f6e84b1

Please sign in to comment.