diff --git a/src/main/java/de/rwth/idsg/steve/service/ChargePointServiceClient.java b/src/main/java/de/rwth/idsg/steve/service/ChargePointServiceClient.java index f34681b5f..bc4a199f1 100644 --- a/src/main/java/de/rwth/idsg/steve/service/ChargePointServiceClient.java +++ b/src/main/java/de/rwth/idsg/steve/service/ChargePointServiceClient.java @@ -19,8 +19,8 @@ package de.rwth.idsg.steve.service; import de.rwth.idsg.steve.SteveException; -import de.rwth.idsg.steve.ocpp.ChargePointServiceInvoker; import de.rwth.idsg.steve.ocpp.ChargePointServiceInvokerImpl; +import de.rwth.idsg.steve.ocpp.OcppCallback; import de.rwth.idsg.steve.ocpp.OcppVersion; import de.rwth.idsg.steve.ocpp.task.CancelReservationTask; import de.rwth.idsg.steve.ocpp.task.ChangeAvailabilityTask; @@ -70,6 +70,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import ocpp.cp._2015._10.ChargingProfilePurposeType; +import ocpp.cp._2015._10.GetCompositeScheduleResponse; import org.joda.time.DateTime; import org.springframework.stereotype.Service; @@ -97,9 +98,15 @@ public class ChargePointServiceClient { // Multiple Execution - since OCPP 1.2 // ------------------------------------------------------------------------- - public int changeAvailability(OcppVersion ocppVersion, ChangeAvailabilityParams params) { + @SafeVarargs + public final int changeAvailability(OcppVersion ocppVersion, ChangeAvailabilityParams params, + OcppCallback... callbacks) { ChangeAvailabilityTask task = new ChangeAvailabilityTask(ocppVersion, params); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forEach(task.getParams().getChargePointSelectList()) .execute(c -> invoker.changeAvailability(c, task)); @@ -107,9 +114,15 @@ public int changeAvailability(OcppVersion ocppVersion, ChangeAvailabilityParams return taskStore.add(task); } - public int changeConfiguration(OcppVersion ocppVersion, ChangeConfigurationParams params) { + @SafeVarargs + public final int changeConfiguration(OcppVersion ocppVersion, ChangeConfigurationParams params, + OcppCallback... callbacks) { ChangeConfigurationTask task = new ChangeConfigurationTask(ocppVersion, params); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forEach(task.getParams().getChargePointSelectList()) .execute(c -> invoker.changeConfiguration(c, task)); @@ -117,9 +130,15 @@ public int changeConfiguration(OcppVersion ocppVersion, ChangeConfigurationParam return taskStore.add(task); } - public int clearCache(OcppVersion ocppVersion, MultipleChargePointSelect params) { + @SafeVarargs + public final int clearCache(OcppVersion ocppVersion, MultipleChargePointSelect params, + OcppCallback... callbacks) { ClearCacheTask task = new ClearCacheTask(ocppVersion, params); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forEach(task.getParams().getChargePointSelectList()) .execute(c -> invoker.clearCache(c, task)); @@ -127,9 +146,15 @@ public int clearCache(OcppVersion ocppVersion, MultipleChargePointSelect params) return taskStore.add(task); } - public int getDiagnostics(OcppVersion ocppVersion, GetDiagnosticsParams params) { + @SafeVarargs + public final int getDiagnostics(OcppVersion ocppVersion, GetDiagnosticsParams params, + OcppCallback... callbacks) { GetDiagnosticsTask task = new GetDiagnosticsTask(ocppVersion, params); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forEach(task.getParams().getChargePointSelectList()) .execute(c -> invoker.getDiagnostics(c, task)); @@ -137,9 +162,15 @@ public int getDiagnostics(OcppVersion ocppVersion, GetDiagnosticsParams params) return taskStore.add(task); } - public int reset(OcppVersion ocppVersion, ResetParams params) { + @SafeVarargs + public final int reset(OcppVersion ocppVersion, ResetParams params, + OcppCallback... callbacks) { ResetTask task = new ResetTask(ocppVersion, params); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forEach(task.getParams().getChargePointSelectList()) .execute(c -> invoker.reset(c, task)); @@ -147,9 +178,15 @@ public int reset(OcppVersion ocppVersion, ResetParams params) { return taskStore.add(task); } - public int updateFirmware(OcppVersion ocppVersion, UpdateFirmwareParams params) { + @SafeVarargs + public final int updateFirmware(OcppVersion ocppVersion, UpdateFirmwareParams params, + OcppCallback... callbacks) { UpdateFirmwareTask task = new UpdateFirmwareTask(ocppVersion, params); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forEach(task.getParams().getChargePointSelectList()) .execute(c -> invoker.updateFirmware(c, task)); @@ -161,9 +198,15 @@ public int updateFirmware(OcppVersion ocppVersion, UpdateFirmwareParams params) // Single Execution - since OCPP 1.2 // ------------------------------------------------------------------------- - public int remoteStartTransaction(OcppVersion ocppVersion, RemoteStartTransactionParams params) { + @SafeVarargs + public final int remoteStartTransaction(OcppVersion ocppVersion, RemoteStartTransactionParams params, + OcppCallback... callbacks) { RemoteStartTransactionTask task = new RemoteStartTransactionTask(ocppVersion, params); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forFirst(task.getParams().getChargePointSelectList()) .execute(c -> invoker.remoteStartTransaction(c, task)); @@ -171,9 +214,15 @@ public int remoteStartTransaction(OcppVersion ocppVersion, RemoteStartTransactio return taskStore.add(task); } - public int remoteStopTransaction(OcppVersion ocppVersion, RemoteStopTransactionParams params) { + @SafeVarargs + public final int remoteStopTransaction(OcppVersion ocppVersion, RemoteStopTransactionParams params, + OcppCallback... callbacks) { RemoteStopTransactionTask task = new RemoteStopTransactionTask(ocppVersion, params); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forFirst(task.getParams().getChargePointSelectList()) .execute(c -> invoker.remoteStopTransaction(c, task)); @@ -181,9 +230,15 @@ public int remoteStopTransaction(OcppVersion ocppVersion, RemoteStopTransactionP return taskStore.add(task); } - public int unlockConnector(OcppVersion ocppVersion, UnlockConnectorParams params) { + @SafeVarargs + public final int unlockConnector(OcppVersion ocppVersion, UnlockConnectorParams params, + OcppCallback... callbacks) { UnlockConnectorTask task = new UnlockConnectorTask(ocppVersion, params); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forFirst(task.getParams().getChargePointSelectList()) .execute(c -> invoker.unlockConnector(c, task)); @@ -195,9 +250,15 @@ public int unlockConnector(OcppVersion ocppVersion, UnlockConnectorParams params // Multiple Execution - since OCPP 1.5 // ------------------------------------------------------------------------- - public int dataTransfer(OcppVersion ocppVersion, DataTransferParams params) { + @SafeVarargs + public final int dataTransfer(OcppVersion ocppVersion, DataTransferParams params, + OcppCallback... callbacks) { DataTransferTask task = new DataTransferTask(ocppVersion, params); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forEach(task.getParams().getChargePointSelectList()) .execute(c -> invoker.dataTransfer(c, task)); @@ -205,9 +266,15 @@ public int dataTransfer(OcppVersion ocppVersion, DataTransferParams params) { return taskStore.add(task); } - public int getConfiguration(OcppVersion ocppVersion, GetConfigurationParams params) { + @SafeVarargs + public final int getConfiguration(OcppVersion ocppVersion, GetConfigurationParams params, + OcppCallback... callbacks) { GetConfigurationTask task = new GetConfigurationTask(ocppVersion, params); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forEach(task.getParams().getChargePointSelectList()) .execute(c -> invoker.getConfiguration(c, task)); @@ -215,9 +282,15 @@ public int getConfiguration(OcppVersion ocppVersion, GetConfigurationParams para return taskStore.add(task); } - public int getLocalListVersion(OcppVersion ocppVersion, MultipleChargePointSelect params) { + @SafeVarargs + public final int getLocalListVersion(OcppVersion ocppVersion, MultipleChargePointSelect params, + OcppCallback... callbacks) { GetLocalListVersionTask task = new GetLocalListVersionTask(ocppVersion, params); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forEach(task.getParams().getChargePointSelectList()) .execute(c -> invoker.getLocalListVersion(c, task)); @@ -225,9 +298,15 @@ public int getLocalListVersion(OcppVersion ocppVersion, MultipleChargePointSelec return taskStore.add(task); } - public int sendLocalList(OcppVersion ocppVersion, SendLocalListParams params) { + @SafeVarargs + public final int sendLocalList(OcppVersion ocppVersion, SendLocalListParams params, + OcppCallback... callbacks) { SendLocalListTask task = new SendLocalListTask(ocppVersion, params, ocppTagService); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forEach(task.getParams().getChargePointSelectList()) .execute(c -> invoker.sendLocalList(c, task)); @@ -239,7 +318,9 @@ public int sendLocalList(OcppVersion ocppVersion, SendLocalListParams params) { // Single Execution - since OCPP 1.5 // ------------------------------------------------------------------------- - public int reserveNow(OcppVersion ocppVersion, ReserveNowParams params) { + @SafeVarargs + public final int reserveNow(OcppVersion ocppVersion, ReserveNowParams params, + OcppCallback... callbacks) { List list = params.getChargePointSelectList(); InsertReservationParams res = InsertReservationParams.builder() @@ -256,6 +337,10 @@ public int reserveNow(OcppVersion ocppVersion, ReserveNowParams params) { EnhancedReserveNowParams enhancedParams = new EnhancedReserveNowParams(params, reservationId, parentIdTag); ReserveNowTask task = new ReserveNowTask(ocppVersion, enhancedParams, reservationRepository); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forFirst(task.getParams().getChargePointSelectList()) .execute(c -> invoker.reserveNow(c, task)); @@ -263,9 +348,15 @@ public int reserveNow(OcppVersion ocppVersion, ReserveNowParams params) { return taskStore.add(task); } - public int cancelReservation(OcppVersion ocppVersion, CancelReservationParams params) { + @SafeVarargs + public final int cancelReservation(OcppVersion ocppVersion, CancelReservationParams params, + OcppCallback... callbacks) { CancelReservationTask task = new CancelReservationTask(ocppVersion, params, reservationRepository); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forFirst(task.getParams().getChargePointSelectList()) .execute(c -> invoker.cancelReservation(c, task)); @@ -277,9 +368,15 @@ public int cancelReservation(OcppVersion ocppVersion, CancelReservationParams pa // Multiple Execution - since OCPP 1.6 // ------------------------------------------------------------------------- - public int triggerMessage(OcppVersion ocppVersion, TriggerMessageParams params) { + @SafeVarargs + public final int triggerMessage(OcppVersion ocppVersion, TriggerMessageParams params, + OcppCallback... callbacks) { TriggerMessageTask task = new TriggerMessageTask(ocppVersion, params); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forEach(task.getParams().getChargePointSelectList()) .execute(c -> invoker.triggerMessage(c, task)); @@ -287,7 +384,9 @@ public int triggerMessage(OcppVersion ocppVersion, TriggerMessageParams params) return taskStore.add(task); } - public int setChargingProfile(OcppVersion ocppVersion, SetChargingProfileParams params) { + @SafeVarargs + public final int setChargingProfile(OcppVersion ocppVersion, SetChargingProfileParams params, + OcppCallback... callbacks) { ChargingProfile.Details details = chargingProfileRepository.getDetails(params.getChargingProfilePk()); checkAdditionalConstraints(params, details); @@ -295,6 +394,10 @@ public int setChargingProfile(OcppVersion ocppVersion, SetChargingProfileParams EnhancedSetChargingProfileParams enhancedParams = new EnhancedSetChargingProfileParams(params, details); SetChargingProfileTask task = new SetChargingProfileTask(ocppVersion, enhancedParams, chargingProfileRepository); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forEach(task.getParams().getChargePointSelectList()) .execute(c -> invoker.setChargingProfile(c, task)); @@ -302,9 +405,15 @@ public int setChargingProfile(OcppVersion ocppVersion, SetChargingProfileParams return taskStore.add(task); } - public int clearChargingProfile(OcppVersion ocppVersion, ClearChargingProfileParams params) { + @SafeVarargs + public final int clearChargingProfile(OcppVersion ocppVersion, ClearChargingProfileParams params, + OcppCallback... callbacks) { ClearChargingProfileTask task = new ClearChargingProfileTask(ocppVersion, params, chargingProfileRepository); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forEach(task.getParams().getChargePointSelectList()) .execute(c -> invoker.clearChargingProfile(c, task)); @@ -312,9 +421,15 @@ public int clearChargingProfile(OcppVersion ocppVersion, ClearChargingProfilePar return taskStore.add(task); } - public int getCompositeSchedule(OcppVersion ocppVersion, GetCompositeScheduleParams params) { + @SafeVarargs + public final int getCompositeSchedule(OcppVersion ocppVersion, GetCompositeScheduleParams params, + OcppCallback... callbacks) { GetCompositeScheduleTask task = new GetCompositeScheduleTask(ocppVersion, params); + for (var callback : callbacks) { + task.addCallback(callback); + } + BackgroundService.with(executorService) .forEach(task.getParams().getChargePointSelectList()) .execute(c -> invoker.getCompositeSchedule(c, task));