/**
* <copyright> </copyright>
*
* $Id$
*/
package org.talend.dataquality.indicators.columnset.impl;
import java.util.List;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.talend.cwm.relational.TdColumn;
import org.talend.dataquality.helpers.IndicatorHelper;
import org.talend.dataquality.indicators.columnset.ColumnDependencyIndicator;
import org.talend.dataquality.indicators.columnset.ColumnsetPackage;
import org.talend.dataquality.indicators.impl.IndicatorImpl;
import orgomg.cwm.objectmodel.core.Expression;
/**
* <!-- begin-user-doc --> An implementation of the model object '<em><b>Column Dependency Indicator</b></em>'. <!--
* end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnDependencyIndicatorImpl#getColumnA <em>Column A</em>}</li>
* <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnDependencyIndicatorImpl#getColumnB <em>Column B</em>}</li>
* <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnDependencyIndicatorImpl#getACount <em>ACount</em>}</li>
* <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnDependencyIndicatorImpl#getDistinctACount <em>Distinct ACount</em>}</li>
* <li>{@link org.talend.dataquality.indicators.columnset.impl.ColumnDependencyIndicatorImpl#getDependencyFactor <em>Dependency Factor</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public class ColumnDependencyIndicatorImpl extends IndicatorImpl implements ColumnDependencyIndicator {
/**
* The cached value of the '{@link #getColumnA() <em>Column A</em>}' reference.
* <!-- begin-user-doc --> <!--
* end-user-doc -->
* @see #getColumnA()
* @generated
* @ordered
*/
protected TdColumn columnA;
/**
* The cached value of the '{@link #getColumnB() <em>Column B</em>}' reference.
* <!-- begin-user-doc --> <!--
* end-user-doc -->
* @see #getColumnB()
* @generated
* @ordered
*/
protected TdColumn columnB;
/**
* The default value of the '{@link #getACount() <em>ACount</em>}' attribute.
* <!-- begin-user-doc --> <!--
* end-user-doc -->
* @see #getACount()
* @generated
* @ordered
*/
protected static final Long ACOUNT_EDEFAULT = null;
/**
* The cached value of the '{@link #getACount() <em>ACount</em>}' attribute.
* <!-- begin-user-doc --> <!--
* end-user-doc -->
* @see #getACount()
* @generated
* @ordered
*/
protected Long aCount = ACOUNT_EDEFAULT;
/**
* The default value of the '{@link #getDistinctACount() <em>Distinct ACount</em>}' attribute.
* <!-- begin-user-doc
* --> <!-- end-user-doc -->
* @see #getDistinctACount()
* @generated
* @ordered
*/
protected static final Long DISTINCT_ACOUNT_EDEFAULT = null;
/**
* The cached value of the '{@link #getDistinctACount() <em>Distinct ACount</em>}' attribute.
* <!-- begin-user-doc
* --> <!-- end-user-doc -->
* @see #getDistinctACount()
* @generated
* @ordered
*/
protected Long distinctACount = DISTINCT_ACOUNT_EDEFAULT;
/**
* The default value of the '{@link #getDependencyFactor() <em>Dependency Factor</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getDependencyFactor()
* @generated
* @ordered
*/
protected static final Double DEPENDENCY_FACTOR_EDEFAULT = null;
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
protected ColumnDependencyIndicatorImpl() {
super();
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass() {
return ColumnsetPackage.Literals.COLUMN_DEPENDENCY_INDICATOR;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public TdColumn getColumnA() {
if (columnA != null && columnA.eIsProxy()) {
InternalEObject oldColumnA = (InternalEObject)columnA;
columnA = (TdColumn)eResolveProxy(oldColumnA);
if (columnA != oldColumnA) {
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.RESOLVE, ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__COLUMN_A, oldColumnA, columnA));
}
}
return columnA;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public TdColumn basicGetColumnA() {
return columnA;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setColumnA(TdColumn newColumnA) {
TdColumn oldColumnA = columnA;
columnA = newColumnA;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__COLUMN_A, oldColumnA, columnA));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public TdColumn getColumnB() {
if (columnB != null && columnB.eIsProxy()) {
InternalEObject oldColumnB = (InternalEObject)columnB;
columnB = (TdColumn)eResolveProxy(oldColumnB);
if (columnB != oldColumnB) {
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.RESOLVE, ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__COLUMN_B, oldColumnB, columnB));
}
}
return columnB;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public TdColumn basicGetColumnB() {
return columnB;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setColumnB(TdColumn newColumnB) {
TdColumn oldColumnB = columnB;
columnB = newColumnB;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__COLUMN_B, oldColumnB, columnB));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public Long getACount() {
return aCount;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setACount(Long newACount) {
Long oldACount = aCount;
aCount = newACount;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__ACOUNT, oldACount, aCount));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public Long getDistinctACount() {
return distinctACount;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setDistinctACount(Long newDistinctACount) {
Long oldDistinctACount = distinctACount;
distinctACount = newDistinctACount;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__DISTINCT_ACOUNT, oldDistinctACount, distinctACount));
}
@Override
public boolean storeSqlResults(List<Object[]> objects) {
this.setACount(getNB(objects));
this.setDistinctACount(getNBDistinct(objects));
return true;
}
/**
* DOC jet Comment method "getNBDistinct".
*
* @param myResultSet
* @return
*/
private static Long getNBDistinct(List<Object[]> myResultSet) {
if (myResultSet.size() == 1 && myResultSet.get(0).length == 2) {
// return (Long) myResultSet.get(0)[1];
// return Long.valueOf(String.valueOf(myResultSet.get(0)[1]));
// MOD gdbu 2011-4-28 bug : 18975
return Long.valueOf(IndicatorHelper.getLongFromObject(String.valueOf(myResultSet.get(0)[1])));
// ~18975
}
return null;
}
private static Long getNB(List<Object[]> myResultSet) {
if (myResultSet.size() == 1 && myResultSet.get(0).length == 2) {
// return (Long) myResultSet.get(0)[0];
// return Long.valueOf(String.valueOf(myResultSet.get(0)[0]));
// MOD gdbu 2011-4-28 bug : 18975
return IndicatorHelper.getLongFromObject(String.valueOf(myResultSet.get(0)[0]));
// ~18975
}
return null;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated not
*/
@Override
public Double getDependencyFactor() {
if (getACount() != null && getDistinctACount() != null) {
return (getACount() == 0L) ? Double.NaN : getDistinctACount().doubleValue() / getACount().doubleValue();
}
return null;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__COLUMN_A:
if (resolve) return getColumnA();
return basicGetColumnA();
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__COLUMN_B:
if (resolve) return getColumnB();
return basicGetColumnB();
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__ACOUNT:
return getACount();
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__DISTINCT_ACOUNT:
return getDistinctACount();
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__DEPENDENCY_FACTOR:
return getDependencyFactor();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__COLUMN_A:
setColumnA((TdColumn)newValue);
return;
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__COLUMN_B:
setColumnB((TdColumn)newValue);
return;
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__ACOUNT:
setACount((Long)newValue);
return;
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__DISTINCT_ACOUNT:
setDistinctACount((Long)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__COLUMN_A:
setColumnA((TdColumn)null);
return;
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__COLUMN_B:
setColumnB((TdColumn)null);
return;
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__ACOUNT:
setACount(ACOUNT_EDEFAULT);
return;
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__DISTINCT_ACOUNT:
setDistinctACount(DISTINCT_ACOUNT_EDEFAULT);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__COLUMN_A:
return columnA != null;
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__COLUMN_B:
return columnB != null;
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__ACOUNT:
return ACOUNT_EDEFAULT == null ? aCount != null : !ACOUNT_EDEFAULT.equals(aCount);
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__DISTINCT_ACOUNT:
return DISTINCT_ACOUNT_EDEFAULT == null ? distinctACount != null : !DISTINCT_ACOUNT_EDEFAULT.equals(distinctACount);
case ColumnsetPackage.COLUMN_DEPENDENCY_INDICATOR__DEPENDENCY_FACTOR:
return DEPENDENCY_FACTOR_EDEFAULT == null ? getDependencyFactor() != null : !DEPENDENCY_FACTOR_EDEFAULT.equals(getDependencyFactor());
}
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(" (aCount: ");
result.append(aCount);
result.append(", distinctACount: ");
result.append(distinctACount);
result.append(')');
return result.toString();
}
@Override
public Expression getInstantiatedExpressions(String language) {
// i think this place is good place to create expression
return super.getInstantiatedExpressions(language);
}
/*
* (non-Javadoc)
*
* @see org.talend.dataquality.indicators.impl.IndicatorImpl#isUsedMapDBMode()
*/
@Override
public boolean isUsedMapDBMode() {
return false;
}
} // ColumnDependencyIndicatorImpl