You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2011/11/22 16:04:56 UTC
svn commit: r1205029 - in /jackrabbit/trunk: jackrabbit-jcr2dav/
jackrabbit-spi2dav/
jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/
Author: reschke
Date: Tue Nov 22 15:04:55 2011
New Revision: 1205029
URL: http://svn.apache.org/viewvc?rev=1205029&view=rev
Log:
JCR-2540: spi2dav : move/reorder not properly handled by observation
Add fallback when nodeId can't be computed due to removed node, avoid PROPFINDs on nodes that we know are gone
Modified:
jackrabbit/trunk/jackrabbit-jcr2dav/pom.xml
jackrabbit/trunk/jackrabbit-spi2dav/pom.xml
jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolver.java
jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java
Modified: jackrabbit/trunk/jackrabbit-jcr2dav/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2dav/pom.xml?rev=1205029&r1=1205028&r2=1205029&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2dav/pom.xml (original)
+++ jackrabbit/trunk/jackrabbit-jcr2dav/pom.xml Tue Nov 22 15:04:55 2011
@@ -76,8 +76,6 @@
org.apache.jackrabbit.test.api.lock.LockManagerTest#testAddLockTokenToAnotherSession
org.apache.jackrabbit.test.api.lock.LockManagerTest#testLockTransfer2
org.apache.jackrabbit.jcr2spi.lock.OpenScopedLockTest#testLogoutHasNoEffect
- <!-- JCR-2540 : move/reorder (observation) -->
- org.apache.jackrabbit.test.api.observation.GetIdentifierTest#testNodeRemoved
<!-- JCR-2541 : event journal -->
org.apache.jackrabbit.test.api.observation.EventJournalTest
<!-- JCR-2533 : missing impl of checkQueryStatement -->
Modified: jackrabbit/trunk/jackrabbit-spi2dav/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi2dav/pom.xml?rev=1205029&r1=1205028&r2=1205029&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi2dav/pom.xml (original)
+++ jackrabbit/trunk/jackrabbit-spi2dav/pom.xml Tue Nov 22 15:04:55 2011
@@ -73,8 +73,6 @@
org.apache.jackrabbit.test.api.lock.LockManagerTest#testAddInvalidLockToken
org.apache.jackrabbit.test.api.lock.LockManagerTest#testAddLockTokenToAnotherSession
org.apache.jackrabbit.test.api.lock.LockManagerTest#testLockTransfer2
- <!-- JCR-2540 : move/reorder (observation) -->
- org.apache.jackrabbit.test.api.observation.GetIdentifierTest#testNodeRemoved
<!-- JCR-2541 : event journal -->
org.apache.jackrabbit.test.api.observation.EventJournalTest
<!-- JCR-2533 : missing impl of checkQueryStatement -->
Modified: jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java?rev=1205029&r1=1205028&r2=1205029&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java Tue Nov 22 15:04:55 2011
@@ -2231,15 +2231,31 @@ public class RepositoryServiceImpl imple
continue;
}
+ boolean isForNode = (type == Event.NODE_ADDED
+ || type == Event.NODE_REMOVED || type == Event.NODE_MOVED);
+
ItemId eventId = null;
try {
- if (type == Event.NODE_ADDED || type == Event.NODE_REMOVED || type == Event.NODE_MOVED) {
- eventId = uriResolver.getNodeId(href, sessionInfo);
+ if (isForNode) {
+ eventId = uriResolver.getNodeIdAfterEvent(href,
+ sessionInfo, type == Event.NODE_REMOVED);
} else {
eventId = uriResolver.getPropertyId(href, sessionInfo);
}
} catch (RepositoryException e) {
- log.warn("Unable to build event itemId: ", e.getMessage());
+ if (isForNode) {
+ eventId = idFactory.createNodeId((String) null, eventPath);
+ } else {
+ try {
+ eventId = idFactory.createPropertyId(
+ idFactory.createNodeId((String) null,
+ eventPath.getAncestor(1)),
+ eventPath.getName());
+ } catch (RepositoryException e1) {
+ log.warn("Unable to build event itemId: ",
+ e.getMessage());
+ }
+ }
}
String parentHref = Text.getRelativeParent(href, 1, true);
NodeId parentId = null;
Modified: jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolver.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolver.java?rev=1205029&r1=1205028&r2=1205029&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolver.java (original)
+++ jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolver.java Tue Nov 22 15:04:55 2011
@@ -32,5 +32,7 @@ interface URIResolver {
NodeId getNodeId(String uri, SessionInfo sessionInfo) throws RepositoryException;
+ NodeId getNodeIdAfterEvent(String uri, SessionInfo sessionInfo, boolean nodeIsGone) throws RepositoryException;
+
PropertyId getPropertyId(String uri, SessionInfo sessionInfo) throws RepositoryException;
}
\ No newline at end of file
Modified: jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java?rev=1205029&r1=1205028&r2=1205029&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java Tue Nov 22 15:04:55 2011
@@ -231,30 +231,8 @@ class URIResolverImpl implements URIReso
return uri;
}
}
- //-------------------------------------------------------< URI resolver >---
- /**
- * @inheritDoc
- */
- public Path getQPath(String uri, SessionInfo sessionInfo) throws RepositoryException {
- String rootUri = getRootItemUri(sessionInfo.getWorkspaceName());
- String jcrPath;
- if (uri.startsWith(rootUri)) {
- jcrPath = uri.substring(rootUri.length());
- } else {
- // todo: probably rather an error?
- jcrPath = uri;
- }
- try {
- return service.getNamePathResolver(sessionInfo).getQPath(Text.unescape(jcrPath));
- } catch (NameException e) {
- throw new RepositoryException(e);
- }
- }
- /**
- * @inheritDoc
- */
- public NodeId getNodeId(String uri, SessionInfo sessionInfo) throws RepositoryException {
+ private NodeId getNodeId(String uri, SessionInfo sessionInfo, boolean nodeIsGone) throws RepositoryException {
IdURICache cache = getCache(sessionInfo.getWorkspaceName());
if (cache.containsUri(uri)) {
// id has been accessed before and is cached
@@ -264,13 +242,17 @@ class URIResolverImpl implements URIReso
}
}
+ if (nodeIsGone) {
+ throw new RepositoryException("Can't reconstruct nodeId from URI when the remote node is gone.");
+ }
+
// retrieve parentId from cache or by recursive calls
NodeId parentId;
if (isSameURI(uri, getRootItemUri(sessionInfo.getWorkspaceName()))) {
parentId = null;
} else {
String parentUri = Text.getRelativeParent(uri, 1, true);
- parentId = getNodeId(parentUri, sessionInfo);
+ parentId = getNodeId(parentUri, sessionInfo, false);
}
DavPropertyNameSet nameSet = new DavPropertyNameSet();
@@ -299,6 +281,40 @@ class URIResolverImpl implements URIReso
}
}
+ //-------------------------------------------------------< URI resolver >---
+ /**
+ * @inheritDoc
+ */
+ public Path getQPath(String uri, SessionInfo sessionInfo) throws RepositoryException {
+ String rootUri = getRootItemUri(sessionInfo.getWorkspaceName());
+ String jcrPath;
+ if (uri.startsWith(rootUri)) {
+ jcrPath = uri.substring(rootUri.length());
+ } else {
+ // todo: probably rather an error?
+ jcrPath = uri;
+ }
+ try {
+ return service.getNamePathResolver(sessionInfo).getQPath(Text.unescape(jcrPath));
+ } catch (NameException e) {
+ throw new RepositoryException(e);
+ }
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public NodeId getNodeId(String uri, SessionInfo sessionInfo) throws RepositoryException {
+ return getNodeId(uri, sessionInfo, false);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public NodeId getNodeIdAfterEvent(String uri, SessionInfo sessionInfo, boolean nodeIsGone) throws RepositoryException {
+ return getNodeId(uri, sessionInfo, nodeIsGone);
+ }
+
/**
* @inheritDoc
*/
@@ -316,7 +332,7 @@ class URIResolverImpl implements URIReso
// make sure propName is unescaped
String propName = Text.unescape(Text.getName(uri, true));
// retrieve parent node id
- NodeId parentId = getNodeId(parentUri, sessionInfo);
+ NodeId parentId = getNodeId(parentUri, sessionInfo, false);
// build property id
try {
Name name = service.getNamePathResolver(sessionInfo).getQName(propName);