org.modeshape.web.jcr.rest
Class ItemsResource

java.lang.Object
  extended by org.modeshape.web.jcr.rest.AbstractJcrResource
      extended by org.modeshape.web.jcr.rest.ItemsResource

@Immutable
public class ItemsResource
extends AbstractJcrResource

RESTEasy handler to provide the JCR resources at the URIs below. Please note that these URIs assume a context of /resources for the web application.

URI Pattern Description Supported Methods
/resources/{repositoryName}/{workspaceName}/item/{path} accesses the item (node or property) at the path ALL

Binary data

There are several ways to transfer binary property values, but all involve encoding the binary value into ASCII characters using a Base64 notation and denoting this by adding annotating the property name with a suffix defining the type of encoding. Currently, only "base64" encoding is supported.

For example, if the "jcr:data" property contains a single binary value of "propertyValue", then the JSON object representing that property will be:

   "jcr:data/base64/" : "cHJvcGVydHlWYWx1ZQ=="
 
Likewise, if the "jcr:data" property contains two binary values each being "propertyValue", then the JSON object representing that property will be:
   "jcr:data/base64/" : [ "cHJvcGVydHlWYWx1ZQ==", "cHJvcGVydHlWYWx1ZQ==" ]
 
Note that JCR 1.0.1 does not allow property names to and with a '/' character (among others), while JCR 2.0 does not allow property names to contain an unescaped or unencoded '/' character. Therefore, the "/{encoding}/" suffix can never appear in a valid JCR property name, and will always identify an encoded property.

Here are the details:


Field Summary
 
Fields inherited from class org.modeshape.web.jcr.rest.AbstractJcrResource
EMPTY_REPOSITORY_NAME, EMPTY_WORKSPACE_NAME, URL_ENCODER
 
Constructor Summary
ItemsResource()
           
 
Method Summary
 void deleteItem(HttpServletRequest request, String rawRepositoryName, String rawWorkspaceName, String path)
          Deletes the item at path.
 String getItem(HttpServletRequest request, String rawRepositoryName, String rawWorkspaceName, String path, int depth)
          Handles GET requests for an item in a workspace.
 javax.ws.rs.core.Response postItem(HttpServletRequest request, String rawRepositoryName, String rawWorkspaceName, String path, String requestContent)
          Adds the content of the request as a node (or subtree of nodes) at the location specified by path.
 String putItem(HttpServletRequest request, String rawRepositoryName, String rawWorkspaceName, String path, String requestContent)
          Updates the properties at the path.
 
Methods inherited from class org.modeshape.web.jcr.rest.AbstractJcrResource
getSession
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ItemsResource

public ItemsResource()
Method Detail

getItem

public String getItem(@Context
                      HttpServletRequest request,
                      String rawRepositoryName,
                      String rawWorkspaceName,
                      String path,
                      int depth)
               throws org.codehaus.jettison.json.JSONException,
                      org.jboss.resteasy.spi.UnauthorizedException,
                      javax.jcr.RepositoryException
Handles GET requests for an item in a workspace.

Parameters:
request - the servlet request; may not be null or unauthenticated
rawRepositoryName - the URL-encoded repository name
rawWorkspaceName - the URL-encoded workspace name
path - the path to the item
depth - the depth of the node graph that should be returned if path refers to a node. @{code 0} means return the requested node only. A negative value indicates that the full subgraph under the node should be returned. This parameter defaults to 0 and is ignored if path refers to a property.
Returns:
the JSON-encoded version of the item (and, if the item is a node, its subgraph, depending on the value of depth)
Throws:
org.jboss.resteasy.spi.NotFoundException - if the named repository does not exists, the named workspace does not exist, or the user does not have access to the named workspace
org.codehaus.jettison.json.JSONException - if there is an error encoding the node
org.jboss.resteasy.spi.UnauthorizedException - if the given login information is invalid
javax.jcr.RepositoryException - if any other error occurs
See Also:
AbstractJcrResource.EMPTY_REPOSITORY_NAME, AbstractJcrResource.EMPTY_WORKSPACE_NAME, Session.getItem(String)

postItem

public javax.ws.rs.core.Response postItem(@Context
                                          HttpServletRequest request,
                                          String rawRepositoryName,
                                          String rawWorkspaceName,
                                          String path,
                                          String requestContent)
                                   throws org.jboss.resteasy.spi.NotFoundException,
                                          org.jboss.resteasy.spi.UnauthorizedException,
                                          javax.jcr.RepositoryException,
                                          org.codehaus.jettison.json.JSONException
Adds the content of the request as a node (or subtree of nodes) at the location specified by path.

The primary type and mixin type(s) may optionally be specified through the jcr:primaryType and jcr:mixinTypes properties.

Parameters:
request - the servlet request; may not be null or unauthenticated
rawRepositoryName - the URL-encoded repository name
rawWorkspaceName - the URL-encoded workspace name
path - the path to the item
requestContent - the JSON-encoded representation of the node or nodes to be added
Returns:
the JSON-encoded representation of the node or nodes that were added. This will differ from requestContent in that auto-created and protected properties (e.g., jcr:uuid) will be populated.
Throws:
org.jboss.resteasy.spi.NotFoundException - if the parent of the item to be added does not exist
org.jboss.resteasy.spi.UnauthorizedException - if the user does not have the access required to create the node at this path
org.codehaus.jettison.json.JSONException - if there is an error encoding the node
javax.jcr.RepositoryException - if any other error occurs

deleteItem

public void deleteItem(@Context
                       HttpServletRequest request,
                       String rawRepositoryName,
                       String rawWorkspaceName,
                       String path)
                throws org.jboss.resteasy.spi.NotFoundException,
                       org.jboss.resteasy.spi.UnauthorizedException,
                       javax.jcr.RepositoryException
Deletes the item at path.

Parameters:
request - the servlet request; may not be null or unauthenticated
rawRepositoryName - the URL-encoded repository name
rawWorkspaceName - the URL-encoded workspace name
path - the path to the item
Throws:
org.jboss.resteasy.spi.NotFoundException - if no item exists at path
org.jboss.resteasy.spi.UnauthorizedException - if the user does not have the access required to delete the item at this path
javax.jcr.RepositoryException - if any other error occurs

putItem

public String putItem(@Context
                      HttpServletRequest request,
                      String rawRepositoryName,
                      String rawWorkspaceName,
                      String path,
                      String requestContent)
               throws org.jboss.resteasy.spi.UnauthorizedException,
                      org.codehaus.jettison.json.JSONException,
                      javax.jcr.RepositoryException,
                      IOException
Updates the properties at the path.

If path points to a property, this method expects the request content to be either a JSON array or a JSON string. The array or string will become the values or value of the property. If path points to a node, this method expects the request content to be a JSON object. The keys of the objects correspond to property names that will be set and the values for the keys correspond to the values that will be set on the properties.

Parameters:
request - the servlet request; may not be null or unauthenticated
rawRepositoryName - the URL-encoded repository name
rawWorkspaceName - the URL-encoded workspace name
path - the path to the item
requestContent - the JSON-encoded representation of the values and, possibly, properties to be set
Returns:
the JSON-encoded representation of the node on which the property or properties were set.
Throws:
org.jboss.resteasy.spi.NotFoundException - if the parent of the item to be added does not exist
org.jboss.resteasy.spi.UnauthorizedException - if the user does not have the access required to create the node at this path
org.codehaus.jettison.json.JSONException - if there is an error encoding the node
javax.jcr.RepositoryException - if any other error occurs
IOException - if there is a problem reading the value


Copyright © 2008-2010 JBoss, a division of Red Hat. All Rights Reserved.