diff --git a/src/se/hal/intf/HalAction.java b/src/se/hal/intf/HalAction.java index 1582402a..3b986a15 100755 --- a/src/se/hal/intf/HalAction.java +++ b/src/se/hal/intf/HalAction.java @@ -1,10 +1,12 @@ package se.hal.intf; +import se.hal.struct.TriggerFlow; import se.hal.struct.dso.ActionDSO; import zutil.db.DBConnection; import zutil.db.bean.DBBean; import java.sql.SQLException; +import java.util.List; /** * Defines a action that will be executed @@ -18,6 +20,10 @@ public abstract class HalAction{ dso.getObject().dso = dso; return dso.getObject(); } + public static List getActions(DBConnection db, TriggerFlow flow) { + // TODO: + return null; + } public Long getId(){ @@ -31,6 +37,9 @@ public abstract class HalAction{ dso.save(db); } + public void delete(DBConnection db) throws SQLException { + dso.delete(db); + } /** diff --git a/src/se/hal/intf/HalTrigger.java b/src/se/hal/intf/HalTrigger.java index ac1449f8..8431892e 100755 --- a/src/se/hal/intf/HalTrigger.java +++ b/src/se/hal/intf/HalTrigger.java @@ -1,10 +1,12 @@ package se.hal.intf; +import se.hal.struct.TriggerFlow; import se.hal.struct.dso.TriggerDSO; import zutil.db.DBConnection; import zutil.db.bean.DBBean; import java.sql.SQLException; +import java.util.List; /** * A class that declares a trigger/condition that @@ -19,6 +21,9 @@ public abstract class HalTrigger{ dso.getObject().dso = dso; return dso.getObject(); } + public static List getTriggers(DBConnection db, TriggerFlow flow) { + return null; + } public Long getId(){ @@ -32,6 +37,11 @@ public abstract class HalTrigger{ dso.save(db); } + public void delete(DBConnection db) throws SQLException { + dso.delete(db); + } + + /** * Evaluates if this trigger has passed. If the trigger is @@ -44,4 +54,5 @@ public abstract class HalTrigger{ * Reset the evaluation to false. */ public abstract void reset(); + } diff --git a/src/se/hal/page/TriggerHttpPage.java b/src/se/hal/page/TriggerHttpPage.java index f0cde8d2..c8cd5796 100755 --- a/src/se/hal/page/TriggerHttpPage.java +++ b/src/se/hal/page/TriggerHttpPage.java @@ -1,31 +1,39 @@ package se.hal.page; -import se.hal.ControllerManager; import se.hal.HalContext; import se.hal.TriggerManager; +import se.hal.intf.HalAction; import se.hal.intf.HalHttpPage; -import se.hal.struct.Event; +import se.hal.intf.HalTrigger; +import se.hal.struct.ClassConfigurationData; import se.hal.struct.TriggerFlow; -import se.hal.struct.devicedata.SwitchEventData; -import se.hal.util.HistoryDataListSqlResult; -import se.hal.util.HistoryDataListSqlResult.HistoryData; import zutil.db.DBConnection; import zutil.io.file.FileUtil; import zutil.parser.Templator; -import java.sql.PreparedStatement; -import java.util.List; +import java.util.ArrayList; import java.util.Map; public class TriggerHttpPage extends HalHttpPage { private static final String TEMPLATE = "resource/web/trigger.tmpl"; + private ArrayList triggerConfigurators; + private ArrayList actionConfigurators; + public TriggerHttpPage(){ super("trigger"); super.getRootNav().createSubNav("Events").createSubNav(this.getId(), "Triggers"); + + triggerConfigurators = new ArrayList<>(); + for(Class c : TriggerManager.getInstance().getAvailableTriggers()) + triggerConfigurators.add(new ClassConfigurationData(c)); + actionConfigurators = new ArrayList<>(); + for(Class c : TriggerManager.getInstance().getAvailableActions()) + actionConfigurators.add(new ClassConfigurationData(c)); } + @Override public Templator httpRespond( Map session, @@ -35,17 +43,59 @@ public class TriggerHttpPage extends HalHttpPage { DBConnection db = HalContext.getDB(); if(request.containsKey("action")){ + TriggerFlow flow = null; + if (request.containsKey("flow_id")) + flow = TriggerFlow.getTriggerFlow(db, Integer.parseInt(request.get("flow_id"))); + HalTrigger trigger = null; + if (request.containsKey("trigger_id")) + trigger = HalTrigger.getTrigger(db, Integer.parseInt(request.get("trigger_id"))); + HalAction action = null; + if (request.containsKey("action_id")) + action = HalAction.getAction(db, Integer.parseInt(request.get("action_id"))); + + switch(request.get("action")) { - // Local Sensors + // Flows case "create_flow": - TriggerFlow flow = new TriggerFlow(); + flow = new TriggerFlow(); flow.save(db); break; + case "remove_flow": + flow.delete(db); + break; + + // Triggers + case "create_trigger": + //TODO: trigger = new HalTrigger(); + flow.addTrigger(trigger); + case "modify_trigger": + // TODO: save attrib + trigger.save(db); + break; + case "remove_trigger": + flow.removeTrigger(trigger); + trigger.delete(db); + break; + + // Triggers + case "create_action": + //TODO: action = new HalAction(); + flow.addAction(action); + case "modify_action": + // TODO: save attrib + action.save(db); + break; + case "remove_action": + flow.removeAction(action); + action.delete(db); + break; } } Templator tmpl = new Templator(FileUtil.find(TEMPLATE)); + tmpl.set("triggerConfigurations", triggerConfigurators); + tmpl.set("actionConfigurations", actionConfigurators); tmpl.set("availableTriggers", TriggerManager.getInstance().getAvailableTriggers()); tmpl.set("availableActions", TriggerManager.getInstance().getAvailableActions()); tmpl.set("flows", TriggerFlow.getTriggerFlows(db)); diff --git a/src/se/hal/struct/TriggerFlow.java b/src/se/hal/struct/TriggerFlow.java index 5f167b56..3839af22 100755 --- a/src/se/hal/struct/TriggerFlow.java +++ b/src/se/hal/struct/TriggerFlow.java @@ -26,10 +26,8 @@ import java.util.logging.Logger; public class TriggerFlow extends DBBean { private static final Logger logger = LogUtil.getLogger(); - private String triggers; // only used for flat DB storage - private transient ArrayList triggerList = new ArrayList<>(); - private String actions; // only used for flat DB storage - private transient ArrayList actionList = new ArrayList<>(); + private transient List triggerList = new ArrayList<>(); + private transient List actionList = new ArrayList<>(); @@ -37,50 +35,37 @@ public class TriggerFlow extends DBBean { PreparedStatement stmt = db.getPreparedStatement("SELECT * FROM trigger_flow"); return DBConnection.exec(stmt, DBBeanSQLResultHandler.createList(TriggerFlow.class, db)); } - - - @Override - public void save(DBConnection db) throws SQLException { - DataNode root = new DataNode(DataNode.DataType.List); - for (HalTrigger t : triggerList) - root.add(t.getId()); - triggers = JSONWriter.toString(root); - for (HalAction a : actionList) - root.add(a.getId()); - actions = JSONWriter.toString(root); - - super.save(db); + public static TriggerFlow getTriggerFlow(DBConnection db, int id) throws SQLException { + return DBBean.load(db, TriggerFlow.class, id); } + + @Override protected void postUpdateAction() { DBConnection db = HalContext.getDB(); triggerList.clear(); - for (DataNode tId : JSONParser.read(triggers)) - try { - triggerList.add(HalTrigger.getTrigger(db, tId.getInt())); - } catch (SQLException e) { - logger.log(Level.SEVERE, null, e); - } + triggerList = HalTrigger.getTriggers(db, this); actionList.clear(); - for (DataNode aId : JSONParser.read(actions)) - try { - actionList.add(HalAction.getAction(db, aId.getInt())); - } catch (SQLException e) { - logger.log(Level.SEVERE, null, e); - } + actionList = HalAction.getActions(db, this); } public void addTrigger(HalTrigger trigger) { triggerList.add(trigger); } + public void removeTrigger(HalTrigger trigger) { + triggerList.remove(trigger); + } + public void addAction(HalAction action) { actionList.add(action); } - + public void removeAction(HalAction action) { + actionList.remove(action); + } /** * @return true if any one of the triggerList evaluate to true, @@ -112,4 +97,6 @@ public class TriggerFlow extends DBBean { trigger.reset(); } } + + }