diff --git a/src/main/java/org/springframework/data/couchbase/core/convert/CustomConversions.java b/src/main/java/org/springframework/data/couchbase/core/convert/CustomConversions.java index b0e14738..56705848 100644 --- a/src/main/java/org/springframework/data/couchbase/core/convert/CustomConversions.java +++ b/src/main/java/org/springframework/data/couchbase/core/convert/CustomConversions.java @@ -81,7 +81,7 @@ public class CustomConversions { this.converters = new ArrayList(); this.converters.addAll(converters); - this.converters.addAll(JodaTimeConverters.getConvertersToRegister()); + this.converters.addAll(DateConverters.getConvertersToRegister()); for (Object converter : this.converters) { registerConversion(converter); diff --git a/src/main/java/org/springframework/data/couchbase/core/convert/DateConverters.java b/src/main/java/org/springframework/data/couchbase/core/convert/DateConverters.java new file mode 100644 index 00000000..23d603cf --- /dev/null +++ b/src/main/java/org/springframework/data/couchbase/core/convert/DateConverters.java @@ -0,0 +1,92 @@ +/* + * Copyright 2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.data.couchbase.core.convert; + +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collection; +import java.util.Date; +import java.util.List; + +/** + * Out of the box conversions for java dates and calendars. + * + * @author Michael Nitschinger + */ +public final class DateConverters { + + private DateConverters() {} + + public static Collection> getConvertersToRegister() { + List> converters = new ArrayList>(); + converters.add(DateToLongConverter.INSTANCE); + converters.add(CalendarToLongConverter.INSTANCE); + + converters.add(LongToDateConverter.INSTANCE); + converters.add(LongToCalendarConverter.INSTANCE); + return converters; + } + + @WritingConverter + public enum DateToLongConverter implements Converter { + INSTANCE; + + @Override + public Long convert(Date source) { + return source.getTime(); + } + } + + @WritingConverter + public enum CalendarToLongConverter implements Converter { + INSTANCE; + + @Override + public Long convert(Calendar source) { + return source.getTimeInMillis() / 1000; + } + } + + @ReadingConverter + public enum LongToDateConverter implements Converter { + INSTANCE; + + @Override + public Date convert(Long source) { + Date date = new Date(); + date.setTime(source); + return date; + } + } + + @ReadingConverter + public enum LongToCalendarConverter implements Converter { + INSTANCE; + + @Override + public Calendar convert(Long source) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(source * 1000); + return calendar; + } + } + +} diff --git a/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java b/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java index c61b02d2..69d32d68 100644 --- a/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java @@ -383,6 +383,22 @@ public class MappingCouchbaseConverterTests { readConverted.listOfEmails.get(0).emailAddr); } + @Test + public void writesAndReadsDates() { + Date created = new Date(); + Calendar modified = Calendar.getInstance(); + DateEntity entity = new DateEntity(created, modified); + + CouchbaseDocument converted = new CouchbaseDocument(); + converter.write(entity, converted); + assertEquals(created.getTime(), converted.getPayload().get("created")); + assertEquals(modified.getTimeInMillis() / 1000, converted.getPayload().get("modified")); + + DateEntity read = converter.read(DateEntity.class, converted); + assertEquals(created.getTime(), read.created.getTime()); + assertEquals(modified.getTimeInMillis() / 1000, read.modified.getTimeInMillis() / 1000); + } + static class EntityWithoutID { private String attr0; public EntityWithoutID(String a0) { @@ -488,4 +504,13 @@ public class MappingCouchbaseConverterTests { } } + static class DateEntity extends BaseEntity { + private Date created; + private Calendar modified; + public DateEntity(Date created, Calendar modified) { + this.created = created; + this.modified = modified; + } + } + }