Search in sources :

Example 1 with CreateDuplicatesAnalysisAction

use of org.talend.dataprofiler.core.ui.action.actions.CreateDuplicatesAnalysisAction in project tdq-studio-se by Talend.

the class ChartTableFactory method addMenuAndTip.

public static void addMenuAndTip(final TableViewer tbViewer, final IDataExplorer explorer, final Analysis analysis) {
    final Table table = tbViewer.getTable();
    table.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseDown(MouseEvent e) {
            // MOD xqliu 2009-05-11 bug 6561
            if (table.getMenu() != null) {
                table.getMenu().setVisible(false);
            }
            if (e.button == 3) {
                StructuredSelection selection = (StructuredSelection) tbViewer.getSelection();
                final ChartDataEntity dataEntity = (ChartDataEntity) selection.getFirstElement();
                final Indicator indicator = dataEntity != null ? dataEntity.getIndicator() : null;
                if (indicator != null && dataEntity != null) {
                    Menu menu = new Menu(table.getShell(), SWT.POP_UP);
                    table.setMenu(menu);
                    MenuItemEntity[] itemEntities = ChartTableMenuGenerator.generate(explorer, analysis, dataEntity);
                    if (ExecutionLanguage.SQL == analysis.getParameters().getExecutionLanguage()) {
                        boolean showExtraMenu = false;
                        for (final MenuItemEntity itemEntity : itemEntities) {
                            MenuItem item = new MenuItem(menu, SWT.PUSH);
                            item.setText(itemEntity.geti18nLabel());
                            item.setImage(itemEntity.getIcon());
                            item.addSelectionListener(new SelectionAdapter() {

                                @Override
                                public void widgetSelected(SelectionEvent e1) {
                                    // DBMSLanguage.
                                    if (isPatternMatchingIndicator(indicator) && !((PatternExplorer) explorer).isImplementRegexFunction(itemEntity.getLabel())) {
                                        MessageDialog.openInformation(null, itemEntity.getLabel(), // $NON-NLS-1$
                                        DefaultMessagesImpl.getString("ChartTableFactory.NoSupportPatternTeradata"));
                                        return;
                                    }
                                    String query = itemEntity.getQuery();
                                    String editorName = indicator.getName();
                                    Connection tdDataProvider = (Connection) analysis.getContext().getConnection();
                                    SqlExplorerUtils.getDefault().runInDQViewer(tdDataProvider, query, editorName);
                                }
                            });
                            // condition columns
                            if (IndicatorHelper.isWhereRuleIndicator(indicator)) {
                                // MOD yyin 20121126 TDQ-6477,show the menu only when Join condition exists
                                WhereRuleIndicator ind = (WhereRuleIndicator) indicator;
                                EList<JoinElement> joinConditions = ind.getJoinConditions();
                                if (joinConditions.size() > 0) {
                                    showExtraMenu = true;
                                }
                            }
                            if (isPatternFrequencyIndicator(indicator) && !isEastAsiaPatternFrequencyIndicator(indicator)) {
                                createMenuOfGenerateRegularPattern(analysis, menu, dataEntity);
                            }
                        }
                        // show extra menu to create simple analysis, help user to find the duplicated rows
                        if (showExtraMenu) {
                            MenuItem itemCreateWhereRule = new MenuItem(menu, SWT.PUSH);
                            itemCreateWhereRule.setText(DefaultMessagesImpl.getString(// $NON-NLS-1$
                            "ChartTableFactory.JoinConditionColumnsAnalysis"));
                            itemCreateWhereRule.addSelectionListener(new SelectionAdapter() {

                                @Override
                                public void widgetSelected(SelectionEvent e1) {
                                    final StructuredSelection selectionOne = (StructuredSelection) tbViewer.getSelection();
                                    // MOD xqliu 2012-05-11 TDQ-5314
                                    Object firstElement = selectionOne.getFirstElement();
                                    if (firstElement instanceof WhereRuleChartDataEntity) {
                                        // get the WhereRuleIndicator
                                        WhereRuleChartDataEntity wrChartDataEntity = (WhereRuleChartDataEntity) firstElement;
                                        WhereRuleIndicator wrInd = (WhereRuleIndicator) wrChartDataEntity.getIndicator();
                                        // run the CreateDuplicatesAnalysisAction
                                        CreateDuplicatesAnalysisAction action = new CreateDuplicatesAnalysisAction(buildColumnsMap(wrInd));
                                        action.run();
                                    }
                                // ~ TDQ-5314
                                }

                                /**
                                 * DOC xqliu Comment method "buildColumnsMap".
                                 *
                                 * @param wrInd
                                 * @return
                                 */
                                private Map<ColumnSet, List<TdColumn>> buildColumnsMap(WhereRuleIndicator wrInd) {
                                    Map<ColumnSet, List<TdColumn>> map = new HashMap<ColumnSet, List<TdColumn>>();
                                    // get all columns from the WhereRuleIndicator
                                    List<TdColumn> columns = new ArrayList<TdColumn>();
                                    EList<JoinElement> joinConditions = wrInd.getJoinConditions();
                                    for (JoinElement joinElement : joinConditions) {
                                        // add left column
                                        TdColumn tempColumn = (TdColumn) joinElement.getColA();
                                        if (!columns.contains(tempColumn)) {
                                            columns.add(tempColumn);
                                        }
                                        // add right column
                                        tempColumn = (TdColumn) joinElement.getColB();
                                        if (!columns.contains(tempColumn)) {
                                            columns.add(tempColumn);
                                        }
                                    }
                                    // build the map
                                    for (TdColumn column : columns) {
                                        ColumnSet columnSet = ColumnHelper.getColumnOwnerAsColumnSet(column);
                                        List<TdColumn> list = map.get(columnSet);
                                        if (list == null) {
                                            list = new ArrayList<TdColumn>();
                                            map.put(columnSet, list);
                                        }
                                        list.add(column);
                                    }
                                    // get the user selected map
                                    return getUserSelectedMap(map);
                                }

                                /**
                                 * DOC xqliu Comment method "getUserSelectedMap".
                                 *
                                 * @param map
                                 * @return
                                 */
                                private Map<ColumnSet, List<TdColumn>> getUserSelectedMap(Map<ColumnSet, List<TdColumn>> map) {
                                    Map<ColumnSet, List<TdColumn>> userMap = new HashMap<ColumnSet, List<TdColumn>>();
                                    // get the column nodes
                                    List<RepositoryNode> columnNodes = getColumnNodes(map);
                                    // get the connection node
                                    RepositoryNode rootNode = getConnectionNode(map);
                                    // show the dialog, let user select the columns
                                    if (!columnNodes.isEmpty() && rootNode != null) {
                                        ColumnsMapSelectionDialog dialog = new ColumnsMapSelectionDialog(null, PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), // $NON-NLS-1$
                                        DefaultMessagesImpl.getString("ColumnsMapSelectionDialog.columnSelection"), // $NON-NLS-1$
                                        columnNodes, // $NON-NLS-1$
                                        rootNode, // $NON-NLS-1$
                                        DefaultMessagesImpl.getString("ColumnsMapSelectionDialog.columnSelections"));
                                        dialog.setAllMap(map);
                                        if (dialog.open() == Window.OK) {
                                            userMap = dialog.getUserMap();
                                        }
                                    }
                                    return userMap;
                                }

                                /**
                                 * DOC xqliu Comment method "getConnectionNode".
                                 *
                                 * @param map
                                 * @return
                                 */
                                private RepositoryNode getConnectionNode(Map<ColumnSet, List<TdColumn>> map) {
                                    RepositoryNode node = null;
                                    if (map != null && !map.isEmpty()) {
                                        Connection connection = ConnectionHelper.getConnection(map.keySet().iterator().next());
                                        if (connection != null) {
                                            node = RepositoryNodeHelper.recursiveFind(connection);
                                        }
                                    }
                                    return node;
                                }

                                /**
                                 * DOC xqliu Comment method "getColumnNodes".
                                 *
                                 * @param map
                                 * @return
                                 */
                                private List<RepositoryNode> getColumnNodes(Map<ColumnSet, List<TdColumn>> map) {
                                    List<RepositoryNode> nodes = new ArrayList<RepositoryNode>();
                                    if (map != null && !map.isEmpty()) {
                                        List<TdColumn> columns = new ArrayList<TdColumn>();
                                        Set<ColumnSet> keySet = map.keySet();
                                        for (ColumnSet cs : keySet) {
                                            columns.addAll(map.get(cs));
                                        }
                                        if (!columns.isEmpty()) {
                                            for (TdColumn column : columns) {
                                                nodes.add(RepositoryNodeHelper.recursiveFind(column));
                                            }
                                        }
                                    }
                                    return nodes;
                                }
                            });
                        }
                    } else {
                        if (analysis.getParameters().isStoreData()) {
                            // if allow drill down
                            if (indicator.isUsedMapDBMode()) {
                                DrillDownUtils.createDrillDownMenuForMapDB(dataEntity, menu, itemEntities, analysis);
                            } else {
                                DrillDownUtils.createDrillDownMenuForJava(dataEntity, menu, itemEntities, analysis);
                            }
                            if (isPatternFrequencyIndicator(indicator) && !isEastAsiaPatternFrequencyIndicator(indicator)) {
                                for (final MenuItemEntity itemEntity : itemEntities) {
                                    createMenuOfGenerateRegularPattern(analysis, menu, dataEntity);
                                }
                            }
                        }
                        // MOD by zshen feature 11574:add menu "Generate regular pattern" to date pattern
                        if (isDatePatternFrequencyIndicator(indicator)) {
                            final DatePatternFreqIndicator dateIndicator = (DatePatternFreqIndicator) indicator;
                            MenuItem itemCreatePatt = new MenuItem(menu, SWT.PUSH);
                            // $NON-NLS-1$
                            itemCreatePatt.setText(DefaultMessagesImpl.getString("ChartTableFactory.GenerateRegularPattern"));
                            itemCreatePatt.setImage(ImageLib.getImage(ImageLib.PATTERN_REG));
                            itemCreatePatt.addSelectionListener(new SelectionAdapter() {

                                @Override
                                public void widgetSelected(SelectionEvent e1) {
                                    DbmsLanguage language = DbmsLanguageFactory.createDbmsLanguage(analysis);
                                    IFolder folder = ResourceManager.getPatternRegexFolder();
                                    String model = dataEntity.getLabel();
                                    String regex = dateIndicator.getRegex(model);
                                    new CreatePatternAction(folder, ExpressionType.REGEXP, "'" + regex + "'", model == null ? "" : "match \"" + model + "\"", language.getDbmsName()).run();
                                }
                            });
                        }
                    }
                    addJobGenerationMenu(menu, analysis, indicator);
                    // ~11574
                    menu.setVisible(true);
                }
            }
        }
    });
    // add tooltip
    TableUtils.addTooltipForTable(table);
    TableUtils.addActionTooltip(table);
}
Also used : HashMap(java.util.HashMap) StructuredSelection(org.eclipse.jface.viewers.StructuredSelection) ArrayList(java.util.ArrayList) ColumnSet(orgomg.cwm.resource.relational.ColumnSet) DbmsLanguage(org.talend.dq.dbms.DbmsLanguage) WhereRuleIndicator(org.talend.dataquality.indicators.sql.WhereRuleIndicator) SelectionEvent(org.eclipse.swt.events.SelectionEvent) List(java.util.List) ArrayList(java.util.ArrayList) EList(org.eclipse.emf.common.util.EList) Menu(org.eclipse.swt.widgets.Menu) CreatePatternAction(org.talend.dataprofiler.core.pattern.actions.CreatePatternAction) CreateDuplicatesAnalysisAction(org.talend.dataprofiler.core.ui.action.actions.CreateDuplicatesAnalysisAction) TdTable(org.talend.cwm.relational.TdTable) Table(org.eclipse.swt.widgets.Table) MouseEvent(org.eclipse.swt.events.MouseEvent) SelectionAdapter(org.eclipse.swt.events.SelectionAdapter) MouseAdapter(org.eclipse.swt.events.MouseAdapter) DatabaseConnection(org.talend.core.model.metadata.builder.connection.DatabaseConnection) Connection(org.talend.core.model.metadata.builder.connection.Connection) MenuItem(org.eclipse.swt.widgets.MenuItem) WhereRuleChartDataEntity(org.talend.dq.indicators.preview.table.WhereRuleChartDataEntity) ChartDataEntity(org.talend.dq.indicators.preview.table.ChartDataEntity) RepositoryNode(org.talend.repository.model.RepositoryNode) ColumnsMapSelectionDialog(org.talend.dataprofiler.core.ui.dialog.ColumnsMapSelectionDialog) UniqueCountIndicator(org.talend.dataquality.indicators.UniqueCountIndicator) EastAsiaPatternLowFreqIndicator(org.talend.dataquality.indicators.EastAsiaPatternLowFreqIndicator) FrequencyIndicator(org.talend.dataquality.indicators.FrequencyIndicator) DatePatternFreqIndicator(org.talend.dataquality.indicators.DatePatternFreqIndicator) EastAsiaPatternFreqIndicator(org.talend.dataquality.indicators.EastAsiaPatternFreqIndicator) WellFormE164PhoneCountIndicator(org.talend.dataquality.indicators.WellFormE164PhoneCountIndicator) PatternLowFreqIndicator(org.talend.dataquality.indicators.PatternLowFreqIndicator) PatternFreqIndicator(org.talend.dataquality.indicators.PatternFreqIndicator) AllMatchIndicator(org.talend.dataquality.indicators.columnset.AllMatchIndicator) ValidPhoneCountIndicator(org.talend.dataquality.indicators.ValidPhoneCountIndicator) WellFormIntePhoneCountIndicator(org.talend.dataquality.indicators.WellFormIntePhoneCountIndicator) PossiblePhoneCountIndicator(org.talend.dataquality.indicators.PossiblePhoneCountIndicator) PatternMatchingIndicator(org.talend.dataquality.indicators.PatternMatchingIndicator) Indicator(org.talend.dataquality.indicators.Indicator) SqlPatternMatchingIndicator(org.talend.dataquality.indicators.SqlPatternMatchingIndicator) DistinctCountIndicator(org.talend.dataquality.indicators.DistinctCountIndicator) DuplicateCountIndicator(org.talend.dataquality.indicators.DuplicateCountIndicator) WellFormNationalPhoneCountIndicator(org.talend.dataquality.indicators.WellFormNationalPhoneCountIndicator) WhereRuleIndicator(org.talend.dataquality.indicators.sql.WhereRuleIndicator) JoinElement(org.talend.dataquality.rules.JoinElement) EList(org.eclipse.emf.common.util.EList) TdColumn(org.talend.cwm.relational.TdColumn) WhereRuleChartDataEntity(org.talend.dq.indicators.preview.table.WhereRuleChartDataEntity) DatePatternFreqIndicator(org.talend.dataquality.indicators.DatePatternFreqIndicator) Map(java.util.Map) HashMap(java.util.HashMap) PatternExplorer(org.talend.dq.analysis.explore.PatternExplorer) IFolder(org.eclipse.core.resources.IFolder)

Aggregations

ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 IFolder (org.eclipse.core.resources.IFolder)1 EList (org.eclipse.emf.common.util.EList)1 StructuredSelection (org.eclipse.jface.viewers.StructuredSelection)1 MouseAdapter (org.eclipse.swt.events.MouseAdapter)1 MouseEvent (org.eclipse.swt.events.MouseEvent)1 SelectionAdapter (org.eclipse.swt.events.SelectionAdapter)1 SelectionEvent (org.eclipse.swt.events.SelectionEvent)1 Menu (org.eclipse.swt.widgets.Menu)1 MenuItem (org.eclipse.swt.widgets.MenuItem)1 Table (org.eclipse.swt.widgets.Table)1 Connection (org.talend.core.model.metadata.builder.connection.Connection)1 DatabaseConnection (org.talend.core.model.metadata.builder.connection.DatabaseConnection)1 TdColumn (org.talend.cwm.relational.TdColumn)1 TdTable (org.talend.cwm.relational.TdTable)1 CreatePatternAction (org.talend.dataprofiler.core.pattern.actions.CreatePatternAction)1 CreateDuplicatesAnalysisAction (org.talend.dataprofiler.core.ui.action.actions.CreateDuplicatesAnalysisAction)1