You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2008/05/15 14:52:07 UTC
svn commit: r656637 - in /jackrabbit/trunk:
jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/
jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/
jackrabbit-spi-commons/src/test/java/org/apache/j...
Author: angela
Date: Thu May 15 05:52:06 2008
New Revision: 656637
URL: http://svn.apache.org/viewvc?rev=656637&view=rev
Log:
JCR-1555: Add support for boolean values to QValue
Modified:
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/QValueFactoryImpl.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/ValueFactoryQImpl.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/ValueFormat.java
jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/BooleanConstraintTest.java
jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/value/QValueTest.java
jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValue.java
jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValueFactory.java
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/QValueFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/QValueFactoryImpl.java?rev=656637&r1=656636&r2=656637&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/QValueFactoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/QValueFactoryImpl.java Thu May 15 05:52:06 2008
@@ -16,40 +16,41 @@
*/
package org.apache.jackrabbit.spi.commons.value;
-import org.apache.jackrabbit.spi.commons.name.NameConstants;
-import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
-import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.TimeZone;
+
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.ValueFormatException;
+
import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.NameFactory;
import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.PathFactory;
import org.apache.jackrabbit.spi.QPropertyDefinition;
import org.apache.jackrabbit.spi.QValue;
import org.apache.jackrabbit.spi.QValueFactory;
-import org.apache.jackrabbit.spi.PathFactory;
-import org.apache.jackrabbit.spi.NameFactory;
-import org.apache.jackrabbit.util.TransientFileFactory;
+import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
+import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
import org.apache.jackrabbit.util.ISO8601;
+import org.apache.jackrabbit.util.TransientFileFactory;
import org.apache.jackrabbit.uuid.UUID;
-import javax.jcr.RepositoryException;
-import javax.jcr.ValueFormatException;
-import javax.jcr.PropertyType;
-import java.util.Calendar;
-import java.util.Arrays;
-import java.util.TimeZone;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.ByteArrayInputStream;
-import java.io.UnsupportedEncodingException;
-import java.io.OutputStream;
-import java.io.FileOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.Serializable;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-
/**
* <code>QValueFactoryImpl</code>...
*/
@@ -84,7 +85,9 @@
try {
switch (type) {
case PropertyType.BOOLEAN:
- return new QValueImpl(Boolean.valueOf(value));
+ return (Boolean.valueOf(value).booleanValue()) ?
+ QValueImpl.TRUE :
+ QValueImpl.FALSE;
case PropertyType.DATE: {
Calendar cal = ISO8601.parse(value);
if (cal == null) {
@@ -144,6 +147,17 @@
}
/**
+ * @see QValueFactory#create(boolean)
+ */
+ public QValue create(boolean value) {
+ if (value) {
+ return QValueImpl.TRUE;
+ } else {
+ return QValueImpl.FALSE;
+ }
+ }
+
+ /**
* @see QValueFactory#create(Name)
*/
public QValue create(Name value) {
@@ -219,6 +233,10 @@
*/
private static class QValueImpl implements QValue, Serializable {
+ private static final QValue TRUE = new QValueImpl(Boolean.TRUE);
+
+ private static final QValue FALSE = new QValueImpl(Boolean.FALSE);
+
private final Object val;
private final int type;
@@ -371,6 +389,18 @@
}
/**
+ * @throws RepositoryException
+ * @see QValue#getBoolean()
+ */
+ public boolean getBoolean() throws RepositoryException {
+ if (type == PropertyType.BOOLEAN) {
+ return ((Boolean) val).booleanValue();
+ } else {
+ return Boolean.valueOf(getString()).booleanValue();
+ }
+ }
+
+ /**
* @see QValue#getPath()
*/
public Path getPath() throws RepositoryException {
@@ -425,6 +455,7 @@
public int hashCode() {
return val.hashCode();
}
+
}
//--------------------------------------------------------< Inner Class >---
@@ -744,6 +775,13 @@
}
/**
+ * @see QValue#getBoolean()
+ */
+ public boolean getBoolean() throws RepositoryException {
+ return Boolean.valueOf(getString()).booleanValue();
+ }
+
+ /**
* @see QValue#getPath()
*/
public Path getPath() throws RepositoryException {
@@ -903,5 +941,7 @@
// deserialized value is always temp
temp = true;
}
+
}
-}
\ No newline at end of file
+
+}
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/ValueFactoryQImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/ValueFactoryQImpl.java?rev=656637&r1=656636&r2=656637&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/ValueFactoryQImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/ValueFactoryQImpl.java Thu May 15 05:52:06 2008
@@ -114,7 +114,7 @@
*/
public Value createValue(boolean value) {
try {
- QValue qvalue = qfactory.create(Boolean.toString(value), PropertyType.BOOLEAN);
+ QValue qvalue = qfactory.create(value);
return new QValueValue(qvalue, resolver);
} catch (RepositoryException ex) {
throw new RuntimeException(ex);
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/ValueFormat.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/ValueFormat.java?rev=656637&r1=656636&r2=656637&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/ValueFormat.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/ValueFormat.java Thu May 15 05:52:06 2008
@@ -148,13 +148,11 @@
ValueFactory factory) throws RepositoryException {
if (factory instanceof ValueFactoryQImpl) {
return ((ValueFactoryQImpl)factory).createValue(qualifiedValue);
- }
- else {
+ } else {
Value jcrValue;
int propertyType = qualifiedValue.getType();
switch (propertyType) {
case PropertyType.STRING:
- case PropertyType.BOOLEAN:
case PropertyType.REFERENCE:
jcrValue = factory.createValue(qualifiedValue.getString(), propertyType);
break;
@@ -166,6 +164,9 @@
Name qName = qualifiedValue.getName();
jcrValue = factory.createValue(resolver.getJCRName(qName), propertyType);
break;
+ case PropertyType.BOOLEAN:
+ jcrValue = factory.createValue(qualifiedValue.getBoolean());
+ break;
case PropertyType.BINARY:
jcrValue = factory.createValue(qualifiedValue.getStream());
break;
@@ -173,8 +174,8 @@
jcrValue = factory.createValue(qualifiedValue.getCalendar());
break;
case PropertyType.DOUBLE:
- jcrValue = factory.createValue(qualifiedValue.getDouble());
- break;
+ jcrValue = factory.createValue(qualifiedValue.getDouble());
+ break;
case PropertyType.LONG:
jcrValue = factory.createValue(qualifiedValue.getLong());
break;
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/BooleanConstraintTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/BooleanConstraintTest.java?rev=656637&r1=656636&r2=656637&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/BooleanConstraintTest.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/BooleanConstraintTest.java Thu May 15 05:52:06 2008
@@ -57,8 +57,8 @@
protected QValue[] createNonMatchingValues() throws RepositoryException {
return new QValue[] {
- valueFactory.create(Boolean.FALSE.toString(), PropertyType.BOOLEAN),
- valueFactory.create(Boolean.TRUE.toString(), PropertyType.BOOLEAN)
+ valueFactory.create(Boolean.FALSE.booleanValue()),
+ valueFactory.create(Boolean.TRUE.booleanValue())
};
}
@@ -68,9 +68,9 @@
public void testTrueConstraint() throws RepositoryException, ConstraintViolationException {
ValueConstraint vc = new BooleanConstraint(Boolean.TRUE.toString());
- vc.check(valueFactory.create(Boolean.TRUE.toString(), PropertyType.BOOLEAN));
+ vc.check(valueFactory.create(true));
try {
- vc.check(valueFactory.create(Boolean.FALSE.toString(), PropertyType.BOOLEAN));
+ vc.check(valueFactory.create(false));
fail();
} catch (ConstraintViolationException e) {
// ok
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/value/QValueTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/value/QValueTest.java?rev=656637&r1=656636&r2=656637&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/value/QValueTest.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/value/QValueTest.java Thu May 15 05:52:06 2008
@@ -16,34 +16,34 @@
*/
package org.apache.jackrabbit.spi.commons.value;
-import junit.framework.TestCase;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.util.Arrays;
+import java.util.Calendar;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.ValueFormatException;
-import java.util.Calendar;
-import java.util.Arrays;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.io.FileInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ObjectInputStream;
-import java.io.BufferedInputStream;
+import junit.framework.TestCase;
-import org.apache.jackrabbit.util.ISO8601;
-import org.apache.jackrabbit.uuid.UUID;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.Path;
import org.apache.jackrabbit.spi.QValue;
import org.apache.jackrabbit.spi.QValueFactory;
import org.apache.jackrabbit.spi.commons.name.NameConstants;
import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
+import org.apache.jackrabbit.util.ISO8601;
+import org.apache.jackrabbit.uuid.UUID;
/**
* <code>QValueTest</code>...
@@ -66,6 +66,7 @@
}
//-------------------------------------------------------------< DOUBLE >---
+
public void testCreateInvalidDoubleValue() throws RepositoryException {
try {
factory.create("any", PropertyType.DOUBLE);
@@ -77,7 +78,7 @@
public void testGetDoubleOnBooleanValue() throws RepositoryException {
try {
- QValue v = factory.create(Boolean.TRUE.toString(), PropertyType.BOOLEAN);
+ QValue v = factory.create(true);
v.getDouble();
fail("'true' cannot be converted to a valid double value.");
} catch (ValueFormatException e) {
@@ -98,7 +99,7 @@
public void testGetLongOnBooleanValue() throws RepositoryException {
try {
- QValue v = factory.create(Boolean.TRUE.toString(), PropertyType.BOOLEAN);
+ QValue v = factory.create(true);
v.getLong();
fail("'true' cannot be converted to a valid long value.");
} catch (ValueFormatException e) {
@@ -106,6 +107,71 @@
}
}
+ //------------------------------------------------------------< BOOLEAN >---
+ /**
+ * QValueImpl has a final static constant for the TRUE and the FALSE boolean
+ * values. Test if the various create methods use the constants (thus always
+ * return the 'same' object.
+ *
+ * @throws RepositoryException
+ */
+ public void testFinalBooleanValue() throws RepositoryException {
+ assertSame(factory.create(true), factory.create(Boolean.TRUE.toString(), PropertyType.BOOLEAN));
+ assertSame(factory.create(true), factory.create(true));
+
+ assertSame(factory.create(false), factory.create(Boolean.FALSE.toString(), PropertyType.BOOLEAN));
+ assertSame(factory.create(false), factory.create(false));
+ }
+
+ /**
+ * Test if creating Boolean QValue from boolean and from String with boolean
+ * type return equal objects.
+ *
+ * @throws RepositoryException
+ */
+ public void testCreateBooleanValueFromString() throws RepositoryException {
+ QValue v = factory.create(Boolean.TRUE.toString(), PropertyType.BOOLEAN);
+ assertEquals("Creating boolean type QValue from boolean or String must be equal.",
+ factory.create(true), v);
+
+ v = factory.create(Boolean.FALSE.toString(), PropertyType.BOOLEAN);
+ assertEquals("Creating boolean type QValue from boolean or String must be equal.",
+ factory.create(false), v);
+ }
+
+ public void testCreateTrueBooleanValue() throws RepositoryException {
+ QValue v = factory.create(true);
+ assertEquals("Boolean value must be true", Boolean.TRUE.toString(), v.getString());
+ assertEquals("Boolean value must be true", true, v.getBoolean());
+ }
+
+ public void testCreateFalseBooleanValue() throws RepositoryException {
+ QValue v = factory.create(false);
+ assertEquals("Boolean value must be false", Boolean.FALSE.toString(), v.getString());
+ assertEquals("Boolean value must be false", false, v.getBoolean());
+ }
+
+ public void testCreateTrueFromString() throws ValueFormatException, RepositoryException {
+ QValue v = factory.create(Boolean.TRUE.toString(), PropertyType.STRING);
+ assertEquals("Boolean value must be true", true, v.getBoolean());
+ }
+
+ public void testCreateFalseFromString() throws ValueFormatException, RepositoryException {
+ QValue v = factory.create("any", PropertyType.STRING);
+ assertEquals("Boolean value must be false", false, v.getBoolean());
+ }
+
+ public void testReadBooleanAsLong() throws RepositoryException {
+ try {
+ QValue v = factory.create(true);
+ v.getLong();
+ }
+ catch (ValueFormatException e) {
+ return; // ok
+ }
+ assertTrue("Cannot convert value to long", false);
+ }
+
//---------------------------------------------------------------< DATE >---
public void testNullDateValue() throws IOException, RepositoryException {
try {
@@ -145,6 +211,7 @@
}
//----------------------------------------------------------< REFERENCE >---
+
public void testNullReferenceValue() throws IOException, RepositoryException {
try {
factory.create(null, PropertyType.REFERENCE);
@@ -173,6 +240,7 @@
//---------------------------------------------------------------< Name >---
+
public void testNullNameValue() throws IOException, RepositoryException {
try {
factory.create((Name) null);
@@ -224,6 +292,7 @@
}
//---------------------------------------------------------------< Path >---
+
public void testNullPathValue() throws IOException, RepositoryException {
try {
factory.create((Path) null);
@@ -274,7 +343,9 @@
// ok
}
}
+
//-------------------------------------------------------------< BINARY >---
+
public void testNullBinaryValue() throws IOException, RepositoryException {
try {
factory.create((byte[]) null);
@@ -347,4 +418,4 @@
serValue.discard();
}
}
-}
\ No newline at end of file
+}
Modified: jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValue.java?rev=656637&r1=656636&r2=656637&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValue.java (original)
+++ jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValue.java Thu May 15 05:52:06 2008
@@ -16,12 +16,13 @@
*/
package org.apache.jackrabbit.spi;
-import javax.jcr.RepositoryException;
-import javax.jcr.PropertyType;
-import javax.jcr.Property;
import java.io.InputStream;
import java.util.Calendar;
+import javax.jcr.Property;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+
/**
* <code>QValue</code> is the qualified SPI representation of a
* {@link javax.jcr.Value jcr value}. It therefore refers to <code>Name</code>s
@@ -107,6 +108,15 @@
public long getLong() throws RepositoryException;
/**
+ * Returns a <code>boolean</code> representation of this value.
+ *
+ * @return A <code>boolean</code> representation of this value.
+ * @throws RepositoryException if an error occurs.
+ */
+ public boolean getBoolean() throws RepositoryException;
+
+
+ /**
* Returns a <code>Name</code> representation of this value.
*
* @return A <code>Name</code> representation of this value.
Modified: jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValueFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValueFactory.java?rev=656637&r1=656636&r2=656637&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValueFactory.java (original)
+++ jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValueFactory.java Thu May 15 05:52:06 2008
@@ -16,8 +16,8 @@
*/
package org.apache.jackrabbit.spi;
-import java.io.IOException;
import java.io.File;
+import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
@@ -73,6 +73,15 @@
public QValue create(long value) throws RepositoryException;
/**
+ * Create a new <code>QValue</code> with type {@link javax.jcr.PropertyType#BOOLEAN}.
+ *
+ * @param value A <code>boolean</code> containing the value
+ * of the new <code>QValue</code>.
+ * @return a new <code>QValue</code>.
+ */
+ public QValue create(boolean value) throws RepositoryException;
+
+ /**
* Create a new <code>QValue</code> with type {@link javax.jcr.PropertyType#NAME}.
*
* @param value A non-null <code>Name</code>.