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 @@
+
@@ -119,6 +166,10 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{#triggerConf}}
+
+ {{/triggerConf}}
+
+
+
+ {{#actionConf}}
+
+ {{/actionConf}}
\ 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++; }