diff --git a/build.xml b/build.xml index d9ba5305..f221f08c 100755 --- a/build.xml +++ b/build.xml @@ -94,7 +94,7 @@ - diff --git a/resource/web/trigger.tmpl b/resource/web/trigger.tmpl index b21044f8..62477ca2 100755 --- a/resource/web/trigger.tmpl +++ b/resource/web/trigger.tmpl @@ -98,6 +98,53 @@ + +
+
+ +
+ + + + + + \ No newline at end of file diff --git a/src/se/hal/intf/HalAction.java b/src/se/hal/intf/HalAction.java index 3b986a15..119789ce 100755 --- a/src/se/hal/intf/HalAction.java +++ b/src/se/hal/intf/HalAction.java @@ -1,49 +1,14 @@ 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 */ -public abstract class HalAction{ - private ActionDSO dso; - - - public static HalAction getAction(DBConnection db, long id) throws SQLException { - ActionDSO dso = DBBean.load(db, ActionDSO.class, id); - dso.getObject().dso = dso; - return dso.getObject(); - } - public static List getActions(DBConnection db, TriggerFlow flow) { - // TODO: - return null; - } - - - public Long getId(){ - return (dso!=null ? dso.getId() : null); - } - - public void save(DBConnection db) throws SQLException { - if (dso == null) - dso = new ActionDSO(); - dso.setObject(this); - dso.save(db); - } - - public void delete(DBConnection db) throws SQLException { - dso.delete(db); - } - +public interface HalAction{ /** * Executes this specific action */ - public abstract void execute(); + void execute(); } diff --git a/src/se/hal/intf/HalTrigger.java b/src/se/hal/intf/HalTrigger.java index 8431892e..b05f1c7f 100755 --- a/src/se/hal/intf/HalTrigger.java +++ b/src/se/hal/intf/HalTrigger.java @@ -1,58 +1,22 @@ 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 + * A interface that declares a trigger/condition that * needs to be validated before an action can be run */ -public abstract class HalTrigger{ - private TriggerDSO dso; - - - public static HalTrigger getTrigger(DBConnection db, long id) throws SQLException { - TriggerDSO dso = DBBean.load(db, TriggerDSO.class, id); - dso.getObject().dso = dso; - return dso.getObject(); - } - public static List getTriggers(DBConnection db, TriggerFlow flow) { - return null; - } - - - public Long getId(){ - return (dso!=null ? dso.getId() : null); - } - - public void save(DBConnection db) throws SQLException { - if (dso == null) - dso = new TriggerDSO(); - dso.setObject(this); - dso.save(db); - } - - public void delete(DBConnection db) throws SQLException { - dso.delete(db); - } - - +public interface HalTrigger{ /** * Evaluates if this trigger has passed. If the trigger is * true then this method will return true until the {@link #reset()} * method is called. */ - public abstract boolean evaluate(); + boolean evaluate(); /** * Reset the evaluation to false. */ - public abstract void reset(); + void reset(); } diff --git a/src/se/hal/page/TriggerHttpPage.java b/src/se/hal/page/TriggerHttpPage.java index c8cd5796..04a25685 100755 --- a/src/se/hal/page/TriggerHttpPage.java +++ b/src/se/hal/page/TriggerHttpPage.java @@ -5,7 +5,9 @@ import se.hal.TriggerManager; import se.hal.intf.HalAction; import se.hal.intf.HalHttpPage; import se.hal.intf.HalTrigger; +import se.hal.struct.Action; import se.hal.struct.ClassConfigurationData; +import se.hal.struct.Trigger; import se.hal.struct.TriggerFlow; import zutil.db.DBConnection; import zutil.io.file.FileUtil; @@ -46,12 +48,12 @@ public class TriggerHttpPage extends HalHttpPage { TriggerFlow flow = null; if (request.containsKey("flow_id")) flow = TriggerFlow.getTriggerFlow(db, Integer.parseInt(request.get("flow_id"))); - HalTrigger trigger = null; + Trigger trigger = null; if (request.containsKey("trigger_id")) - trigger = HalTrigger.getTrigger(db, Integer.parseInt(request.get("trigger_id"))); - HalAction action = null; + trigger = Trigger.getTrigger(db, Integer.parseInt(request.get("trigger_id"))); + Action action = null; if (request.containsKey("action_id")) - action = HalAction.getAction(db, Integer.parseInt(request.get("action_id"))); + action = Action.getAction(db, Integer.parseInt(request.get("action_id"))); switch(request.get("action")) { @@ -94,8 +96,8 @@ public class TriggerHttpPage extends HalHttpPage { Templator tmpl = new Templator(FileUtil.find(TEMPLATE)); - tmpl.set("triggerConfigurations", triggerConfigurators); - tmpl.set("actionConfigurations", actionConfigurators); + tmpl.set("triggerConf", triggerConfigurators); + tmpl.set("actionConf", 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/Action.java b/src/se/hal/struct/Action.java new file mode 100755 index 00000000..40c765e6 --- /dev/null +++ b/src/se/hal/struct/Action.java @@ -0,0 +1,43 @@ +package se.hal.struct; + +import se.hal.intf.HalAction; +import se.hal.intf.HalTrigger; +import zutil.db.DBConnection; +import zutil.db.bean.DBBean; +import zutil.db.bean.DBBeanObjectDSO; + +import java.sql.SQLException; +import java.util.List; + +/** + * Defines a action that will be executed + */ +@DBBean.DBTable(value = "action", superBean = true) +public class Action extends DBBeanObjectDSO{ + + + public static Action getAction(DBConnection db, long id) throws SQLException { + return DBBean.load(db, Action.class, id); + } + public static List getActions(DBConnection db, TriggerFlow flow) { + // TODO: + return null; + } + + + public Action() { } + public Action(HalAction action) { + this.setObject(action); + } + + + + /** + * Executes this specific action + */ + public void execute(){ + if (getObject() != null) + getObject().execute(); + } + +} diff --git a/src/se/hal/struct/Trigger.java b/src/se/hal/struct/Trigger.java new file mode 100755 index 00000000..3f5c70f6 --- /dev/null +++ b/src/se/hal/struct/Trigger.java @@ -0,0 +1,54 @@ +package se.hal.struct; + +import se.hal.intf.HalTrigger; +import zutil.db.DBConnection; +import zutil.db.bean.DBBean; +import zutil.db.bean.DBBeanObjectDSO; + +import java.sql.SQLException; +import java.util.List; + +/** + * A class that declares a trigger/condition that + * needs to be validated before an action can be run + */ +@DBBean.DBTable(value = "trigger", superBean = true) +public class Trigger extends DBBeanObjectDSO{ + + + + public static Trigger getTrigger(DBConnection db, long id) throws SQLException { + return DBBean.load(db, Trigger.class, id); + } + public static List getTriggers(DBConnection db, TriggerFlow flow) { + // Todo: + return null; + } + + + public Trigger() { } + public Trigger(HalTrigger trigger) { + this.setObject(trigger); + } + + + /** + * Evaluates if this trigger has passed. If the trigger is + * true then this method will return true until the {@link #reset()} + * method is called. + */ + public boolean evaluate(){ + if (getObject() != null) + return getObject().evaluate(); + return false; + } + + /** + * Reset the evaluation to false. + */ + public void reset(){ + if (getObject() != null) + getObject().reset(); + } + +} diff --git a/src/se/hal/struct/TriggerFlow.java b/src/se/hal/struct/TriggerFlow.java index 3839af22..b53def59 100755 --- a/src/se/hal/struct/TriggerFlow.java +++ b/src/se/hal/struct/TriggerFlow.java @@ -26,8 +26,8 @@ import java.util.logging.Logger; public class TriggerFlow extends DBBean { private static final Logger logger = LogUtil.getLogger(); - private transient List triggerList = new ArrayList<>(); - private transient List actionList = new ArrayList<>(); + private transient List triggerList = new ArrayList<>(); + private transient List actionList = new ArrayList<>(); @@ -46,24 +46,24 @@ public class TriggerFlow extends DBBean { DBConnection db = HalContext.getDB(); triggerList.clear(); - triggerList = HalTrigger.getTriggers(db, this); + triggerList = Trigger.getTriggers(db, this); actionList.clear(); - actionList = HalAction.getActions(db, this); + actionList = Action.getActions(db, this); } - public void addTrigger(HalTrigger trigger) { + public void addTrigger(Trigger trigger) { triggerList.add(trigger); } - public void removeTrigger(HalTrigger trigger) { + public void removeTrigger(Trigger trigger) { triggerList.remove(trigger); } - public void addAction(HalAction action) { + public void addAction(Action action) { actionList.add(action); } - public void removeAction(HalAction action) { + public void removeAction(Action action) { actionList.remove(action); } @@ -73,7 +73,7 @@ public class TriggerFlow extends DBBean { * Note: this method will not execute any actionList */ public boolean evaluate(){ - for(HalTrigger trigger : triggerList){ + for(Trigger trigger : triggerList){ if (trigger.evaluate()) return true; } @@ -84,7 +84,7 @@ public class TriggerFlow extends DBBean { * Executes the associated actionList in this flow */ public void execute(){ - for(HalAction action : actionList){ + for(Action action : actionList){ action.execute(); } } @@ -93,7 +93,7 @@ public class TriggerFlow extends DBBean { * Resets all trigger evaluations */ public void reset() { - for(HalTrigger trigger : triggerList){ + for(Trigger trigger : triggerList){ trigger.reset(); } } diff --git a/src/se/hal/struct/dso/ActionDSO.java b/src/se/hal/struct/dso/ActionDSO.java deleted file mode 100755 index b760c6ef..00000000 --- a/src/se/hal/struct/dso/ActionDSO.java +++ /dev/null @@ -1,14 +0,0 @@ -package se.hal.struct.dso; - -import se.hal.intf.HalAction; -import zutil.db.bean.DBBean; - - -/** - * A intermediate class for loading HalAction objects from DB - */ -@DBBean.DBTable(value = "action", superBean = true) -public class ActionDSO extends ObjectDSO{ - - -} diff --git a/src/se/hal/struct/dso/ObjectDSO.java b/src/se/hal/struct/dso/ObjectDSO.java deleted file mode 100755 index 3a512e6e..00000000 --- a/src/se/hal/struct/dso/ObjectDSO.java +++ /dev/null @@ -1,72 +0,0 @@ -package se.hal.struct.dso; - -import se.hal.intf.HalTrigger; -import zutil.db.DBConnection; -import zutil.db.bean.DBBean; -import zutil.log.LogUtil; -import zutil.parser.json.JSONParser; -import zutil.parser.json.JSONWriter; -import zutil.ui.Configurator; - -import java.sql.SQLException; -import java.util.logging.Level; -import java.util.logging.Logger; - - -/** - * A intermediate class for loading HalTrigger objects from DB - */ -public abstract class ObjectDSO extends DBBean{ - private static final Logger logger = LogUtil.getLogger(); - - // DB parameters - private String type; - private String config; - - // Local parameters - private transient T cachedObj; - - - - @Override - protected void postUpdateAction() { - if (type != null && !type.isEmpty()) { - if (cachedObj == null) { - try { - Class clazz = Class.forName(type); - cachedObj = (T) clazz.newInstance(); - } catch (Exception e) { - logger.log(Level.SEVERE, "Unable instantiate class: " + type, e); - } - } - - if (config != null && !config.isEmpty()) { - Configurator configurator = new Configurator<>(cachedObj); - configurator.setValues(JSONParser.read(config)); - configurator.applyConfiguration(); - } - } - } - - @Override - public void save(DBConnection db) throws SQLException { - if (cachedObj == null) - this.config = null; - else { - Configurator configurator = new Configurator<>(cachedObj); - this.config = JSONWriter.toString(configurator.getValuesAsNode()); - } - super.save(db); - } - - - - public T getObject(){ - return cachedObj; - } - - public void setObject(T obj){ - this.cachedObj = obj; - } - -} diff --git a/src/se/hal/struct/dso/TriggerDSO.java b/src/se/hal/struct/dso/TriggerDSO.java deleted file mode 100755 index 60c7b8a6..00000000 --- a/src/se/hal/struct/dso/TriggerDSO.java +++ /dev/null @@ -1,14 +0,0 @@ -package se.hal.struct.dso; - -import se.hal.intf.HalTrigger; -import zutil.db.bean.DBBean; - - -/** - * A intermediate class for loading HalTrigger objects from DB - */ -@DBBean.DBTable(value = "trigger", superBean = true) -public class TriggerDSO extends ObjectDSO{ - - -} diff --git a/test/se/hal/TriggerManagerTest.java b/test/se/hal/TriggerManagerTest.java index b4e49872..aa52b29d 100755 --- a/test/se/hal/TriggerManagerTest.java +++ b/test/se/hal/TriggerManagerTest.java @@ -3,6 +3,8 @@ package se.hal; import org.junit.Test; import se.hal.intf.HalAction; import se.hal.intf.HalTrigger; +import se.hal.struct.Action; +import se.hal.struct.Trigger; import se.hal.struct.TriggerFlow; import java.util.Collections; @@ -43,9 +45,9 @@ public class TriggerManagerTest { registerAvailableTrigger(); TriggerFlow flow = new TriggerFlow(); - flow.addTrigger(new TestTrigger(true)); + flow.addTrigger(new Trigger(new TestTrigger(true))); TestAction action = new TestAction(); - flow.addAction(action); + flow.addAction(new Action(action)); manager.register(flow); manager.evaluateAndExecute(); assertEquals(1, action.nrOfExecutions); @@ -58,9 +60,9 @@ public class TriggerManagerTest { TriggerFlow flow = new TriggerFlow(); TestTrigger trigger = new TestTrigger(true); - flow.addTrigger(trigger); + flow.addTrigger(new Trigger(trigger)); TestAction action = new TestAction(); - flow.addAction(action); + flow.addAction(new Action(action)); manager.register(flow); manager.evaluateAndExecute(); @@ -75,7 +77,7 @@ public class TriggerManagerTest { ///////////////////////////////////////////////////////////////////////////// - private static class TestTrigger extends HalTrigger { + private static class TestTrigger implements HalTrigger { boolean evaluation; TestTrigger(boolean b){ evaluation = b; } @Override @@ -86,7 +88,7 @@ public class TriggerManagerTest { } - private class TestAction extends HalAction { + private class TestAction implements HalAction { int nrOfExecutions; @Override public void execute() { nrOfExecutions++; }