Java tutorial
/******************************************************************************* * Copyright (c) 2004, 2007 Actuate Corporation. * 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: * Actuate Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.birt.report.designer.ui.dialogs; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.report.data.adapter.api.DataModelAdapterStatus; import org.eclipse.birt.report.data.adapter.api.DataModelAdapterUtil; import org.eclipse.birt.report.data.adapter.api.LinkedDataSetUtil; import org.eclipse.birt.report.designer.core.model.SessionHandleAdapter; import org.eclipse.birt.report.designer.data.ui.dataset.DataSetUIUtil; import org.eclipse.birt.report.designer.internal.ui.dialogs.DataColumnBindingDialog; import org.eclipse.birt.report.designer.internal.ui.dialogs.IBindingDialogHelper; import org.eclipse.birt.report.designer.internal.ui.extension.ExtendedDataModelUIAdapterHelper; import org.eclipse.birt.report.designer.internal.ui.util.DataUtil; import org.eclipse.birt.report.designer.internal.ui.util.ExceptionHandler; import org.eclipse.birt.report.designer.internal.ui.util.ExpressionUtility; import org.eclipse.birt.report.designer.internal.ui.util.IHelpContextIds; import org.eclipse.birt.report.designer.internal.ui.util.UIUtil; import org.eclipse.birt.report.designer.internal.ui.util.WidgetUtil; import org.eclipse.birt.report.designer.nls.Messages; import org.eclipse.birt.report.designer.ui.views.ElementAdapterManager; import org.eclipse.birt.report.designer.ui.views.attributes.providers.ChoiceSetFactory; import org.eclipse.birt.report.designer.ui.views.attributes.providers.LinkedDataSetAdapter; import org.eclipse.birt.report.designer.util.DEUtil; import org.eclipse.birt.report.model.api.CachedMetaDataHandle; import org.eclipse.birt.report.model.api.CommandStack; import org.eclipse.birt.report.model.api.ComputedColumnHandle; import org.eclipse.birt.report.model.api.DataItemHandle; import org.eclipse.birt.report.model.api.DataSetHandle; import org.eclipse.birt.report.model.api.DataSetParameterHandle; import org.eclipse.birt.report.model.api.DesignElementHandle; import org.eclipse.birt.report.model.api.GroupHandle; import org.eclipse.birt.report.model.api.ImageHandle; import org.eclipse.birt.report.model.api.ReportItemHandle; import org.eclipse.birt.report.model.api.ResultSetColumnHandle; import org.eclipse.birt.report.model.api.StructureFactory; import org.eclipse.birt.report.model.api.activity.SemanticException; import org.eclipse.birt.report.model.api.elements.structures.ComputedColumn; import org.eclipse.birt.report.model.api.metadata.IChoiceSet; import org.eclipse.birt.report.model.api.metadata.PropertyValueException; import org.eclipse.birt.report.model.api.util.StringUtil; import org.eclipse.birt.report.model.elements.interfaces.IReportItemModel; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; /** * The dialog to select and edit column bindings */ public class ColumnBindingDialog extends BaseDialog { public static class BindingInfo { private int bindingType; private Object bindingValue; public BindingInfo() { } public BindingInfo(int type, Object value) { this.bindingType = type; this.bindingValue = value; } public int getBindingType() { return bindingType; } public Object getBindingValue() { return bindingValue; } public void setBindingType(int bindingType) { this.bindingType = bindingType; } public void setBindingValue(Object bindingValue) { this.bindingValue = bindingValue; } } private static final String ALL = Messages.getString("ColumnBindingDialog.All");//$NON-NLS-1$ private static final String CHOICE_DATASET_FROM_CONTAINER = Messages .getString("ColumnBindingDialog.Choice.DatasetFromContainer");//$NON-NLS-1$ private static final String CHOICE_NONE = Messages.getString("ColumnBindingDialog.NONE");//$NON-NLS-1$ private static final String CHOICE_REPORTITEM_FROM_CONTAINER = Messages .getString("ColumnBindingDialog.Choice.ReportItemFromContainer");//$NON-NLS-1$ private static final String COLUMN_AGGREGATEON = Messages.getString("ColumnBindingDialog.Column.AggregateOn"); //$NON-NLS-1$ private static final String COLUMN_FILTER = Messages.getString("ColumnBindingDialog.Column.Filter"); //$NON-NLS-1$ private static final String COLUMN_FUNCTION = Messages.getString("ColumnBindingDialog.Column.Function"); //$NON-NLS-1$ private static final String COLUMN_DATATYPE = Messages.getString("ColumnBindingDialog.Column.DataType"); //$NON-NLS-1$ private static final String COLUMN_DISPLAYNAME = Messages.getString("ColumnBindingDialog.Column.DisplayName"); //$NON-NLS-1$ private static final String COLUMN_DISPLAYNAME_ID = Messages .getString("ColumnBindingDialog.Column.DisplayNameID"); //$NON-NLS-1$ private static final String COLUMN_EXPRESSION = Messages.getString("ColumnBindingDialog.Column.Expression"); //$NON-NLS-1$ // private static final String BUTTON_GENERATE = Messages.getString( // "ColumnBindingDialog.Button.Generate" ); //$NON-NLS-1$ private static final String COLUMN_NAME = Messages.getString("ColumnBindingDialog.Column.Name"); //$NON-NLS-1$ private static final IChoiceSet DATA_TYPE_CHOICE_SET = DEUtil.getMetaDataDictionary() .getStructure(ComputedColumn.COMPUTED_COLUMN_STRUCT).getMember(ComputedColumn.DATA_TYPE_MEMBER) .getAllowedChoices(); public static final String DEFAULT_DLG_TITLE = Messages.getString("ColumnBindingDialog.DialogTitle"); //$NON-NLS-1$ private static final String dummyChoice = "dummy"; //$NON-NLS-1$ private static final String INPUT_PROPMT = Messages.getString("ColumnBindingDialog.InputPrompt"); //$NON-NLS-1$ private static final String LABEL_COLUMN_BINDINGS = Messages.getString("ColumnBindingDialog.Label.DataSet"); //$NON-NLS-1$ private static final String MSG_ADD = Messages.getString("ColumnBindingDialog.Text.Add"); //$NON-NLS-1$ private static final String MSG_DELETE = Messages.getString("ColumnBindingDialog.Text.Del"); //$NON-NLS-1$ private static final String MSG_REFRESH = Messages.getString("ColumnBindingDialog.Text.Refresh"); //$NON-NLS-1$ private static final String MSG_ADDAGGREGATEON = Messages.getString("ColumnBindingDialog.Text.AddAggr"); //$NON-NLS-1$ private static final String MSG_EDIT = Messages.getString("ColumnBindingDialog.Text.Edit"); //$NON-NLS-1$ private static final String NONE_AGGREGATEON = Messages.getString("ColumnBindingDialog.AGGREGATEON.NONE");//$NON-NLS-1$ private static final String WARN_COLUMN_BINDINGS = Messages.getString("ColumnBingingDialog.Label.Warn"); //$NON-NLS-1$ // private Button generateButton; protected TableViewer bindingTable; protected Button btnAdd; // private List bindingList; protected Button btnDel; protected Button btnEdit; private boolean canAggregate = false; // true if the binding column can be changed, or false if not. private boolean canSelect = false; private Composite composite; private IStructuredContentProvider contentProvider = new IStructuredContentProvider() { public void dispose() { } public Object[] getElements(Object inputElement) { List elementsList = getBindingList((DesignElementHandle) inputElement); Object[] arrays = elementsList.toArray(); Arrays.sort(arrays, new BindingComparator()); return arrays; } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }; private class BindingComparator implements Comparator { public int compare(Object o1, Object o2) { ComputedColumnHandle binding1 = (ComputedColumnHandle) o1; ComputedColumnHandle binding2 = (ComputedColumnHandle) o2; String columnText1 = labelProvider.getColumnText(binding1, sortingColumnIndex); String columnText2 = labelProvider.getColumnText(binding2, sortingColumnIndex); int result = (columnText1 == null ? "" : columnText1) .compareTo((columnText2 == null ? "" : columnText2)); if (sortDirection == SWT.UP) return result; else return 0 - result; } } protected int getOriginalIndex(int pos) { List children = new ArrayList(); for (Iterator iter = getBindingList((DesignElementHandle) inputElement).iterator(); iter.hasNext();) { children.add(iter.next()); } Object[] arrays = children.toArray(); Arrays.sort(arrays, new BindingComparator()); return children.indexOf(Arrays.asList(arrays).get(pos)); } protected int getShowIndex(int pos) { List children = new ArrayList(); for (Iterator iter = getBindingList((DesignElementHandle) inputElement).iterator(); iter.hasNext();) { children.add(iter.next()); } Object[] arrays = children.toArray(); Arrays.sort(arrays, new BindingComparator()); return Arrays.asList(arrays).indexOf(children.get(pos)); } private Combo datasetCombo; private Button datasetRadio; private transient boolean enableAutoCommit = false; protected ExpressionProvider expressionProvider; private List groupList = Collections.EMPTY_LIST; private String[] groups; protected ReportItemHandle inputElement; private boolean isDataSetVisible; private ITableLabelProvider labelProvider = new ITableLabelProvider() { public void addListener(ILabelProviderListener listener) { } public void dispose() { } public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { if (element == dummyChoice) { if (columnIndex == 1) { return INPUT_PROPMT; } return ""; //$NON-NLS-1$ } ComputedColumnHandle handle = ((ComputedColumnHandle) element); String text = null; switch (columnIndex) { case 1: text = handle.getName(); break; case 2: text = handle.getDisplayNameID(); break; case 3: text = handle.getDisplayName(); break; case 4: text = ChoiceSetFactory.getDisplayNameFromChoiceSet(handle.getDataType(), DATA_TYPE_CHOICE_SET); break; case 5: text = org.eclipse.birt.report.designer.data.ui.util.DataUtil.getAggregationExpression(handle); break; case 6: try { String function = handle.getAggregateFunction(); if (function != null) { if (org.eclipse.birt.report.designer.data.ui.util.DataUtil.getAggregationManager() .getAggregation(function) != null) text = org.eclipse.birt.report.designer.data.ui.util.DataUtil.getAggregationManager() .getAggregation(function).getDisplayName(); } } catch (BirtException e) { ExceptionHandler.handle(e); } break; case 7: text = handle.getFilterExpression(); break; case 8: String value = DEUtil.getAggregateOn(handle); if (value == null) { if (handle.getAggregateFunction() != null) { text = ALL; } else text = NONE_AGGREGATEON; } else { text = value; } break; } if (text == null) { text = ""; //$NON-NLS-1$ } return text; } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { } }; private String NullDatasetChoice = null; private String NullReportItemChoice = null; private Combo reportItemCombo; private Button reportItemRadio; private String selectedColumnName = null; private int selectIndex; private CLabel warnLabel; private boolean filterSelf; public ColumnBindingDialog(ReportItemHandle input) { super(DEFAULT_DLG_TITLE); setInput(input); } public ColumnBindingDialog(ReportItemHandle input, boolean canSelect) { super(DEFAULT_DLG_TITLE); setInput(input); this.canSelect = canSelect; } public ColumnBindingDialog(ReportItemHandle input, Shell parent, boolean canSelect) { this(input, parent, DEFAULT_DLG_TITLE, canSelect, true); } public ColumnBindingDialog(ReportItemHandle input, Shell parent, boolean canSelect, boolean canAggregate) { this(input, parent, DEFAULT_DLG_TITLE, canSelect, canAggregate); } public ColumnBindingDialog(ReportItemHandle input, Shell parent, String title, boolean canSelect, boolean canAggregate) { super(parent, title); setInput(input); this.canSelect = canSelect; this.canAggregate = canAggregate; } public ColumnBindingDialog(ReportItemHandle input, String title) { super(title); setInput(input); } public ColumnBindingDialog(ReportItemHandle input, String title, boolean canAggregate) { super(title); setInput(input); this.canAggregate = canAggregate; } /** * @param input * @param title * @param canAggregate * @param canSelect * @param filterSelf * don't show input item handle's binding */ public ColumnBindingDialog(ReportItemHandle input, String title, boolean canAggregate, boolean canSelect, boolean filterSelf) { super(title); setInput(input); this.canSelect = canSelect; this.canAggregate = canAggregate; this.filterSelf = filterSelf; } protected void addBinding(ComputedColumn column) { try { DEUtil.addColumn(DEUtil.getBindingHolder(inputElement), column, false); } catch (SemanticException e) { ExceptionHandler.handle(e); } } private void generateOutputParmsBindings(DataSetHandle datasetHandle) { List<DataSetParameterHandle> outputParams = new ArrayList<DataSetParameterHandle>(); for (Iterator iter = datasetHandle.parametersIterator(); iter.hasNext();) { Object obj = iter.next(); if ((obj instanceof DataSetParameterHandle) && ((DataSetParameterHandle) obj).isOutput() == true) { outputParams.add((DataSetParameterHandle) obj); } } int ret = -1; if (outputParams.size() > 0) { MessageDialog prefDialog = new MessageDialog(UIUtil.getDefaultShell(), Messages.getString("dataBinding.title.generateOutputParam"), //$NON-NLS-1$ null, Messages.getString("dataBinding.msg.generateOutputParam"), //$NON-NLS-1$ MessageDialog.QUESTION, new String[] { Messages.getString("AttributeView.dialg.Message.Yes"), //$NON-NLS-1$ Messages.getString("AttributeView.dialg.Message.No") }, //$NON-NLS-1$ 0);//$NON-NLS-1$ ret = prefDialog.open(); } if (ret == 0) for (int i = 0; i < outputParams.size(); i++) { DataSetParameterHandle param = outputParams.get(i); ComputedColumn bindingColumn = StructureFactory.newComputedColumn(inputElement, param.getName()); bindingColumn.setDataType(param.getDataType()); ExpressionUtility.setBindingColumnExpression(param, bindingColumn, true); try { inputElement.addColumnBinding(bindingColumn, false); } catch (SemanticException e) { ExceptionHandler.handle(e); } continue; } } /** * Adds buttons in Button area. * * @param cmp * parent composite * @param table * the Table widget affected by Buttons * @return the number of added buttons */ protected int addButtons(Composite cmp, final Table table) { btnRefresh = new Button(cmp, SWT.PUSH); btnRefresh.setText(MSG_REFRESH); GridData data = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); data.widthHint = Math.max(60, btnRefresh.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); btnRefresh.setLayoutData(data); btnRefresh.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { if (inputElement != null) { DataSetHandle datasetHandle = inputElement.getDataSet(); if (datasetHandle != null) { try { CachedMetaDataHandle cmdh = DataSetUIUtil.getCachedMetaDataHandle(datasetHandle); for (Iterator iter = cmdh.getResultSet().iterator(); iter.hasNext();) { ResultSetColumnHandle element = (ResultSetColumnHandle) iter.next(); ComputedColumn bindingColumn = StructureFactory.newComputedColumn(inputElement, element.getColumnName()); bindingColumn.setDataType(element.getDataType()); ExpressionUtility.setBindingColumnExpression(element, bindingColumn); inputElement.addColumnBinding(bindingColumn, false); } } catch (SemanticException e) { ExceptionHandler.handle(e); } refreshBindingTable(); updateButtons(); } } } }); return 1; } private void commit() { if (isEnableAutoCommit()) { getActionStack().commit(); } } protected Control createDialogArea(Composite parent) { UIUtil.bindHelp(parent, IHelpContextIds.COLUMNBINDING_DIALOG_ID); Composite parentComposite = (Composite) super.createDialogArea(parent); if (this.canSelect) { composite = new Composite(parentComposite, SWT.NONE); composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); composite.setLayout(UIUtil.createGridLayoutWithoutMargin(2, false)); warnLabel = new CLabel(composite, SWT.NONE); warnLabel.setImage( PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_WARN_TSK)); warnLabel.setText(WARN_COLUMN_BINDINGS); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; warnLabel.setLayoutData(gd); datasetRadio = new Button(composite, SWT.RADIO); datasetRadio.setText(LABEL_COLUMN_BINDINGS); datasetRadio.setLayoutData(new GridData(GridData.BEGINNING)); datasetRadio.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { refreshBinding(); if (datasetRadio.getSelection() && inputElement .getDataBindingType() == ReportItemHandle.DATABINDING_TYPE_REPORT_ITEM_REF && (DEUtil.getBindingHolder(inputElement, true) == null || DEUtil .getBindingHolder(inputElement, true) .getDataBindingType() != ReportItemHandle.DATABINDING_TYPE_REPORT_ITEM_REF)) saveBinding(); } }); datasetCombo = new Combo(composite, SWT.READ_ONLY | SWT.BORDER); datasetCombo.setBackground( PlatformUI.getWorkbench().getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND)); datasetCombo.setVisibleItemCount(30); String[] dataSets = ChoiceSetFactory.getDataSets(); String[] newList = new String[dataSets.length + 1]; newList[0] = NullDatasetChoice; System.arraycopy(dataSets, 0, newList, 1, dataSets.length); datasetCombo.setItems(newList); String dataSetName = getDataSetName(); datasetCombo.deselectAll(); if (dataSetName != null) { datasetCombo.setText(dataSetName); } else { datasetCombo.select(0); } gd = new GridData(); gd.widthHint = 250; datasetCombo.setLayoutData(gd); datasetCombo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { saveBinding(); } }); reportItemRadio = new Button(composite, SWT.RADIO); reportItemRadio.setText(Messages.getString("BindingPage.ReportItem.Label")); //$NON-NLS-1$ reportItemRadio.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { refreshBinding(); if (reportItemRadio.getSelection() && inputElement.getDataBindingType() == ReportItemHandle.DATABINDING_TYPE_DATA && (DEUtil.getBindingHolder(inputElement, true) == null || DEUtil .getBindingHolder(inputElement, true) .getDataBindingType() == ReportItemHandle.DATABINDING_TYPE_REPORT_ITEM_REF)) saveBinding(); } }); reportItemCombo = new Combo(composite, SWT.READ_ONLY | SWT.BORDER); reportItemCombo.setBackground( PlatformUI.getWorkbench().getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND)); reportItemCombo.setVisibleItemCount(30); gd = new GridData(); gd.widthHint = 250; reportItemCombo.setLayoutData(gd); reportItemCombo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { saveBinding(); } }); } Composite contentComposite = new Composite(parentComposite, SWT.NONE); contentComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); contentComposite.setLayout(UIUtil.createGridLayoutWithoutMargin(2, false)); /** * Binding table */ final Table table = new Table(contentComposite, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER | (canSelect ? SWT.CHECK : 0)); GridData gd = new GridData(GridData.FILL_BOTH); gd.heightHint = 200; gd.verticalSpan = 5; table.setLayoutData(gd); table.setLinesVisible(true); table.setHeaderVisible(true); Listener sortListener = new Listener() { public void handleEvent(Event e) { int modelPos = -1; if (table.getSelectionIndex() > -1) { modelPos = getOriginalIndex(table.getSelectionIndex()); } // determine new sort column and direction TableColumn sortColumn = table.getSortColumn(); TableColumn currentColumn = (TableColumn) e.widget; int dir = table.getSortDirection(); if (sortColumn == currentColumn) { dir = dir == SWT.UP ? SWT.DOWN : SWT.UP; } else { table.setSortColumn(currentColumn); dir = SWT.UP; for (int i = 0; i < table.getColumnCount(); i++) { if (currentColumn == table.getColumn(i)) { setSortingColumnIndex(i); break; } } } // update data displayed in table setSortDirection(dir); table.setSortDirection(dir); refreshBindingTable(); if (modelPos > -1) { table.setSelection(getShowIndex(modelPos)); } } }; // table.addKeyListener( new KeyAdapter( ) { // // /** // * @see // org.eclipse.swt.events.KeyAdapter#keyReleased(org.eclipse.swt.events. // KeyEvent) // */ // public void keyReleased( KeyEvent e ) // { // // If Delete pressed, delete the selected row // if ( e.keyCode == SWT.DEL ) // { // IStructuredSelection selection = (IStructuredSelection) // bindingTable.getSelection( ); // if ( selection.getFirstElement( ) instanceof ComputedColumnHandle ) // { // deleteRow( (ComputedColumnHandle) selection.getFirstElement( ) ); // } // } // } // } ); table.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.keyCode == SWT.DEL && (DEUtil.getBindingHolder(inputElement) .getDataBindingType() == ReportItemHandle.DATABINDING_TYPE_DATA || (DEUtil.getBindingHolder(inputElement) .getDataBindingType() == ReportItemHandle.DATABINDING_TYPE_NONE && (DEUtil.getBindingHolder(inputElement, true) == null || DEUtil .getBindingHolder(inputElement, true) .getDataBindingType() != ReportItemHandle.DATABINDING_TYPE_REPORT_ITEM_REF)))) { int itemCount = table.getItemCount(); if (selectIndex == itemCount) { return; } if (selectIndex == itemCount - 1) { selectIndex--; } try { handleDelEvent(); } catch (Exception e1) { WidgetUtil.processError(getShell(), e1); } refreshBindingTable(); } } }); table.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { selectIndex = table.getSelectionIndex(); updateButtons(); } }); table.addMouseListener(new MouseAdapter() { /** * @param e */ public void mouseDoubleClick(MouseEvent e) { editSelectedBinding(table.getSelectionIndex()); refreshBindingTable(); } }); String[] columns = null; int[] columnWidth = null; groups = new String[groupList.size() + 1]; groups[0] = ALL; for (int i = 0; i < groupList.size(); i++) { groups[i + 1] = ((GroupHandle) groupList.get(i)).getName(); } if (canAggregate) { columns = new String[] { null, COLUMN_NAME, COLUMN_DISPLAYNAME_ID, COLUMN_DISPLAYNAME, COLUMN_DATATYPE, COLUMN_EXPRESSION, COLUMN_FUNCTION, COLUMN_FILTER, COLUMN_AGGREGATEON }; columnWidth = new int[] { canSelect ? 25 : 20, 100, 100, 100, 70, 100, 100, 100, 100 }; } else { columns = new String[] { null, COLUMN_NAME, COLUMN_DISPLAYNAME_ID, COLUMN_DISPLAYNAME, COLUMN_DATATYPE, COLUMN_EXPRESSION }; columnWidth = new int[] { canSelect ? 25 : 20, 120, 120, 120, 70, 120 }; } for (int i = 0; i < columns.length; i++) { TableColumn column = new TableColumn(table, SWT.LEFT); if (i == 0) table.setSortColumn(column); column.setResizable(columns[i] != null); if (columns[i] != null) { column.setText(columns[i]); } column.setWidth(columnWidth[i]); column.addListener(SWT.Selection, sortListener); } table.setSortDirection(SWT.UP); if (canSelect) { bindingTable = new CheckboxTableViewer(table); ((CheckboxTableViewer) bindingTable).addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { if (event.getElement() instanceof ComputedColumnHandle) { ComputedColumnHandle handle = (ComputedColumnHandle) event.getElement(); if (handle.getName().equals(selectedColumnName)) { selectedColumnName = null; } else { selectedColumnName = handle.getName(); } updateSelection(); updateButtons(); } else { ((CheckboxTableViewer) bindingTable).setChecked(dummyChoice, false); } } }); } else { bindingTable = new TableViewer(table); } bindingTable.setColumnProperties(columns); bindingTable.setContentProvider(contentProvider); bindingTable.setLabelProvider(labelProvider); // bindingTable.setCellModifier( cellModifier ); bindingTable.setInput(inputElement); bindingTable.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { updateButtons(); } }); btnAdd = new Button(contentComposite, SWT.PUSH); btnAdd.setText(MSG_ADD); GridData data = new GridData(); data.widthHint = Math.max(60, btnAdd.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); btnAdd.setLayoutData(data); btnAdd.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { handleAddEvent(); refreshBindingTable(); if (table.getItemCount() > 0) selectIndex = getShowIndex(table.getItemCount() - 1); updateButtons(); } }); if (canAggregate) { btnAddAggr = new Button(contentComposite, SWT.PUSH); btnAddAggr.setText(MSG_ADDAGGREGATEON); //$NON-NLS-1$ data = new GridData(); data.widthHint = Math.max(60, btnAddAggr.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); btnAddAggr.setLayoutData(data); btnAddAggr.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { DataColumnBindingDialog dialog = new DataColumnBindingDialog(true); dialog.setInput(inputElement); dialog.setExpressionProvider(expressionProvider); dialog.setAggreate(true); if (dialog.open() == Dialog.OK) { if (bindingTable != null) { refreshBindingTable(); bindingTable.getTable().setSelection(bindingTable.getTable().getItemCount() - 1); } } refreshBindingTable(); if (table.getItemCount() > 0) setSelectionInTable(table.getItemCount() - 1); updateButtons(); } }); } btnEdit = new Button(contentComposite, SWT.PUSH); btnEdit.setText(MSG_EDIT); data = new GridData(); data.widthHint = Math.max(60, btnEdit.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); btnEdit.setLayoutData(data); btnEdit.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { handleEditEvent(); refreshBindingTable(); } }); btnDel = new Button(contentComposite, SWT.PUSH); btnDel.setText(MSG_DELETE); data = new GridData(); data.widthHint = Math.max(60, btnDel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); btnDel.setLayoutData(data); btnDel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (bindingTable.isCellEditorActive()) { bindingTable.cancelEditing(); } int pos = bindingTable.getTable().getSelectionIndex(); if (pos == -1) { bindingTable.getTable().setFocus(); return; } selectIndex = pos; int itemCount = bindingTable.getTable().getItemCount(); if (selectIndex == itemCount - 1) { selectIndex--; } try { handleDelEvent(); } catch (Exception e1) { WidgetUtil.processError(getShell(), e1); } refreshBindingTable(); } }); // initTableCellColor( ); // Add custom buttons int buttonsNumber = addButtons(contentComposite, table); if (buttonsNumber > 0) { // Adjust UI layout if (table.getLayoutData() instanceof GridData) { ((GridData) table.getLayoutData()).verticalSpan += buttonsNumber; } } if (!isDataSetVisible) { if (composite != null) ((GridData) composite.getLayoutData()).exclude = true; } return parentComposite; } protected void deleteRow(ComputedColumnHandle handle) { try { if (handle.getName().equals(selectedColumnName)) { selectedColumnName = null; } handle.drop(); } catch (PropertyValueException e) { ExceptionHandler.handle(e); } } private void generateBindingColumns() throws SemanticException { List columnList = DataUtil.generateComputedColumns(inputElement); if (columnList.size() > 0) { for (Iterator iter = columnList.iterator(); iter.hasNext();) { addBinding((ComputedColumn) iter.next()); } } if (inputElement != null && inputElement.getDataSet() != null) generateOutputParmsBindings(inputElement.getDataSet()); refreshBindingTable(); } /** * Gets the DE CommandStack instance * * @return CommandStack instance */ private CommandStack getActionStack() { return SessionHandleAdapter.getInstance().getCommandStack(); } public String[] getAvailableDatasetItems() { String[] dataSets = ChoiceSetFactory.getDataSets(); String[] newList = new String[dataSets.length + 1]; newList[0] = NullDatasetChoice; System.arraycopy(dataSets, 0, newList, 1, dataSets.length); return newList; } protected List getBindingList(DesignElementHandle inputElement) { List elementsList = DEUtil.getVisiableColumnBindingsList(inputElement); if (this.filterSelf) { Iterator iterator = this.inputElement.columnBindingsIterator(); ; while (iterator.hasNext()) { Object obj = iterator.next(); System.out.println(obj); elementsList.remove(obj); } } return elementsList; } private String getColumnName(String expression) { List columnList = DEUtil.getVisiableColumnBindingsList(inputElement); for (Iterator iter = columnList.iterator(); iter.hasNext();) { ComputedColumnHandle cachedColumn = (ComputedColumnHandle) iter.next(); String columnName = cachedColumn.getName(); if (LinkedDataSetUtil.bindToLinkedDataSet(inputElement) ? DEUtil.getDataExpression(columnName).equals(expression) : DEUtil.getColumnExpression(columnName).equals(expression)) { return columnName; } } return null; } private String getDataSetName() { if (inputElement.getDataSet() == null) { return null; } String dataSetName = inputElement.getDataSet().getQualifiedName(); if (StringUtil.isBlank(dataSetName)) { dataSetName = null; } return dataSetName; } protected Map<String, ReportItemHandle> referMap = new HashMap<String, ReportItemHandle>(); private Button btnAddAggr; private Button btnRefresh; protected String[] getReferences() { List referenceList = inputElement.getAvailableDataSetBindingReferenceList(); String[] references = new String[referenceList.size() + 1]; references[0] = NullReportItemChoice; referMap.put(references[0], null); int j = 0; for (int i = 0; i < referenceList.size(); i++) { ReportItemHandle item = ((ReportItemHandle) referenceList.get(i)); if (item.getName() != null) { references[++j] = item.getQualifiedName(); referMap.put(references[j], item); } } int tmp = j + 1; Arrays.sort(references, 1, tmp); for (int i = 0; i < referenceList.size(); i++) { ReportItemHandle item = ((ReportItemHandle) referenceList.get(i)); if (item.getName() == null) { references[++j] = item.getElement().getDefn().getDisplayName() + " (ID " //$NON-NLS-1$ + item.getID() + ") - " //$NON-NLS-1$ + Messages.getString("BindingPage.ReportItem.NoName"); //$NON-NLS-1$ referMap.put(references[j], item); } } Arrays.sort(references, tmp, referenceList.size() + 1); return references; } private ComputedColumnHandle getSelectColumnHandle() { if (selectedColumnName != null) { for (int i = 0; i < bindingTable.getTable().getItemCount(); i++) { ComputedColumnHandle handle = (ComputedColumnHandle) bindingTable.getElementAt(i); if (selectedColumnName.equals(handle.getName())) { return handle; } } } return null; } protected void handleAddEvent() { DataColumnBindingDialog dialog = new DataColumnBindingDialog(true); dialog.setInput(inputElement); dialog.setExpressionProvider(expressionProvider); if (dialog.open() == Dialog.OK) { if (bindingTable != null) { refreshBindingTable(); } } } protected void handleDelEvent() { if (!btnDel.isEnabled()) return; int pos = bindingTable.getTable().getSelectionIndex(); pos = getOriginalIndex(pos); if (pos > -1) { try { ComputedColumnHandle handle = (ComputedColumnHandle) (DEUtil.getBindingHolder(inputElement)) .getColumnBindings().getAt(pos); deleteRow(handle); } catch (Exception e1) { ExceptionHandler.handle(e1); } } } protected void handleEditEvent() { int pos = bindingTable.getTable().getSelectionIndex(); editSelectedBinding(pos); } /** * Edits the selected binding of table. * * @param bindingIndex */ private void editSelectedBinding(int bindingIndex) { if (!btnEdit.isEnabled()) return; ComputedColumnHandle bindingHandle = null; bindingIndex = getOriginalIndex(bindingIndex); if (bindingIndex > -1) { bindingHandle = (ComputedColumnHandle) (DEUtil.getBindingHolder(inputElement)).getColumnBindings() .getAt(bindingIndex); } if (bindingHandle == null) return; String bindingName = bindingHandle.getName(); DataColumnBindingDialog dialog = new DataColumnBindingDialog(false); setDialogInput(dialog, bindingHandle); dialog.setExpressionProvider(expressionProvider); if (dialog.open() == Dialog.OK) { if (bindingTable != null) bindingTable.getTable().setSelection(bindingIndex); if (selectedColumnName != null && selectedColumnName.equals(bindingName)) selectedColumnName = bindingHandle.getName(); } selectIndex = getShowIndex(bindingIndex); } protected void setDialogInput(DataColumnBindingDialog dialog, ComputedColumnHandle bindingHandle) { if (dialog != null) { dialog.setInput(inputElement, bindingHandle); } } protected boolean initDialog() { if (canSelect) { if (inputElement instanceof DataItemHandle) { selectedColumnName = ((DataItemHandle) inputElement).getResultSetColumn(); updateSelection(); } else if (inputElement instanceof ImageHandle) { selectedColumnName = getColumnName(((ImageHandle) inputElement).getValueExpression()); updateSelection(); } } load(); return super.initDialog(); } @Override protected boolean needRememberLastSize() { return true; } /** * @return Returns the enableAutoCommit. */ public boolean isEnableAutoCommit() { return enableAutoCommit; } public void load() { if (canSelect) { datasetRadio.setEnabled(true); reportItemRadio.setEnabled(true); BindingInfo info = (BindingInfo) loadValue(); if (info != null) { refreshBindingInfo(info); } } refreshBindingTable(); } public Object loadValue() { if (canSelect) { int type = inputElement.getDataBindingType(); Object value; if (type == ReportItemHandle.DATABINDING_TYPE_NONE) type = DEUtil.getBindingHolder(inputElement).getDataBindingType(); switch (type) { case ReportItemHandle.DATABINDING_TYPE_DATA: DataSetHandle dataset = inputElement.getDataSet(); if (dataset == null) value = NullDatasetChoice; else value = dataset.getQualifiedName(); break; case ReportItemHandle.DATABINDING_TYPE_REPORT_ITEM_REF: ReportItemHandle reference = inputElement.getDataBindingReference(); if (reference == null) value = NullReportItemChoice; else value = reference.getQualifiedName(); break; default: value = NullDatasetChoice; } BindingInfo info = new BindingInfo(type, value); return info; } return null; } protected void okPressed() { if (canSelect) { setResult(selectedColumnName); if (inputElement instanceof DataItemHandle) { try { ((DataItemHandle) inputElement).setResultSetColumn(selectedColumnName); } catch (SemanticException e) { ExceptionHandler.handle(e); } } } if (getSelectColumnHandle() != null && ExtendedDataModelUIAdapterHelper.isBoundToExtendedData(inputElement)) { DataModelAdapterStatus status = DataModelAdapterUtil.validateRelativeTimePeriod(inputElement, getSelectColumnHandle()); if (status.getStatus() == DataModelAdapterStatus.Status.FAIL) { MessageDialog.openError(UIUtil.getDefaultShell(), null, status.getMessage()); return; } } super.okPressed(); } private void refreshBinding() { if (datasetRadio.getSelection()) { datasetRadio.setSelection(true); datasetCombo.setEnabled(true); reportItemRadio.setSelection(false); reportItemCombo.setEnabled(false); if (datasetCombo.getSelectionIndex() == -1) { datasetCombo.setItems(getAvailableDatasetItems()); datasetCombo.select(0); } } else { datasetRadio.setSelection(false); datasetCombo.setEnabled(false); reportItemRadio.setSelection(true); reportItemCombo.setEnabled(true); if (reportItemCombo.getSelectionIndex() == -1) { reportItemCombo.setItems(getReferences()); reportItemCombo.select(0); } } } private BindingInfo oldInfo; private void refreshBindingInfo(BindingInfo info) { if (canSelect) { int type = info.getBindingType(); Object value = info.getBindingValue(); datasetCombo.setItems(getAvailableDatasetItems()); reportItemCombo.setItems(getReferences()); if (type == ReportItemHandle.DATABINDING_TYPE_NONE) type = DEUtil.getBindingHolder(inputElement).getDataBindingType(); switch (type) { case ReportItemHandle.DATABINDING_TYPE_NONE: if (oldInfo != null) { if (oldInfo.getBindingType() == ReportItemHandle.DATABINDING_TYPE_DATA) { selectDatasetType(value); } else if (oldInfo.getBindingType() == ReportItemHandle.DATABINDING_TYPE_REPORT_ITEM_REF) { selectReferenceType(value); } break; } case ReportItemHandle.DATABINDING_TYPE_DATA: selectDatasetType(value); break; case ReportItemHandle.DATABINDING_TYPE_REPORT_ITEM_REF: selectReferenceType(value); } } } private void selectReferenceType(Object value) { datasetRadio.setSelection(false); datasetCombo.setEnabled(false); reportItemRadio.setSelection(true); reportItemCombo.setEnabled(true); reportItemCombo.setText(value.toString()); } private void selectDatasetType(Object value) { datasetRadio.setSelection(true); datasetCombo.setEnabled(true); datasetCombo.setText(value.toString()); reportItemRadio.setSelection(false); reportItemCombo.setEnabled(false); } protected void refreshBindingTable() { bindingTable.refresh(); if (canSelect) { updateSelection(); } updateButtons(); } private void resetDataSetReference(Object value, boolean clearHistory) { try { startTrans(""); //$NON-NLS-1$ inputElement.setDataBindingReference(null); DataSetHandle dataSet = null; if (value != null) { dataSet = SessionHandleAdapter.getInstance().getReportDesignHandle().findDataSet(value.toString()); } if (inputElement.getDataBindingType() == ReportItemHandle.DATABINDING_TYPE_REPORT_ITEM_REF) { inputElement.setDataBindingReference(null); } boolean isExtendedDataModel = false; if (dataSet == null && value != null) { inputElement.setDataSet(null); isExtendedDataModel = new LinkedDataSetAdapter().setLinkedDataModel(inputElement, value.toString()); } else { new LinkedDataSetAdapter().setLinkedDataModel(inputElement, null); inputElement.setDataSet(dataSet); } if (clearHistory) { inputElement.getColumnBindings().clearValue(); inputElement.getPropertyHandle(ReportItemHandle.PARAM_BINDINGS_PROP).clearValue(); } if (!isExtendedDataModel) { generateBindingColumns(); } selectedColumnName = null; commit(); } catch (SemanticException e) { rollback(); ExceptionHandler.handle(e); } load(); } private void resetReference(Object value) { if (value == null && inputElement.getDataBindingType() == ReportItemHandle.DATABINDING_TYPE_DATA) { resetDataSetReference(null, true); } else { try { startTrans(Messages.getString("DataColumBindingDialog.stackMsg.resetReference")); //$NON-NLS-1$ ReportItemHandle element = null; if (value != null) { element = (ReportItemHandle) SessionHandleAdapter.getInstance().getReportDesignHandle() .findElement(value.toString()); } inputElement.setDataBindingReference(element); selectedColumnName = null; commit(); } catch (SemanticException e) { rollback(); ExceptionHandler.handle(e); } load(); } } private void rollback() { if (isEnableAutoCommit()) { getActionStack().rollback(); } } public void save(Object saveValue) throws SemanticException { if (saveValue instanceof BindingInfo) { BindingInfo info = (BindingInfo) saveValue; int type = info.getBindingType(); String value = info.getBindingValue().toString(); switch (type) { case ReportItemHandle.DATABINDING_TYPE_DATA: if (value.equals(NullDatasetChoice)) { value = null; } int ret = 0; if (!NullDatasetChoice.equals(((BindingInfo) loadValue()).getBindingValue().toString()) || inputElement.getColumnBindings().iterator().hasNext()) { MessageDialog prefDialog = new MessageDialog(UIUtil.getDefaultShell(), Messages.getString("dataBinding.title.changeDataSet"), //$NON-NLS-1$ null, Messages.getString("dataBinding.message.changeDataSet"), //$NON-NLS-1$ MessageDialog.QUESTION, new String[] { Messages.getString("AttributeView.dialg.Message.Yes"), //$NON-NLS-1$ Messages.getString("AttributeView.dialg.Message.No"), //$NON-NLS-1$ Messages.getString("AttributeView.dialg.Message.Cancel") }, //$NON-NLS-1$ 0); ret = prefDialog.open(); } switch (ret) { // Clear binding info case 0: resetDataSetReference(value, true); break; // Doesn't clear binding info case 1: resetDataSetReference(value, false); break; // Cancel. case 2: load(); } break; case ReportItemHandle.DATABINDING_TYPE_REPORT_ITEM_REF: if (value.equals(NullReportItemChoice)) { value = null; } else if (referMap.get(value).getName() == null) { MessageDialog dialog = new MessageDialog(UIUtil.getDefaultShell(), Messages.getString("dataBinding.title.haveNoName"), //$NON-NLS-1$ null, Messages.getString("dataBinding.message.haveNoName"), //$NON-NLS-1$ MessageDialog.QUESTION, new String[] { Messages.getString("dataBinding.button.OK")//$NON-NLS-1$ }, 0); dialog.open(); load(); return; } int ret1 = 0; if (!NullReportItemChoice.equals(((BindingInfo) loadValue()).getBindingValue().toString()) || inputElement.getColumnBindings().iterator().hasNext()) { MessageDialog prefDialog = new MessageDialog(UIUtil.getDefaultShell(), Messages.getString("dataBinding.title.changeDataSet"), //$NON-NLS-1$ null, Messages.getString("dataBinding.message.changeReference"), //$NON-NLS-1$ MessageDialog.QUESTION, new String[] { Messages.getString("AttributeView.dialg.Message.Yes"), //$NON-NLS-1$ Messages.getString("AttributeView.dialg.Message.Cancel") }, //$NON-NLS-1$ 0); ret1 = prefDialog.open(); } switch (ret1) { // Clear binding info case 0: resetReference(value); break; // Cancel. case 1: load(); } } } } private void saveBinding() { BindingInfo info = new BindingInfo(); if (datasetRadio.getSelection()) { info.setBindingType(ReportItemHandle.DATABINDING_TYPE_DATA); info.setBindingValue(datasetCombo.getText()); } else { info.setBindingType(ReportItemHandle.DATABINDING_TYPE_REPORT_ITEM_REF); info.setBindingValue(reportItemCombo.getText()); } try { this.oldInfo = info; save(info); } catch (SemanticException e) { ExceptionHandler.handle(e); } } /** * @param enableAutoCommit * The enableAutoCommit to set. */ public void setEnableAutoCommit(boolean enableAutoCommit) { this.enableAutoCommit = enableAutoCommit; } public void setExpressionProvider(ExpressionProvider provider) { expressionProvider = provider; } /* * Set data for Group List */ public void setGroupList(List groupList) { this.groupList = groupList; } /* * Set input for dialog */ private void setInput(ReportItemHandle input) { this.inputElement = input; ReportItemHandle container = DEUtil.getBindingHolder(input.getContainer()); if (container != null && (container.getDataSet() != null || container.columnBindingsIterator().hasNext())) { NullDatasetChoice = CHOICE_DATASET_FROM_CONTAINER; } else { NullDatasetChoice = CHOICE_NONE; } if (container != null && container.getDataBindingReference() != null) { NullReportItemChoice = CHOICE_REPORTITEM_FROM_CONTAINER; } else { NullReportItemChoice = CHOICE_NONE; } isDataSetVisible = DEUtil.getBindingHolder(inputElement).getElement().getDefn() .isPropertyVisible(IReportItemModel.DATA_SET_PROP); IBindingDialogHelper dialogHelper = (IBindingDialogHelper) ElementAdapterManager.getAdapter(inputElement, IBindingDialogHelper.class); if (dialogHelper != null) { IBindingDialogHelper helperHelper = (IBindingDialogHelper) ElementAdapterManager .getAdapter(dialogHelper, IBindingDialogHelper.class); if (helperHelper != null) { dialogHelper = helperHelper; } dialogHelper.setBindingHolder(DEUtil.getBindingHolder(inputElement)); } canAggregate = dialogHelper == null ? false : dialogHelper.canProcessAggregation(); } protected void setSelectionInTable(int selectedIndex) { this.selectIndex = selectedIndex; } private void startTrans(String name) { if (isEnableAutoCommit()) { getActionStack().startTrans(name); } } protected void updateButtons() { boolean okEnable = false; if (!canSelect || (!isDataSetVisible && selectedColumnName != null) // || ( selectedColumnName != null && getDataSetName( ) != null ) // || ( selectedColumnName != null && DEUtil.getBindingHolder( // inputElement ) // .getDataSet( ) != null ) || getSelectColumnHandle() != null) { okEnable = true; } getOkButton().setEnabled(okEnable); int min = 0; int max = bindingTable.getTable().getItemCount() - 1; if ((min <= selectIndex) && (selectIndex <= max)) { btnDel.setEnabled(true); if (btnEdit != null) btnEdit.setEnabled(true); } else { btnDel.setEnabled(false); if (btnEdit != null) btnEdit.setEnabled(false); } bindingTable.getTable().select(selectIndex); if (DEUtil.getBindingHolder(inputElement).getDataBindingType() == ReportItemHandle.DATABINDING_TYPE_DATA) { btnAdd.setEnabled(true); if (btnAddAggr != null) btnAddAggr.setEnabled(true); if (btnRefresh != null) btnRefresh.setEnabled(true); } else if (DEUtil.getBindingHolder(inputElement) .getDataBindingType() == ReportItemHandle.DATABINDING_TYPE_NONE && (DEUtil.getBindingHolder(inputElement, true) == null || DEUtil.getBindingHolder(inputElement, true) .getDataBindingType() != ReportItemHandle.DATABINDING_TYPE_REPORT_ITEM_REF)) { btnAdd.setEnabled(true); if (btnAddAggr != null) btnAddAggr.setEnabled(true); if (btnRefresh != null) btnRefresh.setEnabled(true); } else { btnAdd.setEnabled(false); btnEdit.setEnabled(false); btnDel.setEnabled(false); if (btnAddAggr != null) btnAddAggr.setEnabled(false); if (btnRefresh != null) btnRefresh.setEnabled(false); } } private void updateSelection() { if (canSelect) { ((CheckboxTableViewer) bindingTable).setAllChecked(false); ((CheckboxTableViewer) bindingTable).setGrayed(dummyChoice, true); if (getSelectColumnHandle() != null) { ((CheckboxTableViewer) bindingTable).setChecked(getSelectColumnHandle(), true); } } } protected Button getAggregationButton() { return btnAddAggr; } private int sortingColumnIndex; public void setSortingColumnIndex(int index) { this.sortingColumnIndex = index; } private int sortDirection = SWT.UP; public void setSortDirection(int dir) { sortDirection = dir; } }