// ============================================================================ // // 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.action; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.action.Action; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.ui.PlatformUI; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.cwm.helper.ConnectionHelper; import org.talend.cwm.helper.PackageHelper; import org.talend.dataprofiler.core.ImageLib; import org.talend.dataprofiler.core.model.TableIndicator; import org.talend.dataprofiler.core.ui.editor.analysis.AnalysisEditor; import org.talend.dataprofiler.core.ui.editor.analysis.BusinessRuleAnalysisDetailsPage; import org.talend.dataprofiler.core.ui.wizard.analysis.WizardFactory; import org.talend.dataprofiler.core.ui.wizard.analysis.table.TableAnalysisWizard; import org.talend.dataquality.analysis.AnalysisType; import org.talend.dq.analysis.parameters.AnalysisParameter; import org.talend.dq.nodes.DBTableRepNode; import org.talend.dq.nodes.DBViewRepNode; import org.talend.dq.nodes.indicator.type.IndicatorEnum; import orgomg.cwm.resource.relational.NamedColumnSet; /** * DOC xqliu class global comment. Detailled comment */ public abstract class AbstractPredefinedTableAnalysisAction extends Action { private TreeSelection selection; private Wizard wizard; private final ImageDescriptor defaultImage = ImageLib.getImageDescriptor(ImageLib.ACTION_NEW_ANALYSIS); public AbstractPredefinedTableAnalysisAction(String name, ImageDescriptor image) { super(name); if (image == null) { super.setImageDescriptor(defaultImage); } else { super.setImageDescriptor(image); } } public TreeSelection getSelection() { return selection; } public void setSelection(TreeSelection selection) { this.selection = selection; } protected NamedColumnSet[] getTablesAndViews() { List<NamedColumnSet> list = new ArrayList<NamedColumnSet>(); Object[] array = getSelection().toArray(); for (Object obj : array) { if (obj instanceof DBTableRepNode) { list.add(((DBTableRepNode) obj).getTdTable()); } else if (obj instanceof DBViewRepNode) { list.add(((DBViewRepNode) obj).getTdView()); } } return list.toArray(new NamedColumnSet[list.size()]); } protected Connection getTdDataProvidor() { Object obj = getSelection().getFirstElement(); if (obj instanceof DBTableRepNode) { return ConnectionHelper.getTdDataProvider(PackageHelper.getParentPackage(((DBTableRepNode) obj).getTdTable())); } else if (obj instanceof DBViewRepNode) { return ConnectionHelper.getTdDataProvider(PackageHelper.getParentPackage(((DBViewRepNode) obj).getTdView())); } return null; } protected WizardDialog getStandardAnalysisWizardDialog() { return getStandardAnalysisWizardDialog(AnalysisType.TABLE); } protected WizardDialog getStandardAnalysisWizardDialog(AnalysisType type) { return getStandardAnalysisWizardDialog(type, null); } protected WizardDialog getStandardAnalysisWizardDialog(AnalysisType type, AnalysisParameter parameter) { // MOD by zshen for bug 12657 wizard = WizardFactory.createAnalysisWizard(type, parameter); wizard.setForcePreviousAndNextButtons(true); WizardDialog dialog = new WizardDialog(null, wizard); dialog.setPageSize(500, 340); return dialog; } protected BusinessRuleAnalysisDetailsPage getMasterPage() { AnalysisEditor editor = (AnalysisEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() .getActiveEditor(); if (editor != null) { return (BusinessRuleAnalysisDetailsPage) editor.getMasterPage(); } else { return null; } } protected TableIndicator[] composePredefinedTableIndicator(IndicatorEnum[] allowedEnum) { NamedColumnSet[] tablesAndViews = getTablesAndViews(); TableIndicator[] predefinedTableIndicator = new TableIndicator[tablesAndViews.length]; for (int i = 0; i < tablesAndViews.length; i++) { NamedColumnSet tableOrView = tablesAndViews[i]; TableIndicator tableIndicator = new TableIndicator(tableOrView); predefinedTableIndicator[i] = tableIndicator; } return predefinedTableIndicator; } @Override public void run() { if (preDo()) { WizardDialog dialog = getPredefinedDialog(); if (dialog == null) { dialog = getStandardAnalysisWizardDialog(); } dialog.setPageSize(500, 340); if (wizard instanceof TableAnalysisWizard) { TableAnalysisWizard taw = (TableAnalysisWizard) wizard; taw.setNamedColumnSet(getTablesAndViews()); taw.setTdDataProvider(getTdDataProvidor()); taw.setShowTableSelectPage(false); } dialog.open(); } } protected abstract TableIndicator[] getPredefinedTableIndicator(); protected abstract WizardDialog getPredefinedDialog(); protected abstract boolean isAllowed(); protected abstract boolean preDo(); }