You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2011/09/27 13:53:12 UTC
svn commit: r1176340 [2/2] - in /jackrabbit/branches/JCR-2272: ./
jackrabbit-api/
jackrabbit-api/src/main/java/org/apache/jackrabbit/api/management/
jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/
jackrabbit-api/src/main/java/org/ap...
Modified: jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/ExcerptTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/ExcerptTest.java?rev=1176340&r1=1176339&r2=1176340&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/ExcerptTest.java (original)
+++ jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/ExcerptTest.java Tue Sep 27 11:53:10 2011
@@ -16,9 +16,9 @@
*/
package org.apache.jackrabbit.core.query;
+import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
-import javax.jcr.Node;
import javax.jcr.query.QueryResult;
import javax.jcr.query.Row;
import javax.jcr.query.RowIterator;
@@ -104,6 +104,10 @@ public class ExcerptTest extends Abstrac
"apache jackrabbit");
}
+ /**
+ * Verifies character encoding on a node property that does not contain any
+ * excerpt info
+ */
public void testEncodeIllegalCharsNoHighlights() throws RepositoryException {
String text = "bla <strong>bla</strong> bla";
String excerpt = createExcerpt("bla <strong>bla</strong> bla");
@@ -116,9 +120,126 @@ public class ExcerptTest extends Abstrac
QueryResult result = executeQuery(stmt);
RowIterator rows = result.getRows();
assertEquals(1, rows.getSize());
- assertEquals(excerpt, rows.nextRow().getValue("rep:excerpt(text)").getString());
+ String ex = rows.nextRow().getValue("rep:excerpt(text)").getString();
+ assertEquals("Expected " + excerpt + ", but got ", excerpt, ex);
}
+ /**
+ * Verifies character encoding on a node property that contains excerpt info
+ */
+ public void testEncodeIllegalCharsHighlights() throws RepositoryException {
+ checkExcerpt("bla <strong>bla</strong> foo",
+ "bla <strong>bla</strong> <strong>foo</strong>",
+ "foo");
+ }
+
+ /**
+ * test for https://issues.apache.org/jira/browse/JCR-3077
+ *
+ * when given a quoted phrase, the excerpt should evaluate it whole as a
+ * token (not break is down)
+ *
+ */
+ public void testQuotedPhrase() throws RepositoryException {
+ checkExcerpt("one two three four",
+ "one <strong>two three</strong> four", "\"two three\"");
+ }
+
+ /**
+ * Verifies excerpt generation on a node property that does not contain any
+ * excerpt info for a quoted phrase
+ */
+ public void testQuotedPhraseNoMatch() throws RepositoryException {
+ String text = "one two three four";
+ String excerpt = createExcerpt("one two three four");
+ String terms = "\"five six\"";
+
+ Node n = testRootNode.addNode(nodeName1);
+ n.setProperty("text", text);
+ n.setProperty("other", terms);
+ superuser.save();
+
+ String stmt = getStatement(terms);
+ QueryResult result = executeQuery(stmt);
+ RowIterator rows = result.getRows();
+ assertEquals(1, rows.getSize());
+ String ex = rows.nextRow().getValue("rep:excerpt(text)").getString();
+ assertEquals("Expected " + excerpt + ", but got ", excerpt, ex);
+ }
+
+ /**
+ *
+ * Verifies excerpt generation on a node property that contains the exact
+ * quoted phrase but with scrambled words.
+ *
+ * More clearly it actually checks that the order of tokens is respected for
+ * a quoted phrase.
+ */
+ public void testQuotedPhraseNoMatchScrambled() throws RepositoryException {
+ String text = "one two three four";
+ String excerpt = createExcerpt("one two three four");
+ String terms = "\"three two\"";
+
+ Node n = testRootNode.addNode(nodeName1);
+ n.setProperty("text", text);
+ n.setProperty("other", terms);
+ superuser.save();
+
+ String stmt = getStatement(terms);
+ QueryResult result = executeQuery(stmt);
+ RowIterator rows = result.getRows();
+ assertEquals(1, rows.getSize());
+ String ex = rows.nextRow().getValue("rep:excerpt(text)").getString();
+ assertEquals("Expected " + excerpt + ", but got ", excerpt, ex);
+ }
+
+ /**
+ * Verifies excerpt generation on a node property that does not contain the
+ * exact quoted phrase, but contains fragments of it.
+ *
+ */
+ public void testQuotedPhraseNoMatchGap() throws RepositoryException {
+ String text = "one two three four";
+ String excerpt = createExcerpt("one two three four");
+ String terms = "\"two four\"";
+
+ Node n = testRootNode.addNode(nodeName1);
+ n.setProperty("text", text);
+ n.setProperty("other", terms);
+ superuser.save();
+
+ String stmt = getStatement(terms);
+ QueryResult result = executeQuery(stmt);
+ RowIterator rows = result.getRows();
+ assertEquals(1, rows.getSize());
+ String ex = rows.nextRow().getValue("rep:excerpt(text)").getString();
+ assertEquals("Expected " + excerpt + ", but got ", excerpt, ex);
+ }
+
+ /**
+ * test for https://issues.apache.org/jira/browse/JCR-3077
+ *
+ * JA search acts as a PhraseQuery, thanks to LUCENE-2458. so it should be
+ * covered by the QuotedTest search.
+ *
+ */
+ public void testHighlightJa() throws RepositoryException {
+
+ // http://translate.google.com/#auto|en|%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%88
+ String jContent = "\u30b3\u30fe\u30c6\u30f3\u30c8";
+ // http://translate.google.com/#auto|en|%E3%83%86%E3%82%B9%E3%83%88
+ String jTest = "\u30c6\u30b9\u30c8";
+
+ String content = "some text with japanese: " + jContent + " (content)"
+ + " and " + jTest + " (test).";
+
+ // expected excerpt; note this may change if excerpt providers change
+ String expectedExcerpt = "some text with japanese: " + jContent
+ + " (content) and <strong>" + jTest + "</strong> (test).";
+ checkExcerpt(content, expectedExcerpt, jTest);
+ }
+
+
private void checkExcerpt(String text, String fragmentText, String terms)
throws RepositoryException {
String excerpt = createExcerpt(fragmentText);
@@ -137,7 +258,7 @@ public class ExcerptTest extends Abstrac
private void createTestData(String text) throws RepositoryException {
Node n = testRootNode.addNode(nodeName1);
n.setProperty("text", text);
- testRootNode.save();
+ superuser.save();
}
private String getExcerpt(Row row) throws RepositoryException {
Modified: jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authentication/SimpleCredentialsAuthenticationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authentication/SimpleCredentialsAuthenticationTest.java?rev=1176340&r1=1176339&r2=1176340&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authentication/SimpleCredentialsAuthenticationTest.java (original)
+++ jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authentication/SimpleCredentialsAuthenticationTest.java Tue Sep 27 11:53:10 2011
@@ -134,6 +134,9 @@ public class SimpleCredentialsAuthentica
public void changePassword(String password) throws RepositoryException {
}
+ public void changePassword(String password, String oldPassword) throws RepositoryException {
+ }
+
public void disable(String reason) throws RepositoryException {
}
Modified: jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/CustomPrivilegeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/CustomPrivilegeTest.java?rev=1176340&r1=1176339&r2=1176340&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/CustomPrivilegeTest.java (original)
+++ jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/CustomPrivilegeTest.java Tue Sep 27 11:53:10 2011
@@ -375,7 +375,7 @@ public class CustomPrivilegeTest extends
}
public void testRegister100CustomPrivileges() throws RepositoryException, FileSystemException {
- PrivilegeBits previous = privilegeRegistry.getBits(privilegeRegistry.get(NameConstants.JCR_RETENTION_MANAGEMENT)).unmodifiable();
+ PrivilegeBits previous = privilegeRegistry.getBits(privilegeRegistry.get(PrivilegeRegistry.REP_PRIVILEGE_MANAGEMENT_NAME)).unmodifiable();
for (int i = 0; i < 100; i++) {
boolean isAbstract = true;
Name name = ((SessionImpl) superuser).getQName("test"+i);
Modified: jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/ImpersonationImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/ImpersonationImplTest.java?rev=1176340&r1=1176339&r2=1176340&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/ImpersonationImplTest.java (original)
+++ jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/ImpersonationImplTest.java Tue Sep 27 11:53:10 2011
@@ -155,13 +155,13 @@ public class ImpersonationImplTest exten
Principal systemPrincipal = new SystemPrincipal();
assertNull(userMgr.getAuthorizable(systemPrincipal));
- // system cannot be add/remove to set of impersonators of 'u' but
- // it should be allowed to impersonate a given user...
+ // system cannot be add/remove to set of impersonators of 'u' nor
+ // should it be allowed to impersonate a given user...
User u = (User) userMgr.getAuthorizable(uID);
Impersonation impersonation = u.getImpersonation();
assertFalse(impersonation.grantImpersonation(systemPrincipal));
assertFalse(impersonation.revokeImpersonation(systemPrincipal));
- assertTrue(impersonation.allows(buildSubject(systemPrincipal)));
+ assertFalse(impersonation.allows(buildSubject(systemPrincipal)));
}
}
\ No newline at end of file
Modified: jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/UserImporterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/UserImporterTest.java?rev=1176340&r1=1176339&r2=1176340&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/UserImporterTest.java (original)
+++ jackrabbit/branches/JCR-2272/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/UserImporterTest.java Tue Sep 27 11:53:10 2011
@@ -19,7 +19,13 @@ package org.apache.jackrabbit.core.secur
import org.apache.jackrabbit.api.JackrabbitSession;
import org.apache.jackrabbit.api.security.principal.PrincipalIterator;
import org.apache.jackrabbit.api.security.principal.PrincipalManager;
-import org.apache.jackrabbit.api.security.user.*;
+import org.apache.jackrabbit.api.security.user.Authorizable;
+import org.apache.jackrabbit.api.security.user.AuthorizableExistsException;
+import org.apache.jackrabbit.api.security.user.Group;
+import org.apache.jackrabbit.api.security.user.Impersonation;
+import org.apache.jackrabbit.api.security.user.Query;
+import org.apache.jackrabbit.api.security.user.User;
+import org.apache.jackrabbit.api.security.user.UserManager;
import org.apache.jackrabbit.commons.xml.ParsingContentHandler;
import org.apache.jackrabbit.core.NodeImpl;
import org.apache.jackrabbit.core.SessionImpl;
@@ -36,7 +42,29 @@ import org.apache.jackrabbit.test.NotExe
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
-import javax.jcr.*;
+import javax.jcr.AccessDeniedException;
+import javax.jcr.Credentials;
+import javax.jcr.ImportUUIDBehavior;
+import javax.jcr.InvalidItemStateException;
+import javax.jcr.InvalidSerializedDataException;
+import javax.jcr.Item;
+import javax.jcr.ItemExistsException;
+import javax.jcr.ItemNotFoundException;
+import javax.jcr.LoginException;
+import javax.jcr.NamespaceException;
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.Property;
+import javax.jcr.PropertyType;
+import javax.jcr.ReferentialIntegrityException;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.Value;
+import javax.jcr.ValueFactory;
+import javax.jcr.Workspace;
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
@@ -50,7 +78,12 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.security.AccessControlException;
import java.security.Principal;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.UUID;
/**
* <code>UserImporterTest</code>...
@@ -1364,6 +1397,10 @@ public class UserImporterTest extends Ab
return null;
}
+ public Authorizable getAuthorizableByPath(String path) throws UnsupportedRepositoryOperationException, RepositoryException {
+ return null;
+ }
+
public Iterator<Authorizable> findAuthorizables(String relPath, String value) throws RepositoryException {
return null;
}
Modified: jackrabbit/branches/JCR-2272/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/FilterContentPackage.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2272/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/FilterContentPackage.java?rev=1176340&r1=1176339&r2=1176340&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2272/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/FilterContentPackage.java (original)
+++ jackrabbit/branches/JCR-2272/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/FilterContentPackage.java Tue Sep 27 11:53:10 2011
@@ -32,7 +32,7 @@ import org.apache.jackrabbit.commons.pre
public class FilterContentPackage implements ContentPackage {
- protected final List content = new ArrayList();
+ protected final List<Content> content = new ArrayList<Content>();
protected boolean includeProperties = false;
@@ -47,9 +47,9 @@ public class FilterContentPackage implem
/**
* @see org.apache.jackrabbit.commons.packaging.ContentPackage#getItems(javax.jcr.Session)
*/
- public Iterator getItems(Session session)
+ public Iterator<Item> getItems(Session session)
throws RepositoryException {
- return new FilteringIterator(session, new ArrayList(this.content), this.includeProperties);
+ return new FilteringIterator(session, new ArrayList<Content>(this.content), this.includeProperties);
}
protected static class Content {
@@ -65,7 +65,7 @@ public class FilterContentPackage implem
public static class FilteringIterator implements Iterator {
/** The content we will iterate over. */
- protected final List content;
+ protected final List<Content> content;
/**
* Filter that defines which items are included
@@ -80,7 +80,7 @@ public class FilterContentPackage implem
protected final Session session;
- protected final List nodeIteratorStack = new ArrayList();
+ protected final List<NodeIterator> nodeIteratorStack = new ArrayList<NodeIterator>();
protected final boolean includeProperties;
@@ -95,7 +95,7 @@ public class FilterContentPackage implem
* @param includeProperties Should properties be included.
*/
public FilteringIterator(final Session session,
- final List contentList,
+ final List<Content> contentList,
final boolean includeProperties) {
this.content = contentList;
this.session = session;
Modified: jackrabbit/branches/JCR-2272/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/DefaultHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2272/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/DefaultHandler.java?rev=1176340&r1=1176339&r2=1176340&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2272/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/DefaultHandler.java (original)
+++ jackrabbit/branches/JCR-2272/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/DefaultHandler.java Tue Sep 27 11:53:10 2011
@@ -20,7 +20,10 @@ import org.apache.jackrabbit.JcrConstant
import org.apache.jackrabbit.commons.NamespaceHelper;
import org.apache.jackrabbit.util.ISO9075;
import org.apache.jackrabbit.util.Text;
+import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.DavResource;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.jcr.JcrDavException;
import org.apache.jackrabbit.webdav.xml.Namespace;
import org.apache.jackrabbit.webdav.property.DavPropertyName;
import org.apache.jackrabbit.webdav.property.DavProperty;
@@ -32,6 +35,7 @@ import org.slf4j.LoggerFactory;
import javax.jcr.Item;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
+import javax.jcr.PathNotFoundException;
import javax.jcr.Property;
import javax.jcr.RepositoryException;
import javax.jcr.PropertyIterator;
@@ -67,7 +71,7 @@ import java.util.HashMap;
* Subclasses therefore should provide their own {@link #importData(ImportContext, boolean, Node)
* importData} method, that handles the data according their needs.
*/
-public class DefaultHandler implements IOHandler, PropertyHandler {
+public class DefaultHandler implements IOHandler, PropertyHandler, CopyMoveHandler {
private static Logger log = LoggerFactory.getLogger(DefaultHandler.class);
@@ -574,9 +578,9 @@ public class DefaultHandler implements I
continue;
}
if (JcrConstants.JCR_DATA.equals(name)
- || JcrConstants.JCR_MIMETYPE.equals(name)
- || JcrConstants.JCR_ENCODING.equals(name)
- || JcrConstants.JCR_LASTMODIFIED.equals(name)) {
+ || JcrConstants.JCR_MIMETYPE.equals(name)
+ || JcrConstants.JCR_ENCODING.equals(name)
+ || JcrConstants.JCR_LASTMODIFIED.equals(name)) {
continue;
}
@@ -671,6 +675,54 @@ public class DefaultHandler implements I
}
}
+ //----------------------------------------------------< CopyMoveHandler >---
+ /**
+ * @see CopyMoveHandler#canCopy(CopyMoveContext, org.apache.jackrabbit.webdav.DavResource, org.apache.jackrabbit.webdav.DavResource)
+ */
+ public boolean canCopy(CopyMoveContext context, DavResource source, DavResource destination) {
+ return true;
+ }
+
+ /**
+ * @see CopyMoveHandler#copy(CopyMoveContext, org.apache.jackrabbit.webdav.DavResource, org.apache.jackrabbit.webdav.DavResource)
+ */
+ public boolean copy(CopyMoveContext context, DavResource source, DavResource destination) throws DavException {
+ if (context.isShallowCopy() && source.isCollection()) {
+ // TODO: currently no support for shallow copy; however this is
+ // only relevant if the source resource is a collection, because
+ // otherwise it doesn't make a difference
+ throw new DavException(DavServletResponse.SC_FORBIDDEN, "Unable to perform shallow copy.");
+ }
+ try {
+ context.getSession().getWorkspace().copy(source.getLocator().getRepositoryPath(), destination.getLocator().getRepositoryPath());
+ return true;
+ } catch (PathNotFoundException e) {
+ // according to rfc 2518: missing parent
+ throw new DavException(DavServletResponse.SC_CONFLICT, e.getMessage());
+ } catch (RepositoryException e) {
+ throw new JcrDavException(e);
+ }
+ }
+
+ /**
+ * @see CopyMoveHandler#canMove(CopyMoveContext, org.apache.jackrabbit.webdav.DavResource, org.apache.jackrabbit.webdav.DavResource)
+ */
+ public boolean canMove(CopyMoveContext context, DavResource source, DavResource destination) {
+ return true;
+ }
+
+ /**
+ * @see CopyMoveHandler#move(CopyMoveContext, org.apache.jackrabbit.webdav.DavResource, org.apache.jackrabbit.webdav.DavResource)
+ */
+ public boolean move(CopyMoveContext context, DavResource source, DavResource destination) throws DavException {
+ try {
+ context.getWorkspace().move(source.getLocator().getRepositoryPath(), destination.getLocator().getRepositoryPath());
+ return true;
+ } catch (RepositoryException e) {
+ throw new JcrDavException(e);
+ }
+ }
+
//------------------------------------------------------------< private >---
/**
* Builds a webdav property name from the given jcrName. In case the jcrName
@@ -784,9 +836,9 @@ public class DefaultHandler implements I
private static boolean isDefinedByFilteredNodeType(PropertyDefinition def) {
String ntName = def.getDeclaringNodeType().getName();
return ntName.equals(JcrConstants.NT_BASE)
- || ntName.equals(JcrConstants.MIX_REFERENCEABLE)
- || ntName.equals(JcrConstants.MIX_VERSIONABLE)
- || ntName.equals(JcrConstants.MIX_LOCKABLE);
+ || ntName.equals(JcrConstants.MIX_REFERENCEABLE)
+ || ntName.equals(JcrConstants.MIX_VERSIONABLE)
+ || ntName.equals(JcrConstants.MIX_LOCKABLE);
}
//-------------------------------------------< setter for configuration >---
Modified: jackrabbit/branches/JCR-2272/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2272/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java?rev=1176340&r1=1176339&r2=1176340&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2272/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java (original)
+++ jackrabbit/branches/JCR-2272/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java Tue Sep 27 11:53:10 2011
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.webdav.sim
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.server.io.AbstractExportContext;
+import org.apache.jackrabbit.server.io.CopyMoveContextImpl;
import org.apache.jackrabbit.server.io.DefaultIOListener;
import org.apache.jackrabbit.server.io.ExportContext;
import org.apache.jackrabbit.server.io.ExportContextImpl;
@@ -68,7 +69,6 @@ import org.slf4j.LoggerFactory;
import javax.jcr.Item;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
-import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Workspace;
@@ -599,11 +599,8 @@ public class DavResourceImpl implements
}
// make sure, that src and destination belong to the same workspace
checkSameWorkspace(destination.getLocator());
- try {
- String destItemPath = destination.getLocator().getRepositoryPath();
- getJcrSession().getWorkspace().move(locator.getRepositoryPath(), destItemPath);
- } catch (RepositoryException e) {
- throw new JcrDavException(e);
+ if (!config.getCopyMoveManager().move(new CopyMoveContextImpl(getJcrSession()), this, destination)) {
+ throw new DavException(DavServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
}
}
@@ -620,22 +617,10 @@ public class DavResourceImpl implements
if (isFilteredResource(destination)) {
throw new DavException(DavServletResponse.SC_FORBIDDEN);
}
- if (shallow && isCollection()) {
- // TODO: currently no support for shallow copy; however this is
- // only relevant if the source resource is a collection, because
- // otherwise it doesn't make a difference
- throw new DavException(DavServletResponse.SC_FORBIDDEN, "Unable to perform shallow copy.");
- }
// make sure, that src and destination belong to the same workspace
checkSameWorkspace(destination.getLocator());
- try {
- String destItemPath = destination.getLocator().getRepositoryPath();
- getJcrSession().getWorkspace().copy(locator.getRepositoryPath(), destItemPath);
- } catch (PathNotFoundException e) {
- // according to rfc 2518: missing parent
- throw new DavException(DavServletResponse.SC_CONFLICT, e.getMessage());
- } catch (RepositoryException e) {
- throw new JcrDavException(e);
+ if (!config.getCopyMoveManager().copy(new CopyMoveContextImpl(getJcrSession(), shallow), this, destination)) {
+ throw new DavException(DavServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
}
}
Modified: jackrabbit/branches/JCR-2272/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2272/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java?rev=1176340&r1=1176339&r2=1176340&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2272/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java (original)
+++ jackrabbit/branches/JCR-2272/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java Tue Sep 27 11:53:10 2011
@@ -31,6 +31,9 @@ import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.xml.parsers.ParserConfigurationException;
+import org.apache.jackrabbit.server.io.CopyMoveHandler;
+import org.apache.jackrabbit.server.io.CopyMoveManager;
+import org.apache.jackrabbit.server.io.CopyMoveManagerImpl;
import org.apache.jackrabbit.server.io.DefaultIOManager;
import org.apache.jackrabbit.server.io.IOHandler;
import org.apache.jackrabbit.server.io.IOManager;
@@ -59,6 +62,9 @@ public class ResourceConfig {
private static final String ELEMENT_PROPERTYMANAGER = "propertymanager";
private static final String ELEMENT_PROPERTYHANDLER = "propertyhandler";
+ private static final String ELEMENT_COPYMOVEMANAGER = "copymovemanager";
+ private static final String ELEMENT_COPYMOVEHANDLER = "copymovehandler";
+
private static final String ELEMENT_CLASS = "class";
private static final String ELEMENT_PARAM = "param";
@@ -72,6 +78,7 @@ public class ResourceConfig {
private ItemFilter itemFilter;
private IOManager ioManager;
+ private CopyMoveManager cmManager;
private PropertyManager propManager;
private String[] nodetypeNames = new String[0];
private boolean collectionNames = false;
@@ -225,6 +232,33 @@ public class ResourceConfig {
log.debug("'propertymanager' element is missing.");
}
+ // copymovemanager config entry
+ el = DomUtil.getChildElement(config, ELEMENT_COPYMOVEMANAGER, null);
+ if (el != null) {
+ Object inst = buildClassFromConfig(el);
+ if (inst != null && inst instanceof CopyMoveManager) {
+ cmManager = (CopyMoveManager) inst;
+ // get optional 'copymovehandler' child elements and populate
+ // the copy move manager with the instances
+ ElementIterator iohElements = DomUtil.getChildren(el, ELEMENT_COPYMOVEHANDLER, null);
+ while (iohElements.hasNext()) {
+ Element iohEl = iohElements.nextElement();
+ inst = buildClassFromConfig(iohEl);
+ if (inst != null && inst instanceof CopyMoveHandler) {
+ CopyMoveHandler handler = (CopyMoveHandler) inst;
+ setParameters(handler, iohEl);
+ cmManager.addCopyMoveHandler(handler);
+ } else {
+ log.warn("Not a valid CopyMoveHandler : " + getClassName(iohEl));
+ }
+ }
+ } else {
+ log.warn("'copymovemanager' element does not define a valid CopyMoveManager.");
+ }
+ } else {
+ log.debug("'copymovemanager' element is missing.");
+ }
+
// collection/non-collection config entry
el = DomUtil.getChildElement(config, "collection", null);
if (el != null) {
@@ -427,6 +461,18 @@ public class ResourceConfig {
}
/**
+ *
+ * @return
+ */
+ public CopyMoveManager getCopyMoveManager() {
+ if (cmManager == null) {
+ log.debug("Missing copymove-manager > building default.");
+ cmManager = CopyMoveManagerImpl.getDefaultManager();
+ }
+ return cmManager;
+ }
+
+ /**
* Returns true, if the given item represents a {@link Node node} that is
* either any of the nodetypes specified to represent a collection or
* none of the nodetypes specified to represent a non-collection, respectively.
Modified: jackrabbit/branches/JCR-2272/test/performance/base/src/main/java/org/apache/jackrabbit/performance/SmallFileWriteTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2272/test/performance/base/src/main/java/org/apache/jackrabbit/performance/SmallFileWriteTest.java?rev=1176340&r1=1176339&r2=1176340&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2272/test/performance/base/src/main/java/org/apache/jackrabbit/performance/SmallFileWriteTest.java (original)
+++ jackrabbit/branches/JCR-2272/test/performance/base/src/main/java/org/apache/jackrabbit/performance/SmallFileWriteTest.java Tue Sep 27 11:53:10 2011
@@ -50,6 +50,7 @@ public class SmallFileWriteTest extends
content.setProperty(
"jcr:data", new TestInputStream(FILE_SIZE * 1024));
}
+ session.save();
}
public void afterTest() throws RepositoryException {