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 2008/10/20 23:30:12 UTC
svn commit: r706419 - in /jackrabbit/branches/1.5: ./
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/
jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/
jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ ja...
Author: jukka
Date: Mon Oct 20 14:30:12 2008
New Revision: 706419
URL: http://svn.apache.org/viewvc?rev=706419&view=rev
Log:
1.5: Merged revisions 706242 and 706273 (JCR-1248 and JCR-1821)
Added:
jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/IsSameTest.java
- copied unchanged from r706273, jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/IsSameTest.java
Modified:
jackrabbit/branches/1.5/ (props changed)
jackrabbit/branches/1.5/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/AccessControlPolicyIteratorAdapter.java (props changed)
jackrabbit/branches/1.5/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java
jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java
jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java
Propchange: jackrabbit/branches/1.5/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Oct 20 14:30:12 2008
@@ -1,2 +1,2 @@
/jackrabbit/branches/1.3:631261
-/jackrabbit/trunk:703899-704158,704165,704167,704324,704358,704361,704864,704933,704939,705010,705033,705243,705496,705522,705579,705925,705932,705934,705937-705938,705961
+/jackrabbit/trunk:703899-704158,704165,704167,704324,704358,704361,704864,704933,704939,705010,705033,705243,705496,705522,705579,705925,705932,705934,705937-705938,705961,706242,706273
Propchange: jackrabbit/branches/1.5/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/AccessControlPolicyIteratorAdapter.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Oct 20 14:30:12 2008
@@ -1,2 +1,2 @@
/jackrabbit/branches/1.3/jackrabbit-core/src/main/java/org/apache/jackrabbit/commons/iterator/AccessControlPolicyIteratorAdapter.java:631261
-/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/AccessControlPolicyIteratorAdapter.java:705938,705961
+/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/AccessControlPolicyIteratorAdapter.java:705938,705961,706242,706273
Modified: jackrabbit/branches/1.5/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java?rev=706419&r1=706418&r2=706419&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java Mon Oct 20 14:30:12 2008
@@ -477,7 +477,28 @@
}
return buffer.toString();
}
-
+
+ /** Escapes all illegal XPath search characters of a string.
+ * <p>Example:<br>
+ * A search string like 'test?' will run into a ParseException
+ * documented in http://issues.apache.org/jira/browse/JCR-1248
+ *
+ * @param string the string to encode
+ * @return the escaped string
+ */
+ public static String escapeIllegalXpathSearchChars(String s) {
+ StringBuffer sb = new StringBuffer();
+ sb.append(s.substring(0, (s.length() - 1)));
+ char c = s.charAt(s.length() - 1);
+ // NOTE: keep this in sync with _ESCAPED_CHAR below!
+ if (c == '!' || c == '(' || c == ':' || c == '^'
+ || c == '[' || c == ']' || c == '\"' || c == '{'
+ || c == '}' || c == '?') {
+ sb.append('\\');
+ }
+ sb.append(c);
+ return sb.toString();
+ }
/**
* Unescapes previously escaped jcr chars.
* <p/>
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java?rev=706419&r1=706418&r2=706419&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java Mon Oct 20 14:30:12 2008
@@ -26,6 +26,7 @@
import org.apache.jackrabbit.jcr2spi.operation.Operation;
import org.apache.jackrabbit.jcr2spi.util.LogUtil;
import org.apache.jackrabbit.jcr2spi.config.CacheBehaviour;
+import org.apache.jackrabbit.jcr2spi.hierarchy.HierarchyEntry;
import org.apache.jackrabbit.jcr2spi.hierarchy.NodeEntry;
import org.apache.jackrabbit.spi.Path;
import org.apache.jackrabbit.spi.Name;
@@ -183,11 +184,17 @@
if (this == otherItem) {
return true;
}
+ if (isNode() != otherItem.isNode()) {
+ return false;
+ }
if (otherItem instanceof ItemImpl) {
ItemImpl other = (ItemImpl) otherItem;
if (this.state == other.state) {
return true;
}
+ // check status of the other item.
+ other.checkStatus();
+
// 2 items may only be the same if the were accessed from Sessions
// bound to the same workspace
String otherWspName = other.session.getWorkspace().getName();
@@ -195,6 +202,10 @@
// in addition they must provide the same id irrespective of
// any transient modifications.
if (state.getStatus() != Status.NEW && other.state.getStatus() != Status.NEW ) {
+ // if any ancestor is _invalidated_ force it's reload in
+ // order to detect id changes.
+ updateId(state);
+ updateId(other.state);
return state.getWorkspaceId().equals(other.state.getWorkspaceId());
}
/* else:
@@ -205,7 +216,7 @@
- either of the two items does not have a workspace state.
therefore the items cannot be the same, since one has been
transiently added in one but not the other session.
- */
+ */
}
}
return false;
@@ -531,4 +542,22 @@
String safeGetJCRPath() {
return LogUtil.safeGetJCRPath(getItemState(), session.getPathResolver());
}
+
+ /**
+ *
+ * @param state
+ * @throws RepositoryException
+ */
+ private static void updateId(ItemState state) throws RepositoryException {
+ HierarchyEntry he = state.getHierarchyEntry();
+ while (he.getStatus() != Status.INVALIDATED) {
+ he = he.getParent();
+ if (he == null) {
+ // root reached without intermediate invalidated entry
+ return;
+ }
+ }
+ // he is INVALIDATED -> force reloading in order to be aware of id changes
+ he.getItemState();
+ }
}
Modified: jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java?rev=706419&r1=706418&r2=706419&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java (original)
+++ jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java Mon Oct 20 14:30:12 2008
@@ -94,6 +94,7 @@
suite.addTestSuite(HierarchyNodeTest.class);
suite.addTestSuite(LazyItemIteratorTest.class);
suite.addTestSuite(ExternalModificationTest.class);
+ suite.addTestSuite(IsSameTest.class);
return suite;
}