// ============================================================================
//
// 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 java.util.Arrays;
import java.util.Collection;
import org.apache.log4j.Logger;
import org.eclipse.emf.common.util.EList;
import org.talend.cwm.dependencies.DependenciesHandler;
import org.talend.dataquality.analysis.Analysis;
import org.talend.dataquality.indicators.Indicator;
import org.talend.dataquality.indicators.columnset.RecordMatchingIndicator;
import org.talend.dataquality.properties.TDQAnalysisItem;
import org.talend.utils.sugars.TypedReturnCode;
import orgomg.cwm.foundation.softwaredeployment.DataManager;
import orgomg.cwm.objectmodel.core.Dependency;
import orgomg.cwm.objectmodel.core.ModelElement;
/**
* DOC yyin class global comment. Detailled comment
*/
public class MatchAnalysisHandler extends AnalysisHandler {
private static Logger log = Logger.getLogger(MatchAnalysisHandler.class);
private ModelElement[] selectedColumns = null;
private DataManager connection;
private boolean isChangeConnection = false;
@Override
public void setAnalysis(Analysis columnAnalysis) {
super.setAnalysis(columnAnalysis);
initSelectedColumns();
initConnection();
}
/**
* DOC yyin Comment method "initConnection".
*/
private void initConnection() {
connection = analysis.getContext().getConnection();
// Added TDQ-8267, when the connection is null, need to clear keys
if (connection == null) {
clearAllKeys();
}
}
public void SetConnection(DataManager newConnection) {
this.connection = newConnection;
isChangeConnection = Boolean.TRUE;
}
public DataManager getConnection() {
return this.connection;
}
public void updateAnaConnRelationship(TDQAnalysisItem analysisItem) {
assert analysisItem.getAnalysis() != null;
assert analysisItem.getAnalysis() != null;
// remove the old dependencies if any
if (isChangeConnection && analysisItem.getAnalysis().getContext().getConnection() != null) {
DependenciesHandler.getInstance().removeConnDependencyAndSave(analysisItem);
}// ~
analysisItem.getAnalysis().getContext().setConnection(connection);
// Added TDQ-8183 add db dependency on match analysis
if (isChangeConnection && connection != null) {
TypedReturnCode<Dependency> rc = DependenciesHandler.getInstance().setDependencyOn(analysisItem.getAnalysis(),
connection);
if (!rc.isOk()) {
log.info("fail to save dependency analysis:" + analysisItem.getAnalysis().getFileName());//$NON-NLS-1$
}// ~
}
// TDQ-11710 after update, should set this back to false.
isChangeConnection = Boolean.FALSE;
}
/**
* DOC yyin Comment method "initSelectedColumns".
*/
private void initSelectedColumns() {
EList<ModelElement> analyzedColumns = getAnalyzedColumns();
selectedColumns = new ModelElement[analyzedColumns.size()];
int i = 0;
for (ModelElement element : analyzedColumns) {
selectedColumns[i++] = element;
}
}
public ModelElement[] getSelectedColumns() {
return this.selectedColumns;
}
public void setSelectedColumns(ModelElement[] columns) {
this.selectedColumns = columns;
}
public boolean addColumnToAnalyze(ModelElement modelElement) {
assert analysis != null;
assert analysis.getContext() != null;
return analysis.getContext().getAnalysedElements().add(modelElement);
}
public boolean addColumnsToAnalyze(Collection<ModelElement> modelElement) {
assert analysis != null;
assert analysis.getContext() != null;
return analysis.getContext().getAnalysedElements().addAll(modelElement);
}
// modify the analysis's analyzed elements
public boolean saveSelectedAnalyzedElements() {
assert analysis != null;
assert analysis.getContext() != null;
analysis.getContext().getAnalysedElements().clear();
if (selectedColumns == null) {
return true;
}
return analysis.getContext().getAnalysedElements().addAll(Arrays.asList(selectedColumns));
}
/**
* when the columns is empty, clear all keys.
*/
public void clearAllKeys() {
EList<Indicator> indicators = this.analysis.getResults().getIndicators();
for (Indicator indicator : indicators) {
if (indicator instanceof RecordMatchingIndicator) {
RecordMatchingIndicator matchIndicator = (RecordMatchingIndicator) indicator;
matchIndicator.getBuiltInMatchRuleDefinition().getBlockKeys().clear();
matchIndicator.getBuiltInMatchRuleDefinition().getMatchRules().clear();
}
}
}
}