// ============================================================================ // // 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; import org.eclipse.core.runtime.IPath; import org.eclipse.help.HelpSystem; import org.eclipse.help.IContext; import org.eclipse.help.IHelpResource; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.Wizard; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.dialogs.FilteredTree; import org.eclipse.ui.dialogs.PatternFilter; import org.talend.cwm.management.api.FolderProvider; import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl; import org.talend.dataprofiler.core.model.ViewerDataFactory; import org.talend.dataprofiler.core.model.nodes.analysis.AnalysisTypeNode; import org.talend.dataprofiler.core.ui.utils.OpeningHelpWizardDialog; import org.talend.dataprofiler.core.ui.wizard.analysis.provider.AnalysisTypeContentProvider; import org.talend.dataprofiler.core.ui.wizard.analysis.provider.AnalysisTypeLabelProvider; import org.talend.dataprofiler.help.HelpPlugin; import org.talend.dataquality.analysis.AnalysisType; import org.talend.dq.analysis.parameters.AnalysisFilterParameter; import org.talend.dq.analysis.parameters.AnalysisLabelParameter; import org.talend.dq.analysis.parameters.AnalysisParameter; import org.talend.dq.analysis.parameters.FuncationDependencyParameter; import org.talend.dq.analysis.parameters.NamedColumnSetAnalysisParameter; import org.talend.dq.analysis.parameters.PackagesAnalyisParameter; import org.talend.dq.helper.RepositoryNodeHelper; import org.talend.repository.model.RepositoryNode; import org.talend.resource.ResourceManager; /** * @author zqin */ public class NewWizardSelectionPage extends AbstractAnalysisWizardPage { private TreeViewer typeTreeViewer; private Wizard selectedWizard; private FolderProvider currentFolderProvider; public FolderProvider getCurrentFolderProvider() { return this.currentFolderProvider; } public NewWizardSelectionPage() { setTitle(DefaultMessagesImpl.getString("NewWizardSelectionPage.wizard")); //$NON-NLS-1$ setMessage(DefaultMessagesImpl.getString("NewWizardSelectionPage.Analysis")); //$NON-NLS-1$ setCanFinishEarly(false); setPageComplete(false); setHasPages(true); } public NewWizardSelectionPage(RepositoryNode node) { super(); if (node != null) { initCurrentFolderProvider(RepositoryNodeHelper.getPath(node)); } } /** * DOC xqliu Comment method "initCurrentFolderProvider". * * @param path */ private void initCurrentFolderProvider(IPath path) { if (path != null) { this.currentFolderProvider = new FolderProvider(); this.currentFolderProvider.setFolderResource(ResourceManager.getRootProject().getFolder(path)); } } /* * (non-Javadoc) * * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); GridLayout gdLayout = new GridLayout(1, true); container.setLayout(gdLayout); PatternFilter filter = new PatternFilter(); FilteredTree tree = new FilteredTree(container, SWT.BORDER, filter, true); typeTreeViewer = tree.getViewer(); typeTreeViewer.setContentProvider(new AnalysisTypeContentProvider()); typeTreeViewer.setLabelProvider(new AnalysisTypeLabelProvider()); typeTreeViewer.setInput(ViewerDataFactory.createTreeData()); addListeners(); setControl(container); } protected void addListeners() { typeTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { AnalysisTypeNode node = (AnalysisTypeNode) ((IStructuredSelection) event.getSelection()).getFirstElement(); if (node == null) { return; } AnalysisTypeNode parent = (AnalysisTypeNode) node.getParent(); IContext context = HelpSystem.getContext(HelpPlugin.getDefault().getAnalysisHelpContextID()); IHelpResource[] relatedTopics = context.getRelatedTopics(); String href = null; String currentLiteral = node.getLiteral(); if (AnalysisLabelParameter.FUNCTIONAL_DEPENDENCY_ANALYSIS.equals(currentLiteral)) { currentLiteral = AnalysisType.TABLE_FUNCTIONAL_DEPENDENCY.getLiteral(); } else if (AnalysisLabelParameter.CONNECTION_OVERVIEW_ANALYSIS.equals(currentLiteral)) { currentLiteral = AnalysisType.CONNECTION.getLiteral(); } else if (AnalysisLabelParameter.CATALOG_OVERVIEW_ANALYSIS.equals(currentLiteral)) { currentLiteral = AnalysisType.CATALOG.getLiteral(); } else if (AnalysisLabelParameter.SCHEMA_OVERVIEW_ANALYSIS.equals(currentLiteral)) { currentLiteral = AnalysisType.SCHEMA.getLiteral(); } AnalysisType currentType = AnalysisType.get(currentLiteral); if (parent == null) { setPageComplete(false); // MOD hcheng 2009-06-05 add help in analysis wizard switch (currentType) { case CONNECTION: href = relatedTopics[0].getHref(); break; case COLUMNS_COMPARISON: href = relatedTopics[4].getHref(); break; case TABLE: href = relatedTopics[6].getHref(); break; case MULTIPLE_COLUMN: href = relatedTopics[11].getHref(); break; case COLUMN_CORRELATION: href = relatedTopics[18].getHref(); break; default: } } else { AnalysisParameter parameter = null; AnalysisType parentType = AnalysisType.get(parent.getLiteral()); FolderProvider folderProvider = getCurrentFolderProvider() == null ? ((CreateNewAnalysisWizard) getWizard()) .getCurrentFolderProvider() : getCurrentFolderProvider(); switch (parentType) { case COLUMN_CORRELATION: AnalysisParameter correlationColumnParam = new AnalysisLabelParameter(); ((AnalysisLabelParameter) correlationColumnParam).setCategoryLabel(node.getName()); correlationColumnParam.setFolderProvider(folderProvider); parameter = correlationColumnParam; // TDQ-10498 split column correlation page to three pages. // Added those final string is to judge different analysis type. // We are not have those analysisType on the EMF model, And this issue is about display only. // So that don't choose modify EMF model if (AnalysisLabelParameter.NUMBERIC_CORRELATION.equals(currentLiteral)) { href = relatedTopics[19].getHref(); } else if (AnalysisLabelParameter.DATE_CORRELATION.equals(currentLiteral)) { href = relatedTopics[20].getHref(); } else if (AnalysisLabelParameter.NOMINAL_CORRELATION.equals(currentLiteral)) { href = relatedTopics[21].getHref(); } else { href = relatedTopics[18].getHref(); } break; case MULTIPLE_COLUMN: AnalysisParameter multipleColumnParam = new AnalysisLabelParameter(); ((AnalysisLabelParameter) multipleColumnParam).setCategoryLabel(node.getName()); multipleColumnParam.setFolderProvider(folderProvider); parameter = multipleColumnParam; if (AnalysisLabelParameter.SEMANTIC_DISCOVERY_ANALYSIS.equals(currentLiteral)) { href = relatedTopics[12].getHref(); } else if (AnalysisLabelParameter.BASIC_COLUMN_ANALYSIS.equals(currentLiteral)) { href = relatedTopics[13].getHref(); } else if (AnalysisLabelParameter.NOMINAL_VALUES_ANALYSIS.equals(currentLiteral)) { href = relatedTopics[14].getHref(); } else if (AnalysisLabelParameter.PATTERN_FREQUENCY_ANALYSIS.equals(currentLiteral)) { href = relatedTopics[15].getHref(); } else if (AnalysisLabelParameter.DISCRETE_DATA_ANALYSIS.equals(currentLiteral)) { href = relatedTopics[16].getHref(); } else if (AnalysisLabelParameter.SUMMARY_STATISTICS_ANALYSIS.equals(currentLiteral)) { href = relatedTopics[17].getHref(); } else { href = relatedTopics[13].getHref(); } break; case COLUMNS_COMPARISON: AnalysisParameter anaParam = new AnalysisParameter(); anaParam.setFolderProvider(folderProvider); parameter = anaParam; href = relatedTopics[5].getHref(); break; case CONNECTION: switch (currentType) { case CONNECTION: default: AnalysisFilterParameter connParam = new AnalysisFilterParameter(); connParam.setFolderProvider(folderProvider); parameter = connParam; href = relatedTopics[1].getHref(); parentType = currentType; break; case CATALOG: PackagesAnalyisParameter catalogParam = new PackagesAnalyisParameter(); catalogParam.setFolderProvider(folderProvider); parameter = catalogParam; href = relatedTopics[2].getHref(); parentType = currentType; break; case SCHEMA: PackagesAnalyisParameter schemaParam = new PackagesAnalyisParameter(); schemaParam.setFolderProvider(folderProvider); parameter = schemaParam; href = relatedTopics[3].getHref(); parentType = currentType; break; } break; case TABLE: switch (currentType) { case MATCH_ANALYSIS: parameter = new AnalysisParameter(); parameter.setFolderProvider(folderProvider); href = relatedTopics[8].getHref(); parentType = currentType; break; case COLUMN_SET: AnalysisParameter corrParam = new AnalysisParameter(); corrParam.setFolderProvider(folderProvider); parameter = corrParam; href = relatedTopics[10].getHref(); parentType = currentType; break; case TABLE_FUNCTIONAL_DEPENDENCY: FuncationDependencyParameter funcationDependency = new FuncationDependencyParameter(); funcationDependency.setFolderProvider(folderProvider); parameter = funcationDependency; href = relatedTopics[9].getHref(); parentType = currentType; break; default: NamedColumnSetAnalysisParameter tableParam = new NamedColumnSetAnalysisParameter(); tableParam.setFolderProvider(folderProvider); parameter = tableParam; href = relatedTopics[7].getHref(); break; } break; default: parameter = new AnalysisParameter(); } selectedWizard = WizardFactory.createAnalysisWizard(parentType, parameter); setPageComplete(true); } // MOD by hcheng,0007483: Add help in analysis wizard OpeningHelpWizardDialog dialog = (OpeningHelpWizardDialog) getWizard().getContainer(); dialog.setHref(href); dialog.showHelp(); } }); typeTreeViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { AnalysisTypeNode node = (AnalysisTypeNode) ((IStructuredSelection) event.getSelection()).getFirstElement(); if (node.getParent() == null) { typeTreeViewer.expandToLevel(node, 1); } else { advanceToNextPageOrFinish(); } } }); } /* * (non-Javadoc) * * @see org.eclipse.jface.wizard.WizardPage#getNextPage() */ @Override public IWizardPage getNextPage() { if (selectedWizard == null) { return null; } if (selectedWizard.getStartingPage() == null) { selectedWizard.addPages(); } return selectedWizard.getStartingPage(); } /** * @return the selectedWizard */ public Wizard getSelectedWizard() { return this.selectedWizard; } }