/**
* Copyright (c) 2013 committers of YAKINDU and others.
* 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:
* committers of YAKINDU - initial API and implementation
*
*/
package org.yakindu.sct.refactoring.refactor;
import java.util.Collections;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.yakindu.sct.model.sgraph.Statechart;
import org.yakindu.sct.model.sgraph.resource.AbstractSCTResource;
import org.yakindu.sct.refactoring.utils.RefactoringHelper;
public abstract class ViewBasedRefactoringTest extends RefactoringTest {
protected void testRefactoring(String pathToInitialSct, String pathToExpectedSct, String contextElementName) {
Statechart initial = models
.loadStatechartFromResource(pathToInitialSct);
TransactionalEditingDomainImpl.FactoryImpl.INSTANCE.createEditingDomain(initial.eResource().getResourceSet());
View contextView = getViewForState(initial, contextElementName);
AbstractRefactoring<View> refactoring = getRefactoring();
refactoring.setContextObjects(Collections.singletonList(contextView));
AbstractSCTResource initialRes = (AbstractSCTResource) initial.eResource();
initialRes.setSerializerEnabled(true);
refactoring.execute();
initialRes.setSerializerEnabled(false);
initialRes.linkSpecificationElements();
Statechart expected = models
.loadStatechartFromResource(pathToExpectedSct);
compareStatecharts(initial, expected);
}
protected abstract AbstractRefactoring<View> getRefactoring();
protected View getViewForState(Statechart initial, String stateName) {
Diagram diagram = (Diagram) EcoreUtil.getObjectByType(initial.eResource().getContents(), NotationPackage.Literals.DIAGRAM);
RefactoringHelper helper = new RefactoringHelper();
return helper.getViewForSemanticElement(getStateByName(initial, stateName), diagram);
}
}