Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--jenkins.build.config.xml1
-rw-r--r--org.eclipse.osbp.xtext.datamart.common/META-INF/MANIFEST.MF3
-rw-r--r--org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenDate.java147
-rw-r--r--org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenText.java6
-rw-r--r--org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartFilterGenerator.java346
-rw-r--r--org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartMultiSelect.java14
-rw-r--r--org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartSingleSelect.java11
-rw-r--r--org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartUiFilterFactory.java2
-rw-r--r--org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCellSet.java14
9 files changed, 379 insertions, 165 deletions
diff --git a/jenkins.build.config.xml b/jenkins.build.config.xml
index 92c6c4b..e536e25 100644
--- a/jenkins.build.config.xml
+++ b/jenkins.build.config.xml
@@ -17,6 +17,7 @@
<jenkins.build.dependencies>
<jenkins.build.dependency>org.eclipse.osbp.bpm.api</jenkins.build.dependency>
<jenkins.build.dependency>org.eclipse.osbp.dsl</jenkins.build.dependency>
+ <jenkins.build.dependency>org.eclipse.osbp.ecview.core</jenkins.build.dependency>
<jenkins.build.dependency>org.eclipse.osbp.preferences</jenkins.build.dependency>
<jenkins.build.dependency>org.eclipse.osbp.runtime</jenkins.build.dependency>
<jenkins.build.dependency>org.eclipse.osbp.ui.api</jenkins.build.dependency>
diff --git a/org.eclipse.osbp.xtext.datamart.common/META-INF/MANIFEST.MF b/org.eclipse.osbp.xtext.datamart.common/META-INF/MANIFEST.MF
index 0f9a439..d727c9c 100644
--- a/org.eclipse.osbp.xtext.datamart.common/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.xtext.datamart.common/META-INF/MANIFEST.MF
@@ -19,7 +19,8 @@ Require-Bundle: mondrian.osgi;bundle-version="[3.5.0,4.0.0)",
org.eclipse.xtext.common.types;bundle-version="[2.11.0,2.12.0)",
org.eclipse.osbp.dsl.datatype.lib;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.runtime.common,
- org.eclipse.e4.core.contexts
+ org.eclipse.e4.core.contexts,
+ org.eclipse.osbp.ecview.core.common
Import-Package: javax.annotation,
javax.validation,
javax.validation.constraints,
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;
+ }
+
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenText.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenText.java
index 628a101..6589ea5 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenText.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenText.java
@@ -14,6 +14,8 @@
*/
package org.eclipse.osbp.xtext.datamart.common;
+import java.util.Locale;
+
import org.eclipse.osbp.ui.api.datamart.IDatamartBetweenInput;
import org.eclipse.osbp.ui.api.themes.EnumCssClass;
@@ -104,6 +106,8 @@ public class DatamartBetweenText extends HorizontalLayout implements IDatamartBe
untilInput.setDescription(description + "]");
}
-
+ public void setLocale(Locale locale){
+ // Do nothing
+ }
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartFilterGenerator.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartFilterGenerator.java
index 5f582ea..0ca8249 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartFilterGenerator.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartFilterGenerator.java
@@ -14,13 +14,22 @@
*/
package org.eclipse.osbp.xtext.datamart.common;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicBoolean;
+import javax.validation.constraints.NotNull;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent;
import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherDataTag;
@@ -38,6 +47,10 @@ import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
import org.eclipse.osbp.ui.api.user.IUser;
import org.eclipse.osbp.xtext.i18n.I18NKeyGenerator;
import org.slf4j.Logger;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
@@ -66,23 +79,31 @@ public class DatamartFilterGenerator implements IDatamartFilterGenerator, ValueC
private LinkedBlockingQueue<ValueChangeEvent> queue = new LinkedBlockingQueue<>();
private AtomicBoolean active = new AtomicBoolean(false);
private transient Thread thread;
-
private boolean showCaption;
-
private int numMultiRows;
+ private transient JAXBContext ctx;
+ private transient Marshaller marshaller;
+ private transient Unmarshaller unmarshaller;
+
/**
* Instantiates a new datamart filter generator.
*
* @param datamart the datamart
* @param dslMetadataService the dsl metadata service
*/
- public DatamartFilterGenerator(IDataMart datamart, IEclipseContext eclipseContext, boolean showCaption, int numMultiRows) {
+ public DatamartFilterGenerator(@NotNull IDataMart datamart,@NotNull IEclipseContext eclipseContext, boolean showCaption, int numMultiRows) {
this.datamart = datamart;
this.dslMetadataService = eclipseContext.get(IDSLMetadataService.class);
this.showCaption = showCaption;
this.numMultiRows = numMultiRows;
- if(this.datamart != null && datamart.getUser() != null) {
- this.datamart.getUser().addUserLocaleListener(this);
+ this.datamart.getUser().addUserLocaleListener(this);
+ try {
+ ctx = JAXBContext.newInstance(DatamartFilter.class);
+ marshaller = ctx.createMarshaller();
+ marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+ unmarshaller = ctx.createUnmarshaller();
+ } catch (JAXBException e) {
+ logger.error("cannot ceate JAXB marshaller {}", e);
}
active.set(true);
@@ -91,15 +112,10 @@ public class DatamartFilterGenerator implements IDatamartFilterGenerator, ValueC
while (active.get()) {
try {
ValueChangeEvent event;
- try {
- event = queue.take();
- ui.access(() -> {
- processValueChange(event);
- });
- } catch (InterruptedException e) {
- }
+ event = queue.take();
+ ui.access(() -> processValueChange(event));
} catch (Exception e) {
- logger.error("{}", e);
+ // nothing to do
}
}
};
@@ -133,19 +149,14 @@ public class DatamartFilterGenerator implements IDatamartFilterGenerator, ValueC
* @see org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator#selectItem(java.lang.String, java.lang.String)
*/
@Override
- public void selectItem(String filterID, String selection) {
- if (selection != null && datamart != null) {
- String sel = selection.replace("_", " ");
- ArrayList<DatamartFilter> filters = datamart.getFilters();
- if (filters != null) {
- for (DatamartFilter filter : filters) {
- if(filter.getType() != DatamartFilter.FilterType.BY_ID && filter.getType() != DatamartFilter.FilterType.BY_HISTUUID && filter.getName().equals(filterID)) {
- for(IDualData item : filter.getData()) {
- if(item.getSelectionValue().equals(sel)) {
- filter.getSelector().select(item);
- return;
- }
- }
+ public void selectItem(@NotNull String filterID, @NotNull String selection) {
+ String sel = selection.replace("_", " ");
+ for (DatamartFilter filter : datamart.getFilters()) {
+ if(filter.getType() != DatamartFilter.FilterType.BY_ID && filter.getType() != DatamartFilter.FilterType.BY_HISTUUID && filter.getName().equals(filterID)) {
+ for(IDualData item : filter.getData()) {
+ if(item.getSelectionValue().equals(sel)) {
+ filter.getSelector().select(item);
+ return;
}
}
}
@@ -203,15 +214,10 @@ public class DatamartFilterGenerator implements IDatamartFilterGenerator, ValueC
*/
@Override
public void resetItem(String filterID) {
- if (datamart != null) {
- ArrayList<DatamartFilter> filters = datamart.getFilters();
- if (filters != null) {
- for (DatamartFilter filter : filters) {
- if(filter.getType() != DatamartFilter.FilterType.BY_ID) {
- filter.getSelector().select(filter.getSelector().getFirstItem());
- return;
- }
- }
+ for (DatamartFilter filter : datamart.getFilters()) {
+ if(filter.getType() != DatamartFilter.FilterType.BY_ID) {
+ filter.getSelector().select(filter.getSelector().getFirstItem());
+ return;
}
}
}
@@ -223,47 +229,44 @@ public class DatamartFilterGenerator implements IDatamartFilterGenerator, ValueC
public boolean createUIFilters(IViewLayoutManager layoutManager) {
DatamartUiFilterFactory filterFactory = new DatamartUiFilterFactory();
boolean hasFilters = false;
- if(datamart != null) {
- datamart.renderFilters();
- ArrayList<DatamartFilter> filters = datamart.getFilters();
- if (filters != null) {
- hasFilters = true;
- for (DatamartFilter filter : filters) {
- switch (filter.getType()) {
- case BY_ID:
- case BY_HISTUUID:
- break;
- case SQL:
- case SLICER:
- case EXCEPT:
- case HIERARCHY:
- filter.setSelector((IDatamartSelectable)filterFactory.getUiFilter(filter, numMultiRows));
- if(filter.getMultipleType() == MultipleType.MULTIPLE) {
- layoutManager.getSideArea().addComponent((Component)filter.getSelector());
- } else {
- layoutManager.getTopArea().addComponent((Component)filter.getSelector());
- }
- break;
- case BETWEEN:
- case BETWEEN_DATE:
- filter.setBetweenInputComponent((IDatamartBetweenInput)filterFactory.getUiFilter(filter, numMultiRows));
- layoutManager.getTopArea().addComponent((Component) filter.getBetweenInputComponent());
- break;
- default:
- break;
- }
- if(filter.getType() != DatamartFilter.FilterType.BY_ID && filter.getType() != DatamartFilter.FilterType.BY_HISTUUID) {
- if (DatamartFilter.FilterType.BETWEEN == filter.getType() || DatamartFilter.FilterType.BETWEEN_DATE == filter.getType()){
- filter.getBetweenInputComponent().addValueChangeListener(this);
- } else {
- filter.getSelector().addValueChangeListener(this);
- }
- }
+ datamart.renderFilters();
+ hasFilters = true;
+ for (DatamartFilter filter : datamart.getFilters()) {
+ switch (filter.getType()) {
+ case BY_ID:
+ case BY_HISTUUID:
+ break;
+ case SQL:
+ case SLICER:
+ case EXCEPT:
+ case HIERARCHY:
+ filter.setSelector((IDatamartSelectable)filterFactory.getUiFilter(filter, numMultiRows));
+ if(filter.getMultipleType() == MultipleType.MULTIPLE) {
+ layoutManager.getSideArea().addComponent((Component)filter.getSelector());
+ } else {
+ layoutManager.getTopArea().addComponent((Component)filter.getSelector());
}
+ break;
+ case BETWEEN:
+ case BETWEEN_DATE:
+ filter.setBetweenInputComponent((IDatamartBetweenInput)filterFactory.getUiFilter(filter, numMultiRows));
+ layoutManager.getTopArea().addComponent((Component) filter.getBetweenInputComponent());
+ break;
+ default:
+ break;
+ }
+ if(filter.getType() != DatamartFilter.FilterType.BY_ID && filter.getType() != DatamartFilter.FilterType.BY_HISTUUID) {
+ if (DatamartFilter.FilterType.BETWEEN == filter.getType() || DatamartFilter.FilterType.BETWEEN_DATE == filter.getType()){
+ filter.getBetweenInputComponent().addValueChangeListener(this);
+ } else {
+ filter.getSelector().addValueChangeListener(this);
+ }
+ }
+ if(filter.getSelector() != null) {
+ filter.getSelector().setSelectedItems(loadFilter(filter));
}
- localeChanged(datamart.getUser().getLocale());
- getSelections();
}
+ localeChanged(datamart.getUser().getLocale());
return hasFilters;
}
@@ -272,15 +275,10 @@ public class DatamartFilterGenerator implements IDatamartFilterGenerator, ValueC
*/
@Override
public void updateFilter() {
- if(datamart != null) {
- datamart.renderFilters();
- ArrayList<DatamartFilter> filters = datamart.getFilters();
- if (filters != null) {
- for (DatamartFilter filter : filters) {
- if(filter.getType() != DatamartFilter.FilterType.BY_ID) {
- filter.getSelector().update(filter.getData());
- }
- }
+ datamart.renderFilters();
+ for (DatamartFilter filter : datamart.getFilters()) {
+ if(filter.getType() != DatamartFilter.FilterType.BY_ID) {
+ filter.getSelector().update(filter.getData());
}
}
}
@@ -292,39 +290,34 @@ public class DatamartFilterGenerator implements IDatamartFilterGenerator, ValueC
*/
private boolean getSelections() {
boolean allFiltersSet = true;
- if(datamart != null) {
- ArrayList<DatamartFilter> filters = datamart.getFilters();
- if (filters != null) {
- for (DatamartFilter filter : filters) {
- filter.clearSelectedData();
- switch (filter.getType()) {
- case BY_ID:
- case BY_HISTUUID:
- break;
- case EXCEPT:
- filter.setSelectedData(filter.getSelector().getSelectedItems());
- break;
- case SQL:
- case SLICER:
- case HIERARCHY:
- if(filter.getSelector() instanceof DatamartSingleSelect) {
- if(filter.getSelector().getValue() != null) {
- filter.addSelectedItem((IDualData)filter.getSelector().getValue());
- } else {
- filter.clearSelectedData();
- allFiltersSet = false;
- }
- } else {
- filter.setSelectedData(filter.getSelector().getSelectedItems());
- if(filter.getSelector().getSelectedItems().isEmpty()) {
- allFiltersSet = false;
- }
- }
- break;
- default:
- break;
+ for (DatamartFilter filter : datamart.getFilters()) {
+ filter.clearSelectedData();
+ switch (filter.getType()) {
+ case BY_ID:
+ case BY_HISTUUID:
+ break;
+ case EXCEPT:
+ filter.setSelectedData(filter.getSelector().getSelectedItems());
+ break;
+ case SQL:
+ case SLICER:
+ case HIERARCHY:
+ if(filter.getSelector() instanceof DatamartSingleSelect) {
+ if(filter.getSelector().getValue() != null) {
+ filter.addSelectedItem((IDualData)filter.getSelector().getValue());
+ } else {
+ filter.clearSelectedData();
+ allFiltersSet = false;
+ }
+ } else {
+ filter.setSelectedData(filter.getSelector().getSelectedItems());
+ if(filter.getSelector().getSelectedItems().isEmpty()) {
+ allFiltersSet = false;
}
}
+ break;
+ default:
+ break;
}
}
return allFiltersSet;
@@ -381,60 +374,117 @@ public class DatamartFilterGenerator implements IDatamartFilterGenerator, ValueC
if(getSelections()) {
// get the filter that changed
DatamartFilter changedFilter = null;
- if(datamart != null) {
- ArrayList<DatamartFilter> filters = datamart.getFilters();
- if (filters != null) {
- for (DatamartFilter filter : filters) {
- if (filter.getType() == DatamartFilter.FilterType.BETWEEN || filter.getType() == DatamartFilter.FilterType.BETWEEN_DATE) {
- if (!filter.getBetweenInputComponent().getFrom().isEmpty() && filter.getBetweenInputComponent().getUntilInput().equals(event.getProperty())){
+ for (DatamartFilter filter : datamart.getFilters()) {
+ if (filter.getType() == DatamartFilter.FilterType.BETWEEN || filter.getType() == DatamartFilter.FilterType.BETWEEN_DATE) {
+ IDatamartBetweenInput betweenInputComponent = filter.getBetweenInputComponent();
+ if (((!betweenInputComponent.getFrom().isEmpty() && betweenInputComponent.getUntilInput().equals(event.getProperty())) ||
+ (!betweenInputComponent.getUntil().isEmpty() && betweenInputComponent.getFromInput().equals(event.getProperty())))){
+ if (betweenInputComponent instanceof DatamartBetweenDate) {
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern(((DatamartBetweenDate)betweenInputComponent).getFormatter().toPattern());
+ if (LocalDate.parse(betweenInputComponent.getFrom(), formatter).isBefore(LocalDate.parse(betweenInputComponent.getUntil(), formatter))){
changedFilter = filter;
break;
}
- } else if (filter.getType() != DatamartFilter.FilterType.BY_ID && filter.getSelector().equals(event.getProperty())) {
- changedFilter = filter;
- break;
}
}
+ } else if (filter.getType() != DatamartFilter.FilterType.BY_ID && filter.getSelector().equals(event.getProperty())) {
+ changedFilter = filter;
+ break;
}
}
- // notify the listeners of the changed filter
- for(FilterChangeListener listener:listeners) {
- if(changedFilter != null) {
+ if(changedFilter != null) {
+ saveFilter(changedFilter);
+ // notify the listeners of the changed filter
+ for(FilterChangeListener listener:listeners) {
listener.filterChanged(changedFilter);
}
}
}
}
+ private List<IDualData> loadFilter(DatamartFilter filter) {
+ String filterName = filter.getName().replace("[", "").replace("]", "");
+ Document doc = this.datamart.getUser().getFilterDocument();
+ Element root = (Element) doc.getElementsByTagName(IUser.docRoot).item(0);
+ NodeList dmList = root.getElementsByTagName(datamart.getName());
+ Element datamartEl = null;
+ if(dmList.getLength() > 0) {
+ datamartEl = (Element) dmList.item(0);
+ NodeList fiList = datamartEl.getElementsByTagName(filterName);
+ Element filterEl = null;
+ if(fiList.getLength() > 0) {
+ filterEl = (Element) fiList.item(0);
+ NodeList filters = filterEl.getElementsByTagName("filter");
+ try {
+ DatamartFilter loadedFilter = (DatamartFilter)unmarshaller.unmarshal((Node)filters.item(0));
+ filter.setSelectedData(loadedFilter.getSelectedData());
+ return loadedFilter.getSelectedData();
+ } catch (JAXBException e) {
+ logger.error("{}", e);
+ }
+ }
+ }
+ return null;
+ }
+
+ private void saveFilter(DatamartFilter filter) {
+ String filterName = filter.getName().replace("[", "").replace("]", "");
+ Document doc = this.datamart.getUser().getFilterDocument();
+ Element root = (Element) doc.getElementsByTagName(IUser.docRoot).item(0);
+ NodeList dmList = root.getElementsByTagName(datamart.getName());
+ Element datamartEl = null;
+ if(dmList.getLength() == 0) {
+ datamartEl = doc.createElement(datamart.getName());
+ root.appendChild(datamartEl);
+ } else {
+ datamartEl = (Element) dmList.item(0);
+ }
+ NodeList fiList = datamartEl.getElementsByTagName(filterName);
+ Element filterEl = null;
+ if(fiList.getLength() == 0) {
+ filterEl = doc.createElement(filterName);
+ datamartEl.appendChild(filterEl);
+ } else {
+ filterEl = (Element) fiList.item(0);
+ NodeList filters = filterEl.getElementsByTagName("filter");
+ while(filters.getLength() > 0) {
+ filterEl.removeChild(filters.item(0));
+ }
+ }
+ try {
+ marshaller.marshal(filter, (Node)filterEl);
+ datamart.getUser().saveFilterDocument();
+ } catch (JAXBException e) {
+ logger.error("{}", e);
+ }
+ }
+
/* (non-Javadoc)
* @see org.eclipse.osbp.ui.api.user.IUser.UserLocaleListener#localeChanged(java.util.Locale)
*/
@Override
public void localeChanged(final Locale locale) {
- if(datamart != null) {
- ArrayList<DatamartFilter> filters = datamart.getFilters();
- if (filters != null) {
- for (DatamartFilter filter : filters) {
- if(filter.getSelector() != null || filter.getBetweenInputComponent() != null) {
- StringBuilder text = new StringBuilder();
- if(filter.getType()==FilterType.EXCEPT) {
- text.append(dslMetadataService.translate(locale.toLanguageTag(), "exceptFor"));
- text.append(" ");
- }
- text.append(dslMetadataService.translate(locale.toLanguageTag(), getTranslatableKey(filter.getName())));
- if (showCaption) {
- if (DatamartFilter.FilterType.BETWEEN == filter.getType() || DatamartFilter.FilterType.BETWEEN_DATE == filter.getType()) {
- filter.getBetweenInputComponent().setCaption(text.toString());
- } else {
- filter.getSelector().setCaption(text.toString());
- }
- }
- if (DatamartFilter.FilterType.BETWEEN == filter.getType() || DatamartFilter.FilterType.BETWEEN_DATE == filter.getType()) {
- filter.getBetweenInputComponent().setDescription(text.toString());
- } else {
- filter.getSelector().setDescription(text.toString());
- }
+ for (DatamartFilter filter : datamart.getFilters()) {
+ if(filter.getSelector() != null || filter.getBetweenInputComponent() != null) {
+ StringBuilder text = new StringBuilder();
+ if(filter.getType()==FilterType.EXCEPT) {
+ text.append(dslMetadataService.translate(locale.toLanguageTag(), "exceptFor"));
+ text.append(" ");
+ }
+ text.append(dslMetadataService.translate(locale.toLanguageTag(), getTranslatableKey(filter.getName())));
+ if (showCaption) {
+ if (DatamartFilter.FilterType.BETWEEN == filter.getType() || DatamartFilter.FilterType.BETWEEN_DATE == filter.getType()) {
+ filter.getBetweenInputComponent().setCaption(text.toString());
+ filter.getBetweenInputComponent().setLocale(locale);
+ } else {
+ filter.getSelector().setCaption(text.toString());
}
+ }
+ if (DatamartFilter.FilterType.BETWEEN == filter.getType() || DatamartFilter.FilterType.BETWEEN_DATE == filter.getType()) {
+ filter.getBetweenInputComponent().setDescription(text.toString());
+ filter.getBetweenInputComponent().setLocale(locale);
+ } else {
+ filter.getSelector().setDescription(text.toString());
}
}
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartMultiSelect.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartMultiSelect.java
index 2ea52a9..e734d1c 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartMultiSelect.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartMultiSelect.java
@@ -35,6 +35,7 @@ public class DatamartMultiSelect extends ListSelect implements
private String hierarchy = null;
private IDualData firstItem = null;
private boolean selectFirst;
+ private List<IDualData> preSelectedItems;
@SuppressWarnings("unchecked")
@Override
@@ -72,6 +73,7 @@ public class DatamartMultiSelect extends ListSelect implements
@Override
public void run() {
removeAllItems();
+ // select the first option
firstItem = null;
for (IDualData dd : options) {
setHierarchy(dd.getHierarchy());
@@ -86,8 +88,13 @@ public class DatamartMultiSelect extends ListSelect implements
}
// always select the first option
Collection<IDualData> selectedItems = new ArrayList<IDualData>();
+ if(preSelectedItems != null) {
+ selectedItems.addAll(preSelectedItems);
+ }
if(selectFirst) {
- selectedItems.add(firstItem);
+ if(preSelectedItems == null) {
+ selectedItems.add(firstItem);
+ }
setNullSelectionAllowed(false);
} else {
setNullSelectionAllowed(true);
@@ -174,4 +181,9 @@ public class DatamartMultiSelect extends ListSelect implements
public Object getValue() {
return super.getValue();
}
+
+ @Override
+ public void setSelectedItems(List<IDualData> selectedItems) {
+ preSelectedItems = selectedItems;
+ }
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartSingleSelect.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartSingleSelect.java
index fab085e..7d05ec5 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartSingleSelect.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartSingleSelect.java
@@ -32,6 +32,7 @@ public class DatamartSingleSelect extends ComboBox implements
private static final long serialVersionUID = -5673052113801450589L;
private String hierarchy = null;
private IDualData firstItem = null;
+ private List<IDualData> preSelectedItems;
public static long getSerialversionuid() {
return serialVersionUID;
@@ -55,6 +56,7 @@ public class DatamartSingleSelect extends ComboBox implements
@Override
public void run() {
removeAllItems();
+ // select the first option
firstItem = null;
for (IDualData dd : options) {
setHierarchy(dd.getHierarchy());
@@ -67,7 +69,9 @@ public class DatamartSingleSelect extends ComboBox implements
setItemCaption(dd, dd.getFormattedValue());
}
}
- // always select the first option
+ if(preSelectedItems != null) {
+ firstItem = preSelectedItems.get(0);
+ }
setValue(firstItem);
setEnabled(true);
setNullSelectionAllowed(false);
@@ -143,4 +147,9 @@ public class DatamartSingleSelect extends ComboBox implements
public Object getValue() {
return super.getValue();
}
+
+ @Override
+ public void setSelectedItems(List<IDualData> selectedItems) {
+ preSelectedItems = selectedItems;
+ }
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartUiFilterFactory.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartUiFilterFactory.java
index ba23239..1f88d66 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartUiFilterFactory.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartUiFilterFactory.java
@@ -42,7 +42,7 @@ public class DatamartUiFilterFactory {
uiFilters.put(filter.getName(), new DatamartBetweenText());
break;
case BETWEEN_DATE:
- uiFilters.put(filter.getName(), new DatamartBetweenDate(filter.format, filter.resolution));
+ uiFilters.put(filter.getName(), new DatamartBetweenDate(filter.getFormat(), filter.getResolution()));
break;
default:
break;
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCellSet.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCellSet.java
index 7a8e760..3bacbf2 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCellSet.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCellSet.java
@@ -495,9 +495,6 @@ public class SqlCellSet implements CellSet {
case java.sql.Types.BIT:
return Member.MemberType.UNKNOWN;
case java.sql.Types.NUMERIC:
- if(scale == 0) {
- return Member.MemberType.UNKNOWN;
- }
return Member.MemberType.MEASURE;
case java.sql.Types.DECIMAL:
case java.sql.Types.DOUBLE:
@@ -565,11 +562,14 @@ public class SqlCellSet implements CellSet {
case java.sql.Types.LONGVARBINARY:
return rs.getBytes(idx) != null ? new String(Base64.getDecoder().decode(rs.getBytes(idx))) : "";
case java.sql.Types.BLOB:
- return rs.getBlob(idx);
+ return rs.getBytes(idx) != null ? new String(Base64.getDecoder().decode(rs.getBytes(idx))) : "";
+// return rs.getBlob(idx);
case java.sql.Types.CLOB:
- return rs.getClob(idx);
+ return rs.getBytes(idx) != null ? new String(Base64.getDecoder().decode(rs.getBytes(idx))) : "";
+// return rs.getClob(idx);
case java.sql.Types.NCLOB:
- return rs.getNClob(idx);
+ return rs.getBytes(idx) != null ? new String(Base64.getDecoder().decode(rs.getBytes(idx))) : "";
+// return rs.getNClob(idx);
case java.sql.Types.DATALINK:
return rs.getCharacterStream(idx);
case java.sql.Types.SQLXML:
@@ -621,7 +621,7 @@ public class SqlCellSet implements CellSet {
case java.sql.Types.BLOB:
case java.sql.Types.CLOB:
case java.sql.Types.NCLOB:
- formattedValue = "LOB";
+ formattedValue = rs.getBytes(idx) != null ? new String(Base64.getDecoder().decode(rs.getBytes(idx))) : "";
break;
case java.sql.Types.DATALINK:
formattedValue = "DATALINK";

Back to the top