diff options
Diffstat (limited to 'org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenDate.java')
-rw-r--r-- | org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenDate.java | 147 |
1 files changed, 142 insertions, 5 deletions
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenDate.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenDate.java index df87322..669e6b8 100644 --- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenDate.java +++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenDate.java @@ -17,6 +17,13 @@ package org.eclipse.osbp.xtext.datamart.common; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Arrays; +import java.util.Date; +import java.util.Locale; import org.eclipse.osbp.ui.api.datamart.DatamartFilter; import org.eclipse.osbp.ui.api.datamart.IDatamartBetweenInput; @@ -27,21 +34,33 @@ import com.vaadin.data.Property.ReadOnlyException; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.data.util.converter.Converter.ConversionException; import com.vaadin.shared.ui.datefield.Resolution; +import com.vaadin.ui.ComboBox; import com.vaadin.ui.DateField; import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.UI; public class DatamartBetweenDate extends HorizontalLayout implements IDatamartBetweenInput { private static Logger LOGGER = org.slf4j.LoggerFactory.getLogger(DatamartBetweenDate.class.getName()); + private static final long serialVersionUID = -5673052113801450589L; + private DateField fromInput; private DateField untilInput; - private static final long serialVersionUID = -5673052113801450589L; + private ComboBox defaultDatesCombo; + + private boolean defaultDateUpdateFlagFrom = false; + private boolean defaultDateUpdateFlagUntil = false; + + private enum DefaultTime { + MANUALLY, TODAY, YESTERDAY, THIS_WEEK, LAST_WEEK, THIS_MONTH + } + // private DateFormat formatter = DateFormat.getDateTimeInstance(); - private DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat formatter = (SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, UI.getCurrent().getLocale()); public static long getSerialversionuid() { return serialVersionUID; @@ -50,19 +69,21 @@ public class DatamartBetweenDate extends HorizontalLayout implements IDatamartBe public DatamartBetweenDate() { fromInput = new DateField(); untilInput = new DateField(); - fromInput.setDateFormat("yyyy-MM-dd HH:mm:ss"); - untilInput.setDateFormat("yyyy-MM-dd HH:mm:ss"); + fromInput.setDateFormat(formatter.toPattern()); + untilInput.setDateFormat(formatter.toPattern()); fromInput.setResolution(Resolution.SECOND); untilInput.setResolution(Resolution.SECOND); + createDefaultDatesCombo(); addComponent(fromInput); addComponent(untilInput); + addComponent(defaultDatesCombo); addStyleName(EnumCssClass.RANGE_SELECTION.styleName()); } public DatamartBetweenDate(DatamartFilter.DateTimeFormat filterFormat, DatamartFilter.DateResolution filterResolution) { fromInput = new DateField(); untilInput = new DateField(); - String dateFormat = "yyyy-MM-dd HH:mm:ss"; + String dateFormat = formatter.toPattern(); Resolution resolution = Resolution.MINUTE; if (filterFormat != null && filterResolution != null) { dateFormat = getFormat(filterFormat, filterResolution); @@ -72,11 +93,117 @@ public class DatamartBetweenDate extends HorizontalLayout implements IDatamartBe untilInput.setDateFormat(dateFormat); fromInput.setResolution(resolution); untilInput.setResolution(resolution); + createDefaultDatesCombo(); addComponent(fromInput); addComponent(untilInput); + addComponent(defaultDatesCombo); addStyleName(EnumCssClass.RANGE_SELECTION.styleName()); } + private void createDefaultDatesCombo() { + defaultDatesCombo = new ComboBox(); + defaultDatesCombo.setStyleName(EnumCssClass.DEFAULT_TIMES.styleName()); + fromInput.addValueChangeListener(e -> { + fromInput.setValue((Date) e.getProperty().getValue()); + if (!isDefaultDateUpdateFlagFrom()) { + defaultDatesCombo.setValue(DefaultTime.MANUALLY); + } + setDefaultDateUpdateFlagFrom(false); + }); + untilInput.addValueChangeListener(e -> { + untilInput.setValue((Date) e.getProperty().getValue()); + if (!isDefaultDateUpdateFlagUntil()) { + defaultDatesCombo.setValue(DefaultTime.MANUALLY); + } + setDefaultDateUpdateFlagUntil(false); + }); + + defaultDatesCombo.addItems(Arrays.asList(DefaultTime.values())); + defaultDatesCombo.addValueChangeListener(e -> { + DefaultTime dt = (DefaultTime)e.getProperty().getValue(); + if (!DefaultTime.MANUALLY.equals(dt)) { + setDefaultDateUpdateFlagFrom(true); + setDefaultDateUpdateFlagUntil(true); + fromInput.setValue(getDateFromDefaultTime(dt)[0]); + untilInput.setValue(getDateFromDefaultTime(dt)[1]); + } + }); + + } + + private Date[] getDateFromDefaultTime(DefaultTime dt){ + Date[] dateArray = new Date[2]; + LocalDate today = LocalDate.now(); + switch (dt) { + case TODAY: + dateArray[0] = convertToDate(today.atTime(0, 0, 0)); + dateArray[1] = convertToDate(today.atTime(23, 59, 59)); + return dateArray; + case YESTERDAY: + LocalDate yesterday = today.minusDays(1); + dateArray[0] = convertToDate(yesterday.atTime(0, 0, 0)); + dateArray[1] = convertToDate(yesterday.atTime(23, 59, 59)); + return dateArray; + case THIS_WEEK: + DayOfWeek dayOfWeek = today.getDayOfWeek(); + dateArray[0] = convertToDate(today.minusDays(dayOfWeek.getValue()-1)); + dateArray[1] = convertToDate(today.plusDays(7-dayOfWeek.getValue()).atTime(23, 59, 59)); + return dateArray; + case LAST_WEEK: + LocalDate lastWeekDate = today.minusWeeks(1); + DayOfWeek dayOfLastWeek = lastWeekDate.getDayOfWeek(); + dateArray[0] = convertToDate(lastWeekDate.minusDays(dayOfLastWeek.getValue()-1)); + dateArray[1] = convertToDate(lastWeekDate.plusDays(7-dayOfLastWeek.getValue()).atTime(23, 59, 59)); + return dateArray; + case THIS_MONTH: + dateArray[0] = convertToDate(today.withDayOfMonth(1)); + dateArray[1] = convertToDate(today.withDayOfMonth(1).plusMonths(1).minusDays(1).atTime(23, 59, 59)); + return dateArray; + case MANUALLY: + default: + dateArray[0] = convertToDate(today.atTime(0, 0, 0)); + dateArray[1] = convertToDate(today.atTime(0, 0, 0)); + return dateArray; + } + } + + private Date convertToDate(LocalDate value) { + + if (value != null) { + return Date.from(value.atStartOfDay() + .atZone(ZoneId.systemDefault()) + .toInstant()); + } + + return null; + } + + private Date convertToDate(LocalDateTime value) { + + if (value != null) { + return Date.from(value.atZone(ZoneId.systemDefault()) + .toInstant()); + } + + return null; + } + + private boolean isDefaultDateUpdateFlagFrom() { + return defaultDateUpdateFlagFrom; + } + + private boolean isDefaultDateUpdateFlagUntil() { + return defaultDateUpdateFlagUntil; + } + + private void setDefaultDateUpdateFlagFrom(boolean defaultDateUpdateFlagFrom) { + this.defaultDateUpdateFlagFrom = defaultDateUpdateFlagFrom; + } + + private void setDefaultDateUpdateFlagUntil(boolean defaultDateUpdateFlagUntil) { + this.defaultDateUpdateFlagUntil = defaultDateUpdateFlagUntil; + } + private String getFormat(DatamartFilter.DateTimeFormat format, DatamartFilter.DateResolution resolution) { DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT); String pattern = ((SimpleDateFormat)formatter).toPattern(); @@ -279,4 +406,14 @@ public class DatamartBetweenDate extends HorizontalLayout implements IDatamartBe untilInput.setDescription(description + "]"); } + public void setLocale(Locale locale){ + formatter = (SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, locale); + fromInput.setDateFormat(formatter.toPattern()); + untilInput.setDateFormat(formatter.toPattern()); + } + + public SimpleDateFormat getFormatter() { + return formatter; + } + } |