Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java147
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;
+ }
+
}

Back to the top