diff options
author | Leif Åstrand <legioth@gmail.com> | 2017-01-05 18:22:50 +0200 |
---|---|---|
committer | Pekka Hyvönen <pekka@vaadin.com> | 2017-01-05 18:22:50 +0200 |
commit | 34687c34de6199bfa897ff0b9b2d7e32afb28dfa (patch) | |
tree | c7019aed74337aaeaa5cee67378ce363bed502b0 /server/src/main/java/com/vaadin/data/converter | |
parent | 4130f1d87d6ab387a363a4e44e8746eddc049d13 (diff) | |
download | vaadin-framework-34687c34de6199bfa897ff0b9b2d7e32afb28dfa.tar.gz vaadin-framework-34687c34de6199bfa897ff0b9b2d7e32afb28dfa.zip |
Add LocalDateToDateConverter (#8147)
* Add LocalDateToDateConverter
Diffstat (limited to 'server/src/main/java/com/vaadin/data/converter')
-rw-r--r-- | server/src/main/java/com/vaadin/data/converter/LocalDateToDateConverter.java | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/server/src/main/java/com/vaadin/data/converter/LocalDateToDateConverter.java b/server/src/main/java/com/vaadin/data/converter/LocalDateToDateConverter.java new file mode 100644 index 0000000000..f649091039 --- /dev/null +++ b/server/src/main/java/com/vaadin/data/converter/LocalDateToDateConverter.java @@ -0,0 +1,80 @@ +/* + * Copyright 2000-2016 Vaadin Ltd. + * + * 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 com.vaadin.data.converter; + +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.Date; +import java.util.Objects; + +import com.vaadin.data.Converter; +import com.vaadin.data.Result; +import com.vaadin.data.ValueContext; +import com.vaadin.ui.DateField; +import com.vaadin.ui.InlineDateField; + +/** + * A converter that converts between <code>LocalDate</code> and + * <code>Date</code>. This is used when a {@link DateField} or + * {@link InlineDateField} is bound to a {@link Date} property. + * + * @author Vaadin Ltd + */ +public class LocalDateToDateConverter implements Converter<LocalDate, Date> { + + private ZoneId zoneId; + + /** + * Creates a new converter using the given time zone. + * + * @param zoneId + * the time zone id to use, not <code>null</code> + */ + public LocalDateToDateConverter(ZoneId zoneId) { + this.zoneId = Objects.requireNonNull(zoneId, "Zone id cannot be null"); + } + + /** + * Creates a new converter using the system's default time zone. + * + * @see ZoneId#systemDefault() + */ + public LocalDateToDateConverter() { + this(ZoneId.systemDefault()); + } + + @Override + public Result<Date> convertToModel(LocalDate localDate, + ValueContext context) { + if (localDate == null) { + return Result.ok(null); + } + + return Result.ok(Date.from(localDate.atStartOfDay(zoneId).toInstant())); + } + + @Override + public LocalDate convertToPresentation(Date date, ValueContext context) { + if (date == null) { + return null; + } + + return Instant.ofEpochMilli(date.getTime()).atZone(zoneId) + .toLocalDate(); + } + +} |