2015-09-07 11:44:36 -06:00
|
|
|
// innerclasses/GreenhouseControls.java
|
2020-10-07 13:35:40 -06:00
|
|
|
// (c)2020 MindView LLC: see Copyright.txt
|
2015-11-15 15:51:35 -08:00
|
|
|
// We make no guarantees that this code is fit for any purpose.
|
2016-09-23 13:23:35 -06:00
|
|
|
// Visit http://OnJava8.com for more book information.
|
2015-06-15 17:47:35 -07:00
|
|
|
// This produces a specific application of the
|
|
|
|
// control system, all in a single class. Inner
|
|
|
|
// classes allow you to encapsulate different
|
|
|
|
// functionality for each type of event.
|
|
|
|
import innerclasses.controller.*;
|
|
|
|
|
|
|
|
public class GreenhouseControls extends Controller {
|
|
|
|
private boolean light = false;
|
|
|
|
public class LightOn extends Event {
|
2016-01-25 18:05:55 -08:00
|
|
|
public LightOn(long delayTime) {
|
|
|
|
super(delayTime);
|
|
|
|
}
|
2015-06-15 17:47:35 -07:00
|
|
|
@Override
|
|
|
|
public void action() {
|
|
|
|
// Put hardware control code here to
|
|
|
|
// physically turn on the light.
|
|
|
|
light = true;
|
|
|
|
}
|
|
|
|
@Override
|
2016-01-25 18:05:55 -08:00
|
|
|
public String toString() {
|
|
|
|
return "Light is on";
|
|
|
|
}
|
2015-06-15 17:47:35 -07:00
|
|
|
}
|
|
|
|
public class LightOff extends Event {
|
2016-01-25 18:05:55 -08:00
|
|
|
public LightOff(long delayTime) {
|
|
|
|
super(delayTime);
|
|
|
|
}
|
2015-06-15 17:47:35 -07:00
|
|
|
@Override
|
|
|
|
public void action() {
|
|
|
|
// Put hardware control code here to
|
|
|
|
// physically turn off the light.
|
|
|
|
light = false;
|
|
|
|
}
|
|
|
|
@Override
|
2016-01-25 18:05:55 -08:00
|
|
|
public String toString() {
|
|
|
|
return "Light is off";
|
|
|
|
}
|
2015-06-15 17:47:35 -07:00
|
|
|
}
|
|
|
|
private boolean water = false;
|
|
|
|
public class WaterOn extends Event {
|
2016-01-25 18:05:55 -08:00
|
|
|
public WaterOn(long delayTime) {
|
|
|
|
super(delayTime);
|
|
|
|
}
|
2015-06-15 17:47:35 -07:00
|
|
|
@Override
|
|
|
|
public void action() {
|
|
|
|
// Put hardware control code here.
|
|
|
|
water = true;
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "Greenhouse water is on";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public class WaterOff extends Event {
|
2016-01-25 18:05:55 -08:00
|
|
|
public WaterOff(long delayTime) {
|
|
|
|
super(delayTime);
|
|
|
|
}
|
2015-06-15 17:47:35 -07:00
|
|
|
@Override
|
|
|
|
public void action() {
|
|
|
|
// Put hardware control code here.
|
|
|
|
water = false;
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "Greenhouse water is off";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
private String thermostat = "Day";
|
|
|
|
public class ThermostatNight extends Event {
|
|
|
|
public ThermostatNight(long delayTime) {
|
|
|
|
super(delayTime);
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
public void action() {
|
|
|
|
// Put hardware control code here.
|
|
|
|
thermostat = "Night";
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "Thermostat on night setting";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public class ThermostatDay extends Event {
|
|
|
|
public ThermostatDay(long delayTime) {
|
|
|
|
super(delayTime);
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
public void action() {
|
|
|
|
// Put hardware control code here.
|
|
|
|
thermostat = "Day";
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "Thermostat on day setting";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// An example of an action() that inserts a
|
|
|
|
// new one of itself into the event list:
|
|
|
|
public class Bell extends Event {
|
2016-01-25 18:05:55 -08:00
|
|
|
public Bell(long delayTime) {
|
|
|
|
super(delayTime);
|
|
|
|
}
|
2015-06-15 17:47:35 -07:00
|
|
|
@Override
|
|
|
|
public void action() {
|
2016-01-25 18:05:55 -08:00
|
|
|
addEvent(new Bell(delayTime.toMillis()));
|
2015-06-15 17:47:35 -07:00
|
|
|
}
|
|
|
|
@Override
|
2016-01-25 18:05:55 -08:00
|
|
|
public String toString() {
|
|
|
|
return "Bing!";
|
|
|
|
}
|
2015-06-15 17:47:35 -07:00
|
|
|
}
|
|
|
|
public class Restart extends Event {
|
|
|
|
private Event[] eventList;
|
2016-01-25 18:05:55 -08:00
|
|
|
public
|
|
|
|
Restart(long delayTime, Event[] eventList) {
|
2015-06-15 17:47:35 -07:00
|
|
|
super(delayTime);
|
|
|
|
this.eventList = eventList;
|
|
|
|
for(Event e : eventList)
|
|
|
|
addEvent(e);
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
public void action() {
|
|
|
|
for(Event e : eventList) {
|
|
|
|
e.start(); // Rerun each event
|
|
|
|
addEvent(e);
|
|
|
|
}
|
|
|
|
start(); // Rerun this Event
|
|
|
|
addEvent(this);
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return "Restarting system";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public static class Terminate extends Event {
|
2016-01-25 18:05:55 -08:00
|
|
|
public Terminate(long delayTime) {
|
|
|
|
super(delayTime);
|
|
|
|
}
|
2015-06-15 17:47:35 -07:00
|
|
|
@Override
|
|
|
|
public void action() { System.exit(0); }
|
|
|
|
@Override
|
2016-01-25 18:05:55 -08:00
|
|
|
public String toString() {
|
|
|
|
return "Terminating";
|
|
|
|
}
|
2015-06-15 17:47:35 -07:00
|
|
|
}
|
2015-09-07 11:44:36 -06:00
|
|
|
}
|