catch up with branch development
Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ADatamart.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ADatamart.java
index f90d8ac..3d648ab 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ADatamart.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ADatamart.java
@@ -56,6 +56,11 @@
*/
public abstract HashMap<String, EType> getTypesMap();
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.ui.api.datamart.IDataMart#getTypesProp()
+ */
+ public abstract HashMap<String, String> getTypesProp();
+
/**
* Disconnect.
*
@@ -181,7 +186,7 @@
filter.setCondition("1=1");
}
} else { // failsafe - but only if filter is optional
- filter.setCondition("'*'");
+ filter.setCondition("1=1");
}
break;
case MULTIPLE:
@@ -195,7 +200,11 @@
selection += item.getDatabaseSelectionValue();
}
}
- filter.setCondition(selection);
+ if(!filter.getSelectedData().isEmpty()) {
+ filter.setCondition(selection);
+ } else {
+ filter.setCondition("'*'");
+ }
break;
case MULTIPLESLICER:
// all multiple slicer filters are accumulated to the first filter multiple slicer filter
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartData.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartData.java
deleted file mode 100644
index e3150f7..0000000
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartData.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- *
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
- *
- */
- package org.eclipse.osbp.xtext.datamart.common;
-
-import org.eclipse.osbp.ui.api.datamart.IDualData;
-
-
-public class DatamartData implements IDualData {
- private String selectionValue;
- private String formattedValue;
- private String significantValue;
- private String hierarchy = null;
-
- @Override
- public String getSelectionValue() {
- return selectionValue;
- }
-
- @Override
- public void setSelectionValue(String selectionValue) {
- this.selectionValue = selectionValue;
- }
-
- @Override
- public String getFormattedValue() {
- return formattedValue;
- }
-
- @Override
- public void setFormattedValue(String formattedValue) {
- this.formattedValue = formattedValue;
- }
-
- @Override
- public String getHierarchy() {
- return hierarchy;
- }
-
- public void set_hierarchy(String _hierarchy) {
- this.hierarchy = _hierarchy;
- }
-
- @Override
- public void setUnformattedValue(String unformattedValue) {
- significantValue = unformattedValue;
- formattedValue = "";
- selectionValue = unformattedValue;
- hierarchy = null;
- if (unformattedValue != null && unformattedValue.startsWith("[") && unformattedValue.endsWith("]") && unformattedValue.contains(".")) {
- String parts[] = unformattedValue.split("\\]\\.\\[");
-// hierarchy = parts[0].replace("[","").replace("]", "");
- hierarchy = parts[0];
- for (int idx=1; idx<parts.length; idx ++) {
- if(idx < parts.length-1) {
- hierarchy += "].["+parts[idx];
- } else {
- hierarchy += "]";
- }
- if (idx > 1) {
- formattedValue += " ";
- }
- formattedValue += parts[idx].replace("[","").replace("]", "");
- if(idx == parts.length-1) {
- significantValue = parts[idx].replace("[","").replace("]", "");
- }
- }
- }
- else {
- formattedValue = unformattedValue;
- }
-// if(hierarchy != null) {
-// formattedValue = "["+hierarchy+"]."+formattedValue;
-// }
- }
-
- public String getSignificantValue() {
- return significantValue;
- }
-}
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 ca29d18..829f054 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
@@ -15,6 +15,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
+import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent;
@@ -22,7 +23,9 @@
import org.eclipse.osbp.runtime.common.event.IDualData;
import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
import org.eclipse.osbp.ui.api.datamart.IDataMart;
+import org.eclipse.osbp.ui.api.datamart.IDatamartBetweenInput;
import org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator;
+import org.eclipse.osbp.ui.api.datamart.IDatamartSelectable;
import org.eclipse.osbp.ui.api.layout.IViewLayoutManager;
import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
import org.eclipse.osbp.ui.api.user.IUser;
@@ -253,6 +256,51 @@
}
return hasFilters;
}
+
+ public boolean createUIFilters(IViewLayoutManager layoutManager, DatamartUiFilterFactory filterFactory) {
+ 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:
+ break;
+ case SINGLE:
+ case SINGLEHIERARCHY:
+ case SINGLESLICER:
+ case EXCEPT:
+ filter.setSelector((IDatamartSelectable)filterFactory.getUiFilter(filter));
+ layoutManager.getTopArea().addComponent((Component)filter.getSelector());
+ break;
+ case MULTIPLE:
+ case MULTIPLEHIERARCHY:
+ case MULTIPLESLICER:
+ filter.setSelector((IDatamartSelectable)filterFactory.getUiFilter(filter));
+ layoutManager.getSideArea().addComponent((Component)filter.getSelector());
+ break;
+ case BETWEEN:
+ case BETWEEN_DATE:
+ filter.setBetweenInputComponent((IDatamartBetweenInput)filterFactory.getUiFilter(filter));
+ layoutManager.getTopArea().addComponent((Component) filter.getBetweenInputComponent());
+ break;
+ }
+ if(filter.getType() != DatamartFilter.FilterType.BY_ID) {
+ if (DatamartFilter.FilterType.BETWEEN == filter.getType() || DatamartFilter.FilterType.BETWEEN_DATE == filter.getType()){
+ filter.getBetweenInputComponent().addValueChangeListener(this);
+ } else {
+ filter.getSelector().addValueChangeListener(this);
+ }
+ }
+ }
+ }
+ localeChanged(datamart.getUser().getLocale());
+ getSelections();
+ }
+ return hasFilters;
+ }
/* (non-Javadoc)
* @see org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator#updateFilter()
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 e0e0e5d..76f266c 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
@@ -98,7 +98,9 @@
public List<IDualData> getSelectedItems() {
List<IDualData> list = new ArrayList<IDualData>();
for (Object item : (Collection<?>) getValue()) {
- list.add((IDualData) item);
+ if (item != null){
+ list.add((IDualData) item);
+ }
}
return (list);
}
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
new file mode 100644
index 0000000..64b74b6
--- /dev/null
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartUiFilterFactory.java
@@ -0,0 +1,47 @@
+package org.eclipse.osbp.xtext.datamart.common;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
+import org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator;
+
+import com.vaadin.ui.Component;
+
+public class DatamartUiFilterFactory {
+ Map<String, Component> uiFilters = new HashMap<>();
+ public Component getUiFilter(DatamartFilter filter){
+ Component component = uiFilters.get(filter.getName());
+ if (component == null) {
+ switch (filter.getType()) {
+ case BY_ID:
+ break;
+ case SINGLE:
+ case SINGLEHIERARCHY:
+ uiFilters.put(filter.getName(), new DatamartSingleSelect(false, false, filter.getData()));
+ break;
+ case SINGLESLICER:
+ uiFilters.put(filter.getName(), new DatamartSingleSelect(false, true, filter.getData()));
+ break;
+ case EXCEPT:
+ uiFilters.put(filter.getName(), new DatamartSingleSelect(true, false, filter.getData()));
+ break;
+ case MULTIPLE:
+ case MULTIPLEHIERARCHY:
+ uiFilters.put(filter.getName(), new DatamartMultiSelect(IDatamartFilterGenerator.MULTISELECTION_ROWS, false, false, filter.getData()));
+ break;
+ case MULTIPLESLICER:
+ uiFilters.put(filter.getName(), new DatamartMultiSelect(IDatamartFilterGenerator.MULTISELECTION_ROWS, false, true, filter.getData()));
+ break;
+ case BETWEEN:
+ uiFilters.put(filter.getName(), new DatamartBetweenText());
+ break;
+ case BETWEEN_DATE:
+ uiFilters.put(filter.getName(), new DatamartBetweenDate(filter.format, filter.resolution));
+ break;
+ }
+ component = uiFilters.get(filter.getName());
+ }
+ return component;
+ }
+}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/OperativeDtoContainer.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/OperativeDtoContainer.java
index 40abd47..99f72fe 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/OperativeDtoContainer.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/OperativeDtoContainer.java
@@ -62,7 +62,7 @@
for (IDto dtoInstance : operativeDtos) {
switch (operativeDtoIdDatatype) {
case INTEGER:
- operativeDtoIdsMap.put(new BigDecimal((Integer)getter.invoke(dtoInstance)), dtoInstance);
+ operativeDtoIdsMap.put(new Integer((Integer)getter.invoke(dtoInstance)), dtoInstance);
break;
case STRING:
operativeDtoIdsMap.put((String)getter.invoke(dtoInstance), dtoInstance);
@@ -92,19 +92,19 @@
public IDto getOperativeDtoForId(Object id) {
switch (operativeDtoIdDatatype) {
case INTEGER:
- if (id instanceof BigDecimal) {
+ if (id instanceof Integer) {
return operativeDtoIdsMap.get(id);
}
else if (id instanceof String) {
try {
id = ((String)id).split("\\.")[0];
- return operativeDtoIdsMap.get(new BigDecimal(Long.parseLong((String)id)));
+ return operativeDtoIdsMap.get(Integer.parseInt((String)id));
}
catch (Exception e) {
throw new IllegalArgumentException("id '"+id+"' must be INTEGER/BigDecimal or parseable STRING/String");
}
}
- throw new IllegalArgumentException("id must be INTEGER/BigDecimal");
+ throw new IllegalArgumentException("id must be INTEGER");
case STRING:
if (id instanceof String) {
return operativeDtoIdsMap.get(id);