// ============================================================================
//
// 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.cwm.compare.factory.comparisonlevel;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.talend.core.model.metadata.builder.connection.Connection;
import org.talend.core.model.properties.ConnectionItem;
import org.talend.core.model.properties.Item;
import org.talend.cwm.compare.DQStructureComparer;
import org.talend.cwm.compare.exception.ReloadCompareException;
import org.talend.cwm.helper.CatalogHelper;
import org.talend.cwm.helper.ConnectionHelper;
import org.talend.cwm.helper.SwitchHelpers;
import org.talend.dq.helper.RepositoryNodeHelper;
import org.talend.dq.writer.EMFSharedResources;
import org.talend.repository.model.RepositoryNode;
import orgomg.cwm.objectmodel.core.Package;
import orgomg.cwm.resource.relational.Catalog;
import orgomg.cwm.resource.relational.Schema;
/**
*
* DOC mzhao class global comment. Detailled comment
*/
public class CatalogComparisonLevel extends AbstractComparisonLevel {
public CatalogComparisonLevel(Catalog selObj) {
super(selObj);
}
@Override
protected Connection findDataProvider() {
Connection provider = null;
if (selectedObj instanceof RepositoryNode) {
Item connItem = ((RepositoryNode) selectedObj).getObject().getProperty().getItem();
provider = ((ConnectionItem) connItem).getConnection();
} else {
provider = ConnectionHelper.getTdDataProvider((Package) selectedObj);
}
return provider;
}
@Override
protected Resource getLeftResource() throws ReloadCompareException {
Package selectedPackage = null;
if (selectedObj instanceof RepositoryNode) {
selectedPackage = (Package) RepositoryNodeHelper.getMetadataElement((RepositoryNode) selectedObj);
} else {
selectedPackage = (Package) selectedObj;
}
Package findMatchPackage = DQStructureComparer.findMatchedPackage(selectedPackage, copyedDataProvider);
List<Schema> schemas = new ArrayList<Schema>();
schemas.addAll(CatalogHelper.getSchemas((Catalog) findMatchPackage));
Resource leftResource = copyedDataProvider.eResource();
leftResource.getContents().clear();
for (Schema schema : schemas) {
DQStructureComparer.clearSubNode(schema);
leftResource.getContents().add(schema);
}
EMFSharedResources.getInstance().saveResource(leftResource);
return upperCaseResource(leftResource);
}
@Override
protected Resource getRightResource() throws ReloadCompareException {
Package selectedPackage = null;
if (selectedObj instanceof RepositoryNode) {
selectedPackage = (Package) RepositoryNodeHelper.getMetadataElement((RepositoryNode) selectedObj);
} else {
selectedPackage = (Package) selectedObj;
}
Package toReloadObj = DQStructureComparer.findMatchedPackage(selectedPackage, tempReloadProvider);
List<Schema> schemas = reloadElementOfPackage(toReloadObj);
Resource rightResource = null;
rightResource = tempReloadProvider.eResource();
rightResource.getContents().clear();
for (Schema schema : schemas) {
DQStructureComparer.clearSubNode(schema);
rightResource.getContents().add(schema);
}
EMFSharedResources.getInstance().saveResource(rightResource);
return upperCaseResource(rightResource);
}
private List<Schema> reloadElementOfPackage(Package toReloadObj) throws ReloadCompareException {
List<Schema> schemas = new ArrayList<Schema>();
Catalog catalogObj = SwitchHelpers.CATALOG_SWITCH.doSwitch(toReloadObj);
if (catalogObj != null) {
schemas = CatalogHelper.getSchemas(catalogObj);
}
return schemas;
}
@Override
protected EObject getSavedReloadObject() throws ReloadCompareException {
Package selectedPackage = (Package) selectedObj;
Package findMatchPackage = DQStructureComparer.findMatchedPackage(selectedPackage, tempReloadProvider);
reloadElementOfPackage(findMatchPackage);
return findMatchPackage;
}
// @Override
// protected void handleAddElement(ModelElementChangeRightTarget addElement) {
// EObject rightElement = addElement.getRightElement();
// Schema schema = SwitchHelpers.SCHEMA_SWITCH.doSwitch(rightElement);
// if (schema != null) {
// ConnectionHelper.addSchema(schema, oldDataProvider);
// }
// }
//
// @Override
// protected void handleRemoveElement(ModelElementChangeLeftTarget removeElement) {
// Schema removedSchema = SwitchHelpers.SCHEMA_SWITCH.doSwitch(removeElement.getLeftElement());
// if (removedSchema == null) {
// return;
// }
// popRemoveElementConfirm();
// ((Package) selectedObj).getOwnedElement().remove(removedSchema);
// // CatalogHelper.(removedSchema, (Package) selectedObj);
// }
}