/*******************************************************************************
* Copyright (c) 2009 Paul VanderLei, Simon Archer, Jeff McAffer and others. All
* rights reserved. This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0 and Eclipse Distribution License
* v1.0 which accompanies this distribution. The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License
* is available at http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Paul VanderLei, Simon Archer, Jeff McAffer - initial API and implementation
*******************************************************************************/
package org.eclipse.examples.toast.internal.dev.climate.fake;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.examples.toast.dev.climate.IClimateControl;
import org.eclipse.examples.toast.dev.climate.IClimateControlListener;
public class FakeClimateControl implements IClimateControl {
private static final int MAX_TEMPERATURE = 90;
private static final int MIN_TEMPERATURE = 50;
private static final int DEFAULT_TEMPERATURE = 70;
private static final int MAX_FAN_SPEED = 4;
private static final int MIN_FAN_SPEED = 0;
private static final int DEFAULT_FAN_SPEED = 1;
private List listeners;
private int driverTemperature = FakeClimateControl.DEFAULT_TEMPERATURE;
private int passengerTemperature = FakeClimateControl.DEFAULT_TEMPERATURE;
private int driverFanSpeed = FakeClimateControl.DEFAULT_FAN_SPEED;
private int passengerFanSpeed = FakeClimateControl.DEFAULT_FAN_SPEED;
private boolean isAirConditioningOn = false;
private boolean isRecirculationOn = false;
private boolean isRearDefrostOn = false;
private short airFlow = IClimateControl.AIR_FLOW_MIDDLE;
public FakeClimateControl() {
super();
listeners = new ArrayList(2);
}
// ClimateService implementation
public void addListener(IClimateControlListener listener) {
synchronized (listeners) {
listeners.add(listener);
}
}
public void removeListener(IClimateControlListener listener) {
synchronized (listeners) {
listeners.remove(listener);
}
}
// Driver side temperature
public int getMaxTemperature() {
return FakeClimateControl.MAX_TEMPERATURE;
}
public int getMinTemperature() {
return FakeClimateControl.MIN_TEMPERATURE;
}
public void driverTemperatureUp() {
if (driverTemperature < FakeClimateControl.MAX_TEMPERATURE) {
driverTemperature++;
notifyDriverTemperatureChanged();
}
}
public void driverTemperatureDown() {
if (driverTemperature > FakeClimateControl.MIN_TEMPERATURE) {
driverTemperature--;
notifyDriverTemperatureChanged();
}
}
public int getDriverTemperature() {
return driverTemperature;
}
public void setDriverTemperature(int temperature) {
if (temperature != driverTemperature) {
driverTemperature = temperature;
notifyDriverTemperatureChanged();
}
}
// Passenger side temperature
public void passengerTemperatureUp() {
if (passengerTemperature < FakeClimateControl.MAX_TEMPERATURE) {
passengerTemperature++;
notifyPassengerTemperatureChanged();
}
}
public void passengerTemperatureDown() {
if (passengerTemperature > FakeClimateControl.MIN_TEMPERATURE) {
passengerTemperature--;
notifyPassengerTemperatureChanged();
}
}
public int getPassengerTemperature() {
return passengerTemperature;
}
public void setPassengerTemperature(int temperature) {
if (temperature != passengerTemperature) {
passengerTemperature = temperature;
notifyPassengerTemperatureChanged();
}
}
// Fan speed
public int getMaxFanSpeed() {
return FakeClimateControl.MAX_FAN_SPEED;
}
public int getMinFanSpeed() {
return FakeClimateControl.MIN_FAN_SPEED;
}
public void driverFanSpeedUp() {
if (driverFanSpeed < FakeClimateControl.MAX_FAN_SPEED) {
driverFanSpeed++;
notifyDriverFanSpeedChanged();
}
}
public void driverFanSpeedDown() {
if (driverFanSpeed > FakeClimateControl.MIN_FAN_SPEED) {
driverFanSpeed--;
notifyDriverFanSpeedChanged();
}
}
public int getDriverFanSpeed() {
return driverFanSpeed;
}
public void setDriverFanSpeed(int speed) {
if (speed != driverFanSpeed) {
driverFanSpeed = speed;
notifyDriverFanSpeedChanged();
}
}
public void passengerFanSpeedUp() {
if (passengerFanSpeed < FakeClimateControl.MAX_FAN_SPEED) {
passengerFanSpeed++;
notifyPassengerFanSpeedChanged();
}
}
public void passengerFanSpeedDown() {
if (passengerFanSpeed > FakeClimateControl.MIN_FAN_SPEED) {
passengerFanSpeed--;
notifyPassengerFanSpeedChanged();
}
}
public int getPassengerFanSpeed() {
return passengerFanSpeed;
}
public void setPassengerFanSpeed(int speed) {
if (speed != passengerFanSpeed) {
passengerFanSpeed = speed;
notifyPassengerFanSpeedChanged();
}
}
// Air conditioning
public void turnOnAirConditioning() {
if (isAirConditioningOn == false) {
isAirConditioningOn = true;
notifyAirConditioningChanged();
}
}
public void turnOffAirConditioning() {
if (isAirConditioningOn == true) {
isAirConditioningOn = false;
notifyAirConditioningChanged();
}
}
public boolean isAirConditioningOn() {
return isAirConditioningOn;
}
// Recirculation
public void turnOnRecirculation() {
if (isRecirculationOn == false) {
isRecirculationOn = true;
notifyRecirculationChanged();
}
}
public void turnOffRecirculation() {
if (isRecirculationOn == true) {
isRecirculationOn = false;
notifyRecirculationChanged();
}
}
public boolean isRecirculationOn() {
return isRecirculationOn;
}
// Rear defrost
public void turnOnRearDefrost() {
if (isRearDefrostOn == false) {
isRearDefrostOn = true;
notifyRearDefrostChanged();
}
}
public void turnOffRearDefrost() {
if (isRearDefrostOn == true) {
isRearDefrostOn = false;
notifyRearDefrostChanged();
}
}
public boolean isRearDefrostOn() {
return isRearDefrostOn;
}
// Air flow
public void setAirFlow(short airFlow) {
if (airFlow != this.airFlow) {
this.airFlow = airFlow;
notifyAirFlowChanged();
}
}
public short getAirFlow() {
return airFlow;
}
// Private
private void notifyDriverTemperatureChanged() {
synchronized (listeners) {
Iterator iterator = listeners.iterator();
while (iterator.hasNext()) {
IClimateControlListener listener = (IClimateControlListener) iterator.next();
listener.driverTemperatureChanged(driverTemperature);
}
}
}
private void notifyPassengerTemperatureChanged() {
synchronized (listeners) {
Iterator iterator = listeners.iterator();
while (iterator.hasNext()) {
IClimateControlListener listener = (IClimateControlListener) iterator.next();
listener.passengerTemperatureChanged(passengerTemperature);
}
}
}
private void notifyDriverFanSpeedChanged() {
synchronized (listeners) {
Iterator iterator = listeners.iterator();
while (iterator.hasNext()) {
IClimateControlListener listener = (IClimateControlListener) iterator.next();
listener.driverFanSpeedChanged(driverFanSpeed);
}
}
}
private void notifyPassengerFanSpeedChanged() {
synchronized (listeners) {
Iterator iterator = listeners.iterator();
while (iterator.hasNext()) {
IClimateControlListener listener = (IClimateControlListener) iterator.next();
listener.passengerFanSpeedChanged(passengerFanSpeed);
}
}
}
private void notifyAirConditioningChanged() {
synchronized (listeners) {
Iterator iterator = listeners.iterator();
while (iterator.hasNext()) {
IClimateControlListener listener = (IClimateControlListener) iterator.next();
listener.airConditioningChanged(isAirConditioningOn);
}
}
}
private void notifyRecirculationChanged() {
synchronized (listeners) {
Iterator iterator = listeners.iterator();
while (iterator.hasNext()) {
IClimateControlListener listener = (IClimateControlListener) iterator.next();
listener.recirculationChanged(isRecirculationOn);
}
}
}
private void notifyRearDefrostChanged() {
synchronized (listeners) {
Iterator iterator = listeners.iterator();
while (iterator.hasNext()) {
IClimateControlListener listener = (IClimateControlListener) iterator.next();
listener.rearDefrostChanged(isRearDefrostOn);
}
}
}
private void notifyAirFlowChanged() {
synchronized (listeners) {
Iterator iterator = listeners.iterator();
while (iterator.hasNext()) {
IClimateControlListener listener = (IClimateControlListener) iterator.next();
listener.airFlowChanged(airFlow);
}
}
}
}