| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.List; |
| |
| 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 InsertTransitiveEdges extends Graph1CustomMigration { |
| |
| @Override |
| public void migrateBefore(Model model, Metamodel metamodel) { |
| moveResult(model); |
| |
| metamodel.setDefaultPackage("graph1"); |
| List<List<Instance>> pairs = new ArrayList<List<Instance>>(); |
| for (Instance n1 : model.getAllInstances("Node")) { |
| for (Instance n2 : getReachable(n1)) { |
| for (Instance n3 : getReachable(n2)) { |
| pairs.add(Arrays.asList(n1, n3)); |
| } |
| } |
| } |
| Instance graph = model.getAllInstances("Graph").get(0); |
| for (List<Instance> pair : pairs) { |
| Instance n1 = pair.get(0); |
| Instance n3 = pair.get(1); |
| if (!getReachable(n1).contains(n3)) { |
| Instance edge = model.newInstance("Edge"); |
| edge.set("src", n1); |
| edge.set("trg", n3); |
| graph.add("edges", edge); |
| } |
| } |
| } |
| } |