// @topic S-0303-03-01-20 Java MVC Architecture Demo 2 // @brief The use case controller class package demo; public class ControllerDemo { //---------------------------------------- // data //---------------------------------------- private FrameMainView window; private ElevatorBank elevatorBank; //---------------------------------------- // constructors //---------------------------------------- public ControllerDemo() { }//ControllerDemo //---------------------------------------- //operations //---------------------------------------- public void initUseCase() { // constructing business objects elevatorBank = new ElevatorBank(); elevatorBank.addElevator( new Elevator( Elevator.maxFloor ) ); elevatorBank.addElevator( new Elevator( Elevator.minFloor ) ); }//initUseCase public FrameMainView getWindow() { return window; }//getWindow public void setWindow(FrameMainView window) { this.window = window; }//setWindow public void startAnimation() { // create and start new thread: ThreadAnimation thp = new ThreadAnimation( this ); Thread th = new Thread( thp ); th.start(); }//startAnimation public void animate() { // update business model elevatorBank.getElevator( 0 ).move(); elevatorBank.getElevator( 1 ).move(); // update the view displayElevators(); }//animate void displayElevators() { StringBuilder displayGrid = new StringBuilder(); for ( int floorNumber = Elevator.maxFloor; floorNumber >= Elevator.minFloor; --floorNumber ) { // for each floor for ( Elevator elevator : elevatorBank.getElevatorCollection() ) { // for each elevator if ( floorNumber == elevator.getFloor() ) { displayGrid.append( " " + floorNumber ); } else { displayGrid.append( " :" ); } } displayGrid.append( '\n' ); } // Make sure that the actual update happens on // the EDT thread: java.awt.EventQueue.invokeLater(new Runnable() { public void run() { // this must be done on EDT thread window.getAreaDisplayElevators().setText( displayGrid.toString() ); } }); }//displayElevators }//class ControllerDemo