/*
* Copyright (c) 2007 Borland Software Corporation
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Dmitry Stadnik (Borland) - initial API and implementation
*/
package org.eclipse.gmf.internal.sketch.transformer.reconcile;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.codegen.gmfgen.GMFGenPackage;
import org.eclipse.gmf.codegen.gmfgen.GenLink;
import org.eclipse.gmf.codegen.gmfgen.GenNode;
import org.eclipse.gmf.codegen.gmfgen.ModelFacet;
import org.eclipse.gmf.codegen.gmfgen.TypeLinkModelFacet;
import org.eclipse.gmf.codegen.gmfgen.TypeModelFacet;
/**
* @author dstadnik
*/
public class ModelFacetDecision extends SmartDecision {
public void apply(EObject newElement, EObject oldElement) {
ModelFacet newFacet = getFacet(newElement);
ModelFacet oldFacet = getFacet(oldElement);
if (newFacet instanceof TypeModelFacet && oldFacet instanceof TypeModelFacet) {
TypeModelFacet newTypeFacet = (TypeModelFacet) newFacet;
TypeModelFacet oldTypeFacet = (TypeModelFacet) oldFacet;
newTypeFacet.setContainmentMetaFeature(oldTypeFacet.getContainmentMetaFeature());
if (oldTypeFacet.eIsSet(GMFGenPackage.eINSTANCE.getTypeModelFacet_ChildMetaFeature())) {
newTypeFacet.setChildMetaFeature(oldTypeFacet.getChildMetaFeature());
}
newTypeFacet.setModelElementInitializer(oldTypeFacet.getModelElementInitializer());
newTypeFacet.setModelElementSelector(oldTypeFacet.getModelElementSelector());
if (newTypeFacet instanceof TypeLinkModelFacet && oldTypeFacet instanceof TypeLinkModelFacet) {
TypeLinkModelFacet newTypeLinkFacet = (TypeLinkModelFacet) newTypeFacet;
TypeLinkModelFacet oldTypeLinkFacet = (TypeLinkModelFacet) oldTypeFacet;
newTypeLinkFacet.setSourceMetaFeature(oldTypeLinkFacet.getSourceMetaFeature());
newTypeLinkFacet.setTargetMetaFeature(oldTypeLinkFacet.getTargetMetaFeature());
}
}
}
protected ModelFacet getFacet(EObject element) {
if (element instanceof GenNode) {
return ((GenNode) element).getModelFacet();
} else if (element instanceof GenLink) {
return ((GenLink) element).getModelFacet();
}
return null;
}
}