Author: mreutegg
Date: Tue Aug 7 14:32:49 2018
New Revision: 1837601
URL: http://svn.apache.org/viewvc?rev=1837601&view=rev
Log:
OAK-7688: Replace usage of static ValueFactoryImpl
Added:
jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/PartialValueFactory.java
(with props)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveNodeTypeImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/PropertyDefinitionImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AuthorizablePropertiesImpl.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/QueryUtilTest.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/PropertyImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACE.java
jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java
jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/ValueFactoryImpl.java
jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/ValueImpl.java
jackrabbit/oak/trunk/oak-store-spi/src/test/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStatesTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveNodeTypeImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveNodeTypeImpl.java?rev=1837601&r1=1837600&r2=1837601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveNodeTypeImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveNodeTypeImpl.java
Tue Aug 7 14:32:49 2018
@@ -37,7 +37,7 @@ import javax.jcr.nodetype.PropertyDefini
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl;
+import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory;
import org.apache.jackrabbit.oak.spi.nodetype.EffectiveNodeType;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
@@ -61,10 +61,13 @@ class EffectiveNodeTypeImpl implements E
private final ReadOnlyNodeTypeManager ntMgr;
+ private final PartialValueFactory valueFactory;
+
EffectiveNodeTypeImpl(
NodeTypeImpl primary, NodeTypeImpl[] mixins,
ReadOnlyNodeTypeManager ntMgr) {
this.ntMgr = ntMgr;
+ this.valueFactory = new PartialValueFactory(ntMgr.getNamePathMapper());
addNodeType(checkNotNull(primary));
for (NodeTypeImpl mixin : checkNotNull(mixins)) {
@@ -286,12 +289,12 @@ class EffectiveNodeTypeImpl implements E
NodeType nt = definition.getDeclaringNodeType();
if (definition.isMultiple()) {
- List<Value> values = ValueFactoryImpl.createValues(property,
ntMgr.getNamePathMapper());
+ List<Value> values = valueFactory.createValues(property);
if (!nt.canSetProperty(property.getName(), values.toArray(new
Value[values.size()]))) {
throw new ConstraintViolationException("Cannot set property '"
+ property.getName() + "' to '" + values + '\'');
}
} else {
- Value v = ValueFactoryImpl.createValue(property,
ntMgr.getNamePathMapper());
+ Value v = valueFactory.createValue(property);
if (!nt.canSetProperty(property.getName(), v)) {
throw new ConstraintViolationException("Cannot set property '"
+ property.getName() + "' to '" + v + '\'');
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/PropertyDefinitionImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/PropertyDefinitionImpl.java?rev=1837601&r1=1837600&r2=1837601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/PropertyDefinitionImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/PropertyDefinitionImpl.java
Tue Aug 7 14:32:49 2018
@@ -30,7 +30,7 @@ import org.apache.jackrabbit.oak.api.Pro
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
-import org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl;
+import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory;
import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
/**
@@ -106,10 +106,10 @@ class PropertyDefinitionImpl extends Ite
if (property == null) {
return null;
} else if (property.isArray()) {
- List<Value> values = ValueFactoryImpl.createValues(property,
mapper);
+ List<Value> values = new
PartialValueFactory(mapper).createValues(property);
return values.toArray(NO_VALUES);
} else {
- Value value = ValueFactoryImpl.createValue(property, mapper);
+ Value value = new
PartialValueFactory(mapper).createValue(property);
return new Value[] { value };
}
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java?rev=1837601&r1=1837600&r2=1837601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java
Tue Aug 7 14:32:49 2018
@@ -51,7 +51,7 @@ import org.apache.jackrabbit.oak.api.Com
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
-import org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl;
+import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory;
import org.apache.jackrabbit.oak.spi.commit.DefaultEditor;
import org.apache.jackrabbit.oak.spi.commit.Editor;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -146,6 +146,8 @@ public class TypeEditor extends DefaultE
private static final Logger log =
LoggerFactory.getLogger(TypeEditor.class);
+ private final PartialValueFactory valueFactory;
+
private final Set<String> typesToCheck;
private boolean checkThisNode;
@@ -168,6 +170,7 @@ public class TypeEditor extends DefaultE
ConstraintViolationCallback callback, Set<String> typesToCheck,
NodeState types,
String primary, Iterable<String> mixins, NodeBuilder builder)
throws CommitFailedException {
+ this.valueFactory = new PartialValueFactory(NamePathMapper.DEFAULT);
this.callback = checkNotNull(callback);
this.typesToCheck = typesToCheck;
this.checkThisNode =
@@ -187,7 +190,8 @@ public class TypeEditor extends DefaultE
@Nullable String primary, @NotNull Iterable<String> mixins,
@NotNull NodeBuilder builder,
boolean validate)
throws CommitFailedException {
- this.callback= parent.callback;
+ this.valueFactory = parent.valueFactory;
+ this.callback = parent.callback;
this.typesToCheck = parent.typesToCheck;
this.checkThisNode =
typesToCheck == null
@@ -205,6 +209,7 @@ public class TypeEditor extends DefaultE
* Test constructor.
*/
TypeEditor(EffectiveType effective) {
+ this.valueFactory = new PartialValueFactory(NamePathMapper.DEFAULT);
this.callback = TypeEditor.THROW_ON_CONSTRAINT_VIOLATION;
this.typesToCheck = null;
this.checkThisNode = true;
@@ -421,7 +426,7 @@ public class TypeEditor extends DefaultE
for (String constraint : constraints.getValue(STRINGS)) {
Predicate<Value> predicate = valueConstraint(requiredType,
constraint);
- for (Value v : ValueFactoryImpl.createValues(property,
NamePathMapper.DEFAULT)) {
+ for (Value v : valueFactory.createValues(property)) {
if (predicate.apply(v)) {
return;
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AuthorizablePropertiesImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AuthorizablePropertiesImpl.java?rev=1837601&r1=1837600&r2=1837601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AuthorizablePropertiesImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AuthorizablePropertiesImpl.java
Tue Aug 7 14:32:49 2018
@@ -34,7 +34,7 @@ import org.apache.jackrabbit.oak.namepat
import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
import org.apache.jackrabbit.oak.plugins.tree.TreeLocation;
-import org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl;
+import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory;
import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
import org.apache.jackrabbit.util.Text;
import org.jetbrains.annotations.NotNull;
@@ -102,10 +102,10 @@ class AuthorizablePropertiesImpl impleme
PropertyState property = getAuthorizableProperty(tree,
getLocation(tree, oakPath), true);
if (property != null) {
if (property.isArray()) {
- List<Value> vs = ValueFactoryImpl.createValues(property,
namePathMapper);
+ List<Value> vs = new
PartialValueFactory(namePathMapper).createValues(property);
values = vs.toArray(new Value[vs.size()]);
} else {
- values = new Value[]{ValueFactoryImpl.createValue(property,
namePathMapper)};
+ values = new Value[]{new
PartialValueFactory(namePathMapper).createValue(property)};
}
}
return values;
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/QueryUtilTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/QueryUtilTest.java?rev=1837601&r1=1837600&r2=1837601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/QueryUtilTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/query/QueryUtilTest.java
Tue Aug 7 14:32:49 2018
@@ -16,9 +16,11 @@
*/
package org.apache.jackrabbit.oak.security.user.query;
+import java.util.Calendar;
import java.util.List;
import java.util.Map;
import javax.jcr.NamespaceRegistry;
+import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
@@ -30,8 +32,7 @@ import org.apache.jackrabbit.oak.commons
import org.apache.jackrabbit.oak.namepath.impl.LocalNameMapper;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.namepath.impl.NamePathMapperImpl;
-import org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl;
-import org.apache.jackrabbit.oak.plugins.memory.PropertyValues;
+import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory;
import org.apache.jackrabbit.oak.spi.query.QueryConstants;
import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
import org.apache.jackrabbit.oak.spi.security.user.AuthorizableType;
@@ -44,6 +45,8 @@ import static org.junit.Assert.assertSam
public class QueryUtilTest {
+ private PartialValueFactory valueFactory = new
PartialValueFactory(NamePathMapper.DEFAULT);
+
private static void assertSearchRoot(@NotNull Map<AuthorizableType,
String> mapping, @NotNull ConfigurationParameters params) {
for (AuthorizableType type : mapping.keySet()) {
String expected = QueryConstants.SEARCH_ROOT_PATH +
mapping.get(type);
@@ -149,36 +152,37 @@ public class QueryUtilTest {
@Test
public void testFormatString() throws Exception {
String value = "'string\\value";
- assertEquals("'"+QueryUtils.escapeForQuery(value)+"'",
QueryUtil.format(ValueFactoryImpl.createValue(PropertyValues.newString(value),
NamePathMapper.DEFAULT)));
+ assertEquals("'"+QueryUtils.escapeForQuery(value)+"'",
QueryUtil.format(valueFactory.createValue(value)));
}
@Test
public void testFormatBoolean() throws Exception {
- assertEquals("'"+Boolean.TRUE.toString()+"'",
QueryUtil.format(ValueFactoryImpl.createValue(PropertyValues.newBoolean(true),
NamePathMapper.DEFAULT)));
+ assertEquals("'"+Boolean.TRUE.toString()+"'",
QueryUtil.format(valueFactory.createValue(true)));
}
@Test
public void testFormatLong() throws Exception {
- Value longV =
ValueFactoryImpl.createValue(PropertyValues.newLong(Long.MAX_VALUE),
NamePathMapper.DEFAULT);
+ Value longV = valueFactory.createValue(Long.MAX_VALUE);
assertEquals(String.valueOf(Long.MAX_VALUE), QueryUtil.format(longV));
}
@Test
public void testFormatDouble() throws Exception {
- Value doubleV =
ValueFactoryImpl.createValue(PropertyValues.newDouble(Double.valueOf(2.3)),
NamePathMapper.DEFAULT);
+ Value doubleV = valueFactory.createValue(2.3);
assertEquals(String.valueOf(2.3), QueryUtil.format(doubleV));
}
@Test
public void testFormatDate() throws Exception {
- Value dateV =
ValueFactoryImpl.createValue(PropertyValues.newDate("dateString"),
NamePathMapper.DEFAULT);
- assertEquals("xs:dateTime('dateString')", QueryUtil.format(dateV));
+ Value dateV = valueFactory.createValue(Calendar.getInstance());
+ String dateString = dateV.getString();
+ assertEquals("xs:dateTime('" + dateString + "')",
QueryUtil.format(dateV));
}
@Test(expected = RepositoryException.class)
public void testFormatOtherTypes() throws Exception {
- Value nameValue =
ValueFactoryImpl.createValue(PropertyValues.newName(JcrConstants.JCR_CREATED),
NamePathMapper.DEFAULT);
+ Value nameValue = valueFactory.createValue(JcrConstants.JCR_CREATED,
PropertyType.NAME);
QueryUtil.format(nameValue);
}
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java?rev=1837601&r1=1837600&r2=1837601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java
Tue Aug 7 14:32:49 2018
@@ -37,7 +37,7 @@ import org.apache.jackrabbit.api.observa
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
-import org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl;
+import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
/**
@@ -54,6 +54,8 @@ public class EventFactory {
private final NamePathMapper mapper;
+ private final PartialValueFactory valueFactory;
+
private final String userID;
private final String userData;
@@ -64,6 +66,7 @@ public class EventFactory {
EventFactory(NamePathMapper mapper, CommitInfo commitInfo) {
this.mapper = mapper;
+ this.valueFactory = new PartialValueFactory(mapper);
if (!commitInfo.isExternal()) {
this.userID = commitInfo.getUserId();
Object userData = commitInfo.getInfo().get(USER_DATA);
@@ -136,10 +139,10 @@ public class EventFactory {
private Object createValue(PropertyState property) {
if (property.isArray()) {
- List<Value> values = ValueFactoryImpl.createValues(property,
mapper);
+ List<Value> values = valueFactory.createValues(property);
return values.toArray(new Value[values.size()]);
} else {
- return ValueFactoryImpl.createValue(property, mapper);
+ return valueFactory.createValue(property);
}
}
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java?rev=1837601&r1=1837600&r2=1837601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java
Tue Aug 7 14:32:49 2018
@@ -30,6 +30,7 @@ import javax.jcr.query.RowIterator;
import org.apache.jackrabbit.commons.iterator.NodeIteratorAdapter;
import org.apache.jackrabbit.commons.iterator.RowIteratorAdapter;
+import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.PropertyValue;
import org.apache.jackrabbit.oak.api.Result;
import org.apache.jackrabbit.oak.api.ResultRow;
@@ -39,7 +40,8 @@ import org.apache.jackrabbit.oak.jcr.ses
import org.apache.jackrabbit.oak.jcr.session.SessionContext;
import org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate;
import org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate;
-import org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyValues;
+import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -57,10 +59,13 @@ public class QueryResultImpl implements
private final SessionDelegate sessionDelegate;
+ private final PartialValueFactory valueFactory;
+
public QueryResultImpl(SessionContext sessionContext, Result result) {
this.sessionContext = sessionContext;
this.sessionDelegate = sessionContext.getSessionDelegate();
this.result = result;
+ this.valueFactory = new PartialValueFactory(sessionContext);
}
@Override
@@ -234,7 +239,11 @@ public class QueryResultImpl implements
if (value == null) {
return null;
}
- return ValueFactoryImpl.createValue(value, sessionContext);
+ PropertyState state = PropertyValues.create(value);
+ if (state == null) {
+ throw new IllegalArgumentException("Failed to convert the
specified property value to a property state.");
+ }
+ return valueFactory.createValue(state);
}
}
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/PropertyImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/PropertyImpl.java?rev=1837601&r1=1837600&r2=1837601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/PropertyImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/PropertyImpl.java
Tue Aug 7 14:32:49 2018
@@ -44,7 +44,7 @@ import org.apache.jackrabbit.oak.api.Typ
import org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate;
import org.apache.jackrabbit.oak.jcr.delegate.PropertyDelegate;
import org.apache.jackrabbit.oak.jcr.session.operation.PropertyOperation;
-import org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl;
+import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory;
import org.apache.jackrabbit.value.ValueHelper;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
@@ -249,8 +249,8 @@ public class PropertyImpl extends ItemIm
@NotNull
@Override
public Value perform() throws RepositoryException {
- return ValueFactoryImpl.createValue(
- property.getSingleState(), sessionContext);
+ return new PartialValueFactory(sessionContext)
+ .createValue(property.getSingleState());
}
});
}
@@ -262,8 +262,8 @@ public class PropertyImpl extends ItemIm
@NotNull
@Override
public List<Value> perform() throws RepositoryException {
- return ValueFactoryImpl.createValues(
- property.getMultiState(), sessionContext);
+ return new PartialValueFactory(sessionContext)
+ .createValues(property.getMultiState());
}
}).toArray(NO_VALUES);
}
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java?rev=1837601&r1=1837600&r2=1837601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java
Tue Aug 7 14:32:49 2018
@@ -40,7 +40,8 @@ import org.apache.jackrabbit.oak.jcr.del
import org.apache.jackrabbit.oak.jcr.delegate.VersionHistoryDelegate;
import org.apache.jackrabbit.oak.jcr.delegate.VersionManagerDelegate;
import org.apache.jackrabbit.oak.jcr.session.operation.SessionOperation;
-import org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl;
+import org.apache.jackrabbit.oak.plugins.value.Conversions;
+import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory;
import org.apache.jackrabbit.oak.spi.version.VersionConstants;
import org.jetbrains.annotations.NotNull;
@@ -70,7 +71,7 @@ public class VersionImpl extends NodeImp
@Override
public Calendar perform() throws RepositoryException {
PropertyDelegate dlg =
getPropertyOrThrow(JcrConstants.JCR_CREATED);
- return ValueFactoryImpl.createValue(dlg.getSingleState(),
sessionContext).getDate();
+ return Conversions.convert(dlg.getDate()).toCalendar();
}
});
}
@@ -114,7 +115,7 @@ public class VersionImpl extends NodeImp
}
private List<Value> getValues(PropertyDelegate p) throws
InvalidItemStateException, ValueFormatException {
- return ValueFactoryImpl.createValues(p.getMultiState(),
sessionContext);
+ return new
PartialValueFactory(sessionContext).createValues(p.getMultiState());
}
@Override
Modified:
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACE.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACE.java?rev=1837601&r1=1837600&r2=1837601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACE.java
(original)
+++
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACE.java
Tue Aug 7 14:32:49 2018
@@ -31,7 +31,7 @@ import com.google.common.collect.Collect
import com.google.common.collect.ImmutableSet;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
-import org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl;
+import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory;
import
org.apache.jackrabbit.oak.spi.security.authorization.restriction.Restriction;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBits;
import org.jetbrains.annotations.NotNull;
@@ -49,6 +49,7 @@ public abstract class ACE implements Jac
private final boolean isAllow;
private final Set<Restriction> restrictions;
private final NamePathMapper namePathMapper;
+ private final PartialValueFactory valueFactory;
private int hashCode;
@@ -63,6 +64,7 @@ public abstract class ACE implements Jac
this.isAllow = isAllow;
this.restrictions = (restrictions == null) ?
Collections.<Restriction>emptySet() : ImmutableSet.copyOf(restrictions);
this.namePathMapper = namePathMapper;
+ this.valueFactory = new PartialValueFactory(namePathMapper);
}
//--------------------------------------------------------------------------
@@ -107,13 +109,13 @@ public abstract class ACE implements Jac
String jcrName = getJcrName(restriction);
if (jcrName.equals(restrictionName)) {
if (restriction.getDefinition().getRequiredType().isArray()) {
- List<Value> values =
ValueFactoryImpl.createValues(restriction.getProperty(), namePathMapper);
+ List<Value> values =
valueFactory.createValues(restriction.getProperty());
switch (values.size()) {
case 1: return values.get(0);
default : throw new ValueFormatException("Attempt to
retrieve single value from multivalued property");
}
} else {
- return
ValueFactoryImpl.createValue(restriction.getProperty(), namePathMapper);
+ return valueFactory.createValue(restriction.getProperty());
}
}
}
@@ -126,7 +128,7 @@ public abstract class ACE implements Jac
for (Restriction restriction : restrictions) {
String jcrName = getJcrName(restriction);
if (jcrName.equals(restrictionName)) {
- List<Value> values =
ValueFactoryImpl.createValues(restriction.getProperty(), namePathMapper);
+ List<Value> values =
valueFactory.createValues(restriction.getProperty());
return values.toArray(new Value[values.size()]);
}
}
Modified:
jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java?rev=1837601&r1=1837600&r2=1837601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java
(original)
+++
jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProviderTest.java
Tue Aug 7 14:32:49 2018
@@ -22,18 +22,16 @@ import java.util.Map;
import java.util.Set;
import javax.jcr.PropertyType;
import javax.jcr.Value;
-import javax.jcr.ValueFactory;
import javax.jcr.security.AccessControlException;
import com.google.common.collect.ImmutableMap;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
-import org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl;
+import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory;
import
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -59,13 +57,13 @@ public class AbstractRestrictionProvider
private Value nameValue;
private final NamePathMapper namePathMapper = NamePathMapper.DEFAULT;
- private ValueFactory valueFactory;
+ private PartialValueFactory valueFactory;
private Map<String, ? extends RestrictionDefinition> supported;
private AbstractRestrictionProvider restrictionProvider;
@Before
public void before() throws Exception {
- valueFactory = new ValueFactoryImpl(Mockito.mock(Root.class),
namePathMapper);
+ valueFactory = new PartialValueFactory(namePathMapper);
globValue = valueFactory.createValue("*");
nameValue = valueFactory.createValue("nt:file", PropertyType.NAME);
nameValues = new Value[] {
@@ -223,7 +221,7 @@ public class AbstractRestrictionProvider
assertTrue(ps.isArray());
assertEquals(Type.NAMES, ps.getType());
- List<Value> vs = ValueFactoryImpl.createValues(ps, namePathMapper);
+ List<Value> vs = valueFactory.createValues(ps);
assertArrayEquals(nameValues, vs.toArray(new Value[vs.size()]));
}
@@ -238,7 +236,7 @@ public class AbstractRestrictionProvider
assertTrue(ps.isArray());
assertEquals(Type.NAMES, ps.getType());
- List<Value> vs = ValueFactoryImpl.createValues(ps, namePathMapper);
+ List<Value> vs = valueFactory.createValues(ps);
assertArrayEquals(nameValues, vs.toArray(new Value[vs.size()]));
}
@@ -252,7 +250,7 @@ public class AbstractRestrictionProvider
assertTrue(r.getProperty().isArray());
assertEquals(Type.NAMES, r.getProperty().getType());
- List<Value> vs = ValueFactoryImpl.createValues(r.getProperty(),
namePathMapper);
+ List<Value> vs = valueFactory.createValues(r.getProperty());
assertArrayEquals(new Value[] {nameValue}, vs.toArray(new
Value[vs.size()]));
}
@@ -266,7 +264,7 @@ public class AbstractRestrictionProvider
assertTrue(r.getProperty().isArray());
assertEquals(Type.NAMES, r.getProperty().getType());
- List<Value> vs = ValueFactoryImpl.createValues(r.getProperty(),
namePathMapper);
+ List<Value> vs = valueFactory.createValues(r.getProperty());
assertNotNull(vs);
assertEquals(0, vs.size());
}
@@ -281,7 +279,7 @@ public class AbstractRestrictionProvider
assertTrue(r.getProperty().isArray());
assertEquals(Type.NAMES, r.getProperty().getType());
- List<Value> vs = ValueFactoryImpl.createValues(r.getProperty(),
namePathMapper);
+ List<Value> vs = valueFactory.createValues(r.getProperty());
assertNotNull(vs);
assertEquals(0, vs.size());
}
Added:
jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/PartialValueFactory.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/PartialValueFactory.java?rev=1837601&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/PartialValueFactory.java
(added)
+++
jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/PartialValueFactory.java
Tue Aug 7 14:32:49 2018
@@ -0,0 +1,263 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.value.jcr;
+
+import java.math.BigDecimal;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Calendar;
+import java.util.List;
+
+import javax.jcr.Binary;
+import javax.jcr.Node;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+import javax.jcr.ValueFormatException;
+import javax.jcr.nodetype.NodeType;
+
+import com.google.common.collect.Lists;
+
+import org.apache.jackrabbit.oak.api.Blob;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.blob.BlobAccessProvider;
+import org.apache.jackrabbit.oak.api.blob.BlobDownloadOptions;
+import org.apache.jackrabbit.oak.api.blob.BlobUpload;
+import org.apache.jackrabbit.oak.commons.UUIDUtils;
+import org.apache.jackrabbit.oak.namepath.JcrNameParser;
+import org.apache.jackrabbit.oak.namepath.JcrPathParser;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.plugins.memory.BinaryPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.BooleanPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.DecimalPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.DoublePropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.GenericPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.LongPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
+import org.apache.jackrabbit.oak.plugins.memory.StringPropertyState;
+import org.apache.jackrabbit.oak.plugins.value.Conversions;
+import org.apache.jackrabbit.util.ISO8601;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.plugins.value.jcr.ValueImpl.newValue;
+
+/**
+ * A partial value factory implementation that only deals with in-memory values
+ * and can wrap a {@link Value} around a {@link PropertyState}.
+ */
+public class PartialValueFactory {
+
+ /**
+ * This default blob access provider is a no-op implementation.
+ */
+ public static final BlobAccessProvider DEFAULT_BLOB_ACCESS_PROVIDER = new
DefaultBlobAccessProvider();
+
+ @NotNull
+ protected final NamePathMapper namePathMapper;
+
+ @NotNull
+ private final BlobAccessProvider blobAccessProvider;
+
+ /**
+ * Creates a new value factory stub using the given {@link NamePathMapper}.
+ * The factory instance created with this constructor does not have a
+ * {@link BlobAccessProvider} and any {@link Binary} retrieved from a
+ * {@link Value} returned by this factory instance will not provide a
+ * download URI.
+ *
+ * @param namePathMapper the name path mapper.
+ */
+ public PartialValueFactory(@NotNull NamePathMapper namePathMapper) {
+ this(namePathMapper, DEFAULT_BLOB_ACCESS_PROVIDER);
+ }
+
+ /**
+ * Creates a new value factory stub using the given {@link NamePathMapper}
+ * and {@link BlobAccessProvider}.
+ *
+ * @param namePathMapper the name path mapper.
+ * @param blobAccessProvider the blob access provider.
+ */
+ public PartialValueFactory(@NotNull NamePathMapper namePathMapper,
+ @NotNull BlobAccessProvider blobAccessProvider)
{
+ this.namePathMapper = checkNotNull(namePathMapper);
+ this.blobAccessProvider = checkNotNull(blobAccessProvider);
+ }
+
+ @NotNull
+ public BlobAccessProvider getBlobAccessProvider() {
+ return blobAccessProvider;
+ }
+
+ /**
+ * Utility method for creating a {@code Value} based on a
+ * {@code PropertyState}.
+ *
+ * @param property The property state
+ * @return New {@code Value} instance
+ * @throws IllegalArgumentException if {@code property.isArray()} is
+ * {@code true}.
+ */
+ public Value createValue(@NotNull PropertyState property) {
+ return newValue(property, namePathMapper, blobAccessProvider);
+ }
+
+ /**
+ * Utility method for creating {@code Value}s based on a
+ * {@code PropertyState}.
+ *
+ * @param property The property state
+ * @return A list of new {@code Value} instances
+ */
+ public List<Value> createValues(@NotNull PropertyState property) {
+ List<Value> values = Lists.newArrayList();
+ for (int i = 0; i < property.count(); i++) {
+ values.add(newValue(property, i, namePathMapper,
getBlobAccessProvider()));
+ }
+ return values;
+ }
+
+ //-------------------------------------------------------< ValueFactory
>---
+
+ public Value createValue(String value) {
+ return newValue(StringPropertyState.stringProperty("", value),
namePathMapper, getBlobAccessProvider());
+ }
+
+ public Value createValue(long value) {
+ return newValue(LongPropertyState.createLongProperty("", value),
namePathMapper, getBlobAccessProvider());
+ }
+
+ public Value createValue(double value) {
+ return newValue(DoublePropertyState.doubleProperty("", value),
namePathMapper, getBlobAccessProvider());
+ }
+
+ public Value createValue(Calendar value) {
+ return newValue(PropertyStates.createProperty("", value),
namePathMapper, getBlobAccessProvider());
+ }
+
+ public Value createValue(boolean value) {
+ return newValue(BooleanPropertyState.booleanProperty("", value),
namePathMapper, getBlobAccessProvider());
+ }
+
+ public Value createValue(Node value) throws RepositoryException {
+ return createValue(value, false);
+ }
+
+ public Value createValue(Node value, boolean weak) throws
RepositoryException {
+ if (!value.isNodeType(NodeType.MIX_REFERENCEABLE)) {
+ throw new ValueFormatException(
+ "Node is not referenceable: " + value.getPath());
+ }
+ return weak
+ ? newValue(GenericPropertyState.weakreferenceProperty("",
value.getUUID()), namePathMapper, getBlobAccessProvider())
+ : newValue(GenericPropertyState.referenceProperty("",
value.getUUID()), namePathMapper, getBlobAccessProvider());
+ }
+
+ public Value createValue(BigDecimal value) {
+ return newValue(DecimalPropertyState.decimalProperty("", value),
namePathMapper, getBlobAccessProvider());
+ }
+
+ public Value createValue(String value, int type) throws
ValueFormatException {
+ if (value == null) {
+ throw new ValueFormatException("null");
+ }
+
+ try {
+ switch (type) {
+ case PropertyType.STRING:
+ return createValue(value);
+ case PropertyType.BINARY:
+ return newValue(BinaryPropertyState.binaryProperty("",
value), namePathMapper, getBlobAccessProvider());
+ case PropertyType.LONG:
+ return createValue(Conversions.convert(value).toLong());
+ case PropertyType.DOUBLE:
+ return createValue(Conversions.convert(value).toDouble());
+ case PropertyType.DATE:
+ if (ISO8601.parse(value) == null) {
+ throw new ValueFormatException("Invalid date " +
value);
+ }
+ return newValue(GenericPropertyState.dateProperty("",
value), namePathMapper, getBlobAccessProvider());
+ case PropertyType.BOOLEAN:
+ return createValue(Conversions.convert(value).toBoolean());
+ case PropertyType.NAME:
+ String oakName = namePathMapper.getOakNameOrNull(value);
+ if (oakName == null || !JcrNameParser.validate(oakName)) {
+ throw new ValueFormatException("Invalid name: " +
value);
+ }
+ return newValue(GenericPropertyState.nameProperty("",
oakName), namePathMapper, getBlobAccessProvider());
+ case PropertyType.PATH:
+ String oakValue = value;
+ if (value.startsWith("[") && value.endsWith("]")) {
+ // identifier path; do no change
+ } else {
+ oakValue = namePathMapper.getOakPath(value);
+ if (oakValue == null ||
!JcrPathParser.validate(oakValue)) {
+ throw new ValueFormatException("Invalid path: " +
value);
+ }
+ }
+ return newValue(GenericPropertyState.pathProperty("",
oakValue), namePathMapper, getBlobAccessProvider());
+ case PropertyType.REFERENCE:
+ if (!UUIDUtils.isValidUUID(value)) {
+ throw new ValueFormatException("Invalid reference
value " + value);
+ }
+ return newValue(GenericPropertyState.referenceProperty("",
value), namePathMapper, getBlobAccessProvider());
+ case PropertyType.WEAKREFERENCE:
+ if (!UUIDUtils.isValidUUID(value)) {
+ throw new ValueFormatException("Invalid weak reference
value " + value);
+ }
+ return
newValue(GenericPropertyState.weakreferenceProperty("", value), namePathMapper,
getBlobAccessProvider());
+ case PropertyType.URI:
+ new URI(value);
+ return newValue(GenericPropertyState.uriProperty("",
value), namePathMapper, getBlobAccessProvider());
+ case PropertyType.DECIMAL:
+ return createValue(Conversions.convert(value).toDecimal());
+ default:
+ throw new ValueFormatException("Invalid type: " + type);
+ }
+ } catch (NumberFormatException | URISyntaxException e) {
+ throw new ValueFormatException("Invalid value " + value + " for
type " + PropertyType.nameFromValue(type), e);
+ }
+ }
+
+ /**
+ * A {@link BlobAccessProvider} implementation that does not support direct
+ * binary up- or download.
+ */
+ private static class DefaultBlobAccessProvider
+ implements BlobAccessProvider {
+
+ @Nullable
+ @Override
+ public BlobUpload initiateBlobUpload(long maxUploadSizeInBytes,
+ int maxNumberOfURIs) {
+ return null;
+ }
+
+ @Nullable
+ @Override
+ public Blob completeBlobUpload(@NotNull String uploadToken) {
+ return null;
+ }
+
+ @Nullable
+ @Override
+ public URI getDownloadURI(@NotNull Blob blob,
+ @NotNull BlobDownloadOptions
downloadOptions) { return null; }
+ }
+}
Propchange:
jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/PartialValueFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/ValueFactoryImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/ValueFactoryImpl.java?rev=1837601&r1=1837600&r2=1837601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/ValueFactoryImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/ValueFactoryImpl.java
Tue Aug 7 14:32:49 2018
@@ -16,137 +16,136 @@
*/
package org.apache.jackrabbit.oak.plugins.value.jcr;
+import static com.google.common.base.Preconditions.checkNotNull;
+
import java.io.IOException;
import java.io.InputStream;
-import java.math.BigDecimal;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.Calendar;
import java.util.List;
+
import javax.jcr.Binary;
-import javax.jcr.Node;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.ValueFactory;
-import javax.jcr.ValueFormatException;
-import javax.jcr.nodetype.NodeType;
-import com.google.common.collect.Lists;
import org.apache.jackrabbit.api.ReferenceBinary;
import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.PropertyValue;
import org.apache.jackrabbit.oak.api.Root;
-import org.apache.jackrabbit.oak.commons.UUIDUtils;
+import org.apache.jackrabbit.oak.api.blob.BlobAccessProvider;
import org.apache.jackrabbit.oak.commons.PerfLogger;
-import org.apache.jackrabbit.oak.namepath.JcrNameParser;
-import org.apache.jackrabbit.oak.namepath.JcrPathParser;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.plugins.memory.BinaryPropertyState;
-import org.apache.jackrabbit.oak.plugins.memory.BooleanPropertyState;
-import org.apache.jackrabbit.oak.plugins.memory.DecimalPropertyState;
-import org.apache.jackrabbit.oak.plugins.memory.DoublePropertyState;
-import org.apache.jackrabbit.oak.plugins.memory.GenericPropertyState;
-import org.apache.jackrabbit.oak.plugins.memory.LongPropertyState;
-import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
import org.apache.jackrabbit.oak.plugins.memory.PropertyValues;
-import org.apache.jackrabbit.oak.plugins.memory.StringPropertyState;
-import org.apache.jackrabbit.oak.plugins.value.Conversions;
import org.apache.jackrabbit.oak.plugins.value.ErrorValue;
-import org.apache.jackrabbit.util.ISO8601;
import org.jetbrains.annotations.NotNull;
import org.slf4j.LoggerFactory;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.apache.jackrabbit.oak.plugins.value.jcr.ValueImpl.newValue;
-
/**
* Implementation of {@link ValueFactory} interface.
*/
-public class ValueFactoryImpl implements ValueFactory {
+public class ValueFactoryImpl extends PartialValueFactory implements
ValueFactory {
+
private static final PerfLogger binOpsLogger = new PerfLogger(
LoggerFactory.getLogger("org.apache.jackrabbit.oak.jcr.operations.binary.perf"));
private final Root root;
- private final NamePathMapper namePathMapper;
/**
* Creates a new instance of {@code ValueFactory}.
*
* @param root the root instance for creating binary values
* @param namePathMapper The name/path mapping used for converting JCR
names/paths to
+ * @param blobAccessProvider The blob access provider
* the internal representation.
*/
- public ValueFactoryImpl(@NotNull Root root, @NotNull NamePathMapper
namePathMapper) {
+ public ValueFactoryImpl(@NotNull Root root,
+ @NotNull NamePathMapper namePathMapper,
+ @NotNull BlobAccessProvider blobAccessProvider) {
+ super(namePathMapper, blobAccessProvider);
this.root = checkNotNull(root);
- this.namePathMapper = checkNotNull(namePathMapper);
}
/**
- * Utility method for creating a {@code Value} based on a {@code
PropertyState}.
- * @param property The property state
+ * Creates a new instance of {@code ValueFactory}. The {@link Value}s
+ * created by this value factory instance will not be backed by a blob
+ * access provider and never return a download URI for a binary value.
+ *
+ * @param root the root instance for creating binary values
* @param namePathMapper The name/path mapping used for converting JCR
names/paths to
* the internal representation.
+ */
+ public ValueFactoryImpl(@NotNull Root root, @NotNull NamePathMapper
namePathMapper) {
+ this(root, namePathMapper, DEFAULT_BLOB_ACCESS_PROVIDER);
+ }
+
+ /**
+ * Utility method for creating a {@code Value} based on a
+ * {@code PropertyState}. The {@link Value} instance created by this
factory
+ * method will not be backed with a {@link BlobAccessProvider} and the
+ * {@link Binary} retrieved from the {@link Value} does not provide a
+ * download URI, even if the underlying blob store supports it.
+ *
+ * @param property The property state
+ * @param namePathMapper The name/path mapping used for converting JCR
+ * names/paths to the internal representation.
* @return New {@code Value} instance
* @throws IllegalArgumentException if {@code property.isArray()} is
{@code true}.
+ * @deprecated use {@link PartialValueFactory#createValue(PropertyState)}
instead.
*/
- public static Value createValue(PropertyState property, NamePathMapper
namePathMapper) {
- return newValue(property, namePathMapper);
+ @Deprecated
+ public static Value createValue(@NotNull PropertyState property,
+ @NotNull NamePathMapper namePathMapper) {
+ return new PartialValueFactory(namePathMapper).createValue(property);
}
/**
+ * Utility method for creating a {@code Value} based on a
+ * {@code PropertyValue}. The {@link Value} instance created by this
factory
+ * method will not be backed with a {@link BlobAccessProvider} and the
+ * {@link Binary} retrieved from the {@link Value} does not provide a
+ * download URI, even if the underlying blob store supports it.
+ *
* Utility method for creating a {@code Value} based on a {@code
PropertyValue}.
* @param property The property value
* @param namePathMapper The name/path mapping used for converting JCR
names/paths to
* the internal representation.
* @return New {@code Value} instance
* @throws IllegalArgumentException if {@code property.isArray()} is
{@code true}.
+ * @deprecated use {@link PartialValueFactory#createValue(PropertyState)}
instead.
*/
+ @Deprecated
@NotNull
- public static Value createValue(@NotNull PropertyValue property, @NotNull
NamePathMapper namePathMapper) {
+ public static Value createValue(@NotNull PropertyValue property,
+ @NotNull NamePathMapper namePathMapper) {
PropertyState ps = PropertyValues.create(property);
if (ps == null) {
throw new IllegalArgumentException("Failed to convert the
specified property value to a property state.");
}
- return newValue(ps, namePathMapper);
+ return new PartialValueFactory(namePathMapper).createValue(ps);
}
/**
- * Utility method for creating {@code Value}s based on a {@code
PropertyState}.
+ * Utility method for creating {@code Value}s based on a
+ * {@code PropertyState}. The {@link Value} instances created by this
factory
+ * method will not be backed with a {@link BlobAccessProvider} and the
+ * {@link Binary} retrieved from the {@link Value} does not provide a
+ * download URI, even if the underlying blob store supports it.
+ *
* @param property The property state
* @param namePathMapper The name/path mapping used for converting JCR
names/paths to
* the internal representation.
* @return A list of new {@code Value} instances
+ * @deprecated use {@link PartialValueFactory#createValues(PropertyState)}
instead.
*/
+ @Deprecated
public static List<Value> createValues(PropertyState property,
NamePathMapper namePathMapper) {
- List<Value> values = Lists.newArrayList();
- for (int i = 0; i < property.count(); i++) {
- values.add(newValue(property, i, namePathMapper));
- }
- return values;
- }
-
- /**
- * Utility method for creating {@code Value}s based on a {@code
PropertyState}.
- * @param property The property state
- * @return A list of new {@code Value} instances
- */
- public List<Value> createValues(PropertyState property) {
- List<Value> values = Lists.newArrayList();
- for (int i = 0; i < property.count(); i++) {
- values.add(newValue(property, i, namePathMapper));
- }
- return values;
+ return new PartialValueFactory(namePathMapper).createValues(property);
}
//-------------------------------------------------------< ValueFactory
>---
@Override
- public Value createValue(String value) {
- return newValue(StringPropertyState.stringProperty("", value),
namePathMapper);
- }
-
- @Override
public Value createValue(InputStream value) {
try {
return createBinaryValue(value);
@@ -179,110 +178,6 @@ public class ValueFactoryImpl implements
}
@Override
- public Value createValue(long value) {
- return newValue(LongPropertyState.createLongProperty("", value),
namePathMapper);
- }
-
- @Override
- public Value createValue(double value) {
- return newValue(DoublePropertyState.doubleProperty("", value),
namePathMapper);
- }
-
- @Override
- public Value createValue(Calendar value) {
- return newValue(PropertyStates.createProperty("", value),
namePathMapper);
- }
-
- @Override
- public Value createValue(boolean value) {
- return newValue(BooleanPropertyState.booleanProperty("", value),
namePathMapper);
- }
-
- @Override
- public Value createValue(Node value) throws RepositoryException {
- return createValue(value, false);
- }
-
- @Override @SuppressWarnings("deprecation")
- public Value createValue(Node value, boolean weak) throws
RepositoryException {
- if (!value.isNodeType(NodeType.MIX_REFERENCEABLE)) {
- throw new ValueFormatException(
- "Node is not referenceable: " + value.getPath());
- }
- return weak
- ? newValue(GenericPropertyState.weakreferenceProperty("",
value.getUUID()), namePathMapper)
- : newValue(GenericPropertyState.referenceProperty("",
value.getUUID()), namePathMapper);
- }
-
- @Override
- public Value createValue(BigDecimal value) {
- return newValue(DecimalPropertyState.decimalProperty("", value),
namePathMapper);
- }
-
- @Override
- public Value createValue(String value, int type) throws
ValueFormatException {
- if (value == null) {
- throw new ValueFormatException("null");
- }
-
- try {
- switch (type) {
- case PropertyType.STRING:
- return createValue(value);
- case PropertyType.BINARY:
- return newValue(BinaryPropertyState.binaryProperty("",
value), namePathMapper);
- case PropertyType.LONG:
- return createValue(Conversions.convert(value).toLong());
- case PropertyType.DOUBLE:
- return createValue(Conversions.convert(value).toDouble());
- case PropertyType.DATE:
- if (ISO8601.parse(value) == null) {
- throw new ValueFormatException("Invalid date " +
value);
- }
- return newValue(GenericPropertyState.dateProperty("",
value), namePathMapper);
- case PropertyType.BOOLEAN:
- return createValue(Conversions.convert(value).toBoolean());
- case PropertyType.NAME:
- String oakName = namePathMapper.getOakNameOrNull(value);
- if (oakName == null || !JcrNameParser.validate(oakName)) {
- throw new ValueFormatException("Invalid name: " +
value);
- }
- return newValue(GenericPropertyState.nameProperty("",
oakName), namePathMapper);
- case PropertyType.PATH:
- String oakValue = value;
- if (value.startsWith("[") && value.endsWith("]")) {
- // identifier path; do no change
- } else {
- oakValue = namePathMapper.getOakPath(value);
- if (oakValue == null ||
!JcrPathParser.validate(oakValue)) {
- throw new ValueFormatException("Invalid path: " +
value);
- }
- }
- return newValue(GenericPropertyState.pathProperty("",
oakValue), namePathMapper);
- case PropertyType.REFERENCE:
- if (!UUIDUtils.isValidUUID(value)) {
- throw new ValueFormatException("Invalid reference
value " + value);
- }
- return newValue(GenericPropertyState.referenceProperty("",
value), namePathMapper);
- case PropertyType.WEAKREFERENCE:
- if (!UUIDUtils.isValidUUID(value)) {
- throw new ValueFormatException("Invalid weak reference
value " + value);
- }
- return
newValue(GenericPropertyState.weakreferenceProperty("", value), namePathMapper);
- case PropertyType.URI:
- new URI(value);
- return newValue(GenericPropertyState.uriProperty("",
value), namePathMapper);
- case PropertyType.DECIMAL:
- return createValue(Conversions.convert(value).toDecimal());
- default:
- throw new ValueFormatException("Invalid type: " + type);
- }
- } catch (NumberFormatException | URISyntaxException e) {
- throw new ValueFormatException("Invalid value " + value + " for
type " + PropertyType.nameFromValue(type), e);
- }
- }
-
- @Override
public Binary createBinary(InputStream stream) throws RepositoryException {
try {
return new BinaryImpl(createBinaryValue(stream));
@@ -299,9 +194,6 @@ public class ValueFactoryImpl implements
}
private ValueImpl createBinaryValue(Blob blob) throws RepositoryException {
- return new ValueImpl(BinaryPropertyState.binaryProperty("", blob),
namePathMapper);
+ return new ValueImpl(BinaryPropertyState.binaryProperty("", blob),
namePathMapper, getBlobAccessProvider());
}
-
- //------------------------------------------------------------< ErrorValue
>---
-
}
Modified:
jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/ValueImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/ValueImpl.java?rev=1837601&r1=1837600&r2=1837601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/ValueImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-store-spi/src/main/java/org/apache/jackrabbit/oak/plugins/value/jcr/ValueImpl.java
Tue Aug 7 14:32:49 2018
@@ -36,6 +36,7 @@ import org.apache.jackrabbit.oak.api.Blo
import org.apache.jackrabbit.oak.api.IllegalRepositoryStateException;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.api.blob.BlobAccessProvider;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.plugins.value.Conversions;
import org.apache.jackrabbit.oak.plugins.value.ErrorValue;
@@ -54,6 +55,7 @@ class ValueImpl implements JackrabbitVal
private final Type<?> type;
private final int index;
private final NamePathMapper namePathMapper;
+ private final BlobAccessProvider blobAccessProvider;
private InputStream stream = null;
@@ -63,16 +65,20 @@ class ValueImpl implements JackrabbitVal
* @param index The index
* @param namePathMapper The name/path mapping used for converting JCR
names/paths to
* the internal representation.
+ * @param blobAccessProvider The blob access provider
* @throws IllegalArgumentException if {@code index <
propertyState.count()}
* @throws RepositoryException if the underlying node state cannot be
accessed
*/
- ValueImpl(@NotNull PropertyState property, int index, @NotNull
NamePathMapper namePathMapper)
+ private ValueImpl(@NotNull PropertyState property, int index,
+ @NotNull NamePathMapper namePathMapper,
+ @NotNull BlobAccessProvider blobAccessProvider)
throws RepositoryException {
checkArgument(index < property.count());
this.propertyState = checkNotNull(property);
this.type = getType(property);
this.index = index;
this.namePathMapper = checkNotNull(namePathMapper);
+ this.blobAccessProvider = checkNotNull(blobAccessProvider);
}
/**
@@ -80,12 +86,15 @@ class ValueImpl implements JackrabbitVal
* @param property The property state this instance is based on
* @param namePathMapper The name/path mapping used for converting JCR
names/paths to
* the internal representation.
+ * @param blobAccessProvider The blob access provider
* @throws IllegalArgumentException if {@code property.isArray()} is
{@code true}.
* @throws RepositoryException if the underlying node state cannot be
accessed
*/
- ValueImpl(@NotNull PropertyState property, @NotNull NamePathMapper
namePathMapper)
+ ValueImpl(@NotNull PropertyState property,
+ @NotNull NamePathMapper namePathMapper,
+ @NotNull BlobAccessProvider blobAccessProvider)
throws RepositoryException {
- this(checkSingleValued(property), 0, namePathMapper);
+ this(checkSingleValued(property), 0, namePathMapper,
checkNotNull(blobAccessProvider));
}
private static PropertyState checkSingleValued(PropertyState property) {
@@ -99,12 +108,15 @@ class ValueImpl implements JackrabbitVal
* @param index The index
* @param namePathMapper The name/path mapping used for converting JCR
names/paths to
* the internal representation.
+ * @param blobAccessProvider The blob access provider
* @throws IllegalArgumentException if {@code index <
propertyState.count()}
*/
@NotNull
- static Value newValue(@NotNull PropertyState property, int index, @NotNull
NamePathMapper namePathMapper) {
+ static Value newValue(@NotNull PropertyState property, int index,
+ @NotNull NamePathMapper namePathMapper,
+ @NotNull BlobAccessProvider blobAccessProvider) {
try {
- return new ValueImpl(property, index, namePathMapper);
+ return new ValueImpl(property, index, namePathMapper,
blobAccessProvider);
} catch (RepositoryException e) {
return new ErrorValue(e);
}
@@ -115,12 +127,15 @@ class ValueImpl implements JackrabbitVal
* @param property The property state this instance is based on
* @param namePathMapper The name/path mapping used for converting JCR
names/paths to
* the internal representation.
+ * @param blobAccessProvider The blob access provider
* @throws IllegalArgumentException if {@code property.isArray()} is
{@code true}.
*/
@NotNull
- static Value newValue(@NotNull PropertyState property, @NotNull
NamePathMapper namePathMapper) {
+ static Value newValue(@NotNull PropertyState property,
+ @NotNull NamePathMapper namePathMapper,
+ @NotNull BlobAccessProvider blobAccessProvider) {
try {
- return new ValueImpl(property, 0, namePathMapper);
+ return new ValueImpl(property, 0, namePathMapper,
blobAccessProvider);
} catch (RepositoryException e) {
return new ErrorValue(e);
}
@@ -352,7 +367,7 @@ class ValueImpl implements JackrabbitVal
public int hashCode() {
try {
if (getType() == PropertyType.BINARY) {
- return getValue(Type.BINARY, index).hashCode();
+ return getValue(Type.BINARY, index).hashCode();
} else {
return getValue(Type.STRING, index).hashCode();
}
@@ -381,9 +396,9 @@ class ValueImpl implements JackrabbitVal
}
}
- private Type<?> getType(PropertyState property) throws RepositoryException
{
+ private static Type<?> getType(PropertyState property) throws
RepositoryException {
try {
- return propertyState.getType();
+ return property.getType();
} catch (IllegalRepositoryStateException e) {
throw new RepositoryException(e);
}
Modified:
jackrabbit/oak/trunk/oak-store-spi/src/test/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStatesTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-spi/src/test/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStatesTest.java?rev=1837601&r1=1837600&r2=1837601&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-spi/src/test/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStatesTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-spi/src/test/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStatesTest.java
Tue Aug 7 14:32:49 2018
@@ -27,7 +27,7 @@ import javax.jcr.Value;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
-import org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl;
+import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory;
import org.apache.jackrabbit.util.ISO8601;
import org.junit.Test;
import org.mockito.Mockito;
@@ -37,11 +37,12 @@ import static org.junit.Assert.assertEqu
public class PropertyStatesTest {
private final NamePathMapper namePathMapper =
Mockito.mock(NamePathMapper.class);
+ private final PartialValueFactory valueFactory = new
PartialValueFactory(namePathMapper);
@Test
public void namePropertyFromNameValue() throws RepositoryException {
PropertyState nameProperty = PropertyStates.createProperty("name",
"oak-prefix:value", PropertyType.NAME);
- Value nameValue = ValueFactoryImpl.createValue(nameProperty,
namePathMapper);
+ Value nameValue = valueFactory.createValue(nameProperty);
PropertyState namePropertyFromValue =
PropertyStates.createProperty("name", nameValue);
assertEquals(nameProperty, namePropertyFromValue);
}
@@ -49,7 +50,7 @@ public class PropertyStatesTest {
@Test
public void pathPropertyFromPathValue() throws RepositoryException {
PropertyState pathProperty = PropertyStates.createProperty("path",
"oak-prefix:a/oak-prefix:b", PropertyType.PATH);
- Value nameValue = ValueFactoryImpl.createValue(pathProperty,
namePathMapper);
+ Value nameValue = valueFactory.createValue(pathProperty);
PropertyState namePropertyFromValue =
PropertyStates.createProperty("path", nameValue);
assertEquals(pathProperty, namePropertyFromValue);
}