// ============================================================================ // // 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.editor.composite; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.core.resources.IFile; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.util.LocalSelectionTransfer; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.custom.TreeEditor; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DragSource; import org.eclipse.swt.dnd.DragSourceEvent; import org.eclipse.swt.dnd.DragSourceListener; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; 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.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.Label; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.eclipse.ui.part.FileEditorInput; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.repository.model.repositoryObject.MetadataColumnRepositoryObject; import org.talend.cwm.helper.ColumnHelper; import org.talend.cwm.relational.TdColumn; import org.talend.dataprofiler.core.CorePlugin; import org.talend.dataprofiler.core.ImageLib; import org.talend.dataprofiler.core.PluginConstant; import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl; import org.talend.dataprofiler.core.model.ColumnIndicator; import org.talend.dataprofiler.core.model.ModelElementIndicator; import org.talend.dataprofiler.core.ui.editor.AbstractAnalysisActionHandler; import org.talend.dataprofiler.core.ui.editor.AbstractMetadataFormPage; import org.talend.dataprofiler.core.ui.editor.analysis.AbstractAnalysisMetadataPage; import org.talend.dataprofiler.core.ui.editor.analysis.CorrelationAnalysisDetailsPage; import org.talend.dataprofiler.core.ui.editor.preview.IndicatorUnit; import org.talend.dataprofiler.core.ui.views.ColumnViewerDND; import org.talend.dataprofiler.core.ui.views.DQRespositoryView; import org.talend.dataprofiler.core.ui.views.RespositoryDetailView; import org.talend.dataquality.analysis.Analysis; import org.talend.dataquality.domain.pattern.Pattern; import org.talend.dataquality.helpers.MetadataHelper; import org.talend.dataquality.indicators.DataminingType; import org.talend.dataquality.indicators.PatternMatchingIndicator; import org.talend.dq.helper.RepositoryNodeHelper; import org.talend.dq.helper.resourcehelper.ResourceFileMap; import org.talend.dq.nodes.DBColumnRepNode; import org.talend.dq.nodes.indicator.type.IndicatorEnum; import org.talend.repository.model.IRepositoryNode; import org.talend.repository.model.RepositoryNode; /** * * DOC zhaoxinyi class global comment. Detailled comment */ public class AnalysisColumnNominalIntervalTreeViewer extends AbstractColumnDropTree { protected static Logger log = Logger.getLogger(AnalysisColumnNominalIntervalTreeViewer.class); public static final String VIEWER_KEY = "org.talend.dataprofiler.core.ui.editor.composite.AnalysisColumnNominalIntervalTreeViewer"; //$NON-NLS-1$ private Composite parentComp; private Button[] buttons; private List<RepositoryNode> columnSetMultiValueList; private CorrelationAnalysisDetailsPage masterPage; private Menu menu; private MenuItem editPatternMenuItem; public AnalysisColumnNominalIntervalTreeViewer(Composite parent) { parentComp = parent; tree = createTree(parent); tree.setData(this); columnSetMultiValueList = new ArrayList<RepositoryNode>(); } public AnalysisColumnNominalIntervalTreeViewer(Composite parent, CorrelationAnalysisDetailsPage masterPage) { this(parent); this.masterPage = masterPage; createButtonSection(parent.getParent()); // this.setElements(masterPage.getColumnSetMultiValueIndicator(). // getAnalyzedColumns()); this.setDirty(false); } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.editor.composite.AbstractColumnDropTree#getMasterPage() */ @Override public AbstractAnalysisMetadataPage getMasterPage() { return masterPage; } /** * @param parent */ private Tree createTree(Composite parent) { final Tree newTree = new Tree(parent, SWT.MULTI | SWT.BORDER); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(newTree); newTree.setHeaderVisible(true); createTreeItem(newTree, 300, "AnalysisColumnTreeViewer.analyzedColumns"); //$NON-NLS-1$ createTreeDataminingItem(newTree); createTreeItem(newTree, 80, "AnalysisColumnTreeViewer.operation"); //$NON-NLS-1$ parent.layout(); createTreeMenu(newTree, false); AbstractAnalysisActionHandler actionHandler = new AbstractAnalysisActionHandler(parent) { @Override protected void handleRemove() { removeSelectedElements(newTree); // MOD mzhao 2005-05-05 bug 6587. // MOD mzhao 2009-06-8, bug 5887. // updateBindConnection(masterPage, tree); } }; parent.setData(AbstractMetadataFormPage.ACTION_HANDLER, actionHandler); addSourceDND(newTree); addTargetDND(newTree); addTreeListener(newTree); return newTree; } /** * * DOC zshen Comment method "createButtonSection". * * @param topComp create the button with delButton,moveUpButton,moveDownButton */ private void createButtonSection(Composite topComp) { Composite buttonsComp = masterPage.getEditor().getToolkit().createComposite(topComp, SWT.NONE); buttonsComp.setLayout(new GridLayout(3, true)); buttonsComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); GridData buttonGridData = new GridData(); buttonGridData.heightHint = 25; buttonGridData.horizontalAlignment = GridData.CENTER; buttonGridData.verticalAlignment = GridData.FILL; buttonGridData.grabExcessHorizontalSpace = true; buttonGridData.grabExcessVerticalSpace = true; final Button delButton = new Button(buttonsComp, SWT.NULL); delButton.setImage(ImageLib.getImage(ImageLib.DELETE_ACTION)); delButton.setLayoutData(buttonGridData); final Button moveUpButton = new Button(buttonsComp, SWT.NULL); moveUpButton.setText(DefaultMessagesImpl.getString("ColumnsComparisonMasterDetailsPage.moveUp")); //$NON-NLS-1$ moveUpButton.setLayoutData(buttonGridData); final Button moveDownButton = new Button(buttonsComp, SWT.NULL); moveDownButton.setText(DefaultMessagesImpl.getString("ColumnsComparisonMasterDetailsPage.moveDown")); //$NON-NLS-1$ moveDownButton.setLayoutData(buttonGridData); buttons = new Button[] { delButton, moveUpButton, moveDownButton }; enabledButtons(false); moveUpButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { moveElement(masterPage.getTreeViewer(), false); } }); moveDownButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { moveElement(masterPage.getTreeViewer(), true); } }); delButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Tree currentTree = tree; Object[] selectItem = currentTree.getSelection(); List<RepositoryNode> columnList = masterPage.getTreeViewer().getColumnSetMultiValueList(); for (Object element : selectItem) { Object removeElement = ((TreeItem) element) .getData(AnalysisColumnNominalIntervalTreeViewer.COLUMN_INDICATOR_KEY); columnList.remove(removeElement); } masterPage.getTreeViewer().setInput(columnList.toArray()); enabledButtons(false); } }); } /** * * DOC zshen Comment method "enabledButtons". * * @param enabled the state of buttons. * * change the state of buttons. */ public void enabledButtons(boolean enabled) { for (Button button : buttons) { button.setEnabled(enabled); } } /** * * DOC zshen Comment method "moveElement". * * @param columnsElementViewer * @param isDown * * move the element of the columnList to up or down. */ private void moveElement(AnalysisColumnNominalIntervalTreeViewer columnsElementViewer, boolean isDown) { Tree currentTree = columnsElementViewer.getTree(); Object[] selectItem = currentTree.getSelection(); List<RepositoryNode> columnList = columnsElementViewer.getColumnSetMultiValueList(); int index = 0; // boolean moveFlag = false; List<Integer> indexArray = new ArrayList<Integer>(); if (isDown) { for (int i = selectItem.length - 1; i >= 0; i--) { index = currentTree.indexOf((TreeItem) selectItem[i]); if ((index + 1) >= columnList.size()) { return; } else { RepositoryNode moveElement = (RepositoryNode) ((TreeItem) selectItem[i]) .getData(AnalysisColumnNominalIntervalTreeViewer.COLUMN_INDICATOR_KEY); columnList.remove(moveElement); columnList.add((index + 1), moveElement); indexArray.add(index + 1); } } } else { for (Object element : selectItem) { index = currentTree.indexOf((TreeItem) element); if ((index - 1) < 0) { return; } else { RepositoryNode moveElement = (RepositoryNode) ((TreeItem) element) .getData(AnalysisColumnNominalIntervalTreeViewer.COLUMN_INDICATOR_KEY); columnList.remove(moveElement); columnList.add((index - 1), moveElement); indexArray.add(index - 1); } } } columnsElementViewer.setInput(convertList(columnList).toArray()); currentTree = columnsElementViewer.getTree(); for (int i = 0; i < indexArray.size(); i++) { currentTree.select(currentTree.getItem(indexArray.get(i))); } } private List<RepositoryNode> convertList(List<RepositoryNode> columnList) { List<RepositoryNode> resultList = new ArrayList<RepositoryNode>(); for (int i = columnList.size() - 1; i >= 0; i--) { resultList.add(columnList.get(i)); } return resultList; } /** * DOC bZhou Comment method "addTargetDND". * * @param newTree */ private void addTargetDND(final Tree newTree) { ColumnViewerDND.installDND(newTree); } /** * DOC bZhou Comment method "addSourceDND". * * @param newTree */ private void addSourceDND(final Tree newTree) { final LocalSelectionTransfer transfer = LocalSelectionTransfer.getTransfer(); Transfer[] types = new Transfer[] { transfer }; int operations = DND.DROP_COPY | DND.DROP_MOVE; final DragSource source = new DragSource(newTree, operations); source.setTransfer(types); final TreeItem[] dragSourceItem = new TreeItem[1]; source.addDragListener(new DragSourceListener() { public void dragStart(DragSourceEvent event) { TreeItem[] selection = newTree.getSelection(); dragSourceItem[0] = selection[0]; if (selection.length > 0) { event.doit = true; transfer.setSelection(new StructuredSelection(selection[0].getData(COLUMN_INDICATOR_KEY))); getColumnSetMultiValueList().remove(selection[0].getData(COLUMN_INDICATOR_KEY)); } else { event.doit = false; } }; public void dragSetData(DragSourceEvent event) { event.data = dragSourceItem[0]; } public void dragFinished(DragSourceEvent event) { if (event.detail == DND.DROP_MOVE) { removeItemBranch(dragSourceItem[0]); tree.forceFocus(); } dragSourceItem[0] = null; } }); } /** * DOC xzhao Comment method "createTreeMenu". * * @param newTree * @param containEdit */ private void createTreeMenu(final Tree newTree, boolean containEdit) { Menu oldMenu = newTree.getMenu(); if (oldMenu != null && !oldMenu.isDisposed()) { oldMenu.dispose(); } menu = new Menu(newTree); MenuItem deleteMenuItem = new MenuItem(menu, SWT.CASCADE); deleteMenuItem.setText(DefaultMessagesImpl.getString("AnalysisColumnTreeViewer.removeElement")); //$NON-NLS-1$ deleteMenuItem.setImage(ImageLib.getImage(ImageLib.DELETE_ACTION)); deleteMenuItem.addSelectionListener(new SelectionAdapter() { /* * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse .swt.events.SelectionEvent) */ @Override public void widgetSelected(SelectionEvent e) { removeSelectedElements(newTree); // MOD mzhao 2005-05-05 bug 6587. // MOD mzhao 2009-06-8, bug 5887. // updateBindConnection(masterPage, tree); } }); // ADD 2009-01-07 mzhao for feature:0005664 MenuItem showMenuItem = new MenuItem(menu, SWT.CASCADE); showMenuItem.setText(DefaultMessagesImpl.getString("AnalysisColumnTreeViewer.showDQElement")); //$NON-NLS-1$ showMenuItem.setImage(ImageLib.getImage(ImageLib.EXPLORE_IMAGE)); showMenuItem.addSelectionListener(new SelectionAdapter() { /* * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse .swt.events.SelectionEvent) */ @Override public void widgetSelected(SelectionEvent e) { TreeItem[] selection = newTree.getSelection(); if (selection.length > 0) { // if DqRepository view is not openning we will not do anything DQRespositoryView dqview = CorePlugin.getDefault().findAndOpenRepositoryView(); if (dqview == null) { return; } // TdColumn tdColumn = (TdColumn) selection[0].getData(COLUMN_INDICATOR_KEY); dqview.showSelectedElements(selection[0].getData(COLUMN_INDICATOR_KEY)); } } }); if (containEdit) { editPatternMenuItem = new MenuItem(menu, SWT.CASCADE); editPatternMenuItem.setText(DefaultMessagesImpl.getString("AnalysisColumnTreeViewer.editPattern")); //$NON-NLS-1$ editPatternMenuItem.setImage(ImageLib.getImage(ImageLib.PATTERN_REG)); editPatternMenuItem.addSelectionListener(new SelectionAdapter() { /* * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org .eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected(SelectionEvent e) { TreeItem[] selection = tree.getSelection(); if (selection.length > 0) { TreeItem treeItem = selection[0]; IndicatorUnit indicatorUnit = (IndicatorUnit) treeItem.getData(INDICATOR_UNIT_KEY); PatternMatchingIndicator indicator = (PatternMatchingIndicator) indicatorUnit.getIndicator(); Pattern pattern = indicator.getParameters().getDataValidDomain().getPatterns().get(0); // MOD mzhao 2009-03-13 Feature 6066 Move all folders // into one project. IFile file = ResourceFileMap.findCorrespondingFile(pattern); IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); try { activePage.openEditor(new FileEditorInput(file), "org.talend.dataprofiler.core.ui.editor.pattern.PatternEditor"); //$NON-NLS-1$ } catch (PartInitException e1) { log.error(e1, e1); } } } }); } newTree.setMenu(menu); } @Override public void setInput(Object[] objs) { // MOD xqliu 2011-01-11 bug 15750 // if (!RepositoryNodeHelper.hasColumnNode(objs) && !RepositoryNodeHelper.hasTdColumn(objs)) { // return; // } // List<DBColumnRepNode> columnNodeList = RepositoryNodeHelper.getColumnNodeList(objs); List<IRepositoryNode> columnNodes = this.getColumnNodes(objs); if (columnNodes.size() == 0) { TreeItem[] items = this.tree.getItems(); this.removeSelectedElements(items); return; } this.setElements(columnNodes); } public void setElements(final Object columnNodes) { this.tree.dispose(); this.tree = createTree(this.parentComp); tree.setData(this); // MOD mzhao bug 8282 2009-7-31 Clear column cache. columnSetMultiValueList.clear(); addItemElements(getColumnNodes(columnNodes), 0); // addItemElements(columns); // MOD mzhao 2009-05-05 bug 6587. updateBindConnection(masterPage, tree); } /** * DOC xqliu Comment method "getColumnNodes". * * @param columnNodes * @return */ private List<IRepositoryNode> getColumnNodes(Object columnNodes) { List<IRepositoryNode> result = new ArrayList<IRepositoryNode>(); List<DBColumnRepNode> columnNodeList = null; List<TdColumn> columnList = null; if (columnNodes instanceof Object[]) { columnNodeList = RepositoryNodeHelper.getColumnNodeList((Object[]) columnNodes); columnList = RepositoryNodeHelper.getTdColumnList((Object[]) columnNodes); } else if (columnNodes instanceof List) { columnNodeList = RepositoryNodeHelper.getColumnNodeList(((List) columnNodes).toArray()); columnList = RepositoryNodeHelper.getTdColumnList(((List) columnNodes).toArray()); } if (columnNodeList != null) { result.addAll(columnNodeList); } if (columnList != null) { result.addAll(columns2Nodes(columnList)); } return result; } private void addItemElements(final List<IRepositoryNode> columns, int index) { for (int i = 0; i < columns.size(); i++) { final RepositoryNode columnNode = (RepositoryNode) columns.get(i); final TdColumn column = (TdColumn) ((MetadataColumnRepositoryObject) columnNode.getObject()).getTdColumn(); final TreeItem treeItem = new TreeItem(tree, SWT.NONE, index); columnSetMultiValueList.add(index, columnNode); String columnName = column.getName(); treeItem.setImage(ImageLib.getImage(ImageLib.TD_COLUMN)); treeItem.setText(0, columnName != null ? columnName + PluginConstant.SPACE_STRING + PluginConstant.PARENTHESIS_LEFT + column.getSqlDataType().getName() + PluginConstant.PARENTHESIS_RIGHT : "null"); //$NON-NLS-1$ treeItem.setData(COLUMN_INDICATOR_KEY, columnNode); TreeEditor comboEditor = new TreeEditor(tree); tree.setData(DefaultMessagesImpl.getString("AnalysisColumnNominalIntervalTreeViewer.TreeEditor"), comboEditor); //$NON-NLS-1$ final CCombo combo = new CCombo(tree, SWT.BORDER); for (DataminingType type : DataminingType.values()) { combo.add(type.getLiteral()); // MODSCA 2008-04-10 use literal // for presentation } DataminingType dataminingType = MetadataHelper.getDataminingType(column); if (dataminingType == null) { dataminingType = MetadataHelper.getDefaultDataminingType(column.getSqlDataType().getJavaDataType()); } if (dataminingType == null) { combo.select(0); } else { combo.setText(dataminingType.getLiteral()); } MetadataHelper.setDataminingType(DataminingType.get(combo.getText()), column); /** * DOC zhaoxinyi AnalysisColumnNominalIntervalTreeViewer class global comment. Detailled comment */ class Selection extends SelectionAdapter { @Override public void widgetSelected(SelectionEvent e) { MetadataHelper.setDataminingType(DataminingType.get(combo.getText()), column); setDirty(true); } } combo.addSelectionListener(new Selection()); // comboTextList.add(combo.getText().trim()); combo.setEditable(false); comboEditor.minimumWidth = WIDTH1_CELL; comboEditor.setEditor(combo, treeItem, 1); TreeEditor delLabelEditor = new TreeEditor(tree); Label delLabel = createTreeItemLabel(tree, ImageLib.DELETE_ACTION, "AnalysisColumnTreeViewer.delete"); //$NON-NLS-1$ delLabel.addMouseListener(new MouseAdapter() { @Override public void mouseDown(MouseEvent e) { deleteColumnItems(columnNode); removeItemBranch(treeItem); enabledButtons(false); // MOD mzhao 2005-05-05 bug 6587. // MOD mzhao 2009-06-8, bug 5887. // updateBindConnection(masterPage, tree); } }); delLabelEditor.minimumWidth = delLabel.getImage().getBounds().width; delLabelEditor.horizontalAlignment = SWT.CENTER; delLabelEditor.setEditor(delLabel, treeItem, 2); treeItem.setData(ITEM_EDITOR_KEY, new TreeEditor[] { comboEditor, delLabelEditor }); /* * if (columnIndicator.hasIndicators()) { createIndicatorItems(treeItem, * columnIndicator.getIndicatorUnits()); } */ delLabelEditor.layout(); treeItem.setExpanded(true); } tree.layout(); tree.redraw(); this.setDirty(true); tree.forceFocus(); } public void addElements(final List<IRepositoryNode> columnNode, int index) { this.addItemElements(columnNode, index); updateBindConnection(masterPage, tree); } /** * DOC xzhao Comment method "deleteTreeElements". * * @param columnIndicators * @param deleteColumnIndiciators */ private void deleteColumnItems(RepositoryNode delRepNodeItem) { List<RepositoryNode> remainColumns = columnSetMultiValueList; for (int j = 0; j < columnSetMultiValueList.size(); j++) { // User id identify the equality. the object instance might not equals. if (delRepNodeItem.getObject().getId().equals(columnSetMultiValueList.get(j).getObject().getId())) { remainColumns.remove(j); } } this.columnSetMultiValueList = remainColumns; // setElements(columnSetMultiValueList); } public List<RepositoryNode> getColumnSetMultiValueList() { return this.columnSetMultiValueList; } /** * Remove the selected elements(eg:TdColumn or Indicator) from tree. * * @param newTree */ private void removeSelectedElements(final Tree newTree) { TreeItem[] selection = newTree.getSelection(); for (TreeItem item : selection) { RepositoryNode tdColumnReposNode = (RepositoryNode) item.getData(COLUMN_INDICATOR_KEY); deleteColumnItems(tdColumnReposNode); removeItemBranch(item); } } private void removeSelectedElements(final TreeItem[] selection) { for (TreeItem item : selection) { RepositoryNode tdColumnReposNode = (RepositoryNode) item.getData(COLUMN_INDICATOR_KEY); deleteColumnItems(tdColumnReposNode); removeItemBranch(item); } } private void addTreeListener(final Tree tree) { tree.addFocusListener(new FocusListener() { public void focusGained(FocusEvent e) { if (e.getSource() instanceof Tree) { Tree currentTree = (Tree) e.getSource(); if (currentTree.getSelection().length > 0) { enabledButtons(true); } } } public void focusLost(FocusEvent e) { if (e.getSource() instanceof Tree) { Tree currentTree = (Tree) e.getSource(); if (currentTree.getSelection().length <= 0) { enabledButtons(false); } } } }); tree.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { boolean con = false; if (e.item instanceof TreeItem) { enabledButtons(true); TreeItem item = (TreeItem) e.item; if (item.getData(INDICATOR_UNIT_KEY) != null) { IndicatorUnit indicatorUnit = (IndicatorUnit) item.getData(INDICATOR_UNIT_KEY); IndicatorEnum type = indicatorUnit.getType(); con = IndicatorEnum.RegexpMatchingIndicatorEnum.compareTo(type) == 0 || IndicatorEnum.SqlPatternMatchingIndicatorEnum.compareTo(type) == 0; } } createTreeMenu(tree, con); showDetailView(tree); } }); tree.addTreeListener(treeAdapter); } private void showDetailView(Tree newTree) { TreeItem[] selection = newTree.getSelection(); if (selection.length > 0) { RespositoryDetailView detailView = CorePlugin.getDefault().getRespositoryDetailView(); if (detailView == null) { return; } DQRespositoryView dqview = CorePlugin.getDefault().getRepositoryView(); detailView.selectionChanged(dqview, new StructuredSelection(selection[0].getData(COLUMN_INDICATOR_KEY))); } } /* * (non-Javadoc) * * @see * org.talend.dataprofiler.core.ui.editor.composite.AbstractColumnDropTree#getTheSuitedComposite(org.eclipse.swt * .events.SelectionEvent) */ @Override public ExpandableComposite getTheSuitedComposite(SelectionEvent e) { Composite[] previewChartCompsites = masterPage.getPreviewChartCompsites(); if (previewChartCompsites == null) { return null; } Object obj = e.item.getData(COLUMN_INDICATOR_KEY); if (obj instanceof ColumnIndicator) { ColumnIndicator columnIndicator = (ColumnIndicator) obj; for (Composite comp : previewChartCompsites) { if (comp.getData() == columnIndicator) { return (ExpandableComposite) comp; } } } return null; } /** * Getter for analysis. * * @return the analysis */ public Analysis getAnalysis() { return this.masterPage.getCurrentModelElement(); } public Tree getTree() { return tree; } @Override public void updateModelViewer() { masterPage.recomputeIndicators(); columnSetMultiValueList.clear(); this.setElements(masterPage.getColumnSetMultiValueIndicator().getAnalyzedColumns()); } @Override public boolean canDrop(IRepositoryNode modelElement) { List<TdColumn> existColumns = new ArrayList<TdColumn>(); for (RepositoryNode columnFromMultiValueList : this.getColumnSetMultiValueList()) { IRepositoryViewObject repObject = columnFromMultiValueList.getObject(); existColumns.add((TdColumn) ((MetadataColumnRepositoryObject) repObject).getTdColumn()); } if (existColumns.contains(modelElement)) { return false; } // MOD qiongli 2010-8-19,bug 14436:if come from diffrent table,can not drop IRepositoryViewObject repObject = modelElement.getObject(); existColumns.add((TdColumn) ((MetadataColumnRepositoryObject) repObject).getTdColumn()); if (!existColumns.isEmpty() && !ColumnHelper.isFromSameTable(existColumns)) { return false; } return true; } @Override public void dropModelElements(List<? extends IRepositoryNode> reposObjects, int index) { List<IRepositoryNode> columns = new ArrayList<IRepositoryNode>(); for (IRepositoryNode element : reposObjects) { if (element.getObject() instanceof MetadataColumnRepositoryObject) { columns.add(element); } } this.addElements(columns, index); } @Override public void addElements(ModelElementIndicator[] elements) { } @Override protected void setElements(ModelElementIndicator[] modelElementIndicator) { } public static List<DBColumnRepNode> columns2Nodes(List<TdColumn> tdColumns) { List<DBColumnRepNode> nodes = new ArrayList<DBColumnRepNode>(); for (TdColumn tdColumn : tdColumns) { RepositoryNode recursiveFind = RepositoryNodeHelper.recursiveFind(tdColumn); if (recursiveFind == null) { recursiveFind = RepositoryNodeHelper.createRepositoryNode(tdColumn); } RepositoryNode repNode = recursiveFind; if (repNode != null && repNode instanceof DBColumnRepNode) { nodes.add((DBColumnRepNode) repNode); } } return nodes; } }