diff --git a/hal-core/resources/web/js/vue/components/EventActionComponent.js b/hal-core/resources/web/js/vue/components/EventActionComponent.js
index 53a39942..43bf215f 100644
--- a/hal-core/resources/web/js/vue/components/EventActionComponent.js
+++ b/hal-core/resources/web/js/vue/components/EventActionComponent.js
@@ -1,4 +1,5 @@
import {eventStore} from 'EventStore'
+import { alertStore } from 'AlertStore'
export default {
props: {
@@ -11,25 +12,38 @@ export default {
checkboxChecked: internalEvent.data?.valueStr == 'ON',
}
},
+ methods: {
+ changeState(changeEvent) {
+ fetch('/api/event?' + new URLSearchParams({
+ id: this.event.id,
+ action: "modify",
+ data: changeEvent.target.type == "checkbox" ? this.checkboxChecked : changeEvent.target.value
+ }).toString(), {
+ method: 'PUT',
+ headers: {
+ 'Accept': 'application/json',
+ },
+ })
+ .then(response => response.json())
+ .then(json => {
+ if (json['error'] != null) {
+ alertStore.alertError(json['error']);
+ return;
+ }
+ })
+ }
+ },
template: `
-
+
+
+
+
+
+
+
+
+
+
+
`
}
\ No newline at end of file
diff --git a/hal-core/src/se/hal/action/SendEventAction.java b/hal-core/src/se/hal/action/SendEventAction.java
index a44ddc59..428d1bb9 100644
--- a/hal-core/src/se/hal/action/SendEventAction.java
+++ b/hal-core/src/se/hal/action/SendEventAction.java
@@ -34,7 +34,7 @@ public class SendEventAction implements HalAction {
// Send
EventControllerManager.getInstance().send(event, dataObj);
} else
- logger.warning("Unable to find event with id: "+ event.getId());
+ logger.warning("Unable to find event for EventAction: " + this);
} catch (Exception e) {
logger.log(Level.SEVERE, null, e);
}
diff --git a/hal-core/src/se/hal/page/api/EventApiEndpoint.java b/hal-core/src/se/hal/page/api/EventApiEndpoint.java
index fbd0c0cb..1e60197c 100644
--- a/hal-core/src/se/hal/page/api/EventApiEndpoint.java
+++ b/hal-core/src/se/hal/page/api/EventApiEndpoint.java
@@ -1,8 +1,13 @@
package se.hal.page.api;
+import se.hal.EventControllerManager;
import se.hal.HalContext;
import se.hal.intf.HalApiEndpoint;
+import se.hal.intf.HalEventData;
import se.hal.struct.Event;
+import se.hal.struct.devicedata.ColorEventData;
+import se.hal.struct.devicedata.LevelEventData;
+import se.hal.struct.devicedata.OnOffEventData;
import zutil.ArrayUtil;
import zutil.ObjectUtil;
import zutil.db.DBConnection;
@@ -43,46 +48,83 @@ public class EventApiEndpoint extends HalApiEndpoint {
if (request.get("id") != null)
reqIds = request.get("id").split(",");
- String reqConfigType = request.get("configType");
- String reqDataType = request.get("dataType");
+ if ("modify".equals(request.get("action"))) {
+ for (String idStr : reqIds) {
+ int id = Integer.parseInt(idStr);
+ Event event = Event.getEvent(db, id);
- // Filter devices
+ if (event == null) {
+ logger.warning("Could not find given Event id: " + id);
+ continue;
+ }
- List events = new ArrayList<>();
- for (Event event : Event.getLocalEvents(db)) {
- boolean filter_match = true;
+ // change event data
+ HalEventData eventData;
- // id filtering
- if (!ObjectUtil.isEmpty((Object) reqIds) && !ArrayUtil.contains(reqIds, "" + event.getId())) {
- filter_match = false;
+ switch (event.getDeviceConfig().getDeviceDataClass().getSimpleName()) {
+ case "LevelEventData":
+ eventData = new LevelEventData(Integer.parseInt(request.get("data")) / 100.0, 0);
+ break;
+
+ case "ColorEventData":
+ eventData = new ColorEventData(request.get("data"), 0);
+ break;
+
+ case "OnOffEventData":
+ boolean booleanData = "on".equalsIgnoreCase(request.get("data")) || "true".equalsIgnoreCase(request.get("data"));
+ eventData = new OnOffEventData(booleanData, 0);
+ break;
+
+ default:
+ logger.warning("Unable to process event change request for event " + id + ", data type not supported: " + event.getDeviceConfig().getDeviceDataClass());
+ continue;
+ }
+
+ logger.info("Modifying Event(" + id + ") state: " + eventData);
+ EventControllerManager.getInstance().send(event, eventData);
+ }
+ } else {
+ String reqConfigType = request.get("configType");
+ String reqDataType = request.get("dataType");
+
+ // Filter devices
+
+ List events = new ArrayList<>();
+ for (Event event : Event.getLocalEvents(db)) {
+ boolean filter_match = true;
+
+ // id filtering
+ if (!ObjectUtil.isEmpty((Object) reqIds) && !ArrayUtil.contains(reqIds, "" + event.getId())) {
+ filter_match = false;
+ }
+
+ // device type filtering
+ if (!ObjectUtil.isEmpty(reqConfigType) &&
+ !event.getDeviceConfig().getClass().getSimpleName().equals(reqConfigType)) {
+ filter_match = false;
+ }
+
+ // data type filtering
+ if (!ObjectUtil.isEmpty(reqDataType) &&
+ !event.getDeviceConfig().getDeviceDataClass().getSimpleName().equals(reqDataType)) {
+ filter_match = false;
+ }
+
+ // Check the filter
+ if (filter_match) {
+ events.add(event);
+ }
}
- // device type filtering
- if (!ObjectUtil.isEmpty(reqConfigType) &&
- !event.getDeviceConfig().getClass().getSimpleName().equals(reqConfigType)) {
- filter_match = false;
+ // --------------------------------------
+ // Generate DataNode
+ // --------------------------------------
+
+ for (Event event : events) {
+ DataNode deviceNode = event.getDataNode();
+ deviceNode.set("type", "Event");
+ root.add(deviceNode);
}
-
- // data type filtering
- if (!ObjectUtil.isEmpty(reqDataType) &&
- !event.getDeviceConfig().getDeviceDataClass().getSimpleName().equals(reqDataType)) {
- filter_match = false;
- }
-
- // Check the filter
- if (filter_match) {
- events.add(event);
- }
- }
-
- // --------------------------------------
- // Generate DataNode
- // --------------------------------------
-
- for (Event event : events) {
- DataNode deviceNode = event.getDataNode();
- deviceNode.set("type", "Event");
- root.add(deviceNode);
}
return root;