Search in sources :

Example 26 with SuppressFBWarnings

use of edu.umd.cs.findbugs.annotations.SuppressFBWarnings in project JMRI by JMRI.

the class DefaultConditional method takeActionIfNeeded.

/**
     * Compares action options, and takes action if appropriate
     * <P>
     * Only get here if a change in state has occurred when calculating this
     * Conditional
     */
@SuppressWarnings({ "deprecation", "fallthrough" })
@SuppressFBWarnings(value = "SF_SWITCH_FALLTHROUGH")
private // have to apply to more than 500 lines of code - jake
void takeActionIfNeeded() {
    if (log.isTraceEnabled()) {
        log.trace("takeActionIfNeeded starts for " + getSystemName());
    }
    int actionCount = 0;
    int actionNeeded = 0;
    int act = 0;
    int state = 0;
    ArrayList<String> errorList = new ArrayList<>();
    // Use a local copy of state to guarantee the entire list of actions will be fired off
    // before a state change occurs that may block their completion.
    int currentState = _currentState;
    for (int i = 0; i < _actionList.size(); i++) {
        ConditionalAction action = _actionList.get(i);
        int neededAction = actionNeeded;
        int option = action.getOption();
        if (log.isTraceEnabled()) {
            log.trace(" takeActionIfNeeded considers action " + i + " with currentState: " + currentState + " and option: " + option);
        }
        if (((currentState == TRUE) && (option == ACTION_OPTION_ON_CHANGE_TO_TRUE)) || ((currentState == FALSE) && (option == ACTION_OPTION_ON_CHANGE_TO_FALSE)) || (option == ACTION_OPTION_ON_CHANGE)) {
            // need to take this action
            actionNeeded++;
            SignalHead h = null;
            SignalMast f = null;
            Logix x = null;
            Light lgt = null;
            Warrant w = null;
            NamedBean nb = null;
            if (action.getNamedBean() != null) {
                nb = action.getNamedBean().getBean();
            }
            int value = 0;
            Timer timer = null;
            int type = action.getType();
            String devName = getDeviceName(action);
            if (devName == null) {
                errorList.add("invalid memory name in action - " + action);
                continue;
            }
            if (log.isDebugEnabled()) {
                log.debug("getDeviceName()=" + action.getDeviceName() + " devName= " + devName);
            }
            switch(type) {
                case Conditional.ACTION_NONE:
                    break;
                case Conditional.ACTION_SET_TURNOUT:
                    Turnout t = (Turnout) nb;
                    if (t == null) {
                        errorList.add("invalid turnout name in action - " + action.getDeviceName());
                    } else {
                        act = action.getActionData();
                        if (act == Route.TOGGLE) {
                            state = t.getKnownState();
                            if (state == Turnout.CLOSED) {
                                act = Turnout.THROWN;
                            } else {
                                act = Turnout.CLOSED;
                            }
                        }
                        t.setCommandedState(act);
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_RESET_DELAYED_TURNOUT:
                    action.stopTimer();
                // fall through
                case Conditional.ACTION_DELAYED_TURNOUT:
                    if (!action.isTimerActive()) {
                        // Create a timer if one does not exist
                        timer = action.getTimer();
                        if (timer == null) {
                            action.setListener(new TimeTurnout(i));
                            timer = new Timer(2000, action.getListener());
                            timer.setRepeats(true);
                        }
                        // Start the Timer to set the turnout
                        value = getMillisecondValue(action);
                        if (value < 0) {
                            break;
                        }
                        timer.setInitialDelay(value);
                        action.setTimer(timer);
                        action.startTimer();
                        actionCount++;
                    } else {
                        log.warn("timer already active on request to start delayed turnout action - " + devName);
                    }
                    break;
                case Conditional.ACTION_CANCEL_TURNOUT_TIMERS:
                    ConditionalManager cmg = jmri.InstanceManager.getDefault(jmri.ConditionalManager.class);
                    java.util.Iterator<String> iter = cmg.getSystemNameList().iterator();
                    while (iter.hasNext()) {
                        String sname = iter.next();
                        if (sname == null) {
                            errorList.add("Conditional system name null during cancel turnout timers for " + action.getDeviceName());
                        }
                        Conditional c = cmg.getBySystemName(sname);
                        if (c == null) {
                            errorList.add("Conditional null during cancel turnout timers for " + action.getDeviceName());
                        } else {
                            c.cancelTurnoutTimer(devName);
                            actionCount++;
                        }
                    }
                    break;
                case Conditional.ACTION_LOCK_TURNOUT:
                    Turnout tl = (Turnout) nb;
                    if (tl == null) {
                        errorList.add("invalid turnout name in action - " + action.getDeviceName());
                    } else {
                        act = action.getActionData();
                        if (act == Route.TOGGLE) {
                            if (tl.getLocked(Turnout.CABLOCKOUT)) {
                                act = Turnout.UNLOCKED;
                            } else {
                                act = Turnout.LOCKED;
                            }
                        }
                        if (act == Turnout.LOCKED) {
                            tl.setLocked(Turnout.CABLOCKOUT + Turnout.PUSHBUTTONLOCKOUT, true);
                        } else if (act == Turnout.UNLOCKED) {
                            tl.setLocked(Turnout.CABLOCKOUT + Turnout.PUSHBUTTONLOCKOUT, false);
                        }
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_SIGNAL_APPEARANCE:
                    h = (SignalHead) nb;
                    if (h == null) {
                        errorList.add("invalid Signal Head name in action - " + action.getDeviceName());
                    } else {
                        h.setAppearance(action.getActionData());
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_SIGNAL_HELD:
                    h = (SignalHead) nb;
                    if (h == null) {
                        errorList.add("invalid Signal Head name in action - " + action.getDeviceName());
                    } else {
                        h.setHeld(true);
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_CLEAR_SIGNAL_HELD:
                    h = (SignalHead) nb;
                    if (h == null) {
                        errorList.add("invalid Signal Head name in action - " + action.getDeviceName());
                    } else {
                        h.setHeld(false);
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_SIGNAL_DARK:
                    h = (SignalHead) nb;
                    if (h == null) {
                        errorList.add("invalid Signal Head name in action - " + action.getDeviceName());
                    } else {
                        h.setLit(false);
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_SIGNAL_LIT:
                    h = (SignalHead) nb;
                    if (h == null) {
                        errorList.add("invalid Signal Head name in action - " + action.getDeviceName());
                    } else {
                        h.setLit(true);
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_TRIGGER_ROUTE:
                    Route r = (Route) nb;
                    if (r == null) {
                        errorList.add("invalid Route name in action - " + action.getDeviceName());
                    } else {
                        r.setRoute();
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_SENSOR:
                    Sensor sn = (Sensor) nb;
                    if (sn == null) {
                        errorList.add("invalid Sensor name in action - " + action.getDeviceName());
                    } else {
                        act = action.getActionData();
                        if (act == Route.TOGGLE) {
                            state = sn.getState();
                            if (state == Sensor.ACTIVE) {
                                act = Sensor.INACTIVE;
                            } else {
                                act = Sensor.ACTIVE;
                            }
                        }
                        try {
                            sn.setKnownState(act);
                            actionCount++;
                        } catch (JmriException e) {
                            log.warn("Exception setting Sensor " + devName + " in action");
                        }
                    }
                    break;
                case Conditional.ACTION_RESET_DELAYED_SENSOR:
                    action.stopTimer();
                // fall through
                case Conditional.ACTION_DELAYED_SENSOR:
                    if (!action.isTimerActive()) {
                        // Create a timer if one does not exist
                        timer = action.getTimer();
                        if (timer == null) {
                            action.setListener(new TimeSensor(i));
                            timer = new Timer(2000, action.getListener());
                            timer.setRepeats(true);
                        }
                        // Start the Timer to set the turnout
                        value = getMillisecondValue(action);
                        if (value < 0) {
                            break;
                        }
                        timer.setInitialDelay(value);
                        action.setTimer(timer);
                        action.startTimer();
                        actionCount++;
                    } else {
                        log.warn("timer already active on request to start delayed sensor action - " + devName);
                    }
                    break;
                case Conditional.ACTION_CANCEL_SENSOR_TIMERS:
                    ConditionalManager cm = jmri.InstanceManager.getDefault(jmri.ConditionalManager.class);
                    java.util.Iterator<String> itr = cm.getSystemNameList().iterator();
                    while (itr.hasNext()) {
                        String sname = itr.next();
                        if (sname == null) {
                            errorList.add("Conditional system name null during cancel sensor timers for " + action.getDeviceName());
                        }
                        Conditional c = cm.getBySystemName(sname);
                        if (c == null) {
                            errorList.add("Conditional null during cancel sensor timers for " + action.getDeviceName());
                        } else {
                            c.cancelSensorTimer(devName);
                            actionCount++;
                        }
                    }
                    break;
                case Conditional.ACTION_SET_LIGHT:
                    lgt = (Light) nb;
                    if (lgt == null) {
                        errorList.add("invalid light name in action - " + action.getDeviceName());
                    } else {
                        act = action.getActionData();
                        if (act == Route.TOGGLE) {
                            state = lgt.getState();
                            if (state == Light.ON) {
                                act = Light.OFF;
                            } else {
                                act = Light.ON;
                            }
                        }
                        lgt.setState(act);
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_LIGHT_INTENSITY:
                    lgt = (Light) nb;
                    if (lgt == null) {
                        errorList.add("invalid light name in action - " + action.getDeviceName());
                    } else {
                        try {
                            value = getIntegerValue(action);
                            if (value < 0) {
                                break;
                            }
                            lgt.setTargetIntensity((value) / 100.0);
                            actionCount++;
                        } catch (IllegalArgumentException e) {
                            errorList.add("Exception in set light intensity action - " + action.getDeviceName());
                        }
                    }
                    break;
                case Conditional.ACTION_SET_LIGHT_TRANSITION_TIME:
                    lgt = (Light) nb;
                    if (lgt == null) {
                        errorList.add("invalid light name in action - " + action.getDeviceName());
                    } else {
                        try {
                            value = getIntegerValue(action);
                            if (value < 0) {
                                break;
                            }
                            lgt.setTransitionTime(value);
                            actionCount++;
                        } catch (IllegalArgumentException e) {
                            errorList.add("Exception in set light transition time action - " + action.getDeviceName());
                        }
                    }
                    break;
                case Conditional.ACTION_SET_MEMORY:
                    Memory m = (Memory) nb;
                    if (m == null) {
                        errorList.add("invalid memory name in action - " + action.getDeviceName());
                    } else {
                        m.setValue(action.getActionString());
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_COPY_MEMORY:
                    Memory mFrom = (Memory) nb;
                    if (mFrom == null) {
                        errorList.add("invalid memory name in action - " + action.getDeviceName());
                    } else {
                        Memory mTo = getMemory(action.getActionString());
                        if (mTo == null) {
                            errorList.add("invalid memory name in action - " + action.getActionString());
                        } else {
                            mTo.setValue(mFrom.getValue());
                            actionCount++;
                        }
                    }
                    break;
                case Conditional.ACTION_ENABLE_LOGIX:
                    x = InstanceManager.getDefault(jmri.LogixManager.class).getLogix(devName);
                    if (x == null) {
                        errorList.add("invalid logix name in action - " + action.getDeviceName());
                    } else {
                        x.setEnabled(true);
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_DISABLE_LOGIX:
                    x = InstanceManager.getDefault(jmri.LogixManager.class).getLogix(devName);
                    if (x == null) {
                        errorList.add("invalid logix name in action - " + action.getDeviceName());
                    } else {
                        x.setEnabled(false);
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_PLAY_SOUND:
                    String path = getActionString(action);
                    if (!path.equals("")) {
                        Sound sound = action.getSound();
                        if (sound == null) {
                            try {
                                sound = new Sound(path);
                            } catch (NullPointerException ex) {
                                errorList.add("invalid path to sound: " + path);
                            }
                        }
                        if (sound != null) {
                            sound.play();
                        }
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_RUN_SCRIPT:
                    if (!(getActionString(action).equals(""))) {
                        JmriScriptEngineManager.getDefault().runScript(new File(jmri.util.FileUtil.getExternalFilename(getActionString(action))));
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_FAST_CLOCK_TIME:
                    Date date = InstanceManager.getDefault(jmri.Timebase.class).getTime();
                    date.setHours(action.getActionData() / 60);
                    date.setMinutes(action.getActionData() - ((action.getActionData() / 60) * 60));
                    date.setSeconds(0);
                    InstanceManager.getDefault(jmri.Timebase.class).userSetTime(date);
                    actionCount++;
                    break;
                case Conditional.ACTION_START_FAST_CLOCK:
                    InstanceManager.getDefault(jmri.Timebase.class).setRun(true);
                    actionCount++;
                    break;
                case Conditional.ACTION_STOP_FAST_CLOCK:
                    InstanceManager.getDefault(jmri.Timebase.class).setRun(false);
                    actionCount++;
                    break;
                case Conditional.ACTION_CONTROL_AUDIO:
                    Audio audio = InstanceManager.getDefault(jmri.AudioManager.class).getAudio(devName);
                    if (audio.getSubType() == Audio.SOURCE) {
                        AudioSource audioSource = (AudioSource) audio;
                        switch(action.getActionData()) {
                            case Audio.CMD_PLAY:
                                audioSource.play();
                                break;
                            case Audio.CMD_STOP:
                                audioSource.stop();
                                break;
                            case Audio.CMD_PLAY_TOGGLE:
                                audioSource.togglePlay();
                                break;
                            case Audio.CMD_PAUSE:
                                audioSource.pause();
                                break;
                            case Audio.CMD_RESUME:
                                audioSource.resume();
                                break;
                            case Audio.CMD_PAUSE_TOGGLE:
                                audioSource.togglePause();
                                break;
                            case Audio.CMD_REWIND:
                                audioSource.rewind();
                                break;
                            case Audio.CMD_FADE_IN:
                                audioSource.fadeIn();
                                break;
                            case Audio.CMD_FADE_OUT:
                                audioSource.fadeOut();
                                break;
                            case Audio.CMD_RESET_POSITION:
                                audioSource.resetCurrentPosition();
                                break;
                            default:
                                break;
                        }
                    } else if (audio.getSubType() == Audio.LISTENER) {
                        AudioListener audioListener = (AudioListener) audio;
                        switch(action.getActionData()) {
                            case Audio.CMD_RESET_POSITION:
                                audioListener.resetCurrentPosition();
                                break;
                            default:
                                // nothing needed for others
                                break;
                        }
                    }
                    break;
                case Conditional.ACTION_JYTHON_COMMAND:
                    if (!(getActionString(action).isEmpty())) {
                        // add the text to the output frame
                        ScriptOutput.writeScript(getActionString(action));
                        // and execute
                        try {
                            JmriScriptEngineManager.getDefault().eval(getActionString(action), JmriScriptEngineManager.getDefault().getEngine(JmriScriptEngineManager.PYTHON));
                        } catch (ScriptException ex) {
                            log.error("Error executing script:", ex);
                        }
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_ALLOCATE_WARRANT_ROUTE:
                    w = (Warrant) nb;
                    if (w == null) {
                        errorList.add("invalid Warrant name in action - " + action.getDeviceName());
                    } else {
                        String msg = w.allocateRoute(null);
                        if (msg != null) {
                            log.info("Warrant " + action.getDeviceName() + " - " + msg);
                        }
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_DEALLOCATE_WARRANT_ROUTE:
                    w = (Warrant) nb;
                    if (w == null) {
                        errorList.add("invalid Warrant name in action - " + action.getDeviceName());
                    } else {
                        w.deAllocate();
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_ROUTE_TURNOUTS:
                    w = (Warrant) nb;
                    if (w == null) {
                        errorList.add("invalid Warrant name in action - " + action.getDeviceName());
                    } else {
                        String msg = w.setRoute(0, null);
                        if (msg != null) {
                            log.info("Warrant " + action.getDeviceName() + " unable to Set Route - " + msg);
                        }
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_THROTTLE_FACTOR:
                    log.info("Set warrant Throttle Factor deprecated - Use Warrrant Preferences");
                    break;
                case Conditional.ACTION_SET_TRAIN_ID:
                    w = (Warrant) nb;
                    if (w == null) {
                        errorList.add("invalid Warrant name in action - " + action.getDeviceName());
                    } else {
                        if (!w.setTrainId(getActionString(action))) {
                            String s = "Unable to find train Id " + getActionString(action) + " in Roster  - " + action.getDeviceName();
                            log.info(s);
                            // could be serious - display error to UI
                            errorList.add(s);
                        }
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_TRAIN_NAME:
                    w = (Warrant) nb;
                    if (w == null) {
                        errorList.add("invalid Warrant name in action - " + action.getDeviceName());
                    } else {
                        w.setTrainName(getActionString(action));
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_AUTO_RUN_WARRANT:
                    w = (Warrant) nb;
                    if (w == null) {
                        errorList.add("invalid Warrant name in action - " + action.getDeviceName());
                    } else {
                        jmri.jmrit.logix.WarrantTableFrame frame = jmri.jmrit.logix.WarrantTableFrame.getDefault();
                        String err = frame.runTrain(w, Warrant.MODE_RUN);
                        if (err != null) {
                            w.stopWarrant(true);
                        }
                        if (err != null) {
                            errorList.add("runAutoTrain error - " + err);
                            w.stopWarrant(true);
                        }
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_MANUAL_RUN_WARRANT:
                    w = (Warrant) nb;
                    if (w == null) {
                        errorList.add("invalid Warrant name in action - " + action.getDeviceName());
                    } else {
                        String err = w.setRoute(0, null);
                        if (err == null) {
                            err = w.setRunMode(Warrant.MODE_MANUAL, null, null, null, false);
                        }
                        if (err != null) {
                            errorList.add("runManualTrain error - " + err);
                        }
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_CONTROL_TRAIN:
                    w = (Warrant) nb;
                    if (w == null) {
                        errorList.add("invalid Warrant name in action - " + action.getDeviceName());
                    } else {
                        if (!w.controlRunTrain(action.getActionData())) {
                            log.info("Train " + w.getTrainId() + " not running  - " + devName);
                        }
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_SIGNALMAST_ASPECT:
                    f = (SignalMast) nb;
                    if (f == null) {
                        errorList.add("invalid Signal Mast name in action - " + action.getDeviceName());
                    } else {
                        f.setAspect(getActionString(action));
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_SIGNALMAST_HELD:
                    f = (SignalMast) nb;
                    if (f == null) {
                        errorList.add("invalid Signal Mast name in action - " + action.getDeviceName());
                    } else {
                        f.setHeld(true);
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_CLEAR_SIGNALMAST_HELD:
                    f = (SignalMast) nb;
                    if (f == null) {
                        errorList.add("invalid Signal Mast name in action - " + action.getDeviceName());
                    } else {
                        f.setHeld(false);
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_SIGNALMAST_DARK:
                    f = (SignalMast) nb;
                    if (f == null) {
                        errorList.add("invalid Signal Head name in action - " + action.getDeviceName());
                    } else {
                        f.setLit(false);
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_SIGNALMAST_LIT:
                    f = (SignalMast) nb;
                    if (f == null) {
                        errorList.add("invalid Signal Head name in action - " + action.getDeviceName());
                    } else {
                        f.setLit(true);
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_BLOCK_VALUE:
                    OBlock b = (OBlock) nb;
                    if (b == null) {
                        errorList.add("invalid Block name in action - " + action.getDeviceName());
                    } else {
                        b.setValue(getActionString(action));
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_SET_BLOCK_ERROR:
                    b = (OBlock) nb;
                    if (b == null) {
                        errorList.add("invalid Block name in action - " + action.getDeviceName());
                    } else {
                        b.setError(true);
                        actionCount++;
                    }
                    break;
                case Conditional.ACTION_CLEAR_BLOCK_ERROR:
                    b = (OBlock) nb;
                    if (b == null) {
                        errorList.add("invalid Block name in action - " + action.getDeviceName());
                    } else {
                        b.setError(false);
                    }
                    break;
                case ACTION_DEALLOCATE_BLOCK:
                    b = (OBlock) nb;
                    if (b == null) {
                        errorList.add("invalid Block name in action - " + action.getDeviceName());
                    } else {
                        b.deAllocate(null);
                        actionCount++;
                    }
                    break;
                case ACTION_SET_BLOCK_OUT_OF_SERVICE:
                    b = (OBlock) nb;
                    if (b == null) {
                        errorList.add("invalid Block name in action - " + action.getDeviceName());
                    } else {
                        b.setOutOfService(true);
                        actionCount++;
                    }
                    break;
                case ACTION_SET_BLOCK_IN_SERVICE:
                    b = (OBlock) nb;
                    if (b == null) {
                        errorList.add("invalid Block name in action - " + action.getDeviceName());
                    } else {
                        b.setOutOfService(false);
                        actionCount++;
                    }
                    break;
                default:
                    log.warn("takeActionIfNeeded drops through switch statement for action " + i + " of " + getSystemName());
                    break;
            }
        }
        if (PARKS_DEBUG) {
            System.out.println("Global state= " + _currentState + " Local state= " + currentState + " - Action " + (actionNeeded > neededAction ? "WAS" : "NOT") + " taken for action = " + action.getTypeString() + " " + action.getActionString() + " for device " + action.getDeviceName());
        }
    }
    if (errorList.size() > 0) {
        for (int i = 0; i < errorList.size(); i++) {
            log.error(getDisplayName() + " - " + errorList.get(i));
        }
        if (!GraphicsEnvironment.isHeadless()) {
            java.awt.Toolkit.getDefaultToolkit().beep();
            if (!_skipErrorDialog) {
                new ErrorDialog(errorList, this);
            }
        }
    }
    if (log.isDebugEnabled()) {
        log.debug("Conditional \"" + getUserName() + "\" (" + getSystemName() + " has " + _actionList.size() + " actions and has executed " + actionCount + " actions of " + actionNeeded + " actions needed on state change to " + currentState);
    }
    if (PARKS_DEBUG) {
        System.out.println("Conditional \"" + getUserName() + "\" (" + getSystemName() + " has " + _actionList.size() + " actions and has executed " + actionCount + " actions of " + actionNeeded + " actions needed on state change to " + currentState);
    }
}
Also used : Warrant(jmri.jmrit.logix.Warrant) NamedBean(jmri.NamedBean) Memory(jmri.Memory) ArrayList(java.util.ArrayList) SignalHead(jmri.SignalHead) Conditional(jmri.Conditional) ScriptException(javax.script.ScriptException) ConditionalAction(jmri.ConditionalAction) Light(jmri.Light) SignalMast(jmri.SignalMast) OBlock(jmri.jmrit.logix.OBlock) Route(jmri.Route) AudioListener(jmri.jmrit.audio.AudioListener) JmriException(jmri.JmriException) Sound(jmri.jmrit.Sound) Date(java.util.Date) AudioSource(jmri.jmrit.audio.AudioSource) Logix(jmri.Logix) Timer(javax.swing.Timer) ConditionalManager(jmri.ConditionalManager) Audio(jmri.Audio) Turnout(jmri.Turnout) File(java.io.File) Sensor(jmri.Sensor) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings)

Example 27 with SuppressFBWarnings

use of edu.umd.cs.findbugs.annotations.SuppressFBWarnings in project JMRI by JMRI.

the class MemoryFrameAction method actionPerformed.

@Override
public void actionPerformed(ActionEvent e) {
    nf = java.text.NumberFormat.getInstance();
    nf.setMinimumFractionDigits(3);
    nf.setMaximumFractionDigits(3);
    nf.setGroupingUsed(false);
    JmriJFrame f = new JmriJFrame(Bundle.getMessage("Memory_Usage_Monitor"));
    Container p = f.getContentPane();
    p.setLayout(new GridLayout(5, 3));
    p.add(new JLabel(Bundle.getMessage("used_(MB)")));
    p.add(new JLabel(Bundle.getMessage("free_(MB)")));
    p.add(new JLabel(Bundle.getMessage("total_(MB,_of_") + " " + nf.format(Runtime.getRuntime().maxMemory() / (1024. * 1024.)) + "MB)"));
    p.add(used3);
    p.add(free3);
    p.add(total3);
    p.add(used2);
    p.add(free2);
    p.add(total2);
    p.add(used1);
    p.add(free1);
    p.add(total1);
    p.add(updateButton);
    p.add(gcButton);
    p.add(testButton);
    updateButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent event) {
            updateDisplay();
        }
    });
    gcButton.addActionListener(new ActionListener() {

        // Garbage collection OK here
        @SuppressFBWarnings(value = "DM_GC")
        @Override
        public void actionPerformed(ActionEvent event) {
            Runtime.getRuntime().gc();
            updateDisplay();
        }
    });
    testButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent event) {
            Roster.getDefault();
            DecoderIndexFile.instance();
            updateDisplay();
        }
    });
    f.addHelpMenu("package.jmri.jmrit.MemoryFrameAction", true);
    f.pack();
    f.setVisible(true);
}
Also used : Container(java.awt.Container) GridLayout(java.awt.GridLayout) ActionListener(java.awt.event.ActionListener) JmriJFrame(jmri.util.JmriJFrame) ActionEvent(java.awt.event.ActionEvent) JLabel(javax.swing.JLabel) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings)

Example 28 with SuppressFBWarnings

use of edu.umd.cs.findbugs.annotations.SuppressFBWarnings in project JMRI by JMRI.

the class AutoTrainAction method executeAction.

// this method is called to execute the action, when the "When" event has happened.
// it is "public" because it may be called from a TransitSectionAction.
// djd debugging - need to check this out - probably useless, but harmless
@SuppressFBWarnings(value = "SWL_SLEEP_WITH_LOCK_HELD", justification = "used only by thread that can be stopped, no conflict with other threads expected")
public synchronized void executeAction(TransitSectionAction tsa) {
    if (tsa == null) {
        log.error("executeAction called with null TransitSectionAction");
        return;
    }
    Sensor s = null;
    float temp = 0.0f;
    switch(tsa.getWhatCode()) {
        case TransitSectionAction.PAUSE:
            // pause for a number of fast minutes--e.g. station stop
            if (_autoActiveTrain.getCurrentAllocatedSection().getNextSection() != null) {
                // pause train if this is not the last Section
                Thread tPause = _autoActiveTrain.pauseTrain(tsa.getDataWhat1());
                tsa.setWaitingThread(tPause);
            }
            break;
        case TransitSectionAction.SETMAXSPEED:
            // set maximum train speed to value
            temp = tsa.getDataWhat1();
            _autoActiveTrain.setMaxSpeed(temp * 0.01f);
            completedAction(tsa);
            break;
        case TransitSectionAction.SETCURRENTSPEED:
            // set current speed either higher or lower than current value
            temp = tsa.getDataWhat1();
            float spd = temp * 0.01f;
            if (spd > _autoActiveTrain.getMaxSpeed()) {
                spd = _autoActiveTrain.getMaxSpeed();
            }
            _autoActiveTrain.setTargetSpeed(spd * _autoActiveTrain.getSpeedFactor());
            if ((_autoActiveTrain.getRampRate() != AutoActiveTrain.RAMP_NONE) && (_autoActiveTrain.getAutoEngineer() != null)) {
                // temporarily turn ramping off
                _autoActiveTrain.setCurrentRampRate(AutoActiveTrain.RAMP_NONE);
                // wait for train to achieve speed in a separate thread which will complete action
                Runnable monTrainSpeed = new MonitorTrainSpeed(tsa);
                Thread tMonTrainSpeed = new Thread(monTrainSpeed);
                tsa.setWaitingThread(tMonTrainSpeed);
                tMonTrainSpeed.start();
            } else {
                completedAction(tsa);
            }
            break;
        case TransitSectionAction.RAMPTRAINSPEED:
            // set current speed to target using specified ramp rate
            temp = tsa.getDataWhat1();
            float spdx = temp * 0.01f;
            if (spdx > _autoActiveTrain.getMaxSpeed()) {
                spdx = _autoActiveTrain.getMaxSpeed();
            }
            _autoActiveTrain.setTargetSpeed(spdx * _autoActiveTrain.getSpeedFactor());
            completedAction(tsa);
            break;
        case TransitSectionAction.TOMANUALMODE:
            // drop out of automated mode and allow manual throttle control
            _autoActiveTrain.initiateWorking();
            if ((tsa.getStringWhat() != null) && (!tsa.getStringWhat().equals(""))) {
                // optional Done sensor was provided, listen to it
                listenToDoneSensor(tsa);
            }
            completedAction(tsa);
            break;
        case TransitSectionAction.SETLIGHT:
            // set light on or off
            if (_autoActiveTrain.getAutoEngineer() != null) {
                log.debug("{}: setting light (F0) to {}", _activeTrain.getTrainName(), tsa.getStringWhat());
                if (tsa.getStringWhat().equals("On")) {
                    _autoActiveTrain.getAutoEngineer().setFunction(0, true);
                } else if (tsa.getStringWhat().equals("Off")) {
                    _autoActiveTrain.getAutoEngineer().setFunction(0, false);
                } else {
                    log.error("Incorrect Light ON/OFF setting *" + tsa.getStringWhat() + "*");
                }
            }
            completedAction(tsa);
            break;
        case TransitSectionAction.STARTBELL:
            // start bell (only works with sound decoder)
            if (_autoActiveTrain.getSoundDecoder() && (_autoActiveTrain.getAutoEngineer() != null)) {
                log.debug("{}: starting bell (F1)", _activeTrain.getTrainName());
                _autoActiveTrain.getAutoEngineer().setFunction(1, true);
            }
            completedAction(tsa);
            break;
        case TransitSectionAction.STOPBELL:
            // stop bell (only works with sound decoder)
            if (_autoActiveTrain.getSoundDecoder() && (_autoActiveTrain.getAutoEngineer() != null)) {
                log.debug("{}: stopping bell (F1)", _activeTrain.getTrainName());
                _autoActiveTrain.getAutoEngineer().setFunction(1, false);
            }
            completedAction(tsa);
            break;
        case TransitSectionAction.SOUNDHORN:
        // sound horn for specified number of milliseconds - done in separate thread
        case TransitSectionAction.SOUNDHORNPATTERN:
            // sound horn according to specified pattern - done in separate thread
            if (_autoActiveTrain.getSoundDecoder()) {
                log.debug("{}: sounding horn as specified in action", _activeTrain.getTrainName());
                Runnable rHorn = new HornExecution(tsa);
                Thread tHorn = new Thread(rHorn);
                tsa.setWaitingThread(tHorn);
                tHorn.start();
            } else {
                completedAction(tsa);
            }
            break;
        case TransitSectionAction.LOCOFUNCTION:
            // execute the specified decoder function
            if (_autoActiveTrain.getAutoEngineer() != null) {
                log.debug("{}: setting function {} to {}", _activeTrain.getTrainName(), tsa.getDataWhat1(), tsa.getStringWhat());
                int fun = tsa.getDataWhat1();
                if (tsa.getStringWhat().equals("On")) {
                    _autoActiveTrain.getAutoEngineer().setFunction(fun, true);
                } else if (tsa.getStringWhat().equals("Off")) {
                    _autoActiveTrain.getAutoEngineer().setFunction(fun, false);
                }
            }
            completedAction(tsa);
            break;
        case TransitSectionAction.SETSENSORACTIVE:
            // set specified sensor active
            s = InstanceManager.sensorManagerInstance().getSensor(tsa.getStringWhat());
            if (s != null) {
                // if sensor is already active, set it to inactive first
                if (s.getKnownState() == Sensor.ACTIVE) {
                    try {
                        s.setState(Sensor.INACTIVE);
                    } catch (jmri.JmriException reason) {
                        log.error("Exception when toggling Sensor " + tsa.getStringWhat() + " Inactive - " + reason);
                    }
                }
                try {
                    s.setState(Sensor.ACTIVE);
                } catch (jmri.JmriException reason) {
                    log.error("Exception when setting Sensor " + tsa.getStringWhat() + " Active - " + reason);
                }
            } else if ((tsa.getStringWhat() != null) && (!tsa.getStringWhat().equals(""))) {
                log.error("Could not find Sensor " + tsa.getStringWhat());
            } else {
                log.error("Sensor not specified for Action");
            }
            break;
        case TransitSectionAction.SETSENSORINACTIVE:
            // set specified sensor inactive
            s = InstanceManager.sensorManagerInstance().getSensor(tsa.getStringWhat());
            if (s != null) {
                if (s.getKnownState() == Sensor.ACTIVE) {
                    try {
                        s.setState(Sensor.ACTIVE);
                    } catch (jmri.JmriException reason) {
                        log.error("Exception when toggling Sensor " + tsa.getStringWhat() + " Active - " + reason);
                    }
                }
                try {
                    s.setState(Sensor.INACTIVE);
                } catch (jmri.JmriException reason) {
                    log.error("Exception when setting Sensor " + tsa.getStringWhat() + " Inactive - " + reason);
                }
            } else if ((tsa.getStringWhat() != null) && (!tsa.getStringWhat().equals(""))) {
                log.error("Could not find Sensor " + tsa.getStringWhat());
            } else {
                log.error("Sensor not specified for Action");
            }
            break;
        case TransitSectionAction.HOLDSIGNAL:
            // set specified signalhead or signalmast to HELD
            SignalMast sm = null;
            SignalHead sh = null;
            String sName = tsa.getStringWhat();
            sm = InstanceManager.getDefault(SignalMastManager.class).getSignalMast(sName);
            if (sm == null) {
                sh = InstanceManager.getDefault(SignalHeadManager.class).getSignalHead(sName);
                if (sh == null) {
                    log.error("{}: Could not find SignalMast or SignalHead named '{}'", _activeTrain.getTrainName(), sName);
                } else {
                    log.debug("{}: setting signalHead '{}' to HELD", _activeTrain.getTrainName(), sName);
                    sh.setHeld(true);
                }
            } else {
                log.debug("{}: setting signalMast '{}' to HELD", _activeTrain.getTrainName(), sName);
                sm.setHeld(true);
            }
            break;
        case TransitSectionAction.RELEASESIGNAL:
            // set specified signalhead or signalmast to NOT HELD
            sm = null;
            sh = null;
            sName = tsa.getStringWhat();
            sm = InstanceManager.getDefault(SignalMastManager.class).getSignalMast(sName);
            if (sm == null) {
                sh = InstanceManager.getDefault(SignalHeadManager.class).getSignalHead(sName);
                if (sh == null) {
                    log.error("{}: Could not find SignalMast or SignalHead named '{}'", _activeTrain.getTrainName(), sName);
                } else {
                    log.debug("{}: setting signalHead '{}' to NOT HELD", _activeTrain.getTrainName(), sName);
                    sh.setHeld(false);
                }
            } else {
                log.debug("{}: setting signalMast '{}' to NOT HELD", _activeTrain.getTrainName(), sName);
                sm.setHeld(false);
            }
            break;
        default:
            log.error("illegal What code - " + tsa.getWhatCode() + " - in call to executeAction");
            break;
    }
}
Also used : SignalMast(jmri.SignalMast) SignalHead(jmri.SignalHead) Sensor(jmri.Sensor) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings)

Example 29 with SuppressFBWarnings

use of edu.umd.cs.findbugs.annotations.SuppressFBWarnings in project JMRI by JMRI.

the class AnalogClock2Display method addRateMenuEntry.

@SuppressFBWarnings(value = "FE_FLOATING_POINT_EQUALITY", justification = "fixed number of possible values")
void addRateMenuEntry(JMenu menu, final int newrate) {
    JRadioButtonMenuItem button = new JRadioButtonMenuItem("" + newrate + ":1");
    button.addActionListener(new ActionListener() {

        final int r = newrate;

        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                clock.userSetRate(r);
                rate = r;
            } catch (TimebaseRateException t) {
                log.error("TimebaseRateException for rate= " + r + ". " + t);
            }
        }
    });
    rateButtonGroup.add(button);
    // next line is the FE_FLOATING_POINT_EQUALITY annotated above
    if (rate == newrate) {
        button.setSelected(true);
    } else {
        button.setSelected(false);
    }
    menu.add(button);
}
Also used : ActionListener(java.awt.event.ActionListener) ActionEvent(java.awt.event.ActionEvent) JRadioButtonMenuItem(javax.swing.JRadioButtonMenuItem) TimebaseRateException(jmri.TimebaseRateException) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings)

Example 30 with SuppressFBWarnings

use of edu.umd.cs.findbugs.annotations.SuppressFBWarnings in project JMRI by JMRI.

the class WarrantTableAction method sharedTO.

@SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST_OF_RETURN_VALUE", justification = "OBlock extends Block")
private static boolean sharedTO(OPath myPath, OPath path) {
    List<BeanSetting> myTOs = myPath.getSettings();
    Iterator<BeanSetting> iter = myTOs.iterator();
    List<BeanSetting> tos = path.getSettings();
    boolean ret = false;
    while (iter.hasNext()) {
        BeanSetting mySet = iter.next();
        NamedBean myTO = mySet.getBean();
        int myState = mySet.getSetting();
        Iterator<BeanSetting> it = tos.iterator();
        while (it.hasNext()) {
            BeanSetting set = it.next();
            NamedBean to = set.getBean();
            if (myTO.equals(to)) {
                // turnouts are equal.  check if settings are compatible.
                OBlock myBlock = (OBlock) myPath.getBlock();
                int state = set.getSetting();
                OBlock block = (OBlock) path.getBlock();
                //                  String note = "WARNING: ";
                if (myState != state) {
                    ret = myBlock.addSharedTurnout(myPath, block, path);
                /*                       _textArea.append(note+Bundle.getMessage("sharedTurnout", myPath.getName(), myBlock.getDisplayName(),
                             myTO.getDisplayName(), (myState==jmri.Turnout.CLOSED ? "Closed":"Thrown"),
                             path.getName(), block.getDisplayName(), to.getDisplayName(),
                             (state==jmri.Turnout.CLOSED ? "Closed":"Thrown")));
                      _textArea.append("\n");
                    } else {
                        note = "Note: "; */
                }
            }
        }
    }
    return ret;
}
Also used : NamedBean(jmri.NamedBean) BeanSetting(jmri.BeanSetting) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings)

Aggregations

SuppressFBWarnings (edu.umd.cs.findbugs.annotations.SuppressFBWarnings)142 IOException (java.io.IOException)23 File (java.io.File)22 ArrayList (java.util.ArrayList)20 JPanel (javax.swing.JPanel)14 RollingStock (jmri.jmrit.operations.rollingstock.RollingStock)13 ScriptException (org.jaggeryjs.scriptengine.exceptions.ScriptException)13 FlowLayout (java.awt.FlowLayout)8 BoxLayout (javax.swing.BoxLayout)7 Location (jmri.jmrit.operations.locations.Location)7 Dimension (java.awt.Dimension)5 FileOutputStream (java.io.FileOutputStream)5 Connection (java.sql.Connection)5 PreparedStatement (java.sql.PreparedStatement)5 Iterator (java.util.Iterator)5 JScrollPane (javax.swing.JScrollPane)5 RouteLocation (jmri.jmrit.operations.routes.RouteLocation)5 JsonNode (com.fasterxml.jackson.databind.JsonNode)4 List (java.util.List)4 Entry (java.util.Map.Entry)4