// ============================================================================ // // Copyright (C) 2006-2016 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.dataprofiler.core.ui.dialog; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; 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.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.ui.dialogs.SelectionStatusDialog; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.dataprofiler.core.ImageLib; import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl; import org.talend.dataquality.analysis.Analysis; import orgomg.cwm.objectmodel.core.ModelElement; /** * DOC mzhao Analyzed element synchronization dialog. ADDED 2009-06-02 Feature:5887 */ public abstract class AnalyzedElementSynDialog extends SelectionStatusDialog implements ISelectionChangedListener { protected TreeViewer sTreeViewer; protected ITreeContentProvider sContentProvider; protected ILabelProvider sLabelProvider; protected Analysis analysis; protected List<SynTreeModel> modelInput = null; protected Connection newDataProvider; protected Map<ModelElement, ModelElement> synedEleMap; public AnalyzedElementSynDialog(Shell parent, Analysis analysis, Connection newDataProvider) { super(parent); setTitle(DefaultMessagesImpl.getString("AnalyzedElementSynDialog.SynWithNewConnection")); //$NON-NLS-1$ initTableProvider(); this.newDataProvider = newDataProvider; this.analysis = analysis; modelInput = new ArrayList<SynTreeModel>(); synedEleMap = new HashMap<ModelElement, ModelElement>(); } @Override protected void computeResult() { } public void selectionChanged(SelectionChangedEvent event) { } @Override protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); final GridLayout gridLayout2 = new GridLayout(); gridLayout2.marginWidth = 0; gridLayout2.horizontalSpacing = 0; gridLayout2.marginHeight = 0; composite.setLayout(gridLayout2); Composite infoComp = new Composite(composite, SWT.NONE); final GridData gdInfoComp = new GridData(SWT.FILL, SWT.CENTER, true, false); gdInfoComp.heightHint = 22; infoComp.setLayoutData(gdInfoComp); final GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 2; gridLayout.marginWidth = 0; gridLayout.marginHeight = 0; gridLayout.horizontalSpacing = 0; infoComp.setLayout(gridLayout); final Label label = new Label(infoComp, SWT.NONE); label.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true)); label.setImage(ImageLib.getImage(ImageLib.ICON_INFO)); final Label label1 = new Label(infoComp, SWT.NONE); label1.setRegion(null); final GridData gdLabel1 = new GridData(SWT.FILL, SWT.FILL, true, true); gdLabel1.verticalIndent = 1; label1.setLayoutData(gdLabel1); label1.setText(DefaultMessagesImpl.getString("AnalyzedElementSynDialog.RemoveAnalyeElement")); //$NON-NLS-1$ // label // .setText( // " Which of following analyzed element(s) do you want to keep?"); Composite synModelComp = new Composite(composite, SWT.NONE); final GridData gdsynModelComp = new GridData(SWT.FILL, SWT.FILL, true, true); gdsynModelComp.heightHint = 129; synModelComp.setLayoutData(gdsynModelComp); final GridLayout gridLayout1 = new GridLayout(); gridLayout1.marginWidth = 0; gridLayout1.marginHeight = 0; gridLayout1.horizontalSpacing = 0; synModelComp.setLayout(gridLayout1); sTreeViewer = createSynTreeViewer(synModelComp); createTableHeader(); sTreeViewer.setInput(modelInput); return composite; } private void createTableHeader() { sTreeViewer.getTree().setHeaderVisible(true); sTreeViewer.getTree().setLinesVisible(true); TreeColumn column1 = new TreeColumn(sTreeViewer.getTree(), SWT.CENTER); column1.setWidth(200); column1.setText(DefaultMessagesImpl.getString("AnalyzedElementSynDialog.Name")); //$NON-NLS-1$ TreeColumn column2 = new TreeColumn(sTreeViewer.getTree(), SWT.CENTER); column2.setWidth(500); column2.setText(DefaultMessagesImpl.getString("AnalyzedElementSynDialog.Status")); //$NON-NLS-1$ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(sTreeViewer.getTree()); } /** * * DOC mzhao Create synchronized analyzed table. * * @param parent * @return */ protected TreeViewer createSynTreeViewer(Composite parent) { TreeViewer viewer = new TreeViewer(parent, SWT.MULTI | SWT.BORDER); final Tree tree = viewer.getTree(); tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); try { viewer.setLabelProvider(this.sLabelProvider); viewer.setContentProvider(this.sContentProvider); viewer.addSelectionChangedListener(this); } catch (Exception e) { e.printStackTrace(); } return viewer; } public List<SynTreeModel> getSynInputModel() { reloadInputModel(); return modelInput; } public Map<ModelElement, ModelElement> getSynedEleMap() { return synedEleMap; } private void initTableProvider() { sLabelProvider = new AnaColSynLabelProvider(); sContentProvider = new DBTreeViewContentProvider(); } protected abstract void reloadInputModel(); /** * * DOC mzhao AnalyzedElementSynDialog class global comment. Detailled comment * * FIXME this inner class should be static. Confirm and fix the error. */ public class SynTreeModel { private ModelElement oldDataProvElement = null; private ModelElement newDataProvElement = null; private ModelElement currentAnaElement = null; public SynTreeModel(ModelElement currentElement) { this.currentAnaElement = currentElement; } public String getLabel() { return currentAnaElement.getName(); } public String getAsynDecription() { return DefaultMessagesImpl.getString("AnalyzedElementSynDialog.NotExistInNewConn", oldDataProvElement.getName()); //$NON-NLS-1$ } public void setNewDataProvElement(ModelElement newDataProvElement) { this.newDataProvElement = newDataProvElement; } public ModelElement getNewDataProvElement() { return newDataProvElement; } public void setOldDataProvElement(ModelElement oldDataProvElement) { this.oldDataProvElement = oldDataProvElement; } public ModelElement getOldDataProvElement() { return oldDataProvElement; } } /** * * DOC mzhao AnalyzedColumnsSynDialog class global comment. Detailled comment * * FIXME this inner class should be static. Confirm and fix the error. */ class DBTreeViewContentProvider implements ITreeContentProvider { /** * @param adapterFactory */ public DBTreeViewContentProvider() { super(); } public Object[] getChildren(Object parentElement) { if (parentElement != null && parentElement instanceof SynTreeModel) { SynTreeModel synTreeModel = (SynTreeModel) parentElement; return new Object[] { synTreeModel }; } return null; } public boolean hasChildren(Object element) { return false; } public Object[] getElements(Object inputElement) { if (inputElement instanceof List) { return ((List<?>) inputElement).toArray(); } return new Object[] { inputElement }; } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public Object getParent(Object element) { return null; } } /** * * DOC zhao AnalyzedColumnsSynDialog class global comment. Detailled comment * * FIXME this inner class should be static. Confirm and fix the error. */ private class AnaColSynLabelProvider extends LabelProvider implements ITableLabelProvider { /* * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java .lang.Object, int) */ public Image getColumnImage(Object element, int columnIndex) { if (columnIndex == 0) return null; return null; } /* * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java. lang.Object, int) */ public String getColumnText(Object element, int columnIndex) { SynTreeModel synTreeModel = (SynTreeModel) element; switch (columnIndex) { case 0: return synTreeModel.getLabel(); case 1: return synTreeModel.getAsynDecription(); default: return ""; //$NON-NLS-1$ } } /* * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object) */ public String getText(Object element) { return getColumnText(element, 0); // needed to make the sorter work } } }