// ============================================================================
//
// 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.update;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.eclipse.emf.ecore.EObject;
import org.talend.cwm.compare.i18n.DefaultMessagesImpl;
import orgomg.cwm.foundation.keysindexes.KeyRelationship;
import orgomg.cwm.foundation.keysindexes.UniqueKey;
import orgomg.cwm.objectmodel.core.Feature;
import orgomg.cwm.objectmodel.core.Package;
import orgomg.cwm.objectmodel.core.StructuralFeature;
import orgomg.cwm.resource.relational.ColumnSet;
import orgomg.cwm.resource.relational.ForeignKey;
import orgomg.cwm.resource.relational.PrimaryKey;
import orgomg.cwm.resource.relational.util.RelationalSwitch;
/**
* DOC scorreia class global comment. Detailled comment
*/
class UpdateRelationalSwitch extends RelationalSwitch<Boolean> {
private static Logger log = Logger.getLogger(UpdateRelationalSwitch.class);
private UpdateCoreSwitch updateCoreSwitch = new UpdateCoreSwitch();
private EObject recentElement;
private EObject leftElement;
private EObject rightElement;
public void setRightElement(EObject rightElement) {
// MOD klliu add recentElement getter/setter
this.setRecentElement(rightElement);
this.updateCoreSwitch.setRightElement(rightElement);
this.rightElement = rightElement;
}
public void setLeftElement(EObject leftElement) {
this.leftElement = leftElement;
}
@Override
public Boolean caseForeignKey(ForeignKey object) {
ColumnSet columnSet = (ColumnSet) object.eContainer();
if (columnSet == null) {
return Boolean.FALSE;
}
ForeignKey rightColumn = null;
if (rightElement instanceof ForeignKey) {
rightColumn = (ForeignKey) rightElement;
} else {
return Boolean.FALSE;
}
object.setName(rightColumn.getName());
object.getFeature().clear();
List<StructuralFeature> refColumns = new ArrayList<StructuralFeature>();
for (StructuralFeature newColumn : rightColumn.getFeature()) {
for (Feature column : columnSet.getFeature()) {
if (column.getName().equalsIgnoreCase(newColumn.getName())) {
refColumns.add((StructuralFeature) column);
break;
}
}
}
object.getFeature().addAll(refColumns);
return Boolean.TRUE;
}
@Override
public Boolean caseKeyRelationship(KeyRelationship object) {
log.error(DefaultMessagesImpl.getString("UpdateRelationalSwitch.errorUpdateOfObj", object));//$NON-NLS-1$
return super.caseKeyRelationship(object);
}
@Override
public Boolean casePrimaryKey(PrimaryKey object) {
log.error(DefaultMessagesImpl.getString("UpdateRelationalSwitch.errorUpdateOfObj", object));//$NON-NLS-1$
return super.casePrimaryKey(object);
}
@Override
public Boolean caseUniqueKey(UniqueKey object) {
log.error(DefaultMessagesImpl.getString("UpdateRelationalSwitch.errorUpdateOfObj", object));//$NON-NLS-1$
return super.caseUniqueKey(object);
}
@Override
public Boolean defaultCase(EObject object) {
return this.updateCoreSwitch.doSwitch(object);
}
public void setRecentElement(EObject recentElement) {
this.recentElement = recentElement;
}
public EObject getRecentElement() {
return recentElement;
}
/*
* (non-Javadoc)
*
* @see orgomg.cwm.resource.relational.util.RelationalSwitch#casePackage(orgomg.cwm.objectmodel.core.Package)
*/
@Override
public Boolean casePackage(Package object) {
if (recentElement instanceof Package) {
Package pkg = (Package) recentElement;
object.setName(pkg.getName());
return true;
}
return false;
}
}