// ============================================================================
//
// 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 java.util.Map;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.TreeEditor;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.TreeAdapter;
import org.eclipse.swt.events.TreeEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
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.swt.widgets.TreeItem;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.repository.model.repositoryObject.MetadataColumnRepositoryObject;
import org.talend.cwm.db.connection.ConnectionUtils;
import org.talend.dataprofiler.core.ImageLib;
import org.talend.dataprofiler.core.PluginConstant;
import org.talend.dataprofiler.core.helper.ModelElementIndicatorHelper;
import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl;
import org.talend.dataprofiler.core.model.ModelElementIndicator;
import org.talend.dataprofiler.core.ui.editor.analysis.AbstractAnalysisMetadataPage;
import org.talend.dataprofiler.core.ui.editor.preview.IndicatorUnit;
import org.talend.dataprofiler.core.ui.grid.utils.Observerable;
import org.talend.dataprofiler.core.ui.grid.utils.TDQObserver;
import org.talend.dataprofiler.core.ui.utils.OpeningHelpWizardDialog;
import org.talend.dataprofiler.core.ui.utils.RepNodeUtils;
import org.talend.dataprofiler.core.ui.wizard.indicator.IndicatorOptionsWizard;
import org.talend.dataprofiler.core.ui.wizard.indicator.forms.FormEnum;
import org.talend.dataquality.analysis.Analysis;
import org.talend.dataquality.analysis.ExecutionLanguage;
import org.talend.dataquality.domain.Domain;
import org.talend.dataquality.domain.pattern.Pattern;
import org.talend.dataquality.indicators.DateParameters;
import org.talend.dataquality.indicators.FrequencyIndicator;
import org.talend.dataquality.indicators.IndicatorParameters;
import org.talend.dataquality.indicators.IndicatorsPackage;
import org.talend.dataquality.indicators.TextParameters;
import org.talend.dataquality.indicators.definition.IndicatorDefinition;
import org.talend.dq.helper.EObjectHelper;
import org.talend.dq.nodes.DBColumnRepNode;
import org.talend.dq.nodes.DFColumnRepNode;
import org.talend.dq.nodes.indicator.type.IndicatorEnum;
import org.talend.repository.model.IRepositoryNode;
import orgomg.cwm.foundation.softwaredeployment.DataManager;
import orgomg.cwm.foundation.softwaredeployment.DataProvider;
import orgomg.cwm.objectmodel.core.ModelElement;
/**
* The interface class to handle the change when drop columns. MOD mzhao, refactor codes for feature:13040, 2010-05-21
*/
public abstract class AbstractColumnDropTree extends AbstractPagePart implements Observerable<ModelElement[]>,
TDQObserver<Map<String, Integer>> {
public static final String COLUMN_INDICATOR_KEY = "COLUMN_INDICATOR_KEY"; //$NON-NLS-1$
public static final String TABLE_INDICATOR_KEY = "TABLE_INDICATOR_KEY"; //$NON-NLS-1$
public static final String COLUMNVIEWER_KEY = "COLUMNVIEWER_KEY"; //$NON-NLS-1$
public static final String INDICATOR_UNIT_KEY = "INDICATOR_UNIT_KEY"; //$NON-NLS-1$
public static final String MODELELEMENT_INDICATOR_KEY = "MODELELEMENT_INDICATOR_KEY"; //$NON-NLS-1$
public static final String ITEM_EDITOR_KEY = "ITEM_EDITOR_KEY"; //$NON-NLS-1$
protected static final int WIDTH1_CELL = 75;
public abstract boolean canDrop(IRepositoryNode reposNode);
protected Tree tree;
protected ModelElementIndicator[] modelElementIndicators;
protected AbstractAnalysisMetadataPage absMasterPage = null;
private List<TDQObserver<ModelElement[]>> Observers = null;
protected TreeAdapter treeAdapter = new TreeAdapter() {
@Override
public void treeCollapsed(TreeEvent e) {
ExpandableComposite theSuitedComposite = getTheSuitedComposite(e);
if (theSuitedComposite != null && theSuitedComposite.isExpanded()) {
theSuitedComposite.setExpanded(false);
}
layoutChartCompositeRefolwForm();
}
@Override
public void treeExpanded(TreeEvent e) {
ExpandableComposite theSuitedComposite = getTheSuitedComposite(e);
if (theSuitedComposite != null && !theSuitedComposite.isExpanded()) {
theSuitedComposite.setExpanded(true);
} else {
propertyChangeSupport.firePropertyChange(PluginConstant.EXPAND_TREE, null, e.item);
}
layoutChartCompositeRefolwForm();
}
/**
* layout ChartComposite and Refolw Form.
*/
public void layoutChartCompositeRefolwForm() {
Composite comp = getMasterPage().getChartComposite();
if (comp != null && !comp.isDisposed()) {
comp.getParent().pack();
}
}
};
/**
* Getter for MasterPage.
*
* @return the MasterPage
*/
public AbstractAnalysisMetadataPage getMasterPage() {
return this.absMasterPage;
}
/**
* DOC msjian Comment method "getTheSuitedComposite".
*
* @param e
* @return
*/
public ExpandableComposite getTheSuitedComposite(SelectionEvent e) {
return null;
}
protected String viewKey = null;
/**
* DOC qzhang Comment method "createOneUnit".
*
* @param treeItem
* @param indicatorUnit
*/
public void createOneUnit(final TreeItem treeItem, IndicatorUnit indicatorUnit) {
final TreeItem indicatorItem = new TreeItem(treeItem, SWT.NONE);
final IndicatorUnit unit = indicatorUnit;
IndicatorEnum indicatorType = indicatorUnit.getType();
indicatorItem.setData(MODELELEMENT_INDICATOR_KEY, treeItem.getData(MODELELEMENT_INDICATOR_KEY));
indicatorItem.setData(INDICATOR_UNIT_KEY, unit);
indicatorItem.setData(viewKey, this);
indicatorItem.setImage(0, getIndicatorImage(unit));
String indicatorName = getIndicatorName(indicatorUnit);
String label = indicatorName == null ? "unknown indicator" : indicatorName;//$NON-NLS-1$
indicatorItem.setText(0, label);
TreeEditor optionEditor = new TreeEditor(tree);
final Label optionLabel = createTreeItemLabel(tree, ImageLib.OPTION, "AnalysisColumnTreeViewer.options"); //$NON-NLS-1$
optionLabel.setData(indicatorUnit);
optionLabel.addMouseListener(new MouseAdapter() {
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt .events.MouseEvent)
*/
@Override
public void mouseDown(MouseEvent e) {
boolean hasIndicatorParameters = openIndicatorOptionDialog(Display.getCurrent().getActiveShell(), indicatorItem);
if (hasIndicatorParameters) {
optionLabel.setImage(ImageLib.getImage(ImageLib.INDICATOR_OPTION_CHECKED));
}
}
});
optionEditor.minimumWidth = optionLabel.getImage().getBounds().width;
optionEditor.horizontalAlignment = SWT.CENTER;
optionEditor.setEditor(optionLabel, indicatorItem, 1);
// }
TreeEditor delEditor = new TreeEditor(tree);
Label delLabel = createTreeItemLabel(tree, ImageLib.DELETE_ACTION, "AnalysisColumnTreeViewer.delete"); //$NON-NLS-1$
delLabel.addMouseListener(new MouseAdapter() {
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt .events.MouseEvent)
*/
@Override
public void mouseDown(MouseEvent e) {
// current delLabel is behind of one indicator item.
ModelElementIndicator meIndicator = (ModelElementIndicator) treeItem.getData(MODELELEMENT_INDICATOR_KEY);
deleteIndicatorItems(meIndicator, unit);
if (indicatorItem.getParentItem() != null && indicatorItem.getParentItem().getData(INDICATOR_UNIT_KEY) != null) {
setElements(modelElementIndicators);
} else {
removeItemBranch(indicatorItem);
}
}
});
delEditor.minimumWidth = delLabel.getImage().getBounds().width;
delEditor.horizontalAlignment = SWT.CENTER;
// MOD mzhao feature 13040, column analysis have 5 columns, whereas columnset have 4 columns.
if (AnalysisColumnTreeViewer.VIEWER_KEY.equals(viewKey)) {
delEditor.setEditor(delLabel, indicatorItem, 4);
} else if (AnalysisColumnSetTreeViewer.VIEWER_KEY.equals(viewKey)) {
delEditor.setEditor(delLabel, indicatorItem, 3);
}
indicatorItem.setData(ITEM_EDITOR_KEY, new TreeEditor[] { optionEditor, delEditor });
if (indicatorType.hasChildren()) {
indicatorItem.setData(treeItem.getData(MODELELEMENT_INDICATOR_KEY));
createIndicatorItems(indicatorItem, indicatorUnit.getChildren());
}
if (hasIndicatorParameters(indicatorUnit)) {
optionLabel.setImage(ImageLib.getImage(ImageLib.INDICATOR_OPTION_CHECKED));
}
}
protected abstract void setElements(ModelElementIndicator[] modelElementIndicator);
public ModelElementIndicator[] getModelElementIndicator() {
return this.modelElementIndicators;
}
protected void createIndicatorItems(final TreeItem treeItem, IndicatorUnit[] indicatorUnits) {
for (IndicatorUnit indicatorUnit : indicatorUnits) {
createOneUnit(treeItem, indicatorUnit);
}
}
protected void removeItemBranch(TreeItem item) {
TreeEditor[] editors = (TreeEditor[]) item.getData(ITEM_EDITOR_KEY);
if (editors != null) {
for (TreeEditor editor : editors) {
editor.getEditor().dispose();
editor.dispose();
}
}
if (item.getItemCount() == 0) {
item.dispose();
this.setDirty(true);
return;
}
TreeItem[] items = item.getItems();
for (TreeItem item2 : items) {
removeItemBranch(item2);
}
item.dispose();
this.setDirty(true);
}
/**
* remove special indicatorUnit which in the ModelElementIndicator.
*
* @param meIndicator remove from here
* @param inidicatorUnit should be removed
*/
protected void deleteIndicatorItems(ModelElementIndicator meIndicator, IndicatorUnit inidicatorUnit) {
meIndicator.removeIndicatorUnit(inidicatorUnit);
}
/**
*
* remove all the indicatorUnit which in the ModelElementIndicator.
*
* @param meIndicator
*
*/
protected void deleteIndicatorItems(ModelElementIndicator meIndicator) {
for (IndicatorUnit indiUnit : meIndicator.getIndicatorUnits()) {
deleteIndicatorItems(meIndicator, indiUnit);
}
}
/**
* open Indicator Option Dialog.
*
* @param shell
* @param indicatorItem
* @return
*/
public boolean openIndicatorOptionDialog(Shell shell, TreeItem indicatorItem) {
IndicatorUnit indicatorUnit = (IndicatorUnit) indicatorItem.getData(INDICATOR_UNIT_KEY);
if (FormEnum.isExsitingForm(indicatorUnit)) {
IndicatorOptionsWizard wizard = new IndicatorOptionsWizard(indicatorUnit);
String href = FormEnum.getFirstFormHelpHref(indicatorUnit);
OpeningHelpWizardDialog optionDialog = new OpeningHelpWizardDialog(shell, wizard, href);
if (Window.OK == optionDialog.open()) {
setDirty(wizard.isDirty());
return hasIndicatorParameters(indicatorUnit);
}
} else {
openNoIndicatorOptionsMessageDialog(shell);
}
return false;
}
/**
* DOC msjian Comment method "openNoIndicatorOptionsMessageDialog".
*
* @param shell
*/
public void openNoIndicatorOptionsMessageDialog(Shell shell) {
MessageDialogWithToggle.openInformation(shell, DefaultMessagesImpl.getString("AnalysisColumnTreeViewer.information"), //$NON-NLS-1$
DefaultMessagesImpl.getString("AnalysisColumnTreeViewer.nooption")); //$NON-NLS-1$
}
/**
* DOC xqliu Comment method "getIndicatorIamge".
*
* @param indicatorUnit
* @return
*/
private Image getIndicatorImage(IndicatorUnit indicatorUnit) {
IndicatorEnum indicatorType = indicatorUnit.getType();
if (indicatorType == IndicatorEnum.RegexpMatchingIndicatorEnum
|| indicatorType == IndicatorEnum.SqlPatternMatchingIndicatorEnum) {
return ImageLib.getImage(ImageLib.PATTERN_REG);
}
return ImageLib.getImage(ImageLib.IND_DEFINITION);
}
/**
* ADD yyi 2010-04-20 12173:update indicator name.
*
* @param unit
* @return
*/
protected String getIndicatorName(IndicatorUnit unit) {
IndicatorEnum indicatorType = unit.getType();
if (indicatorType == IndicatorEnum.RegexpMatchingIndicatorEnum
|| indicatorType == IndicatorEnum.SqlPatternMatchingIndicatorEnum) {
Pattern pattern = unit.getIndicator().getParameters().getDataValidDomain().getPatterns().get(0);
return pattern.getName();
} else if (indicatorType == IndicatorEnum.UserDefinedIndicatorEnum) {
if (unit.getIndicatorName() != null) {
return unit.getIndicatorName();
} else {
IndicatorDefinition indicatorDefinition = unit.getIndicator().getIndicatorDefinition();
if (indicatorDefinition.eIsProxy()) {
indicatorDefinition = (IndicatorDefinition) EObjectHelper.resolveObject(indicatorDefinition);
}
return indicatorDefinition.getLabel();
}
}
return unit.getIndicatorName();
}
/**
* DOC msjian Comment method "hasIndicatorParameters".
*
* @param indicatorUnit
* @return
*/
private boolean hasIndicatorParameters(IndicatorUnit indicatorUnit) {
IndicatorParameters parameters = indicatorUnit.getIndicator().getParameters();
if (parameters == null) {
return false;
}
if (hideParameters(indicatorUnit)) {
return false;
}
if (indicatorUnit.getIndicator() instanceof FrequencyIndicator) {
// MOD hcheng bug 7377,2009-05-18,when bins is null,parameters not
// set on tree
if (parameters.getBins() == null) {
return false;
}
// ~
return true;
}
TextParameters tParameter = parameters.getTextParameter();
if (tParameter != null && !hideTextParameters(indicatorUnit)) {
return true;
}
DateParameters dParameters = parameters.getDateParameters();
if (dParameters != null) {
return true;
}
Domain indicatorValidDomain = parameters.getIndicatorValidDomain();
if (indicatorValidDomain != null) {
if (indicatorValidDomain.getRanges() != null && !indicatorValidDomain.getRanges().isEmpty()) {
return true;
}
}
Domain bins = parameters.getBins();
if (bins != null) {
return true;
}
return false;
}
public void dropModelElements(List<? extends IRepositoryNode> repositoryNode, int index) {
int size = repositoryNode.size();
ModelElementIndicator[] meIndicators = new ModelElementIndicator[size];
for (int i = 0; i < size; i++) {
IRepositoryNode repNode = repositoryNode.get(i);
IRepositoryViewObject repViewObj = repNode.getObject();
// TdColumn tdColumn = SwitchHelpers.COLUMN_SWITCH.doSwitch(repViewObj);
if (repNode instanceof DFColumnRepNode) {
meIndicators[i] = ModelElementIndicatorHelper.createDFColumnIndicator(repNode);
} else if (repViewObj != null && repViewObj instanceof MetadataColumnRepositoryObject) {
meIndicators[i] = ModelElementIndicatorHelper.createColumnIndicator(repNode);
}
}
addElements(meIndicators);
}
public abstract void addElements(final ModelElementIndicator[] elements);
public ModelElementIndicator[] filterInputData(Object[] objs) {
// Refactor yyin 20121122 TDQ-6329: if not needed, do not set the new selected objs to
// this.modelElementIndicators directly
this.modelElementIndicators = translateSelectedNodeIntoIndicator(objs);
return this.modelElementIndicators;
}
// translate the selected nodes into related indicators, without set the values to this.modelElementIndicators
// directly
protected ModelElementIndicator[] translateSelectedNodeIntoIndicator(Object[] objs) {
List<IRepositoryNode> reposList = RepNodeUtils.translateSelectedToStandardReposityoryNode(objs);
if (reposList.size() == 0) {
// MOD yyi 2012-02-29 TDQ-3605 Empty column table.
// this.modelElementIndicators = new ModelElementIndicator[0];
return new ModelElementIndicator[0];
}
// MOD qiongli 2011-1-7 feature 16796.
boolean isDelimitedFile = false;
if (objs != null && objs.length != 0) {
// MOD klliu 2011-02-16 feature 15387
isDelimitedFile = RepNodeUtils.isDelimitedFile(objs[0]);
if (!(reposList.get(0) instanceof DBColumnRepNode || isDelimitedFile)) {
return null;
}
}
List<ModelElementIndicator> modelElementIndicatorList = new ArrayList<ModelElementIndicator>();
for (ModelElementIndicator modelElementIndicator : getAllTheElementIndicator()) {
if (reposList.contains(modelElementIndicator.getModelElementRepositoryNode())) {
modelElementIndicatorList.add(modelElementIndicator);
reposList.remove(modelElementIndicator.getModelElementRepositoryNode());
}
}
for (IRepositoryNode repObj : reposList) {
ModelElementIndicator temp = isDelimitedFile ? ModelElementIndicatorHelper.createDFColumnIndicator(repObj)
: ModelElementIndicatorHelper.createColumnIndicator(repObj);
modelElementIndicatorList.add(temp);
}
return modelElementIndicatorList.toArray(new ModelElementIndicator[modelElementIndicatorList.size()]);
}
public ModelElementIndicator[] filterInputData(ModelElementIndicator[] objs) {
if (objs != null && objs.length > 0) {
this.modelElementIndicators = objs;
}
return this.modelElementIndicators;
}
public void setInput(Object[] objs) {
ModelElementIndicator[] filterInputData = filterInputData(objs);
if (filterInputData != null) {
this.modelElementIndicators = filterInputData;
}
this.setElements(modelElementIndicators);
}
private boolean hideParameters(IndicatorUnit indicatorUnit) {
EClass indicatorEclass = indicatorUnit.getIndicator().eClass();
if (indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getDateFrequencyIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getWeekFrequencyIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMonthFrequencyIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getQuarterFrequencyIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getYearFrequencyIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getDateLowFrequencyIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getWeekLowFrequencyIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMonthLowFrequencyIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getQuarterLowFrequencyIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getYearLowFrequencyIndicator())
// MOD yyi 2011-06-03 17740: enable thresholds for indicators
// indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMinLengthWithNullIndicator())
// || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMinLengthWithBlankIndicator())
// || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMinLengthWithBlankNullIndicator())
// || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMaxLengthWithNullIndicator())
// || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMaxLengthWithBlankIndicator())
// || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMaxLengthWithBlankNullIndicator())
// || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getAvgLengthWithNullIndicator())
// || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getAvgLengthWithBlankIndicator())
// || indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getAvgLengthWithBlankNullIndicator())
) {
return true;
}
return false;
}
/**
* ADD yyi 2011-07-18 17740: hide text parameter tree node for splited length indicators
*
* @param indicatorUnit
* @return
*/
private boolean hideTextParameters(IndicatorUnit indicatorUnit) {
EClass indicatorEclass = indicatorUnit.getIndicator().eClass();
if (indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMinLengthWithNullIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMinLengthWithBlankIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMinLengthWithBlankNullIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMaxLengthWithNullIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMaxLengthWithBlankIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMaxLengthWithBlankNullIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getAvgLengthWithNullIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getAvgLengthWithBlankIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getPhoneNumbStatisticsIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getAvgLengthWithBlankNullIndicator())
// MOD gdbu 2011-10-9 TDQ-3549
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMinLengthIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getMaxLengthIndicator())
|| indicatorEclass.equals(IndicatorsPackage.eINSTANCE.getAverageLengthIndicator())) {
// ~TDQ-3549
return true;
}
return false;
}
protected ModelElementIndicator[] getAllTheElementIndicator() {
return this.getModelElementIndicator();
}
// Refactor: move some same code into this parent
protected void createTreeDataminingItem(Tree newTree) {
TreeColumn column2 = new TreeColumn(newTree, SWT.CENTER);
column2.setWidth(120);
column2.setText(DefaultMessagesImpl.getString("AnalysisColumnTreeViewer.dataminingType")); //$NON-NLS-1$
column2.setToolTipText(DefaultMessagesImpl.getString("AnalysisColumnTreeViewer.columnTip")); //$NON-NLS-1$
}
// create the similar tree column
protected void createTreeItem(Tree newTree, int width, String text) {
TreeColumn column = new TreeColumn(newTree, SWT.CENTER);
column.setWidth(width);
column.setText(DefaultMessagesImpl.getString(text));
}
/*
* (non-Javadoc)
*
* @see
* org.talend.dataprofiler.core.ui.grid.utils.Observerable#addObserver(org.talend.dataprofiler.core.ui.grid.utils
* .TalendObserver)
*/
public boolean addObserver(TDQObserver<ModelElement[]> observer) {
initObserverable();
return Observers.add(observer);
}
/*
* (non-Javadoc)
*
* @see
* org.talend.dataprofiler.core.ui.grid.utils.Observerable#removeObserver(org.talend.dataprofiler.core.ui.grid.utils
* .TalendObserver)
*/
public boolean removeObserver(TDQObserver<ModelElement[]> observer) {
if (Observers == null) {
return false;
}
return Observers.remove(observer);
}
/*
* (non-Javadoc)
*
* @see org.talend.dataprofiler.core.ui.grid.utils.Observerable#clearObserver()
*/
public void clearObserver() {
if (Observers == null) {
return;
}
Observers.clear();
}
/*
* (non-Javadoc)
*
* @see org.talend.dataprofiler.core.ui.grid.utils.Observerable#notifyObservers()
*/
public void notifyObservers() {
if (Observers == null) {
return;
}
for (TDQObserver<ModelElement[]> observer : Observers) {
observer.update(ModelElementIndicatorHelper.getModelElementFromMEIndicator(getAllTheElementIndicator()));
}
}
/*
* (non-Javadoc)
*
* @see org.talend.dataprofiler.core.ui.grid.utils.Observerable#initObserverable()
*/
private void initObserverable() {
if (Observers == null) {
Observers = new ArrayList<TDQObserver<ModelElement[]>>();
}
}
/*
* (non-Javadoc)
*
* @see org.talend.dataprofiler.core.ui.grid.utils.TDQObserver#update(java.lang.Object)
*/
public void update(Map<String, Integer> columnIndexMap) {
// the sub class must implement this
}
/*
* (non-Javadoc)
*
* @see org.talend.dataprofiler.core.ui.grid.utils.TDQObserver#update(int)
*/
public void update(int EventType) {
// do nothing until now
}
/**
* DOC talend Comment method "reorderModelElement".
*
* @param currentModelElementIndicators
*/
public ModelElementIndicator[] reorderModelElement(ModelElementIndicator[] currentModelElementIndicators,
Map<String, Integer> columnIndexMap) {
ModelElementIndicator[] sortedModelElements = new ModelElementIndicator[currentModelElementIndicators.length];
for (ModelElementIndicator currModelElement : currentModelElementIndicators) {
String columnName = currModelElement.getElementName();
sortedModelElements[columnIndexMap.get(columnName)] = currModelElement;
}
return sortedModelElements;
}
/**
* DOC rli Comment method "deleteTreeElements".
*
* @param deleteModelElementIndiciator
*/
public void deleteModelElementItems(ModelElementIndicator deleteModelElementIndiciator) {
ModelElementIndicator[] remainIndicators = new ModelElementIndicator[modelElementIndicators.length - 1];
int i = 0;
for (ModelElementIndicator indicator : modelElementIndicators) {
if (deleteModelElementIndiciator.equals(indicator)) {
continue;
} else {
remainIndicators[i] = indicator;
i++;
}
}
this.modelElementIndicators = remainIndicators;
initializedConnection(this.modelElementIndicators);
}
/**
* DOC msjian Comment method "initializedConnection". for 6560
*
* @param indicators
*/
void initializedConnection(ModelElementIndicator[] indicators) {
Analysis analysis = getMasterPage().getAnalysisHandler().getAnalysis();
DataManager connection = analysis.getContext().getConnection();
// Connection tdDataProvider = null;
boolean enableWhereClauseFlag = true;
boolean enableExecuteLanguageFlag = false;
// ~
if (indicators != null && indicators.length > 0) {
if (connection == null) {
connection = ModelElementIndicatorHelper.getTdDataProvider(indicators[0]);
analysis.getContext().setConnection(connection);
}
if (connection != null && getMasterPage().getExecCombo() != null) {
if (ConnectionUtils.isDelimitedFileConnection((DataProvider) connection)) {
getMasterPage().setWhereClauseDisabled();
// when the selected column is not DB type,will disable the execute engine combobox.
getMasterPage().changeExecuteLanguageToJava(true);
enableWhereClauseFlag = false;
enableExecuteLanguageFlag = false;
} else {// when the selected column is back to DB type, should enable the execute engine combobox again.
getMasterPage().enableExecuteLanguage();
}
}
}
// MOD klliu if default ExecutionLanguage is java,it is not changed to SQL.2011-11-21
String execLang = analysis.getParameters().getExecutionLanguage().getLiteral();
if (execLang != null && ExecutionLanguage.JAVA.getLiteral().equals(execLang)
&& (ConnectionUtils.isDelimitedFileConnection((DataProvider) connection))) {
enableExecuteLanguageFlag = false;
}
if (enableWhereClauseFlag) {
getMasterPage().setWhereClauseEnable();
}
if (enableExecuteLanguageFlag) {
getMasterPage().changeExecuteLanguageToSql(true);
}
}
}