diff --git a/src/se/hal/HalServer.java b/src/se/hal/HalServer.java index 991f43a8..ae4d44f0 100755 --- a/src/se/hal/HalServer.java +++ b/src/se/hal/HalServer.java @@ -52,7 +52,7 @@ public class HalServer { for(Sensor sensor : Sensor.getLocalSensors(db)){ ControllerManager.getInstance().register(sensor); } - for(Event event : Event.getEvents(db)){ + for(Event event : Event.getLocalEvents(db)){ ControllerManager.getInstance().register(event); } diff --git a/src/se/hal/page/EventConfigHttpPage.java b/src/se/hal/page/EventConfigHttpPage.java new file mode 100755 index 00000000..d95571be --- /dev/null +++ b/src/se/hal/page/EventConfigHttpPage.java @@ -0,0 +1,95 @@ +package se.hal.page; + +import se.hal.ControllerManager; +import se.hal.HalContext; +import se.hal.intf.HalHttpPage; +import se.hal.struct.Event; +import se.hal.struct.Sensor; +import se.hal.struct.User; +import zutil.db.DBConnection; +import zutil.io.file.FileUtil; +import zutil.parser.Templator; +import zutil.ui.Configurator; +import zutil.ui.Configurator.ConfigurationParam; + +import java.util.Map; + +public class EventConfigHttpPage extends HalHttpPage { + private static final String TEMPLATE = "web-resource/event_config.tmpl"; + + private class EventDataParams{ + public Class clazz; + public ConfigurationParam[] params; + } + private EventDataParams[] eventConfigurations; + + + public EventConfigHttpPage() { + super("Configuration", "event_config"); + + eventConfigurations = new EventDataParams[ + ControllerManager.getInstance().getAvailableSensors().size()]; + int i=0; + for(Class c : ControllerManager.getInstance().getAvailableEvents()){ + eventConfigurations[i] = new EventDataParams(); + eventConfigurations[i].clazz = c; + eventConfigurations[i].params = Configurator.getConfiguration(c); + ++i; + } + } + + @Override + public Templator httpRespond( + Map session, + Map cookie, + Map request) + throws Exception{ + + DBConnection db = HalContext.getDB(); + User localUser = User.getLocalUser(db); + + // Save new input + if(request.containsKey("action")){ + int id = (request.containsKey("id") ? Integer.parseInt(request.get("id")) : -1); + Event event; + switch(request.get("action")) { + // Local Sensors + case "create_local_event": + event = new Event(); + event.setName(request.get("name")); + event.setType(request.get("type")); + //sensor.setConfig(request.get("config")); + event.setUser(localUser); + event.save(db); + case "modify_local_event": + event = Event.getEvent(db, id); + if(event != null){ + event.setName(request.get("name")); + event.setType(request.get("type")); + //sensor.setConfig(request.get("config")); + event.setUser(localUser); + event.save(db); + } + break; + case "remove_local_event": + event = Event.getEvent(db, id); + if(event != null) + event.delete(db); + break; + } + } + + // Output + Templator tmpl = new Templator(FileUtil.find(TEMPLATE)); + tmpl.set("user", localUser); + tmpl.set("localEvent", Event.getLocalEvents(db)); + tmpl.set("localEventConf", eventConfigurations); + + + tmpl.set("availableSensors", ControllerManager.getInstance().getAvailableSensors()); + + return tmpl; + + } + +} diff --git a/src/se/hal/struct/Event.java b/src/se/hal/struct/Event.java index 5c2fe7f5..5fb82de0 100755 --- a/src/se/hal/struct/Event.java +++ b/src/se/hal/struct/Event.java @@ -33,12 +33,16 @@ public class Event extends DBBean{ private transient HalEvent eventData; // User configuration + @DBColumn("user_id") private User user; + public static Event getEvent(DBConnection db, long id) throws SQLException{ + return DBBean.load(db, Event.class, id); + } - public static List getEvents(DBConnection db) throws SQLException { - PreparedStatement stmt = db.getPreparedStatement( "SELECT * FROM event" ); + public static List getLocalEvents(DBConnection db) throws SQLException { + PreparedStatement stmt = db.getPreparedStatement( "SELECT event.* FROM event,user WHERE user.external == 0 AND user.id == event.user_id" ); return DBConnection.exec(stmt, DBBeanSQLResultHandler.createList(Event.class, db) ); } @@ -80,6 +84,34 @@ public class Event extends DBBean{ } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public String getConfig() { + return config; + } + public void setConfig(String config) { + this.config = config; + this.eventData = null; // invalidate current sensor data object + } + + public User getUser() { + return user; + } + public void setUser(User user) { + this.user = user; + } + + public Class getController(){ return getEventData().getEventController(); } diff --git a/web-resource/event_config.tmpl b/web-resource/event_config.tmpl new file mode 100755 index 00000000..e1361795 --- /dev/null +++ b/web-resource/event_config.tmpl @@ -0,0 +1,174 @@ +

Event Configuration

+ +
+
+
Local Events
+
+

This is a local list of events connected to this node.

+ + + + + + + + + + {{#localEvents}} + + + + + + + + {{/localEvents}} +
NameTypePublicConfiguration + +
{{.name}}{{.type}}{{.sync}}{{.config}} +
+ + + +
+ + + +
+
+
+ +
+

Events that has been automatically detected.

+ + + + + + {{#detectedEvents}} + + + + + + {{/detectedEvents}} +
TypeConfiguration
{{.getClass().getName()}}{{.}} +
+ +
+
+
+
+
+ + + + + + + + + diff --git a/web-resource/sensor_config.tmpl b/web-resource/sensor_config.tmpl index 84c0c7b4..deed4893 100755 --- a/web-resource/sensor_config.tmpl +++ b/web-resource/sensor_config.tmpl @@ -1,4 +1,4 @@ -

Configuration

+

Sensor Configuration