private void checkRailPosition( List<RailState> railStates, SystemState state, List<Integer> nodes) { for (RailState railState : railStates) { Rail rail = railState.getRail(); double setpoint = railState.getRailWidget().getSetpoint(); double position = railState.getRailPosition(); double home = rail.getHomeDistance(); double tol = rail.getTolPlus(); switch (railState.getRailFlag()) { case NOT_HOMED: yellowFlag = true; railState.setColor(GRAY); break; case HOMING: if (position > home - tol && position < home + tol) railState.setRailFlag(Equip.RailFlag.HOMED); yellowFlag = true; railState.setColor(WHITE); break; case HOMED: yellowFlag = true; railState.setColor(WHITE); break; case SEEKING: if (position > setpoint - tol && position < setpoint + tol) railState.setRailFlag(Equip.RailFlag.ACTIVE); yellowFlag = true; railState.setColor(WHITE); break; case ACTIVE: railState.setColor(GREEN); if (position < setpoint - tol || position > setpoint + tol) { yellowFlag = true; if (railState.getColor().equals(GREEN)) { railState.setColor(YELLOW); if (state.equals(SystemState.SYSTEM_STATE_RUN)) { CanComm.sendSystemState( SystemState.SYSTEM_STATE_RUN_PAUSE, Can.OpId.OPER_SET.ordinal(), nodes); CanComm.setLightTower(Equip.LightTowerState.WARNING.getTower()); log.error("Rail out of tolerance (warning) band..."); } } } break; default: break; } } }