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);