// ============================================================================ // // Copyright (C) 2006-2012 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.designer.core.ui.dialog; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.gef.commands.Command; import org.eclipse.gef.commands.CommandStack; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.swt.SWT; 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.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.talend.core.model.metadata.IMetadataColumn; import org.talend.designer.core.i18n.Messages; import org.talend.designer.core.model.components.EParameterName; import org.talend.designer.core.ui.editor.connections.Connection; import org.talend.designer.core.ui.editor.connections.TracesConnectionUtils; /** * DOC Administrator class global comment. Detailled comment */ public class FilterColumnDialog extends Dialog { private static final String SETUP_TRACES_TITLE = Messages.getString("FilterTraceColumnAction.SetupTraces"); //$NON-NLS-1$ private static final String CONDITION = "CONDITION"; //$NON-NLS-1$ private static final String COLUMN = "COLUMN"; //$NON-NLS-1$ private Connection conn; private CheckboxTableViewer tabView; private Table tab; private String[] coluName = { COLUMN, CONDITION }; private CellEditor[] cellEditor; private Button checkAll; private Button checkNo; private CommandStack stack; /** * hwang FilterColumn constructor comment. * * @param parentShell */ protected FilterColumnDialog(Shell parentShell) { super(parentShell); } public FilterColumnDialog(Shell parentShell, Connection conn, CommandStack stack) { super(parentShell); parentShell.setText(SETUP_TRACES_TITLE); this.setShellStyle(this.getShellStyle() | SWT.RESIZE | SWT.MAX); this.conn = conn; this.stack = stack; } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(SETUP_TRACES_TITLE); } @Override protected Control createDialogArea(Composite parent) { Composite createDialogArea = (Composite) super.createDialogArea(parent); createDialogArea.setLayout(new GridLayout(2, false)); createDialogArea.setLayoutData(new GridData(GridData.FILL_BOTH)); tabView = CheckboxTableViewer.newCheckList(createDialogArea, SWT.FULL_SELECTION); tab = tabView.getTable(); Composite btnComposite = new Composite(createDialogArea, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginTop = 15; btnComposite.setLayout(layout); btnComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); checkAll = new Button(btnComposite, SWT.PUSH); checkAll.setText(Messages.getString("FilterTraceColumnAction.SelectAll")); //$NON-NLS-1$ checkAll.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER)); checkNo = new Button(btnComposite, SWT.PUSH); checkNo.setText(Messages.getString("FilterTraceColumnAction.UnselectAll")); //$NON-NLS-1$ checkNo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER)); TableColumn tableColumn = new TableColumn(tab, SWT.NONE); tableColumn.setText(Messages.getString("FilterTraceColumnAction.Column")); //$NON-NLS-1$ tableColumn.setWidth(100); // PTODO if enable trace condition, only active this. // tableColumn = new TableColumn(tab, SWT.NONE); // tableColumn.setText(Messages.getString("FilterTraceColumnAction.Condition")); //$NON-NLS-1$ // tableColumn.setWidth(200); tab.setHeaderVisible(true); tab.setLinesVisible(true); tabView.setContentProvider(new ArrayContentProvider()); tabView.setLabelProvider(new TableLabelProvider()); tabView.setInput(conn.getMetadataTable().clone()); GridData gridData = new GridData(GridData.FILL_BOTH); gridData.heightHint = 150; gridData.minimumHeight = 150; gridData.widthHint = 180; gridData.minimumWidth = 180; tab.setLayoutData(gridData); checkAll.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { tabView.setAllChecked(true); } }); checkNo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { tabView.setAllChecked(false); } }); cellEditor = new CellEditor[2]; cellEditor[0] = null; cellEditor[1] = new TextCellEditor(tab); tabView.setColumnProperties(coluName); tabView.setCellEditors(cellEditor); tabView.setCellModifier(new TableModify(tabView)); initChecked(); return createDialogArea; } private void initChecked() { List<ConditionBean> beans = new ArrayList<ConditionBean>(); for (IMetadataColumn column : conn.getMetadataTable().getListColumns()) { ConditionBean bean = new ConditionBean(column); bean.setCondition(TracesConnectionUtils.getTracesColumnCondition(conn, column.getLabel())); beans.add(bean); } tabView.setInput(beans); List<String> enabledTraceColumns = TracesConnectionUtils.getEnabledTraceColumns(conn); for (TableItem item : tabView.getTable().getItems()) { Object data = item.getData(); if (data instanceof ConditionBean) { ConditionBean bean = (ConditionBean) data; if (enabledTraceColumns.contains(bean.getColumnName())) { tabView.setChecked(bean, true); } } } } @Override protected void okPressed() { stack.execute(new Command() { @Override public void execute() { List<Object> checkedElements = Arrays.asList(tabView.getCheckedElements()); if (checkedElements.size() == 0) conn.setNullColumn = true; Integer validColumn1 = 0; Object value = conn.getPropertyValue(EParameterName.TRACES_CONNECTION_FILTER.getName()); conn.traceColumn.clear(); for (TableItem item : tabView.getTable().getItems()) { Object data = item.getData(); if (data instanceof ConditionBean) { ConditionBean bean = (ConditionBean) data; if (checkedElements.contains(bean)) { conn.setNullColumn = false; conn.traceColumn.add(validColumn1); } else { tabView.setChecked(item, false); } TracesConnectionUtils.setTraceColumnValues(conn, bean.getColumnName(), bean.getCondition(), checkedElements.contains(bean)); validColumn1++; } } // fire property change and refresh conn.setPropertyValue(EParameterName.TRACES_CONNECTION_FILTER.getName(), value); } }); super.okPressed(); } private class TableLabelProvider implements ITableLabelProvider { /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int) */ public Image getColumnImage(Object element, int columnIndex) { return null; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int) */ public String getColumnText(Object element, int columnIndex) { if (element instanceof ConditionBean) { switch (columnIndex) { case 0: return ((ConditionBean) element).getColumnName(); case 1: return ((ConditionBean) element).getCondition(); default: break; } } return null; } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener ) */ public void addListener(ILabelProviderListener listener) { } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose() */ public void dispose() { } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String) */ public boolean isLabelProperty(Object element, String property) { return false; } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener * ) */ public void removeListener(ILabelProviderListener listener) { } } private class TableModify implements ICellModifier { CheckboxTableViewer tabView = null; public TableModify(CheckboxTableViewer tabView) { this.tabView = tabView; } public boolean canModify(Object element, String property) { return true; } public Object getValue(Object element, String property) { if (element instanceof ConditionBean) { if (property.equals(CONDITION)) { return ((ConditionBean) element).getCondition(); } } return null; } public void modify(Object element, String property, Object value) { TableItem item = (TableItem) element; if (item.getData() instanceof ConditionBean) { ConditionBean pojo = (ConditionBean) item.getData(); if (property.equals(CONDITION)) { pojo.setCondition((String) value); } } tabView.refresh(); } } private class ConditionBean { private IMetadataColumn column; private String condition; public ConditionBean(IMetadataColumn column) { super(); this.column = column; } public String getCondition() { return this.condition; } public void setCondition(String condition) { this.condition = condition; } public String getColumnName() { return this.column.getLabel(); } } }