| /** |
| * |
| * 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; |
| } |
| } |
| |
| } |