public void testAddListener() { t.addPropertyChangeListener(new Listen()); listenerResult = false; t.setUserName("user id"); Assert.assertTrue("listener invoked by setUserName", listenerResult); listenerResult = false; t.setCommandedState(Turnout.CLOSED); Assert.assertTrue("listener invoked by setCommandedState", listenerResult); }
public void testRemoveListener() { Listen ln = new Listen(); t.addPropertyChangeListener(ln); t.removePropertyChangeListener(ln); listenerResult = false; t.setUserName("user id"); Assert.assertTrue( "listener should not have heard message after removeListner", !listenerResult); }
/** * 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()); } } }