// ============================================================================ // // 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.editor.preview.model; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.core.resources.IFolder; import org.eclipse.emf.common.util.EList; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.PlatformUI; import org.talend.commons.utils.platform.PluginChecker; import org.talend.core.database.EDatabaseTypeName; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.core.model.metadata.builder.connection.DatabaseConnection; import org.talend.cwm.db.connection.ConnectionUtils; import org.talend.cwm.helper.ColumnHelper; import org.talend.cwm.helper.ConnectionHelper; import org.talend.cwm.helper.SwitchHelpers; import org.talend.cwm.helper.TableHelper; import org.talend.cwm.relational.TdColumn; import org.talend.cwm.relational.TdTable; import org.talend.dataprofiler.core.ImageLib; import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl; import org.talend.dataprofiler.core.pattern.actions.CreatePatternAction; import org.talend.dataprofiler.core.service.GlobalServiceRegister; import org.talend.dataprofiler.core.service.IDatabaseJobService; import org.talend.dataprofiler.core.service.IJobService; import org.talend.dataprofiler.core.ui.action.actions.CreateDuplicatesAnalysisAction; import org.talend.dataprofiler.core.ui.dialog.ColumnsMapSelectionDialog; import org.talend.dataprofiler.core.ui.utils.DrillDownUtils; import org.talend.dataprofiler.core.ui.utils.TableUtils; import org.talend.dataquality.analysis.Analysis; import org.talend.dataquality.analysis.AnalysisType; import org.talend.dataquality.analysis.ExecutionLanguage; import org.talend.dataquality.domain.pattern.ExpressionType; import org.talend.dataquality.helpers.IndicatorHelper; import org.talend.dataquality.indicators.DatePatternFreqIndicator; import org.talend.dataquality.indicators.DistinctCountIndicator; import org.talend.dataquality.indicators.DuplicateCountIndicator; import org.talend.dataquality.indicators.EastAsiaPatternFreqIndicator; import org.talend.dataquality.indicators.EastAsiaPatternLowFreqIndicator; import org.talend.dataquality.indicators.FrequencyIndicator; import org.talend.dataquality.indicators.Indicator; import org.talend.dataquality.indicators.PatternFreqIndicator; import org.talend.dataquality.indicators.PatternLowFreqIndicator; import org.talend.dataquality.indicators.PatternMatchingIndicator; import org.talend.dataquality.indicators.PossiblePhoneCountIndicator; import org.talend.dataquality.indicators.SqlPatternMatchingIndicator; import org.talend.dataquality.indicators.UniqueCountIndicator; import org.talend.dataquality.indicators.ValidPhoneCountIndicator; import org.talend.dataquality.indicators.WellFormE164PhoneCountIndicator; import org.talend.dataquality.indicators.WellFormIntePhoneCountIndicator; import org.talend.dataquality.indicators.WellFormNationalPhoneCountIndicator; import org.talend.dataquality.indicators.columnset.AllMatchIndicator; import org.talend.dataquality.indicators.columnset.util.ColumnsetSwitch; import org.talend.dataquality.indicators.sql.WhereRuleIndicator; import org.talend.dataquality.indicators.util.IndicatorsSwitch; import org.talend.dataquality.rules.JoinElement; import org.talend.dq.analysis.explore.IDataExplorer; import org.talend.dq.analysis.explore.PatternExplorer; import org.talend.dq.dbms.DbmsLanguage; import org.talend.dq.dbms.DbmsLanguageFactory; import org.talend.dq.helper.RepositoryNodeHelper; import org.talend.dq.helper.SqlExplorerUtils; import org.talend.dq.indicators.preview.table.ChartDataEntity; import org.talend.dq.indicators.preview.table.WhereRuleChartDataEntity; import org.talend.dq.pattern.PatternTransformer; import org.talend.repository.model.RepositoryNode; import org.talend.resource.ResourceManager; import orgomg.cwm.resource.relational.ColumnSet; /** * DOC zqin class global comment. Detailled comment */ public final class ChartTableFactory { private ChartTableFactory() { } /** * add contextual menu for job generation. * * @param menu * @param analysis * @param currentIndicator */ public static void addJobGenerationMenu(final Menu menu, final Analysis analysis, final Indicator currentIndicator) { Connection tdDataProvider = (Connection) analysis.getContext().getConnection(); boolean isDelimitedFileAnalysis = ConnectionUtils.isDelimitedFileConnection(tdDataProvider); boolean isHiveConnection = ConnectionHelper.isHive(tdDataProvider); boolean isVertica = ConnectionHelper.isVertica(tdDataProvider); if (PluginChecker.isTDCPLoaded() && !(isDelimitedFileAnalysis || isHiveConnection)) { final IDatabaseJobService service = (IDatabaseJobService) GlobalServiceRegister.getDefault().getService( IJobService.class); if (service != null) { service.setIndicator(currentIndicator); service.setAnalysis(analysis); MenuItem item = null; if (isDUDIndicator(currentIndicator) && AnalysisType.COLUMN_SET != analysis.getParameters().getAnalysisType()) { item = new MenuItem(menu, SWT.PUSH); item.setText(DefaultMessagesImpl.getString("ChartTableFactory.RemoveDuplicate")); //$NON-NLS-1$ } else if (isPatternMatchingIndicator(currentIndicator) && !isVertica) { // TDQ--8864 forbidden the genarate job menu for SQL pattern, remove this after TDQ-8875 is DONE if (!isSQLPatternMatchingIndicator(currentIndicator)) { item = new MenuItem(menu, SWT.PUSH); item.setText(DefaultMessagesImpl.getString("AnalysisColumnTreeViewer.generateJob"));//$NON-NLS-1$ } } else if (isAllMatchIndicator(currentIndicator)) { item = new MenuItem(menu, SWT.PUSH); item.setText(DefaultMessagesImpl.getString("ChartTableFactory.gen_etl_job_row")); //$NON-NLS-1$ } else if (isPhonseNumberIndicator(currentIndicator)) { item = new MenuItem(menu, SWT.PUSH); item.setText(DefaultMessagesImpl.getString("ChartTableFactory.gen_std_phone_job")); //$NON-NLS-1$ } else if (isDqRule(currentIndicator)) { item = new MenuItem(menu, SWT.PUSH); item.setText(DefaultMessagesImpl.getString("AnalysisColumnTreeViewer.generateJob"));//$NON-NLS-1$ } if (item != null) { item.setImage(ImageLib.getImage(ImageLib.ICON_PROCESS)); item.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { service.executeJob(); } }); } } } } 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) { // TDQ-8637 pop a message when it is pattern and no implemnt Regex function in // DBMSLanguage. if (isPatternMatchingIndicator(indicator) && !((PatternExplorer) explorer).isImplementRegexFunction(itemEntity.getLabel())) { MessageDialog.openInformation(null, itemEntity.getLabel(), DefaultMessagesImpl.getString("ChartTableFactory.NoSupportPatternTeradata"));//$NON-NLS-1$ return; } String query = itemEntity.getQuery(); String editorName = indicator.getName(); Connection tdDataProvider = (Connection) analysis.getContext().getConnection(); SqlExplorerUtils.getDefault().runInDQViewer(tdDataProvider, query, editorName); } }); // ADD msjian 2012-2-9 TDQ-4470: add the create column analysis menu using the join // 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; } } // TDQ-4470~ 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("ChartTableFactory.JoinConditionColumnsAnalysis")); //$NON-NLS-1$ 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(), DefaultMessagesImpl.getString("ColumnsMapSelectionDialog.columnSelection"), columnNodes, rootNode, //$NON-NLS-1$ DefaultMessagesImpl.getString("ColumnsMapSelectionDialog.columnSelections")); //$NON-NLS-1$ 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); itemCreatePatt.setText(DefaultMessagesImpl.getString("ChartTableFactory.GenerateRegularPattern")); //$NON-NLS-1$ 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(); //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$//$NON-NLS-5$ } }); } } addJobGenerationMenu(menu, analysis, indicator); // ~11574 menu.setVisible(true); } } } }); // add tooltip TableUtils.addTooltipForTable(table); TableUtils.addActionTooltip(table); } /** * DOC yyin Comment method "createMenuOfGenerateRegularPattern". * * @param analysis * @param menu * @param itemEntity */ public static void createMenuOfGenerateRegularPattern(final Analysis analysis, Menu menu, final ChartDataEntity dataEntity) { MenuItem itemCreatePatt = new MenuItem(menu, SWT.PUSH); itemCreatePatt.setText(DefaultMessagesImpl.getString("ChartTableFactory.GenerateRegularPattern")); //$NON-NLS-1$ itemCreatePatt.setImage(ImageLib.getImage(ImageLib.PATTERN_REG)); itemCreatePatt.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e1) { String query = dataEntity.getKey() == null ? dataEntity.getLabel() : dataEntity.getKey().toString(); createPattern(analysis, query); } }); } /** * DOC bZhou Comment method "createPattern". * * @param analysis * @param itemEntity * @param pattTransformer */ public static void createPattern(Analysis analysis, String query) { DbmsLanguage language = DbmsLanguageFactory.createDbmsLanguage(analysis); PatternTransformer pattTransformer = new PatternTransformer(language); String regex = pattTransformer.getRegexp(query); IFolder folder = ResourceManager.getPatternRegexFolder(); new CreatePatternAction(folder, ExpressionType.REGEXP, "'" + regex + "'", language.getDbmsName()).run(); //$NON-NLS-1$ //$NON-NLS-2$ } /** * DOC bZhou Comment method "isAllMatchIndicator". * * @param indicator * @return */ public static boolean isAllMatchIndicator(Indicator indicator) { ColumnsetSwitch<Indicator> iSwitch = new ColumnsetSwitch<Indicator>() { @Override public Indicator caseAllMatchIndicator(AllMatchIndicator object) { return object; } }; return iSwitch.doSwitch(indicator) != null; } /** * DOC bZhou Comment method "isDUDIndicator". * * @param indicator * @return false if the indicator is not Duplicated,Uniqure,Distinct indicator. */ public static boolean isDUDIndicator(Indicator indicator) { IndicatorsSwitch<Indicator> iSwitch = new IndicatorsSwitch<Indicator>() { @Override public Indicator caseDuplicateCountIndicator(DuplicateCountIndicator object) { return object; }; @Override public Indicator caseUniqueCountIndicator(UniqueCountIndicator object) { return object; }; @Override public Indicator caseDistinctCountIndicator(DistinctCountIndicator object) { return object; }; }; return iSwitch.doSwitch(indicator) != null; } /** * DOC bZhou Comment method "isPatternMatchingIndicator". * * @param indicator * @return false if the indicator is not pattern matching indicator. */ public static boolean isPatternMatchingIndicator(Indicator indicator) { IndicatorsSwitch<Indicator> iSwitch = new IndicatorsSwitch<Indicator>() { @Override public Indicator casePatternMatchingIndicator(PatternMatchingIndicator object) { return object; } }; return iSwitch.doSwitch(indicator) != null; } public static boolean isSQLPatternMatchingIndicator(Indicator indicator) { IndicatorsSwitch<Indicator> iSwitch = new IndicatorsSwitch<Indicator>() { @Override public Indicator caseSqlPatternMatchingIndicator(SqlPatternMatchingIndicator object) { return object; } }; return iSwitch.doSwitch(indicator) != null; } /** * DOC zshen Comment method "isFrequenceIndicator". * * @param indicator * @return false if the indicator is not Frequence indicator. */ public static boolean isFrequenceIndicator(Indicator indicator) { IndicatorsSwitch<Indicator> iSwitch = new IndicatorsSwitch<Indicator>() { @Override public Indicator caseFrequencyIndicator(FrequencyIndicator object) { return object; } }; return iSwitch.doSwitch(indicator) != null; } /** * DOC bZhou Comment method "isPatternFrequencyIndicator". * * @param indicator * @return false if the indicator is not pattern frequency indicator. */ public static boolean isPatternFrequencyIndicator(Indicator indicator) { IndicatorsSwitch<Indicator> iSwitch = new IndicatorsSwitch<Indicator>() { @Override public Indicator casePatternFreqIndicator(PatternFreqIndicator object) { return object; } @Override public Indicator casePatternLowFreqIndicator(PatternLowFreqIndicator object) { return object; } }; return iSwitch.doSwitch(indicator) != null; } /** * DOC bZhou Comment method "isPatternFrequencyIndicator". * * @param indicator * @return false if the indicator is not pattern frequency indicator. */ public static boolean isEastAsiaPatternFrequencyIndicator(Indicator indicator) { IndicatorsSwitch<Indicator> iSwitch = new IndicatorsSwitch<Indicator>() { /* * (non-Javadoc) * * @see org.talend.dataquality.indicators.util.IndicatorsSwitch#caseEastAsiaPatternFreqIndicator(org.talend. * dataquality.indicators.EastAsiaPatternFreqIndicator) */ @Override public Indicator caseEastAsiaPatternFreqIndicator(EastAsiaPatternFreqIndicator object) { return object; } /* * (non-Javadoc) * * @see * org.talend.dataquality.indicators.util.IndicatorsSwitch#caseEastAsiaPatternLowFreqIndicator(org.talend * .dataquality.indicators.EastAsiaPatternLowFreqIndicator) */ @Override public Indicator caseEastAsiaPatternLowFreqIndicator(EastAsiaPatternLowFreqIndicator object) { return object; } }; return iSwitch.doSwitch(indicator) != null; } /** * DOC zshen Comment method "isDatePatternFrequencyIndicator". * * @param indicator * @return false if the indicator is not Date pattern frequency indicator. */ public static boolean isDatePatternFrequencyIndicator(Indicator indicator) { IndicatorsSwitch<Indicator> iSwitch = new IndicatorsSwitch<Indicator>() { @Override public Indicator caseDatePatternFreqIndicator(DatePatternFreqIndicator object) { return object; } }; return iSwitch.doSwitch(indicator) != null; } /** * Added yyin TDQ-4829 20120717 To add the new feature: generate job from DQ rule * * @param indicator * @return */ public static boolean isDqRule(Indicator indicator) { if (indicator == null || indicator.getAnalyzedElement() == null) { return false; } // only support 7 kinds of db: mysql, oracle with sid, oracle with service name, oracle oci, // postgressql,mssql,mssql2005/2008 String[] supportDB = { EDatabaseTypeName.MYSQL.getDisplayName(), EDatabaseTypeName.PSQL.getDisplayName(), EDatabaseTypeName.ORACLEFORSID.getDisplayName(), EDatabaseTypeName.ORACLESN.getDisplayName(), EDatabaseTypeName.ORACLE_OCI.getDisplayName(), EDatabaseTypeName.MSSQL.getDisplayName(), EDatabaseTypeName.MSSQL05_08.getDisplayName() }; TdTable table = SwitchHelpers.TABLE_SWITCH.doSwitch(indicator.getAnalyzedElement()); if (table == null) { return false; } Connection tdDataProvider = TableHelper.getFirstConnection(table); if (tdDataProvider instanceof DatabaseConnection) { String type = ((DatabaseConnection) tdDataProvider).getDatabaseType(); boolean isSupport = false; for (String support : supportDB) { if (support.equals(type)) { isSupport = true; } } if (!isSupport) { return false; } } // RulesSwitch<DQRule> dqRulesSwitch = new RulesSwitch<DQRule>() { IndicatorsSwitch<Indicator> iSwitch = new IndicatorsSwitch<Indicator>() { @Override public WhereRuleIndicator caseIndicator(Indicator object) { if (object instanceof WhereRuleIndicator) { return (WhereRuleIndicator) object; } return null; } // @Override // public DQRule caseDQRule(DQRule object) { // return object; // } }; return iSwitch.doSwitch(indicator) != null; } /** * DOC Administrator Comment method "isPhonseNumberIndicator". * * @param indicator * @return */ public static boolean isPhonseNumberIndicator(Indicator indicator) { IndicatorsSwitch<Indicator> iSwitch = new IndicatorsSwitch<Indicator>() { @Override public Indicator casePossiblePhoneCountIndicator(PossiblePhoneCountIndicator object) { // TODO Auto-generated method stub return object; } @Override public Indicator caseValidPhoneCountIndicator(ValidPhoneCountIndicator object) { // TODO Auto-generated method stub return object; } @Override public Indicator caseWellFormE164PhoneCountIndicator(WellFormE164PhoneCountIndicator object) { // TODO Auto-generated method stub return object; } @Override public Indicator caseWellFormIntePhoneCountIndicator(WellFormIntePhoneCountIndicator object) { // TODO Auto-generated method stub return object; } @Override public Indicator caseWellFormNationalPhoneCountIndicator(WellFormNationalPhoneCountIndicator object) { // TODO Auto-generated method stub return object; } }; return iSwitch.doSwitch(indicator) != null; } }