/* Soot - a J*va Optimization Framework
* Copyright (C) 2005 Jennifer Lhotak
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
package ca.mcgill.sable.graph.testing;
import org.eclipse.ui.*;
import org.eclipse.jface.action.*;
import org.eclipse.jface.viewers.*;
import ca.mcgill.sable.graph.*;
import ca.mcgill.sable.graph.model.*;
import org.eclipse.core.runtime.*;
import java.util.*;
import java.lang.reflect.*;
public class GraphGenerator implements IWorkbenchWindowActionDelegate {
private ArrayList children = new ArrayList();
private Graph graph;
public GraphGenerator() {
}
public void run(IAction action){
IWorkbenchPage page = GraphPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage();
try{
setGraph(new Graph());
IEditorPart part = page.openEditor(graph, "ca.mcgill.sable.graph.GraphEditor");
handleChildren();
}
catch (PartInitException e3){
e3.printStackTrace();
}
catch (Exception e2){
e2.printStackTrace();
}
}
public void buildModel(){
GraphPlugin.getDefault().setGenerator(this);
TestNode p1 = new TestNode();
p1.setData("P1");
TestNode p2 = new TestNode();
p2.setData("P2");
p1.addOutput(p2);
TestNode c1 = new TestNode();
TestNode c2 = new TestNode();
TestNode c3 = new TestNode();
p1.addChild(c1);
p1.addChild(c2);
p1.addChild(c3);
c1.addOutput(c2);
c1.addOutput(c3);
c1.addOutput(p2);
c3.addOutput(p2);
c1.setData("C1");
c2.setData("C2");
c3.setData("C3");
TestNode c4 = new TestNode();
TestNode c5 = new TestNode();
p2.addChild(c4);
p2.addChild(c5);
c4.addOutput(c5);
c1.addOutput(c4);
c3.addOutput(c4);
p1.addOutput(c4);
c4.setData("C4");
c5.setData("C5");
getChildren().add(p1);
getChildren().add(p2);
handleChildren();
}
HashMap map;
private void handleChildren(){
getGraph().removeAllChildren();
map = new HashMap();
Iterator it = getChildren().iterator();
while (it.hasNext()){
TestNode tn = (TestNode)it.next();
SimpleNode sn = new SimpleNode();
getGraph().addChild(sn);
sn.setData(tn.getData());
sn.setChildren(tn.getChildren());
map.put(tn, sn);
}
Iterator it2 = getChildren().iterator();
while (it2.hasNext()){
TestNode tn = (TestNode)it2.next();
SimpleNode src = (SimpleNode)map.get(tn);
Iterator eIt = tn.getOutputs().iterator();
while (eIt.hasNext()){
Object endTn = eIt.next();
SimpleNode tgt = (SimpleNode)map.get(endTn);
if (tgt != null){
Edge e = new Edge(src, tgt);
}
}
}
}
public void expandGraph(SimpleNode node){
Iterator it = getChildren().iterator();
TestNode tn = null;
while (it.hasNext()){
tn = (TestNode)it.next();
if (map.get(tn).equals(node)) break;
}
if (tn != null){
if (tn.getChildren().size() > 0){
getChildren().remove(tn);
}
}
Iterator childIt = node.getChildren().iterator();
while (childIt.hasNext()){
TestNode test = (TestNode)childIt.next();
getChildren().add(test);
}
handleChildren();
}
public void dispose(){
}
public void selectionChanged(IAction action, ISelection sel){
}
public void init(IWorkbenchWindow window){
}
/**
* @return
*/
public ArrayList getChildren() {
return children;
}
/**
* @param list
*/
public void setChildren(ArrayList list) {
children = list;
}
/**
* @return
*/
public Graph getGraph() {
return graph;
}
/**
* @param graph
*/
public void setGraph(Graph graph) {
this.graph = graph;
}
}