package context.apps.demos.roomlight; import context.arch.discoverer.query.AbstractQueryItem; import context.arch.enactor.EnactorXmlParser; import context.arch.storage.Attributes; import context.arch.widget.WidgetXmlParser; /** * Model class to contain widget and enactor models for the smart room demo application. * This version uses XML to describe them. * @author Brian Y. Lim * */ public class RoomModelXML extends RoomModel { @SuppressWarnings("serial") public RoomModelXML(RoomApplication application) { super(); /* * Constant attribute values to fully describe widgets to instantiate */ Attributes roomConstAttValues = new Attributes() {{ addAttribute("room", room); }}; Attributes lampConstAttValues = new Attributes() {{ addAttribute("lamp", lamp); }}; /* * Room sensor Widget */ roomWidget = WidgetXmlParser.createWidget( "demos/room-rules/room-widget.xml", room, // widgetId roomConstAttValues); /* * Light actuator Widget and Service */ lightWidget = WidgetXmlParser.createWidget( "demos/room-rules/light-widget.xml", lamp, // widgetId lampConstAttValues); lightService = new LightService(lightWidget, application); lightWidget.addService(lightService); /* * Generator for RoomWidget. * Sets its attribute values via method invocation */ AbstractQueryItem<?,?> roomWidgetQuery = WidgetXmlParser.createWidgetSubscriptionQuery( "demos/room-rules/room-widget.xml", room, // widgetId roomConstAttValues); roomGenerator = new RoomGenerator( roomWidgetQuery, room); // generatorId /* * Enactor to use rules about RoomWidget to update LightWidget */ roomEnactor = EnactorXmlParser.createEnactor( "demos/room-rules/room-enactor.xml", room + '_' + lamp, // enactorId roomConstAttValues, // for targeting in widget lampConstAttValues); // for targeting out widget } }