package com.tibco.as.spacebar.ui.editor; import static org.eclipse.nebula.widgets.nattable.config.CellConfigAttributes.CELL_PAINTER; import static org.eclipse.nebula.widgets.nattable.grid.GridRegion.FILTER_ROW; import static org.eclipse.nebula.widgets.nattable.style.DisplayMode.NORMAL; import org.eclipse.nebula.widgets.nattable.config.AbstractRegistryConfiguration; import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry; import org.eclipse.nebula.widgets.nattable.data.convert.DefaultDisplayConverter; import org.eclipse.nebula.widgets.nattable.data.convert.DefaultDoubleDisplayConverter; import org.eclipse.nebula.widgets.nattable.data.convert.DefaultFloatDisplayConverter; import org.eclipse.nebula.widgets.nattable.data.convert.DefaultIntegerDisplayConverter; import org.eclipse.nebula.widgets.nattable.data.convert.DefaultLongDisplayConverter; import org.eclipse.nebula.widgets.nattable.data.convert.DefaultShortDisplayConverter; import org.eclipse.nebula.widgets.nattable.data.convert.IDisplayConverter; import org.eclipse.nebula.widgets.nattable.filterrow.FilterIconPainter; import org.eclipse.nebula.widgets.nattable.filterrow.FilterRowDataLayer; import org.eclipse.nebula.widgets.nattable.filterrow.FilterRowPainter; import org.eclipse.nebula.widgets.nattable.filterrow.TextMatchingMode; import org.eclipse.nebula.widgets.nattable.filterrow.config.FilterRowConfigAttributes; import org.eclipse.nebula.widgets.nattable.style.DisplayMode; import org.eclipse.nebula.widgets.nattable.util.GUIHelper; import com.tibco.as.convert.Attribute; import com.tibco.as.convert.Attributes; import com.tibco.as.convert.UnsupportedConversionException; import com.tibco.as.space.DateTime; import com.tibco.as.space.FieldDef; import com.tibco.as.space.FieldDef.FieldType; import com.tibco.as.spacebar.ui.SpaceBarPlugin; import com.tibco.as.spacebar.ui.preferences.Preferences; public class FilterRowConfiguration extends AbstractRegistryConfiguration { private FieldDef[] fieldDefs; public FilterRowConfiguration(FieldDef[] fieldDefs) { this.fieldDefs = fieldDefs; } @Override public void configureRegistry(IConfigRegistry configRegistry) { configRegistry.registerConfigAttribute( CELL_PAINTER, new FilterRowPainter(new FilterIconPainter(GUIHelper .getImage("filter"))), NORMAL, FILTER_ROW); for (int index = 0; index < fieldDefs.length; index++) { FieldDef field = fieldDefs[index]; if (isExpression(field)) { configRegistry.registerConfigAttribute( FilterRowConfigAttributes.FILTER_DISPLAY_CONVERTER, getConverter(field), DisplayMode.NORMAL, FilterRowDataLayer.FILTER_ROW_COLUMN_LABEL_PREFIX + index); configRegistry.registerConfigAttribute( FilterRowConfigAttributes.TEXT_MATCHING_MODE, TextMatchingMode.REGULAR_EXPRESSION, DisplayMode.NORMAL, FilterRowDataLayer.FILTER_ROW_COLUMN_LABEL_PREFIX + index); if (field.getType() == FieldType.DATETIME) { configRegistry.registerConfigAttribute( FilterRowConfigAttributes.TEXT_DELIMITER, "\"", DisplayMode.NORMAL, FilterRowDataLayer.FILTER_ROW_COLUMN_LABEL_PREFIX + index); } } } } private IDisplayConverter getConverter(FieldDef fieldDef) { switch (fieldDef.getType()) { case DATETIME: Attributes attributes = new Attributes(); attributes.put(Attribute.TIMEZONE, Preferences.getSpaceEditorTimeZone()); try { return FieldDisplayConverter.create(DateTime.class, "date", attributes); } catch (UnsupportedConversionException e) { SpaceBarPlugin.logException(e); } case DOUBLE: return new DefaultDoubleDisplayConverter(); case FLOAT: return new DefaultFloatDisplayConverter(); case INTEGER: return new DefaultIntegerDisplayConverter(); case LONG: return new DefaultLongDisplayConverter(); case SHORT: return new DefaultShortDisplayConverter(); default: return new DefaultDisplayConverter(); } } private boolean isExpression(FieldDef fieldDef) { switch (fieldDef.getType()) { case DATETIME: case DOUBLE: case FLOAT: case INTEGER: case LONG: case SHORT: return true; default: return false; } } }