[exo-jcr-commits] exo-jcr SVN: r4385 - in jcr/branches/1.12.x/patch/1.12.9-GA: JCR-1630 and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue May 17 08:30:18 EDT 2011


Author: tolusha
Date: 2011-05-17 08:30:18 -0400 (Tue, 17 May 2011)
New Revision: 4385

Added:
   jcr/branches/1.12.x/patch/1.12.9-GA/JCR-1630/
   jcr/branches/1.12.x/patch/1.12.9-GA/JCR-1630/JCR-1630.patch
Log:
JCR-1630: patch proposed

Added: jcr/branches/1.12.x/patch/1.12.9-GA/JCR-1630/JCR-1630.patch
===================================================================
--- jcr/branches/1.12.x/patch/1.12.9-GA/JCR-1630/JCR-1630.patch	                        (rev 0)
+++ jcr/branches/1.12.x/patch/1.12.9-GA/JCR-1630/JCR-1630.patch	2011-05-17 12:30:18 UTC (rev 4385)
@@ -0,0 +1,329 @@
+Index: exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestMove.java
+===================================================================
+--- exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestMove.java	(revision 4383)
++++ exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestMove.java	(working copy)
+@@ -182,6 +182,98 @@
+ 
+    }
+ 
++   public void testMoveHeaderBeginsFromWorkspaceName() throws Exception
++   {
++      String content = TestUtils.getFileContent();
++      String filename = TestUtils.getFileName();
++      InputStream inputStream = new ByteArrayInputStream(content.getBytes());
++      TestUtils.addContent(session, filename, inputStream, defaultFileNodeType, "");
++      String destFilename = TestUtils.getFileName();
++
++      MultivaluedMap<String, String> headers = new MultivaluedMapImpl();
++
++      headers.add(ExtHttpHeaders.DESTINATION, WORKSPACE + destFilename);
++      ContainerResponse response = service(WebDAVMethods.MOVE, getPathWS() + filename, host, headers, null);
++
++      assertEquals(HTTPStatus.CREATED, response.getStatus());
++      assertTrue(session.getRootNode().hasNode(TextUtil.relativizePath(destFilename)));
++
++      Node nodeDest = session.getRootNode().getNode(TextUtil.relativizePath(destFilename));
++      assertTrue(nodeDest.hasNode("jcr:content"));
++
++      Node nodeDestContent = nodeDest.getNode("jcr:content");
++      assertTrue(nodeDestContent.hasProperty("jcr:data"));
++
++      ByteArrayInputStream streamDest = (ByteArrayInputStream)nodeDestContent.getProperty("jcr:data").getStream();
++      String getContentDest = TestUtils.stream2string(streamDest, null);
++      assertEquals(content, getContentDest);
++      assertFalse(session.getRootNode().hasNode(TextUtil.relativizePath(filename)));
++   }
++
++   public void testMoveToFolderWithSpace() throws Exception
++   {
++      String folderNameWithSpace = "new folder - testMoveToFolderWithSpace";
++      session.getRootNode().addNode(folderNameWithSpace, "nt:folder");
++      session.save();
++
++      String content = TestUtils.getFileContent();
++      String filename = TestUtils.getFileName();
++      InputStream inputStream = new ByteArrayInputStream(content.getBytes());
++      TestUtils.addContent(session, filename, inputStream, defaultFileNodeType, "");
++      String destFilename = "/" + folderNameWithSpace + TestUtils.getFileName();
++
++      MultivaluedMap<String, String> headers = new MultivaluedMapImpl();
++
++      headers.add(ExtHttpHeaders.DESTINATION, WORKSPACE + destFilename);
++      ContainerResponse response = service(WebDAVMethods.MOVE, getPathWS() + filename, host, headers, null);
++
++      assertEquals(HTTPStatus.CREATED, response.getStatus());
++      assertTrue(session.getRootNode().hasNode(TextUtil.relativizePath(destFilename)));
++
++      Node nodeDest = session.getRootNode().getNode(TextUtil.relativizePath(destFilename));
++      assertTrue(nodeDest.hasNode("jcr:content"));
++
++      Node nodeDestContent = nodeDest.getNode("jcr:content");
++      assertTrue(nodeDestContent.hasProperty("jcr:data"));
++
++      ByteArrayInputStream streamDest = (ByteArrayInputStream)nodeDestContent.getProperty("jcr:data").getStream();
++      String getContentDest = TestUtils.stream2string(streamDest, null);
++      assertEquals(content, getContentDest);
++      assertFalse(session.getRootNode().hasNode(TextUtil.relativizePath(filename)));
++   }
++
++   public void testMoveToFolderWithSpaceUnescapedChars() throws Exception
++   {
++      String folderNameWithSpace = "new folder - testMoveToFolderWithSpaceUnescapedChars";
++      session.getRootNode().addNode(folderNameWithSpace, "nt:folder");
++      session.save();
++
++      String content = TestUtils.getFileContent();
++      String filename = TestUtils.getFileName();
++      InputStream inputStream = new ByteArrayInputStream(content.getBytes());
++      TestUtils.addContent(session, filename, inputStream, defaultFileNodeType, "");
++      String destFilename = TextUtil.unescape("/" + folderNameWithSpace + TestUtils.getFileName(), '%');
++
++      MultivaluedMap<String, String> headers = new MultivaluedMapImpl();
++
++      headers.add(ExtHttpHeaders.DESTINATION, WORKSPACE + destFilename);
++      ContainerResponse response = service(WebDAVMethods.MOVE, getPathWS() + filename, host, headers, null);
++
++      assertEquals(HTTPStatus.CREATED, response.getStatus());
++      assertTrue(session.getRootNode().hasNode(TextUtil.relativizePath(destFilename)));
++
++      Node nodeDest = session.getRootNode().getNode(TextUtil.relativizePath(destFilename));
++      assertTrue(nodeDest.hasNode("jcr:content"));
++
++      Node nodeDestContent = nodeDest.getNode("jcr:content");
++      assertTrue(nodeDestContent.hasProperty("jcr:data"));
++
++      ByteArrayInputStream streamDest = (ByteArrayInputStream)nodeDestContent.getProperty("jcr:data").getStream();
++      String getContentDest = TestUtils.stream2string(streamDest, null);
++      assertEquals(content, getContentDest);
++      assertFalse(session.getRootNode().hasNode(TextUtil.relativizePath(filename)));
++   }
++
+    @Override
+    protected String getRepositoryName()
+    {
+Index: exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestCopy.java
+===================================================================
+--- exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestCopy.java	(revision 4383)
++++ exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestCopy.java	(working copy)
+@@ -194,9 +194,130 @@
+       ContainerResponse response = service(WebDAVMethods.COPY, getPathWS() + filename, host, headers, null);
+       // check if operation completed successfully, we expect a new resource to be created
+       assertEquals(HTTPStatus.CREATED, response.getStatus());
++   }
+ 
++   public void testCopyDestinationHeaderBeginsFromWorkspaceName() throws Exception
++   {
++      String content = TestUtils.getFileContent();
++      String filename = TestUtils.getFileName();
++      InputStream inputStream = new ByteArrayInputStream(content.getBytes());
++      TestUtils.addContent(session, filename, inputStream, defaultFileNodeType, "");
++      String destFilename = TestUtils.getFileName();
++
++      MultivaluedMap<String, String> headers = new MultivaluedMapImpl();
++      headers.add(ExtHttpHeaders.DESTINATION, WORKSPACE + destFilename);
++
++      ContainerResponse response = service(WebDAVMethods.COPY, getPathWS() + filename, host, headers, null);
++
++      assertEquals(HTTPStatus.CREATED, response.getStatus());
++      assertTrue(session.getRootNode().hasNode(TextUtil.relativizePath(destFilename)));
++
++      Node nodeDest = session.getRootNode().getNode(TextUtil.relativizePath(destFilename));
++      assertTrue(nodeDest.hasNode("jcr:content"));
++
++      Node nodeDestContent = nodeDest.getNode("jcr:content");
++      assertTrue(nodeDestContent.hasProperty("jcr:data"));
++
++      ByteArrayInputStream streamDest = (ByteArrayInputStream)nodeDestContent.getProperty("jcr:data").getStream();
++      String getContentDest = TestUtils.stream2string(streamDest, null);
++      assertEquals(content, getContentDest);
++      assertTrue(session.getRootNode().hasNode(TextUtil.relativizePath(filename)));
++
++      Node nodeBase = session.getRootNode().getNode(TextUtil.relativizePath(filename));
++      assertTrue(nodeBase.hasNode("jcr:content"));
++
++      Node nodeBaseContent = nodeBase.getNode("jcr:content");
++      assertTrue(nodeBaseContent.hasProperty("jcr:data"));
++
++      ByteArrayInputStream streamBase = (ByteArrayInputStream)nodeBaseContent.getProperty("jcr:data").getStream();
++      String getContentBase = TestUtils.stream2string(streamBase, null);
++      assertEquals(content, getContentBase);
+    }
+ 
++   public void testCopyToFolderWithSpace() throws Exception
++   {
++      String folderNameWithSpace = "new folder - testCopyToFolderWithSpace";
++      session.getRootNode().addNode(folderNameWithSpace, "nt:folder");
++      session.save();
++
++      String content = TestUtils.getFileContent();
++      String filename = TestUtils.getFileName();
++      InputStream inputStream = new ByteArrayInputStream(content.getBytes());
++      TestUtils.addContent(session, filename, inputStream, defaultFileNodeType, "");
++      String destFilename = "/" + folderNameWithSpace + TestUtils.getFileName();
++
++      MultivaluedMap<String, String> headers = new MultivaluedMapImpl();
++      headers.add(ExtHttpHeaders.DESTINATION, WORKSPACE + destFilename);
++
++      ContainerResponse response = service(WebDAVMethods.COPY, getPathWS() + filename, host, headers, null);
++
++      assertEquals(HTTPStatus.CREATED, response.getStatus());
++      assertTrue(session.getRootNode().hasNode(TextUtil.relativizePath(destFilename)));
++
++      Node nodeDest = session.getRootNode().getNode(TextUtil.relativizePath(destFilename));
++      assertTrue(nodeDest.hasNode("jcr:content"));
++
++      Node nodeDestContent = nodeDest.getNode("jcr:content");
++      assertTrue(nodeDestContent.hasProperty("jcr:data"));
++
++      ByteArrayInputStream streamDest = (ByteArrayInputStream)nodeDestContent.getProperty("jcr:data").getStream();
++      String getContentDest = TestUtils.stream2string(streamDest, null);
++      assertEquals(content, getContentDest);
++      assertTrue(session.getRootNode().hasNode(TextUtil.relativizePath(filename)));
++
++      Node nodeBase = session.getRootNode().getNode(TextUtil.relativizePath(filename));
++      assertTrue(nodeBase.hasNode("jcr:content"));
++
++      Node nodeBaseContent = nodeBase.getNode("jcr:content");
++      assertTrue(nodeBaseContent.hasProperty("jcr:data"));
++
++      ByteArrayInputStream streamBase = (ByteArrayInputStream)nodeBaseContent.getProperty("jcr:data").getStream();
++      String getContentBase = TestUtils.stream2string(streamBase, null);
++      assertEquals(content, getContentBase);
++   }
++
++   public void testCopyToFolderWithSpaceUnescapedChars() throws Exception
++   {
++      String folderNameWithSpace = "new folder - testCopyToFolderWithSpaceUnescapedChars";
++      session.getRootNode().addNode(folderNameWithSpace, "nt:folder");
++      session.save();
++
++      String content = TestUtils.getFileContent();
++      String filename = TestUtils.getFileName();
++      InputStream inputStream = new ByteArrayInputStream(content.getBytes());
++      TestUtils.addContent(session, filename, inputStream, defaultFileNodeType, "");
++      String destFilename = TextUtil.unescape("/" + folderNameWithSpace + TestUtils.getFileName(), '%');
++
++      MultivaluedMap<String, String> headers = new MultivaluedMapImpl();
++      headers.add(ExtHttpHeaders.DESTINATION, WORKSPACE + destFilename);
++
++      ContainerResponse response = service(WebDAVMethods.COPY, getPathWS() + filename, host, headers, null);
++
++      assertEquals(HTTPStatus.CREATED, response.getStatus());
++      assertTrue(session.getRootNode().hasNode(TextUtil.relativizePath(destFilename)));
++
++      Node nodeDest = session.getRootNode().getNode(TextUtil.relativizePath(destFilename));
++      assertTrue(nodeDest.hasNode("jcr:content"));
++
++      Node nodeDestContent = nodeDest.getNode("jcr:content");
++      assertTrue(nodeDestContent.hasProperty("jcr:data"));
++
++      ByteArrayInputStream streamDest = (ByteArrayInputStream)nodeDestContent.getProperty("jcr:data").getStream();
++      String getContentDest = TestUtils.stream2string(streamDest, null);
++      assertEquals(content, getContentDest);
++      assertTrue(session.getRootNode().hasNode(TextUtil.relativizePath(filename)));
++
++      Node nodeBase = session.getRootNode().getNode(TextUtil.relativizePath(filename));
++      assertTrue(nodeBase.hasNode("jcr:content"));
++
++      Node nodeBaseContent = nodeBase.getNode("jcr:content");
++      assertTrue(nodeBaseContent.hasProperty("jcr:data"));
++
++      ByteArrayInputStream streamBase = (ByteArrayInputStream)nodeBaseContent.getProperty("jcr:data").getStream();
++      String getContentBase = TestUtils.stream2string(streamBase, null);
++      assertEquals(content, getContentBase);
++   }
++
+    @Override
+    protected String getRepositoryName()
+    {
+Index: exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/WebDavServiceImpl.java
+===================================================================
+--- exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/WebDavServiceImpl.java	(revision 4383)
++++ exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/WebDavServiceImpl.java	(working copy)
+@@ -72,6 +72,7 @@
+ import java.lang.annotation.Annotation;
+ import java.lang.reflect.Method;
+ import java.net.URI;
++import java.net.URISyntaxException;
+ import java.net.URLEncoder;
+ import java.util.ArrayList;
+ import java.util.HashMap;
+@@ -384,9 +385,12 @@
+       try
+       {
+          String serverURI = uriInfo.getBaseUriBuilder().path(getClass()).path(repoName).build().toString();
+-         URI dest = new URI(destinationHeader);
+-         URI base = new URI(serverURI);
+ 
++         // destinationHeader could begins from workspace name (passed from cms 
++         // WebDAVServiceImpl) and doesn't contain neither host no repository name 
++         URI dest = buildURI(destinationHeader);
++         URI base = buildURI(serverURI);
++
+          String destPath = dest.getPath();
+          int repoIndex = destPath.indexOf(repoName);
+ 
+@@ -395,12 +399,12 @@
+          // or destination header is malformed
+          // we return BAD_GATEWAY(502) HTTP status
+          // more info here http://www.webdav.org/specs/rfc2518.html#METHOD_COPY
+-         if (!base.getHost().equals(dest.getHost()) || repoIndex == -1)
++         if (dest.getHost() != null && !base.getHost().equals(dest.getHost()))
+          {
+             return Response.status(HTTPStatus.BAD_GATEWAY).entity("Bad Gateway").build();
+          }
+ 
+-         destPath = normalizePath(dest.getPath().substring(repoIndex + repoName.length() + 1));
++         destPath = normalizePath(repoIndex == -1 ? destPath : destPath.substring(repoIndex + repoName.length() + 1));
+ 
+          String srcWorkspace = workspaceName(repoPath);
+          String srcNodePath = path(repoPath);
+@@ -776,8 +780,10 @@
+       {
+          String serverURI = uriInfo.getBaseUriBuilder().path(getClass()).path(repoName).build().toString();
+ 
+-         URI dest = new URI(destinationHeader);
+-         URI base = new URI(serverURI);
++         // destinationHeader could begins from workspace name (passed from cms 
++         // WebDAVServiceImpl) and doesn't contain neither host no repository name 
++         URI dest = buildURI(destinationHeader);
++         URI base = buildURI(serverURI);
+ 
+          String destPath = dest.getPath();
+          int repoIndex = destPath.indexOf(repoName);
+@@ -787,14 +793,12 @@
+          // or destination header is malformed
+          // we return BAD_GATEWAY(502) HTTP status
+          // more info here http://www.webdav.org/specs/rfc2518.html#METHOD_MOVE
+-         if (!base.getHost().equals(dest.getHost()) || repoIndex == -1)
+-
+-         if (!destinationHeader.startsWith(serverURI))
++         if (dest.getHost() != null && !base.getHost().equals(dest.getHost()))
+          {
+             return Response.status(HTTPStatus.BAD_GATEWAY).entity("Bad Gateway").build();
+          }
+ 
+-         destPath = normalizePath(dest.getPath().substring(repoIndex + repoName.length() + 1));
++         destPath = normalizePath(repoIndex == -1 ? destPath : destPath.substring(repoIndex + repoName.length() + 1));
+ 
+          String destWorkspace = workspaceName(destPath);
+          String destNodePath = path(destPath);
+@@ -1335,4 +1339,18 @@
+       return lockTokens;
+    }
+ 
++   /** 
++    * Build URI from string. 
++    */
++   private URI buildURI(String path) throws URISyntaxException
++   {
++      try
++      {
++         return new URI(path);
++      }
++      catch (URISyntaxException e)
++      {
++         return new URI(TextUtil.escape(path, '%', true));
++      }
++   }
+ }



More information about the exo-jcr-commits mailing list