Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2009 eXo Platform SAS.
   *
   * This is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation; either version 2.1 of
   * the License, or (at your option) any later version.
   *
   * This software is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 package org.exoplatform.services.jcr.ext.registry;
 
 
 import java.net.URI;
 
 import javax.jcr.Node;

Author(s):
Andrey Parfonov
Version:
$Id: $
 
 @Path("/registry/")
 public class RESTRegistryService implements ResourceContainer
 {

   
Logger.
 
    private static final Log LOG = ExoLogger.getLogger("exo.jcr.component.ext.RESTRegistryService");

   
 
    private static final String REGISTRY = "registry";
 
    private static final String EXO_REGISTRY = "exo:registry/";

   
 
    private RegistryService regService;

   
 
 
    public RESTRegistryService(RegistryService regServiceThreadLocalSessionProviderService sessionProviderService)
       throws Exception
    {
 
       this. = regService;
       this. = sessionProviderService;
    }
 
    @GET
   public Response getRegistry(@Context UriInfo uriInfo)
   {
      SessionProvider sessionProvider = .getSessionProvider(null);
      try
      {
         RegistryNode registryEntry = .getRegistry(sessionProvider);
         if (registryEntry != null)
         {
            Node registryNode = registryEntry.getNode();
            NodeIterator registryIterator = registryNode.getNodes();
            Document entry = SecurityHelper.doPrivilegedExceptionAction(new PrivilegedExceptionAction<Document>()
            {
               public Document run() throws Exception
               {
                  return DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
               }
            });
            String fullURI = uriInfo.getRequestUri().toString();
            XlinkHref xlinkHref = new XlinkHref(fullURI);
            Element root = entry.createElement();
            xlinkHref.putToElement(root);
            while (registryIterator.hasNext())
            {
               NodeIterator entryIterator = registryIterator.nextNode().getNodes();
               while (entryIterator.hasNext())
               {
                  Node node = entryIterator.nextNode();
                  Element xmlNode = entry.createElement(node.getName());
                  xlinkHref.putToElement(xmlNodenode.getPath().substring(.length()));
                  root.appendChild(xmlNode);
               }
            }
            entry.appendChild(root);
            return Response.ok(new DOMSource(entry), "text/xml").build();
         }
         return Response.status(..).build();
      }
      catch (Exception e)
      {
         .error("Get registry failed"e);
         throw new WebApplicationException(e);
      }
   }
   @GET
   @Path("/{entryPath:.+}")
   public Response getEntry(@PathParam("entryPath"String entryPath)
   {
      SessionProvider sessionProvider = .getSessionProvider(null);
      try
      {
         RegistryEntry entry;
         entry = .getEntry(sessionProvidernormalizePath(entryPath));
         return Response.ok(new DOMSource(entry.getDocument())).build();
      }
      catch (PathNotFoundException e)
      {
         return Response.status(..).build();
      }
      catch (RepositoryException e)
      {
         .error("Get registry entry failed"e);
         throw new WebApplicationException(e);
      }
   }
   @POST
   @Path("/{groupName:.+}")
   public Response createEntry(InputStream entryStream, @PathParam("groupName"String groupName, @Context UriInfo uriInfo)
   {
      SessionProvider sessionProvider = .getSessionProvider(null);
      try
      {
         RegistryEntry entry = RegistryEntry.parse(entryStream);
         .createEntry(sessionProvidernormalizePath(groupName), entry);
         URI location = uriInfo.getRequestUriBuilder().path(entry.getName()).build();
         return Response.created(location).build();
      }
      catch (IllegalArgumentException e)
      {
         .error("Create registry entry failed"e);
         throw new WebApplicationException(e);
      }
      catch (IOException e)
      {
         .error("Create registry entry failed"e);
         throw new WebApplicationException(e);
      }
      catch (SAXException e)
      {
         .error("Create registry entry failed"e);
         throw new WebApplicationException(e);
      }
      catch (ParserConfigurationException e)
      {
         .error("Create registry entry failed"e);
         throw new WebApplicationException(e);
      }
      catch (RepositoryException e)
      {
         .error("Create registry entry failed"e);
         throw new WebApplicationException(e);
      }
   }
   @PUT
   @Path("/{groupName:.+}")
   public Response recreateEntry(InputStream entryStream, @PathParam("groupName"String groupName,
            @Context UriInfo uriInfo, @QueryParam("createIfNotExist"boolean createIfNotExist)
   {
      SessionProvider sessionProvider = .getSessionProvider(null);
      try
      {
         RegistryEntry entry = RegistryEntry.parse(entryStream);
         if (createIfNotExist)
         {
            .updateEntry(sessionProvidernormalizePath(groupName), entry);
         }
         else
         {
            .recreateEntry(sessionProvidernormalizePath(groupName), entry);
         }
         URI location = uriInfo.getRequestUriBuilder().path(entry.getName()).build();
         return Response.created(location).build();
      }
      catch (IllegalArgumentException e)
      {
         .error("Re-create registry entry failed"e);
         throw new WebApplicationException(e);
      }
      catch (IOException e)
      {
         .error("Re-create registry entry failed"e);
         throw new WebApplicationException(e);
      }
      catch (SAXException e)
      {
         .error("Re-create registry entry failed"e);
         throw new WebApplicationException(e);
      }
      catch (ParserConfigurationException e)
      {
         .error("Re-create registry entry failed"e);
         throw new WebApplicationException(e);
      }
      catch (RepositoryException e)
      {
         .error("Re-create registry entry failed"e);
         throw new WebApplicationException(e);
      }
   }
   @DELETE
   @Path("/{entryPath:.+}")
   public Response removeEntry(@PathParam("entryPath"String entryPath)
   {
      SessionProvider sessionProvider = .getSessionProvider(null);
      try
      {
         .removeEntry(sessionProvidernormalizePath(entryPath));
         return null// minds status 204 'No content'
      }
      catch (PathNotFoundException e)
      {
         return Response.status(..).build();
      }
      catch (Exception e)
      {
         .error("Remove registry entry failed"e);
         throw new WebApplicationException(e);
      }
   }
   private static String normalizePath(String path)
   {
      if (path.endsWith("/"))
         return path.substring(0, path.length() - 1);
      return path;
   }
New to GrepCode? Check out our FAQ X