// ============================================================================ // // 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.dataquality.helpers; import java.util.HashSet; import java.util.List; import java.util.Set; import org.talend.cwm.relational.TdExpression; import org.talend.dataquality.indicators.IndicatorParameters; import org.talend.dataquality.indicators.RowCountIndicator; import org.talend.dataquality.indicators.definition.IndicatorDefinition; import org.talend.dataquality.indicators.impl.RowCountIndicatorImpl; import orgomg.cwm.objectmodel.core.Expression; import orgomg.cwm.objectmodel.core.ModelElement; /** * DOC zshen class global comment. Detailled comment */ public class RowCountIndicatorsAdapter extends RowCountIndicatorImpl { private Set<RowCountIndicator> rowCountIndiSet = new HashSet<>(); private static RowCountIndicatorsAdapter instance = null; private RowCountIndicatorsAdapter() { clear(); } /** * Getter for instance. * * @return the instance */ public static RowCountIndicatorsAdapter getInstance() { if (instance == null) { instance = new RowCountIndicatorsAdapter(); } return instance; } /** * Getter for rowCountIndiList. * * @return the rowCountIndiList */ public Set<RowCountIndicator> getRowCountIndiSet() { return this.rowCountIndiSet; } public void clear() { this.rowCountIndiSet.clear(); } public void addRowCountIndicator(RowCountIndicator rci) { if (rci instanceof RowCountIndicatorsAdapter) { return; } this.rowCountIndiSet.add(rci); } /** * Sets the rowCountIndiList. * * @param rowCountIndiSet the rowCountIndiList to set */ public void setRowCountIndiSet(Set<RowCountIndicator> rowCountIndiSet) { this.rowCountIndiSet = rowCountIndiSet; } /* * (non-Javadoc) * * @see org.talend.dataquality.indicators.impl.IndicatorImpl#getAnalyzedElement() */ @Override public ModelElement getAnalyzedElement() { if (this.rowCountIndiSet.isEmpty()) { return super.getAnalyzedElement();// current there should return null } else { return getFirstOne().getAnalyzedElement(); } } /* * (non-Javadoc) * * @see org.talend.dataquality.indicators.impl.IndicatorImpl#getIndicatorDefinition() */ @Override public IndicatorDefinition getIndicatorDefinition() { if (this.rowCountIndiSet.isEmpty()) { return super.getIndicatorDefinition();// current there should return null } else { return getFirstOne().getIndicatorDefinition(); } } private RowCountIndicator getFirstOne() { if (this.rowCountIndiSet.isEmpty()) { return null; } else { return this.rowCountIndiSet.toArray(new RowCountIndicator[rowCountIndiSet.size()])[0]; } } /* * (non-Javadoc) * * @see org.talend.dataquality.indicators.impl.IndicatorImpl#getParameters() */ @Override public IndicatorParameters getParameters() { if (this.rowCountIndiSet.isEmpty()) { return null; } else { return getFirstOne().getParameters(); } } /* * (non-Javadoc) * * @see org.talend.dataquality.indicators.impl.IndicatorImpl#setInstantiatedExpression(orgomg.cwm.objectmodel.core.Expression) */ @Override public boolean setInstantiatedExpression(Expression expression) { int index = 0; for (RowCountIndicator rci : this.rowCountIndiSet) { TdExpression copySqlExpression = BooleanExpressionHelper.createTdExpression(expression.getLanguage(), expression.getBody()); rci.setInstantiatedExpression(copySqlExpression); index++; } if (index == 0 || index != rowCountIndiSet.size()) { return false; } return super.setInstantiatedExpression(expression); } /* * (non-Javadoc) * * @see org.talend.dataquality.indicators.impl.IndicatorImpl#storeSqlResults(java.util.List) */ @Override public boolean storeSqlResults(List<Object[]> objects) { int index = 0; for (RowCountIndicator rci : this.rowCountIndiSet) { rci.storeSqlResults(objects); index++; } if (index == 0 || index != rowCountIndiSet.size()) { return false; } return super.storeSqlResults(objects); } /* * (non-Javadoc) * * @see org.talend.dataquality.indicators.impl.IndicatorImpl#setComputed(boolean) */ @Override public void setComputed(boolean newComputed) { for (RowCountIndicator rci : this.rowCountIndiSet) { rci.setComputed(newComputed); } super.setComputed(newComputed); } /* * (non-Javadoc) * * @see org.talend.dataquality.indicators.impl.IndicatorImpl#handle(java.lang.Object) */ @Override public boolean handle(Object data) { int index = 0; for (RowCountIndicator rci : this.rowCountIndiSet) { rci.handle(data); index++; } if (index == 0 || index != rowCountIndiSet.size()) { return false; } return super.handle(data); } /* * (non-Javadoc) * * @see org.talend.dataquality.indicators.impl.IndicatorImpl#reset() */ @Override public boolean reset() { int index = 0; for (RowCountIndicator rci : this.rowCountIndiSet) { rci.reset(); index++; } if (index == 0 || index != rowCountIndiSet.size()) { return false; } return super.reset(); } }