// Path: src/event/events/DrivingEvent.java
// public class DrivingEvent extends SensorEvent {
// 
//     public static final int SIDE_LEFT = 0;
//     public static final int SIDE_RIGHT = 1;
// 
//     /**
//      * Creates a new DrivingEvent.
//      *
//      * @param source source of event
//      * @param sideID left or right side
//      * @param value the speed of that side
//      */
//     public DrivingEvent(GRTDriverStation source, int sideID, double value) {
//         super(source, sideID, value);
//     }
// 
//     /**
//      * Whether or not this is a left side event or a right side event.
//      *
//      * @return DrivingEvent.SIDE_LEFT or DrivingEvent.SIDE_RIGHT
//      */
//     public int getSide() {
//         return getID();
//     }
// 
//     /**
//      * Returns the speed specified by this event.
//      *
//      * @return speed of side, as number from -1 to 1
//      */
//     public double getSpeed() {
//         return getData();
//     }
// }
// 
// Path: src/event/listeners/DrivingListener.java
// public interface DrivingListener {
// 
//     /**
//      * Called to set speed of left drivetrain.
//      *
//      * @param e event specifying left side speed
//      */
//     public void driverLeftSpeed(DrivingEvent e);
// 
//     /**
//      * Called to set speed of right drivetrain.
//      *
//      * @param e event specifying right side speed
//      */
//     public void driverRightSpeed(DrivingEvent e);
// }
// 
// Path: src/mechanism/GRTRobotBase.java
// public class GRTRobotBase {
// 
//     private final GRTDriveTrain dt;
//     private final GRTBatterySensor s;
// 
//     /**
//      * Constructs a new robot base.
//      *
//      * @param dt robot drivetrain
//      * @param s battery sensor
//      */
//     public GRTRobotBase(GRTDriveTrain dt, GRTBatterySensor s) {
//         this.dt = dt;
//         this.s = s;
//     }
// 
//     /**
//      * Returns the drivetrain
//      *
//      * @return drivetrain of this base
//      */
//     public GRTDriveTrain getDriveTrain() {
//         return dt;
//     }
// 
//     /**
//      * Returns the battery sensor
//      *
//      * @return battery sensor of this base
//      */
//     public GRTBatterySensor getBatterySensor() {
//         return s;
//     }
// 
//     /**
//      * Drives the robot.
//      *
//      * @param leftVelocity velocity of left drivetrain
//      * @param rightVelocity velocity of right drivetrain
//      */
//     public void tankDrive(double leftVelocity, double rightVelocity) {
//         dt.tankDrive(leftVelocity, rightVelocity);
//     }
// }
// 
// Path: src/sensor/base/GRTDriverStation.java
// public abstract class GRTDriverStation extends Sensor {
// 
//     /*
//      * State Keys
//      */
//     public static final int KEY_LEFT_VELOCITY = 0;
//     public static final int KEY_RIGHT_VELOCITY = 1;
//     public static final int KEY_LEFT_SHIFT = 2;
//     public static final int KEY_RIGHT_SHIFT = 3;
//     private final Vector drivingListeners;
//     private final Vector shiftListeners;
// 
//     /**
//      * Creates a new driver station.
//      *
//      * @param name name of driver station.
//      */
//     public GRTDriverStation(String name) {
//         super(name, 2);
// 
//         drivingListeners = new Vector();
//         shiftListeners = new Vector();
// 
//     }
// 
//     public void addDrivingListener(DrivingListener l) {
//         drivingListeners.addElement(l);
//     }
// 
//     public void removeDrivingListener(DrivingListener l) {
//         drivingListeners.removeElement(l);
//     }
// 
//     public void addShiftListener(ShiftListener l) {
//         shiftListeners.addElement(l);
//     }
// 
//     public void removeShiftListener(ShiftListener l) {
//         shiftListeners.removeElement(l);
//     }
// 
//     protected void notifyLeftDriveSpeed(double speed) {
//         setState(KEY_LEFT_VELOCITY, speed);
//     }
// 
//     protected void notifyRightDriveSpeed(double speed) {
//         setState(KEY_RIGHT_VELOCITY, speed);
//     }
// 
//     protected void notifyListeners(int id, double newValue) {
// 
//         DrivingEvent ev;
//         ShiftEvent sev;
//         
//         switch (id) {
//             case KEY_LEFT_VELOCITY:
//                 ev = new DrivingEvent(this, DrivingEvent.SIDE_LEFT, newValue);
//                 for (Enumeration en = drivingListeners.elements(); en.
//                         hasMoreElements();) {
//                     if (en instanceof DrivingListener)
//                         ((DrivingListener) en.nextElement()).driverLeftSpeed(ev);
//                 }
//                 break;
// 
//             case KEY_RIGHT_VELOCITY:
//                 ev = new DrivingEvent(this, DrivingEvent.SIDE_RIGHT, newValue);
//                 for (Enumeration en = drivingListeners.elements(); en.
//                         hasMoreElements();) {
//                     if (en instanceof DrivingListener)
//                        ((DrivingListener) en.nextElement()).driverRightSpeed(ev);
//                 }
//                 break;
//                 
//             case KEY_LEFT_SHIFT:
//                 sev = new ShiftEvent(this, DrivingEvent.SIDE_LEFT, newValue);
//                 for (Enumeration en = shiftListeners.elements(); en.
//                         hasMoreElements();) {
//                     if (en instanceof ShiftListener)
//                         ((ShiftListener) en.nextElement()).shift(sev);
//                 }
//                 break;
//             case KEY_RIGHT_SHIFT:
//                 sev = new ShiftEvent(this, DrivingEvent.SIDE_RIGHT, newValue);
//                 for (Enumeration en = shiftListeners.elements(); en.
//                         hasMoreElements();) {
//                     if (en instanceof ShiftListener)
//                        ((ShiftListener) en.nextElement()).shift(sev);
//                 }
//                 break;
// 
//         }
//     }
// }


import core.EventController;
import event.events.DrivingEvent;
import event.listeners.DrivingListener;
import mechanism.GRTRobotBase;
import sensor.base.GRTDriverStation;
package controller;


/**
 * Robot base driver.
 *
 * Operates for any DriverStation.
 *
 * @author ajc
 */
public class PrimaryDriveController extends EventController implements DrivingListener {

    //sensor
    private final GRTDriverStation ds;
    //actuator
// Path: src/event/events/DrivingEvent.java
// public class DrivingEvent extends SensorEvent {
// 
//     public static final int SIDE_LEFT = 0;
//     public static final int SIDE_RIGHT = 1;
// 
//     /**
//      * Creates a new DrivingEvent.
//      *
//      * @param source source of event
//      * @param sideID left or right side
//      * @param value the speed of that side
//      */
//     public DrivingEvent(GRTDriverStation source, int sideID, double value) {
//         super(source, sideID, value);
//     }
// 
//     /**
//      * Whether or not this is a left side event or a right side event.
//      *
//      * @return DrivingEvent.SIDE_LEFT or DrivingEvent.SIDE_RIGHT
//      */
//     public int getSide() {
//         return getID();
//     }
// 
//     /**
//      * Returns the speed specified by this event.
//      *
//      * @return speed of side, as number from -1 to 1
//      */
//     public double getSpeed() {
//         return getData();
//     }
// }
// 
// Path: src/event/listeners/DrivingListener.java
// public interface DrivingListener {
// 
//     /**
//      * Called to set speed of left drivetrain.
//      *
//      * @param e event specifying left side speed
//      */
//     public void driverLeftSpeed(DrivingEvent e);
// 
//     /**
//      * Called to set speed of right drivetrain.
//      *
//      * @param e event specifying right side speed
//      */
//     public void driverRightSpeed(DrivingEvent e);
// }
// 
// Path: src/mechanism/GRTRobotBase.java
// public class GRTRobotBase {
// 
//     private final GRTDriveTrain dt;
//     private final GRTBatterySensor s;
// 
//     /**
//      * Constructs a new robot base.
//      *
//      * @param dt robot drivetrain
//      * @param s battery sensor
//      */
//     public GRTRobotBase(GRTDriveTrain dt, GRTBatterySensor s) {
//         this.dt = dt;
//         this.s = s;
//     }
// 
//     /**
//      * Returns the drivetrain
//      *
//      * @return drivetrain of this base
//      */
//     public GRTDriveTrain getDriveTrain() {
//         return dt;
//     }
// 
//     /**
//      * Returns the battery sensor
//      *
//      * @return battery sensor of this base
//      */
//     public GRTBatterySensor getBatterySensor() {
//         return s;
//     }
// 
//     /**
//      * Drives the robot.
//      *
//      * @param leftVelocity velocity of left drivetrain
//      * @param rightVelocity velocity of right drivetrain
//      */
//     public void tankDrive(double leftVelocity, double rightVelocity) {
//         dt.tankDrive(leftVelocity, rightVelocity);
//     }
// }
// 
// Path: src/sensor/base/GRTDriverStation.java
// public abstract class GRTDriverStation extends Sensor {
// 
//     /*
//      * State Keys
//      */
//     public static final int KEY_LEFT_VELOCITY = 0;
//     public static final int KEY_RIGHT_VELOCITY = 1;
//     public static final int KEY_LEFT_SHIFT = 2;
//     public static final int KEY_RIGHT_SHIFT = 3;
//     private final Vector drivingListeners;
//     private final Vector shiftListeners;
// 
//     /**
//      * Creates a new driver station.
//      *
//      * @param name name of driver station.
//      */
//     public GRTDriverStation(String name) {
//         super(name, 2);
// 
//         drivingListeners = new Vector();
//         shiftListeners = new Vector();
// 
//     }
// 
//     public void addDrivingListener(DrivingListener l) {
//         drivingListeners.addElement(l);
//     }
// 
//     public void removeDrivingListener(DrivingListener l) {
//         drivingListeners.removeElement(l);
//     }
// 
//     public void addShiftListener(ShiftListener l) {
//         shiftListeners.addElement(l);
//     }
// 
//     public void removeShiftListener(ShiftListener l) {
//         shiftListeners.removeElement(l);
//     }
// 
//     protected void notifyLeftDriveSpeed(double speed) {
//         setState(KEY_LEFT_VELOCITY, speed);
//     }
// 
//     protected void notifyRightDriveSpeed(double speed) {
//         setState(KEY_RIGHT_VELOCITY, speed);
//     }
// 
//     protected void notifyListeners(int id, double newValue) {
// 
//         DrivingEvent ev;
//         ShiftEvent sev;
//         
//         switch (id) {
//             case KEY_LEFT_VELOCITY:
//                 ev = new DrivingEvent(this, DrivingEvent.SIDE_LEFT, newValue);
//                 for (Enumeration en = drivingListeners.elements(); en.
//                         hasMoreElements();) {
//                     if (en instanceof DrivingListener)
//                         ((DrivingListener) en.nextElement()).driverLeftSpeed(ev);
//                 }
//                 break;
// 
//             case KEY_RIGHT_VELOCITY:
//                 ev = new DrivingEvent(this, DrivingEvent.SIDE_RIGHT, newValue);
//                 for (Enumeration en = drivingListeners.elements(); en.
//                         hasMoreElements();) {
//                     if (en instanceof DrivingListener)
//                        ((DrivingListener) en.nextElement()).driverRightSpeed(ev);
//                 }
//                 break;
//                 
//             case KEY_LEFT_SHIFT:
//                 sev = new ShiftEvent(this, DrivingEvent.SIDE_LEFT, newValue);
//                 for (Enumeration en = shiftListeners.elements(); en.
//                         hasMoreElements();) {
//                     if (en instanceof ShiftListener)
//                         ((ShiftListener) en.nextElement()).shift(sev);
//                 }
//                 break;
//             case KEY_RIGHT_SHIFT:
//                 sev = new ShiftEvent(this, DrivingEvent.SIDE_RIGHT, newValue);
//                 for (Enumeration en = shiftListeners.elements(); en.
//                         hasMoreElements();) {
//                     if (en instanceof ShiftListener)
//                        ((ShiftListener) en.nextElement()).shift(sev);
//                 }
//                 break;
// 
//         }
//     }
// }


// Path: src/controller/PrimaryDriveController.java
import core.EventController;
import event.events.DrivingEvent;
import event.listeners.DrivingListener;
import mechanism.GRTRobotBase;
import sensor.base.GRTDriverStation;

package controller;


/**
 * Robot base driver.
 *
 * Operates for any DriverStation.
 *
 * @author ajc
 */
public class PrimaryDriveController extends EventController implements DrivingListener {

    //sensor
    private final GRTDriverStation ds;
    //actuator
    private final GRTRobotBase base;