// ============================================================================ // // 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; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.talend.dataprofiler.core.model.ModelElementIndicator; import org.talend.dataprofiler.core.model.TableIndicator; import org.talend.dataprofiler.core.ui.utils.UDIUtils; import org.talend.dataquality.indicators.definition.IndicatorCategory; import org.talend.dq.indicators.definitions.DefinitionHandler; import org.talend.dq.indicators.preview.EIndicatorChartType; import org.talend.dq.nodes.indicator.type.IndicatorEnum; /** * DOC zqin class global comment. Detailled comment <br/> * * $Id: talend.epf 1 2006-09-29 17:06:40Z zqin $ * */ public final class CompositeIndicator { private IndicatorUnit[] indicatorUnits; private TableIndicatorUnit[] tableIndicatorUnits; private Map<EIndicatorChartType, List<IndicatorUnit>> separatedMap; private Map<EIndicatorChartType, List<TableIndicatorUnit>> tableSeparatedMap; private List<IndicatorUnit> simpleList, textList, frequencyList, lowFrequencyList, soundexFrequencyList, soundexLowFrequencyList, patternFrequencylist, patternLowFrequencyList, eastAsiaPatternFrequencylist, eastAsiaPatternLowFrequencyList, datePatternFrequencyList, summaryList, patternList, sqlPatternList, modelIndicatorList, udiCountList, udiFrequencyList, udiMatchingList, udiRealValueList, dateFrequencyList, dateLowFrequencyList, simpleTextList, phoneNumbList, formatFreqList; private List<TableIndicatorUnit> tableSimpleList, tableWhereRuleList; private List<IndicatorUnit> binFrequencyList, fraudList; private List<IndicatorUnit> binLowFrequencyList; // MOD yyi 2010-10-08 16081 private List<IndicatorUnit> weekFrequencyList, weekLowFrequencyList, monthFrequencyList, monthLowFrequencyList, quarterFrequencyList, quarterLowFrequencyList, yearFrequencyList, yearLowFrequencyList; private static CompositeIndicator instance; private CompositeIndicator() { init(); // this.separatedMap = new HashMap<EIndicatorChartType, List<IndicatorUnit>>(); // this.indicatorUnits = initIndicatorUnits(columnIndicator.getIndicatorUnits()); } public static CompositeIndicator getInstance() { if (instance == null) { instance = new CompositeIndicator(); } return instance; } private void init() { simpleList = new ArrayList<IndicatorUnit>(); textList = new ArrayList<IndicatorUnit>(); frequencyList = new ArrayList<IndicatorUnit>(); lowFrequencyList = new ArrayList<IndicatorUnit>(); binFrequencyList = new ArrayList<IndicatorUnit>(); binLowFrequencyList = new ArrayList<IndicatorUnit>(); soundexFrequencyList = new ArrayList<IndicatorUnit>(); soundexLowFrequencyList = new ArrayList<IndicatorUnit>(); patternFrequencylist = new ArrayList<IndicatorUnit>(); patternLowFrequencyList = new ArrayList<IndicatorUnit>(); eastAsiaPatternLowFrequencyList = new ArrayList<IndicatorUnit>(); eastAsiaPatternFrequencylist = new ArrayList<IndicatorUnit>(); datePatternFrequencyList = new ArrayList<IndicatorUnit>(); summaryList = new ArrayList<IndicatorUnit>(); patternList = new ArrayList<IndicatorUnit>(); sqlPatternList = new ArrayList<IndicatorUnit>(); modelIndicatorList = new ArrayList<IndicatorUnit>(); separatedMap = new HashMap<EIndicatorChartType, List<IndicatorUnit>>(); // MOD xqliu 2009-02-25 feature 6015 tableSimpleList = new ArrayList<TableIndicatorUnit>(); tableWhereRuleList = new ArrayList<TableIndicatorUnit>(); tableSeparatedMap = new HashMap<EIndicatorChartType, List<TableIndicatorUnit>>(); // ~ udiCountList = new ArrayList<IndicatorUnit>(); udiFrequencyList = new ArrayList<IndicatorUnit>(); udiMatchingList = new ArrayList<IndicatorUnit>(); udiRealValueList = new ArrayList<IndicatorUnit>(); dateFrequencyList = new ArrayList<IndicatorUnit>(); dateLowFrequencyList = new ArrayList<IndicatorUnit>(); simpleTextList = new ArrayList<IndicatorUnit>(); // MOD yyi 2010-10-08 16081 weekFrequencyList = new ArrayList<IndicatorUnit>(); weekLowFrequencyList = new ArrayList<IndicatorUnit>(); monthFrequencyList = new ArrayList<IndicatorUnit>(); monthLowFrequencyList = new ArrayList<IndicatorUnit>(); quarterFrequencyList = new ArrayList<IndicatorUnit>(); quarterLowFrequencyList = new ArrayList<IndicatorUnit>(); yearFrequencyList = new ArrayList<IndicatorUnit>(); yearLowFrequencyList = new ArrayList<IndicatorUnit>(); // ~ phoneNumbList = new ArrayList<IndicatorUnit>(); formatFreqList = new ArrayList<IndicatorUnit>(); fraudList = new ArrayList<IndicatorUnit>(); } private void clear() { simpleList.clear(); textList.clear(); frequencyList.clear(); lowFrequencyList.clear(); binFrequencyList.clear(); binLowFrequencyList.clear(); soundexFrequencyList.clear(); soundexLowFrequencyList.clear(); patternFrequencylist.clear(); patternLowFrequencyList.clear(); eastAsiaPatternFrequencylist.clear(); eastAsiaPatternLowFrequencyList.clear(); datePatternFrequencyList.clear(); summaryList.clear(); patternList.clear(); sqlPatternList.clear(); modelIndicatorList.clear(); separatedMap.clear(); // MOD xqliu 2009-02-25 feature 6015 tableSimpleList.clear(); tableWhereRuleList.clear(); tableSeparatedMap.clear(); // ~ udiCountList.clear(); udiFrequencyList.clear(); udiMatchingList.clear(); udiRealValueList.clear(); dateFrequencyList.clear(); dateLowFrequencyList.clear(); simpleTextList.clear(); weekFrequencyList.clear(); weekLowFrequencyList.clear(); monthFrequencyList.clear(); monthLowFrequencyList.clear(); quarterFrequencyList.clear(); quarterLowFrequencyList.clear(); yearFrequencyList.clear(); yearLowFrequencyList.clear(); phoneNumbList.clear(); formatFreqList.clear(); fraudList.clear(); } private IndicatorUnit[] initChildIndicatorUnits(List<IndicatorUnit> tempList, IndicatorUnit[] indicatorUnits) { for (IndicatorUnit unit : indicatorUnits) { // MOD gdbu TDQ-4261 2011-12-21 : Here we should only add the indicator,needn't to add the indicator's // classification. if (unit.getChildren() != null) { // MOD qiongli TDQ-6211 2012-11-27 IQRIndicator and RangeIndicator should add itself. IndicatorEnum type = unit.getType(); if (type != null && (type == IndicatorEnum.IQRIndicatorEnum || type == IndicatorEnum.RangeIndicatorEnum)) { tempList.add(unit); } initChildIndicatorUnits(tempList, unit.getChildren()); } else { tempList.add(unit); } // ~TDQ-4261 } return tempList.toArray(new IndicatorUnit[tempList.size()]); } public Map<EIndicatorChartType, List<IndicatorUnit>> getIndicatorComposite(ModelElementIndicator modelElementIndicator) { this.clear(); List<IndicatorUnit> tempList = new ArrayList<IndicatorUnit>(); this.indicatorUnits = initChildIndicatorUnits(tempList, modelElementIndicator.getIndicatorUnits()); for (IndicatorUnit one : indicatorUnits) { switch (one.getType()) { case RowCountIndicatorEnum: case NullCountIndicatorEnum: case DistinctCountIndicatorEnum: case UniqueIndicatorEnum: case DuplicateCountIndicatorEnum: case BlankCountIndicatorEnum: case DefValueCountIndicatorEnum: simpleList.add(one); break; case MinLengthIndicatorEnum: case MinLengthWithNullIndicatorEnum: case MinLengthWithBlankIndicatorEnum: case MinLengthWithBlankNullIndicatorEnum: case MaxLengthIndicatorEnum: case MaxLengthWithNullIndicatorEnum: case MaxLengthWithBlankIndicatorEnum: case MaxLengthWithBlankNullIndicatorEnum: case AverageLengthIndicatorEnum: case AverageLengthWithNullIndicatorEnum: case AverageLengthWithBlankIndicatorEnum: case AverageLengthWithNullBlankIndicatorEnum: textList.add(one); break; case FrequencyIndicatorEnum: frequencyList.add(one); break; // MOD yyi 2010-10-08 16081 case WeekFrequencyIndicatorEnum: weekFrequencyList.add(one); break; case MonthFrequencyIndicatorEnum: monthFrequencyList.add(one); break; case QuarterFrequencyIndicatorEnum: quarterFrequencyList.add(one); break; case YearFrequencyIndicatorEnum: yearFrequencyList.add(one); break; case DateFrequencyIndicatorEnum: dateFrequencyList.add(one); break; case BinFrequencyIndicatorEnum: binFrequencyList.add(one); break; case LowFrequencyIndicatorEnum: lowFrequencyList.add(one); break; case WeekLowFrequencyIndicatorEnum: weekLowFrequencyList.add(one); break; case MonthLowFrequencyIndicatorEnum: monthLowFrequencyList.add(one); break; case QuarterLowFrequencyIndicatorEnum: quarterLowFrequencyList.add(one); break; case YearLowFrequencyIndicatorEnum: yearLowFrequencyList.add(one); break; case DateLowFrequencyIndicatorEnum: dateLowFrequencyList.add(one); break; // ~ case BinLowFrequencyIndicatorEnum: binLowFrequencyList.add(one); break; // ~ MOD mzhao 2009-03-23 Feature 6307 case SoundexIndicatorEnum: soundexFrequencyList.add(one); break; case SoundexLowIndicatorEnum: soundexLowFrequencyList.add(one); break; // ~ case PatternFreqIndicatorEnum: patternFrequencylist.add(one); break; case PatternLowFreqIndicatorEnum: patternLowFrequencyList.add(one); break; case EastAsiaPatternFreqIndicatorEnum: eastAsiaPatternFrequencylist.add(one); break; case EastAsiaPatternLowFreqIndicatorEnum: eastAsiaPatternLowFrequencyList.add(one); break; case DatePatternFreqIndicatorEnum: datePatternFrequencyList.add(one); break; case IQRIndicatorEnum: case RangeIndicatorEnum: case MeanIndicatorEnum: case MinValueIndicatorEnum: case MaxValueIndicatorEnum: case MedianIndicatorEnum: case LowerQuartileIndicatorEnum: case UpperQuartileIndicatorEnum: summaryList.add(one); break; case RegexpMatchingIndicatorEnum: patternList.add(one); break; case SqlPatternMatchingIndicatorEnum: sqlPatternList.add(one); break; case ModeIndicatorEnum: modelIndicatorList.add(one); break; case UserDefinedIndicatorEnum: IndicatorCategory ic = UDIUtils.getUDICategory(one); if (DefinitionHandler.getInstance().getUserDefinedCountIndicatorCategory().equals(ic)) { udiCountList.add(one); } else if (DefinitionHandler.getInstance().getUserDefinedMatchIndicatorCategory().equals(ic)) { udiMatchingList.add(one); } else if (DefinitionHandler.getInstance().getUserDefinedFrequencyIndicatorCategory().equals(ic)) { udiFrequencyList.add(one); } else if (DefinitionHandler.getInstance().getUserDefinedRealValueIndicatorCategory().equals(ic)) { udiRealValueList.add(one); } break; case ValidPhoneCountIndicatorEnum: case PossiblePhoneCountIndicatorEnum: case ValidRegCodeCountIndicatorEnum: case InvalidRegCodeCountIndicatorEnum: case WellFormE164PhoneCountIndicatorEnum: case WellFormIntePhoneCountIndicatorEnum: case WellFormNationalPhoneCountIndicatorEnum: phoneNumbList.add(one); break; case FormatFreqPieIndictorEnum: formatFreqList.add(one); break; case BenfordLawFrequencyIndicatorEnum: fraudList.add(one); break; default: } } separatedMap.put(EIndicatorChartType.SIMPLE_STATISTICS, simpleList); separatedMap.put(EIndicatorChartType.TEXT_STATISTICS, textList); separatedMap.put(EIndicatorChartType.FREQUENCE_STATISTICS, frequencyList); separatedMap.put(EIndicatorChartType.LOW_FREQUENCE_STATISTICS, lowFrequencyList); // MOD klliu 2010-08-06 bug 14695 separatedMap.put(EIndicatorChartType.BIN_FREQUENCE_STATISTICS, binFrequencyList); separatedMap.put(EIndicatorChartType.BIN_LOW_FREQUENCE_STATISTICS, binLowFrequencyList); // MOD yyi 2010-10-08 16081 separatedMap.put(EIndicatorChartType.DATE_FREQUENCE_STATISTICS, dateFrequencyList); separatedMap.put(EIndicatorChartType.DATE_LOW_FREQUENCE_STATISTICS, dateLowFrequencyList); separatedMap.put(EIndicatorChartType.WEEK_FREQUENCE_STATISTICS, weekFrequencyList); separatedMap.put(EIndicatorChartType.WEEK_LOW_FREQUENCE_STATISTICS, weekLowFrequencyList); separatedMap.put(EIndicatorChartType.MONTH_FREQUENCE_STATISTICS, monthFrequencyList); separatedMap.put(EIndicatorChartType.MONTH_LOW_FREQUENCE_STATISTICS, monthLowFrequencyList); separatedMap.put(EIndicatorChartType.QUARTER_FREQUENCE_STATISTICS, quarterFrequencyList); separatedMap.put(EIndicatorChartType.QUARTER_LOW_FREQUENCE_STATISTICS, quarterLowFrequencyList); separatedMap.put(EIndicatorChartType.YEAR_FREQUENCE_STATISTICS, yearFrequencyList); separatedMap.put(EIndicatorChartType.YEAR_LOW_FREQUENCE_STATISTICS, yearLowFrequencyList); // ~ separatedMap.put(EIndicatorChartType.SOUNDEX_FREQUENCY_TABLE, soundexFrequencyList); separatedMap.put(EIndicatorChartType.SOUNDEX_LOW_FREQUENCY_TABLE, soundexLowFrequencyList); separatedMap.put(EIndicatorChartType.PATTERN_FREQUENCE_STATISTICS, patternFrequencylist); separatedMap.put(EIndicatorChartType.PATTERN_LOW_FREQUENCE_STATISTICS, patternLowFrequencyList); separatedMap.put(EIndicatorChartType.EAST_ASIA_PATTERN_FREQUENCE_STATISTICS, eastAsiaPatternFrequencylist); separatedMap.put(EIndicatorChartType.EAST_ASIA_PATTERN_LOW_FREQUENCE_STATISTICS, eastAsiaPatternLowFrequencyList); separatedMap.put(EIndicatorChartType.DATE_PATTERN_FREQUENCE_STATISTICS, datePatternFrequencyList); separatedMap.put(EIndicatorChartType.SUMMARY_STATISTICS, summaryList); separatedMap.put(EIndicatorChartType.PATTERN_MATCHING, patternList); separatedMap.put(EIndicatorChartType.SQL_PATTERN_MATCHING, sqlPatternList); separatedMap.put(EIndicatorChartType.MODE_INDICATOR, modelIndicatorList); separatedMap.put(EIndicatorChartType.UDI_COUNT, udiCountList); separatedMap.put(EIndicatorChartType.UDI_FREQUENCY, udiFrequencyList); separatedMap.put(EIndicatorChartType.UDI_MATCHING, udiMatchingList); separatedMap.put(EIndicatorChartType.UDI_REALVALUE, udiRealValueList); separatedMap.put(EIndicatorChartType.PHONE_NUMBER_STATISTICS, phoneNumbList); separatedMap.put(EIndicatorChartType.FORMAT_FREQ_PIE_STATISTICS, formatFreqList); separatedMap.put(EIndicatorChartType.BENFORD_LAW_STATISTICS, fraudList); return separatedMap; } public Map<EIndicatorChartType, List<TableIndicatorUnit>> getTableIndicatorComposite(TableIndicator tableIndicator) { this.clear(); List<TableIndicatorUnit> tempList = new ArrayList<TableIndicatorUnit>(); this.tableIndicatorUnits = initChildTableIndicatorUnits(tempList, tableIndicator.getIndicatorUnits()); for (TableIndicatorUnit one : tableIndicatorUnits) { switch (one.getType()) { case WhereRuleIndicatorEnum: case RowCountIndicatorEnum: tableWhereRuleList.add(one); break; default: } } tableSeparatedMap.put(EIndicatorChartType.SIMPLE_STATISTICS, tableSimpleList); tableSeparatedMap.put(EIndicatorChartType.WHERERULE_INDICATOR, tableWhereRuleList); return tableSeparatedMap; } private TableIndicatorUnit[] initChildTableIndicatorUnits(List<TableIndicatorUnit> tempList, TableIndicatorUnit[] indicatorUnits) { for (TableIndicatorUnit unit : indicatorUnits) { if (unit.getChildren() != null) { initChildTableIndicatorUnits(tempList, unit.getChildren()); } else { tempList.add(unit); } } return tempList.toArray(new TableIndicatorUnit[tempList.size()]); } }