diff options
author | Aleksi Hietanen <aleksi@vaadin.com> | 2017-03-30 10:31:51 +0300 |
---|---|---|
committer | Henri Sara <henri.sara@gmail.com> | 2017-03-30 10:31:51 +0300 |
commit | b869d751811f36b3c74ea5c3e44a3e587e0d5b82 (patch) | |
tree | 78ad6ae4235789a18c34ccd94a97bc939531b3dd /server/src | |
parent | f9a9f2c4be0e38d936acab88cba45799fa83ff4a (diff) | |
download | vaadin-framework-b869d751811f36b3c74ea5c3e44a3e587e0d5b82.tar.gz vaadin-framework-b869d751811f36b3c74ea5c3e44a3e587e0d5b82.zip |
Implement LocalDateRenderer and LocalDateTimeRenderer (#8955)
Closes #8377
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/main/java/com/vaadin/ui/renderers/LocalDateRenderer.java | 208 | ||||
-rw-r--r-- | server/src/main/java/com/vaadin/ui/renderers/LocalDateTimeRenderer.java | 215 |
2 files changed, 423 insertions, 0 deletions
diff --git a/server/src/main/java/com/vaadin/ui/renderers/LocalDateRenderer.java b/server/src/main/java/com/vaadin/ui/renderers/LocalDateRenderer.java new file mode 100644 index 0000000000..ccce977dd4 --- /dev/null +++ b/server/src/main/java/com/vaadin/ui/renderers/LocalDateRenderer.java @@ -0,0 +1,208 @@ +/* + * 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.ui.renderers; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.FormatStyle; +import java.util.Locale; + +import com.vaadin.shared.ui.grid.renderers.LocalDateRendererState; + +import elemental.json.JsonValue; + +/** + * A renderer for presenting date values. + * + * @author Vaadin Ltd + * @since 8.1 + */ +public class LocalDateRenderer extends AbstractRenderer<Object, LocalDate> { + + private DateTimeFormatter formatter; + private boolean getLocaleFromGrid; + + /** + * Creates a new LocalDateRenderer. + * <p> + * The renderer is configured to render with the grid's locale it is + * attached to, with the format style being {@code FormatStyle.LONG} and an + * empty string as its null representation. + * + * @see <a href= + * "https://docs.oracle.com/javase/8/docs/api/java/time/format/FormatStyle.html#LONG"> + * FormatStyle.LONG</a> + */ + public LocalDateRenderer() { + this(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG), ""); + getLocaleFromGrid = true; + } + + /** + * Creates a new LocalDateRenderer. + * <p> + * The renderer is configured to render with the given string format, as + * displayed in the grid's locale it is attached to, with an empty string as + * its null representation. + * + * @param formatPattern + * the format pattern to format the date with, not {@code null} + * + * @throws IllegalArgumentException + * if format pattern is null + * + * @see <a href= + * "https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#patterns"> + * Format Pattern Syntax</a> + */ + public LocalDateRenderer(String formatPattern) { + this(formatPattern, Locale.getDefault()); + getLocaleFromGrid = true; + } + + /** + * Creates a new LocalDateRenderer. + * <p> + * The renderer is configured to render with the given string format, as + * displayed in the given locale, with an empty string as its null + * representation. + * + * @param formatPattern + * the format pattern to format the date with, not {@code null} + * @param locale + * the locale to use, not {@code null} + * + * @throws IllegalArgumentException + * if format pattern is null + * @throws IllegalArgumentException + * if locale is null + * + * @see <a href= + * "https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#patterns"> + * Format Pattern Syntax</a> + */ + public LocalDateRenderer(String formatPattern, Locale locale) { + this(formatPattern, locale, ""); + } + + /** + * Creates a new LocalDateRenderer. + * <p> + * The renderer is configured to render with the given string format, as + * displayed in the given locale. + * + * @param formatPattern + * the format pattern to format the date with, not {@code null} + * @param locale + * the locale to use, not {@code null} + * @param nullRepresentation + * the textual representation of the {@code null} value + * + * @throws IllegalArgumentException + * if format pattern is null + * @throws IllegalArgumentException + * if locale is null + * + * @see <a href= + * "https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#patterns"> + * Format Pattern Syntax</a> + */ + public LocalDateRenderer(String formatPattern, Locale locale, + String nullRepresentation) { + super(LocalDate.class, nullRepresentation); + + if (formatPattern == null) { + throw new IllegalArgumentException( + "format pattern may not be null"); + } + + if (locale == null) { + throw new IllegalArgumentException("locale may not be null"); + } + + formatter = DateTimeFormatter.ofPattern(formatPattern, locale); + } + + /** + * Creates a new LocalDateRenderer. + * <p> + * The renderer is configured to render with the given formatter, with an + * empty string as its null representation. + * + * @param formatter + * the formatter to use, not {@code null} + * + * @throws IllegalArgumentException + * if formatter is null + */ + public LocalDateRenderer(DateTimeFormatter formatter) { + this(formatter, ""); + } + + /** + * Creates a new LocalDateRenderer. + * <p> + * The renderer is configured to render with the given formatter. + * + * @param formatter + * the formatter to use, not {@code null} + * @param nullRepresentation + * the textual representation of the {@code null} value + * + * @throws IllegalArgumentException + * if formatter is null + */ + public LocalDateRenderer(DateTimeFormatter formatter, + String nullRepresentation) { + super(LocalDate.class, nullRepresentation); + + if (formatter == null) { + throw new IllegalArgumentException("formatter may not be null"); + } + + this.formatter = formatter; + } + + @Override + public JsonValue encode(LocalDate value) { + String dateString; + if (value == null) { + dateString = getNullRepresentation(); + } else if (getLocaleFromGrid) { + if (getParentGrid() == null) { + throw new IllegalStateException( + "Could not find a locale to format with: " + + "this renderer should either be attached to a grid " + + "or constructed with locale information"); + } + dateString = value + .format(formatter.withLocale(getParentGrid().getLocale())); + } else { + dateString = value.format(formatter); + } + return encode(dateString, String.class); + } + + @Override + protected LocalDateRendererState getState() { + return (LocalDateRendererState) super.getState(); + } + + @Override + protected LocalDateRendererState getState(boolean markAsDirty) { + return (LocalDateRendererState) super.getState(markAsDirty); + } +} diff --git a/server/src/main/java/com/vaadin/ui/renderers/LocalDateTimeRenderer.java b/server/src/main/java/com/vaadin/ui/renderers/LocalDateTimeRenderer.java new file mode 100644 index 0000000000..ea475ebf09 --- /dev/null +++ b/server/src/main/java/com/vaadin/ui/renderers/LocalDateTimeRenderer.java @@ -0,0 +1,215 @@ +/* + * 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.ui.renderers; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.FormatStyle; +import java.util.Locale; + +import com.vaadin.shared.ui.grid.renderers.LocalDateTimeRendererState; + +import elemental.json.JsonValue; + +/** + * A renderer for presenting {@code LocalDateTime} objects. + * + * @author Vaadin Ltd + * @since 8.1 + */ +public class LocalDateTimeRenderer + extends AbstractRenderer<Object, LocalDateTime> { + + private DateTimeFormatter formatter; + private boolean getLocaleFromGrid; + + /** + * Creates a new LocalDateTimeRenderer. + * <p> + * The renderer is configured to render with the grid's locale it is + * attached to, with the format style being {@code FormatStyle.LONG} for the + * date and {@code FormatStyle.SHORT} for time, with an empty string as its + * null representation. + * + * @see <a href= + * "https://docs.oracle.com/javase/8/docs/api/java/time/format/FormatStyle.html#LONG"> + * FormatStyle.LONG</a> + * @see <a href= + * "https://docs.oracle.com/javase/8/docs/api/java/time/format/FormatStyle.html#SHORT"> + * FormatStyle.SHORT</a> + */ + public LocalDateTimeRenderer() { + this(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG, + FormatStyle.SHORT), ""); + getLocaleFromGrid = true; + } + + /** + * Creates a new LocalDateTimeRenderer. + * <p> + * The renderer is configured to render with the given formatter, with the + * empty string as its null representation. + * + * @param formatter + * the formatter to use, not {@code null} + * + * @throws IllegalArgumentException + * if formatter is null + */ + public LocalDateTimeRenderer(DateTimeFormatter formatter) { + this(formatter, ""); + } + + /** + * Creates a new LocalDateTimeRenderer. + * <p> + * The renderer is configured to render with the given formatter. + * + * @param formatter + * the formatter to use, not {@code null} + * @param nullRepresentation + * the textual representation of the {@code null} value + * + * @throws IllegalArgumentException + * if formatter is null + */ + public LocalDateTimeRenderer(DateTimeFormatter formatter, String nullRepresentation) { + super(LocalDateTime.class, nullRepresentation); + + if (formatter == null) { + throw new IllegalArgumentException("formatter may not be null"); + } + + this.formatter = formatter; + } + + /** + * Creates a new LocalDateTimeRenderer. + * <p> + * The renderer is configured to render with the given string format, as + * displayed in the grid's locale it is attached to, with an empty string as + * its null representation. + * + * @param formatPattern + * the format pattern to format the date with, not {@code null} + * + * @throws IllegalArgumentException + * if format pattern is null + * + * @see <a href= + * "https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#patterns"> + * Format Pattern Syntax</a> + */ + public LocalDateTimeRenderer(String formatPattern) { + this(formatPattern, Locale.getDefault()); + getLocaleFromGrid = true; + } + + /** + * Creates a new LocalDateTimeRenderer. + * <p> + * The renderer is configured to render with the given string format, as + * displayed in the given locale, with an empty string as its null + * representation. + * + * @param formatPattern + * the format pattern to format the date with, not {@code null} + * @param locale + * the locale to use, not {@code null} + * @param nullRepresentation + * the textual representation of the {@code null} value + * + * @throws IllegalArgumentException + * if format pattern is null + * @throws IllegalArgumentException + * if locale is null + * + * @see <a href= + * "https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#patterns"> + * Format Pattern Syntax</a> + */ + public LocalDateTimeRenderer(String formatPattern, Locale locale) { + this(formatPattern, locale, ""); + } + + /** + * Creates a new LocalDateTimeRenderer. + * <p> + * The renderer is configured to render with the given string format, as + * displayed in the given locale. + * + * @param formatPattern + * the format pattern to format the date with, not {@code null} + * @param locale + * the locale to use, not {@code null} + * @param nullRepresentation + * the textual representation of the {@code null} value + * + * @throws IllegalArgumentException + * if format pattern is null + * @throws IllegalArgumentException + * if locale is null + * + * @see <a href= + * "https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#patterns"> + * Format Pattern Syntax</a> + */ + public LocalDateTimeRenderer(String formatPattern, Locale locale, + String nullRepresentation) { + super(LocalDateTime.class, nullRepresentation); + + if (formatPattern == null) { + throw new IllegalArgumentException( + "format pattern may not be null"); + } + + if (locale == null) { + throw new IllegalArgumentException("locale may not be null"); + } + + formatter = DateTimeFormatter.ofPattern(formatPattern, locale); + } + + @Override + public JsonValue encode(LocalDateTime value) { + String dateString; + if (value == null) { + dateString = getNullRepresentation(); + } else if (getLocaleFromGrid) { + if (getParentGrid() == null) { + throw new IllegalStateException( + "Could not find a locale to format with: " + + "this renderer should either be attached to a grid " + + "or constructed with locale information"); + } + dateString = value + .format(formatter.withLocale(getParentGrid().getLocale())); + } else { + dateString = value.format(formatter); + } + return encode(dateString, String.class); + } + + @Override + protected LocalDateTimeRendererState getState() { + return (LocalDateTimeRendererState) super.getState(); + } + + @Override + protected LocalDateTimeRendererState getState(boolean markAsDirty) { + return (LocalDateTimeRendererState) super.getState(markAsDirty); + } +} |