Search in sources :

Example 51 with Domain

use of org.talend.dataquality.domain.Domain in project tdq-studio-se by Talend.

the class IndicatorHelperTest method testGetPattern_1.

/**
 * Test method for get pattern based on indicator.
 */
@Test
public void testGetPattern_1() {
    Indicator indicator = IndicatorsFactory.eINSTANCE.createRegexpMatchingIndicator();
    IndicatorParameters parameters = IndicatorsFactory.eINSTANCE.createIndicatorParameters();
    Domain validData = DomainFactory.eINSTANCE.createDomain();
    Pattern pattern = PatternFactory.eINSTANCE.createPattern();
    // $NON-NLS-1$
    pattern.setName("Blank Text");
    validData.getPatterns().add(pattern);
    parameters.setDataValidDomain(validData);
    indicator.setParameters(parameters);
    Pattern pattern2 = IndicatorHelper.getPattern(indicator);
    assert (pattern2 != null);
    assert (pattern2.equals(pattern));
}
Also used : Pattern(org.talend.dataquality.domain.pattern.Pattern) IndicatorParameters(org.talend.dataquality.indicators.IndicatorParameters) Domain(org.talend.dataquality.domain.Domain) NullCountIndicator(org.talend.dataquality.indicators.NullCountIndicator) Indicator(org.talend.dataquality.indicators.Indicator) RowCountIndicator(org.talend.dataquality.indicators.RowCountIndicator) Test(org.junit.Test)

Example 52 with Domain

use of org.talend.dataquality.domain.Domain in project tdq-studio-se by Talend.

the class BinFrequencyIndicatorImplTest method testHandleObject_1.

/**
 * Test method for {@link org.talend.dataquality.indicators.impl.BinFrequencyIndicatorImpl#handle(java.lang.Object)}
 * domain parameter is set in this case. .
 */
@Test
public void testHandleObject_1() {
    init();
    IndicatorParameters parameters = IndicatorsFactory.eINSTANCE.createIndicatorParameters();
    // $NON-NLS-1$
    Domain domain = DomainHelper.createContiguousClosedBinsIntoDomain("test", 2, 1, 9);
    parameters.setBins(domain);
    binFreqIndicator.setParameters(parameters);
    binFreqIndicator.reset();
    int i = 1;
    binFreqIndicator.handle(i);
    HashMap<Object, Long> valueToFreq = binFreqIndicator.getValueToFreq();
    Long value = valueToFreq.get("id >= 1.0 AND id < 5.0");
    assertEquals(1l, value.longValue());
    i = 3;
    binFreqIndicator.handle(i);
    value = valueToFreq.get("id >= 1.0 AND id < 5.0");
    assertEquals(2l, value.longValue());
    i = 6;
    binFreqIndicator.handle(i);
    value = valueToFreq.get("id >= 5.0 AND id < 9.0");
    assertEquals(1l, value.longValue());
    Object obj = null;
    binFreqIndicator.handle(obj);
    value = valueToFreq.get(null);
    assertNull(value);
}
Also used : IndicatorParameters(org.talend.dataquality.indicators.IndicatorParameters) Domain(org.talend.dataquality.domain.Domain) Test(org.junit.Test)

Example 53 with Domain

use of org.talend.dataquality.domain.Domain in project tdq-studio-se by Talend.

the class ColumnAnalysisSqlExecutor method createSqlQuery.

/**
 * Method "createSqlQuery".
 *
 * @param dataFilterExpression
 * @param analysis
 * @param indicator
 *
 * @throws ParseException
 * @throws AnalysisExecutionException
 */
private boolean createSqlQuery(String dataFilterAsString, Indicator indicator) throws AnalysisExecutionException {
    TypedReturnCode<TdColumn> checkResult = getTdColumn(indicator);
    if (!checkResult.isOk()) {
        return false;
    }
    TdColumn tdColumn = checkResult.getObject();
    if (tdColumn.eIsProxy()) {
        tdColumn = (TdColumn) EObjectHelper.resolveObject(tdColumn);
    }
    TypedReturnCode<String> columnName = getColumnName(indicator, tdColumn);
    if (!columnName.isOk()) {
        return false;
    }
    String colName = columnName.getObject();
    TypedReturnCode<IndicatorDefinition> id = getIndicatorDefinition(indicator);
    if (!id.isOk()) {
        return false;
    }
    IndicatorDefinition indicatorDefinition = id.getObject();
    // get correct language for current database
    String language = dbms().getDbmsName();
    // --- create select statement
    // get indicator's sql columnS (generate the real SQL statement from its definition)
    Expression sqlGenericExpression = dbms().getSqlExpression(indicatorDefinition);
    final EClass indicatorEclass = indicator.eClass();
    if (sqlGenericExpression == null || sqlGenericExpression.getBody() == null) {
        // analysis, will not check the sql expression and create again(from the definition).
        if (UDIHelper.isUDI(indicator) && indicator.getInstantiatedExpressions().size() > 0) {
            return Boolean.TRUE;
        }
        // expressions.
        if (IndicatorsPackage.eINSTANCE.getRegexpMatchingIndicator().equals(indicatorEclass)) {
            // $NON-NLS-1$
            traceError(Messages.getString("ColumnAnalysisSqlExecutor.PLEASEREMOVEALLPATTEN"));
            return Boolean.FALSE;
        }
        traceError(Messages.getString(// $NON-NLS-1$
        "ColumnAnalysisSqlExecutor.UNSUPPORTEDINDICATOR", (indicator.getName() != null ? AnalysisExecutorHelper.getIndicatorName(indicator) : indicatorEclass.getName())));
        return Boolean.FALSE;
    }
    // --- get indicator parameters and convert them into sql expression
    List<String> whereExpression = new ArrayList<String>();
    if (StringUtils.isNotBlank(dataFilterAsString)) {
        whereExpression.add(dataFilterAsString);
    }
    List<String> rangeStrings = null;
    DateGrain dateAggregationType = null;
    IndicatorParameters parameters = indicator.getParameters();
    if (parameters != null) {
        // handle bins
        Domain bins = parameters.getBins();
        if (bins != null) {
            rangeStrings = getBinsAsGenericString(bins.getRanges(), colName);
        }
        DateParameters dateParameters = parameters.getDateParameters();
        if (dateParameters != null) {
            dateAggregationType = dateParameters.getDateAggregationType();
        }
        TextParameters textParameter = parameters.getTextParameter();
        if (textParameter != null) {
            if (textParameter.isIgnoreCase()) {
                colName = dbms().toUpperCase(colName);
            }
            if (!textParameter.isUseBlank() && IndicatorsPackage.eINSTANCE.getLengthIndicator().isSuperTypeOf(indicatorEclass)) {
                String tdColName = getQuotedColumnName(tdColumn);
                // $NON-NLS-1$
                tdColName = dbms().replaceNullsWithString(tdColName, "'NULL TALEND'");
            } else if (textParameter.isUseBlank() && IndicatorsPackage.eINSTANCE.getFrequencyIndicator().isSuperTypeOf(indicatorEclass)) {
                colName = dbms().trim(colName);
            }
        }
    }
    TypedReturnCode<String> completedQuery = getCompletedQuery(indicator, tdColumn, colName, indicatorDefinition, language, sqlGenericExpression, indicatorEclass, whereExpression, rangeStrings, dateAggregationType);
    if (!completedQuery.isOk()) {
        return false;
    }
    String finalQuery = completedQuery.getObject();
    if (finalQuery != null) {
        TdExpression instantiateSqlExpression = BooleanExpressionHelper.createTdExpression(language, finalQuery);
        indicator.setInstantiatedExpression(instantiateSqlExpression);
        return true;
    }
    return false;
}
Also used : DateGrain(org.talend.dataquality.indicators.DateGrain) TdExpression(org.talend.cwm.relational.TdExpression) IndicatorParameters(org.talend.dataquality.indicators.IndicatorParameters) ArrayList(java.util.ArrayList) DateParameters(org.talend.dataquality.indicators.DateParameters) IndicatorDefinition(org.talend.dataquality.indicators.definition.IndicatorDefinition) TextParameters(org.talend.dataquality.indicators.TextParameters) EClass(org.eclipse.emf.ecore.EClass) TdColumn(org.talend.cwm.relational.TdColumn) TdExpression(org.talend.cwm.relational.TdExpression) Expression(orgomg.cwm.objectmodel.core.Expression) Domain(org.talend.dataquality.domain.Domain)

Example 54 with Domain

use of org.talend.dataquality.domain.Domain in project tdq-studio-se by Talend.

the class ColumnAnalysisSqlExecutor method getPatterns.

/**
 * DOC scorreia Comment method "getPatterns".
 *
 * @param indicator
 * @return the patterns or null if none has been found
 */
protected List<String> getPatterns(Indicator indicator) {
    List<String> patternStrings = new ArrayList<String>();
    Domain dataValidDomain = indicator.getParameters().getDataValidDomain();
    if (dataValidDomain == null) {
        return patternStrings;
    }
    EList<Pattern> patterns = dataValidDomain.getPatterns();
    for (Pattern pattern : patterns) {
        Expression expression = this.dbms().getRegexp(pattern);
        String regexp = expression == null ? null : expression.getBody();
        if (regexp != null) {
            patternStrings.add(regexp);
        }
    }
    return patternStrings;
}
Also used : Pattern(org.talend.dataquality.domain.pattern.Pattern) TdExpression(org.talend.cwm.relational.TdExpression) Expression(orgomg.cwm.objectmodel.core.Expression) ArrayList(java.util.ArrayList) Domain(org.talend.dataquality.domain.Domain)

Example 55 with Domain

use of org.talend.dataquality.domain.Domain in project tdq-studio-se by Talend.

the class FrequencyStatisticsExplorer method getFreqRowsStatement.

protected String getFreqRowsStatement() {
    IndicatorDefinition indicatorDefinition = this.indicator.getIndicatorDefinition();
    if (indicatorDefinition instanceof UDIndicatorDefinition) {
        return getQueryForUDIndicator(indicatorDefinition);
    }
    String clause = PluginConstant.EMPTY_STRING;
    TdColumn column = (TdColumn) indicator.getAnalyzedElement();
    int javaType = column.getSqlDataType().getJavaDataType();
    if (Java2SqlType.isTextInSQL(javaType)) {
        clause = getInstantiatedClause();
    } else if (Java2SqlType.isDateInSQL(javaType)) {
        // MOD scorreia 2009-09-22 first check whether the value is null
        if (entity.isLabelNull()) {
            clause = getInstantiatedClause();
        } else {
            IndicatorParameters parameters = indicator.getParameters();
            if (parameters != null) {
                DateParameters dateParameters = parameters.getDateParameters();
                if (dateParameters != null) {
                    DateGrain dateGrain = dateParameters.getDateAggregationType();
                    clause = entity.isLabelNull() ? getInstantiatedClause() : getClauseWithDate(dateGrain, clause);
                } else {
                    clause = getInstantiatedClause();
                }
            } else {
                clause = getInstantiatedClause();
            }
        }
    } else if (Java2SqlType.isNumbericInSQL(javaType)) {
        IndicatorParameters parameters = indicator.getParameters();
        if (parameters != null) {
            // handle bins
            Domain bins = parameters.getBins();
            if (bins != null) {
                // rangeStrings = getBinsAsGenericString(bins.getRanges());
                final EList<RangeRestriction> ranges = bins.getRanges();
                for (RangeRestriction rangeRestriction : ranges) {
                    // find the rangeLabel
                    if (entity.getLabel() != null && entity.getLabel().equals(rangeRestriction.getName())) {
                        clause = createWhereClause(rangeRestriction);
                        break;
                    }
                }
            } else {
                // MOD hcheng 2009-05-18.Bug 7377,Frequency indicator,when bins is null,handle as textual data
                clause = getInstantiatedClause();
            }
        } else {
            // MOD scorreia 2009-05-13. Bug 7235
            // no parameter set: handle as textual data
            clause = getInstantiatedClause();
        }
    } else {
        // no quote here
        clause = getDefaultQuotedStatement(PluginConstant.EMPTY_STRING);
    }
    return // $NON-NLS-1$
    "SELECT * FROM " + getFullyQualifiedTableName(column) + dbmsLanguage.where() + inBrackets(clause) + andDataFilterClause();
}
Also used : TdColumn(org.talend.cwm.relational.TdColumn) DateGrain(org.talend.dataquality.indicators.DateGrain) UDIndicatorDefinition(org.talend.dataquality.indicators.definition.userdefine.UDIndicatorDefinition) IndicatorParameters(org.talend.dataquality.indicators.IndicatorParameters) DateParameters(org.talend.dataquality.indicators.DateParameters) RangeRestriction(org.talend.dataquality.domain.RangeRestriction) Domain(org.talend.dataquality.domain.Domain) UDIndicatorDefinition(org.talend.dataquality.indicators.definition.userdefine.UDIndicatorDefinition) IndicatorDefinition(org.talend.dataquality.indicators.definition.IndicatorDefinition)

Aggregations

Domain (org.talend.dataquality.domain.Domain)68 IndicatorParameters (org.talend.dataquality.indicators.IndicatorParameters)27 Pattern (org.talend.dataquality.domain.pattern.Pattern)16 RegularExpression (org.talend.dataquality.domain.pattern.RegularExpression)14 Expression (orgomg.cwm.objectmodel.core.Expression)14 TdColumn (org.talend.cwm.relational.TdColumn)13 TdExpression (org.talend.cwm.relational.TdExpression)13 RangeRestriction (org.talend.dataquality.domain.RangeRestriction)13 Test (org.junit.Test)12 Analysis (org.talend.dataquality.analysis.Analysis)12 ArrayList (java.util.ArrayList)10 ReturnCode (org.talend.utils.sugars.ReturnCode)9 Indicator (org.talend.dataquality.indicators.Indicator)6 PatternMatchingIndicator (org.talend.dataquality.indicators.PatternMatchingIndicator)6 IRepositoryNode (org.talend.repository.model.IRepositoryNode)6 ModelElement (orgomg.cwm.objectmodel.core.ModelElement)6 Connection (org.talend.core.model.metadata.builder.connection.Connection)5 DatabaseConnection (org.talend.core.model.metadata.builder.connection.DatabaseConnection)5 IRepositoryViewObject (org.talend.core.model.repository.IRepositoryViewObject)5 AnalysisContext (org.talend.dataquality.analysis.AnalysisContext)5