svn commit: r1404899 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: plugins/index/old/ query/ spi/query/

2012-11-02 Thread thomasm
Author: thomasm
Date: Fri Nov  2 09:08:59 2012
New Revision: 1404899

URL: http://svn.apache.org/viewvc?rev=1404899view=rev
Log:
OAK-404 Log (slow) queries (log all queries and query plans with log level 
'debug')

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/CompositeQueryIndexProvider.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixIndex.java?rev=1404899r1=1404898r2=1404899view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixIndex.java
 Fri Nov  2 09:08:59 2012
@@ -132,5 +132,10 @@ public class PrefixIndex implements PInd
 public boolean isUnique() {
 return tree.isUnique();
 }
+
+@Override
+public String toString() {
+return getIndexNodeName();
+}
 
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java?rev=1404899r1=1404898r2=1404899view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java
 Fri Nov  2 09:08:59 2012
@@ -112,5 +112,10 @@ public class PropertyContentIndex implem
 return false;
 }
 }
+
+@Override
+public String toString() {
+return index.toString();
+}
 
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyIndex.java?rev=1404899r1=1404898r2=1404899view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyIndex.java
 Fri Nov  2 09:08:59 2012
@@ -136,5 +136,10 @@ public class PropertyIndex implements PI
 public boolean isUnique() {
 return tree.isUnique();
 }
+
+@Override
+public String toString() {
+return getIndexNodeName();
+}
 
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1404899r1=1404898r2=1404899view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 Fri Nov  2 09:08:59 2012
@@ -53,6 +53,8 @@ import org.apache.jackrabbit.oak.spi.que
 import org.apache.jackrabbit.oak.spi.query.PropertyValues;
 import org.apache.jackrabbit.oak.spi.query.QueryIndex;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Represents a parsed query. Lifecycle: use the constructor to create a new
@@ -72,6 +74,8 @@ public class Query {
  */
 public static final String JCR_SCORE = jcr:score;
 
+private static final Logger LOG = 
LoggerFactory.getLogger(QueryEngineImpl.class);
+
 final SourceImpl source;
 final ConstraintImpl constraint;
 final HashMapString, PropertyValue bindVariableMap = new HashMapString, 
PropertyValue();
@@ -308,6 +312,9 @@ public class Query {
 null);
 it = Arrays.asList(r).iterator();
 } else {
+if (LOG.isDebugEnabled()) {
+

svn commit: r1404903 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/OakAuthorizableProperties.java

2012-11-02 Thread angela
Author: angela
Date: Fri Nov  2 09:50:56 2012
New Revision: 1404903

URL: http://svn.apache.org/viewvc?rev=1404903view=rev
Log:
OAK-50 : Implement User Management (WIP)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/OakAuthorizableProperties.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/OakAuthorizableProperties.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/OakAuthorizableProperties.java?rev=1404903r1=1404902r2=1404903view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/OakAuthorizableProperties.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/OakAuthorizableProperties.java
 Fri Nov  2 09:50:56 2012
@@ -28,6 +28,7 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.TreeLocation;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.plugins.name.NamespaceConstants;
 import org.apache.jackrabbit.oak.plugins.value.ValueFactoryImpl;
 import org.apache.jackrabbit.oak.util.NodeUtil;
@@ -122,7 +123,8 @@ class OakAuthorizableProperties implemen
 n.removeProperty(name);
 }
 }
-n.setProperty(name, value);
+PropertyState propertyState = PropertyStates.createProperty(name, 
value);
+n.setProperty(propertyState);
 }
 
 /**
@@ -143,7 +145,8 @@ class OakAuthorizableProperties implemen
 n.removeProperty(name);
 }
 }
-n.setProperty(name, values);
+PropertyState propertyState = PropertyStates.createProperty(name, 
values);
+n.setProperty(propertyState);
 }
 
 /**
@@ -202,7 +205,7 @@ class OakAuthorizableProperties implemen
 // FIXME: add proper check for protection and declaring nt of the
 // FIXME: property using nt functionality provided by nt-plugins
 String prefix = Text.getNamespacePrefix(property.getName());
-return NamespaceConstants.RESERVED_PREFIXES.contains(prefix);
+return !NamespaceConstants.RESERVED_PREFIXES.contains(prefix);
 }
 
 /**




svn commit: r1404905 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/spi/security/ main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ test/java/org/

2012-11-02 Thread angela
Author: angela
Date: Fri Nov  2 09:54:25 2012
New Revision: 1404905

URL: http://svn.apache.org/viewvc?rev=1404905view=rev
Log:
 OAK-91 - Implement Authentication Support (WIP)

Added:

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/TestLoginModule.java
Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/DefaultSyncHandler.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModule.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalUser.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/SyncMode.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/AbstractSecurityTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/ConfigurationParametersTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java?rev=1404905r1=1404904r2=1404905view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java
 Fri Nov  2 09:54:25 2012
@@ -55,6 +55,10 @@ public class ConfigurationParameters {
 // private ---
 @SuppressWarnings(unchecked)
 private static T T convert(Object configProperty, T defaultValue) {
+if (configProperty == null) {
+return defaultValue;
+}
+
 T value;
 String str = configProperty.toString();
 Class targetClass = (defaultValue == null) ? configProperty.getClass() 
: defaultValue.getClass();

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/DefaultSyncHandler.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/DefaultSyncHandler.java?rev=1404905r1=1404904r2=1404905view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/DefaultSyncHandler.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/DefaultSyncHandler.java
 Fri Nov  2 09:54:25 2012
@@ -21,9 +21,11 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import javax.annotation.CheckForNull;
+import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
 import javax.jcr.Value;
 import javax.jcr.ValueFactory;
+import javax.jcr.ValueFormatException;
 
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
@@ -109,7 +111,7 @@ public class DefaultSyncHandler implemen
 @CheckForNull
 private User createUser(ExternalUser externalUser) throws 
RepositoryException, SyncException {
 if (mode.contains(SyncMode.MODE_CREATE_USER)) {
-User user = userManager.createUser(externalUser.getId(), null, 
externalUser.getPrincipal(), externalUser.getPath());
+User user = userManager.createUser(externalUser.getId(), 
externalUser.getPassword(), externalUser.getPrincipal(), 
externalUser.getPath());
 syncAuthorizable(externalUser, user);
 return user;
 } else {
@@ -157,24 +159,46 @@ public class DefaultSyncHandler implemen
 Object prop = properties.get(key);
 if (prop instanceof Collection) {
 Value[] values = createValues((Collection) prop);
-authorizable.setProperty(key, values);
+if (values != null) {
+authorizable.setProperty(key, values);
+}
 } else {
 Value value = createValue(prop);
-authorizable.setProperty(key, value);
+if (value != null) {
+

svn commit: r1404909 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java

2012-11-02 Thread mduerig
Author: mduerig
Date: Fri Nov  2 10:22:54 2012
New Revision: 1404909

URL: http://svn.apache.org/viewvc?rev=1404909view=rev
Log:
 OAK-418: Reduce/avoid re-resolving the underlying tree instances on every 
access in Item/Property/NodeDelegate

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java

jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java?rev=1404909r1=1404908r2=1404909view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
 Fri Nov  2 10:22:54 2012
@@ -658,7 +658,7 @@ public class TreeImpl implements Tree, P
 String name = PathUtils.getName(relPath);
 PropertyState property = child.internalGetProperty(name);
 if (property != null) {
-return new PropertyLocation(new NodeLocation(child), property);
+return new PropertyLocation(new NodeLocation(child), name);
 }
 else {
 child = child.internalGetChild(name);
@@ -691,11 +691,11 @@ public class TreeImpl implements Tree, P
 
 public class PropertyLocation implements TreeLocation {
 private final NodeLocation parent;
-private final PropertyState property;
+private final String name;
 
-private PropertyLocation(NodeLocation parent, PropertyState property) {
+private PropertyLocation(NodeLocation parent, String name) {
 this.parent = checkNotNull(parent);
-this.property = checkNotNull(property);
+this.name = checkNotNull(name);
 }
 
 @Override
@@ -710,7 +710,7 @@ public class TreeImpl implements Tree, P
 
 @Override
 public String getPath() {
-return PathUtils.concat(parent.getPath(), property.getName());
+return PathUtils.concat(parent.getPath(), name);
 }
 
 @Override
@@ -720,6 +720,7 @@ public class TreeImpl implements Tree, P
 
 @Override
 public PropertyState getProperty() {
+PropertyState property = parent.tree.internalGetProperty(name);
 return canRead(property)
 ? property
 : null;
@@ -727,7 +728,7 @@ public class TreeImpl implements Tree, P
 
 @Override
 public Status getStatus() {
-return parent.tree.getPropertyStatus(property.getName());
+return parent.tree.getPropertyStatus(name);
 }
 
 /**
@@ -743,7 +744,7 @@ public class TreeImpl implements Tree, P
  * @return  {@code true} on success false otherwise
  */
 public boolean remove() {
-parent.tree.removeProperty(property.getName());
+parent.tree.removeProperty(name);
 return true;
 }
 }

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java?rev=1404909r1=1404908r2=1404909view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
 Fri Nov  2 10:22:54 2012
@@ -911,6 +911,19 @@ public class RepositoryTest extends Abst
 }
 
 @Test
+public void setPropertyAgain() throws RepositoryException {
+Session session = getAdminSession();
+Property p1 = session.getProperty(/foo/stringProp);
+
+Property p2 = p1.getParent().setProperty(stringProp, newValue);
+Property p3 = session.getProperty(/foo/stringProp);
+
+assertEquals(newValue, p1.getString());
+assertEquals(newValue, p2.getString());
+assertEquals(newValue, p3.getString());
+}
+
+@Test
 public void setDoubleNaNProperty() throws RepositoryException, IOException 
{
 Node parentNode = getNode(TEST_PATH);
 addProperty(parentNode, NaN, 
getAdminSession().getValueFactory().createValue(Double.NaN));




svn commit: r1404926 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/query/ast/ test/java/org/apache/jackrabbit/oak/plugins/index/lucene/ test/java/org/apache/jackrabbit/o

2012-11-02 Thread thomasm
Author: thomasm
Date: Fri Nov  2 11:23:07 2012
New Revision: 1404926

URL: http://svn.apache.org/viewvc?rev=1404926view=rev
Log:
OAK-419 Query: Conditions are not pushed to outer join selectors
OAK-420 Query: Lucene index problem with isdescendantnode

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NotImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_measure.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NotImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NotImpl.java?rev=1404926r1=1404925r2=1404926view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NotImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NotImpl.java
 Fri Nov  2 11:23:07 2012
@@ -52,6 +52,21 @@ public class NotImpl extends ConstraintI
 
 @Override
 public void restrict(FilterImpl f) {
+if (f.getSelector().outerJoin) {
+// we need to be careful with the condition 
+// NOT (property IS NOT NULL)
+// (which is the same as 
+// property IS NULL) because
+// this might cause an index to ignore
+// the join condition property = x
+// for example in:
+// select * from a left outer join b on a.x = b.y
+// where not b.y is not null
+// must not result in the index to check for
+// b.y is null, because that would alter the
+// result
+return;
+}
 // ignore
 // TODO convert NOT conditions
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1404926r1=1404925r2=1404926view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
 Fri Nov  2 11:23:07 2012
@@ -126,13 +126,20 @@ public class SelectorImpl extends Source
 if (joinCondition != null) {
 joinCondition.restrict(f);
 }
-if (!outerJoin) {
-// for outer joins, query constraints can't be applied to the
-// filter, because that would alter the result
-if (queryConstraint != null) {
-queryConstraint.restrict(f);
-}
+
+// all conditions can be pushed to the selectors -
+// except in some cases to outer joined selectors,
+// but the exceptions are handled in the condition
+// itself.
+// An example where it *is* a problem:
+//  select * from a left outer join b on a.x = b.y
+// where b.y is null - in this case the selector b
+// must not use an index condition on y is null
+// (.. is null must be written as not .. is not null).
+if (queryConstraint != null) {
+queryConstraint.restrict(f);
 }
+
 return f;
 }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java?rev=1404926r1=1404925r2=1404926view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java
 Fri Nov  2 11:23:07 2012
@@ -22,6 +22,8 @@ import org.apache.jackrabbit.oak.api.Tre
 import org.apache.jackrabbit.oak.plugins.index.IndexHookManager;
 import org.apache.jackrabbit.oak.plugins.nodetype.InitialContent;
 import org.apache.jackrabbit.oak.query.AbstractQueryTest;
+import org.junit.Ignore;
+import org.junit.Test;
 
 /**
  * Tests the query engine using the default index implementation: 

svn commit: r1405027 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml: PropInfo.java ProtectedItemImporter.java TextValue.java

2012-11-02 Thread angela
Author: angela
Date: Fri Nov  2 16:14:53 2012
New Revision: 1405027

URL: http://svn.apache.org/viewvc?rev=1405027view=rev
Log:
OAK-414 : Importing protected properties (work in progress)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/PropInfo.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/ProtectedItemImporter.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/TextValue.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/PropInfo.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/PropInfo.java?rev=1405027r1=1405026r2=1405027view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/PropInfo.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/PropInfo.java
 Fri Nov  2 16:14:53 2012
@@ -54,7 +54,7 @@ public class PropInfo {
 /**
  * Hint indicating whether the property is multi- or single-value
  */
-public enum MultipleStatus { UNKNOWN, SINGLE, MULTIPLE }
+public enum MultipleStatus { UNKNOWN, MULTIPLE }
 private MultipleStatus multipleStatus;
 
 /**
@@ -108,7 +108,7 @@ public class PropInfo {
 }
 }
 
-public String getString() {
+public String getName() {
 return name;
 }
 
@@ -116,10 +116,24 @@ public class PropInfo {
 return type;
 }
 
+public TextValue getTextValue() throws RepositoryException {
+if (multipleStatus == MultipleStatus.MULTIPLE) {
+throw new RepositoryException(TODO);
+}
+return values[0];
+}
+
 public TextValue[] getTextValues() {
 return values;
 }
 
+public Value getValue(Type targetType, NamePathMapper namePathMapper) 
throws RepositoryException {
+if (multipleStatus == MultipleStatus.MULTIPLE) {
+throw new RepositoryException(TODO);
+}
+return values[0].getValue(targetType, namePathMapper);
+}
+
 public Value[] getValues(Type targetType, NamePathMapper namePathMapper) 
throws RepositoryException {
 Value[] va = new Value[values.length];
 for (int i = 0; i  values.length; i++) {

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/ProtectedItemImporter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/ProtectedItemImporter.java?rev=1405027r1=1405026r2=1405027view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/ProtectedItemImporter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/ProtectedItemImporter.java
 Fri Nov  2 16:14:53 2012
@@ -17,8 +17,8 @@
 package org.apache.jackrabbit.oak.spi.xml;
 
 import javax.jcr.RepositoryException;
+import javax.jcr.Session;
 
-import org.apache.jackrabbit.api.JackrabbitSession;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 
@@ -45,7 +45,7 @@ public abstract interface ProtectedItemI
  * @return {@code true} if this importer was successfully initialized and
  * is able to handle an import with the given setup; {@code false} 
otherwise.
  */
-boolean init(JackrabbitSession session, Root root,
+boolean init(Session session, Root root,
  NamePathMapper namePathMapper,
  boolean isWorkspaceImport, int uuidBehavior,
  ReferenceChangeTracker referenceTracker);

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/TextValue.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/TextValue.java?rev=1405027r1=1405026r2=1405027view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/TextValue.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/xml/TextValue.java
 Fri Nov  2 16:14:53 2012
@@ -29,6 +29,8 @@ import org.apache.jackrabbit.oak.namepat
  */
 public interface TextValue {
 
+String getString();
+
 // TODO: review again
 Value getValue(Type targetType, NamePathMapper namePathMapper) throws 
ValueFormatException, RepositoryException;
 




svn commit: r1405029 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: security/user/ spi/security/user/ util/

2012-11-02 Thread angela
Author: angela
Date: Fri Nov  2 16:16:05 2012
New Revision: 1405029

URL: http://svn.apache.org/viewvc?rev=1405029view=rev
Log:
OAK-50 : Implement User Management (WIP)

Added:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserImporter.java
Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserManagerImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserQueryManager.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/UserConstants.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java?rev=1405029r1=1405028r2=1405029view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java
 Fri Nov  2 16:16:05 2012
@@ -182,21 +182,24 @@ class MembershipProvider extends Authori
 }
 
 boolean addMember(Tree groupTree, Tree newMemberTree) {
+return addMember(groupTree, getContentID(newMemberTree));
+}
+
+boolean addMember(Tree groupTree, String memberContentId) {
 if (useMemberNode(groupTree)) {
 NodeUtil groupNode = new NodeUtil(groupTree);
 NodeUtil membersNode = groupNode.getOrAddChild(REP_MEMBERS, 
NT_REP_MEMBERS);
 // TODO: add implementation
 throw new UnsupportedOperationException(not implemented: 
addMember with member-node hierarchy);
 } else {
-String toAdd = getContentID(newMemberTree);
 PropertyState property = groupTree.getProperty(REP_MEMBERS);
 PropertyBuilderString propertyBuilder = property == null
 ? MemoryPropertyBuilder.create(WEAKREFERENCE, REP_MEMBERS)
 : MemoryPropertyBuilder.create(WEAKREFERENCE, property);
-if (propertyBuilder.hasValue(toAdd)) {
+if (propertyBuilder.hasValue(memberContentId)) {
 return false;
 } else {
-propertyBuilder.addValue(toAdd);
+propertyBuilder.addValue(memberContentId);
 }
 groupTree.setProperty(propertyBuilder.getPropertyState(true));
 }
@@ -212,6 +215,7 @@ class MembershipProvider extends Authori
 }
 } else {
 String toRemove = getContentID(memberTree);
+// FIXME: remove usage of MemoryPropertyBuilder (OAK-372)
 PropertyState property = groupTree.getProperty(REP_MEMBERS);
 PropertyBuilderString propertyBuilder = property == null
 ? MemoryPropertyBuilder.create(WEAKREFERENCE, REP_MEMBERS)

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java?rev=1405029r1=1405028r2=1405029view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java
 Fri Nov  2 16:16:05 2012
@@ -30,6 +30,7 @@ import org.apache.jackrabbit.oak.spi.sec
 import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
 import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration;
 import org.apache.jackrabbit.oak.spi.security.user.action.AuthorizableAction;
+import org.apache.jackrabbit.oak.spi.xml.ProtectedItemImporter;
 
 /**
  * UserConfigurationImpl... TODO
@@ -45,6 +46,7 @@ public class UserConfigurationImpl exten
 this.securityProvider = securityProvider;
 }
 
+//-- SecurityConfiguration 
---
 @Nonnull
 @Override
 public ConfigurationParameters getConfigurationParameters() {
@@ -59,6 +61,13 @@ public class UserConfigurationImpl exten
 
 @Nonnull
 @Override
+public ListProtectedItemImporter getProtectedItemImporters() {
+return Collections.ProtectedItemImportersingletonList(new 
UserImporter(config));
+}
+
+ 

svn commit: r1405041 - /jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java

2012-11-02 Thread mduerig
Author: mduerig
Date: Fri Nov  2 16:36:28 2012
New Revision: 1405041

URL: http://svn.apache.org/viewvc?rev=1405041view=rev
Log:
OAK-170: Child node state builder
test case for NodeBuilder.reset

Modified:

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java?rev=1405041r1=1405040r2=1405041view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java
 Fri Nov  2 16:36:28 2012
@@ -114,4 +114,18 @@ public class MemoryNodeBuilderTest {
 assertEquals(0, child.getChildNodeCount()); // reconnect!
 }
 
+@Test
+public void testReset() {
+NodeBuilder root = new MemoryNodeBuilder(BASE);
+NodeBuilder child = root.child(x);
+child.child(new);
+
+assertTrue(child.hasChildNode(new));
+assertTrue(root.child(x).hasChildNode(new));
+
+root.reset(BASE);
+assertFalse(child.hasChildNode(new));
+assertFalse(root.child(x).hasChildNode(new));
+}
+
 }




svn commit: r1405050 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java

2012-11-02 Thread mduerig
Author: mduerig
Date: Fri Nov  2 17:00:57 2012
New Revision: 1405050

URL: http://svn.apache.org/viewvc?rev=1405050view=rev
Log:
null check

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java?rev=1405050r1=1405049r2=1405050view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java
 Fri Nov  2 17:00:57 2012
@@ -40,6 +40,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static com.google.common.base.Preconditions.checkNotNull;
 import static org.apache.jackrabbit.oak.api.Type.BOOLEAN;
 import static org.apache.jackrabbit.oak.api.Type.DATE;
 import static org.apache.jackrabbit.oak.api.Type.LONG;
@@ -60,8 +61,8 @@ public class NodeUtil {
 private final Tree tree;
 
 public NodeUtil(Tree tree, NameMapper mapper) {
-this.mapper = mapper;
-this.tree = tree;
+this.mapper = checkNotNull(mapper);
+this.tree = checkNotNull(tree);
 }
 
 public NodeUtil(Tree tree) {




svn commit: r1405182 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBui

2012-11-02 Thread mduerig
Author: mduerig
Date: Fri Nov  2 22:09:17 2012
New Revision: 1405182

URL: http://svn.apache.org/viewvc?rev=1405182view=rev
Log:
OAK-421: NodeBuilder.reset might lead to inconsistent builder

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java?rev=1405182r1=1405181r2=1405182view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
 Fri Nov  2 22:09:17 2012
@@ -265,7 +265,7 @@ public class MemoryNodeBuilder implement
 if (this == root) {
 baseState = checkNotNull(newBase);
 writeState = new MutableNodeState(baseState);
-revision++;
+revision = 0;
 } else {
 throw new IllegalStateException(Cannot reset a non-root builder);
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java?rev=1405182r1=1405181r2=1405182view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java
 Fri Nov  2 22:09:17 2012
@@ -128,4 +128,15 @@ public class MemoryNodeBuilderTest {
 assertFalse(root.child(x).hasChildNode(new));
 }
 
+@Test
+public void testReset2() {
+NodeBuilder root = new MemoryNodeBuilder(BASE);
+NodeBuilder x = root.child(x);
+NodeBuilder y = x.child(y);
+
+root.reset(BASE);
+assertTrue(root.hasChildNode(x));
+assertFalse(x.hasChildNode(y));
+}
+
 }




svn commit: r1405213 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java

2012-11-02 Thread mduerig
Author: mduerig
Date: Fri Nov  2 23:15:01 2012
New Revision: 1405213

URL: http://svn.apache.org/viewvc?rev=1405213view=rev
Log:
OAK-421: NodeBuilder.reset might lead to inconsistent builder

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java?rev=1405213r1=1405212r2=1405213view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
 Fri Nov  2 23:15:01 2012
@@ -265,7 +265,7 @@ public class MemoryNodeBuilder implement
 if (this == root) {
 baseState = checkNotNull(newBase);
 writeState = new MutableNodeState(baseState);
-revision = 0;
+revision += 2;  // Make sure we are ahead of the revisions of all 
other builders root at this builder
 } else {
 throw new IllegalStateException(Cannot reset a non-root builder);
 }




svn commit: r1405214 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core: RootImpl.java TreeImpl.java

2012-11-02 Thread mduerig
Author: mduerig
Date: Fri Nov  2 23:28:35 2012
New Revision: 1405214

URL: http://svn.apache.org/viewvc?rev=1405214view=rev
Log:
OAK-422: Replace PurgeListener in TreeImpl with NodeBuilder.reset()

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java?rev=1405214r1=1405213r2=1405214view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java
 Fri Nov  2 23:28:35 2012
@@ -22,9 +22,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
-import java.util.ArrayList;
 import java.util.Collections;
-import java.util.List;
+
 import javax.annotation.Nonnull;
 import javax.security.auth.Subject;
 
@@ -84,31 +83,11 @@ public class RootImpl implements Root {
  */
 private int modCount;
 
-/**
- * Listeners which needs to be notified as soon as {@link 
#purgePendingChanges()}
- * is called. Listeners are removed from this list after being called. If 
further
- * notifications are required, they need to explicitly re-register.
- *
- * The {@link TreeImpl} instances us this mechanism to dispose of its 
associated
- * {@link NodeBuilder} on purge. Keeping a reference on those {@code 
TreeImpl}
- * instances {@code NodeBuilder} (i.e. those which are modified) prevents 
them
- * from being prematurely garbage collected.
- */
-private ListPurgeListener purgePurgeListeners = new 
ArrayListPurgeListener();
-
 private volatile ConflictHandler conflictHandler = 
DefaultConflictHandler.OURS;
 
 private final QueryIndexProvider indexProvider;
 
 /**
- * Purge listener.
- * @see #purgePurgeListeners
- */
-public interface PurgeListener {
-void purged();
-}
-
-/**
  * New instance bases on a given {@link NodeStore} and a workspace
  *
  * @param store node store
@@ -175,6 +154,7 @@ public class RootImpl implements Root {
 purgePendingChanges();
 source.moveTo(destParent, destName);
 boolean success = branch.move(sourcePath, destPath);
+reset();
 if (success) {
 getTree(getParentPath(sourcePath)).updateChildOrder();
 getTree(getParentPath(destPath)).updateChildOrder();
@@ -187,6 +167,7 @@ public class RootImpl implements Root {
 checkLive();
 purgePendingChanges();
 boolean success = branch.copy(sourcePath, destPath);
+reset();
 if (success) {
 getTree(getParentPath(destPath)).updateChildOrder();
 }
@@ -328,16 +309,6 @@ public class RootImpl implements Root {
 return branch.getRoot().builder();
 }
 
-/**
- * Add a {@code PurgeListener} to this instance. Listeners are 
automatically
- * unregistered after having been called. If further notifications are 
required,
- * they need to explicitly re-register.
- * @param purgeListener  listener
- */
-void addListener(PurgeListener purgeListener) {
-purgePurgeListeners.add(purgeListener);
-}
-
 // TODO better way to determine purge limit. See OAK-175
 void updated() {
 if (++modCount  PURGE_LIMIT) {
@@ -354,19 +325,17 @@ public class RootImpl implements Root {
 
 /**
  * Purge all pending changes to the underlying {@link NodeStoreBranch}.
- * All registered {@link PurgeListener}s are notified.
  */
 private void purgePendingChanges() {
 branch.setRoot(rootTree.getNodeState());
-notifyListeners();
+reset();
 }
 
-private void notifyListeners() {
-ListPurgeListener purgeListeners = this.purgePurgeListeners;
-this.purgePurgeListeners = new ArrayListPurgeListener();
-
-for (PurgeListener purgeListener : purgeListeners) {
-purgeListener.purged();
-}
+/**
+ * Reset the root builder to the branch's current root state
+ */
+private void reset() {
+rootTree.getNodeBuilder().reset(branch.getRoot());
 }
+
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java?rev=1405214r1=1405213r2=1405214view=diff
==
---