Loading proto/context.proto +1 −0 Original line number Diff line number Diff line Loading @@ -190,6 +190,7 @@ message DeviceList { message DeviceEvent { Event event = 1; DeviceId device_id = 2; DeviceConfig device_config = 3; } Loading src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java +3 −3 Original line number Diff line number Diff line Loading @@ -78,9 +78,9 @@ public class ContextSubscriber { automationService.deleteDevice(deviceEvent.getDeviceId()); break; case UPDATE: // TODO a DeviceConfig object should be part of the DeviceEvent object in order // for automationService.updateDevice() to be triggered automatically like // addDevice(). LOGGER.infof("Received %s for device [%s]", event, deviceId); automationService.updateDevice( deviceEvent.getDeviceId(), deviceEvent.getDeviceConfig().orElse(null)); case UNDEFINED: logWarningMessage(event, deviceId, eventType); break; Loading src/automation/src/main/java/eu/teraflow/automation/Serializer.java +3 −1 Original line number Diff line number Diff line Loading @@ -269,6 +269,7 @@ public class Serializer { builder.setDeviceId(deviceId); builder.setEvent(serialize(deviceEvent.getEvent())); builder.setDeviceConfig(serialize(deviceEvent.getDeviceConfig().orElse(null))); return builder.build(); } Loading @@ -276,8 +277,9 @@ public class Serializer { public DeviceEvent deserialize(ContextOuterClass.DeviceEvent deviceEvent) { final var deviceId = deserialize(deviceEvent.getDeviceId()); final var event = deserialize(deviceEvent.getEvent()); final var deviceConfig = deserialize(deviceEvent.getDeviceConfig()); return new DeviceEvent(deviceId, event); return new DeviceEvent(deviceId, event, deviceConfig); } public ContextOuterClass.ConfigActionEnum serialize(ConfigActionEnum configAction) { Loading src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceEvent.java +16 −1 Original line number Diff line number Diff line Loading @@ -16,14 +16,23 @@ package eu.teraflow.automation.context.model; import java.util.Optional; public class DeviceEvent { private final Event event; private final String deviceId; private final Optional<DeviceConfig> deviceConfig; public DeviceEvent(String deviceId, Event event) { this(deviceId, event, null); } public DeviceEvent(String deviceId, Event event, DeviceConfig deviceConfig) { this.event = event; this.deviceId = deviceId; this.deviceConfig = (deviceConfig == null) ? Optional.empty() : Optional.ofNullable(deviceConfig); } public Event getEvent() { Loading @@ -34,8 +43,14 @@ public class DeviceEvent { return deviceId; } public Optional<DeviceConfig> getDeviceConfig() { return deviceConfig; } @Override public String toString() { return String.format("%s[%s, %s]", getClass().getSimpleName(), deviceId, event.toString()); return String.format( "%s[%s, %s, %s]", getClass().getSimpleName(), deviceId, event.toString(), deviceConfig.orElse(null)); } } src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java +85 −3 Original line number Diff line number Diff line Loading @@ -392,14 +392,51 @@ class SerializerTest { .setTimestamp(expectedTimestamp) .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE) .build(); final var expectedConfigRuleCustomA = ContextOuterClass.ConfigRule_Custom.newBuilder() .setResourceKey("resourceKeyA") .setResourceValue("resourceValueA") .build(); final var expectedConfigRuleCustomB = ContextOuterClass.ConfigRule_Custom.newBuilder() .setResourceKey("resourceKeyB") .setResourceValue("resourceValueB") .build(); final var expectedConfigRuleA = ContextOuterClass.ConfigRule.newBuilder() .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) .setCustom(expectedConfigRuleCustomA) .build(); final var expectedConfigRuleB = ContextOuterClass.ConfigRule.newBuilder() .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE) .setCustom(expectedConfigRuleCustomB) .build(); final var expectedDeviceConfig = ContextOuterClass.DeviceConfig.newBuilder() .addAllConfigRules(List.of(expectedConfigRuleA, expectedConfigRuleB)) .build(); final var expectedDeviceEvent = ContextOuterClass.DeviceEvent.newBuilder() .setDeviceId(expectedDeviceId) .setEvent(expectedEvent) .setDeviceConfig(expectedDeviceConfig) .build(); final var creationEvent = new Event(1, EventTypeEnum.CREATE); final var deviceEvent = new DeviceEvent("deviceId", creationEvent); final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA"); final var configRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB"); final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA); final var configRuleTypeB = new ConfigRuleTypeCustom(configRuleCustomB); final var configRuleA = new ConfigRule(ConfigActionEnum.SET, configRuleTypeA); final var configRuleB = new ConfigRule(ConfigActionEnum.DELETE, configRuleTypeB); final var deviceConfig = new DeviceConfig(List.of(configRuleA, configRuleB)); final var deviceEvent = new DeviceEvent("deviceId", creationEvent, deviceConfig); final var serializedDeviceEvent = serializer.serialize(deviceEvent); assertThat(serializedDeviceEvent).usingRecursiveComparison().isEqualTo(expectedDeviceEvent); Loading @@ -412,7 +449,22 @@ class SerializerTest { final var expectedTimestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build(); final var creationEvent = new Event(1, expectedEventType); final var expectedDeviceEvent = new DeviceEvent(dummyDeviceId, creationEvent); final var expectedConfigRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA"); final var expectedConfigRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB"); final var expectedConfigRuleTypeA = new ConfigRuleTypeCustom(expectedConfigRuleCustomA); final var expectedConfigRuleTypeB = new ConfigRuleTypeCustom(expectedConfigRuleCustomB); final var expectedConfigRuleA = new ConfigRule(ConfigActionEnum.SET, expectedConfigRuleTypeA); final var expectedConfigRuleB = new ConfigRule(ConfigActionEnum.DELETE, expectedConfigRuleTypeB); final var expectedDeviceConfig = new DeviceConfig(List.of(expectedConfigRuleA, expectedConfigRuleB)); final var expectedDeviceEvent = new DeviceEvent(dummyDeviceId, creationEvent, expectedDeviceConfig); final var deviceUuid = Uuid.newBuilder().setUuid("deviceId"); final var deviceId = DeviceId.newBuilder().setDeviceUuid(deviceUuid).build(); Loading @@ -421,8 +473,38 @@ class SerializerTest { .setTimestamp(expectedTimestamp) .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_REMOVE) .build(); final var configRuleCustomA = ContextOuterClass.ConfigRule_Custom.newBuilder() .setResourceKey("resourceKeyA") .setResourceValue("resourceValueA") .build(); final var configRuleCustomB = ContextOuterClass.ConfigRule_Custom.newBuilder() .setResourceKey("resourceKeyB") .setResourceValue("resourceValueB") .build(); final var configRuleA = ContextOuterClass.ConfigRule.newBuilder() .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) .setCustom(configRuleCustomA) .build(); final var configRuleB = ContextOuterClass.ConfigRule.newBuilder() .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE) .setCustom(configRuleCustomB) .build(); final var deviceConfig = ContextOuterClass.DeviceConfig.newBuilder() .addAllConfigRules(List.of(configRuleA, configRuleB)) .build(); final var serializedDeviceEvent = ContextOuterClass.DeviceEvent.newBuilder().setDeviceId(deviceId).setEvent(event).build(); ContextOuterClass.DeviceEvent.newBuilder() .setDeviceId(deviceId) .setEvent(event) .setDeviceConfig(deviceConfig) .build(); final var deviceEvent = serializer.deserialize(serializedDeviceEvent); assertThat(deviceEvent).usingRecursiveComparison().isEqualTo(expectedDeviceEvent); Loading Loading
proto/context.proto +1 −0 Original line number Diff line number Diff line Loading @@ -190,6 +190,7 @@ message DeviceList { message DeviceEvent { Event event = 1; DeviceId device_id = 2; DeviceConfig device_config = 3; } Loading
src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java +3 −3 Original line number Diff line number Diff line Loading @@ -78,9 +78,9 @@ public class ContextSubscriber { automationService.deleteDevice(deviceEvent.getDeviceId()); break; case UPDATE: // TODO a DeviceConfig object should be part of the DeviceEvent object in order // for automationService.updateDevice() to be triggered automatically like // addDevice(). LOGGER.infof("Received %s for device [%s]", event, deviceId); automationService.updateDevice( deviceEvent.getDeviceId(), deviceEvent.getDeviceConfig().orElse(null)); case UNDEFINED: logWarningMessage(event, deviceId, eventType); break; Loading
src/automation/src/main/java/eu/teraflow/automation/Serializer.java +3 −1 Original line number Diff line number Diff line Loading @@ -269,6 +269,7 @@ public class Serializer { builder.setDeviceId(deviceId); builder.setEvent(serialize(deviceEvent.getEvent())); builder.setDeviceConfig(serialize(deviceEvent.getDeviceConfig().orElse(null))); return builder.build(); } Loading @@ -276,8 +277,9 @@ public class Serializer { public DeviceEvent deserialize(ContextOuterClass.DeviceEvent deviceEvent) { final var deviceId = deserialize(deviceEvent.getDeviceId()); final var event = deserialize(deviceEvent.getEvent()); final var deviceConfig = deserialize(deviceEvent.getDeviceConfig()); return new DeviceEvent(deviceId, event); return new DeviceEvent(deviceId, event, deviceConfig); } public ContextOuterClass.ConfigActionEnum serialize(ConfigActionEnum configAction) { Loading
src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceEvent.java +16 −1 Original line number Diff line number Diff line Loading @@ -16,14 +16,23 @@ package eu.teraflow.automation.context.model; import java.util.Optional; public class DeviceEvent { private final Event event; private final String deviceId; private final Optional<DeviceConfig> deviceConfig; public DeviceEvent(String deviceId, Event event) { this(deviceId, event, null); } public DeviceEvent(String deviceId, Event event, DeviceConfig deviceConfig) { this.event = event; this.deviceId = deviceId; this.deviceConfig = (deviceConfig == null) ? Optional.empty() : Optional.ofNullable(deviceConfig); } public Event getEvent() { Loading @@ -34,8 +43,14 @@ public class DeviceEvent { return deviceId; } public Optional<DeviceConfig> getDeviceConfig() { return deviceConfig; } @Override public String toString() { return String.format("%s[%s, %s]", getClass().getSimpleName(), deviceId, event.toString()); return String.format( "%s[%s, %s, %s]", getClass().getSimpleName(), deviceId, event.toString(), deviceConfig.orElse(null)); } }
src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java +85 −3 Original line number Diff line number Diff line Loading @@ -392,14 +392,51 @@ class SerializerTest { .setTimestamp(expectedTimestamp) .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE) .build(); final var expectedConfigRuleCustomA = ContextOuterClass.ConfigRule_Custom.newBuilder() .setResourceKey("resourceKeyA") .setResourceValue("resourceValueA") .build(); final var expectedConfigRuleCustomB = ContextOuterClass.ConfigRule_Custom.newBuilder() .setResourceKey("resourceKeyB") .setResourceValue("resourceValueB") .build(); final var expectedConfigRuleA = ContextOuterClass.ConfigRule.newBuilder() .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) .setCustom(expectedConfigRuleCustomA) .build(); final var expectedConfigRuleB = ContextOuterClass.ConfigRule.newBuilder() .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE) .setCustom(expectedConfigRuleCustomB) .build(); final var expectedDeviceConfig = ContextOuterClass.DeviceConfig.newBuilder() .addAllConfigRules(List.of(expectedConfigRuleA, expectedConfigRuleB)) .build(); final var expectedDeviceEvent = ContextOuterClass.DeviceEvent.newBuilder() .setDeviceId(expectedDeviceId) .setEvent(expectedEvent) .setDeviceConfig(expectedDeviceConfig) .build(); final var creationEvent = new Event(1, EventTypeEnum.CREATE); final var deviceEvent = new DeviceEvent("deviceId", creationEvent); final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA"); final var configRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB"); final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA); final var configRuleTypeB = new ConfigRuleTypeCustom(configRuleCustomB); final var configRuleA = new ConfigRule(ConfigActionEnum.SET, configRuleTypeA); final var configRuleB = new ConfigRule(ConfigActionEnum.DELETE, configRuleTypeB); final var deviceConfig = new DeviceConfig(List.of(configRuleA, configRuleB)); final var deviceEvent = new DeviceEvent("deviceId", creationEvent, deviceConfig); final var serializedDeviceEvent = serializer.serialize(deviceEvent); assertThat(serializedDeviceEvent).usingRecursiveComparison().isEqualTo(expectedDeviceEvent); Loading @@ -412,7 +449,22 @@ class SerializerTest { final var expectedTimestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build(); final var creationEvent = new Event(1, expectedEventType); final var expectedDeviceEvent = new DeviceEvent(dummyDeviceId, creationEvent); final var expectedConfigRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA"); final var expectedConfigRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB"); final var expectedConfigRuleTypeA = new ConfigRuleTypeCustom(expectedConfigRuleCustomA); final var expectedConfigRuleTypeB = new ConfigRuleTypeCustom(expectedConfigRuleCustomB); final var expectedConfigRuleA = new ConfigRule(ConfigActionEnum.SET, expectedConfigRuleTypeA); final var expectedConfigRuleB = new ConfigRule(ConfigActionEnum.DELETE, expectedConfigRuleTypeB); final var expectedDeviceConfig = new DeviceConfig(List.of(expectedConfigRuleA, expectedConfigRuleB)); final var expectedDeviceEvent = new DeviceEvent(dummyDeviceId, creationEvent, expectedDeviceConfig); final var deviceUuid = Uuid.newBuilder().setUuid("deviceId"); final var deviceId = DeviceId.newBuilder().setDeviceUuid(deviceUuid).build(); Loading @@ -421,8 +473,38 @@ class SerializerTest { .setTimestamp(expectedTimestamp) .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_REMOVE) .build(); final var configRuleCustomA = ContextOuterClass.ConfigRule_Custom.newBuilder() .setResourceKey("resourceKeyA") .setResourceValue("resourceValueA") .build(); final var configRuleCustomB = ContextOuterClass.ConfigRule_Custom.newBuilder() .setResourceKey("resourceKeyB") .setResourceValue("resourceValueB") .build(); final var configRuleA = ContextOuterClass.ConfigRule.newBuilder() .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) .setCustom(configRuleCustomA) .build(); final var configRuleB = ContextOuterClass.ConfigRule.newBuilder() .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE) .setCustom(configRuleCustomB) .build(); final var deviceConfig = ContextOuterClass.DeviceConfig.newBuilder() .addAllConfigRules(List.of(configRuleA, configRuleB)) .build(); final var serializedDeviceEvent = ContextOuterClass.DeviceEvent.newBuilder().setDeviceId(deviceId).setEvent(event).build(); ContextOuterClass.DeviceEvent.newBuilder() .setDeviceId(deviceId) .setEvent(event) .setDeviceConfig(deviceConfig) .build(); final var deviceEvent = serializer.deserialize(serializedDeviceEvent); assertThat(deviceEvent).usingRecursiveComparison().isEqualTo(expectedDeviceEvent); Loading