// 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 sensor.base.GRTDriverStation;
package event.events;


/**
 * Event specifying the the gear of the right or left side of the robot.
 *
 * @author danfrei
 */
public class ShiftEvent extends SensorEvent {

    public static final int KEY_SHIFT_UP = 1;
    public static final int KEY_SHIFT_DOWN = 0;
    public static final int SIDE_LEFT = 0;
    public static final int SIDE_RIGHT = 1;

    /**
     * Creates a new ShiftEvent.
     *
     * @param source source of event
     * @param sideID left or right side
     * @param shiftDirection the key indicating shift up or down
     */
// 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/event/events/ShiftEvent.java
import sensor.base.GRTDriverStation;

package event.events;


/**
 * Event specifying the the gear of the right or left side of the robot.
 *
 * @author danfrei
 */
public class ShiftEvent extends SensorEvent {

    public static final int KEY_SHIFT_UP = 1;
    public static final int KEY_SHIFT_DOWN = 0;
    public static final int SIDE_LEFT = 0;
    public static final int SIDE_RIGHT = 1;

    /**
     * Creates a new ShiftEvent.
     *
     * @param source source of event
     * @param sideID left or right side
     * @param shiftDirection the key indicating shift up or down
     */
    public ShiftEvent(GRTDriverStation source, int sideID, double shiftDirection) {