diff options
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"; |