// ============================================================================ // // 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.migration.impl; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.talend.core.model.metadata.builder.database.dburl.SupportDBUrlType; import org.talend.cwm.relational.TdExpression; import org.talend.dataprofiler.core.migration.AbstractWorksapceUpdateTask; import org.talend.dataprofiler.core.migration.helper.IndicatorDefinitionFileHelper; import org.talend.dataquality.indicators.definition.IndicatorDefinition; import org.talend.dq.indicators.definitions.DefinitionHandler; /** * update the sql expression for DB2 in Lower/Upper Quartile indicator. */ public class UpdateLowerUpperQuartileForDB2Task extends AbstractWorksapceUpdateTask { private final String LOWER_QUARTILE = "Lower Quartile"; //$NON-NLS-1$ private final String LOWER_QUARTILE_SQL = "SELECT <%=__COLUMN_NAMES__%> FROM ( SELECT <%=__COLUMN_NAMES__%>, ROW_NUMBER() OVER(ORDER BY <%=__COLUMN_NAMES__%>) AS NUMBER FROM <%=__TABLE_NAME__%> WHERE <%=__COLUMN_NAMES__%> IS NOT NULL <%=__AND_WHERE_CLAUSE__%> ) T1 WHERE (NUMBER = INTEGER((SELECT COUNT(*) FROM <%=__TABLE_NAME__%> WHERE <%=__COLUMN_NAMES__%> IS NOT NULL <%=__AND_WHERE_CLAUSE__%>) /4) +1) "; //$NON-NLS-1$ private final String UPPER_QUARTILE = "Upper Quartile"; //$NON-NLS-1$ private final String UPPER_QUARTILE_SQL = "SELECT <%=__COLUMN_NAMES__%> FROM ( SELECT <%=__COLUMN_NAMES__%>, ROW_NUMBER() OVER(ORDER BY <%=__COLUMN_NAMES__%>) AS NUMBER FROM <%=__TABLE_NAME__%> WHERE <%=__COLUMN_NAMES__%> IS NOT NULL <%=__AND_WHERE_CLAUSE__%> ) T1 WHERE ( NUMBER = INTEGER((SELECT COUNT(*) FROM <%=__TABLE_NAME__%> WHERE <%=__COLUMN_NAMES__%> IS NOT NULL <%=__AND_WHERE_CLAUSE__%>)*3 /4) +1 ) "; //$NON-NLS-1$ private final String DB2 = SupportDBUrlType.DB2DEFAULTURL.getLanguage(); /* * (non-Javadoc) * * @see org.talend.dataprofiler.migration.IMigrationTask#getOrder() */ public Date getOrder() { return createDate(2013, 2, 24); } /* * (non-Javadoc) * * @see org.talend.dataprofiler.migration.IMigrationTask#getMigrationTaskType() */ public MigrationTaskType getMigrationTaskType() { return MigrationTaskType.FILE; } /** * update Lower/Upper Quartile indicators definition. */ @Override protected boolean doExecute() throws Exception { boolean isUpdated = true; // Update sql of DB2 to Upper Quartile indicator isUpdated = isUpdated && updateSqlForDB2(LOWER_QUARTILE, LOWER_QUARTILE_SQL); isUpdated = isUpdated && updateSqlForDB2(UPPER_QUARTILE, UPPER_QUARTILE_SQL); DefinitionHandler.getInstance().reloadIndicatorsDefinitions(); if (!isUpdated) { return false; } return true; } private boolean updateSqlForDB2(String indicatorName, String sqlExpression) { IndicatorDefinition indiDefinition = IndicatorDefinitionFileHelper.getSystemIndicatorByName(indicatorName); if (indiDefinition != null && IndicatorDefinitionFileHelper.removeSqlExpression(indiDefinition, DB2)) { List<TdExpression> remainExpLs = new ArrayList<TdExpression>(); remainExpLs.addAll(indiDefinition.getSqlGenericExpression()); indiDefinition.getSqlGenericExpression().clear(); IndicatorDefinitionFileHelper.addSqlExpression(indiDefinition, DB2, sqlExpression); indiDefinition.getSqlGenericExpression().addAll(remainExpLs); return IndicatorDefinitionFileHelper.save(indiDefinition); } return true; } }