[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