// ============================================================================ // // 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.dq.analysis; import org.apache.log4j.Logger; import org.eclipse.emf.common.util.EList; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.core.model.metadata.builder.connection.DelimitedFileConnection; import org.talend.core.model.metadata.builder.connection.MetadataColumn; import org.talend.cwm.helper.ConnectionHelper; import org.talend.cwm.helper.ResourceHelper; import org.talend.cwm.helper.SwitchHelpers; import org.talend.cwm.management.i18n.Messages; import org.talend.dataquality.PluginConstant; import org.talend.dataquality.analysis.Analysis; import org.talend.dataquality.analysis.AnalysisContext; import org.talend.dataquality.helpers.RowCountIndicatorsAdapter; import org.talend.dataquality.indicators.Indicator; import org.talend.dq.indicators.DelimitedFileIndicatorEvaluator; import org.talend.utils.sugars.ReturnCode; import orgomg.cwm.objectmodel.core.ModelElement; /** * DOC qiongli class global comment. Detailled comment */ public class DelimitedFileAnalysisExecutor extends AnalysisExecutor { private Connection dataprovider; private static Logger log = Logger.getLogger(ColumnAnalysisExecutor.class); @Override protected String createSqlStatement(Analysis analysis) { return PluginConstant.EMPTY_STRING; } /* * (non-Javadoc) * * @see org.talend.dq.analysis.AnalysisExecutor#runAnalysis(org.talend.dataquality.analysis.Analysis, * java.lang.String) */ @Override protected boolean runAnalysis(Analysis analysis, String sqlStatement) { DelimitedFileIndicatorEvaluator eval = createIndicatorEvaluator(analysis); DelimitedFileConnection con = (DelimitedFileConnection) analysis.getContext().getConnection(); EList<Indicator> indicators = analysis.getResults().getIndicators(); eval.setMonitor(getMonitor()); RowCountIndicatorsAdapter.getInstance().clear(); for (Indicator indicator : indicators) { assert indicator != null; MetadataColumn mColumn = SwitchHelpers.METADATA_COLUMN_SWITCH.doSwitch(indicator.getAnalyzedElement()); if (mColumn == null) { continue; } String columnName = mColumn.getLabel(); eval.storeIndicator(columnName, indicator); } eval.setDelimitedFileconnection(con); ReturnCode rc = eval.evaluateIndicators(sqlStatement, true); if (!rc.isOk()) { log.warn(rc.getMessage()); setError(rc.getMessage()); } if (getMonitor() != null) { getMonitor().worked(compIndicatorsWorked); } return rc.isOk(); } /** * DOC zshen Comment method "createIndicatorEvaluator". * * @param analysis * @return */ protected DelimitedFileIndicatorEvaluator createIndicatorEvaluator(Analysis analysis) { return new DelimitedFileIndicatorEvaluator(analysis); } @Override protected boolean check(final Analysis analysis) { if (analysis == null) { setError(Messages.getString("ColumnAnalysisExecutor.AnalysisIsNull")); //$NON-NLS-1$ return false; } if (!super.check(analysis)) { // error message already set in super method. return false; } // --- check that there exists at least on element to analyze AnalysisContext context = analysis.getContext(); if (context.getAnalysedElements().size() == 0) { setError(Messages.getString("ColumnAnalysisExecutor.AnalysisHaveAtLeastOneColumn")); //$NON-NLS-1$ return false; } return checkAnalyzedElements(analysis, context); } protected boolean checkAnalyzedElements(final Analysis analysis, AnalysisContext context) { ModelElementAnalysisHandler analysisHandler = new ModelElementAnalysisHandler(); analysisHandler.setAnalysis(analysis); for (ModelElement node : context.getAnalysedElements()) { MetadataColumn column = SwitchHelpers.METADATA_COLUMN_SWITCH.doSwitch(node); // --- Check that each analyzed element has at least one indicator if (analysisHandler.getIndicators(column).size() == 0) { setError(Messages.getString("ColumnAnalysisExecutor.EachColumnHaveOneIndicator")); //$NON-NLS-1$ return false; } // --- get the data provider Connection dp = ConnectionHelper.getTdDataProvider(column); if (!isAccessWith(dp)) { setError(Messages.getString("ColumnAnalysisExecutor.AllColumnsBelongSameConnection", //$NON-NLS-1$ column.getName(), dataprovider.getName())); return false; } } return true; } protected boolean isAccessWith(Connection dp) { if (dataprovider == null) { dataprovider = dp; return true; } return ResourceHelper.areSame(dataprovider, dp); } /* * (non-Javadoc) * * @see org.talend.dq.analysis.AnalysisExecutor#evaluate(org.talend.dataquality.analysis.Analysis, * java.sql.Connection, java.lang.String) */ @Override protected ReturnCode evaluate(Analysis analysis, java.sql.Connection connection, String sqlStatement) { // no need to implement here return null; } }