|
@@ -3,6 +3,7 @@ package bk;
|
|
|
import animation.AlgorithmStage;
|
|
|
import animation.AnimatedAlgorithm;
|
|
|
import animation.AnimationController;
|
|
|
+import animation.PseudoCodeNode;
|
|
|
import graph.LayeredGraphNode;
|
|
|
|
|
|
/**
|
|
@@ -30,6 +31,12 @@ public class BKNodePlacement extends AnimatedAlgorithm {
|
|
|
private State state;
|
|
|
private ExtremalLayoutCalc layouts[];
|
|
|
private Combine combine;
|
|
|
+ private PseudoCodeNode conflictsNode;
|
|
|
+ private PseudoCodeNode layout1Node;
|
|
|
+ private PseudoCodeNode layout2Node;
|
|
|
+ private PseudoCodeNode layout3Node;
|
|
|
+ private PseudoCodeNode layout4Node;
|
|
|
+ private PseudoCodeNode combineNode;
|
|
|
|
|
|
public BKNodePlacement(AnimationController controller, LayeredGraphNode graph) {
|
|
|
super(controller, graph);
|
|
@@ -48,24 +55,45 @@ public class BKNodePlacement extends AnimatedAlgorithm {
|
|
|
switch( state )
|
|
|
{
|
|
|
case CONFLICTS:
|
|
|
+ conflictsNode.setSelected( true );
|
|
|
if( conftion.forwardStep() == StageStatus.FINISHED )
|
|
|
+ {
|
|
|
+ conflictsNode.setSelected( false );
|
|
|
+ layout1Node.setSelected( true );
|
|
|
state = State.LAYOUT1;
|
|
|
+ }
|
|
|
break;
|
|
|
case LAYOUT1:
|
|
|
- if( layouts[ 0 ].forwardStep() == AlgorithmStage.StageStatus.FINISHED )
|
|
|
+ if( layouts[ 0 ].forwardStep() == StageStatus.FINISHED )
|
|
|
+ {
|
|
|
+ layout1Node.setSelected( false );
|
|
|
+ layout2Node.setSelected( true );
|
|
|
state = State.LAYOUT2;
|
|
|
+ }
|
|
|
break;
|
|
|
case LAYOUT2:
|
|
|
- if( layouts[ 1 ].forwardStep() == AlgorithmStage.StageStatus.FINISHED )
|
|
|
+ if( layouts[ 1 ].forwardStep() == StageStatus.FINISHED )
|
|
|
+ {
|
|
|
+ layout2Node.setSelected( false );
|
|
|
+ layout3Node.setSelected( true );
|
|
|
state = State.LAYOUT3;
|
|
|
+ }
|
|
|
break;
|
|
|
case LAYOUT3:
|
|
|
- if( layouts[ 2 ].forwardStep() == AlgorithmStage.StageStatus.FINISHED )
|
|
|
+ if( layouts[ 2 ].forwardStep() == StageStatus.FINISHED )
|
|
|
+ {
|
|
|
+ layout3Node.setSelected( false );
|
|
|
+ layout4Node.setSelected( true );
|
|
|
state = State.LAYOUT4;
|
|
|
+ }
|
|
|
break;
|
|
|
case LAYOUT4:
|
|
|
- if( layouts[ 3 ].forwardStep() == AlgorithmStage.StageStatus.FINISHED )
|
|
|
+ if( layouts[ 3 ].forwardStep() == StageStatus.FINISHED )
|
|
|
+ {
|
|
|
+ layout4Node.setSelected( false );
|
|
|
+ combineNode.setSelected( true );
|
|
|
state = State.COMBINE;
|
|
|
+ }
|
|
|
break;
|
|
|
case COMBINE:
|
|
|
return combine.forwardStep();
|
|
@@ -81,25 +109,63 @@ public class BKNodePlacement extends AnimatedAlgorithm {
|
|
|
return conftion.backwardStep();
|
|
|
case LAYOUT1:
|
|
|
if( layouts[ 0 ].backwardStep() == StageStatus.FINISHED )
|
|
|
+ {
|
|
|
+ layout1Node.setSelected( false );
|
|
|
+ conflictsNode.setSelected( true );
|
|
|
state = State.CONFLICTS;
|
|
|
+ }
|
|
|
break;
|
|
|
case LAYOUT2:
|
|
|
if( layouts[ 1 ].backwardStep() == AlgorithmStage.StageStatus.FINISHED )
|
|
|
+ {
|
|
|
+ layout2Node.setSelected( false );
|
|
|
+ layout1Node.setSelected( true );
|
|
|
state = State.LAYOUT1;
|
|
|
+ }
|
|
|
break;
|
|
|
case LAYOUT3:
|
|
|
if( layouts[ 2 ].backwardStep() == AlgorithmStage.StageStatus.FINISHED )
|
|
|
+ {
|
|
|
+ layout3Node.setSelected( false );
|
|
|
+ layout2Node.setSelected( true );
|
|
|
state = State.LAYOUT2;
|
|
|
+ }
|
|
|
break;
|
|
|
case LAYOUT4:
|
|
|
if( layouts[ 3 ].backwardStep() == AlgorithmStage.StageStatus.FINISHED )
|
|
|
+ {
|
|
|
+ layout4Node.setSelected( false );
|
|
|
+ layout3Node.setSelected( true );
|
|
|
state = State.LAYOUT3;
|
|
|
+ }
|
|
|
break;
|
|
|
case COMBINE:
|
|
|
if( combine.backwardStep() == AlgorithmStage.StageStatus.FINISHED )
|
|
|
+ {
|
|
|
+ combineNode.setSelected( false );
|
|
|
+ layout4Node.setSelected( true );
|
|
|
state = State.LAYOUT4;
|
|
|
+ }
|
|
|
break;
|
|
|
}
|
|
|
return StageStatus.UNFINISHED;
|
|
|
}
|
|
|
+
|
|
|
+ public PseudoCodeNode createPseudocodeTree()
|
|
|
+ {
|
|
|
+ PseudoCodeNode root = new PseudoCodeNode( "BK Node Placement Algorithm" );
|
|
|
+ conflictsNode = conftion.createPseudocodeTree();
|
|
|
+ layout1Node = layouts[ 0 ].createPseudocodeTree();
|
|
|
+ layout2Node = layouts[ 1 ].createPseudocodeTree();
|
|
|
+ layout3Node = layouts[ 2 ].createPseudocodeTree();
|
|
|
+ layout4Node = layouts[ 3 ].createPseudocodeTree();
|
|
|
+ combineNode = combine.createPseudocodeTree();
|
|
|
+ root.add( conflictsNode );
|
|
|
+ root.add( layout1Node );
|
|
|
+ root.add( layout2Node );
|
|
|
+ root.add( layout3Node );
|
|
|
+ root.add( layout4Node );
|
|
|
+ root.add( combineNode );
|
|
|
+ return root;
|
|
|
+ }
|
|
|
}
|