protected void twoSensorChanged(java.beans.PropertyChangeEvent e) { if (!_parentLight.getEnabled()) { return; // ignore property change if user disabled Light } if (e.getPropertyName().equals("KnownState")) { int kState = _namedControlSensor.getBean().getKnownState(); int kState2 = _namedControlSensor2.getBean().getKnownState(); if (_controlSensorSense == Sensor.ACTIVE) { if ((kState == Sensor.ACTIVE) || (kState2 == Sensor.ACTIVE)) { // Turn light on _parentLight.setState(Light.ON); } else { // Turn light off _parentLight.setState(Light.OFF); } } else if (_controlSensorSense == Sensor.INACTIVE) { if ((kState == Sensor.INACTIVE) || (kState2 == Sensor.INACTIVE)) { // Turn light on _parentLight.setState(Light.ON); } else { // Turn light off _parentLight.setState(Light.OFF); } } } }
/** * Deactivates a LightControl by control type. This method tests the control type, and deactivates * the control mechanism, appropriate for the control type. */ public void deactivateLightControl() { // skip if Light Control is not active if (_active) { // deactivate according to control type switch (_controlType) { case Light.SENSOR_CONTROL: if (_sensorListener != null) { _namedControlSensor.getBean().removePropertyChangeListener(_sensorListener); _sensorListener = null; } break; case Light.FAST_CLOCK_CONTROL: if ((_clock != null) && (_timebaseListener != null)) { _clock.removeMinuteChangeListener(_timebaseListener); _timebaseListener = null; } break; case Light.TURNOUT_STATUS_CONTROL: if (_turnoutListener != null) { _controlTurnout.removePropertyChangeListener(_turnoutListener); _turnoutListener = null; } break; case Light.TIMED_ON_CONTROL: if (_timedSensorListener != null) { _namedTimedControlSensor.getBean().removePropertyChangeListener(_timedSensorListener); _timedSensorListener = null; } if (_lightOnTimerActive) { _timedControlTimer.stop(); _lightOnTimerActive = false; } if (_timedControlTimer != null) { if (_timedControlListener != null) { _timedControlTimer.removeActionListener(_timedControlListener); _timedControlListener = null; } _timedControlTimer = null; } break; case Light.TWO_SENSOR_CONTROL: if (_sensorListener != null) { _namedControlSensor.getBean().removePropertyChangeListener(_sensorListener); _sensorListener = null; } if (_sensor2Listener != null) { _namedControlSensor2.getBean().removePropertyChangeListener(_sensor2Listener); _sensor2Listener = null; } break; default: log.warn( "Unexpected control type when activating Light: " + _parentLight.getSystemName()); } _active = false; } }
/** * Activates a Light Control by control type. This method tests the control type, and set up a * control mechanism, appropriate for the control type. */ public void activateLightControl() { // skip if Light Control is already active if (!_active) { // activate according to control type switch (_controlType) { case Light.SENSOR_CONTROL: _namedControlSensor = null; if (_controlSensorName.length() > 0) { Sensor sen = InstanceManager.sensorManagerInstance().provideSensor(_controlSensorName); _namedControlSensor = nbhm.getNamedBeanHandle(_controlSensorName, sen); } if (_namedControlSensor != null) { // if sensor state is currently known, set light accordingly int kState = _namedControlSensor.getBean().getKnownState(); if (kState == Sensor.ACTIVE) { if (_controlSensorSense == Sensor.ACTIVE) { // Turn light on _parentLight.setState(Light.ON); } else { // Turn light off _parentLight.setState(Light.OFF); } } else if (kState == Sensor.INACTIVE) { if (_controlSensorSense == Sensor.INACTIVE) { // Turn light on _parentLight.setState(Light.ON); } else { // Turn light off _parentLight.setState(Light.OFF); } } // listen for change in sensor state _namedControlSensor .getBean() .addPropertyChangeListener( _sensorListener = new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent e) { if (!_parentLight.getEnabled()) { return; // ignore property change if user disabled Light } if (e.getPropertyName().equals("KnownState")) { int now = _namedControlSensor.getBean().getKnownState(); if (now == Sensor.ACTIVE) { if (_controlSensorSense == Sensor.ACTIVE) { // Turn light on _parentLight.setState(Light.ON); } else { // Turn light off _parentLight.setState(Light.OFF); } } else if (now == Sensor.INACTIVE) { if (_controlSensorSense == Sensor.INACTIVE) { // Turn light on _parentLight.setState(Light.ON); } else { // Turn light off _parentLight.setState(Light.OFF); } } } } }, _controlSensorName, "Light Control " + _parentLight.getDisplayName()); _active = true; } else { // control sensor does not exist log.error( "Light " + _parentLight.getSystemName() + " is linked to a Sensor that does not exist: " + _controlSensorName); return; } break; case Light.FAST_CLOCK_CONTROL: if (_clock == null) { _clock = InstanceManager.timebaseInstance(); } // set up time as minutes in a day _timeOn = _fastClockOnHour * 60 + _fastClockOnMin; _timeOff = _fastClockOffHour * 60 + _fastClockOffMin; // initialize light based on current fast time updateClockControlLight(); // set up to listen for time changes on a minute basis _clock.addMinuteChangeListener( _timebaseListener = new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent e) { if (_parentLight.getEnabled()) { // don't change light if not enabled // update control if light is enabled updateClockControlLight(); } } }); _active = true; break; case Light.TURNOUT_STATUS_CONTROL: _controlTurnout = InstanceManager.turnoutManagerInstance().provideTurnout(_controlTurnoutName); if (_controlTurnout != null) { // set light based on current turnout state if known int tState = _controlTurnout.getKnownState(); if (tState == Turnout.CLOSED) { if (_turnoutState == Turnout.CLOSED) { // Turn light on _parentLight.setState(Light.ON); } else { // Turn light off _parentLight.setState(Light.OFF); } } else if (tState == Turnout.THROWN) { if (_turnoutState == Turnout.THROWN) { // Turn light on _parentLight.setState(Light.ON); } else { // Turn light off _parentLight.setState(Light.OFF); } } // listen for change in turnout state _controlTurnout.addPropertyChangeListener( _turnoutListener = new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent e) { if (!_parentLight.getEnabled()) { return; // ignore property change if user disabled light } if (e.getPropertyName().equals("KnownState")) { int now = _controlTurnout.getKnownState(); if (now == Turnout.CLOSED) { if (_turnoutState == Turnout.CLOSED) { // Turn light on _parentLight.setState(Light.ON); } else { // Turn light off _parentLight.setState(Light.OFF); } } else if (now == Turnout.THROWN) { if (_turnoutState == Turnout.THROWN) { // Turn light on _parentLight.setState(Light.ON); } else { // Turn light off _parentLight.setState(Light.OFF); } } } } }); _active = true; } else { // control turnout does not exist log.error( "Light " + _parentLight.getSystemName() + " is linked to a Turnout that does not exist: " + _controlSensorName); return; } break; case Light.TIMED_ON_CONTROL: if (_timedSensorName.length() > 0) { Sensor sen = InstanceManager.sensorManagerInstance().provideSensor(_timedSensorName); _namedTimedControlSensor = nbhm.getNamedBeanHandle(_timedSensorName, sen); } if (_namedTimedControlSensor != null) { // set initial state off _parentLight.setState(Light.OFF); // listen for change in timed control sensor state _namedTimedControlSensor .getBean() .addPropertyChangeListener( _timedSensorListener = new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent e) { if (!_parentLight.getEnabled()) { return; // ignore property change if user disabled light } if (e.getPropertyName().equals("KnownState")) { int now = _namedTimedControlSensor.getBean().getKnownState(); if (!_lightOnTimerActive) { if (now == Sensor.ACTIVE) { // Turn light on _parentLight.setState(Light.ON); // Create a timer if one does not exist if (_timedControlTimer == null) { _timedControlListener = new TimeLight(); _timedControlTimer = new Timer(_timeOnDuration, _timedControlListener); } // Start the Timer to turn the light OFF _lightOnTimerActive = true; _timedControlTimer.start(); } } } } }, _timedSensorName, "Light Control " + _parentLight.getDisplayName()); _active = true; } else { // timed control sensor does not exist log.error( "Light " + _parentLight.getSystemName() + " is linked to a Sensor that does not exist: " + _timedSensorName); return; } break; case Light.TWO_SENSOR_CONTROL: _namedControlSensor = null; _namedControlSensor2 = null; if (_controlSensorName.length() > 0) { Sensor sen = InstanceManager.sensorManagerInstance().provideSensor(_controlSensorName); _namedControlSensor = nbhm.getNamedBeanHandle(_controlSensorName, sen); } if (_controlSensor2Name.length() > 0) { Sensor sen = InstanceManager.sensorManagerInstance().provideSensor(_controlSensor2Name); _namedControlSensor2 = nbhm.getNamedBeanHandle(_controlSensor2Name, sen); } if ((_namedControlSensor != null) && (_namedControlSensor2 != null)) { // if sensor state is currently known, set light accordingly int kState = _namedControlSensor.getBean().getKnownState(); int kState2 = _namedControlSensor2.getBean().getKnownState(); if (_controlSensorSense == Sensor.ACTIVE) { if ((kState == Sensor.ACTIVE) || (kState2 == Sensor.ACTIVE)) { // Turn light on _parentLight.setState(Light.ON); } else { // Turn light off _parentLight.setState(Light.OFF); } } else if (_controlSensorSense == Sensor.INACTIVE) { if ((kState == Sensor.INACTIVE) || (kState2 == Sensor.INACTIVE)) { // Turn light on _parentLight.setState(Light.ON); } else { // Turn light off _parentLight.setState(Light.OFF); } } // listen for change in sensor states _namedControlSensor .getBean() .addPropertyChangeListener( _sensorListener = new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent e) { twoSensorChanged(e); } }, _controlSensorName, "Light Control " + _parentLight.getDisplayName()); _namedControlSensor2 .getBean() .addPropertyChangeListener( _sensor2Listener = new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent e) { twoSensorChanged(e); } }, _controlSensor2Name, "Light Control " + _parentLight.getDisplayName()); _active = true; } else { // at least one control sensor does not exist log.error( "Light " + _parentLight.getSystemName() + " is linked to a Sensor that does not exist: "); return; } break; default: log.warn( "Unexpected control type when activating Light: " + _parentLight.getSystemName()); } } }