blob: f4ad08537daaa6930042039897782b534249adc8 [file] [log] [blame]
package statemachine.util;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.edapt.migration.CustomMigration;
import org.eclipse.emf.edapt.migration.MigrationException;
import org.eclipse.emf.edapt.spi.migration.Instance;
import org.eclipse.emf.edapt.spi.migration.Metamodel;
import org.eclipse.emf.edapt.spi.migration.Model;
public class EffectCustomMigration extends CustomMigration {
private EAttribute effectAttribute;
@Override
public void migrateBefore(Model model, Metamodel metamodel)
throws MigrationException {
effectAttribute = metamodel.getEAttribute("statemachine.State.effect");
}
@Override
public void migrateAfter(Model model, Metamodel metamodel)
throws MigrationException {
for (Instance transition : model
.getAllInstances("statemachine.Transition")) {
transition.set("effect", getEffect(transition));
}
for (Instance state : model.getAllInstances("statemachine.State")) {
state.unset(effectAttribute);
}
}
private List<String> getEffect(Instance transition) {
List<String> effect = new ArrayList<String>();
Instance state = transition.get("target");
effect.addAll(state.<List<String>> get(effectAttribute));
while (state.instanceOf("statemachine.CompositeState")) {
state = state.get("initial");
effect.addAll(state.<List<String>> get(effectAttribute));
}
return effect;
}
}