catch up with branch development

Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
diff --git a/org.eclipse.osbp.xtext.table.common/META-INF/MANIFEST.MF b/org.eclipse.osbp.xtext.table.common/META-INF/MANIFEST.MF
index 714e76e..9d80d5c 100644
--- a/org.eclipse.osbp.xtext.table.common/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.xtext.table.common/META-INF/MANIFEST.MF
@@ -18,7 +18,8 @@
  org.jsoup;bundle-version="1.7.2",
  filteringtable.osgi;bundle-version="0.9.13",
  org.eclipse.osbp.runtime.web.vaadin.common,
- org.eclipse.osbp.blob;bundle-version="0.9.0"
+ org.eclipse.osbp.blob;bundle-version="0.9.0",
+ org.eclipse.osbp.ui.api
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Import-Package: mondrian.olap,
diff --git a/org.eclipse.osbp.xtext.table.common/src/org/eclipse/osbp/xtext/table/common/CheckboxSelectionCellSetFilterTable.java b/org.eclipse.osbp.xtext.table.common/src/org/eclipse/osbp/xtext/table/common/CheckboxSelectionCellSetFilterTable.java
index da92306..744a01f 100644
--- a/org.eclipse.osbp.xtext.table.common/src/org/eclipse/osbp/xtext/table/common/CheckboxSelectionCellSetFilterTable.java
+++ b/org.eclipse.osbp.xtext.table.common/src/org/eclipse/osbp/xtext/table/common/CheckboxSelectionCellSetFilterTable.java
@@ -13,12 +13,17 @@
  */
 package org.eclipse.osbp.xtext.table.common;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 
+import org.eclipse.osbp.ui.api.table.ITableRowCheckListener;
+import org.eclipse.osbp.ui.api.table.ITableRowCheckListener.CheckRecipient;
+
 import com.vaadin.data.Container;
 import com.vaadin.data.Property;
 import com.vaadin.ui.AbstractSelect;
@@ -27,8 +32,9 @@
 import com.vaadin.ui.CustomTable;
 import com.vaadin.ui.TextField;
 
-public class CheckboxSelectionCellSetFilterTable extends CellSetFilterTable {
+public class CheckboxSelectionCellSetFilterTable extends CellSetFilterTable implements ITableRowCheckListener {
 
+	private List<ITableRowCheckListener.CheckRecipient> checkRecipients = new ArrayList<>();
 	public enum UserSelectionState {
 		SINGLE {
 			@Override
@@ -82,7 +88,6 @@
 	@SuppressWarnings("deprecation")
 	public CheckboxSelectionCellSetFilterTable() {
 		super();
-		
 		addGeneratedColumn(CHECKBOX_COLUMN_ID, new ColumnGenerator() {
 			private static final long serialVersionUID = -1241374338743135797L;
 			@Override
@@ -103,6 +108,9 @@
 							else {
 								source.unselect(itemId);
 							}
+							for(CheckRecipient recipient:checkRecipients) {
+								recipient.rowChecked(itemId, selected);
+							}
 							setUserSelectionState(UserSelectionState.SOME);
 						}
 					}
@@ -145,7 +153,6 @@
             	}
         	}
         });
-        //setColumnHeader(CHECKBOX_COLUMN_ID, userSelectionState.headerString());
         setUserSelectionState(UserSelectionState.SOME);
         
 		this.lastSelectionValue = getValue();
@@ -318,4 +325,15 @@
         }
         return super.getColumnHeader(propertyId);
 	}
+
+	@Override
+	public void addTableRowCheckListener(CheckRecipient recipient) {
+		checkRecipients.add(recipient);
+	}
+
+	@Override
+	public void removeTableRowCheckListener(CheckRecipient recipient) {
+		checkRecipients.remove(recipient);
+	}
+	
 }
diff --git a/org.eclipse.osbp.xtext.table.common/src/org/eclipse/osbp/xtext/table/common/ScorecardCellGenerator.java b/org.eclipse.osbp.xtext.table.common/src/org/eclipse/osbp/xtext/table/common/ScorecardCellGenerator.java
deleted file mode 100644
index 64b266d..0000000
--- a/org.eclipse.osbp.xtext.table.common/src/org/eclipse/osbp/xtext/table/common/ScorecardCellGenerator.java
+++ /dev/null
@@ -1,450 +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.table.common;
-
-import java.math.BigDecimal;
-import java.text.DateFormat;
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.eclipse.osbp.ui.api.datamart.DerivedOlapException;
-import org.eclipse.osbp.ui.api.themes.IThemeResourceService;
-import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
-import org.eclipse.osbp.xtext.datamart.common.olap.DerivedCellSet;
-import org.eclipse.osbp.xtext.datamart.common.olap.DerivedMember;
-import org.eclipse.osbp.xtext.datamart.common.olap.DerivedPosition;
-import org.tepi.filtertable.FilterTable;
-
-import com.vaadin.server.Resource;
-import com.vaadin.ui.CustomTable;
-import com.vaadin.ui.Embedded;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Notification;
-
-class DbleComparator implements Comparator<Double> {
-	@Override
-	public int compare(Double arg0, Double arg1) {
-		return arg0.compareTo(arg1);
-	}
-}
-
-class DteComparator implements Comparator<Date> {
-	@Override
-	public int compare(Date o1, Date o2) {
-		return o1.compareTo(o2);
-	}
-}
-
-@Deprecated
-public class ScorecardCellGenerator implements FilterTable.ColumnGenerator {
-	private static final long serialVersionUID = -3687322995582002747L;
-	DerivedCellSet cellSet = null;
-	DerivedPosition rows = null;
-	List<Integer> coordinate = null;
-	String format = null;
-	DateFormat dateFormat = null;
-	int memberColumnId = -1;
-	boolean hideLabel = false;
-	boolean iconFirst = false;
-	boolean styleDiscreteValues = false;
-	boolean resourceDiscreteValues = false;
-	Map<Date, Resource> dateResourceMap = null;
-	Map<Date, String> dateStyleMap = null;
-	Map<Double, Resource> doubleResourceMap = null;
-	Map<Double, String> doubleStyleMap = null;
-	Map<String, Resource> stringResourceMap = null;
-	Map<String, String> stringStyleMap = null;
-	private Locale locale = new Locale("de", "DE");
-
-	private final IThemeResourceService themeResourceService;
-
-	public ScorecardCellGenerator(IThemeResourceService themeResourceService, DerivedCellSet cellSet, DerivedPosition rows, List<Integer> coordinate) {
-		this(themeResourceService, cellSet, rows, coordinate, -1);
-	}
-
-	public ScorecardCellGenerator(IThemeResourceService themeResourceService, DerivedCellSet cellSet, DerivedPosition rows, List<Integer> coordinate, int memberColumnId) {
-		this.cellSet = cellSet;
-		this.rows = rows;
-		this.coordinate = coordinate;
-		this.memberColumnId = memberColumnId;
-		this.themeResourceService = themeResourceService;
-	}
-
-	/**
-	 * @return the hideLabel
-	 */
-	public boolean isHideLabel() {
-		return hideLabel;
-	}
-
-	/**
-	 * @param hideLabel
-	 *            the hideLabel to set
-	 */
-	public void setHideLabel(boolean hideLabel) {
-		this.hideLabel = hideLabel;
-	}
-
-	public boolean isIconFirst() {
-		return iconFirst;
-	}
-
-	public void setIconFirst(boolean iconFirst) {
-		this.iconFirst = iconFirst;
-	}
-
-	public String getFormat() {
-		return format;
-	}
-
-	public void setFormat(String format) {
-		this.format = format;
-	}
-
-	/**
-	 * @param until
-	 * @param resourceName
-	 */
-	public void addResourceInterval(Date until, String resourceName) {
-		Resource resource = themeResourceService.getThemeResource(resourceName, ThemeResourceType.ICON);
-		if (dateResourceMap == null) {
-			dateResourceMap = new TreeMap<Date, Resource>(new DteComparator());
-		}
-		dateResourceMap.put(until, resource);
-	}
-
-	public void addStyleInterval(Date until, String styleName) {
-		if (dateStyleMap == null) {
-			dateStyleMap = new TreeMap<Date, String>(new DteComparator());
-		}
-		dateStyleMap.put(until, styleName);
-	}
-
-	public void addResourceLookup(Date value, String resourceName) {
-		resourceDiscreteValues = true;
-		addResourceInterval(value, resourceName);
-	}
-
-	public void addStyleLookup(Date value, String styleName) {
-		styleDiscreteValues = true;
-		addResourceInterval(value, styleName);
-	}
-
-	public void addResourceLookup(String value, String resourceName) {
-		Resource resource = themeResourceService.getThemeResource(resourceName, ThemeResourceType.ICON);
-		if (stringResourceMap == null) {
-			stringResourceMap = new HashMap<String, Resource>();
-		}
-		stringResourceMap.put(value, resource);
-	}
-
-	public void addStyleLookup(String value, String styleName) {
-		if (stringStyleMap == null) {
-			stringStyleMap = new HashMap<String, String>();
-		}
-		stringStyleMap.put(value, styleName);
-	}
-
-	public void addResourceLookup(double value, String resourceName) {
-		resourceDiscreteValues = true;
-		addResourceInterval(value, resourceName);
-	}
-
-	public void addStyleLookup(double value, String styleName) {
-		styleDiscreteValues = true;
-		addResourceInterval(value, styleName);
-	}
-
-	public void addResourceInterval(double until, String resourceName) {
-		Resource resource = themeResourceService.getThemeResource(resourceName, ThemeResourceType.ICON);
-		if (doubleResourceMap == null) {
-			doubleResourceMap = new TreeMap<Double, Resource>(new DbleComparator());
-		}
-		doubleResourceMap.put(until, resource);
-	}
-
-	public void addStyleInterval(double until, String styleName) {
-		if (doubleStyleMap == null) {
-			doubleStyleMap = new TreeMap<Double, String>(new DbleComparator());
-		}
-		doubleStyleMap.put(until, styleName);
-	}
-
-	protected double getDoubleValue(Object value) throws DerivedOlapException {
-		if (value instanceof Double) {
-			return (Double) value;
-		} else if (value instanceof Float) {
-			return (Float) value;
-		} else if (value instanceof Long) {
-			return (Long) value;
-		} else if (value instanceof Integer) {
-			return (Integer) value;
-		} else if (value instanceof BigDecimal) {
-			return ((BigDecimal) value).doubleValue();
-		}
-		throw new DerivedOlapException("unsupported type conversion");
-	}
-
-	@Override
-	public Object generateCell(CustomTable source, Object itemId, Object columnId) {
-		Object val = null;
-		String alignment = "";
-		coordinate.set(0, rows.getOrdinal());
-		coordinate.set(1, ((DerivedPosition) itemId).getOrdinal());
-		try {
-			// when generating a cell from axis columns, memberColId is -1
-			if (memberColumnId == -1) {
-				val = cellSet.getCell(coordinate).getValue();
-			} else {
-				// when generating a cell from axis rows, memberColId is an index in the qualified member name of the cellSet
-				for (DerivedMember member : ((DerivedPosition) itemId).getMembers()) {
-					val = member.getUniqueName().split("\\]\\.\\[")[memberColumnId].replace("]", "");
-					break;
-				}
-			}
-		} catch (DerivedOlapException e) {
-			e.printStackTrace();
-		}
-		if (val == null) {
-			return null;
-		}
-		String caption = null;
-		if (val instanceof Double || val instanceof Float || val instanceof Long || val instanceof Integer || val instanceof BigDecimal) {
-			alignment = "v-align-right";
-			if (format == null) {
-				try {
-					caption = String.format("%f", getDoubleValue(val));
-				} catch (DerivedOlapException e) {
-					e.printStackTrace();
-					return null;
-				}
-			} else {
-				DecimalFormat df = null;
-				try {
-					df = new DecimalFormat(format, new DecimalFormatSymbols(locale));
-				} catch (IllegalArgumentException e) {
-					String msg = String.format("modeled formatter %s is invalid for decimal numbers: %s", format, e.getLocalizedMessage());
-					Notification.show(msg, Notification.Type.ERROR_MESSAGE);
-					return null;
-				}
-				try {
-					caption = df.format(getDoubleValue(val));
-				} catch (DerivedOlapException e) {
-					e.printStackTrace();
-					return null;
-				}
-			}
-		} else if (val instanceof String) {
-			alignment = "v-align-left";
-			if (format == null) {
-				caption = (String) val;
-			} else {
-				caption = String.format(format, (String) val);
-			}
-		} else if (val instanceof Date) {
-			alignment = "v-align-center";
-			if (format == null) {
-				caption = ((Date) val).toString();
-			} else {
-				// SimpleDateFormat df = null;
-				// try {
-				// df = new SimpleDateFormat(format, new DateFormatSymbols(locale));
-				// } catch (IllegalArgumentException e) {
-				// String msg = String.format("modeled formatter %s is invalid for date: %s", format, e.getLocalizedMessage());
-				// Notification.show(msg, Notification.Type.ERROR_MESSAGE);
-				// return null;
-				// }
-				// caption = df.format((Date)val);
-				if (format.equals("SHORTDATE")) {
-					dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, locale);
-				}
-				if (format.equals("MEDIUMDATE")) {
-					dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
-				}
-				if (format.equals("LONGDATE")) {
-					dateFormat = DateFormat.getDateInstance(DateFormat.LONG, locale);
-				}
-				if (format.equals("FULLDATE")) {
-					dateFormat = DateFormat.getDateInstance(DateFormat.FULL, locale);
-				}
-				if (format.equals("SHORTTIME")) {
-					dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT, locale);
-				}
-				if (format.equals("MEDIUMTIME")) {
-					dateFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM, locale);
-				}
-				if (format.equals("LONGTIME")) {
-					dateFormat = DateFormat.getTimeInstance(DateFormat.LONG, locale);
-				}
-				if (format.equals("FULLTIME")) {
-					dateFormat = DateFormat.getTimeInstance(DateFormat.FULL, locale);
-				}
-				if (format.equals("SHORTDATESHORTTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale);
-				}
-				if (format.equals("SHORTDATEMEDIUMTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, locale);
-				}
-				if (format.equals("SHORTDATELONGTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG, locale);
-				}
-				if (format.equals("SHORTDATEFULLTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL, locale);
-				}
-				if (format.equals("MEDIUMDATESHORTTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, locale);
-				}
-				if (format.equals("MEDIUMDATEMEDIUMTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, locale);
-				}
-				if (format.equals("MEDIUMDATELONGTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG, locale);
-				}
-				if (format.equals("MEDIUMDATEFULLTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.FULL, locale);
-				}
-				if (format.equals("LONGDATESHORTTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT, locale);
-				}
-				if (format.equals("LONGDATEMEDIUMTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.MEDIUM, locale);
-				}
-				if (format.equals("LONGDATELONGTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
-				}
-				if (format.equals("LONGDATEFULLTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.FULL, locale);
-				}
-				if (format.equals("FULLDATESHORTTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.SHORT, locale);
-				}
-				if (format.equals("FULLDATEMEDIUMTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.MEDIUM, locale);
-				}
-				if (format.equals("FULLDATELONGTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.LONG, locale);
-				}
-				if (format.equals("FULLDATEFULLTIME")) {
-					dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, locale);
-				}
-				caption = dateFormat.format((Date) val);
-			}
-		}
-		Label label = new Label(caption);
-		label.addStyleName(alignment);
-		if (memberColumnId != -1) {
-			label.addStyleName("row-header");
-		}
-		if (dateStyleMap != null && val instanceof Date) {
-			for (Date key : dateStyleMap.keySet()) {
-				if ((styleDiscreteValues && ((Date) val).equals(key)) || (!styleDiscreteValues && ((Date) val).before(key))) {
-					label.addStyleName(dateStyleMap.get(key));
-					break;
-				}
-			}
-		}
-		if (doubleStyleMap != null) {
-			double doubleValue = 0;
-			try {
-				doubleValue = getDoubleValue(val);
-			} catch (DerivedOlapException e) {
-				e.printStackTrace();
-			}
-			for (Double key : doubleStyleMap.keySet()) {
-				if ((styleDiscreteValues && doubleValue == key) || (!styleDiscreteValues && doubleValue <= key)) {
-					label.addStyleName(doubleStyleMap.get(key));
-					break;
-				}
-			}
-		}
-		if (stringStyleMap != null && val instanceof String) {
-			for (String key : stringStyleMap.keySet()) {
-				if (key.equals((String) val)) {
-					label.addStyleName(stringStyleMap.get(key));
-					break;
-				}
-			}
-		}
-		HorizontalLayout hl = null;
-		Embedded embedded = null;
-		if (dateResourceMap != null && val instanceof Date) {
-			hl = new HorizontalLayout();
-			embedded = new Embedded();
-			for (Date key : dateResourceMap.keySet()) {
-				if ((resourceDiscreteValues && ((Date) val).equals(key)) || (!resourceDiscreteValues && ((Date) val).before(key))) {
-					embedded.setSource(dateResourceMap.get(key));
-					break;
-				}
-			}
-		}
-		if (doubleResourceMap != null) {
-			double doubleValue = 0;
-			try {
-				doubleValue = getDoubleValue(val);
-			} catch (DerivedOlapException e) {
-				e.printStackTrace();
-			}
-			hl = new HorizontalLayout();
-			embedded = new Embedded();
-			for (Double key : doubleResourceMap.keySet()) {
-				if ((resourceDiscreteValues && doubleValue == key) || (!resourceDiscreteValues && doubleValue <= key)) {
-					embedded.setSource(doubleResourceMap.get(key));
-					break;
-				}
-			}
-		}
-		if (stringResourceMap != null && val instanceof String) {
-			hl = new HorizontalLayout();
-			embedded = new Embedded();
-			for (String key : stringResourceMap.keySet()) {
-				if (key.equals((String) val)) {
-					embedded.setSource(stringResourceMap.get(key));
-					break;
-				}
-			}
-		}
-		if (hl != null) {
-			hl.setSizeFull();
-			embedded.setWidth("16px");
-			if (iconFirst || hideLabel) {
-				hl.addComponent(embedded);
-				if (!hideLabel) {
-					hl.addComponent(label);
-					hl.setExpandRatio(label, 1.0f);
-				} else {
-					hl.setExpandRatio(embedded, 1.0f);
-				}
-			} else {
-				hl.addComponent(label);
-				hl.addComponent(embedded);
-				hl.setExpandRatio(label, 1.0f);
-			}
-			hl.setSpacing(true);
-			hl.setPrimaryStyleName("chartsview");
-			hl.addStyleName("v-tablecell-combined");
-			return hl;
-		} else {
-			return label;
-		}
-	}
-
-}