// ============================================================================ // // 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.wizard.analysis.table; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.core.resources.IFile; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.cwm.dependencies.DependenciesHandler; import org.talend.dataprofiler.core.CorePlugin; import org.talend.dataprofiler.core.dqrule.DQRuleUtilities; import org.talend.dataprofiler.core.ui.editor.analysis.AnalysisEditor; import org.talend.dataprofiler.core.ui.editor.analysis.AnalysisItemEditorInput; import org.talend.dataprofiler.core.ui.wizard.analysis.AbstractAnalysisWizard; import org.talend.dataquality.analysis.Analysis; import org.talend.dataquality.indicators.Indicator; import org.talend.dataquality.indicators.IndicatorsFactory; import org.talend.dataquality.indicators.RowCountIndicator; import org.talend.dataquality.indicators.sql.WhereRuleIndicator; import org.talend.dataquality.rules.WhereRule; import org.talend.dq.analysis.parameters.AnalysisFilterParameter; import org.talend.dq.analysis.parameters.NamedColumnSetAnalysisParameter; import org.talend.dq.helper.resourcehelper.DQRuleResourceFileHelper; import org.talend.dq.indicators.definitions.DefinitionHandler; import org.talend.dq.writer.impl.ElementWriterFactory; import org.talend.repository.model.IRepositoryNode; import org.talend.utils.sugars.TypedReturnCode; import orgomg.cwm.foundation.softwaredeployment.DataManager; import orgomg.cwm.objectmodel.core.ModelElement; import orgomg.cwm.resource.relational.NamedColumnSet; /** * DOC xqliu class global comment. Detailled comment */ public class TableAnalysisWizard extends AbstractAnalysisWizard { private TableAnalysisMetadataWizardPage analysisMetadataWizardPage = null; @SuppressWarnings("deprecation") private TableAnalysisDPSelectionPage tableAnalysisDPSelectionPage = null; private DQRuleSelectPage dqruleSelectPage = null; public boolean showTableSelectPage = true; public boolean isShowTableSelectPage() { return showTableSelectPage; } public void setShowTableSelectPage(boolean showTableSelectPage) { this.showTableSelectPage = showTableSelectPage; } public NamedColumnSet[] getNamedColumnSet() { return getParameter() == null ? null : getParameter().getNamedColumnSets(); } public void setNamedColumnSet(NamedColumnSet[] namedColumnSet) { if (getParameter() != null) { getParameter().setNamedColumnSets(namedColumnSet); } } public Connection getTdDataProvider() { return getParameter() == null ? null : getParameter().getTdDataProvider(); } public void setTdDataProvider(Connection tdDataProvider) { if (getParameter() != null) { getParameter().setTdDataProvider(tdDataProvider); } } @Override public boolean canFinish() { return analysisMetadataWizardPage == null ? false : analysisMetadataWizardPage.isPageComplete(); } /** * DOC xqliu TableAnalysisWizard constructor comment. * * @param parameter */ public TableAnalysisWizard(AnalysisFilterParameter parameter) { super(parameter); } @Override @SuppressWarnings("deprecation") public void addPages() { this.getParameter().setName(""); //$NON-NLS-1$ analysisMetadataWizardPage = new TableAnalysisMetadataWizardPage(); this.addPage(analysisMetadataWizardPage); // never set true currently if (isShowTableSelectPage()) { tableAnalysisDPSelectionPage = new TableAnalysisDPSelectionPage(); addPage(tableAnalysisDPSelectionPage); } dqruleSelectPage = new DQRuleSelectPage(); addPage(dqruleSelectPage); } /* * (non-Javadoc) * * @see * org.talend.dataprofiler.core.ui.wizard.analysis.AbstractAnalysisWizard#createAndSaveCWMFile(orgomg.cwm.objectmodel * .core.ModelElement) */ @Override public TypedReturnCode<Object> createAndSaveCWMFile(ModelElement cwmElement) { Analysis analysis = (Analysis) cwmElement; DataManager connection = analysis.getContext().getConnection(); if (connection != null) { DependenciesHandler.getInstance().setDependencyOn(analysis, connection); } // MOD by hcheng for 7173:Broken dependency between analyses and connection TypedReturnCode<Object> saveCWMFile = super.createAndSaveCWMFile(analysis); if (saveCWMFile.isOk() && connection != null) { ElementWriterFactory.getInstance().createDataProviderWriter().save(connection); } return saveCWMFile; } @Override public ModelElement initCWMResourceBuilder() { Analysis analysis = (Analysis) super.initCWMResourceBuilder(); NamedColumnSet[] ncss = getNamedColumnSet(); Connection tdp = getTdDataProvider(); if (ncss != null && getAnalysisBuilder() != null) { List<Indicator> indicatorList = new ArrayList<Indicator>(); WhereRule[] whereRules = getWhereRules(dqruleSelectPage.getCViewer().getCheckedElements()); for (NamedColumnSet ncs : ncss) { // add RowCountIndicator RowCountIndicator rowCountIndicator = IndicatorsFactory.eINSTANCE.createRowCountIndicator(); DefinitionHandler.getInstance().setDefaultIndicatorDefinition(rowCountIndicator); rowCountIndicator.setAnalyzedElement(ncs); indicatorList.add(rowCountIndicator); // add user selected WhereRuleIndicator if (whereRules != null) { for (WhereRule whereRule : whereRules) { WhereRuleIndicator[] compositeWhereRuleIndicator = DQRuleUtilities.createCompositeWhereRuleIndicator(ncs, whereRule); indicatorList.addAll(Arrays.asList(compositeWhereRuleIndicator)); } } } getAnalysisBuilder().addElementsToAnalyze(ncss, indicatorList.toArray(new Indicator[indicatorList.size()])); getAnalysisBuilder().setAnalysisConnection(tdp); } return analysis; } /** * DOC xqliu Comment method "getWhereRules". * * @param checkedElements * @return */ private WhereRule[] getWhereRules(Object[] objects) { if (objects != null) { List<WhereRule> wrList = new ArrayList<WhereRule>(); for (Object object : objects) { if (object instanceof IFile) { WhereRule wr = DQRuleResourceFileHelper.getInstance().findWhereRule((IFile) object); if (wr != null) { wrList.add(wr); } } } return wrList.toArray(new WhereRule[wrList.size()]); } return null; } @Override public NamedColumnSetAnalysisParameter getParameter() { return (NamedColumnSetAnalysisParameter) super.getParameter(); } /* * (non-Javadoc) * * @see * org.talend.dataprofiler.core.ui.wizard.analysis.AbstractAnalysisWizard#openEditor(org.talend.repository.model.IRepositoryNode * ) */ @Override public void openEditor(IRepositoryNode repNode) { AnalysisItemEditorInput itemEditorInput = new AnalysisItemEditorInput(repNode); CorePlugin.getDefault().openEditor(itemEditorInput, AnalysisEditor.class.getName()); } }