Java tutorial
// ============================================================================ // // Copyright (C) 2006-2015 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.metadata.managment.ui.wizard.context; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.apache.commons.lang.ArrayUtils; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ComboBoxCellEditor; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableColorProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.talend.core.model.process.IContext; import org.talend.core.model.process.IContextManager; import org.talend.core.model.process.IContextParameter; import org.talend.core.ui.context.model.table.ConectionAdaptContextVariableModel; import org.talend.core.ui.context.model.template.ContextConstant; import org.talend.metadata.managment.ui.i18n.Messages; public class ContextAdaptConectionSelectPage extends WizardPage { public static final int CONTEXT_COLUMN_WIDTH = 200; private static final String EMPTY_VALUE = ""; private TableViewer viewer; private List<ConectionAdaptContextVariableModel> adaptModels = new ArrayList<ConectionAdaptContextVariableModel>();; private IContextManager contextManager; private Set<String> connectionVaribles; public int step; public ContextAdaptConectionSelectPage(IContextManager contextManager, Set<String> connectionVaribles, int step) { super(Messages.getString("ReuseRepositoryContext.name")); //$NON-NLS-1$ setTitle(Messages.getString("ContextAdaptConectionSelectPage.title")); //$NON-NLS-1$ this.contextManager = contextManager; this.connectionVaribles = connectionVaribles; this.step = step; } @Override public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setBackground(parent.getBackground()); composite.setFont(parent.getFont()); GridLayout layout = new GridLayout(); layout.verticalSpacing = 10; composite.setLayout(layout); GridData gridData = new GridData(GridData.FILL_BOTH); gridData.widthHint = 400; composite.setLayoutData(gridData); GridData gd = new GridData(); SashForm sashForm = new SashForm(composite, SWT.HORIZONTAL); gd = new GridData(GridData.FILL_BOTH); gd.widthHint = 400; sashForm.setLayoutData(gd); createDescription(sashForm); createTableViewer(sashForm); sashForm.setWeights(new int[] { 3, 5 }); setControl(composite); } private void createDescription(Composite parent) { Text descriptionText = new Text(parent, SWT.BORDER | SWT.WRAP); descriptionText.setText(Messages.getString("ContextAdaptConectionSelectPage.selectOrCustomVariable")); //$NON-NLS-1$ descriptionText.setEditable(false); GridData gd = new GridData(GridData.FILL_BOTH); gd.widthHint = 100; descriptionText.setLayoutData(gd); descriptionText.addMouseListener(new MouseAdapter() { @Override public void mouseDown(MouseEvent e) { validateField(); } }); } private void createTableViewer(Composite parent) { viewer = new TableViewer(parent, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); Table table = viewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); GridData gridData = new GridData(GridData.FILL_BOTH); gridData.heightHint = 120; gridData.widthHint = 200; table.setLayoutData(gridData); createColumnsAndCellEditors(table); // set the content provider viewer.setContentProvider(new IStructuredContentProvider() { @Override public void dispose() { } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } @Override public Object[] getElements(Object inputElement) { return adaptModels.toArray(); } }); // set the label provider viewer.setLabelProvider(new ContextResueTableLabelProvider()); viewer.setInput(adaptModels); viewer.getTable().addMouseListener(new MouseAdapter() { @Override public void mouseDown(MouseEvent e) { validateField(); } }); } class ContextResueTableLabelProvider implements ITableLabelProvider, ITableColorProvider { @Override public boolean isLabelProperty(Object element, String property) { return false; } @Override public void dispose() { } @Override public void addListener(ILabelProviderListener listener) { } @Override public void removeListener(ILabelProviderListener listener) { } @Override public String getColumnText(Object element, int columnIndex) { String variable = ""; ConectionAdaptContextVariableModel currentModel = (ConectionAdaptContextVariableModel) element; switch (columnIndex) { case 0: variable = currentModel.getName(); break; case 1: variable = currentModel.getValue(); break; } return variable; } @Override public Image getColumnImage(Object element, int columnIndex) { return null; } @Override public Color getForeground(Object element, int columnIndex) { return null; } @Override public Color getBackground(Object element, int columnIndex) { if (element instanceof ConectionAdaptContextVariableModel) { ConectionAdaptContextVariableModel currentModel = (ConectionAdaptContextVariableModel) element; boolean defaultColour = true; switch (columnIndex) { case 0: defaultColour = true; break; case 1: defaultColour = true; break; case 2: if (currentModel.getValue().equals(ContextConstant.NEW_VARIABLE)) { defaultColour = true; } else { defaultColour = false; } break; } return Display.getDefault().getSystemColor(defaultColour ? SWT.COLOR_WHITE : SWT.COLOR_GRAY); } return null; } } private void validateField() { boolean hasError = false; boolean emptyModel = true; String errorMessage = EMPTY_VALUE; for (ConectionAdaptContextVariableModel model : adaptModels) { if (model.getValue().equals(EMPTY_VALUE)) { errorMessage = Messages.getString("ContextAdaptConectionSelectPage.errorMsg"); //$NON-NLS-1$ hasError = true; emptyModel = true; break; } else { emptyModel = false; } } if (!emptyModel) { for (int i = 0; i < adaptModels.size(); i++) { for (int j = adaptModels.size() - 1; j > i; j--) { if (adaptModels.get(i).getValue().equals(adaptModels.get(j).getValue())) { errorMessage = Messages.getString("ContextAdaptConectionSelectPage.duplicateErrorMsg", //$NON-NLS-1$ adaptModels.get(i).getValue()); hasError = true; break; } } } } if (!hasError) { setPageComplete(true); setErrorMessage(null); } else { setPageComplete(false); setErrorMessage(errorMessage); } } private List<IContextParameter> getContextVariableList() { List<IContext> contextVariableList = contextManager.getListContext(); List<IContextParameter> contextVariables = contextVariableList.get(0).getContextParameterList(); return contextVariables; } /** * ldong Comment method "createColumnsAndCellEditors". */ private void createColumnsAndCellEditors(final Table table) { TableColumn column = new TableColumn(table, SWT.NONE); column.setText(ContextConstant.VARIABLE_COLUMN_NAME); column.setWidth(200); column = new TableColumn(table, SWT.NONE); column.setText(ContextConstant.CONNECTION_FIELD_NAME); column.setWidth(200); List<String> connnectionFields = new ArrayList<String>(); for (String cp : connectionVaribles) { connnectionFields.add(cp); } String[] values = (String[]) ArrayUtils.clone(connectionVaribles.toArray(new String[0])); CellEditor[] cellEditor = new CellEditor[3]; cellEditor[0] = new TextCellEditor(table, SWT.READ_ONLY); cellEditor[1] = new ComboBoxCellEditor(table, values, SWT.NONE); cellEditor[2] = new TextCellEditor(table, SWT.NONE); ((CCombo) cellEditor[1].getControl()).setEditable(false); // set column properties viewer.setColumnProperties( new String[] { ContextConstant.VARIABLE_COLUMN_NAME, ContextConstant.CONNECTION_FIELD_NAME }); // Set cell editors viewer.setCellEditors(cellEditor); // set the Cell Modifier viewer.setCellModifier(new ContextVariableSelectCellModifier(viewer, values)); } public List<ConectionAdaptContextVariableModel> getVariableModels() { return adaptModels; } public void setVariableModels(List<ConectionAdaptContextVariableModel> variableModels) { this.adaptModels = variableModels; } @Override public void setVisible(boolean visible) { super.setVisible(visible); if (visible) { initTable(); } } private void initTable() { ContextModeWizard currentWizard = null; if (getWizard() instanceof ContextModeWizard) { currentWizard = (ContextModeWizard) getWizard(); } if (currentWizard != null) { this.contextManager = currentWizard.getResueContextManager(); // in case click back and chose another context ,and next again,we need to consider to claer the models if (!isNeedClearModels(adaptModels)) { adaptModels.clear(); } if (adaptModels.size() == 0) { for (IContextParameter contextVariable : getContextVariableList()) { adaptModels.add(new ConectionAdaptContextVariableModel(contextVariable.getName(), "", "")); } } currentWizard.setAdaptModels(this.adaptModels); } refresh(); validateField(); } private boolean isNeedClearModels(List<ConectionAdaptContextVariableModel> adaptModels) { boolean isSame = true; List<String> contextVariableNames = new ArrayList<String>(); List<IContext> contextVariableList = this.contextManager.getListContext(); List<IContextParameter> contextVariables = contextVariableList.get(0).getContextParameterList(); for (IContextParameter para : contextVariables) { contextVariableNames.add(para.getName()); } if (adaptModels.size() == contextVariableNames.size()) { for (ConectionAdaptContextVariableModel model : adaptModels) { String modelName = model.getName(); if (!contextVariableNames.contains(modelName)) { isSame = false; break; } } } else { isSame = false; } return isSame; } private void refresh() { final Table table = viewer.getTable(); TableColumn[] columns = table.getColumns(); for (TableColumn tableColumn : columns) { tableColumn.dispose(); } createColumnsAndCellEditors(table); viewer.setInput(adaptModels); } }