You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2006/07/07 18:13:04 UTC
svn commit: r419916 - in
/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit: core/
core/nodetype/ core/nodetype/compact/ core/nodetype/xml/ core/value/
core/xml/ value/
Author: stefan
Date: Fri Jul 7 09:13:03 2006
New Revision: 419916
URL: http://svn.apache.org/viewvc?rev=419916&view=rev
Log:
- decouple InternalValue from ValueHelper
- some javadoc improvements
Modified:
jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java
jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java
jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java
jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/xml/NodeTypeReader.java
jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java
jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/BufferedStringValue.java
jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/StringValue.java
jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/value/ValueHelper.java
Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java?rev=419916&r1=419915&r2=419916&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java Fri Jul 7 09:13:03 2006
@@ -29,6 +29,7 @@
import org.apache.jackrabbit.value.DateValue;
import org.apache.jackrabbit.value.DoubleValue;
import org.apache.jackrabbit.value.LongValue;
+import org.apache.jackrabbit.value.ValueHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -347,9 +348,10 @@
InternalValue internalValue;
if (reqType != PropertyType.NAME) {
// type conversion required
- internalValue =
- InternalValue.create(InternalValue.create(name).toJCRValue(session.getNamespaceResolver()),
- reqType, session.getNamespaceResolver());
+ Value targetValue = ValueHelper.convert(
+ InternalValue.create(name).toJCRValue(session.getNamespaceResolver()),
+ reqType);
+ internalValue = InternalValue.create(targetValue, session.getNamespaceResolver());
} else {
// no type conversion required
internalValue = InternalValue.create(name);
@@ -396,9 +398,10 @@
if (name != null) {
if (reqType != PropertyType.NAME) {
// type conversion required
- internalValue =
- InternalValue.create(InternalValue.create(name).toJCRValue(session.getNamespaceResolver()),
- reqType, session.getNamespaceResolver());
+ Value targetValue = ValueHelper.convert(
+ InternalValue.create(name).toJCRValue(session.getNamespaceResolver()),
+ reqType);
+ internalValue = InternalValue.create(targetValue, session.getNamespaceResolver());
} else {
// no type conversion required
internalValue = InternalValue.create(name);
@@ -686,7 +689,8 @@
InternalValue value;
if (reqType != PropertyType.DATE) {
// type conversion required
- value = InternalValue.create(new DateValue(date), reqType, session.getNamespaceResolver());
+ Value targetVal = ValueHelper.convert(new DateValue(date), reqType);
+ value = InternalValue.create(targetVal, session.getNamespaceResolver());
} else {
// no type conversion required
value = InternalValue.create(date);
@@ -717,7 +721,8 @@
InternalValue value;
if (reqType != PropertyType.DOUBLE) {
// type conversion required
- value = InternalValue.create(new DoubleValue(number), reqType, session.getNamespaceResolver());
+ Value targetVal = ValueHelper.convert(new DoubleValue(number), reqType);
+ value = InternalValue.create(targetVal, session.getNamespaceResolver());
} else {
// no type conversion required
value = InternalValue.create(number);
@@ -754,7 +759,8 @@
try {
if (reqType != PropertyType.BINARY) {
// type conversion required
- value = InternalValue.create(new BLOBFileValue(stream), reqType, session.getNamespaceResolver());
+ Value targetVal = ValueHelper.convert(new BLOBFileValue(stream), reqType);
+ value = InternalValue.create(targetVal, session.getNamespaceResolver());
} else {
// no type conversion required
value = InternalValue.create(stream);
@@ -795,7 +801,8 @@
InternalValue internalValue;
if (reqType != PropertyType.STRING) {
// type conversion required
- internalValue = InternalValue.create(string, reqType, session.getNamespaceResolver());
+ Value targetValue = ValueHelper.convert(string, reqType);
+ internalValue = InternalValue.create(targetValue, session.getNamespaceResolver());
} else {
// no type conversion required
internalValue = InternalValue.create(string);
@@ -832,7 +839,8 @@
if (string != null) {
if (reqType != PropertyType.STRING) {
// type conversion required
- internalValue = InternalValue.create(string, reqType, session.getNamespaceResolver());
+ Value targetValue = ValueHelper.convert(string, reqType);
+ internalValue = InternalValue.create(targetValue, session.getNamespaceResolver());
} else {
// no type conversion required
internalValue = InternalValue.create(string);
@@ -867,7 +875,8 @@
InternalValue value;
if (reqType != PropertyType.BOOLEAN) {
// type conversion required
- value = InternalValue.create(new BooleanValue(b), reqType, session.getNamespaceResolver());
+ Value targetVal = ValueHelper.convert(new BooleanValue(b), reqType);
+ value = InternalValue.create(targetVal, session.getNamespaceResolver());
} else {
// no type conversion required
value = InternalValue.create(b);
@@ -940,7 +949,8 @@
InternalValue value;
if (reqType != PropertyType.LONG) {
// type conversion required
- value = InternalValue.create(new LongValue(number), reqType, session.getNamespaceResolver());
+ Value targetVal = ValueHelper.convert(new LongValue(number), reqType);
+ value = InternalValue.create(targetVal, session.getNamespaceResolver());
} else {
// no type conversion required
value = InternalValue.create(number);
@@ -980,7 +990,8 @@
InternalValue internalValue;
if (reqType != value.getType()) {
// type conversion required
- internalValue = InternalValue.create(value, reqType, session.getNamespaceResolver());
+ Value targetVal = ValueHelper.convert(value, reqType);
+ internalValue = InternalValue.create(targetVal, session.getNamespaceResolver());
} else {
// no type conversion required
internalValue = InternalValue.create(value, session.getNamespaceResolver());
@@ -1035,10 +1046,10 @@
// use the value's type as property type
reqType = value.getType();
}
- if (reqType != PropertyType.UNDEFINED
- && reqType != value.getType()) {
+ if (reqType != value.getType()) {
// type conversion required
- internalValue = InternalValue.create(value, reqType, session.getNamespaceResolver());
+ Value targetVal = ValueHelper.convert(value, reqType);
+ internalValue = InternalValue.create(targetVal, session.getNamespaceResolver());
} else {
// no type conversion required
internalValue = InternalValue.create(value, session.getNamespaceResolver());
Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java?rev=419916&r1=419915&r2=419916&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java Fri Jul 7 09:13:03 2006
@@ -23,6 +23,7 @@
import org.apache.jackrabbit.name.NoPrefixDeclaredException;
import org.apache.jackrabbit.name.QName;
import org.apache.jackrabbit.name.UnknownPrefixException;
+import org.apache.jackrabbit.value.ValueHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -375,10 +376,17 @@
// no type conversion required
targetType = value.getType();
}
- // create InternalValue from Value and perform
- // type conversion as necessary
- InternalValue internalValue = InternalValue.create(value, targetType,
- nsResolver);
+ // perform type conversion as necessary and create InternalValue
+ // from (converted) Value
+ InternalValue internalValue;
+ if (targetType != value.getType()) {
+ // type conversion required
+ Value targetVal = ValueHelper.convert(value, targetType);
+ internalValue = InternalValue.create(targetVal, nsResolver);
+ } else {
+ // no type conversion required
+ internalValue = InternalValue.create(value, nsResolver);
+ }
EffectiveNodeType.checkSetPropertyValueConstraints(
def, new InternalValue[]{internalValue});
return true;
@@ -444,11 +452,17 @@
// convert values and compact array (purge null entries)
for (int i = 0; i < values.length; i++) {
if (values[i] != null) {
- // create InternalValue from Value and perform
- // type conversion as necessary
- InternalValue internalValue =
- InternalValue.create(values[i], targetType,
- nsResolver);
+ // perform type conversion as necessary and create InternalValue
+ // from (converted) Value
+ InternalValue internalValue;
+ if (targetType != type) {
+ // type conversion required
+ Value targetVal = ValueHelper.convert(values[i], targetType);
+ internalValue = InternalValue.create(targetVal, nsResolver);
+ } else {
+ // no type conversion required
+ internalValue = InternalValue.create(values[i], nsResolver);
+ }
list.add(internalValue);
}
}
Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java?rev=419916&r1=419915&r2=419916&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java Fri Jul 7 09:13:03 2006
@@ -30,6 +30,7 @@
import org.apache.jackrabbit.name.QName;
import org.apache.jackrabbit.name.UnknownPrefixException;
import org.apache.jackrabbit.util.name.NamespaceMapping;
+import org.apache.jackrabbit.value.ValueHelper;
import javax.jcr.NamespaceException;
import javax.jcr.PropertyType;
@@ -484,7 +485,7 @@
nextToken();
InternalValue value = null;
try {
- value = InternalValue.create(currentToken, pdi.getRequiredType(), nsMapping);
+ value = InternalValue.create(ValueHelper.convert(currentToken, pdi.getRequiredType()), nsMapping);
} catch (ValueFormatException e) {
lexer.fail("'" + currentToken + "' is not a valid string representation of a value of type " + pdi.getRequiredType());
} catch (RepositoryException e) {
Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/xml/NodeTypeReader.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/xml/NodeTypeReader.java?rev=419916&r1=419915&r2=419916&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/xml/NodeTypeReader.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/xml/NodeTypeReader.java Fri Jul 7 09:13:03 2006
@@ -31,6 +31,7 @@
import org.apache.jackrabbit.name.NamespaceResolver;
import org.apache.jackrabbit.name.QName;
import org.apache.jackrabbit.name.UnknownPrefixException;
+import org.apache.jackrabbit.value.ValueHelper;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
@@ -255,7 +256,7 @@
while (walker.iterateElements(Constants.DEFAULTVALUE_ELEMENT)) {
String value = walker.getContent();
try {
- values.add(InternalValue.create(value, type, resolver));
+ values.add(InternalValue.create(ValueHelper.convert(value, type), resolver));
} catch (RepositoryException e) {
throw new InvalidNodeTypeDefException(
"Unable to create default value: " + value, e);
Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java?rev=419916&r1=419915&r2=419916&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java Fri Jul 7 09:13:03 2006
@@ -35,7 +35,6 @@
import org.apache.jackrabbit.value.PathValue;
import org.apache.jackrabbit.value.ReferenceValue;
import org.apache.jackrabbit.value.StringValue;
-import org.apache.jackrabbit.value.ValueHelper;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
@@ -144,40 +143,6 @@
/**
* @param value
- * @param targetType
- * @param nsResolver
- * @return
- * @throws ValueFormatException
- * @throws RepositoryException
- */
- public static InternalValue create(Value value, int targetType,
- NamespaceResolver nsResolver)
- throws ValueFormatException, RepositoryException {
- if (value == null) {
- throw new IllegalArgumentException("null value");
- }
- return create(ValueHelper.convert(value, targetType), nsResolver);
- }
-
- /**
- * @param value
- * @param targetType
- * @param nsResolver
- * @return
- * @throws ValueFormatException
- * @throws RepositoryException
- */
- public static InternalValue create(String value, int targetType,
- NamespaceResolver nsResolver)
- throws ValueFormatException, RepositoryException {
- if (value == null) {
- throw new IllegalArgumentException("null value");
- }
- return create(ValueHelper.convert(value, targetType), nsResolver);
- }
-
- /**
- * @param value
* @return
*/
public static InternalValue create(String value) {
@@ -383,47 +348,42 @@
* @throws RepositoryException
*/
public InternalValue createCopy() throws RepositoryException {
- switch (type) {
- case PropertyType.BINARY:
+ if (type == PropertyType.BINARY) {
+ // return a copy since the wrapped BLOBFileValue instance is mutable
+ try {
+ InputStream stream = ((BLOBFileValue) val).getStream();
try {
- InputStream stream = ((BLOBFileValue) val).getStream();
+ return new InternalValue(new BLOBFileValue(stream));
+ } finally {
try {
- return new InternalValue(new BLOBFileValue(stream));
- } finally {
- try {
- stream.close();
- } catch (IOException e) {
- // ignore
- }
+ stream.close();
+ } catch (IOException e) {
+ // ignore
}
- } catch (IOException ioe) {
- throw new RepositoryException("failed to copy binary value", ioe);
}
- case PropertyType.BOOLEAN:
- return new InternalValue(((Boolean) val).booleanValue());
- case PropertyType.DATE:
- return new InternalValue((Calendar) val);
- case PropertyType.DOUBLE:
- return new InternalValue(((Double) val).doubleValue());
- case PropertyType.LONG:
- return new InternalValue(((Long) val).longValue());
- case PropertyType.REFERENCE:
- return new InternalValue((UUID) val);
- case PropertyType.PATH:
- return new InternalValue((Path) val);
- case PropertyType.NAME:
- return new InternalValue((QName) val);
- case PropertyType.STRING:
- return new InternalValue((String) val);
- default:
- throw new RepositoryException("illegal internal value type");
+ } catch (IOException ioe) {
+ throw new RepositoryException("failed to copy binary value", ioe);
+ }
+ } else {
+ // for all other types it's safe to return 'this' because the
+ // wrapped value is immutable (and therefore this instance as well)
+ return this;
}
}
/**
- * @param s
+ * Parses the given string as an <code>InternalValue</code> of the
+ * specified type. The string must be in the format returned by the
+ * <code>InternalValue.toString()</code> method.
+ *
+ * @param s a <code>String</code> containing the <code>InternalValue</code>
+ * representation to be parsed.
* @param type
- * @return
+ * @return the <code>InternalValue</code> represented by the arguments
+ * @throws IllegalArgumentException if the specified string can not be parsed
+ * as an <code>InternalValue</code> of the
+ * specified type.
+ * @see #toString()
*/
public static InternalValue valueOf(String s, int type) {
switch (type) {
@@ -445,7 +405,8 @@
return new InternalValue(s);
case PropertyType.BINARY:
- throw new IllegalArgumentException("this method does not support the type PropertyType.BINARY");
+ throw new IllegalArgumentException(
+ "this method does not support the type PropertyType.BINARY");
default:
throw new IllegalArgumentException("illegal type");
}
Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/BufferedStringValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/BufferedStringValue.java?rev=419916&r1=419915&r2=419916&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/BufferedStringValue.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/BufferedStringValue.java Fri Jul 7 09:13:03 2006
@@ -238,7 +238,7 @@
// convert serialized value to InternalValue using
// current namespace context of xml document
InternalValue ival =
- InternalValue.create(retrieve(), targetType, nsContext);
+ InternalValue.create(ValueHelper.convert(retrieve(), targetType), nsContext);
// convert InternalValue to Value using this
// session's namespace mappings
return ival.toJCRValue(resolver);
@@ -297,7 +297,7 @@
} else {
// convert serialized value to InternalValue using
// current namespace context of xml document
- return InternalValue.create(retrieve(), type, nsContext);
+ return InternalValue.create(ValueHelper.convert(retrieve(), type), nsContext);
}
} catch (IOException e) {
throw new RepositoryException("Error accessing property value", e);
Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/StringValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/StringValue.java?rev=419916&r1=419915&r2=419916&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/StringValue.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/StringValue.java Fri Jul 7 09:13:03 2006
@@ -60,7 +60,8 @@
// convert serialized value to InternalValue using
// current namespace context of xml document
- InternalValue ival = InternalValue.create(value, type, nsContext);
+ InternalValue ival =
+ InternalValue.create(ValueHelper.convert(value, type), nsContext);
// convert InternalValue to Value using this
// session's namespace mappings
return ival.toJCRValue(resolver);
@@ -84,7 +85,7 @@
} else {
// convert serialized value to InternalValue using
// current namespace context of xml document
- return InternalValue.create(value, targetType, nsContext);
+ return InternalValue.create(ValueHelper.convert(value, targetType), nsContext);
}
} catch (IOException e) {
throw new RepositoryException("Error decoding Base64 content", e);
Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/value/ValueHelper.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/value/ValueHelper.java?rev=419916&r1=419915&r2=419916&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/value/ValueHelper.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/value/ValueHelper.java Fri Jul 7 09:13:03 2006
@@ -53,6 +53,7 @@
* @return
* @throws ValueFormatException
* @throws IllegalArgumentException
+ * @see #convert(Value, int)
*/
public static Value convert(String srcValue, int targetType)
throws ValueFormatException, IllegalArgumentException {
@@ -69,6 +70,7 @@
* @return
* @throws ValueFormatException
* @throws IllegalArgumentException
+ * @see #convert(Value, int)
*/
public static Value[] convert(String[] srcValues, int targetType)
throws ValueFormatException, IllegalArgumentException {
@@ -88,6 +90,7 @@
* @return
* @throws ValueFormatException
* @throws IllegalArgumentException
+ * @see #convert(Value, int)
*/
public static Value[] convert(Value[] srcValues, int targetType)
throws ValueFormatException, IllegalArgumentException {
@@ -117,6 +120,10 @@
}
/**
+ * Converts the given value to a value of the specified target type.
+ * The conversion is performed according to the rules described in
+ * "6.2.6 Property Type Conversion" in the JSR 170 specification.
+ *
* @param srcValue
* @param targetType
* @return