package context.apps.demos.roomlight;
import context.arch.discoverer.query.AbstractQueryItem;
import context.arch.enactor.Enactor;
import context.arch.widget.Widget;
import context.arch.widget.WidgetXmlParser;
/**
* Model class to contain widget and enactor models for the smart room demo application.
* @author Brian Y. Lim
*
*/
public class RoomModel {
protected Widget roomWidget;
protected Widget lightWidget;
protected RoomGenerator roomGenerator;
protected Enactor roomEnactor;
protected LightService lightService;
public static final String room = "Living Room";
public static final String lamp = "Ceiling";
public static final short BRIGHTNESS_MAX = 255;
public static final int LIGHT_MAX = 10;
public RoomModel(RoomApplication application) {
/*
* Room sensor Widget
*/
roomWidget = new RoomWidget(room);
/*
* Light actuator Widget and Service
*/
lightWidget = new LightWidget(room);
lightService = new LightService(lightWidget, application);
lightWidget.addService(lightService);
/*
* Generator for RoomWidget.
* Sets its attribute values via method invocation
*/
AbstractQueryItem<?,?> roomWidgetQuery = WidgetXmlParser.createWidgetSubscriptionQuery(roomWidget);
roomGenerator = new RoomGenerator(
roomWidgetQuery,
room); // generatorId
/*
* Enactor to use rules about RoomWidget to update LightWidget
*/
AbstractQueryItem<?,?> lightWidgetQuery = WidgetXmlParser.createWidgetSubscriptionQuery(lightWidget);
roomEnactor = new RoomEnactor(roomWidgetQuery, lightWidgetQuery); // for targeting out widget
}
/**
* Empty constructor for subclassing
*/
public RoomModel() {}
}