OnJava8-Examples/innerclasses/GreenhouseControls.java

151 lines
3.6 KiB
Java
Raw Normal View History

2015-09-07 11:44:36 -06:00
// innerclasses/GreenhouseControls.java
2015-12-15 11:47:04 -08:00
// (c)2016 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
}