// ============================================================================ // // 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.column; import java.util.List; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.ui.PlatformUI; import org.talend.cwm.helper.TaggedValueHelper; import org.talend.dataprofiler.core.CorePlugin; import org.talend.dataprofiler.core.PluginConstant; import org.talend.dataprofiler.core.ui.editor.analysis.AnalysisEditor; import org.talend.dataprofiler.core.ui.editor.analysis.MatchAnalysisDetailsPage; import org.talend.dataprofiler.core.ui.utils.RepNodeUtils; import org.talend.dataprofiler.core.ui.wizard.analysis.AnalysisMetadataWizardPage; import org.talend.dataprofiler.core.ui.wizard.analysis.provider.MatchAnaColumnContentProvider; import org.talend.dataquality.analysis.Analysis; import org.talend.dataquality.analysis.AnalysisType; import org.talend.dataquality.indicators.Indicator; import org.talend.dataquality.indicators.columnset.ColumnsetFactory; import org.talend.dataquality.indicators.columnset.RecordMatchingIndicator; import org.talend.dataquality.rules.MatchRuleDefinition; import org.talend.dataquality.rules.RulesFactory; import org.talend.dq.analysis.parameters.AnalysisParameter; import org.talend.dq.nodes.ColumnRepNode; import org.talend.dq.nodes.ColumnSetRepNode; import org.talend.repository.model.IRepositoryNode; import org.talend.repository.model.RepositoryNode; import orgomg.cwm.objectmodel.core.ModelElement; /** * DOC yyin class global comment. Detailled comment */ public class MatchWizard extends ColumnWizard { private ColumnAnalysisDOSelectionPage selectionPage; // Added TDQ-8647, used for judge the status of button Finish private AnalysisMetadataWizardPage metadataPage; /** * MatchWizard constructor comment. * * @param parameter */ public MatchWizard(AnalysisParameter parameter) { super(parameter); } // make the next button available and the next page is to select columns @Override public void addPages() { metadataPage = new AnalysisMetadataWizardPage(); addPage(metadataPage); AnalysisParameter parameter = (AnalysisParameter) getParameter(); if (parameter.getConnectionRepNode() == null && parameter.getAnalysisType().equals(AnalysisType.MATCH_ANALYSIS)) { selectionPage = new ColumnAnalysisDOSelectionPage(new MatchAnaColumnContentProvider(true)); addPage(selectionPage); } for (IWizardPage page : getExtenalPages()) { addPage(page); } } /* * (non-Javadoc) * * @see * org.talend.dataprofiler.core.ui.wizard.analysis.AbstractAnalysisWizard#openEditor(org.talend.repository.model.IRepositoryNode * ) */ @Override public void openEditor(IRepositoryNode repNode) { super.openEditor(repNode); if (selectionPage != null) { AnalysisEditor editor = (AnalysisEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() .getActiveEditor(); if (editor != null) { updateAnalysisBySelectedNode(editor); } } } // when calling this method, the validation of the selection has been approved.the nodes will only contains one // column set, or some columns from one same column set. private void updateAnalysisBySelectedNode(AnalysisEditor editor) { MatchAnalysisDetailsPage masterPage = (MatchAnalysisDetailsPage) editor.getMasterPage(); List<IRepositoryNode> nodes = selectionPage.nodes; if (nodes != null && nodes.size() > 0) { // if the first selected node is not column type(there should only one column set in the selected node then) if (!(nodes.get(0) instanceof ColumnRepNode)) { nodes = ((ColumnSetRepNode) nodes.get(0)).getAllColumns(); } // update analyze data label by selected nodes names(don't cotain columnRepNode). if (nodes.size() > 0) { masterPage.updateAnalyzeDataLabel(nodes.get(0)); } // give the selected columns to the master page masterPage.setSelectedNodes(nodes.toArray(new RepositoryNode[nodes.size()])); masterPage.doSave(new NullProgressMonitor()); masterPage.updateAllColumnsToKeySection(); } } /** * Added TDQ-8647 20140220 yyin: check the selected nodes, only when the selection is allowed, enable the Finish * button; else disable it. MOD 20140226: when only the name is valid, make the Finish enable, which select none * nodes. */ @Override public boolean canFinish() { if (selectionPage != null) { List<IRepositoryNode> nodes = selectionPage.nodes; if (metadataPage.isPageComplete() && (nodes == null || nodes.size() == 0)) { return true; } return RepNodeUtils.isValidSelectionFromSameTable(nodes); } return super.canFinish(); } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.wizard.analysis.column.ColumnSetWizard#initCWMResourceBuilder() */ @Override public ModelElement initCWMResourceBuilder() { Analysis analysis = (Analysis) super.initCWMResourceBuilder(); // New blocking key indicator. Indicator blockKeyIndicator = ColumnsetFactory.eINSTANCE.createBlockKeyIndicator(); analysis.getResults().getIndicators().add(blockKeyIndicator); // Match rule indicator RecordMatchingIndicator matchRuleIndicator = ColumnsetFactory.eINSTANCE.createRecordMatchingIndicator(); MatchRuleDefinition matchRuleDefinition = RulesFactory.eINSTANCE.createMatchRuleDefinition(); matchRuleIndicator.setBuiltInMatchRuleDefinition(matchRuleDefinition); analysis.getResults().getIndicators().add(matchRuleIndicator); // default loaded row count IPreferenceStore preferenceStore = CorePlugin.getDefault().getPreferenceStore(); int maxRows = preferenceStore.getInt(PluginConstant.MAX_NB_ROWS_ANALYSIS_EDITOR); TaggedValueHelper.setTaggedValue(analysis, TaggedValueHelper.PREVIEW_ROW_NUMBER, String.valueOf(maxRows)); return analysis; } }