// ============================================================================ // // 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.states.utils; import java.util.ArrayList; import java.util.List; import org.talend.cwm.helper.TaggedValueHelper; import org.talend.dataprofiler.core.model.TableIndicator; import org.talend.dataprofiler.core.ui.editor.preview.TableIndicatorUnit; import org.talend.dataprofiler.core.ui.pref.EditorPreferencePage; import org.talend.dataquality.indicators.Indicator; import org.talend.dataquality.indicators.RowCountIndicator; import org.talend.dataquality.indicators.definition.IndicatorDefinition; import org.talend.dq.analysis.explore.DQRuleExplorer; import org.talend.dq.analysis.explore.DataExplorer; import org.talend.dq.indicators.preview.table.WhereRuleChartDataEntity; import org.talend.dq.nodes.indicator.type.IndicatorEnum; import orgomg.cwm.objectmodel.core.TaggedValue; /** * created by yyin on 2014-12-4 Detailled comment * */ public class WhereRuleStatisticsStateUtil { public static DataExplorer getDataExplorer() { return new DQRuleExplorer(); } /** * DOC yyin Comment method "getSizeOfDQRule". * * @return */ public static int getSizeOfDQRulePerChart() { String dqruleSize = EditorPreferencePage.getDQRuleSize(); int maxSize = Integer.MAX_VALUE; int size = maxSize; try { size = Integer.parseInt(dqruleSize); if (size < 1) { size = maxSize; } } catch (NumberFormatException e) { size = maxSize; } return size; } public static List<List<Indicator>> getPagedIndicators(List<TableIndicatorUnit> units) { int size = getSizeOfDQRulePerChart(); List<List<Indicator>> indicatorList = new ArrayList<List<Indicator>>(); // first , add row count indicator List<Indicator> rowInd = new ArrayList<Indicator>(); rowInd.add(getRownCountUnit(units).getIndicator()); indicatorList.add(rowInd); // then, add all where rules(one chart <--> one list) List<TableIndicatorUnit> whereRuleUnits = removeRowCountUnit(units); int totalNum = whereRuleUnits.size(); int pageNum = totalNum % size == 0 ? totalNum / size : totalNum / size + 1; for (int i = 0; i < pageNum; i++) { List<Indicator> rules = new ArrayList<Indicator>(); for (int j = 0; j < size; ++j) { int index = i * size + j; if (index < totalNum) { rules.add(whereRuleUnits.get(index).getIndicator()); } else { break; } } indicatorList.add(rules); } return indicatorList; } /** * DOC xqliu Comment method "removeRowCountUnit". * * @param units1 * @return */ public static List<TableIndicatorUnit> removeRowCountUnit(List<TableIndicatorUnit> units1) { List<TableIndicatorUnit> result = new ArrayList<TableIndicatorUnit>(); for (TableIndicatorUnit tiu : units1) { if (!IndicatorEnum.RowCountIndicatorEnum.equals(tiu.getType())) { result.add(tiu); } } return result; } /** * DOC xqliu Comment method "getRownCountUnit". * * @param units1 * @return */ public static TableIndicatorUnit getRownCountUnit(List<TableIndicatorUnit> units1) { for (TableIndicatorUnit tiu : units1) { if (IndicatorEnum.RowCountIndicatorEnum.equals(tiu.getType())) { return tiu; } } return null; } /** * DOC xqliu Comment method "getUnitToolTip". ADD xqliu 2010-03-10 feature 10834 * * @param unit * @return */ public static String getUnitToolTip(TableIndicatorUnit unit) { if (unit != null) { if (unit.getIndicator() != null && unit.getIndicator().getIndicatorDefinition() != null) { IndicatorDefinition indicatorDefinition = unit.getIndicator().getIndicatorDefinition(); TaggedValue taggedValue = TaggedValueHelper.getTaggedValue(TaggedValueHelper.DESCRIPTION, indicatorDefinition.getTaggedValue()); if (taggedValue != null) { return taggedValue.getValue(); } } } return null; } /** * DOC yyin Comment method "createRuleDataEntity". * * @param unit * @param columnKey * @param value * @param valueNotM * @return */ public static WhereRuleChartDataEntity createRuleDataEntity(TableIndicatorUnit unit, String columnKey, double value, double valueNotM) { WhereRuleChartDataEntity entity = new WhereRuleChartDataEntity(); entity.setIndicator(unit.getIndicator()); entity.setLabel(columnKey); entity.setNumMatch(String.valueOf(value)); entity.setNumNoMatch(String.valueOf(valueNotM)); // ADD xqliu 2010-03-10 feature 10834 entity.setToolTip(WhereRuleStatisticsStateUtil.getUnitToolTip(unit)); // ~ return entity; } /** * get the MatchValue * * @param value * @return */ public static double getMatchValue(Object value) { return value == null ? Double.NaN : Double.parseDouble(value.toString()); } public static double getNotMatchValue(Object value, double matchValue, long rowCount) { return value == null ? Double.NaN : rowCount - matchValue; } public static Long initRowCount(TableIndicator tableIndicator1) { Long result = 0L; if (tableIndicator1 != null) { TableIndicatorUnit[] tius = tableIndicator1.getIndicatorUnits(); for (TableIndicatorUnit tiu : tius) { if (tiu.getIndicator() instanceof RowCountIndicator) { RowCountIndicator rci = (RowCountIndicator) tiu.getIndicator(); result = rci.getCount(); break; } } } return result; } }