Loading proto/automation.proto +6 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ service AutomationService { rpc ZtpGetDeviceRole(DeviceRoleId) returns (DeviceRole) {} rpc ZtpGetDeviceRolesByDeviceId(context.DeviceId) returns (DeviceRoleList) {} rpc ZtpAdd(DeviceRole) returns (DeviceRoleState) {} rpc ZtpUpdate(DeviceRole) returns (DeviceRoleState) {} rpc ZtpUpdate(DeviceRoleConfig) returns (DeviceRoleState) {} rpc ZtpDelete(DeviceRole) returns (DeviceRoleState) {} rpc ZtpDeleteAll(context.Empty) returns (DeviceDeletionResult) {} } Loading @@ -43,6 +43,11 @@ message DeviceRole { DeviceRoleType devRoleType = 2; } message DeviceRoleConfig { DeviceRole devRole = 1; context.DeviceConfig devConfig = 2; } message DeviceRoleList { repeated DeviceRole devRole = 1; } Loading src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java +17 −13 Original line number Diff line number Diff line Loading @@ -17,9 +17,12 @@ package eu.teraflow.automation; import automation.Automation; import automation.Automation.DeviceRoleConfig; import automation.Automation.DeviceRoleState; import context.ContextOuterClass; import eu.teraflow.automation.context.model.Device; import eu.teraflow.automation.model.DeviceRoleId; import eu.teraflow.automation.model.DeviceState; import io.quarkus.grpc.GrpcService; import io.smallrye.mutiny.Uni; import javax.inject.Inject; Loading Loading @@ -56,17 +59,19 @@ public class AutomationGatewayImpl implements AutomationGateway { return automationService .addDevice(deviceId) .onItem() .transform(device -> transformToDeviceRoleState(device, devRoleId)); .transform(device -> transformToDeviceRoleState(device, devRoleId, DeviceState.CREATED)); } @Override public Uni<Automation.DeviceRoleState> ztpUpdate(Automation.DeviceRole request) { return Uni.createFrom() .item( () -> Automation.DeviceRoleState.newBuilder() .setDevRoleId(request.getDevRoleId()) .build()); public Uni<DeviceRoleState> ztpUpdate(DeviceRoleConfig request) { final var devRoleId = request.getDevRole().getDevRoleId().getDevRoleId().getUuid(); final var deviceId = serializer.deserialize(request.getDevRole().getDevRoleId().getDevId()); final var deviceConfig = serializer.deserialize(request.getDevConfig()); return automationService .updateDevice(deviceId, deviceConfig) .onItem() .transform(device -> transformToDeviceRoleState(device, devRoleId, DeviceState.UPDATED)); } @Override Loading @@ -84,16 +89,15 @@ public class AutomationGatewayImpl implements AutomationGateway { return Uni.createFrom().item(() -> Automation.DeviceDeletionResult.newBuilder().build()); } // TODO When `DeviceRoleState` domain object will be created, move this method to Serializer class // and create related tests private Automation.DeviceRoleState transformToDeviceRoleState(Device device, String devRoleId) { private Automation.DeviceRoleState transformToDeviceRoleState( Device device, String devRoleId, DeviceState deviceState) { final var deviceRoleId = new DeviceRoleId(devRoleId, device.getDeviceId()); final var serializeDeviceRoleId = serializer.serialize(deviceRoleId); final var serializedDeviceState = serializer.serialize(deviceState); return Automation.DeviceRoleState.newBuilder() .setDevRoleId(serializeDeviceRoleId) .setDevRoleState(Automation.ZtpDeviceState.ZTP_DEV_STATE_CREATED) .setDevRoleState(serializedDeviceState) .build(); } } src/automation/src/main/java/eu/teraflow/automation/AutomationService.java +3 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package eu.teraflow.automation; import eu.teraflow.automation.context.model.Device; import eu.teraflow.automation.context.model.DeviceConfig; import io.smallrye.mutiny.Uni; public interface AutomationService { Loading @@ -24,4 +25,6 @@ public interface AutomationService { Uni<Device> addDevice(String deviceId); Uni<Device> deleteDevice(String deviceId); Uni<Device> updateDevice(String deviceId, DeviceConfig deviceConfig); } src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java +30 −3 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package eu.teraflow.automation; import eu.teraflow.automation.context.ContextService; import eu.teraflow.automation.context.model.Device; import eu.teraflow.automation.context.model.DeviceConfig; import eu.teraflow.automation.device.DeviceService; import io.smallrye.mutiny.Uni; import javax.enterprise.context.ApplicationScoped; Loading @@ -27,6 +28,7 @@ import org.jboss.logging.Logger; @ApplicationScoped public class AutomationServiceImpl implements AutomationService { private static final Logger LOGGER = Logger.getLogger(AutomationServiceImpl.class); private static final String MESSAGE = "Retrieved %s"; private final DeviceService deviceService; private final ContextService contextService; Loading @@ -43,14 +45,13 @@ public class AutomationServiceImpl implements AutomationService { final var deserializedDeviceUni = contextService.getDevice(deviceId); deserializedDeviceUni // TODO fix subscribe .subscribe() .with( device -> { final var id = deviceId; if (!device.isEnabled()) { LOGGER.infof("Retrieved %s", device); LOGGER.infof(MESSAGE, device); final var initialConfiguration = deviceService.getInitialConfiguration(device.getDeviceId()); Loading Loading @@ -91,7 +92,7 @@ public class AutomationServiceImpl implements AutomationService { device -> { final var id = deviceId; LOGGER.infof("Retrieved %s", device); LOGGER.infof(MESSAGE, device); final var empty = deviceService.deleteDevice(device.getDeviceId()); Loading @@ -102,4 +103,30 @@ public class AutomationServiceImpl implements AutomationService { return deserializedDeviceUni; } @Override public Uni<Device> updateDevice(String deviceId, DeviceConfig deviceConfig) { final var deserializedDeviceUni = contextService.getDevice(deviceId); deserializedDeviceUni .subscribe() .with( device -> { final var id = deviceId; LOGGER.infof(MESSAGE, device); device.setDeviceConfiguration(deviceConfig); final var updatedDeviceIdUni = deviceService.configureDevice(device); updatedDeviceIdUni .subscribe() .with( configuredDeviceId -> LOGGER.infof( "Device [%s] has been updated successfully with %s.\n", id, deviceConfig)); }); return deserializedDeviceUni; } } src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java +3 −1 Original line number Diff line number Diff line Loading @@ -77,8 +77,10 @@ public class ContextSubscriber { LOGGER.infof("Received %s for device [%s]", event, deviceId); 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(). case UNDEFINED: logWarningMessage(event, deviceId, eventType); break; Loading Loading
proto/automation.proto +6 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ service AutomationService { rpc ZtpGetDeviceRole(DeviceRoleId) returns (DeviceRole) {} rpc ZtpGetDeviceRolesByDeviceId(context.DeviceId) returns (DeviceRoleList) {} rpc ZtpAdd(DeviceRole) returns (DeviceRoleState) {} rpc ZtpUpdate(DeviceRole) returns (DeviceRoleState) {} rpc ZtpUpdate(DeviceRoleConfig) returns (DeviceRoleState) {} rpc ZtpDelete(DeviceRole) returns (DeviceRoleState) {} rpc ZtpDeleteAll(context.Empty) returns (DeviceDeletionResult) {} } Loading @@ -43,6 +43,11 @@ message DeviceRole { DeviceRoleType devRoleType = 2; } message DeviceRoleConfig { DeviceRole devRole = 1; context.DeviceConfig devConfig = 2; } message DeviceRoleList { repeated DeviceRole devRole = 1; } Loading
src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java +17 −13 Original line number Diff line number Diff line Loading @@ -17,9 +17,12 @@ package eu.teraflow.automation; import automation.Automation; import automation.Automation.DeviceRoleConfig; import automation.Automation.DeviceRoleState; import context.ContextOuterClass; import eu.teraflow.automation.context.model.Device; import eu.teraflow.automation.model.DeviceRoleId; import eu.teraflow.automation.model.DeviceState; import io.quarkus.grpc.GrpcService; import io.smallrye.mutiny.Uni; import javax.inject.Inject; Loading Loading @@ -56,17 +59,19 @@ public class AutomationGatewayImpl implements AutomationGateway { return automationService .addDevice(deviceId) .onItem() .transform(device -> transformToDeviceRoleState(device, devRoleId)); .transform(device -> transformToDeviceRoleState(device, devRoleId, DeviceState.CREATED)); } @Override public Uni<Automation.DeviceRoleState> ztpUpdate(Automation.DeviceRole request) { return Uni.createFrom() .item( () -> Automation.DeviceRoleState.newBuilder() .setDevRoleId(request.getDevRoleId()) .build()); public Uni<DeviceRoleState> ztpUpdate(DeviceRoleConfig request) { final var devRoleId = request.getDevRole().getDevRoleId().getDevRoleId().getUuid(); final var deviceId = serializer.deserialize(request.getDevRole().getDevRoleId().getDevId()); final var deviceConfig = serializer.deserialize(request.getDevConfig()); return automationService .updateDevice(deviceId, deviceConfig) .onItem() .transform(device -> transformToDeviceRoleState(device, devRoleId, DeviceState.UPDATED)); } @Override Loading @@ -84,16 +89,15 @@ public class AutomationGatewayImpl implements AutomationGateway { return Uni.createFrom().item(() -> Automation.DeviceDeletionResult.newBuilder().build()); } // TODO When `DeviceRoleState` domain object will be created, move this method to Serializer class // and create related tests private Automation.DeviceRoleState transformToDeviceRoleState(Device device, String devRoleId) { private Automation.DeviceRoleState transformToDeviceRoleState( Device device, String devRoleId, DeviceState deviceState) { final var deviceRoleId = new DeviceRoleId(devRoleId, device.getDeviceId()); final var serializeDeviceRoleId = serializer.serialize(deviceRoleId); final var serializedDeviceState = serializer.serialize(deviceState); return Automation.DeviceRoleState.newBuilder() .setDevRoleId(serializeDeviceRoleId) .setDevRoleState(Automation.ZtpDeviceState.ZTP_DEV_STATE_CREATED) .setDevRoleState(serializedDeviceState) .build(); } }
src/automation/src/main/java/eu/teraflow/automation/AutomationService.java +3 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package eu.teraflow.automation; import eu.teraflow.automation.context.model.Device; import eu.teraflow.automation.context.model.DeviceConfig; import io.smallrye.mutiny.Uni; public interface AutomationService { Loading @@ -24,4 +25,6 @@ public interface AutomationService { Uni<Device> addDevice(String deviceId); Uni<Device> deleteDevice(String deviceId); Uni<Device> updateDevice(String deviceId, DeviceConfig deviceConfig); }
src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java +30 −3 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package eu.teraflow.automation; import eu.teraflow.automation.context.ContextService; import eu.teraflow.automation.context.model.Device; import eu.teraflow.automation.context.model.DeviceConfig; import eu.teraflow.automation.device.DeviceService; import io.smallrye.mutiny.Uni; import javax.enterprise.context.ApplicationScoped; Loading @@ -27,6 +28,7 @@ import org.jboss.logging.Logger; @ApplicationScoped public class AutomationServiceImpl implements AutomationService { private static final Logger LOGGER = Logger.getLogger(AutomationServiceImpl.class); private static final String MESSAGE = "Retrieved %s"; private final DeviceService deviceService; private final ContextService contextService; Loading @@ -43,14 +45,13 @@ public class AutomationServiceImpl implements AutomationService { final var deserializedDeviceUni = contextService.getDevice(deviceId); deserializedDeviceUni // TODO fix subscribe .subscribe() .with( device -> { final var id = deviceId; if (!device.isEnabled()) { LOGGER.infof("Retrieved %s", device); LOGGER.infof(MESSAGE, device); final var initialConfiguration = deviceService.getInitialConfiguration(device.getDeviceId()); Loading Loading @@ -91,7 +92,7 @@ public class AutomationServiceImpl implements AutomationService { device -> { final var id = deviceId; LOGGER.infof("Retrieved %s", device); LOGGER.infof(MESSAGE, device); final var empty = deviceService.deleteDevice(device.getDeviceId()); Loading @@ -102,4 +103,30 @@ public class AutomationServiceImpl implements AutomationService { return deserializedDeviceUni; } @Override public Uni<Device> updateDevice(String deviceId, DeviceConfig deviceConfig) { final var deserializedDeviceUni = contextService.getDevice(deviceId); deserializedDeviceUni .subscribe() .with( device -> { final var id = deviceId; LOGGER.infof(MESSAGE, device); device.setDeviceConfiguration(deviceConfig); final var updatedDeviceIdUni = deviceService.configureDevice(device); updatedDeviceIdUni .subscribe() .with( configuredDeviceId -> LOGGER.infof( "Device [%s] has been updated successfully with %s.\n", id, deviceConfig)); }); return deserializedDeviceUni; } }
src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java +3 −1 Original line number Diff line number Diff line Loading @@ -77,8 +77,10 @@ public class ContextSubscriber { LOGGER.infof("Received %s for device [%s]", event, deviceId); 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(). case UNDEFINED: logWarningMessage(event, deviceId, eventType); break; Loading