|
@@ -1,14 +1,12 @@
|
|
package bk;
|
|
package bk;
|
|
|
|
|
|
-import java.lang.reflect.InvocationTargetException;
|
|
|
|
-
|
|
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JTree;
|
|
import javax.swing.JTree;
|
|
|
|
|
|
import animation.AnimatedAlgorithm;
|
|
import animation.AnimatedAlgorithm;
|
|
import animation.AnimationController;
|
|
import animation.AnimationController;
|
|
|
|
+import animation.CodeLine;
|
|
import animation.PseudoCodeNode;
|
|
import animation.PseudoCodeNode;
|
|
-import animation.PseudoCodeNode.CodeAction;
|
|
|
|
import graph.LayeredGraphNode;
|
|
import graph.LayeredGraphNode;
|
|
import lib.TextLayoutHelper;
|
|
import lib.TextLayoutHelper;
|
|
|
|
|
|
@@ -63,20 +61,10 @@ public class BKNodePlacement extends AnimatedAlgorithm {
|
|
return state;
|
|
return state;
|
|
}
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
|
- public StageStatus forwardStep() {
|
|
|
|
- return forward( "forwardStep" );
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public StageStatus backwardStep() {
|
|
|
|
- return backward( "backwardStep" );
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
public PseudoCodeNode createPseudocodeTree( JTree tree )
|
|
public PseudoCodeNode createPseudocodeTree( JTree tree )
|
|
{
|
|
{
|
|
- PseudoCodeNode root = new PseudoCodeNode( TextLayoutHelper.setupPseudoCodeStage("BK Node Placement Algorithm"), tree );
|
|
|
|
|
|
+ root = new PseudoCodeNode( TextLayoutHelper.setupPseudoCodeStage("BK Node Placement Algorithm"), tree, CodeLine.DEFAULT_STEP_INTO_STACK );
|
|
root.setSelected( true );
|
|
root.setSelected( true );
|
|
conflictsNode = conftion.createPseudocodeTree( tree );
|
|
conflictsNode = conftion.createPseudocodeTree( tree );
|
|
layout1Node = layouts[ 0 ].createPseudocodeTree( tree );
|
|
layout1Node = layouts[ 0 ].createPseudocodeTree( tree );
|
|
@@ -93,60 +81,6 @@ public class BKNodePlacement extends AnimatedAlgorithm {
|
|
return root;
|
|
return root;
|
|
}
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
|
- public StageStatus forwardStepOver() {
|
|
|
|
- if( !inside )
|
|
|
|
- {
|
|
|
|
- State oldState = state;
|
|
|
|
- StageStatus status = StageStatus.UNFINISHED;
|
|
|
|
- while( state == oldState && status == StageStatus.UNFINISHED )
|
|
|
|
- status = forwardStep();
|
|
|
|
- return status;
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- return forward( "forwardStepOver" );
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public StageStatus forwardStepOut() {
|
|
|
|
- if( !inside )
|
|
|
|
- {
|
|
|
|
- StageStatus status = StageStatus.UNFINISHED;
|
|
|
|
- while( status == StageStatus.UNFINISHED )
|
|
|
|
- status = forwardStep();
|
|
|
|
- return status;
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- return forward( "forwardStepOut" );
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public StageStatus backwardStepOver() {
|
|
|
|
- if( !inside )
|
|
|
|
- {
|
|
|
|
- State oldState = state;
|
|
|
|
- StageStatus status = StageStatus.UNFINISHED;
|
|
|
|
- while( state == oldState && status == StageStatus.UNFINISHED )
|
|
|
|
- status = backwardStep();
|
|
|
|
- return status;
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- return backward( "backwardStepOver" );
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public StageStatus backwardStepOut() {
|
|
|
|
- if( !inside )
|
|
|
|
- {
|
|
|
|
- StageStatus status = StageStatus.UNFINISHED;
|
|
|
|
- while( status == StageStatus.UNFINISHED )
|
|
|
|
- status = backwardStep();
|
|
|
|
- return status;
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- return backward( "backwardStepOut" );
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
public String getDebugString()
|
|
public String getDebugString()
|
|
{
|
|
{
|
|
@@ -169,305 +103,4 @@ public class BKNodePlacement extends AnimatedAlgorithm {
|
|
}
|
|
}
|
|
return "";
|
|
return "";
|
|
}
|
|
}
|
|
-
|
|
|
|
- private StageStatus forward( String fName )
|
|
|
|
- {
|
|
|
|
- boolean breakpoint = false;
|
|
|
|
- CodeAction action = null;
|
|
|
|
- try {
|
|
|
|
- switch( state )
|
|
|
|
- {
|
|
|
|
- case CONFLICTS:
|
|
|
|
- boolean selected = conflictsNode.isSelected();
|
|
|
|
- action = conflictsNode.setSelected( true );
|
|
|
|
- if( !selected )
|
|
|
|
- breakpoint |= action == CodeAction.STOP;
|
|
|
|
- do {
|
|
|
|
- switch( (StageStatus)(ConflictDetection.class.getMethod( fName ).invoke( conftion ) ) )
|
|
|
|
- {
|
|
|
|
- case FINISHED:
|
|
|
|
- inside = false;
|
|
|
|
- conflictsNode.setSelected( false );
|
|
|
|
- CodeAction ca = layout1Node.setSelected( true );
|
|
|
|
- breakpoint |= ca == CodeAction.STOP;
|
|
|
|
- state = State.LAYOUT1;
|
|
|
|
- if( ca == CodeAction.SKIP && !breakpoint )
|
|
|
|
- return forward( fName );
|
|
|
|
- break;
|
|
|
|
- case BREAKPOINT:
|
|
|
|
- inside = true;
|
|
|
|
- return StageStatus.BREAKPOINT;
|
|
|
|
- case UNFINISHED:
|
|
|
|
- inside = true;
|
|
|
|
- }
|
|
|
|
- } while( !breakpoint && action == CodeAction.SKIP );
|
|
|
|
- break;
|
|
|
|
- case LAYOUT1:
|
|
|
|
- action = layout1Node.setSelected( true );
|
|
|
|
- do {
|
|
|
|
- switch( (StageStatus)(ExtremalLayoutCalc.class.getMethod( fName ).invoke( layouts[ 0 ] ) ) )
|
|
|
|
- {
|
|
|
|
- case FINISHED:
|
|
|
|
- inside = false;
|
|
|
|
- layout1Node.setSelected( false );
|
|
|
|
- CodeAction ca = layout2Node.setSelected( true );
|
|
|
|
- breakpoint |= ca == CodeAction.STOP;
|
|
|
|
- state = State.LAYOUT2;
|
|
|
|
- if( ca == CodeAction.SKIP && !breakpoint )
|
|
|
|
- return forward( fName );
|
|
|
|
- break;
|
|
|
|
- case BREAKPOINT:
|
|
|
|
- inside = true;
|
|
|
|
- return StageStatus.BREAKPOINT;
|
|
|
|
- case UNFINISHED:
|
|
|
|
- inside = true;
|
|
|
|
- }
|
|
|
|
- } while( !breakpoint && action == CodeAction.SKIP );
|
|
|
|
- break;
|
|
|
|
- case LAYOUT2:
|
|
|
|
- action = layout2Node.setSelected( true );
|
|
|
|
- do {
|
|
|
|
- switch( (StageStatus)(ExtremalLayoutCalc.class.getMethod( fName ).invoke( layouts[ 1 ] ) ) )
|
|
|
|
- {
|
|
|
|
- case FINISHED:
|
|
|
|
- inside = false;
|
|
|
|
- layout2Node.setSelected( false );
|
|
|
|
- CodeAction ca = layout3Node.setSelected( true );
|
|
|
|
- breakpoint |= ca == CodeAction.STOP;
|
|
|
|
- state = State.LAYOUT3;
|
|
|
|
- if( ca == CodeAction.SKIP && !breakpoint )
|
|
|
|
- return forward( fName );
|
|
|
|
- break;
|
|
|
|
- case BREAKPOINT:
|
|
|
|
- inside = true;
|
|
|
|
- return StageStatus.BREAKPOINT;
|
|
|
|
- case UNFINISHED:
|
|
|
|
- inside = true;
|
|
|
|
- }
|
|
|
|
- } while( !breakpoint && action == CodeAction.SKIP );
|
|
|
|
- break;
|
|
|
|
- case LAYOUT3:
|
|
|
|
- action = layout3Node.setSelected( true );
|
|
|
|
- do {
|
|
|
|
- switch( (StageStatus)(ExtremalLayoutCalc.class.getMethod( fName ).invoke( layouts[ 2 ] ) ) )
|
|
|
|
- {
|
|
|
|
- case FINISHED:
|
|
|
|
- inside = false;
|
|
|
|
- layout3Node.setSelected( false );
|
|
|
|
- CodeAction ca = layout4Node.setSelected( true );
|
|
|
|
- breakpoint |= ca == CodeAction.STOP;
|
|
|
|
- state = State.LAYOUT4;
|
|
|
|
- if( ca == CodeAction.SKIP && !breakpoint )
|
|
|
|
- return forward( fName );
|
|
|
|
- break;
|
|
|
|
- case BREAKPOINT:
|
|
|
|
- inside = true;
|
|
|
|
- return StageStatus.BREAKPOINT;
|
|
|
|
- case UNFINISHED:
|
|
|
|
- inside = true;
|
|
|
|
- }
|
|
|
|
- } while( !breakpoint && action == CodeAction.SKIP );
|
|
|
|
- break;
|
|
|
|
- case LAYOUT4:
|
|
|
|
- action = layout4Node.setSelected( true );
|
|
|
|
- do {
|
|
|
|
- switch( (StageStatus)(ExtremalLayoutCalc.class.getMethod( fName ).invoke( layouts[ 3 ] ) ) )
|
|
|
|
- {
|
|
|
|
- case FINISHED:
|
|
|
|
- inside = false;
|
|
|
|
- layout4Node.setSelected( false );
|
|
|
|
- CodeAction ca = combineNode.setSelected( true );
|
|
|
|
- breakpoint |= ca == CodeAction.STOP;
|
|
|
|
- state = State.COMBINE;
|
|
|
|
- if( ca == CodeAction.SKIP && !breakpoint )
|
|
|
|
- return forward( fName );
|
|
|
|
- break;
|
|
|
|
- case BREAKPOINT:
|
|
|
|
- inside = true;
|
|
|
|
- return StageStatus.BREAKPOINT;
|
|
|
|
- case UNFINISHED:
|
|
|
|
- inside = true;
|
|
|
|
- }
|
|
|
|
- } while( !breakpoint && action == CodeAction.SKIP );
|
|
|
|
- break;
|
|
|
|
- case COMBINE:
|
|
|
|
- action = combineNode.setSelected( true );
|
|
|
|
- do {
|
|
|
|
- switch( (StageStatus)(Combine.class.getMethod( fName ).invoke( combine ) ) )
|
|
|
|
- {
|
|
|
|
- case FINISHED:
|
|
|
|
- inside = false;
|
|
|
|
- return StageStatus.FINISHED;
|
|
|
|
- case BREAKPOINT:
|
|
|
|
- return StageStatus.BREAKPOINT;
|
|
|
|
- case UNFINISHED:
|
|
|
|
- inside = true;
|
|
|
|
- }
|
|
|
|
- } while( !breakpoint && action == CodeAction.SKIP );
|
|
|
|
- }
|
|
|
|
- } catch (IllegalAccessException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- } catch (IllegalArgumentException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- } catch (InvocationTargetException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- } catch (NoSuchMethodException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- } catch (SecurityException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- if( breakpoint )
|
|
|
|
- return StageStatus.BREAKPOINT;
|
|
|
|
- return StageStatus.UNFINISHED;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private StageStatus backward( String fName ) {
|
|
|
|
- boolean breakpoint = false;
|
|
|
|
- CodeAction action = null;
|
|
|
|
- try {
|
|
|
|
- switch( state )
|
|
|
|
- {
|
|
|
|
- case CONFLICTS:
|
|
|
|
- action = conflictsNode.setSelected( true );
|
|
|
|
- do {
|
|
|
|
- switch( (StageStatus)(ConflictDetection.class.getMethod( fName ).invoke( conftion ) ) )
|
|
|
|
- {
|
|
|
|
- case FINISHED:
|
|
|
|
- inside = false;
|
|
|
|
- conflictsNode.setSelected( false );
|
|
|
|
- return StageStatus.FINISHED;
|
|
|
|
- case BREAKPOINT:
|
|
|
|
- inside = true;
|
|
|
|
- return StageStatus.BREAKPOINT;
|
|
|
|
- case UNFINISHED:
|
|
|
|
- inside = true;
|
|
|
|
- }
|
|
|
|
- } while( !breakpoint && action == CodeAction.SKIP );
|
|
|
|
- case LAYOUT1:
|
|
|
|
- action = layout1Node.setSelected( true );
|
|
|
|
- do {
|
|
|
|
- switch( (StageStatus)(ExtremalLayoutCalc.class.getMethod( fName ).invoke( layouts[ 0 ] ) ) )
|
|
|
|
- {
|
|
|
|
- case FINISHED:
|
|
|
|
- inside = false;
|
|
|
|
- layout1Node.setSelected( false );
|
|
|
|
- CodeAction ca = conflictsNode.setSelected( true );
|
|
|
|
- breakpoint |= ca == CodeAction.STOP;
|
|
|
|
- state = State.CONFLICTS;
|
|
|
|
- if( ca == CodeAction.SKIP && !breakpoint )
|
|
|
|
- return backward( fName );
|
|
|
|
- break;
|
|
|
|
- case BREAKPOINT:
|
|
|
|
- inside = true;
|
|
|
|
- return StageStatus.BREAKPOINT;
|
|
|
|
- case UNFINISHED:
|
|
|
|
- inside = true;
|
|
|
|
- }
|
|
|
|
- } while( !breakpoint && action == CodeAction.SKIP );
|
|
|
|
- break;
|
|
|
|
- case LAYOUT2:
|
|
|
|
- action = layout2Node.setSelected( true );
|
|
|
|
- do {
|
|
|
|
- switch( (StageStatus)(ExtremalLayoutCalc.class.getMethod( fName ).invoke( layouts[ 1 ] ) ) )
|
|
|
|
- {
|
|
|
|
- case FINISHED:
|
|
|
|
- inside = false;
|
|
|
|
- layout2Node.setSelected( false );
|
|
|
|
- CodeAction ca = layout1Node.setSelected( true );
|
|
|
|
- breakpoint |= ca == CodeAction.STOP;
|
|
|
|
- state = State.LAYOUT1;
|
|
|
|
- if( ca == CodeAction.SKIP && !breakpoint )
|
|
|
|
- return backward( fName );
|
|
|
|
- break;
|
|
|
|
- case BREAKPOINT:
|
|
|
|
- inside = true;
|
|
|
|
- return StageStatus.BREAKPOINT;
|
|
|
|
- case UNFINISHED:
|
|
|
|
- inside = true;
|
|
|
|
- }
|
|
|
|
- } while( !breakpoint && action == CodeAction.SKIP );
|
|
|
|
- break;
|
|
|
|
- case LAYOUT3:
|
|
|
|
- action = layout3Node.setSelected( true );
|
|
|
|
- do {
|
|
|
|
- switch( (StageStatus)(ExtremalLayoutCalc.class.getMethod( fName ).invoke( layouts[ 2 ] ) ) )
|
|
|
|
- {
|
|
|
|
- case FINISHED:
|
|
|
|
- inside = false;
|
|
|
|
- layout3Node.setSelected( false );
|
|
|
|
- CodeAction ca = layout2Node.setSelected( true );
|
|
|
|
- breakpoint |= ca == CodeAction.STOP;
|
|
|
|
- state = State.LAYOUT2;
|
|
|
|
- if( ca == CodeAction.SKIP && !breakpoint )
|
|
|
|
- return backward( fName );
|
|
|
|
- break;
|
|
|
|
- case BREAKPOINT:
|
|
|
|
- inside = true;
|
|
|
|
- return StageStatus.BREAKPOINT;
|
|
|
|
- case UNFINISHED:
|
|
|
|
- inside = true;
|
|
|
|
- }
|
|
|
|
- } while( !breakpoint && action == CodeAction.SKIP );
|
|
|
|
- break;
|
|
|
|
- case LAYOUT4:
|
|
|
|
- action = layout4Node.setSelected( true );
|
|
|
|
- do {
|
|
|
|
- switch( (StageStatus)(ExtremalLayoutCalc.class.getMethod( fName ).invoke( layouts[ 3 ] ) ) )
|
|
|
|
- {
|
|
|
|
- case FINISHED:
|
|
|
|
- inside = false;
|
|
|
|
- layout4Node.setSelected( false );
|
|
|
|
- CodeAction ca = layout3Node.setSelected( true );
|
|
|
|
- breakpoint |= ca == CodeAction.STOP;
|
|
|
|
- state = State.LAYOUT3;
|
|
|
|
- if( ca == CodeAction.SKIP && !breakpoint )
|
|
|
|
- return backward( fName );
|
|
|
|
- break;
|
|
|
|
- case BREAKPOINT:
|
|
|
|
- inside = true;
|
|
|
|
- return StageStatus.BREAKPOINT;
|
|
|
|
- case UNFINISHED:
|
|
|
|
- inside = true;
|
|
|
|
- }
|
|
|
|
- } while( !breakpoint && action == CodeAction.SKIP );
|
|
|
|
- break;
|
|
|
|
- case COMBINE:
|
|
|
|
- action = combineNode.setSelected( true );
|
|
|
|
- do {
|
|
|
|
- switch( (StageStatus)(Combine.class.getMethod( fName ).invoke( combine ) ) )
|
|
|
|
- {
|
|
|
|
- case FINISHED:
|
|
|
|
- inside = false;
|
|
|
|
- combineNode.setSelected( false );
|
|
|
|
- CodeAction ca = layout4Node.setSelected( true );
|
|
|
|
- breakpoint |= ca == CodeAction.STOP;
|
|
|
|
- state = State.LAYOUT4;
|
|
|
|
- if( ca == CodeAction.SKIP && !breakpoint )
|
|
|
|
- return backward( fName );
|
|
|
|
- break;
|
|
|
|
- case BREAKPOINT:
|
|
|
|
- inside = true;
|
|
|
|
- return StageStatus.BREAKPOINT;
|
|
|
|
- case UNFINISHED:
|
|
|
|
- inside = true;
|
|
|
|
- }
|
|
|
|
- } while( !breakpoint && action == CodeAction.SKIP );
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- } catch (IllegalAccessException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- } catch (IllegalArgumentException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- } catch (InvocationTargetException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- } catch (NoSuchMethodException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- } catch (SecurityException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- if( breakpoint )
|
|
|
|
- return StageStatus.BREAKPOINT;
|
|
|
|
- return StageStatus.UNFINISHED;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
}
|
|
}
|