// ============================================================================
//
// 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.ui.dialog;
import java.util.List;
import org.apache.log4j.Logger;
import org.eclipse.emf.common.util.EList;
import org.eclipse.swt.widgets.Shell;
import org.talend.core.model.metadata.builder.connection.Connection;
import org.talend.core.model.metadata.builder.connection.MetadataTable;
import org.talend.core.model.metadata.builder.database.DqRepositoryViewService;
import org.talend.cwm.helper.CatalogHelper;
import org.talend.cwm.helper.ColumnHelper;
import org.talend.cwm.helper.ColumnSetHelper;
import org.talend.cwm.helper.PackageHelper;
import org.talend.cwm.relational.TdColumn;
import org.talend.cwm.relational.TdTable;
import org.talend.dataquality.analysis.Analysis;
import orgomg.cwm.objectmodel.core.ModelElement;
import orgomg.cwm.objectmodel.core.Package;
import orgomg.cwm.resource.relational.Catalog;
import orgomg.cwm.resource.relational.ColumnSet;
import orgomg.cwm.resource.relational.Schema;
/**
* DOC mzhao analyzed columns synchronized dialog. 2009-06-02 Feature 5887
*/
public class AnalyzedColumnsSynDialog extends AnalyzedElementSynDialog {
private static Logger log = Logger.getLogger(AnalyzedColumnsSynDialog.class);
private EList<ModelElement> analyzedElements;
public AnalyzedColumnsSynDialog(Shell parent, Analysis analysis, Connection dataprovider, EList<ModelElement> analyzedElements) {
super(parent, analysis, dataprovider);
this.analyzedElements = analyzedElements;
}
@Override
public void reloadInputModel() {
TdColumn column = null;
modelInput.clear();
synedEleMap.clear();
for (ModelElement element : analyzedElements) {
try {
column = (TdColumn) element;
synedEleMap.put(column, null);
ColumnSet anaColumnSet = ColumnHelper.getColumnOwnerAsColumnSet(column);
Package anaPackage = ColumnSetHelper.getParentCatalogOrSchema(anaColumnSet);
if (anaPackage == null) {
return;
}
Package connPackage = null;
for (Package pk : newDataProvider.getDataPackage()) {
// MOD mzhao bug 8567. 2009-08-10 (Case of MS SQL Server)
if (pk instanceof Catalog && anaPackage instanceof Schema) {
Catalog catl = CatalogHelper.getParentCatalog(anaPackage);
if (null != catl && pk.getName().equalsIgnoreCase(catl.getName())) {
connPackage = pk;
break;
}
} else if (null != anaPackage && pk.getName().equalsIgnoreCase(anaPackage.getName())) {
connPackage = pk;
break;
}
}
if (connPackage == null) {
SynTreeModel synTreeModel = new SynTreeModel(column);
synTreeModel.setOldDataProvElement(anaPackage);
// synTreeModel.setNewDataProvElement(connPackage);
modelInput.add(synTreeModel);
continue;
}
List<? extends MetadataTable> connColumnSetList = null;
// MOD mzhao bug 8567. 2009-08-10 (Case of MS SQL Server)
if (connPackage instanceof Catalog && anaPackage instanceof Schema) {
for (Schema sche : CatalogHelper.getSchemas((Catalog) connPackage)) {
if (sche.getName().equalsIgnoreCase(anaPackage.getName())) {
// MOD mzhao bug 8567. 2010-03-29.
connPackage = sche;
// if (anaColumnSet instanceof TdTable) {
// connColumnSetList = PackageHelper.getTables(sche);
// } else {
// connColumnSetList = PackageHelper.getViews(sche);
// }
break;
}
}
}
boolean loadFromDb = connPackage.getOwnedElement().size() == 0;
if (anaColumnSet instanceof TdTable) {
connColumnSetList = DqRepositoryViewService.getTables(newDataProvider, connPackage, null, loadFromDb, false);
// connColumnSetList = PackageHelper.getTables(connPackage);
if (loadFromDb) {
for (MetadataTable table : connColumnSetList) {
PackageHelper.addMetadataTable(table, connPackage);
}
}
// connColumnSetList = PackageHelper.getTables(connPackage);
} else {
connColumnSetList = DqRepositoryViewService.getViews(newDataProvider, connPackage, null, loadFromDb, false);
// connColumnSetList = PackageHelper.getViews(connPackage);
if (loadFromDb) {
for (MetadataTable table : connColumnSetList) {
PackageHelper.addMetadataTable(table, connPackage);
}
}
}
ColumnSet connColumnSet = null;
for (Object colSet : connColumnSetList) {
if (((ColumnSet) colSet).getName().equalsIgnoreCase(anaColumnSet.getName())) {
connColumnSet = (ColumnSet) colSet;
break;
}
}
if (connColumnSet == null) {
SynTreeModel synTreeModel = new SynTreeModel(column);
synTreeModel.setOldDataProvElement(anaColumnSet);
synTreeModel.setNewDataProvElement(connPackage);
modelInput.add(synTreeModel);
continue;
}
TdColumn connColumn = null;
// MOD xqliu 2012-05-04 TDQ-4853 should call getFeature(instead of getOwnedElement) method to get the
// column list
loadFromDb = connColumnSet.getFeature().size() == 0;
// ~ TDQ-4853
List<TdColumn> columns = DqRepositoryViewService.getColumns(newDataProvider, connColumnSet, null, loadFromDb);
ColumnSetHelper.addColumns(connColumnSet, columns);
for (TdColumn loopColumn : columns) {
if (loopColumn.getName().equalsIgnoreCase(column.getName())) {
connColumn = loopColumn;
break;
}
}
if (connColumn == null) {
SynTreeModel synTreeModel = new SynTreeModel(column);
synTreeModel.setOldDataProvElement(column);
synTreeModel.setNewDataProvElement(connColumnSet);
modelInput.add(synTreeModel);
continue;
}
synedEleMap.put(column, connColumn);
if (!connColumn.getSqlDataType().getName().equals(column.getSqlDataType().getName())) {
SynTreeModel synTreeModel = new SynTreeModel(column);
synTreeModel.setOldDataProvElement(column.getSqlDataType());
// synTreeModel.setNewDataProvElement(connColumn
// .getSqlDataType());
modelInput.add(synTreeModel);
continue;
}
} catch (Exception e) {
log.error(e, e);
e.printStackTrace();
}
}
}
}