/** * <copyright> </copyright> * * $Id$ */ package org.talend.dataquality.indicators.columnset.impl; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.common.util.BasicEList; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.util.EDataTypeUniqueEList; import org.eclipse.emf.ecore.util.EObjectResolvingEList; import org.talend.algorithms.AlgoUtils; import org.talend.core.model.metadata.builder.connection.MetadataColumn; import org.talend.cwm.helper.SwitchHelpers; import org.talend.cwm.relational.TdColumn; import org.talend.dataquality.helpers.IndicatorHelper; import org.talend.dataquality.helpers.MetadataHelper; import org.talend.dataquality.indicators.DataminingType; import org.talend.dataquality.indicators.DistinctCountIndicator; import org.talend.dataquality.indicators.DuplicateCountIndicator; import org.talend.dataquality.indicators.Indicator; import org.talend.dataquality.indicators.RowCountIndicator; import org.talend.dataquality.indicators.UniqueCountIndicator; import org.talend.dataquality.indicators.columnset.ColumnSetMultiValueIndicator; import org.talend.dataquality.indicators.columnset.ColumnsetPackage; import org.talend.dataquality.indicators.impl.CompositeIndicatorImpl; import org.talend.dataquality.indicators.mapdb.AbstractDB; import org.talend.dataquality.indicators.mapdb.ColumnSetDBMap; import org.talend.dataquality.indicators.mapdb.DBMap; import org.talend.dataquality.indicators.mapdb.StandardDBName; import org.talend.resource.ResourceManager; import org.talend.utils.collections.Tuple; import org.talend.utils.sql.Java2SqlType; import org.talend.utils.sql.TalendTypeConvert; import orgomg.cwm.objectmodel.core.ModelElement; /** * <!-- begin-user-doc --> An implementation of the model object '<em><b>Column Set Multi Value Indicator</b></em>'. * <!-- end-user-doc --> * <p> * The following features are implemented: * <ul> * <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getAnalyzedColumns <em> * Analyzed Columns</em>}</li> * <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getListRows <em>List * Rows</em>}</li> * <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getNumericFunctions <em> * Numeric Functions</em>}</li> * <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getNominalColumns <em> * Nominal Columns</em>}</li> * <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getNumericColumns <em> * Numeric Columns</em>}</li> * <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getColumnHeaders <em> * Column Headers</em>}</li> * <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getDateFunctions <em> * Date Functions</em>}</li> * <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getDateColumns <em>Date * Columns</em>}</li> * <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getUniqueCount <em> * Unique Count</em>}</li> * <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getDistinctCount <em> * Distinct Count</em>}</li> * <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getDuplicateCount <em> * Duplicate Count</em>}</li> * <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getRowCountIndicator * <em>Row Count Indicator</em>}</li> * <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getUniqueCountIndicator * <em>Unique Count Indicator</em>}</li> * <li> * {@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getDistinctCountIndicator * <em>Distinct Count Indicator</em>}</li> * <li> * {@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getDuplicateCountIndicator * <em>Duplicate Count Indicator</em>}</li> * </ul> * </p> * * @generated */ public class ColumnSetMultiValueIndicatorImpl extends CompositeIndicatorImpl implements ColumnSetMultiValueIndicator { private static Logger log = Logger.getLogger(ColumnSetMultiValueIndicatorImpl.class); /** * The cached value of the '{@link #getAnalyzedColumns() <em>Analyzed Columns</em>}' reference list. <!-- * begin-user-doc --> <!-- end-user-doc --> * * @see #getAnalyzedColumns() * @generated * @ordered */ protected EList<ModelElement> analyzedColumns; /** * The default value of the '{@link #getListRows() <em>List Rows</em>}' attribute. <!-- begin-user-doc --> <!-- * end-user-doc --> * * @see #getListRows() * @generated * @ordered */ protected static final List<Object[]> LIST_ROWS_EDEFAULT = null; /** * The cached value of the '{@link #getListRows() <em>List Rows</em>}' attribute. <!-- begin-user-doc --> <!-- * end-user-doc --> * * @see #getListRows() * @generated * @ordered */ protected List<Object[]> listRows = LIST_ROWS_EDEFAULT; /** * The cached value of the '{@link #getNumericFunctions() <em>Numeric Functions</em>}' attribute list. <!-- * begin-user-doc --> <!-- end-user-doc --> * * @see #getNumericFunctions() * @generated * @ordered */ protected EList<String> numericFunctions; /** * The cached value of the '{@link #getDateFunctions() <em>Date Functions</em>}' attribute list. <!-- begin-user-doc * --> <!-- end-user-doc --> * * @see #getDateFunctions() * @generated * @ordered */ protected EList<String> dateFunctions; /** * The cached value of the '{@link #getDateColumns() <em>Date Columns</em>}' reference list. <!-- begin-user-doc --> * <!-- end-user-doc --> * * @see #getDateColumns() * @generated * @ordered */ protected EList<ModelElement> dateColumns; /** * The default value of the '{@link #getUniqueCount() <em>Unique Count</em>}' attribute. <!-- begin-user-doc --> * <!-- end-user-doc --> * * @see #getUniqueCount() * @generated * @ordered */ protected static final Long UNIQUE_COUNT_EDEFAULT = null; /** * The cached value of the '{@link #getUniqueCount() <em>Unique Count</em>}' attribute. <!-- begin-user-doc --> <!-- * end-user-doc --> * * @see #getUniqueCount() * @generated * @ordered */ protected Long uniqueCount = UNIQUE_COUNT_EDEFAULT; /** * The default value of the '{@link #getDistinctCount() <em>Distinct Count</em>}' attribute. <!-- begin-user-doc --> * <!-- end-user-doc --> * * @see #getDistinctCount() * @generated * @ordered */ protected static final Long DISTINCT_COUNT_EDEFAULT = null; /** * The cached value of the '{@link #getDistinctCount() <em>Distinct Count</em>}' attribute. <!-- begin-user-doc --> * <!-- end-user-doc --> * * @see #getDistinctCount() * @generated * @ordered */ protected Long distinctCount = DISTINCT_COUNT_EDEFAULT; /** * The default value of the '{@link #getDuplicateCount() <em>Duplicate Count</em>}' attribute. <!-- begin-user-doc * --> <!-- end-user-doc --> * * @see #getDuplicateCount() * @generated * @ordered */ protected static final Long DUPLICATE_COUNT_EDEFAULT = null; /** * The cached value of the '{@link #getRowCountIndicator() <em>Row Count Indicator</em>}' containment reference. * <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #getRowCountIndicator() * @generated * @ordered */ protected RowCountIndicator rowCountIndicator; /** * The cached value of the '{@link #getUniqueCountIndicator() <em>Unique Count Indicator</em>}' containment * reference. <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #getUniqueCountIndicator() * @generated * @ordered */ protected UniqueCountIndicator uniqueCountIndicator; /** * The cached value of the '{@link #getDistinctCountIndicator() <em>Distinct Count Indicator</em>}' containment * reference. <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #getDistinctCountIndicator() * @generated * @ordered */ protected DistinctCountIndicator distinctCountIndicator; /** * The cached value of the '{@link #getDuplicateCountIndicator() <em>Duplicate Count Indicator</em>}' containment * reference. <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #getDuplicateCountIndicator() * @generated * @ordered */ protected DuplicateCountIndicator duplicateCountIndicator; /** * store the value of group like use sql 'select a ,b from table group by a,b'. */ protected Map<Object, Long> valueByGroupMapForJavaMap = new HashMap<Object, Long>(); /** * store the value of group like use sql 'select a ,b from table group by a,b' when use MapDB. */ protected DBMap<List<Object>, Long> valueByGroupMapForMapDB = null; /** * make 'valueByGroupMap' convert to a List<Object[]> */ protected List<Object[]> valueByGroupList = null; /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ protected ColumnSetMultiValueIndicatorImpl() { super(); } /** * DOC talend Comment method "initValueByGroupMap". * * @return */ private DBMap<List<Object>, Long> initValueForColumnSetDBMap(String dbName) { if (isUsedMapDBMode()) { return new ColumnSetDBMap(ResourceManager.getMapDBFilePath(), ResourceManager.getMapDBFileName(this), ResourceManager.getMapDBCatalogName(this, dbName)); } return null; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override protected EClass eStaticClass() { return ColumnsetPackage.Literals.COLUMN_SET_MULTI_VALUE_INDICATOR; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public EList<ModelElement> getAnalyzedColumns() { if (analyzedColumns == null) { analyzedColumns = new EObjectResolvingEList<ModelElement>(ModelElement.class, this, ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__ANALYZED_COLUMNS); } return analyzedColumns; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public List<Object[]> getListRows() { return listRows; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setListRows(List<Object[]> newListRows) { List<Object[]> oldListRows = listRows; listRows = newListRows; if (eNotificationRequired()) { eNotify(new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__LIST_ROWS, oldListRows, listRows)); } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public EList<String> getNumericFunctions() { if (numericFunctions == null) { numericFunctions = new EDataTypeUniqueEList<String>(String.class, this, ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__NUMERIC_FUNCTIONS); } return numericFunctions; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ @Override public EList<ModelElement> getNominalColumns() { EList<ModelElement> nominalColumns = new BasicElistExtend<ModelElement>();// bug 10578 by zshen,fix the // correlation analysis to be move if (analyzedColumns != null) { for (ModelElement column : analyzedColumns) { if (isSameMiningType(column, DataminingType.NOMINAL)) { nominalColumns.add(column); } } } return nominalColumns; } private Boolean isSameMiningType(ModelElement column, DataminingType type) { // MOD yyi 2011-02-25 16660: edit connection, save it will get error final MetadataColumn mdColumn = SwitchHelpers.METADATA_COLUMN_SWITCH.doSwitch(column); final TdColumn tdColumn = SwitchHelpers.COLUMN_SWITCH.doSwitch(column); if (tdColumn == null && mdColumn == null) { if (column == null) { log.error("The list of analyzed column contains a null column"); } else { log.error("Analyzed element should be a TdColumn instead of a Column. Analyzed element is " + column.getName()); } // Column which is null is not a nominal type. return false; } // MOD qiongli 2011-3-8.fetature 19192,add mdColumn for MetadataColumn(delimited file) DataminingType dataminingType = MetadataHelper.getDataminingType(column); if (dataminingType != null && type == dataminingType) { return Boolean.TRUE; } return Boolean.FALSE; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ @Override public EList<ModelElement> getNumericColumns() { EList<ModelElement> computedColumns = new BasicElistExtend<ModelElement>();// bug 10578 by zshen,fix the // correlation analysis to be move if (analyzedColumns != null) { for (ModelElement column : analyzedColumns) { // MOD yyi 2011-02-25 16660: edit connection, save it will get error final MetadataColumn mdColumn = SwitchHelpers.METADATA_COLUMN_SWITCH.doSwitch(column); final TdColumn tdColumn = SwitchHelpers.COLUMN_SWITCH.doSwitch(column); // MOD qiongli 2011-3-8.fetature 19192,,add mdColumn for MetadataColumn(delimited file) if (tdColumn != null) { if (isSameMiningType(column, DataminingType.INTERVAL) && Java2SqlType.isNumbericInSQL(tdColumn.getSqlDataType().getJavaDataType())) { computedColumns.add(column); } } else if (mdColumn != null) { int javaType = TalendTypeConvert.convertToJDBCType(mdColumn.getTalendType()); if (isSameMiningType(column, DataminingType.INTERVAL) && Java2SqlType.isNumbericInSQL(javaType)) { computedColumns.add(column); } } } } return computedColumns; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ @Override public EList<String> getColumnHeaders() { EList<String> headers = new BasicEList<String>(); // shuold keep the order of the columns, when show the data in result page need to follow the order for (ModelElement column : analyzedColumns) { if (isSameMiningType(column, DataminingType.INTERVAL)) { // add numerical or date columns with formatted heander name if numeric or date functions defined in // indicator definition. final MetadataColumn mdColumn = SwitchHelpers.METADATA_COLUMN_SWITCH.doSwitch(column); final TdColumn tdColumn = SwitchHelpers.COLUMN_SWITCH.doSwitch(column); if (tdColumn != null) { // For database items addDBColumnToHeaderList(headers, column, tdColumn); } else if (mdColumn != null) { // For file items. addFileColumnToHeaderList(headers, column, mdColumn); } else { // Never go here log.error("invalid data mining type for " + column); } } else { headers.add(column.getName()); } } headers.add(this.getCountAll()); return headers; } /** * DOC xqliu Comment method "addFileColumnToHeaderList". * * @param headers * @param column * @param mdColumn */ private void addFileColumnToHeaderList(EList<String> headers, ModelElement column, final MetadataColumn mdColumn) { int javaType = TalendTypeConvert.convertToJDBCType(mdColumn.getTalendType()); if (Java2SqlType.isDateInSQL(javaType)) { // Date column. EList<String> dateFunctionsList = getDateFunctions(); addColumnToHeaderList(headers, column, dateFunctionsList); } else if (Java2SqlType.isNumbericInSQL(javaType)) { // Numerical column EList<String> numericFunctionsList = getNumericFunctions(); addColumnToHeaderList(headers, column, numericFunctionsList); } } /** * DOC xqliu Comment method "addDBColumnToHeaderList". * * @param headers * @param column * @param tdColumn */ private void addDBColumnToHeaderList(EList<String> headers, ModelElement column, final TdColumn tdColumn) { if (Java2SqlType.isDateInSQL(tdColumn.getSqlDataType().getJavaDataType())) { // Date column. EList<String> dateFunctionsList = getDateFunctions(); addColumnToHeaderList(headers, column, dateFunctionsList); } else if (Java2SqlType.isNumbericInSQL(tdColumn.getSqlDataType().getJavaDataType())) { // Numerical column EList<String> numericFunctionsList = getNumericFunctions(); addColumnToHeaderList(headers, column, numericFunctionsList); } } /** * DOC xqliu Comment method "addColumnToHeaderList". * * @param headers * @param column * @param functionsList */ private void addColumnToHeaderList(EList<String> headers, ModelElement column, EList<String> functionsList) { if (functionsList != null && !functionsList.isEmpty()) { for (String f : functionsList) { headers.add(MessageFormat.format(f, column.getName())); } } else { // No functions defined for this indicator definition. headers.add(column.getName()); } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public EList<String> getDateFunctions() { if (dateFunctions == null) { dateFunctions = new EDataTypeUniqueEList<String>(String.class, this, ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DATE_FUNCTIONS); } return dateFunctions; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ @Override public EList<ModelElement> getDateColumns() { EList<ModelElement> dateColumns = new BasicEList<ModelElement>(); if (analyzedColumns != null) { for (ModelElement column : analyzedColumns) { final MetadataColumn mdColumn = SwitchHelpers.METADATA_COLUMN_SWITCH.doSwitch(column); final TdColumn tdColumn = SwitchHelpers.COLUMN_SWITCH.doSwitch(column); if (tdColumn != null) { if (isSameMiningType(column, DataminingType.INTERVAL) && Java2SqlType.isDateInSQL(tdColumn.getSqlDataType().getJavaDataType())) { dateColumns.add(column); } } else if (mdColumn != null) { int javaType = TalendTypeConvert.convertToJDBCType(mdColumn.getTalendType()); if (isSameMiningType(column, DataminingType.INTERVAL) && Java2SqlType.isDateInSQL(javaType)) { dateColumns.add(column); } } } } return dateColumns; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public Long getUniqueCount() { return uniqueCount; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setUniqueCount(Long newUniqueCount) { Long oldUniqueCount = uniqueCount; uniqueCount = newUniqueCount; if (eNotificationRequired()) { eNotify(new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__UNIQUE_COUNT, oldUniqueCount, uniqueCount)); } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public Long getDistinctCount() { return distinctCount; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setDistinctCount(Long newDistinctCount) { Long oldDistinctCount = distinctCount; distinctCount = newDistinctCount; if (eNotificationRequired()) { eNotify(new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DISTINCT_COUNT, oldDistinctCount, distinctCount)); } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ @Override public Long getDuplicateCount() { return (uniqueCount != null && distinctCount != null) ? distinctCount - uniqueCount : null; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public RowCountIndicator getRowCountIndicator() { return rowCountIndicator; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ public NotificationChain basicSetRowCountIndicator(RowCountIndicator newRowCountIndicator, NotificationChain msgs) { RowCountIndicator oldRowCountIndicator = rowCountIndicator; rowCountIndicator = newRowCountIndicator; if (eNotificationRequired()) { ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__ROW_COUNT_INDICATOR, oldRowCountIndicator, newRowCountIndicator); if (msgs == null) { msgs = notification; } else { msgs.add(notification); } } return msgs; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setRowCountIndicator(RowCountIndicator newRowCountIndicator) { if (newRowCountIndicator != rowCountIndicator) { NotificationChain msgs = null; if (rowCountIndicator != null) { msgs = ((InternalEObject) rowCountIndicator).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__ROW_COUNT_INDICATOR, null, msgs); } if (newRowCountIndicator != null) { msgs = ((InternalEObject) newRowCountIndicator).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__ROW_COUNT_INDICATOR, null, msgs); } msgs = basicSetRowCountIndicator(newRowCountIndicator, msgs); if (msgs != null) { msgs.dispatch(); } } else if (eNotificationRequired()) { eNotify(new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__ROW_COUNT_INDICATOR, newRowCountIndicator, newRowCountIndicator)); } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public UniqueCountIndicator getUniqueCountIndicator() { return uniqueCountIndicator; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ public NotificationChain basicSetUniqueCountIndicator(UniqueCountIndicator newUniqueCountIndicator, NotificationChain msgs) { UniqueCountIndicator oldUniqueCountIndicator = uniqueCountIndicator; uniqueCountIndicator = newUniqueCountIndicator; if (eNotificationRequired()) { ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__UNIQUE_COUNT_INDICATOR, oldUniqueCountIndicator, newUniqueCountIndicator); if (msgs == null) { msgs = notification; } else { msgs.add(notification); } } return msgs; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setUniqueCountIndicator(UniqueCountIndicator newUniqueCountIndicator) { if (newUniqueCountIndicator != uniqueCountIndicator) { NotificationChain msgs = null; if (uniqueCountIndicator != null) { msgs = ((InternalEObject) uniqueCountIndicator).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__UNIQUE_COUNT_INDICATOR, null, msgs); } if (newUniqueCountIndicator != null) { msgs = ((InternalEObject) newUniqueCountIndicator).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__UNIQUE_COUNT_INDICATOR, null, msgs); } msgs = basicSetUniqueCountIndicator(newUniqueCountIndicator, msgs); if (msgs != null) { msgs.dispatch(); } } else if (eNotificationRequired()) { eNotify(new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__UNIQUE_COUNT_INDICATOR, newUniqueCountIndicator, newUniqueCountIndicator)); } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public DistinctCountIndicator getDistinctCountIndicator() { return distinctCountIndicator; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ public NotificationChain basicSetDistinctCountIndicator(DistinctCountIndicator newDistinctCountIndicator, NotificationChain msgs) { DistinctCountIndicator oldDistinctCountIndicator = distinctCountIndicator; distinctCountIndicator = newDistinctCountIndicator; if (eNotificationRequired()) { ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DISTINCT_COUNT_INDICATOR, oldDistinctCountIndicator, newDistinctCountIndicator); if (msgs == null) { msgs = notification; } else { msgs.add(notification); } } return msgs; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setDistinctCountIndicator(DistinctCountIndicator newDistinctCountIndicator) { if (newDistinctCountIndicator != distinctCountIndicator) { NotificationChain msgs = null; if (distinctCountIndicator != null) { msgs = ((InternalEObject) distinctCountIndicator).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DISTINCT_COUNT_INDICATOR, null, msgs); } if (newDistinctCountIndicator != null) { msgs = ((InternalEObject) newDistinctCountIndicator).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DISTINCT_COUNT_INDICATOR, null, msgs); } msgs = basicSetDistinctCountIndicator(newDistinctCountIndicator, msgs); if (msgs != null) { msgs.dispatch(); } } else if (eNotificationRequired()) { eNotify(new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DISTINCT_COUNT_INDICATOR, newDistinctCountIndicator, newDistinctCountIndicator)); } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public DuplicateCountIndicator getDuplicateCountIndicator() { return duplicateCountIndicator; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ public NotificationChain basicSetDuplicateCountIndicator(DuplicateCountIndicator newDuplicateCountIndicator, NotificationChain msgs) { DuplicateCountIndicator oldDuplicateCountIndicator = duplicateCountIndicator; duplicateCountIndicator = newDuplicateCountIndicator; if (eNotificationRequired()) { ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DUPLICATE_COUNT_INDICATOR, oldDuplicateCountIndicator, newDuplicateCountIndicator); if (msgs == null) { msgs = notification; } else { msgs.add(notification); } } return msgs; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setDuplicateCountIndicator(DuplicateCountIndicator newDuplicateCountIndicator) { if (newDuplicateCountIndicator != duplicateCountIndicator) { NotificationChain msgs = null; if (duplicateCountIndicator != null) { msgs = ((InternalEObject) duplicateCountIndicator).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DUPLICATE_COUNT_INDICATOR, null, msgs); } if (newDuplicateCountIndicator != null) { msgs = ((InternalEObject) newDuplicateCountIndicator).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DUPLICATE_COUNT_INDICATOR, null, msgs); } msgs = basicSetDuplicateCountIndicator(newDuplicateCountIndicator, msgs); if (msgs != null) { msgs.dispatch(); } } else if (eNotificationRequired()) { eNotify(new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DUPLICATE_COUNT_INDICATOR, newDuplicateCountIndicator, newDuplicateCountIndicator)); } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__ROW_COUNT_INDICATOR: return basicSetRowCountIndicator(null, msgs); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__UNIQUE_COUNT_INDICATOR: return basicSetUniqueCountIndicator(null, msgs); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DISTINCT_COUNT_INDICATOR: return basicSetDistinctCountIndicator(null, msgs); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DUPLICATE_COUNT_INDICATOR: return basicSetDuplicateCountIndicator(null, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } /* * (non-Javadoc) * * @see org.talend.dataquality.indicators.impl.IndicatorImpl#storeSqlResults(java.util.List) * * @generated NOT */ @Override public boolean storeSqlResults(List<Object[]> objects) { if (this.isStoreData() || this.mustStoreRow()) { this.setListRows(objects); } else { this.setListRows(new ArrayList<Object[]>()); } if (log.isDebugEnabled()) { StringBuilder builder = new StringBuilder(); builder.append("Column set multivalue indicator\n"); for (Object[] obj : objects) { for (Object element : obj) { builder.append(element).append("\t"); } builder.append('\n'); } log.debug(builder); } computeCounts(objects); // MOD xqliu 2010-03-30 bug 12161 if (getRowCountIndicator() != null) { getRowCountIndicator().setCount(getCount()); } if (getUniqueCountIndicator() != null) { getUniqueCountIndicator().setUniqueValueCount(getUniqueCount()); } if (getDistinctCountIndicator() != null) { getDistinctCountIndicator().setDistinctValueCount(getDistinctCount()); } if (getDuplicateCountIndicator() != null) { getDuplicateCountIndicator().setDuplicateValueCount(getDuplicateCount()); } // ~12161 return true; } public boolean storeSqlResults(Map<List<Object>, Long> resultMap) { // MapDB mode don't should store data on the analysis file List<Object[]> tempList = new ArrayList<Object[]>(); tempList.add(new Object[] {}); this.setListRows(tempList); if (log.isDebugEnabled()) { StringBuilder builder = new StringBuilder(); builder.append("Column set multivalue indicator\n"); for (List<Object> keyList : resultMap.keySet()) { for (Object key : keyList) { builder.append(key).append("\t"); } builder.append('\n'); } log.debug(builder); } computeCounts(resultMap); // MOD xqliu 2010-03-30 bug 12161 if (getRowCountIndicator() != null) { getRowCountIndicator().setCount(getCount()); } if (getUniqueCountIndicator() != null) { getUniqueCountIndicator().setUniqueValueCount(getUniqueCount()); } if (getDistinctCountIndicator() != null) { getDistinctCountIndicator().setDistinctValueCount(getDistinctCount()); } if (getDuplicateCountIndicator() != null) { getDuplicateCountIndicator().setDuplicateValueCount(getDuplicateCount()); } // ~12161 return true; } /** * DOC scorreia Comment method "computeUniqueCount". * * @param objects * @return */ private boolean computeCounts(List<Object[]> objects) { boolean ok = true; this.setDistinctCount(Long.valueOf(objects.size())); Long uniq = 0L; Long rowcount = 0L; for (Object[] row : objects) { Object c = row[row.length - 1]; if (c != null) { // MOD gdbu 2011-4-21 bug : 19578 Long val = Long.valueOf(IndicatorHelper.getLongFromObject(String.valueOf(c))); // ~19578 rowcount += val; if (val == 1) { uniq++; } } else { ok = false; } } this.setCount(rowcount); this.setUniqueCount(uniq); return ok; } private boolean computeCounts(Map<List<Object>, Long> resultMap) { boolean ok = true; this.setDistinctCount(Long.valueOf(resultMap.size())); Long uniq = 0L; Long rowcount = 0L; for (List<Object> key : resultMap.keySet()) { if (key != null) { Long val = resultMap.get(key); rowcount += val; if (val == 1) { uniq++; } } else { ok = false; } } this.setCount(rowcount); this.setUniqueCount(uniq); return ok; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__ANALYZED_COLUMNS: return getAnalyzedColumns(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__LIST_ROWS: return getListRows(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__NUMERIC_FUNCTIONS: return getNumericFunctions(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__NOMINAL_COLUMNS: return getNominalColumns(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__NUMERIC_COLUMNS: return getNumericColumns(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__COLUMN_HEADERS: return getColumnHeaders(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DATE_FUNCTIONS: return getDateFunctions(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DATE_COLUMNS: return getDateColumns(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__UNIQUE_COUNT: return getUniqueCount(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DISTINCT_COUNT: return getDistinctCount(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DUPLICATE_COUNT: return getDuplicateCount(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__ROW_COUNT_INDICATOR: return getRowCountIndicator(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__UNIQUE_COUNT_INDICATOR: return getUniqueCountIndicator(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DISTINCT_COUNT_INDICATOR: return getDistinctCountIndicator(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DUPLICATE_COUNT_INDICATOR: return getDuplicateCountIndicator(); } return super.eGet(featureID, resolve, coreType); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @SuppressWarnings("unchecked") @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__ANALYZED_COLUMNS: getAnalyzedColumns().clear(); getAnalyzedColumns().addAll((Collection<? extends ModelElement>) newValue); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__LIST_ROWS: setListRows((List<Object[]>) newValue); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__NUMERIC_FUNCTIONS: getNumericFunctions().clear(); getNumericFunctions().addAll((Collection<? extends String>) newValue); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DATE_FUNCTIONS: getDateFunctions().clear(); getDateFunctions().addAll((Collection<? extends String>) newValue); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DATE_COLUMNS: getDateColumns().clear(); getDateColumns().addAll((Collection<? extends ModelElement>) newValue); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__UNIQUE_COUNT: setUniqueCount((Long) newValue); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DISTINCT_COUNT: setDistinctCount((Long) newValue); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__ROW_COUNT_INDICATOR: setRowCountIndicator((RowCountIndicator) newValue); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__UNIQUE_COUNT_INDICATOR: setUniqueCountIndicator((UniqueCountIndicator) newValue); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DISTINCT_COUNT_INDICATOR: setDistinctCountIndicator((DistinctCountIndicator) newValue); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DUPLICATE_COUNT_INDICATOR: setDuplicateCountIndicator((DuplicateCountIndicator) newValue); return; } super.eSet(featureID, newValue); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__ANALYZED_COLUMNS: getAnalyzedColumns().clear(); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__LIST_ROWS: setListRows(LIST_ROWS_EDEFAULT); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__NUMERIC_FUNCTIONS: getNumericFunctions().clear(); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DATE_FUNCTIONS: getDateFunctions().clear(); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DATE_COLUMNS: getDateColumns().clear(); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__UNIQUE_COUNT: setUniqueCount(UNIQUE_COUNT_EDEFAULT); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DISTINCT_COUNT: setDistinctCount(DISTINCT_COUNT_EDEFAULT); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__ROW_COUNT_INDICATOR: setRowCountIndicator((RowCountIndicator) null); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__UNIQUE_COUNT_INDICATOR: setUniqueCountIndicator((UniqueCountIndicator) null); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DISTINCT_COUNT_INDICATOR: setDistinctCountIndicator((DistinctCountIndicator) null); return; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DUPLICATE_COUNT_INDICATOR: setDuplicateCountIndicator((DuplicateCountIndicator) null); return; } super.eUnset(featureID); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__ANALYZED_COLUMNS: return analyzedColumns != null && !analyzedColumns.isEmpty(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__LIST_ROWS: return LIST_ROWS_EDEFAULT == null ? listRows != null : !LIST_ROWS_EDEFAULT.equals(listRows); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__NUMERIC_FUNCTIONS: return numericFunctions != null && !numericFunctions.isEmpty(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__NOMINAL_COLUMNS: return !getNominalColumns().isEmpty(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__NUMERIC_COLUMNS: return !getNumericColumns().isEmpty(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__COLUMN_HEADERS: return !getColumnHeaders().isEmpty(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DATE_FUNCTIONS: return dateFunctions != null && !dateFunctions.isEmpty(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DATE_COLUMNS: return dateColumns != null && !dateColumns.isEmpty(); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__UNIQUE_COUNT: return UNIQUE_COUNT_EDEFAULT == null ? uniqueCount != null : !UNIQUE_COUNT_EDEFAULT.equals(uniqueCount); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DISTINCT_COUNT: return DISTINCT_COUNT_EDEFAULT == null ? distinctCount != null : !DISTINCT_COUNT_EDEFAULT.equals(distinctCount); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DUPLICATE_COUNT: return DUPLICATE_COUNT_EDEFAULT == null ? getDuplicateCount() != null : !DUPLICATE_COUNT_EDEFAULT .equals(getDuplicateCount()); case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__ROW_COUNT_INDICATOR: return rowCountIndicator != null; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__UNIQUE_COUNT_INDICATOR: return uniqueCountIndicator != null; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DISTINCT_COUNT_INDICATOR: return distinctCountIndicator != null; case ColumnsetPackage.COLUMN_SET_MULTI_VALUE_INDICATOR__DUPLICATE_COUNT_INDICATOR: return duplicateCountIndicator != null; } return super.eIsSet(featureID); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public String toString() { if (eIsProxy()) { return super.toString(); } StringBuffer result = new StringBuffer(super.toString()); result.append(" (listRows: "); result.append(listRows); result.append(", numericFunctions: "); result.append(numericFunctions); result.append(", dateFunctions: "); result.append(dateFunctions); result.append(", uniqueCount: "); result.append(uniqueCount); result.append(", distinctCount: "); result.append(distinctCount); result.append(')'); return result.toString(); } /* * (non-Javadoc) * * @see org.talend.dataquality.indicators.columnset.ColumnSetMultiValueIndicator#getCountAll() * * @generated NOT getCountAll() */ @Override public String getCountAll() { return "COUNT(*)"; } // bug 10578 by zshen,fix the exception when correlation analysis to be move private class BasicElistExtend<E> extends BasicEList<E> implements EStructuralFeature.Setting { /** * */ private static final long serialVersionUID = 1L; /* * (non-Javadoc) * * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#get(boolean) */ @Override public Object get(boolean resolve) { return this; } /* * (non-Javadoc) * * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#getEObject() */ @Override public EObject getEObject() { return null; } /* * (non-Javadoc) * * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#getEStructuralFeature() */ @Override public EStructuralFeature getEStructuralFeature() { // TODO Auto-generated method stub return null; } /* * (non-Javadoc) * * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#isSet() */ @Override public boolean isSet() { // TODO Auto-generated method stub return false; } /* * (non-Javadoc) * * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#set(java.lang.Object) */ @Override public void set(Object newValue) { // TODO Auto-generated method stub } /* * (non-Javadoc) * * @see org.eclipse.emf.ecore.EStructuralFeature.Setting#unset() */ @Override public void unset() { // TODO Auto-generated method stub } } /* * (non-Javadoc) * * @see org.talend.dataquality.indicators.impl.CompositeIndicatorImpl#getChildIndicators() * * ADDED yyi 2009-12-28 getChildIndicators() */ @Override public EList<Indicator> getChildIndicators() { EList<Indicator> children = new BasicEList<Indicator>(); addChildToList(this.getRowCountIndicator(), children); addChildToList(this.getDistinctCountIndicator(), children); addChildToList(this.getDuplicateCountIndicator(), children); addChildToList(this.getUniqueCountIndicator(), children); return children; } /* * (non-Javadoc) * * @see org.talend.dataquality.indicators.impl.IndicatorImpl#setComputed(boolean) */ @Override public void setComputed(boolean newComputed) { super.setComputed(newComputed); for (Indicator indicator : getChildIndicators()) { indicator.setComputed(newComputed); } } /* * Add yyi 2010-02-08 10703. Set row count for each child indicator * * @see org.talend.dataquality.indicators.impl.IndicatorImpl#setCount(java.lang.Long) */ @Override public void setCount(Long newCount) { super.setCount(newCount); for (Indicator indicator : getChildIndicators()) { indicator.setCount(newCount); } } @Override public boolean finalizeComputation() { if (isUsedMapDBMode() && checkAllowDrillDown()) { // MapDB mode will come here storeSqlResults(valueByGroupMapForMapDB); // valueByGroupMapForMapDB.close(); } else { convertValueByGroupMapToList(); storeSqlResults(valueByGroupList); } return super.finalizeComputation(); } @Override public boolean reset() { if (isUsedMapDBMode() && checkAllowDrillDown()) { if (needReconnect(valueByGroupMapForMapDB)) { valueByGroupMapForMapDB = initValueForColumnSetDBMap(StandardDBName.dataSection.name()); } if (!valueByGroupMapForMapDB.isEmpty()) { valueByGroupMapForMapDB.clear(); } } else { this.valueByGroupMapForJavaMap.clear(); } return super.reset(); } /** * * convert Map 'valueByGroupMap' to a List<Object[]> * * @return */ protected List<Object[]> convertValueByGroupMapToList() { Iterator<Object> it = valueByGroupMapForJavaMap.keySet().iterator(); valueByGroupList = new ArrayList<Object[]>(); while (it.hasNext()) { Tuple tuple = (Tuple) it.next(); List<Object> tempLs = new ArrayList<Object>(); tempLs.addAll(Arrays.asList(tuple.getTuple())); tempLs.add(valueByGroupMapForJavaMap.get(tuple)); valueByGroupList.add(tempLs.toArray()); } return valueByGroupList; } @Override public boolean handle(EList<Object> datas) { if (isUsedMapDBMode() && checkAllowDrillDown()) { handleDataOnFile(datas); } else { handleDataOnMemory(datas); } return true; } /** * DOC talend Comment method "handleDataOnMemory". * * @param datas */ private void handleDataOnMemory(EList<Object> datas) { Object objects[] = datas.toArray(); Tuple tuple = new Tuple(objects); Iterator<Object> it = valueByGroupMapForJavaMap.keySet().iterator(); boolean isFound = false; while (it.hasNext()) { Tuple oldTuple = (Tuple) it.next(); if (tuple.equals(oldTuple)) { AlgoUtils.incrementValueCounts(oldTuple, this.valueByGroupMapForJavaMap); isFound = true; break; } } if (!isFound) { AlgoUtils.incrementValueCounts(tuple, this.valueByGroupMapForJavaMap); } } /** * DOC talend Comment method "handleDataOnFile". */ private void handleDataOnFile(EList<Object> datas) { // String[] stringArray = ConvertToStringArray(datas); // TupleArray newTuple = new TupleArray(stringArray.length, stringArray); List<Object> objList = new ArrayList<Object>(); objList.addAll(datas); AlgoUtils.incrementValueCounts(objList, this.valueByGroupMapForMapDB); } /* * (non-Javadoc) * * @see org.talend.dataquality.indicators.impl.IndicatorImpl#getMapDB(java.lang.String) */ @Override public AbstractDB getMapDB(String dbName) { if (StandardDBName.dataSection.name().equals(dbName) && !needReconnect(valueByGroupMapForMapDB)) { return valueByGroupMapForMapDB; } return initValueForColumnSetDBMap(dbName); } } // ColumnSetMultiValueIndicatorImpl