You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ju...@apache.org on 2013/10/24 18:27:42 UTC
svn commit: r1535431 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/api/
oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/
oak-core/src/main/java/org/a...
Author: jukka
Date: Thu Oct 24 16:27:41 2013
New Revision: 1535431
URL: http://svn.apache.org/r1535431
Log:
OAK-1111: Node#setProperty(String, Calendar) doesn't take time zone in account
Use strings to represent date values
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Type.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/GenericPropertyState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongPropertyState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiGenericPropertyState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiLongPropertyState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiPropertyState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/SinglePropertyState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentPropertyState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/Conversions.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/DateVersionSelector.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyValues.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/TreeUtil.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilderTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStatesTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentSizeTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PropertyDelegate.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/VersionHistoryDelegate.java
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Type.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Type.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Type.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Type.java Thu Oct 24 16:27:41 2013
@@ -61,8 +61,8 @@ public final class Type<T> implements Co
public static final Type<Double> DOUBLE =
create(PropertyType.DOUBLE, false, "DOUBLE");
- /** Map {@code Long} to {@link PropertyType#DATE} */
- public static final Type<Long> DATE =
+ /** Map {@code String} to {@link PropertyType#DATE} */
+ public static final Type<String> DATE =
create(PropertyType.DATE, false, "DATE");
/** Map {@code Boolean} to {@link PropertyType#BOOLEAN} */
@@ -109,8 +109,8 @@ public final class Type<T> implements Co
public static final Type<Iterable<Double>> DOUBLES =
create(PropertyType.DOUBLE, true, "DOUBLES");
- /** Map {@code Iterable<Long>} to array of {@link PropertyType#DATE} */
- public static final Type<Iterable<Long>> DATES =
+ /** Map {@code Iterable<String>} to array of {@link PropertyType#DATE} */
+ public static final Type<Iterable<String>> DATES =
create(PropertyType.DATE, true, "DATES");
/** Map {@code Iterable<Boolean>} to array of {@link PropertyType#BOOLEAN} */
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java Thu Oct 24 16:27:41 2013
@@ -755,11 +755,9 @@ public final class KernelNodeState exten
if (reader.matches(JsopReader.NUMBER)) {
String number = reader.getToken();
try {
- return new LongPropertyState(
- name, Long.parseLong(number), Type.LONG);
+ return new LongPropertyState(name, Long.parseLong(number));
} catch (NumberFormatException e) {
- return new DoublePropertyState(
- name, Double.parseDouble(number));
+ return new DoublePropertyState(name, Double.parseDouble(number));
}
} else if (reader.matches(JsopReader.TRUE)) {
return BooleanPropertyState.booleanProperty(name, true);
@@ -829,8 +827,6 @@ public final class KernelNodeState exten
values.add(Conversions.convert(value).toDouble());
} else if (type == PropertyType.DECIMAL) {
values.add(Conversions.convert(value).toDecimal());
- } else if (type == PropertyType.DATE) {
- values.add(Conversions.convert(value).toCalendar().getTimeInMillis());
} else {
values.add(StringCache.get(value));
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java Thu Oct 24 16:27:41 2013
@@ -22,11 +22,13 @@ import static com.google.common.base.Pre
import static org.apache.jackrabbit.oak.api.Type.STRING;
import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.MISSING_NODE;
+import java.util.Calendar;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nonnull;
import com.google.common.base.Objects;
+
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
@@ -36,6 +38,7 @@ import org.apache.jackrabbit.oak.spi.com
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.util.ISO8601;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -151,14 +154,19 @@ public class AsyncIndexUpdate implements
private static void preAsyncRunStatus(NodeBuilder builder) {
builder.getChildNode(IndexConstants.INDEX_DEFINITIONS_NAME)
.setProperty("async-status", "running")
- .setProperty("async-start", System.currentTimeMillis(),
- Type.DATE).removeProperty("async-done");
+ .setProperty("async-start", now(), Type.DATE)
+ .removeProperty("async-done");
}
private static void postAsyncRunStatus(NodeBuilder builder) {
builder.getChildNode(IndexConstants.INDEX_DEFINITIONS_NAME)
.setProperty("async-status", "done")
- .setProperty("async-done", System.currentTimeMillis(),
- Type.DATE).removeProperty("async-start");
+ .setProperty("async-done", now(), Type.DATE)
+ .removeProperty("async-start");
+ }
+
+ private static String now() {
+ return ISO8601.format(Calendar.getInstance());
}
+
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/GenericPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/GenericPropertyState.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/GenericPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/GenericPropertyState.java Thu Oct 24 16:27:41 2013
@@ -25,6 +25,7 @@ import org.apache.jackrabbit.oak.plugins
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.api.Type.DATE;
import static org.apache.jackrabbit.oak.api.Type.NAME;
import static org.apache.jackrabbit.oak.api.Type.PATH;
import static org.apache.jackrabbit.oak.api.Type.REFERENCE;
@@ -47,6 +48,18 @@ public class GenericPropertyState extend
}
/**
+ * Create a {@code PropertyState} from a date. No validation is performed
+ * on the string passed for {@code value}.
+ *
+ * @param name The name of the property state
+ * @param value The value of the property state
+ * @return The new property state of type {@link Type#DATE}
+ */
+ public static PropertyState dateProperty(String name, String value) {
+ return new GenericPropertyState(name, value, DATE);
+ }
+
+ /**
* Create a {@code PropertyState} from a name. No validation is performed
* on the string passed for {@code value}.
* @param name The name of the property state
@@ -108,7 +121,7 @@ public class GenericPropertyState extend
@Override
public Converter getConverter() {
- return Conversions.convert(value);
+ return Conversions.convert(value, type);
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongPropertyState.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongPropertyState.java Thu Oct 24 16:27:41 2013
@@ -18,11 +18,6 @@
*/
package org.apache.jackrabbit.oak.plugins.memory;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.apache.jackrabbit.oak.plugins.value.Conversions.convert;
-
-import java.util.Calendar;
-
import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.api.PropertyState;
@@ -32,12 +27,10 @@ import org.apache.jackrabbit.oak.plugins
public class LongPropertyState extends SinglePropertyState<Long> {
private final long value;
- private final Type<?> type;
- public LongPropertyState(@Nonnull String name, long value, Type<?> type) {
+ public LongPropertyState(@Nonnull String name, long value) {
super(name);
this.value = value;
- this.type = type;
}
/**
@@ -48,43 +41,7 @@ public class LongPropertyState extends S
*/
public static PropertyState createLongProperty(
@Nonnull String name, long value) {
- return new LongPropertyState(name, value, Type.LONG);
- }
-
- /**
- * Create a {@code PropertyState} for a date value from a long.
- * @param name The name of the property state
- * @param value The value of the property state
- * @return The new property state of type {@link Type#DATE}
- */
- public static PropertyState createDateProperty(
- @Nonnull String name, long value) {
- return new LongPropertyState(name, value, Type.DATE);
- }
-
- /**
- * Create a {@code PropertyState} for a date.
- * @param name The name of the property state
- * @param value The value of the property state
- * @return The new property state of type {@link Type#DATE}
- */
- public static PropertyState createDateProperty(
- @Nonnull String name, @Nonnull Calendar value) {
- return new LongPropertyState(
- name, convert(checkNotNull(value)).toLong(), Type.DATE);
- }
-
- /**
- * Create a {@code PropertyState} for a date from a String.
- * @param name The name of the property state
- * @param value The value of the property state
- * @return The new property state of type {@link Type#DATE}
- * @throws IllegalArgumentException if {@code value} is not a parseable to a date.
- */
- public static PropertyState createDateProperty(
- @Nonnull String name, @Nonnull String value) {
- return createDateProperty(
- name, convert(checkNotNull(value)).toCalendar());
+ return new LongPropertyState(name, value);
}
@Override
@@ -94,16 +51,12 @@ public class LongPropertyState extends S
@Override
public Converter getConverter() {
- if (type == Type.DATE) {
- return convert(convert(value).toCalendar());
- }
- else {
- return Conversions.convert(value);
- }
+ return Conversions.convert(value);
}
@Override
public Type<?> getType() {
- return type;
+ return Type.LONG;
}
+
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilder.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilder.java Thu Oct 24 16:27:41 2013
@@ -181,8 +181,6 @@ public class MemoryPropertyBuilder<T> im
return MultiLongPropertyState.createLongProperty(name, (Iterable<Long>) values);
case PropertyType.DOUBLE:
return MultiDoublePropertyState.doubleProperty(name, (Iterable<Double>) values);
- case PropertyType.DATE:
- return MultiLongPropertyState.createDatePropertyFromLong(name, (Iterable<Long>) values);
case PropertyType.BOOLEAN:
return MultiBooleanPropertyState.booleanProperty(name, (Iterable<Boolean>) values);
case PropertyType.DECIMAL:
@@ -201,8 +199,6 @@ public class MemoryPropertyBuilder<T> im
return LongPropertyState.createLongProperty(name, (Long) value);
case PropertyType.DOUBLE:
return DoublePropertyState.doubleProperty(name, (Double) value);
- case PropertyType.DATE:
- return LongPropertyState.createDateProperty(name, (Long) value);
case PropertyType.BOOLEAN:
return BooleanPropertyState.booleanProperty(name, (Boolean) value);
case PropertyType.DECIMAL:
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiGenericPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiGenericPropertyState.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiGenericPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiGenericPropertyState.java Thu Oct 24 16:27:41 2013
@@ -24,6 +24,7 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.value.Conversions.Converter;
import static com.google.common.base.Preconditions.checkArgument;
+import static org.apache.jackrabbit.oak.api.Type.DATES;
import static org.apache.jackrabbit.oak.api.Type.NAMES;
import static org.apache.jackrabbit.oak.api.Type.PATHS;
import static org.apache.jackrabbit.oak.api.Type.REFERENCES;
@@ -43,6 +44,17 @@ public class MultiGenericPropertyState e
}
/**
+ * Create a multi valued {@code PropertyState} from a list of dates.
+ *
+ * @param name The name of the property state
+ * @param values The values of the property state
+ * @return The new property state of type {@link Type#DATES}
+ */
+ public static PropertyState dateProperty(String name, Iterable<String> values) {
+ return new MultiGenericPropertyState(name, values, DATES);
+ }
+
+ /**
* Create a multi valued {@code PropertyState} from a list of names.
* No validation is performed on the strings passed for {@code values}.
* @param name The name of the property state
@@ -99,7 +111,7 @@ public class MultiGenericPropertyState e
@Override
public Converter getConverter(String value) {
- return Conversions.convert(value);
+ return Conversions.convert(value, type.getBaseType());
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiLongPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiLongPropertyState.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiLongPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiLongPropertyState.java Thu Oct 24 16:27:41 2013
@@ -18,9 +18,6 @@
*/
package org.apache.jackrabbit.oak.plugins.memory;
-import java.util.Calendar;
-import java.util.List;
-
import com.google.common.collect.Lists;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
@@ -28,11 +25,9 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.value.Conversions.Converter;
public class MultiLongPropertyState extends MultiPropertyState<Long> {
- private final Type<?> type;
- public MultiLongPropertyState(String name, Iterable<Long> values, Type<?> type) {
+ public MultiLongPropertyState(String name, Iterable<Long> values) {
super(name, values);
- this.type = type;
}
/**
@@ -42,60 +37,16 @@ public class MultiLongPropertyState exte
* @return The new property state of type {@link Type#LONGS}
*/
public static PropertyState createLongProperty(String name, Iterable<Long> values) {
- return new MultiLongPropertyState(name, Lists.newArrayList(values), Type.LONGS);
- }
-
- /**
- * Create a multi valued {@code PropertyState} of dates from a list of longs.
- * @param name The name of the property state
- * @param values The values of the property state
- * @return The new property state of type {@link Type#DATES}
- */
- public static PropertyState createDatePropertyFromLong(String name, Iterable<Long> values) {
- return new MultiLongPropertyState(name, Lists.newArrayList(values), Type.DATES);
- }
-
- /**
- * Create a multi valued {@code PropertyState} of dates.
- * @param name The name of the property state
- * @param values The values of the property state
- * @return The new property state of type {@link Type#DATES}
- */
- public static PropertyState createDatePropertyFromCalendar(String name, Iterable<Calendar> values) {
- List<Long> dates = Lists.newArrayList();
- for (Calendar v : values) {
- dates.add(Conversions.convert(v).toLong());
- }
- return new MultiLongPropertyState(name, dates, Type.DATES);
- }
-
- /**
- * Create a multi valued {@code PropertyState} of dates from a list of strings.
- * @param name The name of the property state
- * @param values The values of the property state
- * @return The new property state of type {@link Type#DATES}
- * @throws IllegalArgumentException if one of the {@code values} is not a parseable to a date.
- */
- public static PropertyState createDateProperty(String name, Iterable<String> values) {
- List<Long> dates = Lists.newArrayList();
- for (String v : values) {
- dates.add(Conversions.convert(Conversions.convert(v).toCalendar()).toLong());
- }
- return new MultiLongPropertyState(name, dates, Type.DATES);
+ return new MultiLongPropertyState(name, Lists.newArrayList(values));
}
@Override
public Converter getConverter(Long value) {
- if (type == Type.DATES) {
- return Conversions.convert(Conversions.convert(value).toCalendar());
- }
- else {
- return Conversions.convert(value);
- }
+ return Conversions.convert(value);
}
@Override
public Type<?> getType() {
- return type;
+ return Type.LONGS;
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiPropertyState.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiPropertyState.java Thu Oct 24 16:27:41 2013
@@ -89,10 +89,10 @@ abstract class MultiPropertyState<T> ext
}
});
case PropertyType.DATE:
- return (S) Iterables.transform(values, new Function<T, Long>() {
+ return (S) Iterables.transform(values, new Function<T, String>() {
@Override
- public Long apply(T value) {
- return getConverter(value).toDate();
+ public String apply(T value) {
+ return getConverter(value).toString();
}
});
case PropertyType.BOOLEAN:
@@ -172,7 +172,7 @@ abstract class MultiPropertyState<T> ext
case PropertyType.BINARY: return (S) getConverter(values.get(index)).toBinary();
case PropertyType.LONG: return (S) (Long) getConverter(values.get(index)).toLong();
case PropertyType.DOUBLE: return (S) (Double) getConverter(values.get(index)).toDouble();
- case PropertyType.DATE: return (S) getConverter(values.get(index)).toDate();
+ case PropertyType.DATE: return (S) getConverter(values.get(index)).toString();
case PropertyType.BOOLEAN: return (S) (Boolean) getConverter(values.get(index)).toBoolean();
case PropertyType.NAME: return (S) getConverter(values.get(index)).toString();
case PropertyType.PATH: return (S) getConverter(values.get(index)).toString();
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java Thu Oct 24 16:27:41 2013
@@ -29,11 +29,13 @@ import javax.jcr.Value;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+
import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.plugins.value.Conversions;
import org.apache.jackrabbit.oak.plugins.value.ValueImpl;
+import org.apache.jackrabbit.util.ISO8601;
/**
* Utility class for creating {@link PropertyState} instances.
@@ -52,7 +54,6 @@ public final class PropertyStates {
*/
@Nonnull
public static PropertyState createProperty(String name, Value value) throws RepositoryException {
-
int type = value.getType();
switch (type) {
case PropertyType.STRING:
@@ -63,8 +64,6 @@ public final class PropertyStates {
return LongPropertyState.createLongProperty(name, value.getLong());
case PropertyType.DOUBLE:
return DoublePropertyState.doubleProperty(name, value.getDouble());
- case PropertyType.DATE:
- return LongPropertyState.createDateProperty(name, value.getLong());
case PropertyType.BOOLEAN:
return BooleanPropertyState.booleanProperty(name, value.getBoolean());
case PropertyType.DECIMAL:
@@ -125,12 +124,6 @@ public final class PropertyStates {
doubles.add(value.getDouble());
}
return MultiDoublePropertyState.doubleProperty(name, doubles);
- case PropertyType.DATE:
- List<Long> dates = Lists.newArrayList();
- for (Value value : values) {
- dates.add(value.getLong());
- }
- return MultiLongPropertyState.createDatePropertyFromLong(name, dates);
case PropertyType.BOOLEAN:
List<Boolean> booleans = Lists.newArrayList();
for (Value value : values) {
@@ -182,8 +175,6 @@ public final class PropertyStates {
return LongPropertyState.createLongProperty(name, Conversions.convert(value).toLong());
case PropertyType.DOUBLE:
return DoublePropertyState.doubleProperty(name, Conversions.convert(value).toDouble());
- case PropertyType.DATE:
- return LongPropertyState.createDateProperty(name, Conversions.convert(value).toDate());
case PropertyType.BOOLEAN:
return BooleanPropertyState.booleanProperty(name, Conversions.convert(value).toBoolean());
case PropertyType.DECIMAL:
@@ -222,8 +213,8 @@ public final class PropertyStates {
: DoublePropertyState.doubleProperty(name, (Double) value);
case PropertyType.DATE:
return type.isArray()
- ? MultiLongPropertyState.createDatePropertyFromLong(name, (Iterable<Long>) value)
- : LongPropertyState.createDateProperty(name, (Long) value);
+ ? MultiGenericPropertyState.dateProperty(name, (Iterable<String>) value)
+ : GenericPropertyState.dateProperty(name, (String) value);
case PropertyType.BOOLEAN:
return type.isArray()
? MultiBooleanPropertyState.booleanProperty(name, (Iterable<Boolean>) value)
@@ -279,7 +270,7 @@ public final class PropertyStates {
} else if (value instanceof Double) {
return DoublePropertyState.doubleProperty(name, (Double) value);
} else if (value instanceof Calendar) {
- return LongPropertyState.createDateProperty(name, (Calendar) value);
+ return GenericPropertyState.dateProperty(name, ISO8601.format((Calendar) value));
} else if (value instanceof Boolean) {
return BooleanPropertyState.booleanProperty(name, (Boolean) value);
} else if (value instanceof BigDecimal) {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/SinglePropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/SinglePropertyState.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/SinglePropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/SinglePropertyState.java Thu Oct 24 16:27:41 2013
@@ -61,7 +61,7 @@ abstract class SinglePropertyState<T> ex
case PropertyType.BINARY: return (S) getConverter().toBinary();
case PropertyType.LONG: return (S) (Long) getConverter().toLong();
case PropertyType.DOUBLE: return (S) (Double) getConverter().toDouble();
- case PropertyType.DATE: return (S) getConverter().toDate();
+ case PropertyType.DATE: return (S) getConverter().toString();
case PropertyType.BOOLEAN: return (S) (Boolean) getConverter().toBoolean();
case PropertyType.NAME: return (S) getConverter().toString();
case PropertyType.PATH: return (S) getConverter().toString();
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentPropertyState.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentPropertyState.java Thu Oct 24 16:27:41 2013
@@ -157,25 +157,14 @@ class SegmentPropertyState extends Recor
return (T) new SegmentBlob(segment, valueId);
} else {
String value = segment.readString(valueId);
- if (type == Type.STRING || type == Type.URI
+ if (type == Type.STRING || type == Type.URI || type == Type.DATE
|| type == Type.NAME || type == Type.PATH
|| type == Type.REFERENCE || type == Type.WEAKREFERENCE) {
return (T) value;
} else {
- Converter converter = Conversions.convert(value);
- if (base == Type.DATE) {
- converter = Conversions.convert(converter.toCalendar());
- } else if (base == Type.DECIMAL) {
- converter = Conversions.convert(converter.toDecimal());
- } else if (base == Type.DOUBLE) {
- converter = Conversions.convert(converter.toDouble());
- } else if (base == Type.LONG) {
- converter = Conversions.convert(converter.toLong());
- }
+ Converter converter = Conversions.convert(value, base);
if (type == Type.BOOLEAN) {
return (T) Boolean.valueOf(converter.toBoolean());
- } else if (type == Type.DATE) {
- return (T) converter.toDate();
} else if (type == Type.DECIMAL) {
return (T) converter.toDecimal();
} else if (type == Type.DOUBLE) {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/Conversions.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/Conversions.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/Conversions.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/Conversions.java Thu Oct 24 16:27:41 2013
@@ -26,7 +26,9 @@ import java.util.TimeZone;
import com.google.common.base.Charsets;
import com.google.common.io.ByteStreams;
+
import org.apache.jackrabbit.oak.api.Blob;
+import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.plugins.memory.StringBasedBlob;
import org.apache.jackrabbit.util.ISO8601;
@@ -101,16 +103,6 @@ public final class Conversions {
}
/**
- * Convert to date. This default implementation delegates to {@link #toCalendar()}
- * and returns the <code>getTimeInMillis</code> value of the calendar.
- * @return date representation of the converted value
- * @throws IllegalArgumentException if the string cannot be parsed into a date
- */
- public Long toDate() {
- return toCalendar().getTimeInMillis();
- }
-
- /**
* Convert to boolean. This default implementation is based on {@code Boolean.parseBoolean(String)}.
* @return boolean representation of the converted value
*/
@@ -262,33 +254,39 @@ public final class Conversions {
* @param value The date to convert
* @return A converter for {@code value}
*/
- public static Converter convert(final Calendar value) {
- return new Converter() {
- @Override
- public String toString() {
- return ISO8601.format(value);
- }
-
- @Override
- public long toLong() {
- return value.getTimeInMillis();
- }
-
- @Override
- public double toDouble() {
- return value.getTimeInMillis();
- }
-
- @Override
- public Calendar toCalendar() {
- return value;
- }
-
- @Override
- public BigDecimal toDecimal() {
- return new BigDecimal(value.getTimeInMillis());
- }
- };
+ public static Converter convert(final String value, Type<?> type) {
+ if (type == Type.DECIMAL) {
+ return convert(convert(value).toDecimal());
+ } else if (type == Type.DOUBLE) {
+ return convert(convert(value).toDouble());
+ } else if (type == Type.LONG) {
+ return convert(convert(value).toLong());
+ } else if (type != Type.DATE) {
+ return convert(value);
+ } else {
+ return new Converter() {
+ @Override
+ public String toString() {
+ return value;
+ }
+ @Override
+ public Calendar toCalendar() {
+ return ISO8601.parse(toString());
+ }
+ @Override
+ public long toLong() {
+ return toCalendar().getTimeInMillis();
+ }
+ @Override
+ public double toDouble() {
+ return toLong();
+ }
+ @Override
+ public BigDecimal toDecimal() {
+ return new BigDecimal(toLong());
+ }
+ };
+ }
}
/**
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java Thu Oct 24 16:27:41 2013
@@ -23,6 +23,7 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.util.Calendar;
import java.util.List;
+
import javax.jcr.Binary;
import javax.jcr.Node;
import javax.jcr.PropertyType;
@@ -33,6 +34,7 @@ import javax.jcr.ValueFormatException;
import javax.jcr.nodetype.NodeType;
import com.google.common.collect.Lists;
+
import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.api.BlobFactory;
import org.apache.jackrabbit.oak.api.PropertyState;
@@ -47,6 +49,7 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.memory.DoublePropertyState;
import org.apache.jackrabbit.oak.plugins.memory.GenericPropertyState;
import org.apache.jackrabbit.oak.plugins.memory.LongPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
import org.apache.jackrabbit.oak.plugins.memory.StringPropertyState;
import org.apache.jackrabbit.oak.spi.query.PropertyValues;
import org.apache.jackrabbit.util.ISO8601;
@@ -167,7 +170,7 @@ public class ValueFactoryImpl implements
@Override
public Value createValue(Calendar value) {
- return new ValueImpl(LongPropertyState.createDateProperty("", value), namePathMapper);
+ return new ValueImpl(PropertyStates.createProperty("", value), namePathMapper);
}
@Override
@@ -216,7 +219,7 @@ public class ValueFactoryImpl implements
if (ISO8601.parse(value) == null) {
throw new ValueFormatException("Invalid date " + value);
}
- return new ValueImpl(LongPropertyState.createDateProperty("", value), namePathMapper);
+ return new ValueImpl(GenericPropertyState.dateProperty("", value), namePathMapper);
case PropertyType.BOOLEAN:
return createValue(Conversions.convert(value).toBoolean());
case PropertyType.NAME:
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueImpl.java Thu Oct 24 16:27:41 2013
@@ -120,11 +120,11 @@ public class ValueImpl implements Value
switch (getType()) {
case PropertyType.STRING:
case PropertyType.BINARY:
- long value = propertyState.getValue(Type.DATE, index);
+ case PropertyType.DATE:
+ String value = propertyState.getValue(Type.DATE, index);
return Conversions.convert(value).toCalendar();
case PropertyType.LONG:
case PropertyType.DOUBLE:
- case PropertyType.DATE:
case PropertyType.DECIMAL:
return Conversions.convert(propertyState.getValue(Type.LONG, index)).toCalendar();
default:
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/DateVersionSelector.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/DateVersionSelector.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/DateVersionSelector.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/DateVersionSelector.java Thu Oct 24 16:27:41 2013
@@ -24,6 +24,7 @@ import javax.jcr.RepositoryException;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.util.ISO8601;
/**
* <i>Inspired by Jackrabbit 2.x</i>
@@ -58,8 +59,8 @@ public class DateVersionSelector impleme
*
* @param timestamp reference timestamp
*/
- public DateVersionSelector(long timestamp) {
- this.timestamp = timestamp;
+ public DateVersionSelector(String timestamp) {
+ this.timestamp = ISO8601.parse(timestamp).getTimeInMillis();
}
@Override
@@ -74,7 +75,7 @@ public class DateVersionSelector impleme
// ignore root version and labels node
continue;
}
- long c = v.getProperty(JcrConstants.JCR_CREATED).getValue(Type.DATE);
+ long c = ISO8601.parse(v.getProperty(JcrConstants.JCR_CREATED).getValue(Type.DATE)).getTimeInMillis();
if (c > latestDate && c <= timestamp) {
latestDate = c;
latestVersion = v;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java Thu Oct 24 16:27:41 2013
@@ -18,16 +18,19 @@
*/
package org.apache.jackrabbit.oak.plugins.version;
+import java.util.Calendar;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
+
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.jcr.RepositoryException;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
+
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Root;
@@ -40,6 +43,7 @@ import org.apache.jackrabbit.oak.namepat
import org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager;
import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.util.ISO8601;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -326,8 +330,7 @@ class ReadWriteVersionManager extends Re
String versionUUID = IdentifierManager.generateUUID();
version.setProperty(JCR_UUID, versionUUID, Type.STRING);
version.setProperty(JCR_PRIMARYTYPE, NT_VERSION, Type.NAME);
- long now = System.currentTimeMillis();
- version.setProperty(JCR_CREATED, now, Type.DATE);
+ version.setProperty(JCR_CREATED, ISO8601.format(Calendar.getInstance()), Type.DATE);
version.setProperty(JCR_PREDECESSORS, predecessors, Type.REFERENCES);
version.setProperty(JCR_SUCCESSORS, Collections.<String>emptyList(), Type.REFERENCES);
@@ -483,4 +486,5 @@ class ReadWriteVersionManager extends Re
}
return history.child(JCR_VERSIONLABELS);
}
+
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java Thu Oct 24 16:27:41 2013
@@ -221,7 +221,7 @@ class VersionableState {
throws CommitFailedException {
try {
if (selector == null) {
- long created = version.getProperty(JCR_CREATED).getValue(Type.DATE);
+ String created = version.getProperty(JCR_CREATED).getValue(Type.DATE);
selector = new DateVersionSelector(created);
}
restoreFrozen(frozenNode, versionable, selector);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyValues.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyValues.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyValues.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyValues.java Thu Oct 24 16:27:41 2013
@@ -100,8 +100,8 @@ public final class PropertyValues {
}
@Nonnull
- public static PropertyValue newDate(Long value) {
- return new PropertyStateValue(LongPropertyState.createDateProperty("", value));
+ public static PropertyValue newDate(String value) {
+ return new PropertyStateValue(GenericPropertyState.dateProperty("", value));
}
@Nonnull
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java Thu Oct 24 16:27:41 2013
@@ -25,6 +25,7 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.api.Type.STRINGS;
import java.util.Arrays;
+import java.util.Calendar;
import java.util.List;
import javax.annotation.CheckForNull;
@@ -46,6 +47,7 @@ import org.apache.jackrabbit.oak.commons
import org.apache.jackrabbit.oak.namepath.NameMapper;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
+import org.apache.jackrabbit.util.ISO8601;
import org.apache.jackrabbit.util.Text;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -274,7 +276,9 @@ public class NodeUtil {
}
public void setDate(String name, long time) {
- tree.setProperty(name, time, DATE);
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTimeInMillis(time);
+ tree.setProperty(name, ISO8601.format(calendar), DATE);
}
public long getLong(String name, long defaultValue) {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/TreeUtil.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/TreeUtil.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/TreeUtil.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/TreeUtil.java Thu Oct 24 16:27:41 2013
@@ -57,6 +57,7 @@ import javax.jcr.nodetype.NoSuchNodeType
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
+
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
@@ -65,6 +66,7 @@ import org.apache.jackrabbit.oak.commons
import org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager;
import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
+import org.apache.jackrabbit.util.ISO8601;
/**
* Utility providing common operations for the {@code Tree} that are not provided
@@ -285,14 +287,14 @@ public final class TreeUtil {
String uuid = IdentifierManager.generateUUID();
return PropertyStates.createProperty(name, uuid, STRING);
} else if (JCR_CREATED.equals(name)) {
- long now = Calendar.getInstance().getTime().getTime();
+ String now = ISO8601.format(Calendar.getInstance());
return PropertyStates.createProperty(name, now, DATE);
} else if (JCR_CREATEDBY.equals(name)) {
if (userID != null) {
return PropertyStates.createProperty(name, userID, STRING);
}
} else if (JCR_LASTMODIFIED.equals(name)) {
- long now = Calendar.getInstance().getTime().getTime();
+ String now = ISO8601.format(Calendar.getInstance());
return PropertyStates.createProperty(name, now, DATE);
} else if (JCR_LASTMODIFIEDBY.equals(name)) {
if (userID != null) {
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilderTest.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilderTest.java Thu Oct 24 16:27:41 2013
@@ -21,7 +21,6 @@ import java.util.Arrays;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.spi.state.PropertyBuilder;
-import org.apache.jackrabbit.util.ISO8601;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
@@ -75,13 +74,13 @@ public class MemoryPropertyBuilderTest {
@Test
public void testDateProperty() {
- PropertyBuilder<Long> builder = MemoryPropertyBuilder.array(Type.DATE);
- Long date1 = ISO8601.parse("1970-01-01T00:00:00.000Z").getTimeInMillis();
- Long date2 = ISO8601.parse("1971-01-01T00:00:00.000Z").getTimeInMillis();
+ PropertyBuilder<String> builder = MemoryPropertyBuilder.array(Type.DATE);
+ String date1 = "1970-01-01T00:00:00.000Z";
+ String date2 = "1971-01-01T00:00:00.000Z";
builder.setName("foo")
.addValue(date1)
.addValue(date2);
- assertEquals(MultiLongPropertyState.createDatePropertyFromLong("foo", Arrays.asList(date1, date2)),
+ assertEquals(MultiGenericPropertyState.dateProperty("foo", Arrays.asList(date1, date2)),
builder.getPropertyState());
builder.setScalar();
@@ -92,7 +91,7 @@ public class MemoryPropertyBuilderTest {
}
builder.removeValue(date1);
- assertEquals(LongPropertyState.createDateProperty("foo", date2),
+ assertEquals(GenericPropertyState.dateProperty("foo", date2),
builder.getPropertyState());
}
@@ -117,8 +116,8 @@ public class MemoryPropertyBuilderTest {
@Test
public void testAssignFromDate() {
String date = "1970-01-01T00:00:00.000Z";
- PropertyState source = LongPropertyState.createDateProperty("foo", date);
- PropertyBuilder<Long> builder = MemoryPropertyBuilder.scalar(Type.DATE);
+ PropertyState source = GenericPropertyState.dateProperty("foo", date);
+ PropertyBuilder<String> builder = MemoryPropertyBuilder.scalar(Type.DATE);
builder.assignFrom(source);
assertEquals(source, builder.getPropertyState());
}
@@ -152,8 +151,8 @@ public class MemoryPropertyBuilderTest {
public void testAssignFromDates() {
String date1 = "1970-01-01T00:00:00.000Z";
String date2 = "1971-01-01T00:00:00.000Z";
- PropertyState source = MultiLongPropertyState.createDateProperty("foo", Arrays.asList(date1, date2));
- PropertyBuilder<Long> builder = MemoryPropertyBuilder.scalar(Type.DATE);
+ PropertyState source = MultiGenericPropertyState.dateProperty("foo", Arrays.asList(date1, date2));
+ PropertyBuilder<String> builder = MemoryPropertyBuilder.scalar(Type.DATE);
builder.assignFrom(source);
assertEquals(source, builder.getPropertyState());
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStatesTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStatesTest.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStatesTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStatesTest.java Thu Oct 24 16:27:41 2013
@@ -30,6 +30,7 @@ import org.apache.jackrabbit.oak.api.Pro
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.namepath.NamePathMapperImpl;
import org.apache.jackrabbit.oak.plugins.value.ValueFactoryImpl;
+import org.apache.jackrabbit.util.ISO8601;
import org.junit.Test;
import static java.util.Collections.singletonMap;
@@ -59,10 +60,10 @@ public class PropertyStatesTest {
@Test
public void dateValueFromDateProperty() throws RepositoryException {
- long expected = Calendar.getInstance().getTimeInMillis();
+ String expected = ISO8601.format(Calendar.getInstance());
PropertyState dateProperty = PropertyStates.createProperty(
"date", expected, Type.DATE);
- long actual = dateProperty.getValue(Type.DATE);
+ String actual = dateProperty.getValue(Type.DATE);
assertEquals(expected, actual);
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentSizeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentSizeTest.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentSizeTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentSizeTest.java Thu Oct 24 16:27:41 2013
@@ -27,6 +27,7 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.segment.memory.MemoryStore;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.util.ISO8601;
import org.junit.Test;
import com.google.common.collect.ImmutableList;
@@ -85,7 +86,7 @@ public class SegmentSizeTest {
@Test
public void testDuplicateDates() {
- long now = Calendar.getInstance().getTimeInMillis();
+ String now = ISO8601.format(Calendar.getInstance());
NodeBuilder builder = EMPTY_NODE.builder();
builder.setProperty(PropertyStates.createProperty(
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java Thu Oct 24 16:27:41 2013
@@ -424,8 +424,6 @@ public abstract class AbstractQueryTest
values.add(Conversions.convert(value).toDouble());
} else if (type == PropertyType.DECIMAL) {
values.add(Conversions.convert(value).toDecimal());
- } else if (type == PropertyType.DATE) {
- values.add(Conversions.convert(value).toCalendar().getTimeInMillis());
} else {
values.add(value);
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PropertyDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PropertyDelegate.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PropertyDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PropertyDelegate.java Thu Oct 24 16:27:41 2013
@@ -108,7 +108,7 @@ public class PropertyDelegate extends It
return getSingleState().getValue(Type.STRING);
}
- public Long getDate() throws ValueFormatException, InvalidItemStateException {
+ public String getDate() throws ValueFormatException, InvalidItemStateException {
return getSingleState().getValue(Type.DATE);
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/VersionHistoryDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/VersionHistoryDelegate.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/VersionHistoryDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/VersionHistoryDelegate.java Thu Oct 24 16:27:41 2013
@@ -21,8 +21,6 @@ import static org.apache.jackrabbit.JcrC
import java.util.ArrayDeque;
import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collections;
import java.util.Deque;
import java.util.Iterator;
import java.util.List;
@@ -37,14 +35,13 @@ import javax.jcr.version.VersionExceptio
import com.google.common.base.Function;
import com.google.common.collect.Iterators;
-import com.google.common.collect.Lists;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.plugins.value.Conversions;
import org.apache.jackrabbit.oak.plugins.version.VersionConstants;
+import org.apache.jackrabbit.util.ISO8601;
/**
* {@code VersionHistoryDelegate}...
@@ -136,14 +133,14 @@ public class VersionHistoryDelegate exte
@Nonnull
public Iterator<VersionDelegate> getAllVersions()
throws RepositoryException {
- SortedMap<Calendar, String> versions = new TreeMap<Calendar, String>();
+ SortedMap<Long, String> versions = new TreeMap<Long, String>();
for (Iterator<NodeDelegate> it = getChildren(); it.hasNext(); ) {
NodeDelegate n = it.next();
String primaryType = n.getProperty(JcrConstants.JCR_PRIMARYTYPE).getString();
if (primaryType.equals(VersionConstants.NT_VERSION)) {
PropertyDelegate created = n.getPropertyOrNull(JcrConstants.JCR_CREATED);
if (created != null) {
- Calendar cal = Conversions.convert(created.getDate()).toCalendar();
+ Long cal = ISO8601.parse(created.getDate()).getTimeInMillis();
versions.put(cal, n.getName());
}
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java?rev=1535431&r1=1535430&r2=1535431&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java Thu Oct 24 16:27:41 2013
@@ -16,6 +16,9 @@
*/
package org.apache.jackrabbit.oak.jcr;
+import java.util.Calendar;
+import java.util.TimeZone;
+
import javax.jcr.InvalidItemStateException;
import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
@@ -160,4 +163,23 @@ public class CRUDTest extends AbstractRe
// expected
}
}
+
+ @Test
+ public void testSetPropertyDateWithTimeZone() throws RepositoryException {
+ Session session = getAdminSession();
+ Node root = session.getRootNode();
+
+ final Calendar cal = Calendar.getInstance();
+ cal.setTimeZone(TimeZone.getTimeZone("America/Chicago"));
+ cal.setTimeInMillis(1239902100000L);
+
+ root.setProperty("start", cal);
+ session.save();
+
+ assertEquals(12, root.getProperty("start").getDate().get(Calendar.HOUR_OF_DAY));
+
+ root.getProperty("start").remove();
+ session.save();
+ }
+
}