// ============================================================================
//
// 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.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFolder;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.custom.TreeEditor;
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.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.talend.core.model.metadata.builder.connection.MetadataColumn;
import org.talend.cwm.relational.TdSqlDataType;
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.model.impl.DelimitedFileIndicatorImpl;
import org.talend.dataprofiler.core.ui.dialog.composite.TooltipTree;
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.ColumnSetAnalysisDetailsPage;
import org.talend.dataprofiler.core.ui.editor.preview.IndicatorUnit;
import org.talend.dataprofiler.core.ui.events.EventEnum;
import org.talend.dataprofiler.core.ui.events.EventManager;
import org.talend.dataprofiler.core.ui.views.ColumnViewerDND;
import org.talend.dataquality.analysis.Analysis;
import org.talend.dataquality.analysis.ExecutionLanguage;
import org.talend.dataquality.helpers.MetadataHelper;
import org.talend.dataquality.indicators.DataminingType;
import org.talend.dq.helper.RepositoryNodeHelper;
import org.talend.dq.nodes.ColumnSetRepNode;
import org.talend.dq.nodes.DBColumnRepNode;
import org.talend.dq.nodes.DBTableRepNode;
import org.talend.dq.nodes.DBViewRepNode;
import org.talend.repository.model.IRepositoryNode;
import org.talend.repository.model.RepositoryNode;
import org.talend.utils.sql.TalendTypeConvert;
import orgomg.cwm.objectmodel.core.ModelElement;
/**
*
* @author yyi 2009-12-16
*/
public class AnalysisColumnSetTreeViewer extends AbstractColumnDropTree {
protected static Logger log = Logger.getLogger(AnalysisColumnSetTreeViewer.class);
public static final String VIEWER_KEY = "org.talend.dataprofiler.core.ui.editor.composite.AnalysisColumnSetTreeViewer"; //$NON-NLS-1$
private Composite parentComp;
private Map<String, Button> buttons = new HashMap<String, Button>();
private List<IRepositoryNode> columnSetMultiValueList;
private ColumnSetAnalysisDetailsPage masterPage;
private ExecutionLanguage language;
private AnalysisColumnSetTreeViewer setTreeViewer;
public AnalysisColumnSetTreeViewer(Composite parent, ColumnSetAnalysisDetailsPage masterPage) {
absMasterPage = masterPage;
viewKey = VIEWER_KEY;
parentComp = parent;
tree = createTree(parent);
tree.setData(this);
columnSetMultiValueList = new ArrayList<IRepositoryNode>();
this.masterPage = masterPage;
this.createButtonSection(parent.getParent());
this.setElements(masterPage.getCurrentModelElementIndicators());
this.setDirty(false);
// MOD yyi 2011-02-25 18868
AbstractColumnDropTree treeViewer = null == masterPage.getTreeViewer() ? this : masterPage.getTreeViewer();
if (treeViewer != null && treeViewer instanceof AnalysisColumnSetTreeViewer) {
setTreeViewer = (AnalysisColumnSetTreeViewer) treeViewer;
}
}
/*
* (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 TooltipTree(parent, SWT.MULTI | SWT.BORDER) {
@Override
protected String getItemTooltipText(TreeItem item) {
ModelElementIndicator meIndicator = (ModelElementIndicator) item.getData(MODELELEMENT_INDICATOR_KEY);
IRepositoryNode parentNodeForColumnNode = RepositoryNodeHelper.getParentNodeForColumnNode(meIndicator
.getModelElementRepositoryNode());
return DefaultMessagesImpl.getString(
"AnalysisColumnTreeViewer.columnParent", parentNodeForColumnNode.getObject().getLabel()); //$NON-NLS-1$ //;
}
};
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.pattern"); //$NON-NLS-1$
createTreeItem(newTree, 80, "AnalysisColumnTreeViewer.operation"); //$NON-NLS-1$
parent.layout();
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);
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);
delButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
removeSelectedElements();
notifyObservers();
}
});
final Button moveUpButton = new Button(buttonsComp, SWT.NULL);
moveUpButton.setText(DefaultMessagesImpl.getString("ColumnsComparisonMasterDetailsPage.moveUp")); //$NON-NLS-1$
moveUpButton.setLayoutData(buttonGridData);
moveUpButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
moveElement(setTreeViewer, -1);
notifyObservers();
}
});
final Button moveDownButton = new Button(buttonsComp, SWT.NULL);
moveDownButton.setText(DefaultMessagesImpl.getString("ColumnsComparisonMasterDetailsPage.moveDown")); //$NON-NLS-1$
moveDownButton.setLayoutData(buttonGridData);
moveDownButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
moveElement(setTreeViewer, 1);
notifyObservers();
}
});
buttons.put("delButton", delButton);//$NON-NLS-1$
buttons.put("moveUpButton", moveUpButton);//$NON-NLS-1$
buttons.put("moveDownButton", moveDownButton);//$NON-NLS-1$
enabledButtons(false);
}
/**
*
* DOC zshen Comment method "enabledButtons".
*
* @param enabled the state of buttons .
*
* change the state of buttons.
*/
public void enabledButtons(boolean enabled) {
boolean moveEnabled = enabled;
TreeItem[] selectItems = getTree().getSelection();
if (!isSelectedColumn(selectItems)) {
moveEnabled = false;
}
buttons.get("delButton").setEnabled(enabled);//$NON-NLS-1$
buttons.get("moveUpButton").setEnabled(moveEnabled);//$NON-NLS-1$
buttons.get("moveDownButton").setEnabled(moveEnabled);//$NON-NLS-1$
}
/**
*
* DOC zshen Comment method "moveElement".
*
* @param columnsElementViewer
* @param step
*
* move the element of the columnList to up or down.
*/
private void moveElement(AnalysisColumnSetTreeViewer columnsElementViewer, int step) {
Tree currentTree = columnsElementViewer.getTree();
Object[] selectItem = currentTree.getSelection();
List<IRepositoryNode> columnList = columnsElementViewer.getColumnSetMultiValueList();
// get all the selected index list first which is used to check how to move
List<Object> allSelectedItemList = new ArrayList<Object>();
for (Object element : selectItem) {
allSelectedItemList.add(element);
}
int index = 0;
RepositoryNode moveElement = null;
List<Integer> indexArray = new ArrayList<Integer>();
for (Object element : selectItem) {
index = currentTree.indexOf((TreeItem) element);
int changeIndex = index + step;
if (changeIndex > -1 && changeIndex < columnList.size()) {
Object treeElement = ((TreeItem) element).getData(AnalysisColumnNominalIntervalTreeViewer.COLUMN_INDICATOR_KEY);
// MOD by zshen for bug 15750 TODO 39 columnset analysis move up/down one column will get exception.
if (treeElement instanceof ModelElement) {
moveElement = RepositoryNodeHelper.recursiveFind((ModelElement) treeElement);
} else if (treeElement instanceof RepositoryNode) {
moveElement = (RepositoryNode) treeElement;
}
columnList.remove(moveElement);
// when the changed one is the selected one too, get next one
while (allSelectedItemList.contains(currentTree.getItem(changeIndex))) {
++changeIndex;
}
columnList.add(changeIndex, moveElement);
indexArray.add(changeIndex);
ModelElementIndicator tmpElement = modelElementIndicators[changeIndex];
modelElementIndicators[changeIndex] = modelElementIndicators[index];
modelElementIndicators[index] = tmpElement;
allSelectedItemList.remove(element);
} else {
return;
}
}
// columnsElementViewer.setInput(columnList.toArray());
setElements(modelElementIndicators);
currentTree = columnsElementViewer.getTree();
for (int i = 0; i < indexArray.size(); i++) {
currentTree.select(currentTree.getItem(indexArray.get(i)));
}
}
/**
* DOC bZhou Comment method "addTargetDND".
*
* @param newTree
*/
private void addTargetDND(final Tree newTree) {
ColumnViewerDND.installDND(newTree);
}
@Override
public void setInput(Object[] objs) {
if (objs != null && objs.length != 0) {
List<DBColumnRepNode> columnList = new ArrayList<DBColumnRepNode>();
for (Object obj : objs) {
// TDQ-11926: create column set analysis by right click "Analyses" in wizard select db table node,
// default is should be sql engine.
if (obj instanceof DBTableRepNode || obj instanceof DBViewRepNode) {
columnList.addAll((Collection<? extends DBColumnRepNode>) ((ColumnSetRepNode) obj).getAllColumns());
} else if (obj instanceof DBColumnRepNode) {
columnList.add((DBColumnRepNode) obj);
}
}
// MOD yyi 2010-05-13 12828
Collections.reverse(columnList);
// MOD qiongli 2011-3-15 set DataFilterText disabled except TdColumn.
if (masterPage.getDataFilterComp() != null) {
masterPage.getDataFilterComp().getDataFilterText().setEnabled(!columnList.isEmpty());
if (columnList.isEmpty()) {// when the selected column is not DB type,will disable the execute engine
// combobox.
masterPage.changeExecuteLanguageToJava(true);
} else {// when the selected column is back to DB type, should enable the execute engine combobox again.
masterPage.enableExecuteLanguage();
}
}
ModelElementIndicator[] newSelects = translateSelectedNodeIntoIndicator(objs);
List<ModelElementIndicator> indicatorList = new ArrayList<ModelElementIndicator>();
if (newSelects != null) {
// do not replace the original one(which may contains some indicator units), only add the new column
// indicator;
for (ModelElementIndicator column : newSelects) {
// if the modelElementIndicators contains selected column, add the column in modelElementIndicators
// to ColumnIndicatorList
boolean isOld = false;
for (ModelElementIndicator oldColumn : modelElementIndicators) {
if (oldColumn.getModelElementRepositoryNode().equals(column.getModelElementRepositoryNode())) {
indicatorList.add(oldColumn);
isOld = true;
break;
}
}
// else add this column in filterInputData to ColumnIndicatorList
if (!isOld) {
indicatorList.add(column);
}
}
this.modelElementIndicators = indicatorList.toArray(new ModelElementIndicator[indicatorList.size()]);
this.setElements(modelElementIndicators);
}
} else {
TreeItem[] items = this.tree.getItems();
for (TreeItem item : items) {
this.removeItemBranch(item);
}
super.setInput(objs);
}
}
@Override
public void setElements(ModelElementIndicator[] elements) {
this.tree.dispose();
this.tree = createTree(this.parentComp);
tree.setData(this);
// MOD mzhao bug 8282 2009-7-31 Clear column cache.
columnSetMultiValueList.clear();
this.modelElementIndicators = elements;
addItemElements(elements);
// MOD mzhao 2009-05-05 bug 6587.
updateBindConnection(masterPage, tree);
}
private void addItemElements(final ModelElementIndicator[] elements) {
// MOD qiongli 2011-1-27,change TdColumn to MetadataColumn for supporting delimited file.
for (ModelElementIndicator element2 : elements) {
final ModelElementIndicator meIndicator = element2;
final ModelElement modelElement = RepositoryNodeHelper
.getSubModelElement(meIndicator.getModelElementRepositoryNode());
final TreeItem treeItem = new TreeItem(tree, SWT.NONE);
MetadataHelper.setDefaultDataminingType(modelElement);
columnSetMultiValueList.add(meIndicator.getModelElementRepositoryNode());
treeItem.setImage(ImageLib.getImage(ImageLib.TD_COLUMN));
treeItem.setText(0, getModelElemetnDisplayName(meIndicator));
treeItem.setData(COLUMN_INDICATOR_KEY, modelElement);
treeItem.setData(MODELELEMENT_INDICATOR_KEY, meIndicator);
// MOD mzhao feature 13040 , 2010-05-21
TreeEditor comboEditor = new TreeEditor(tree);
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(modelElement);
if (dataminingType == null) {
combo.select(0);
} else {
combo.setText(dataminingType.getLiteral());
}
combo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
MetadataHelper.setDataminingType(DataminingType.get(combo.getText()), modelElement);
setDirty(true);
}
});
combo.setEditable(false);
comboEditor.minimumWidth = WIDTH1_CELL;
comboEditor.setEditor(combo, treeItem, 1);
TreeEditor addPatternEditor = new TreeEditor(tree);
Label addPatternLabl = createTreeItemLabel(tree, ImageLib.ADD_PATTERN, "AnalysisColumnTreeViewer.addPattern"); //$NON-NLS-1$
PatternMouseAdapter mouseAdapter = new PatternMouseAdapter(this, masterPage, meIndicator, treeItem);
mouseAdapter.addFilter(new ViewerFilter() {
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (element instanceof IFolder) {
IFolder folder = (IFolder) element;
return !folder.getName().endsWith("SQL");//$NON-NLS-1$
}
return true;
}
});
addPatternLabl.addMouseListener(mouseAdapter);
addPatternEditor.minimumWidth = addPatternLabl.getImage().getBounds().width;
addPatternEditor.setEditor(addPatternLabl, treeItem, 2);
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(meIndicator.getModelElementRepositoryNode());
if (treeItem.getParentItem() != null && treeItem.getParentItem().getData(INDICATOR_UNIT_KEY) != null) {
setElements(modelElementIndicators);
} else {
deleteIndicatorItems(meIndicator);
removeItemBranch(treeItem);
enabledButtons(false);
}
notifyObservers();
}
});
delLabelEditor.minimumWidth = delLabel.getImage().getBounds().width;
delLabelEditor.horizontalAlignment = SWT.CENTER;
delLabelEditor.setEditor(delLabel, treeItem, 3);
treeItem.setData(ITEM_EDITOR_KEY, new TreeEditor[] { comboEditor, addPatternEditor, delLabelEditor });
if (meIndicator.hasIndicators()) {
createIndicatorItems(treeItem, meIndicator.getIndicatorUnits());
}
delLabelEditor.layout();
treeItem.setExpanded(false);
}
tree.layout();
tree.redraw();
this.setDirty(true);
tree.forceFocus();
}
private boolean isSelectedColumn(TreeItem[] items) {
for (TreeItem item : items) {
if (item.getData(AbstractColumnDropTree.INDICATOR_UNIT_KEY) != null) {
return false;
}
}
return true;
}
@Override
public void addElements(final ModelElementIndicator[] elements) {
RepositoryNode[] columns = new RepositoryNode[elements.length];
for (int i = 0; i < elements.length; i++) {
columns[i] = (RepositoryNode) elements[i].getModelElementRepositoryNode();
}
List<IRepositoryNode> oriColumns = getColumnSetMultiValueList();
for (RepositoryNode column : columns) {
if (!RepositoryNodeHelper.containsModelElementNode(oriColumns, column)) {
oriColumns.add(column);
}
}
setInput(oriColumns.toArray());
// MOD qiongli 2010-6-4,bug 0012766,after drag and drop a column from left view,update the connection state
updateBindConnection(masterPage, tree);
// ADD msjian TDQ-11606: refresh the datapreview part after add a new element
ModelElementIndicator[] newsArray = new ModelElementIndicator[getAllTheElementIndicator().length + elements.length];
System.arraycopy(getAllTheElementIndicator(), 0, newsArray, 0, getAllTheElementIndicator().length);
for (int i = 0; i < elements.length; i++) {
newsArray[getAllTheElementIndicator().length + i] = elements[i];
}
masterPage.refreshPreviewTable(newsArray, true);
// ADD msjian TDQ-11606~
}
/**
* DOC xzhao Comment method "deleteTreeElements".
*
* @param columnIndicators
* @param deleteColumnIndiciators
*/
private void deleteColumnItems(IRepositoryNode deleteColumn) {
List<IRepositoryNode> remainColumns = columnSetMultiValueList;
for (int j = 0; j < columnSetMultiValueList.size(); j++) {
RepositoryNode column = (RepositoryNode) columnSetMultiValueList.get(j);
if (deleteColumn.getObject().getId() == column.getObject().getId()) {
remainColumns.remove(j);
}
}
this.columnSetMultiValueList = remainColumns;
}
public List<IRepositoryNode> getColumnSetMultiValueList() {
return this.columnSetMultiValueList;
}
/**
* Remove the selected elements(eg:TdColumn or Indicator) from tree.
*
* @param newTree
*/
private void removeSelectedElements(final Tree newTree) {
removeSelectedElements();
}
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) {
if (e.item instanceof TreeItem) {
enabledButtons(true);
AnalysisColumnSetMenuProvider analysisColumnSetMenuProvider = new AnalysisColumnSetMenuProvider(tree);
analysisColumnSetMenuProvider.createTreeMenu(Boolean.TRUE);
analysisColumnSetMenuProvider.showDetailView(tree);
}
}
});
tree.addTreeListener(treeAdapter);
}
/*
* (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.getAnalysisHandler().getAnalysis();
}
/**
* Getter for analysis.
*
* @return the analysis
*/
public IRepositoryNode getAnalysisNode() {
return this.masterPage.getCurrentRepNode();
}
public Tree getTree() {
return tree;
}
@Override
public void updateModelViewer() {
// TDQ-11927 msjian: fix for column set analysis, when the connection is changed, refresh the data preview part
masterPage.recomputeIndicators();
columnSetMultiValueList.clear();
modelElementIndicators = masterPage.getCurrentModelElementIndicators();
masterPage.refreshPreviewTable(modelElementIndicators, true);
masterPage.refreshTheTree(modelElementIndicators);
}
@Override
public boolean canDrop(IRepositoryNode reposNode) {
// MOD klliu bug 19991 note 0077019 2011-03-29
Set<EObject> nodeTypeName = new HashSet<EObject>();
for (IRepositoryNode rd : columnSetMultiValueList) {
ModelElement modelElementFromRepositoryNode = RepositoryNodeHelper.getModelElementFromRepositoryNode(rd);
EObject eContainer = modelElementFromRepositoryNode.eContainer();
nodeTypeName.add(eContainer);
}
ModelElement modelElement = RepositoryNodeHelper.getModelElementFromRepositoryNode(reposNode);
nodeTypeName.add(modelElement.eContainer());
if (nodeTypeName.size() > 1) {
return false;
}
// ~
List<IRepositoryNode> existColumns = new ArrayList<IRepositoryNode>();
for (IRepositoryNode columnFromMultiValueList : this.getColumnSetMultiValueList()) {
existColumns.add(columnFromMultiValueList);
}
if (existColumns.contains(reposNode)) {
return false;
}
return true;
}
/*
* (non-Javadoc)
*
* @see
* org.talend.dataprofiler.core.ui.editor.composite.AbstractColumnDropTree#openIndicatorOptionDialog(org.eclipse
* .swt.widgets.Shell, org.eclipse.swt.widgets.TreeItem)
*/
@Override
public boolean openIndicatorOptionDialog(Shell shell, TreeItem indicatorItem) {
// MOD msjian TDQ-8551 2014-4-15: columnset analysis can not set options for pattern types
openNoIndicatorOptionsMessageDialog(shell);
// TDQ-8551~
return false;
}
/**
*
* DOC qiongli Comment method "getModelElemetnDisplayName".
*
* @param meIndicator
* @return
*/
private String getModelElemetnDisplayName(ModelElementIndicator meIndicator) {
if (meIndicator.getModelElementRepositoryNode() == null) {
return "null"; //$NON-NLS-1$
}
String meName = meIndicator.getElementName();
String typeName = "";//$NON-NLS-1$
if (meIndicator instanceof ColumnIndicator) {
// MOD scorreia 2010-10-20 bug 16403 avoid NPE here
TdSqlDataType sqlDataType = ((ColumnIndicator) meIndicator).getTdColumn().getSqlDataType();
typeName = sqlDataType != null ? sqlDataType.getName() : "unknown";//$NON-NLS-1$
} else if (meIndicator instanceof DelimitedFileIndicatorImpl) {
MetadataColumn mColumn = ((DelimitedFileIndicatorImpl) meIndicator).getMetadataColumn();
typeName = TalendTypeConvert.convertToJavaType(mColumn.getTalendType());
}
return meName != null ? meName + PluginConstant.SPACE_STRING + PluginConstant.PARENTHESIS_LEFT + typeName
+ PluginConstant.PARENTHESIS_RIGHT : "null";//$NON-NLS-1$
}
/*
* (non-Javadoc)
*
* @see
* org.talend.dataprofiler.core.ui.editor.composite.AbstractColumnDropTree#removeItemBranch(org.eclipse.swt.widgets
* .TreeItem)
*/
@Override
protected void removeItemBranch(TreeItem item) {
// MOD yyi 2011-03-22 19460: The "remove elements" option on the contextual menu does not work
IndicatorUnit unit = (IndicatorUnit) item.getData(INDICATOR_UNIT_KEY);
ModelElementIndicator meIndicator = (ModelElementIndicator) item.getData(MODELELEMENT_INDICATOR_KEY);
// MOD klliu check the item is column or pattern
if (item.getData(COLUMN_INDICATOR_KEY) != null) {
deleteColumnItems(meIndicator.getModelElementRepositoryNode());
deleteModelElementItems(meIndicator);
masterPage.setCurrentModelElementIndicators(modelElementIndicators);
}
if (null != unit) {
meIndicator.removeIndicatorUnit(unit);
}
super.removeItemBranch(item);
// add msjian TDQ-8860 2014-4-30:check whether show allmatchindicator in the indicators section.
EventManager.getInstance().publish(this.getAnalysis(), EventEnum.DQ_COLUMNSET_SHOW_MATCH_INDICATORS, null);
// TDQ-8860~
// MOD mzhao 2009-06-8, bug 5887.
updateBindConnection(masterPage, tree);
enabledButtons(false);
tree.setFocus();
}
public void removeItemByUnit(IndicatorUnit unit) {
for (TreeItem item : this.tree.getItems()) {
if (unit.getIndicatorName().equals(item.getText())) {
this.removeItemBranch(item);
break;
}
}
}
/**
* DOC yyi AnalysisColumnSetTreeViewer class global comment. Detailled comment
*/
class AnalysisColumnSetMenuProvider extends ModelElementTreeMenuProvider {
/**
* DOC yyi AnalysisColumnSetMenuProvider constructor comment.
*
* @param tree
*/
public AnalysisColumnSetMenuProvider(Tree tree) {
super(tree);
}
@Override
protected void removeSelectedElements2(Tree theTree) {
removeSelectedElements(theTree);
notifyObservers();
}
@Override
protected IRepositoryNode getAnalysis2() {
return getAnalysisNode();
}
}
public ExecutionLanguage getLanguage() {
return this.language;
}
public void setLanguage(ExecutionLanguage language) {
this.language = language;
}
/**
* DOC yyi 2011-03-14 19460:remove selected element form the tree
*/
private void removeSelectedElements() {
TreeItem[] selection = tree.getSelection();
for (TreeItem treeItem : selection) {
removeItemBranch(treeItem);
}
}
/*
* (non-Javadoc)
*
* @see org.talend.dataprofiler.core.ui.grid.utils.TDQObserver#update(java.lang.Object)
*/
@Override
public void update(Map<String, Integer> columnIndexMap) {
ModelElementIndicator[] reorderModelElement = reorderModelElement(masterPage.getCurrentModelElementIndicators(),
columnIndexMap);
masterPage.refreshTheTree(reorderModelElement);
masterPage.setDirty(true);
}
@Override
protected ModelElementIndicator[] getAllTheElementIndicator() {
return masterPage.getCurrentModelElementIndicators();
}
}