Author: vparfonov
Date: 2009-11-12 10:46:07 -0500 (Thu, 12 Nov 2009)
New Revision: 608
Modified:
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/registry/RESTRegistryService.java
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/registry/RegistryService.java
Log:
EXOJCR-233 : if you need update RegitryEnter and create it if it's not exist just add
QueryParam createIfNotExist=true
Modified:
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/registry/RESTRegistryService.java
===================================================================
---
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/registry/RESTRegistryService.java 2009-11-12
15:43:12 UTC (rev 607)
+++
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/registry/RESTRegistryService.java 2009-11-12
15:46:07 UTC (rev 608)
@@ -18,16 +18,6 @@
*/
package org.exoplatform.services.jcr.ext.registry;
-import org.exoplatform.services.jcr.ext.app.ThreadLocalSessionProviderService;
-import org.exoplatform.services.jcr.ext.common.SessionProvider;
-import org.exoplatform.services.jcr.ext.registry.Registry.RegistryNode;
-import org.exoplatform.services.log.ExoLogger;
-import org.exoplatform.services.log.Log;
-import org.exoplatform.services.rest.ext.util.XlinkHref;
-import org.exoplatform.services.rest.resource.ResourceContainer;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
import java.io.InputStream;
import java.net.URI;
@@ -42,6 +32,7 @@
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
@@ -50,6 +41,16 @@
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.dom.DOMSource;
+import org.exoplatform.services.jcr.ext.app.ThreadLocalSessionProviderService;
+import org.exoplatform.services.jcr.ext.common.SessionProvider;
+import org.exoplatform.services.jcr.ext.registry.Registry.RegistryNode;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+import org.exoplatform.services.rest.ext.util.XlinkHref;
+import org.exoplatform.services.rest.resource.ResourceContainer;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
/**
* @author <a href="mailto:andrew00x@gmail.com">Andrey
Parfonov</a>
* @version $Id: $
@@ -181,7 +182,7 @@
@Path("/{groupName:.+}/")
@Consumes(MediaType.APPLICATION_XML)
public Response recreateEntry(InputStream entryStream,
@PathParam("repository") String repository,
- @PathParam("groupName") String groupName, @Context UriInfo uriInfo)
+ @PathParam("groupName") String groupName, @Context UriInfo uriInfo,
@QueryParam("createIfNotExist") boolean createIfNotExist)
{
SessionProvider sessionProvider = sessionProviderService.getSessionProvider(null);
@@ -189,7 +190,10 @@
{
regService.getRepositoryService().setCurrentRepositoryName(repository);
RegistryEntry entry = RegistryEntry.parse(entryStream);
- regService.recreateEntry(sessionProvider, normalizePath(groupName), entry);
+ if (createIfNotExist)
+ regService.updateEntry(sessionProvider, normalizePath(groupName), entry);
+ else
+ regService.recreateEntry(sessionProvider, normalizePath(groupName), entry);
URI location = uriInfo.getRequestUriBuilder().path(entry.getName()).build();
return Response.created(location).build();
}
Modified:
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/registry/RegistryService.java
===================================================================
---
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/registry/RegistryService.java 2009-11-12
15:43:12 UTC (rev 607)
+++
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/registry/RegistryService.java 2009-11-12
15:46:07 UTC (rev 608)
@@ -239,7 +239,51 @@
throw new RepositoryException("Can't get XML representation from stream
" + te);
}
}
+
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void updateEntry(final SessionProvider sessionProvider, final String groupPath,
final RegistryEntry entry)
+ throws RepositoryException
+ {
+ final String entryRelPath = EXO_REGISTRY + "/" + groupPath +
"/" + entry.getName();
+ final String parentFullPath = "/" + EXO_REGISTRY + "/" +
groupPath;
+
+ try
+ {
+ Session session = session(sessionProvider,
repositoryService.getCurrentRepository());
+
+ // Don't care about concurrency, Session should be dedicated to the Thread,
see JCR-765
+ // synchronized (session) {
+ try {
+ Node node = session.getRootNode().getNode(entryRelPath);
+ // delete existing entry...
+ node.remove();
+ // create same entry,
+ // [PN] no check we need here, as we have deleted this node before
+ // checkGroup(sessionProvider, fullParentPath);
+ session.importXML(parentFullPath, entry.getAsInputStream(),
IMPORT_UUID_CREATE_NEW);
+ } catch (PathNotFoundException e) {
+ createEntry(sessionProvider, groupPath, entry);
+ }
+ // save recreated changes
+ session.save();
+ // }
+ }
+ catch (IOException ioe)
+ {
+ throw new RepositoryException("Item " + parentFullPath +
"can't be created " + ioe);
+ }
+ catch (TransformerException te)
+ {
+ throw new RepositoryException("Can't get XML representation from stream
" + te);
+ }
+ }
+
+
/**
* {@inheritDoc}
*/
Show replies by date