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 2009/05/20 15:08:10 UTC
svn commit: r776687 - in /jackrabbit/trunk:
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/
j...
Author: stefan
Date: Wed May 20 13:08:09 2009
New Revision: 776687
URL: http://svn.apache.org/viewvc?rev=776687&view=rev
Log:
JCR-1609: new Property Types (WIP...)
JCR-2061: References and Dereferencing of Property Values (WIP...)
Added:
jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/DecimalValue.java
- copied, changed from r775860, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/DoubleValue.java
jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/URIValue.java
- copied, changed from r775860, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/PathValue.java
jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/WeakReferenceValue.java
- copied, changed from r775860, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ReferenceValue.java
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValueFactory.java
jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/BaseValue.java
jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ValueFactoryImpl.java
jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ValueHelper.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValue.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/QValueFactoryImpl.java
jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValue.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java?rev=776687&r1=776686&r2=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java Wed May 20 13:08:09 2009
@@ -47,6 +47,8 @@
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Value;
import javax.jcr.ValueFormatException;
+import javax.jcr.query.Query;
+import javax.jcr.query.QueryResult;
import javax.jcr.lock.Lock;
import javax.jcr.lock.LockException;
import javax.jcr.lock.LockManager;
@@ -1692,16 +1694,6 @@
return prop;
}
- public Property setProperty(String name, BigDecimal value) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException {
- // TODO
- throw new RuntimeException("Not implemented yet, see JCR-1609");
- }
-
- public Property setProperty(String name, Binary value) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException {
- // TODO
- throw new RuntimeException("Not implemented yet, see JCR-1609");
- }
-
/**
* @see ItemImpl#getQName()
*/
@@ -4536,16 +4528,14 @@
//--------------------------------------------------< new JSR 283 methods >
/**
- * @see javax.jcr.Node#getIdentifier()
- * @since JCR 2.0
+ * {@inheritDoc}
*/
public String getIdentifier() throws RepositoryException {
return ((NodeId) id).toString();
}
/**
- * @see javax.jcr.Node#getReferences(String)
- * @since JCR 2.0
+ * {@inheritDoc}
*/
public PropertyIterator getReferences(String name)
throws RepositoryException {
@@ -4587,26 +4577,55 @@
}
/**
- * @see javax.jcr.Node#getWeakReferences()
- * @since JCR 2.0
+ * {@inheritDoc}
*/
public PropertyIterator getWeakReferences() throws RepositoryException {
- // TODO
- throw new RuntimeException("Not implemented yet, see JCR-2061");
+ return getWeakReferences(null);
}
/**
- * @see javax.jcr.Node#getWeakReferences(String)
- * @since JCR 2.0
+ * {@inheritDoc}
*/
public PropertyIterator getWeakReferences(String name) throws RepositoryException {
- // TODO
- throw new RuntimeException("Not implemented yet, see JCR-2061");
+ // check state of this instance
+ sanityCheck();
+
+ try {
+ Query q = session.getWorkspace().getQueryManager().createQuery(
+ "//*[jcr:contains[., '" + data.getId() + "']",
+ Query.XPATH);
+ QueryResult result = q.execute();
+ ArrayList l = new ArrayList<Property>();
+ for (NodeIterator nit = result.getNodes(); nit.hasNext(); ) {
+ Node n = nit.nextNode();
+ for (PropertyIterator pit = n.getProperties(); pit.hasNext(); ) {
+ Property p = pit.nextProperty();
+ if (p.getType() == PropertyType.WEAKREFERENCE
+ && p.getString().equals(getIdentifier())) {
+ if (name != null) {
+ if (name.equals(p.getName())) {
+ l.add(p);
+ }
+ } else {
+ l.add(p);
+ }
+ }
+ }
+ }
+ if (l.isEmpty()) {
+ return PropertyIteratorAdapter.EMPTY;
+ } else {
+ return new PropertyIteratorAdapter(l);
+ }
+ } catch (RepositoryException e) {
+ String msg = "Unable to retrieve WEAKREFERENCE properties that refer to " + id;
+ log.debug(msg);
+ throw new RepositoryException(msg, e);
+ }
}
/**
- * @see javax.jcr.Node#getNodes(String[])
- * @since JCR 2.0
+ * {@inheritDoc}
*/
public NodeIterator getNodes(String[] nameGlobs)
throws RepositoryException {
@@ -4620,8 +4639,7 @@
}
/**
- * @see javax.jcr.Node#getProperties(String[])
- * @since JCR 2.0
+ * {@inheritDoc}
*/
// TODO rename method to 'getProperties' once JCR 2.0 api has been fixed
public PropertyIterator getProperty(String[]
@@ -4637,8 +4655,7 @@
}
/**
- * @see javax.jcr.Node#setPrimaryType(String)
- * @since JCR 2.0
+ * {@inheritDoc}
*/
public void setPrimaryType(String nodeTypeName)
throws NoSuchNodeTypeException, VersionException,
@@ -4845,6 +4862,62 @@
}
}
+ /**
+ * {@inheritDoc}
+ */
+ public Property setProperty(String name, BigDecimal value)
+ throws ValueFormatException, VersionException, LockException,
+ ConstraintViolationException, RepositoryException {
+ // check state of this instance
+ sanityCheck();
+
+ // check pre-conditions for setting property
+ checkSetProperty();
+
+ BitSet status = new BitSet();
+ PropertyImpl prop = getOrCreateProperty(
+ name, PropertyType.DECIMAL, false, false, status);
+ try {
+ prop.setValue(value);
+ } catch (RepositoryException re) {
+ if (status.get(CREATED)) {
+ // setting value failed, get rid of newly created property
+ removeChildProperty(name);
+ }
+ // rethrow
+ throw re;
+ }
+ return prop;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Property setProperty(String name, Binary value)
+ throws ValueFormatException, VersionException, LockException,
+ ConstraintViolationException, RepositoryException {
+ // check state of this instance
+ sanityCheck();
+
+ // check pre-conditions for setting property
+ checkSetProperty();
+
+ BitSet status = new BitSet();
+ PropertyImpl prop = getOrCreateProperty(
+ name, PropertyType.BINARY, false, false, status);
+ try {
+ prop.setValue(value);
+ } catch (RepositoryException re) {
+ if (status.get(CREATED)) {
+ // setting value failed, get rid of newly created property
+ removeChildProperty(name);
+ }
+ // rethrow
+ throw re;
+ }
+ return prop;
+ }
+
// TODO: JCR-1565 JSR 283 lifecycle management
public String[] getAllowedLifecycleTransistions()
throws RepositoryException {
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java?rev=776687&r1=776686&r2=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java Wed May 20 13:08:09 2009
@@ -195,6 +195,9 @@
case PropertyType.DATE:
case PropertyType.REFERENCE:
case PropertyType.BOOLEAN:
+ case PropertyType.DECIMAL:
+ case PropertyType.URI:
+ case PropertyType.WEAKREFERENCE:
return value.toString().length();
case PropertyType.NAME:
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java?rev=776687&r1=776686&r2=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java Wed May 20 13:08:09 2009
@@ -87,6 +87,7 @@
}
switch (type) {
case PropertyType.STRING:
+ case PropertyType.URI:
return new StringConstraint(definition);
case PropertyType.BOOLEAN:
@@ -100,6 +101,7 @@
case PropertyType.LONG:
case PropertyType.DOUBLE:
+ case PropertyType.DECIMAL:
return new NumericConstraint(definition);
case PropertyType.NAME:
@@ -108,6 +110,7 @@
case PropertyType.PATH:
return new PathConstraint(definition, resolver);
+ case PropertyType.WEAKREFERENCE:
case PropertyType.REFERENCE:
return new ReferenceConstraint(definition, resolver);
@@ -301,13 +304,13 @@
void check(double number) throws ConstraintViolationException {
if (lowerLimit != null) {
if (lowerInclusive) {
- if (number < lowerLimit.doubleValue()) {
+ if (number < lowerLimit) {
throw new ConstraintViolationException(number
+ " does not satisfy the constraint '"
+ definition + "'");
}
} else {
- if (number <= lowerLimit.doubleValue()) {
+ if (number <= lowerLimit) {
throw new ConstraintViolationException(number
+ " does not satisfy the constraint '"
+ definition + "'");
@@ -316,13 +319,13 @@
}
if (upperLimit != null) {
if (upperInclusive) {
- if (number > upperLimit.doubleValue()) {
+ if (number > upperLimit) {
throw new ConstraintViolationException(number
+ " does not satisfy the constraint '"
+ definition + "'");
}
} else {
- if (number >= upperLimit.doubleValue()) {
+ if (number >= upperLimit) {
throw new ConstraintViolationException(number
+ " does not satisfy the constraint '"
+ definition + "'");
@@ -345,6 +348,10 @@
check(value.getDouble());
return;
+ case PropertyType.DECIMAL:
+ check(value.getDouble());
+ return;
+
case PropertyType.BINARY:
BLOBFileValue blob = value.getBLOBFileValue();
long length = blob.getLength();
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java?rev=776687&r1=776686&r2=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java Wed May 20 13:08:09 2009
@@ -40,6 +40,7 @@
import java.io.InputStream;
import java.util.HashSet;
import java.util.Set;
+import java.math.BigDecimal;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
@@ -383,6 +384,9 @@
case PropertyType.DOUBLE:
val = InternalValue.create(in.readDouble());
break;
+ case PropertyType.DECIMAL:
+ val = InternalValue.create(readDecimal(in));
+ break;
case PropertyType.LONG:
val = InternalValue.create(in.readLong());
break;
@@ -392,6 +396,7 @@
case PropertyType.NAME:
val = InternalValue.create(readQName(in));
break;
+ case PropertyType.WEAKREFERENCE:
case PropertyType.REFERENCE:
val = InternalValue.create(readUUID(in));
break;
@@ -505,6 +510,15 @@
return false;
}
break;
+ case PropertyType.DECIMAL:
+ try {
+ BigDecimal d = readDecimal(in);
+ log.debug(" decimal: " + d);
+ } catch (IOException e) {
+ log.error("Error while reading decimal value: " + e);
+ return false;
+ }
+ break;
case PropertyType.LONG:
try {
double l = in.readLong();
@@ -532,6 +546,7 @@
return false;
}
break;
+ case PropertyType.WEAKREFERENCE:
case PropertyType.REFERENCE:
try {
UUID uuid = readUUID(in);
@@ -673,6 +688,14 @@
throw new IOException("Unexpected error while writing DOUBLE value.");
}
break;
+ case PropertyType.DECIMAL:
+ try {
+ writeDecimal(out, val.getDecimal());
+ } catch (RepositoryException e) {
+ // should never occur
+ throw new IOException("Unexpected error while writing DECIMAL value.");
+ }
+ break;
case PropertyType.LONG:
try {
out.writeLong(val.getLong());
@@ -692,6 +715,7 @@
case PropertyType.NAME:
writeQName(out, val.getQName());
break;
+ case PropertyType.WEAKREFERENCE:
case PropertyType.REFERENCE:
writeUUID(out, val.getUUID());
break;
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java?rev=776687&r1=776686&r2=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java Wed May 20 13:08:09 2009
@@ -38,6 +38,7 @@
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
+import java.math.BigDecimal;
/**
* This Class implements relatively efficient serialization methods for item
@@ -316,6 +317,37 @@
}
/**
+ * Deserializes a BigDecimal
+ * @param in the input stream
+ * @return the decimal
+ * @throws IOException in an I/O error occurs.
+ */
+ public BigDecimal readDecimal(DataInputStream in) throws IOException {
+ if (in.readBoolean()) {
+ // TODO more efficient serialization format
+ return new BigDecimal(in.readUTF());
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Serializes a BigDecimal
+ * @param out the output stream
+ * @param decimal the decimal number
+ * @throws IOException in an I/O error occurs.
+ */
+ public void writeDecimal(DataOutputStream out, BigDecimal decimal) throws IOException {
+ if (decimal == null) {
+ out.writeBoolean(false);
+ } else {
+ out.writeBoolean(true);
+ // TODO more efficient serialization format
+ out.writeUTF(decimal.toString());
+ }
+ }
+
+ /**
* Deserializes a NodeID
* @param in the input stream
* @return the uuid
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java?rev=776687&r1=776686&r2=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java Wed May 20 13:08:09 2009
@@ -21,6 +21,7 @@
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;
+import java.math.BigDecimal;
import javax.jcr.NamespaceException;
import javax.jcr.PropertyType;
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java?rev=776687&r1=776686&r2=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java Wed May 20 13:08:09 2009
@@ -29,6 +29,7 @@
import org.apache.jackrabbit.util.ISO8601;
import org.apache.jackrabbit.uuid.UUID;
import org.apache.jackrabbit.value.StringValue;
+import org.apache.jackrabbit.value.URIValue;
import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
import org.apache.jackrabbit.spi.commons.value.ValueFactoryQImpl;
@@ -49,6 +50,9 @@
import java.io.SequenceInputStream;
import java.io.UnsupportedEncodingException;
import java.util.Calendar;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.math.BigDecimal;
/**
* <code>InternalValue</code> represents the internal format of a property value.
@@ -64,6 +68,8 @@
* <tr>BOOLEAN<td></td><td>Boolean</td></tr>
* <tr>NAME<td></td><td>Name</td></tr>
* <tr>PATH<td></td><td>Path</td></tr>
+ * <tr>URI<td></td><td>URI</td></tr>
+ * <tr>DECIMAL<td></td><td>BigDecimal</td></tr>
* <tr>BINARY<td></td><td>BLOBFileValue</td></tr>
* <tr>REFERENCE<td></td><td>UUID</td></tr>
* </table>
@@ -152,10 +158,20 @@
return create(value.getDate());
case PropertyType.DOUBLE:
return create(value.getDouble());
+ case PropertyType.DECIMAL:
+ return create(value.getDecimal());
case PropertyType.LONG:
return create(value.getLong());
case PropertyType.REFERENCE:
return create(new UUID(value.getString()));
+ case PropertyType.WEAKREFERENCE:
+ return create(new UUID(value.getString()), true);
+ case PropertyType.URI:
+ try {
+ return create(new URI(value.getString()));
+ } catch (URISyntaxException e) {
+ throw new ValueFormatException(e.getMessage());
+ }
case PropertyType.NAME:
try {
if (value instanceof QValueValue) {
@@ -229,6 +245,22 @@
* @param value
* @return the created value
*/
+ public static InternalValue create(BigDecimal value) {
+ return new InternalValue(value);
+ }
+
+ /**
+ * @param value
+ * @return the created value
+ */
+ public static InternalValue create(URI value) {
+ return new InternalValue(value);
+ }
+
+ /**
+ * @param value
+ * @return the created value
+ */
public static InternalValue create(boolean value) {
return value ? BOOLEAN_TRUE : BOOLEAN_FALSE;
}
@@ -376,7 +408,16 @@
* @return the created value
*/
public static InternalValue create(UUID value) {
- return new InternalValue(value);
+ return create(value, false);
+ }
+
+ /**
+ * @param value
+ * @param weak
+ * @return the created value
+ */
+ public static InternalValue create(UUID value, boolean weak) {
+ return new InternalValue(value, weak);
}
//----------------------------------------------------< conversions, etc. >
@@ -409,8 +450,14 @@
return vf.createValue(((Double) val).doubleValue());
case PropertyType.LONG:
return vf.createValue(((Long) val).longValue());
+ case PropertyType.DECIMAL:
+ return vf.createValue((BigDecimal) val);
case PropertyType.REFERENCE:
return vf.createValue(val.toString(), PropertyType.REFERENCE);
+ case PropertyType.WEAKREFERENCE:
+ return vf.createValue(val.toString(), PropertyType.WEAKREFERENCE);
+ case PropertyType.URI:
+ return new URIValue((URI) val);
case PropertyType.PATH:
return vf.createValue(resolver.getJCRPath((Path) val), PropertyType.PATH);
case PropertyType.NAME:
@@ -507,12 +554,18 @@
return create(Double.parseDouble(s));
case PropertyType.LONG:
return create(Long.parseLong(s));
+ case PropertyType.DECIMAL:
+ return create(new BigDecimal(s));
case PropertyType.REFERENCE:
return create(new UUID(s));
+ case PropertyType.WEAKREFERENCE:
+ return create(new UUID(s), true);
case PropertyType.PATH:
return create(PathFactoryImpl.getInstance().create(s));
case PropertyType.NAME:
return create(NameFactoryImpl.getInstance().create(s));
+ case PropertyType.URI:
+ return create(URI.create(s));
case PropertyType.STRING:
return create(s);
@@ -564,6 +617,14 @@
super(Boolean.valueOf(value));
}
+ private InternalValue(URI value) {
+ super(value, PropertyType.URI);
+ }
+
+ private InternalValue(BigDecimal value) {
+ super(value, PropertyType.DECIMAL);
+ }
+
private InternalValue(BLOBFileValue value) {
super(value, PropertyType.BINARY);
}
@@ -576,6 +637,10 @@
super(value, PropertyType.REFERENCE);
}
+ private InternalValue(UUID value, boolean weak) {
+ super(value, weak ? PropertyType.WEAKREFERENCE : PropertyType.REFERENCE);
+ }
+
/**
* Create a BLOB value from in input stream. Small objects will create an in-memory object,
* while large objects are stored in the data store or in a temp file (if the store parameter is not set).
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValueFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValueFactory.java?rev=776687&r1=776686&r2=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValueFactory.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValueFactory.java Wed May 20 13:08:09 2009
@@ -37,6 +37,8 @@
import java.io.UnsupportedEncodingException;
import java.io.FileInputStream;
import java.util.Calendar;
+import java.math.BigDecimal;
+import java.net.URI;
/**
* <code>InternalValueFactory</code>...
@@ -76,18 +78,27 @@
return InternalValue.create(Double.parseDouble(value));
case PropertyType.LONG:
return InternalValue.create(Long.parseLong(value));
+ case PropertyType.DECIMAL:
+ return InternalValue.create(new BigDecimal(value));
case PropertyType.PATH:
return InternalValue.create(PathFactoryImpl.getInstance().create(value));
case PropertyType.NAME:
return InternalValue.create(NameFactoryImpl.getInstance().create(value));
case PropertyType.STRING:
return InternalValue.create(value);
+ case PropertyType.URI:
+ return InternalValue.create(URI.create(value));
case PropertyType.REFERENCE:
return InternalValue.create(new UUID(value));
+ case PropertyType.WEAKREFERENCE:
+ return InternalValue.create(new UUID(value), true);
case PropertyType.BINARY:
return InternalValue.create(value.getBytes("UTF-8"));
// default: invalid type specified -> see below.
}
+ } catch (NumberFormatException ex) {
+ // given String value cannot be converted to Decimal
+ throw new ValueFormatException(ex);
} catch (IllegalArgumentException ex) {
// given String value cannot be converted to Long/Double/Path/Name
throw new ValueFormatException(ex);
Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/BaseValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/BaseValue.java?rev=776687&r1=776686&r2=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/BaseValue.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/BaseValue.java Wed May 20 13:08:09 2009
@@ -37,12 +37,15 @@
* @see StringValue
* @see LongValue
* @see DoubleValue
+ * @see DecimalValue
* @see BooleanValue
* @see DateValue
* @see BinaryValue
* @see NameValue
* @see PathValue
+ * @see URIValue
* @see ReferenceValue
+ * @see WeakReferenceValue
*/
public abstract class BaseValue implements Value {
@@ -187,7 +190,6 @@
setValueConsumed();
try {
- // TODO: Is this the correct way to handle BigDecimal conversion
return new BigDecimal(getInternalString());
} catch (NumberFormatException e) {
throw new ValueFormatException("conversion to Decimal failed", e);
Copied: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/DecimalValue.java (from r775860, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/DoubleValue.java)
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/DecimalValue.java?p2=jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/DecimalValue.java&p1=jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/DoubleValue.java&r1=775860&r2=776687&rev=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/DoubleValue.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/DecimalValue.java Wed May 20 13:08:09 2009
@@ -21,52 +21,43 @@
import javax.jcr.ValueFormatException;
import java.util.Calendar;
import java.util.Date;
+import java.math.BigDecimal;
/**
- * A <code>DoubleValue</code> provides an implementation
- * of the <code>Value</code> interface representing a double value.
+ * A <code>DecimalValue</code> provides an implementation
+ * of the <code>Value</code> interface representing a <code>DECIMAL</code> value.
*/
-public class DoubleValue extends BaseValue {
+public class DecimalValue extends BaseValue {
- public static final int TYPE = PropertyType.DOUBLE;
+ public static final int TYPE = PropertyType.DECIMAL;
- private final Double dblNumber;
+ private final BigDecimal number;
/**
- * Constructs a <code>DoubleValue</code> object representing a double.
+ * Constructs a <code>DecimalValue</code> object representing a decimal.
*
- * @param dblNumber the double this <code>DoubleValue</code> should represent
+ * @param number the decimal this <code>DecimalValue</code> should represent
*/
- public DoubleValue(Double dblNumber) {
+ public DecimalValue(BigDecimal number) {
super(TYPE);
- this.dblNumber = dblNumber;
+ this.number = number;
}
/**
- * Constructs a <code>DoubleValue</code> object representing a double.
- *
- * @param dbl the double this <code>DoubleValue</code> should represent
- */
- public DoubleValue(double dbl) {
- super(TYPE);
- this.dblNumber = new Double(dbl);
- }
-
- /**
- * Returns a new <code>DoubleValue</code> initialized to the value
+ * Returns a new <code>DecimalValue</code> initialized to the value
* represented by the specified <code>String</code>.
*
* @param s the string to be parsed.
- * @return a newly constructed <code>DoubleValue</code> representing the
+ * @return a newly constructed <code>DecimalValue</code> representing the
* the specified value.
* @throws javax.jcr.ValueFormatException If the <code>String</code> does not
- * contain a parsable <code>double</code>.
+ * contain a parsable <code>decimal</code>.
*/
- public static DoubleValue valueOf(String s) throws ValueFormatException {
+ public static DecimalValue valueOf(String s) throws ValueFormatException {
try {
- return new DoubleValue(Double.parseDouble(s));
+ return new DecimalValue(new BigDecimal(s));
} catch (NumberFormatException e) {
- throw new ValueFormatException("not a valid double format: " + s, e);
+ throw new ValueFormatException("not a valid decimal format: " + s, e);
}
}
@@ -74,7 +65,7 @@
* Indicates whether some other object is "equal to" this one.
* <p/>
* The result is <code>true</code> if and only if the argument is not
- * <code>null</code> and is a <code>DoubleValue</code> object that
+ * <code>null</code> and is a <code>DecimalValue</code> object that
* represents the same value as this object.
*
* @param obj the reference object with which to compare.
@@ -85,12 +76,12 @@
if (this == obj) {
return true;
}
- if (obj instanceof DoubleValue) {
- DoubleValue other = (DoubleValue) obj;
- if (dblNumber == other.dblNumber) {
+ if (obj instanceof DecimalValue) {
+ DecimalValue other = (DecimalValue) obj;
+ if (number == other.number) {
return true;
- } else if (dblNumber != null && other.dblNumber != null) {
- return dblNumber.equals(other.dblNumber);
+ } else if (number != null && other.number != null) {
+ return number.equals(other.number);
}
}
return false;
@@ -112,8 +103,8 @@
* {@inheritDoc}
*/
protected String getInternalString() throws ValueFormatException {
- if (dblNumber != null) {
- return dblNumber.toString();
+ if (number != null) {
+ return number.toString();
} else {
throw new ValueFormatException("empty value");
}
@@ -128,10 +119,10 @@
RepositoryException {
setValueConsumed();
- if (dblNumber != null) {
+ if (number != null) {
// loosing timezone information...
Calendar cal = Calendar.getInstance();
- cal.setTime(new Date(dblNumber.longValue()));
+ cal.setTime(new Date(number.longValue()));
return cal;
} else {
throw new ValueFormatException("empty value");
@@ -146,8 +137,8 @@
RepositoryException {
setValueConsumed();
- if (dblNumber != null) {
- return dblNumber.longValue();
+ if (number != null) {
+ return number.longValue();
} else {
throw new ValueFormatException("empty value");
}
@@ -172,10 +163,25 @@
RepositoryException {
setValueConsumed();
- if (dblNumber != null) {
- return dblNumber.doubleValue();
+ if (number != null) {
+ return number.doubleValue();
+ } else {
+ throw new ValueFormatException("empty value");
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public BigDecimal getDecimal()
+ throws ValueFormatException, IllegalStateException,
+ RepositoryException {
+ setValueConsumed();
+
+ if (number != null) {
+ return number;
} else {
throw new ValueFormatException("empty value");
}
}
-}
+}
\ No newline at end of file
Copied: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/URIValue.java (from r775860, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/PathValue.java)
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/URIValue.java?p2=jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/URIValue.java&p1=jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/PathValue.java&r1=775860&r2=776687&rev=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/PathValue.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/URIValue.java Wed May 20 13:08:09 2009
@@ -16,68 +16,64 @@
*/
package org.apache.jackrabbit.value;
-import org.apache.jackrabbit.name.MalformedPathException;
-import org.apache.jackrabbit.name.PathFormat;
-
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.ValueFormatException;
import java.util.Calendar;
+import java.net.URI;
+import java.net.URISyntaxException;
/**
- * A <code>PathValue</code> provides an implementation
- * of the <code>Value</code> interface representing a <code>PATH</code> value
+ * A <code>URIValue</code> provides an implementation
+ * of the <code>Value</code> interface representing a <code>URI</code> value
* (an absolute or relative workspace path).
*/
-public class PathValue extends BaseValue {
+public class URIValue extends BaseValue {
- public static final int TYPE = PropertyType.PATH;
+ public static final int TYPE = PropertyType.URI;
- private final String path;
+ private final URI uri;
/**
- * Returns a new <code>PathValue</code> initialized to the value
+ * Returns a new <code>URIValue</code> initialized to the value
* represented by the specified <code>String</code>.
* <p/>
- * The specified <code>String</code> must be a valid absolute or relative
- * path.
+ * The specified <code>String</code> must be a valid URI.
*
* @param s the string to be parsed.
- * @return a newly constructed <code>PathValue</code> representing the
+ * @return a newly constructed <code>URIValue</code> representing the
* the specified value.
- * @throws javax.jcr.ValueFormatException If the <code>String</code> is not a valid
- * absolute or relative path.
+ * @throws javax.jcr.ValueFormatException If the <code>String</code> is not a valid URI.
*/
- public static PathValue valueOf(String s) throws ValueFormatException {
+ public static URIValue valueOf(String s) throws ValueFormatException {
if (s != null) {
try {
- PathFormat.checkFormat(s);
- } catch (MalformedPathException mpe) {
- throw new ValueFormatException(mpe.getMessage());
+ return new URIValue(new URI(s));
+ } catch (URISyntaxException e) {
+ throw new ValueFormatException(e.getMessage());
}
- return new PathValue(s);
} else {
- throw new ValueFormatException("not a valid path format: " + s);
+ throw new ValueFormatException("not a valid uri format: " + s);
}
}
/**
- * Protected constructor creating a <code>PathValue</code> object
- * without validating the path.
+ * Returns a new <code>URIValue</code> initialized to the value of the
+ * specified URI.
*
- * @param path the path this <code>PathValue</code> should represent
+ * @param uri the path this <code>URIValue</code> should represent
* @see #valueOf
*/
- protected PathValue(String path) {
+ public URIValue(URI uri) {
super(TYPE);
- this.path = path;
+ this.uri = uri;
}
/**
* Indicates whether some other object is "equal to" this one.
* <p/>
* The result is <code>true</code> if and only if the argument is not
- * <code>null</code> and is a <code>PathValue</code> object that
+ * <code>null</code> and is a <code>URIValue</code> object that
* represents the same value as this object.
*
* @param obj the reference object with which to compare.
@@ -88,12 +84,12 @@
if (this == obj) {
return true;
}
- if (obj instanceof PathValue) {
- PathValue other = (PathValue) obj;
- if (path == other.path) {
+ if (obj instanceof URIValue) {
+ URIValue other = (URIValue) obj;
+ if (uri == other.uri) {
return true;
- } else if (path != null && other.path != null) {
- return path.equals(other.path);
+ } else if (uri != null && other.uri != null) {
+ return uri.equals(other.uri);
}
}
return false;
@@ -115,8 +111,8 @@
* {@inheritDoc}
*/
protected String getInternalString() throws ValueFormatException {
- if (path != null) {
- return path;
+ if (uri != null) {
+ return uri.toString();
} else {
throw new ValueFormatException("empty value");
}
@@ -166,4 +162,4 @@
throw new ValueFormatException("conversion to double failed: inconvertible types");
}
-}
+}
\ No newline at end of file
Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ValueFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ValueFactoryImpl.java?rev=776687&r1=776686&r2=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ValueFactoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ValueFactoryImpl.java Wed May 20 13:08:09 2009
@@ -92,7 +92,7 @@
* {@inheritDoc}
*/
public Value createValue(Node value) throws RepositoryException {
- return new ReferenceValue(value);
+ return createValue(value, false);
}
/**
@@ -121,6 +121,9 @@
case PropertyType.LONG:
val = LongValue.valueOf(value);
break;
+ case PropertyType.DECIMAL:
+ val = DecimalValue.valueOf(value);
+ break;
case PropertyType.DATE:
val = DateValue.valueOf(value);
break;
@@ -130,9 +133,15 @@
case PropertyType.PATH:
val = PathValue.valueOf(value);
break;
+ case PropertyType.URI:
+ val = URIValue.valueOf(value);
+ break;
case PropertyType.REFERENCE:
val = ReferenceValue.valueOf(value);
break;
+ case PropertyType.WEAKREFERENCE:
+ val = WeakReferenceValue.valueOf(value);
+ break;
case PropertyType.BINARY:
val = new BinaryValue(value);
break;
@@ -150,13 +159,23 @@
throw new UnsupportedOperationException("JCR-2056");
}
- public Value createValue(BigDecimal arg0) {
- throw new UnsupportedOperationException("JCR-1609");
+ /**
+ * {@inheritDoc}
+ */
+ public Value createValue(BigDecimal value) {
+ return new DecimalValue(value);
}
+ /**
+ * {@inheritDoc}
+ */
public Value createValue(Node node, boolean weak)
throws RepositoryException {
- throw new UnsupportedRepositoryOperationException("JCR-1609");
+ if (weak) {
+ return new WeakReferenceValue(node);
+ } else {
+ return new ReferenceValue(node);
+ }
}
}
Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ValueHelper.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ValueHelper.java?rev=776687&r1=776686&r2=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ValueHelper.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ValueHelper.java Wed May 20 13:08:09 2009
@@ -502,9 +502,15 @@
newVal = factory.createValue(srcValue.getLong());
break;
+ case PropertyType.DECIMAL:
+ newVal = factory.createValue(srcValue.getDecimal());
+ break;
+
case PropertyType.PATH:
case PropertyType.NAME:
case PropertyType.REFERENCE:
+ case PropertyType.WEAKREFERENCE:
+ case PropertyType.URI:
newVal = factory.createValue(srcValue.getString(), srcValue.getType());
break;
Copied: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/WeakReferenceValue.java (from r775860, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ReferenceValue.java)
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/WeakReferenceValue.java?p2=jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/WeakReferenceValue.java&p1=jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ReferenceValue.java&r1=775860&r2=776687&rev=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ReferenceValue.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/WeakReferenceValue.java Wed May 20 13:08:09 2009
@@ -26,13 +26,13 @@
import java.util.Calendar;
/**
- * A <code>ReferenceValue</code> provides an implementation
- * of the <code>Value</code> interface representing a <code>REFERENCE</code> value
+ * A <code>WeakReferenceValue</code> provides an implementation
+ * of the <code>Value</code> interface representing a <code>WEAKREFERENCE</code> value
* (a UUID of an existing node).
*/
-public class ReferenceValue extends BaseValue {
+public class WeakReferenceValue extends BaseValue {
- public static final int TYPE = PropertyType.REFERENCE;
+ public static final int TYPE = PropertyType.WEAKREFERENCE;
private final String uuid;
@@ -44,7 +44,7 @@
* @throws IllegalArgumentException If <code>target</code> is nonreferenceable.
* @throws javax.jcr.RepositoryException If another error occurs.
*/
- public ReferenceValue(Node target) throws RepositoryException {
+ public WeakReferenceValue(Node target) throws RepositoryException {
super(TYPE);
try {
this.uuid = target.getUUID();
@@ -66,14 +66,14 @@
* @throws javax.jcr.ValueFormatException If the <code>String</code> is not a valid
* not a valid UUID format.
*/
- public static ReferenceValue valueOf(String s) throws ValueFormatException {
+ public static WeakReferenceValue valueOf(String s) throws ValueFormatException {
if (s != null) {
try {
UUID.fromString(s);
} catch (IllegalArgumentException iae) {
throw new ValueFormatException("not a valid UUID format: " + s);
}
- return new ReferenceValue(s);
+ return new WeakReferenceValue(s);
} else {
throw new ValueFormatException("not a valid UUID format: " + s);
}
@@ -86,7 +86,7 @@
* @param uuid the UUID of the node to be referenced
* @see #valueOf
*/
- protected ReferenceValue(String uuid) {
+ protected WeakReferenceValue(String uuid) {
super(TYPE);
this.uuid = uuid;
}
@@ -106,8 +106,8 @@
if (this == obj) {
return true;
}
- if (obj instanceof ReferenceValue) {
- ReferenceValue other = (ReferenceValue) obj;
+ if (obj instanceof WeakReferenceValue) {
+ WeakReferenceValue other = (WeakReferenceValue) obj;
if (uuid == other.uuid) {
return true;
} else if (uuid != null && other.uuid != null) {
@@ -184,4 +184,4 @@
throw new ValueFormatException("conversion to double failed: inconvertible types");
}
-}
+}
\ No newline at end of file
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValue.java?rev=776687&r1=776686&r2=776687&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValue.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValue.java Wed May 20 13:08:09 2009
@@ -28,6 +28,8 @@
import javax.jcr.ValueFormatException;
import java.util.Calendar;
import java.util.TimeZone;
+import java.math.BigDecimal;
+import java.net.URI;
/**
* <code>AbstractQValue</code>...
@@ -143,6 +145,28 @@
this(value, PropertyType.PATH);
}
+ /**
+ * Create a new <code>AbstractQValue</code>.
+ *
+ * @param value
+ * @throws IllegalArgumentException if the passed <code>value</code>
+ * is <code>null</code>.
+ */
+ protected AbstractQValue(BigDecimal value) {
+ this(value, PropertyType.DECIMAL);
+ }
+
+ /**
+ * Create a new <code>AbstractQValue</code>.
+ *
+ * @param value
+ * @throws IllegalArgumentException if the passed <code>value</code>
+ * is <code>null</code>.
+ */
+ protected AbstractQValue(URI value) {
+ this(value, PropertyType.URI);
+ }
+
//---------------------------------------------------------< QValue >---
/**
* @see QValue#getType()
@@ -187,6 +211,10 @@
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+00:00"));
cal.setTimeInMillis(((Long) val).longValue());
return cal;
+ } else if (type == PropertyType.DECIMAL) {
+ Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+00:00"));
+ cal.setTimeInMillis(((BigDecimal) val).longValue());
+ return cal;
} else {
Calendar cal = ISO8601.parse(getString());
if (cal == null) {
@@ -198,6 +226,36 @@
}
/**
+ * @see QValue#getDecimal()
+ */
+ public BigDecimal getDecimal() throws RepositoryException {
+ if (type == PropertyType.DECIMAL) {
+ return (BigDecimal) val;
+ } else {
+ try {
+ return new BigDecimal(getString());
+ } catch (NumberFormatException e) {
+ throw new ValueFormatException("not a valid decimal string: " + getString(), e);
+ }
+ }
+ }
+
+ /**
+ * @see QValue#getURI()
+ */
+ public URI getURI() throws RepositoryException {
+ if (type == PropertyType.URI) {
+ return (URI) val;
+ } else {
+ try {
+ return URI.create(getString());
+ } catch (IllegalArgumentException e) {
+ throw new ValueFormatException("not a valid uri: " + getString(), e);
+ }
+ }
+ }
+
+ /**
* @see QValue#getDouble()
*/
public double getDouble() throws RepositoryException {
@@ -205,6 +263,8 @@
return ((Double) val).doubleValue();
} else if (type == PropertyType.DATE) {
return ((Calendar) val).getTimeInMillis();
+ } else if (type == PropertyType.DECIMAL) {
+ return ((BigDecimal) val).doubleValue();
} else {
try {
return Double.parseDouble(getString());
@@ -222,6 +282,8 @@
return ((Long) val).longValue();
} else if (type == PropertyType.DOUBLE) {
return ((Double) val).longValue();
+ } else if (type == PropertyType.DECIMAL) {
+ return ((BigDecimal) val).longValue();
} else if (type == PropertyType.DATE) {
return ((Calendar) val).getTimeInMillis();
} else {
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=776687&r1=776686&r2=776687&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 Wed May 20 13:08:09 2009
@@ -41,6 +41,9 @@
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.Calendar;
+import java.math.BigDecimal;
+import java.net.URI;
+import java.net.URISyntaxException;
/**
* <code>QValueFactoryImpl</code>...
@@ -583,6 +586,28 @@
}
/**
+ * @see QValue#getDecimal()
+ */
+ public BigDecimal getDecimal() throws RepositoryException {
+ try {
+ return new BigDecimal(getString());
+ } catch (NumberFormatException ex) {
+ throw new ValueFormatException(ex);
+ }
+ }
+
+ /**
+ * @see QValue#getURI()
+ */
+ public URI getURI() throws RepositoryException {
+ try {
+ return new URI(getString());
+ } catch (URISyntaxException ex) {
+ throw new ValueFormatException(ex);
+ }
+ }
+
+ /**
* Frees temporarily allocated resources such as temporary file, buffer, etc.
* If this <code>BinaryQValue</code> is backed by a persistent resource
* calling this method will have no effect.
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=776687&r1=776686&r2=776687&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 Wed May 20 13:08:09 2009
@@ -18,6 +18,8 @@
import java.io.InputStream;
import java.util.Calendar;
+import java.math.BigDecimal;
+import java.net.URI;
import javax.jcr.Property;
import javax.jcr.PropertyType;
@@ -76,7 +78,7 @@
public String getString() throws RepositoryException;
/**
- * Returns a <code>InputStream</code> representation of this <code>QValue</code>
+ * Returns an <code>InputStream</code> representation of this <code>QValue</code>
* object.
*
* @return A stream representation of this value.
@@ -93,6 +95,14 @@
public Calendar getCalendar() throws RepositoryException;
/**
+ * Returns a <code>BigDecimal</code> representation of this value.
+ *
+ * @return A <code>BigDecimal</code> representation of this value.
+ * @throws RepositoryException if an error occurs.
+ */
+ public BigDecimal getDecimal() throws RepositoryException;
+
+ /**
* Returns a <code>double</code> representation of this value.
*
* @return A <code>double</code> representation of this value.
@@ -134,6 +144,14 @@
public Path getPath() throws RepositoryException;
/**
+ * Returns an <code>URI</code> representation of this value.
+ *
+ * @return A <code>URI</code> representation of this value.
+ * @throws RepositoryException if an error occurs.
+ */
+ public URI getURI() throws RepositoryException;
+
+ /**
* Frees temporarily allocated resources such as temporary file, buffer, etc.
*/
public void discard();