Index: jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValue.java =================================================================== --- jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValue.java (revision 915825) +++ jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValue.java (revision ) @@ -122,7 +122,8 @@ * is null. */ protected AbstractQValue(Calendar value) { - this(value, PropertyType.DATE); + val = ISO8601.format(value); + type = PropertyType.DATE; } /** @@ -204,7 +205,7 @@ */ public Calendar getCalendar() throws RepositoryException { if (type == PropertyType.DATE) { - return (Calendar) ((Calendar) val).clone(); + return ISO8601.parse(getString()); } else if (type == PropertyType.DOUBLE) { Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+00:00")); cal.setTimeInMillis(((Double) val).longValue()); @@ -272,7 +273,7 @@ } else if (type == PropertyType.LONG) { return ((Long) val).doubleValue(); } else if (type == PropertyType.DATE) { - return ((Calendar) val).getTimeInMillis(); + return getCalendar().getTimeInMillis(); } else if (type == PropertyType.DECIMAL) { return ((BigDecimal) val).doubleValue(); } else { @@ -295,7 +296,7 @@ } else if (type == PropertyType.DECIMAL) { return ((BigDecimal) val).longValue(); } else if (type == PropertyType.DATE) { - return ((Calendar) val).getTimeInMillis(); + return getCalendar().getTimeInMillis(); } else { try { return Long.parseLong(getString()); @@ -346,7 +347,7 @@ IOUtils.closeQuietly(stream); } } else if (type == PropertyType.DATE) { - return ISO8601.format(((Calendar) val)); + return (String) val; } else { return val.toString(); } @@ -407,7 +408,7 @@ @Override public String toString() { if (type == PropertyType.DATE) { - return ISO8601.format((Calendar) val); + return (String) val; } else { return val.toString(); } @@ -430,12 +431,8 @@ if (type != other.type) { return false; } - if (PropertyType.DATE == type) { - return ISO8601.format((Calendar) val).equals(ISO8601.format((Calendar) other.val)); - } else { - return val.equals(other.val); - } + return val.equals(other.val); + } - } return false; } @@ -448,10 +445,6 @@ */ @Override public int hashCode() { - if (PropertyType.DATE == type) { - return ISO8601.format((Calendar) val).hashCode(); - } else { - return val.hashCode(); - } - } + return val.hashCode(); + } +} -} Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java =================================================================== --- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java (revision 816343) +++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java (revision ) @@ -442,8 +442,13 @@ public Calendar getDate() { assert val != null && type == PropertyType.DATE; - return (Calendar) val; + try { + return getCalendar(); + } catch (RepositoryException ignore) { + assert false; + return null; - } + } + } /** * Create a copy of this object. Immutable values will return itself, @@ -509,21 +514,6 @@ } } - //-------------------------------------------< java.lang.Object overrides > - /** - * Returns the string representation of this internal value. - * - * @return string representation of this internal value - */ - public String toString() { - if (type == PropertyType.DATE) { - return ISO8601.format((Calendar) val); - } else { - return val.toString(); - } - } - - //-------------------------------------------------------< implementation > private InternalValue(String value) { super(value, PropertyType.STRING); @@ -542,7 +532,7 @@ } private InternalValue(Calendar value) { - super(value, PropertyType.DATE); + super(value); } private InternalValue(boolean value) { @@ -659,26 +649,6 @@ } /** - * @see org.apache.jackrabbit.spi.QValue#getString() - */ - public String getString() throws RepositoryException { - if (type == PropertyType.BINARY) { - InputStream stream = getStream(); - try { - return IOUtils.toString(stream, "UTF-8"); - } catch (IOException e) { - throw new RepositoryException("conversion from stream to string failed", e); - } finally { - IOUtils.closeQuietly(stream); - } - } else if (type == PropertyType.DATE) { - return ISO8601.format(((Calendar) val)); - } else { - return toString(); - } - } - - /** * @see org.apache.jackrabbit.spi.QValue#getStream() */ public InputStream getStream() throws RepositoryException { Index: jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValueFactory.java =================================================================== --- jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValueFactory.java (revision 802695) +++ jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValueFactory.java (revision ) @@ -129,8 +129,7 @@ if (value == null) { throw new IllegalArgumentException("Cannot create QValue from null value."); } - // Calendar is not constant, must create a clone - return new DefaultQValue((Calendar) value.clone()); + return new DefaultQValue(value); } /**