svn commit: r1404899 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: plugins/index/old/ query/ spi/query/
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
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/
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
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
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
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/
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
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
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
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
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
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 == ---