You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2012/09/26 18:07:25 UTC
svn commit: r1390584 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
plugins/type/TypeValidator.java plugins/type/TypeValidatorProvider.java
value/ValueImpl.java
Author: mduerig
Date: Wed Sep 26 16:07:25 2012
New Revision: 1390584
URL: http://svn.apache.org/viewvc?rev=1390584&view=rev
Log:
OAK-66: JCR Node Type Management
replace extra Value wrapper with proper ValueImpl instances
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidator.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidatorProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueImpl.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidator.java?rev=1390584&r1=1390583&r2=1390584&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidator.java Wed Sep 26 16:07:25 2012
@@ -16,24 +16,19 @@
*/
package org.apache.jackrabbit.oak.plugins.type;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigDecimal;
-import java.util.Calendar;
import java.util.Collections;
import java.util.List;
import javax.annotation.Nonnull;
-import javax.jcr.Binary;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
-import javax.jcr.ValueFormatException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.nodetype.NodeDefinition;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NodeTypeManager;
import javax.jcr.nodetype.PropertyDefinition;
+import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.apache.jackrabbit.oak.api.CommitFailedException;
@@ -43,7 +38,6 @@ import org.apache.jackrabbit.oak.api.Tre
import org.apache.jackrabbit.oak.core.ReadOnlyTree;
import org.apache.jackrabbit.oak.spi.commit.Validator;
import org.apache.jackrabbit.oak.spi.state.NodeState;
-import org.apache.jackrabbit.util.ISO8601;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -56,6 +50,7 @@ class TypeValidator implements Validator
private final NodeTypeManager ntm;
private final ReadOnlyTree parent;
+ private final Function<CoreValue, Value> valueFactory;
private EffectiveNodeType parentType;
@@ -67,9 +62,10 @@ class TypeValidator implements Validator
return parentType;
}
- public TypeValidator(NodeTypeManager ntm, ReadOnlyTree parent) {
+ public TypeValidator(NodeTypeManager ntm, ReadOnlyTree parent, Function<CoreValue, Value> valueFactory) {
this.ntm = ntm;
this.parent = parent;
+ this.valueFactory = valueFactory;
}
//-------------------------------------------------------< NodeValidator >
@@ -136,7 +132,7 @@ class TypeValidator implements Validator
ReadOnlyTree addedTree = new ReadOnlyTree(parent, name, after);
EffectiveNodeType addedType = getEffectiveNodeType(addedTree);
addedType.checkMandatoryItems(addedTree);
- return new TypeValidator(ntm, new ReadOnlyTree(parent, name, after));
+ return new TypeValidator(ntm, new ReadOnlyTree(parent, name, after), valueFactory);
}
catch (RepositoryException e) {
throw new CommitFailedException(
@@ -150,7 +146,7 @@ class TypeValidator implements Validator
@Override
public Validator childNodeChanged(String name, NodeState before, NodeState after) throws CommitFailedException {
- return new TypeValidator(ntm, new ReadOnlyTree(parent, name, after));
+ return new TypeValidator(ntm, new ReadOnlyTree(parent, name, after), valueFactory);
}
@Override
@@ -229,7 +225,7 @@ class TypeValidator implements Validator
return new EffectiveNodeType(getPrimaryType(tree), getMixinTypes(tree));
}
- private static class EffectiveNodeType {
+ private class EffectiveNodeType {
private final Iterable<NodeType> allTypes;
public EffectiveNodeType(NodeType primaryType, List<NodeType> mixinTypes) {
@@ -322,9 +318,8 @@ class TypeValidator implements Validator
}
}
}
- }
- private static Value[] jcrValues(List<CoreValue> values) {
+ private Value[] jcrValues(List<CoreValue> values) {
Value[] jcrValues = new Value[values.size()];
int k = 0;
@@ -335,115 +330,10 @@ class TypeValidator implements Validator
return jcrValues;
}
- private static Value jcrValue(final CoreValue value) {
- return new JcrValue(value);
- }
-
- private static class JcrValue implements Value {
- private final CoreValue value;
-
- public JcrValue(CoreValue value) {
- this.value = value;
- }
-
- @Override
- public String getString() {
- return value.getString();
- }
-
- @Override
- public InputStream getStream() {
- return value.getNewStream();
- }
-
- @Override
- public Binary getBinary() {
- return new JcrBinary(value);
- }
-
- @Override
- public long getLong() {
- return value.getLong();
- }
-
- @Override
- public double getDouble() {
- return value.getDouble();
- }
-
- @Override
- public BigDecimal getDecimal() {
- return value.getDecimal();
- }
-
- @Override
- public Calendar getDate() throws ValueFormatException {
- Calendar cal = ISO8601.parse(getString());
- if (cal == null) {
- throw new ValueFormatException("Not a date string: " + getString());
- }
- return cal;
- }
-
- @Override
- public boolean getBoolean() {
- return value.getBoolean();
+ private Value jcrValue(CoreValue value) {
+ return valueFactory.apply(value);
}
- @Override
- public int getType() {
- return value.getType();
- }
-
- @Override
- public int hashCode() {
- return value.hashCode();
- }
-
- @Override
- public boolean equals(Object other) {
- return other instanceof JcrValue && value.equals(((JcrValue) other).value);
- }
-
- @Override
- public String toString() {
- return value.toString();
- }
}
- private static class JcrBinary implements Binary {
- private final CoreValue value;
-
- public JcrBinary(CoreValue value) {
- this.value = value;
- }
-
- @Override
- public InputStream getStream() {
- return value.getNewStream();
- }
-
- @Override
- public int read(byte[] b, long position) throws IOException {
- InputStream stream = value.getNewStream();
- try {
- if (position != stream.skip(position)) {
- throw new IOException("Can't skip to position " + position);
- }
- return stream.read(b);
- }
- finally {
- stream.close();
- }
- }
-
- @Override
- public long getSize() {
- return value.length();
- }
-
- @Override
- public void dispose() {
- }
- }
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidatorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidatorProvider.java?rev=1390584&r1=1390583&r2=1390584&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidatorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidatorProvider.java Wed Sep 26 16:07:25 2012
@@ -16,14 +16,22 @@
*/
package org.apache.jackrabbit.oak.plugins.type;
+import javax.jcr.Value;
+
+import com.google.common.base.Function;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.oak.api.CoreValue;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.core.ReadOnlyTree;
+import org.apache.jackrabbit.oak.namepath.NameMapperImpl;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.namepath.NamePathMapperImpl;
import org.apache.jackrabbit.oak.spi.commit.Validator;
import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.value.ValueImpl;
import static org.apache.jackrabbit.oak.plugins.type.NodeTypeConstants.NODE_TYPES_PATH;
@@ -55,7 +63,16 @@ public class TypeValidatorProvider imple
}
};
- return new TypeValidator(ntm, new ReadOnlyTree(after));
+ Tree root = new ReadOnlyTree(after);
+ final NamePathMapper mapper = new NamePathMapperImpl(new NameMapperImpl(root));
+ Function<CoreValue, Value> valueFactory = new Function<CoreValue, Value>() {
+ @Override
+ public Value apply(CoreValue coreValue) {
+ return new ValueImpl(coreValue, mapper);
+ }
+ };
+
+ return new TypeValidator(ntm, new ReadOnlyTree(after), valueFactory);
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueImpl.java?rev=1390584&r1=1390583&r2=1390584&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueImpl.java Wed Sep 26 16:07:25 2012
@@ -41,7 +41,7 @@ import org.slf4j.LoggerFactory;
/**
* ValueImpl...
*/
-class ValueImpl implements Value {
+public class ValueImpl implements Value {
/**
* logger instance