├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── dependabot.yml └── workflows │ ├── main.yml │ └── review.yml ├── .gitignore ├── .mvn └── wrapper │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── Dockerfile ├── LICENSE-HEADER.txt ├── LICENSE.txt ├── README.md ├── checkstyle.xml ├── docker-compose.yml ├── k8s ├── docker │ └── Dockerfile └── yaml │ ├── Deployment.yaml │ └── Service.yaml ├── maven-pmd-plugin-default.xml ├── mvnw ├── mvnw.cmd ├── pom.xml ├── src ├── main │ ├── java │ │ └── de │ │ │ └── rwth │ │ │ └── idsg │ │ │ └── steve │ │ │ ├── Application.java │ │ │ ├── ApplicationProfile.java │ │ │ ├── JettyServer.java │ │ │ ├── NotificationFeature.java │ │ │ ├── SteveAppContext.java │ │ │ ├── SteveConfiguration.java │ │ │ ├── SteveException.java │ │ │ ├── config │ │ │ ├── ApiAuthenticationManager.java │ │ │ ├── ApiDocsConfiguration.java │ │ │ ├── BeanConfiguration.java │ │ │ ├── DelegatingTaskExecutor.java │ │ │ ├── DelegatingTaskScheduler.java │ │ │ ├── OcppConfiguration.java │ │ │ ├── SecurityConfiguration.java │ │ │ └── WebSocketConfiguration.java │ │ │ ├── ocpp │ │ │ ├── ChargePointServiceInvoker.java │ │ │ ├── ChargePointServiceInvokerImpl.java │ │ │ ├── CommunicationTask.java │ │ │ ├── Ocpp15AndAboveTask.java │ │ │ ├── Ocpp16AndAboveTask.java │ │ │ ├── OcppCallback.java │ │ │ ├── OcppProtocol.java │ │ │ ├── OcppTransport.java │ │ │ ├── OcppVersion.java │ │ │ ├── RequestResult.java │ │ │ ├── TaskOrigin.java │ │ │ ├── converter │ │ │ │ ├── Convert.java │ │ │ │ ├── Server12to15.java │ │ │ │ ├── Server12to15Impl.java │ │ │ │ ├── Server15to16.java │ │ │ │ └── Server15to16Impl.java │ │ │ ├── soap │ │ │ │ ├── CentralSystemService12_SoapServer.java │ │ │ │ ├── CentralSystemService15_SoapServer.java │ │ │ │ ├── CentralSystemService16_SoapServer.java │ │ │ │ ├── ChargePointServiceSoapInvoker.java │ │ │ │ ├── ClientProvider.java │ │ │ │ ├── ClientProviderWithCache.java │ │ │ │ ├── LoggingFeatureProxy.java │ │ │ │ ├── MediatorInInterceptor.java │ │ │ │ ├── MessageHeaderInterceptor.java │ │ │ │ └── MessageIdInterceptor.java │ │ │ ├── task │ │ │ │ ├── CancelReservationTask.java │ │ │ │ ├── ChangeAvailabilityTask.java │ │ │ │ ├── ChangeConfigurationTask.java │ │ │ │ ├── ClearCacheTask.java │ │ │ │ ├── ClearChargingProfileTask.java │ │ │ │ ├── DataTransferTask.java │ │ │ │ ├── GetCompositeScheduleTask.java │ │ │ │ ├── GetConfigurationTask.java │ │ │ │ ├── GetDiagnosticsTask.java │ │ │ │ ├── GetLocalListVersionTask.java │ │ │ │ ├── RemoteStartTransactionTask.java │ │ │ │ ├── RemoteStopTransactionTask.java │ │ │ │ ├── ReserveNowTask.java │ │ │ │ ├── ResetTask.java │ │ │ │ ├── SendLocalListTask.java │ │ │ │ ├── SetChargingProfileTask.java │ │ │ │ ├── SetChargingProfileTaskAdhoc.java │ │ │ │ ├── SetChargingProfileTaskFromDB.java │ │ │ │ ├── TriggerMessageTask.java │ │ │ │ ├── UnlockConnectorTask.java │ │ │ │ └── UpdateFirmwareTask.java │ │ │ └── ws │ │ │ │ ├── AbstractTypeStore.java │ │ │ │ ├── AbstractWebSocketEndpoint.java │ │ │ │ ├── ChargePointServiceJsonInvoker.java │ │ │ │ ├── ConcurrentWebSocketHandler.java │ │ │ │ ├── ErrorFactory.java │ │ │ │ ├── FutureResponseContextStore.java │ │ │ │ ├── FutureResponseContextStoreImpl.java │ │ │ │ ├── JsonObjectMapper.java │ │ │ │ ├── OcppWebSocketHandshakeHandler.java │ │ │ │ ├── PingTask.java │ │ │ │ ├── SessionContextStore.java │ │ │ │ ├── SessionContextStoreImpl.java │ │ │ │ ├── TypeStore.java │ │ │ │ ├── WebSocketLogger.java │ │ │ │ ├── custom │ │ │ │ ├── CustomStringModule.java │ │ │ │ ├── EnumMixin.java │ │ │ │ ├── EnumProcessor.java │ │ │ │ ├── MeterValue15Deserializer.java │ │ │ │ ├── MeterValue15Mixin.java │ │ │ │ ├── WsSessionSelectStrategy.java │ │ │ │ └── WsSessionSelectStrategyEnum.java │ │ │ │ ├── data │ │ │ │ ├── ActionResponsePair.java │ │ │ │ ├── CommunicationContext.java │ │ │ │ ├── ErrorCode.java │ │ │ │ ├── FutureResponseContext.java │ │ │ │ ├── MessageType.java │ │ │ │ ├── OcppJsonCall.java │ │ │ │ ├── OcppJsonError.java │ │ │ │ ├── OcppJsonMessage.java │ │ │ │ ├── OcppJsonResponse.java │ │ │ │ ├── OcppJsonResult.java │ │ │ │ └── SessionContext.java │ │ │ │ ├── ocpp12 │ │ │ │ ├── Ocpp12JacksonModule.java │ │ │ │ ├── Ocpp12TypeStore.java │ │ │ │ └── Ocpp12WebSocketEndpoint.java │ │ │ │ ├── ocpp15 │ │ │ │ ├── Ocpp15JacksonModule.java │ │ │ │ ├── Ocpp15TypeStore.java │ │ │ │ └── Ocpp15WebSocketEndpoint.java │ │ │ │ ├── ocpp16 │ │ │ │ ├── Ocpp16JacksonModule.java │ │ │ │ ├── Ocpp16TypeStore.java │ │ │ │ └── Ocpp16WebSocketEndpoint.java │ │ │ │ └── pipeline │ │ │ │ ├── AbstractCallHandler.java │ │ │ │ ├── Deserializer.java │ │ │ │ ├── IncomingPipeline.java │ │ │ │ ├── OutgoingCallPipeline.java │ │ │ │ ├── Sender.java │ │ │ │ └── Serializer.java │ │ │ ├── repository │ │ │ ├── AddressRepository.java │ │ │ ├── ChargePointRepository.java │ │ │ ├── ChargingProfileRepository.java │ │ │ ├── GenericRepository.java │ │ │ ├── OcppServerRepository.java │ │ │ ├── OcppTagRepository.java │ │ │ ├── ReservationRepository.java │ │ │ ├── ReservationStatus.java │ │ │ ├── SettingsRepository.java │ │ │ ├── TaskStore.java │ │ │ ├── TransactionRepository.java │ │ │ ├── UserRepository.java │ │ │ ├── WebUserRepository.java │ │ │ ├── dto │ │ │ │ ├── ChargePoint.java │ │ │ │ ├── ChargePointSelect.java │ │ │ │ ├── ChargingProfile.java │ │ │ │ ├── ChargingProfileAssignment.java │ │ │ │ ├── ConnectorStatus.java │ │ │ │ ├── DbVersion.java │ │ │ │ ├── InsertConnectorStatusParams.java │ │ │ │ ├── InsertReservationParams.java │ │ │ │ ├── InsertTransactionParams.java │ │ │ │ ├── MailSettings.java │ │ │ │ ├── OcppTag.java │ │ │ │ ├── Reservation.java │ │ │ │ ├── TaskOverview.java │ │ │ │ ├── Transaction.java │ │ │ │ ├── TransactionDetails.java │ │ │ │ ├── TransactionStatusUpdate.java │ │ │ │ ├── UpdateChargeboxParams.java │ │ │ │ ├── UpdateTransactionParams.java │ │ │ │ └── User.java │ │ │ └── impl │ │ │ │ ├── AddressRepositoryImpl.java │ │ │ │ ├── ChargePointRepositoryImpl.java │ │ │ │ ├── ChargingProfileRepositoryImpl.java │ │ │ │ ├── GenericRepositoryImpl.java │ │ │ │ ├── OcppServerRepositoryImpl.java │ │ │ │ ├── OcppTagRepositoryImpl.java │ │ │ │ ├── ReservationRepositoryImpl.java │ │ │ │ ├── SettingsRepositoryImpl.java │ │ │ │ ├── TaskStoreImpl.java │ │ │ │ ├── TransactionRepositoryImpl.java │ │ │ │ ├── UserRepositoryImpl.java │ │ │ │ └── WebUserRepositoryImpl.java │ │ │ ├── service │ │ │ ├── AuthTagService.java │ │ │ ├── AuthTagServiceLocal.java │ │ │ ├── BackgroundService.java │ │ │ ├── CentralSystemService16_Service.java │ │ │ ├── ChargePointHelperService.java │ │ │ ├── ChargePointServiceClient.java │ │ │ ├── DummyReleaseCheckService.java │ │ │ ├── GithubReleaseCheckService.java │ │ │ ├── MailService.java │ │ │ ├── MailServiceDefault.java │ │ │ ├── NotificationService.java │ │ │ ├── OcppTagService.java │ │ │ ├── ReleaseCheckService.java │ │ │ ├── TransactionStopService.java │ │ │ ├── UnidentifiedIncomingObjectService.java │ │ │ ├── WebUserService.java │ │ │ ├── dto │ │ │ │ ├── EnhancedReserveNowParams.java │ │ │ │ └── UnidentifiedIncomingObject.java │ │ │ └── notification │ │ │ │ ├── OccpStationBooted.java │ │ │ │ ├── OcppStationStatusFailure.java │ │ │ │ ├── OcppStationWebSocketConnected.java │ │ │ │ ├── OcppStationWebSocketDisconnected.java │ │ │ │ ├── OcppTransactionEnded.java │ │ │ │ └── OcppTransactionStarted.java │ │ │ ├── utils │ │ │ ├── ConnectorStatusCountFilter.java │ │ │ ├── ConnectorStatusFilter.java │ │ │ ├── ControllerHelper.java │ │ │ ├── CountryCodesProvider.java │ │ │ ├── CustomDSL.java │ │ │ ├── DateConverter.java │ │ │ ├── DateTimeConverter.java │ │ │ ├── DateTimeUtils.java │ │ │ ├── InternetChecker.java │ │ │ ├── LogFileRetriever.java │ │ │ ├── OcppTagActivityRecordUtils.java │ │ │ ├── PropertiesFileLoader.java │ │ │ ├── StringUtils.java │ │ │ ├── TransactionStopServiceHelper.java │ │ │ └── mapper │ │ │ │ ├── AddressMapper.java │ │ │ │ ├── ChargePointDetailsMapper.java │ │ │ │ ├── ChargingProfileDetailsMapper.java │ │ │ │ ├── OcppTagFormMapper.java │ │ │ │ └── UserFormMapper.java │ │ │ └── web │ │ │ ├── BatchInsertConverter.java │ │ │ ├── ChargePointSelectEditor.java │ │ │ ├── GlobalControllerAdvice.java │ │ │ ├── LocalDateEditor.java │ │ │ ├── LocalDateTimeEditor.java │ │ │ ├── api │ │ │ ├── ApiControllerAdvice.java │ │ │ ├── OcppTagsRestController.java │ │ │ ├── TransactionsRestController.java │ │ │ └── exception │ │ │ │ └── BadRequestException.java │ │ │ ├── controller │ │ │ ├── AboutSettingsController.java │ │ │ ├── AjaxCallController.java │ │ │ ├── ChargePointsController.java │ │ │ ├── ChargingProfilesController.java │ │ │ ├── HomeController.java │ │ │ ├── LogController.java │ │ │ ├── Ocpp12Controller.java │ │ │ ├── Ocpp15Controller.java │ │ │ ├── Ocpp16Controller.java │ │ │ ├── OcppTagsController.java │ │ │ ├── SignOutController.java │ │ │ ├── TaskController.java │ │ │ ├── TransactionsReservationsController.java │ │ │ └── UsersController.java │ │ │ ├── dto │ │ │ ├── Address.java │ │ │ ├── ChargePointBatchInsertForm.java │ │ │ ├── ChargePointForm.java │ │ │ ├── ChargePointQueryForm.java │ │ │ ├── ChargingProfileAssignmentQueryForm.java │ │ │ ├── ChargingProfileForm.java │ │ │ ├── ChargingProfileQueryForm.java │ │ │ ├── ConnectorStatusForm.java │ │ │ ├── EndpointInfo.java │ │ │ ├── OcppJsonStatus.java │ │ │ ├── OcppTagBatchInsertForm.java │ │ │ ├── OcppTagForm.java │ │ │ ├── OcppTagQueryForm.java │ │ │ ├── QueryForm.java │ │ │ ├── ReleaseReport.java │ │ │ ├── ReleaseResponse.java │ │ │ ├── ReservationQueryForm.java │ │ │ ├── SettingsForm.java │ │ │ ├── Statistics.java │ │ │ ├── TransactionQueryForm.java │ │ │ ├── UserForm.java │ │ │ ├── UserQueryForm.java │ │ │ ├── UserSex.java │ │ │ └── ocpp │ │ │ │ ├── AvailabilityType.java │ │ │ │ ├── CancelReservationParams.java │ │ │ │ ├── ChangeAvailabilityParams.java │ │ │ │ ├── ChangeConfigurationParams.java │ │ │ │ ├── ChargePointSelection.java │ │ │ │ ├── ClearChargingProfileFilterType.java │ │ │ │ ├── ClearChargingProfileParams.java │ │ │ │ ├── ConfigurationKeyEnum.java │ │ │ │ ├── ConfigurationKeyReadWriteEnum.java │ │ │ │ ├── DataTransferParams.java │ │ │ │ ├── GetCompositeScheduleParams.java │ │ │ │ ├── GetConfigurationParams.java │ │ │ │ ├── GetDiagnosticsParams.java │ │ │ │ ├── MultipleChargePointSelect.java │ │ │ │ ├── RemoteStartTransactionParams.java │ │ │ │ ├── RemoteStopTransactionParams.java │ │ │ │ ├── ReserveNowParams.java │ │ │ │ ├── ResetParams.java │ │ │ │ ├── ResetType.java │ │ │ │ ├── SendLocalListParams.java │ │ │ │ ├── SendLocalListUpdateType.java │ │ │ │ ├── SetChargingProfileParams.java │ │ │ │ ├── SingleChargePointSelect.java │ │ │ │ ├── TriggerMessageEnum.java │ │ │ │ ├── TriggerMessageParams.java │ │ │ │ ├── UnlockConnectorParams.java │ │ │ │ └── UpdateFirmwareParams.java │ │ │ └── validation │ │ │ ├── ChargeBoxId.java │ │ │ ├── ChargeBoxIdListValidator.java │ │ │ ├── ChargeBoxIdValidator.java │ │ │ ├── EmailCollection.java │ │ │ ├── EmailCollectionValidator.java │ │ │ ├── IdTag.java │ │ │ ├── IdTagListValidator.java │ │ │ └── IdTagValidator.java │ └── resources │ │ ├── config │ │ ├── dev │ │ │ ├── logback.xml │ │ │ └── main.properties │ │ ├── docker │ │ │ ├── logback.xml │ │ │ └── main.properties │ │ ├── kubernetes │ │ │ ├── logback.xml │ │ │ └── main.properties │ │ ├── prod │ │ │ ├── logback.xml │ │ │ └── main.properties │ │ └── test │ │ │ ├── logback.xml │ │ │ └── main.properties │ │ ├── db │ │ └── migration │ │ │ ├── B1_0_5__stevedb.sql │ │ │ ├── V0_6_6__inital.sql │ │ │ ├── V0_6_7__update.sql │ │ │ ├── V0_6_8__update.sql │ │ │ ├── V0_6_9__update.sql │ │ │ ├── V0_7_0__update.sql │ │ │ ├── V0_7_1__update.sql │ │ │ ├── V0_7_2__update.sql │ │ │ ├── V0_7_3__update.sql │ │ │ ├── V0_7_6__update.sql │ │ │ ├── V0_7_7__update.sql │ │ │ ├── V0_7_8__update.sql │ │ │ ├── V0_7_9__update.sql │ │ │ ├── V0_8_0__update.sql │ │ │ ├── V0_8_1__update.sql │ │ │ ├── V0_8_2__update.sql │ │ │ ├── V0_8_4__update.sql │ │ │ ├── V0_8_5__update.sql │ │ │ ├── V0_8_6__update.sql │ │ │ ├── V0_8_7__update.sql │ │ │ ├── V0_8_8__update.sql │ │ │ ├── V0_8_9__update.sql │ │ │ ├── V0_9_0__update.sql │ │ │ ├── V0_9_1__update.sql │ │ │ ├── V0_9_2__update.sql │ │ │ ├── V0_9_3__update.sql │ │ │ ├── V0_9_4__update.sql │ │ │ ├── V0_9_5__update.sql │ │ │ ├── V0_9_6__update.sql │ │ │ ├── V0_9_7__update.sql │ │ │ ├── V0_9_8__update.sql │ │ │ ├── V0_9_9__update.sql │ │ │ ├── V1_0_0__update.sql │ │ │ ├── V1_0_1__update.sql │ │ │ ├── V1_0_2__update.sql │ │ │ ├── V1_0_3__update.sql │ │ │ ├── V1_0_4__update.sql │ │ │ ├── V1_0_5__update.sql │ │ │ ├── V1_0_6__update.sql │ │ │ └── V1_0_7__update.sql │ │ └── webapp │ │ ├── WEB-INF │ │ ├── views │ │ │ ├── 00-context.jsp │ │ │ ├── 00-cp-multiple.jsp │ │ │ ├── 00-cp-single.jsp │ │ │ ├── 00-error.jsp │ │ │ ├── 00-footer.jsp │ │ │ ├── 00-header.jsp │ │ │ ├── 00-op-bind-errors.jsp │ │ │ ├── GetConfigurationResponse.jsp │ │ │ ├── about.jsp │ │ │ ├── connectorStatus.jsp │ │ │ ├── data-man │ │ │ │ ├── 00-address.jsp │ │ │ │ ├── 00-charging-profile.jsp │ │ │ │ ├── 00-cp-misc.jsp │ │ │ │ ├── 00-ocppTag.jsp │ │ │ │ ├── 00-user-ocpp.jsp │ │ │ │ ├── 00-user-profile.jsp │ │ │ │ ├── chargepointAdd.jsp │ │ │ │ ├── chargepointDetails.jsp │ │ │ │ ├── chargepoints.jsp │ │ │ │ ├── chargingProfileAdd.jsp │ │ │ │ ├── chargingProfileAssignments.jsp │ │ │ │ ├── chargingProfileDetails.jsp │ │ │ │ ├── chargingProfiles.jsp │ │ │ │ ├── ocppTagAdd.jsp │ │ │ │ ├── ocppTagDetails.jsp │ │ │ │ ├── ocppTags.jsp │ │ │ │ ├── reservations.jsp │ │ │ │ ├── transactionDetails.jsp │ │ │ │ ├── transactions.jsp │ │ │ │ ├── userAdd.jsp │ │ │ │ ├── userDetails.jsp │ │ │ │ └── users.jsp │ │ │ ├── home.jsp │ │ │ ├── ocppJsonStatus.jsp │ │ │ ├── op-forms │ │ │ │ ├── CancelReservationForm.jsp │ │ │ │ ├── ChangeAvailabilityForm.jsp │ │ │ │ ├── ChangeConfigurationForm.jsp │ │ │ │ ├── ClearCacheForm.jsp │ │ │ │ ├── ClearChargingProfileForm.jsp │ │ │ │ ├── DataTransferForm.jsp │ │ │ │ ├── GetCompositeScheduleForm.jsp │ │ │ │ ├── GetConfigurationForm.jsp │ │ │ │ ├── GetDiagnosticsForm.jsp │ │ │ │ ├── GetLocalListForm.jsp │ │ │ │ ├── RemoteStartTransactionForm.jsp │ │ │ │ ├── RemoteStopTransactionForm.jsp │ │ │ │ ├── ReserveNowForm.jsp │ │ │ │ ├── ResetForm.jsp │ │ │ │ ├── SendLocalListForm.jsp │ │ │ │ ├── SetChargingProfileForm.jsp │ │ │ │ ├── TriggerMessageForm.jsp │ │ │ │ ├── UnlockConnectorForm.jsp │ │ │ │ └── UpdateFirmwareForm.jsp │ │ │ ├── op12 │ │ │ │ ├── ChangeAvailability.jsp │ │ │ │ ├── ChangeConfiguration.jsp │ │ │ │ ├── ClearCache.jsp │ │ │ │ ├── GetDiagnostics.jsp │ │ │ │ ├── RemoteStartTransaction.jsp │ │ │ │ ├── RemoteStopTransaction.jsp │ │ │ │ ├── Reset.jsp │ │ │ │ ├── UnlockConnector.jsp │ │ │ │ └── UpdateFirmware.jsp │ │ │ ├── op15 │ │ │ │ ├── CancelReservation.jsp │ │ │ │ ├── ChangeAvailability.jsp │ │ │ │ ├── ChangeConfiguration.jsp │ │ │ │ ├── ClearCache.jsp │ │ │ │ ├── DataTransfer.jsp │ │ │ │ ├── GetConfiguration.jsp │ │ │ │ ├── GetDiagnostics.jsp │ │ │ │ ├── GetLocalListVersion.jsp │ │ │ │ ├── RemoteStartTransaction.jsp │ │ │ │ ├── RemoteStopTransaction.jsp │ │ │ │ ├── ReserveNow.jsp │ │ │ │ ├── Reset.jsp │ │ │ │ ├── SendLocalList.jsp │ │ │ │ ├── UnlockConnector.jsp │ │ │ │ └── UpdateFirmware.jsp │ │ │ ├── op16 │ │ │ │ ├── CancelReservation.jsp │ │ │ │ ├── ChangeAvailability.jsp │ │ │ │ ├── ChangeConfiguration.jsp │ │ │ │ ├── ClearCache.jsp │ │ │ │ ├── ClearChargingProfile.jsp │ │ │ │ ├── DataTransfer.jsp │ │ │ │ ├── GetCompositeSchedule.jsp │ │ │ │ ├── GetCompositeScheduleResponse.jsp │ │ │ │ ├── GetConfiguration.jsp │ │ │ │ ├── GetDiagnostics.jsp │ │ │ │ ├── GetLocalListVersion.jsp │ │ │ │ ├── RemoteStartTransaction.jsp │ │ │ │ ├── RemoteStopTransaction.jsp │ │ │ │ ├── ReserveNow.jsp │ │ │ │ ├── Reset.jsp │ │ │ │ ├── SendLocalList.jsp │ │ │ │ ├── SetChargingProfile.jsp │ │ │ │ ├── TriggerMessage.jsp │ │ │ │ ├── UnlockConnector.jsp │ │ │ │ └── UpdateFirmware.jsp │ │ │ ├── settings.jsp │ │ │ ├── signin.jsp │ │ │ ├── snippets │ │ │ │ ├── clearChargingProfile.js │ │ │ │ ├── confKeySelect.js │ │ │ │ ├── datePicker-past.js │ │ │ │ ├── dateTimePicker-future.js │ │ │ │ ├── dateTimePicker-past.js │ │ │ │ ├── dateTimePicker.js │ │ │ │ ├── getConnectorIds.js │ │ │ │ ├── getConnectorIdsZeroAllowed.js │ │ │ │ ├── getReservationIds.js │ │ │ │ ├── getTransactionIds.js │ │ │ │ ├── periodTypeSelect.js │ │ │ │ ├── schedulePeriodsTable.js │ │ │ │ ├── sendLocalList.js │ │ │ │ └── sortable.js │ │ │ ├── taskResult.jsp │ │ │ └── tasks.jsp │ │ └── web.xml │ │ └── static │ │ ├── css │ │ ├── DroidSerif.ttf │ │ ├── images │ │ │ ├── ui-bg_diagonals-thick_18_b81900_40x40.png │ │ │ ├── ui-bg_diagonals-thick_20_666666_40x40.png │ │ │ ├── ui-bg_flat_10_000000_40x100.png │ │ │ ├── ui-bg_glass_100_f6f6f6_1x400.png │ │ │ ├── ui-bg_glass_100_fdf5ce_1x400.png │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ ├── ui-bg_gloss-wave_35_f6a828_500x100.png │ │ │ ├── ui-bg_highlight-soft_100_eeeeee_1x100.png │ │ │ ├── ui-bg_highlight-soft_75_ffe45c_1x100.png │ │ │ ├── ui-icons_222222_256x240.png │ │ │ ├── ui-icons_228ef1_256x240.png │ │ │ ├── ui-icons_ef8c08_256x240.png │ │ │ ├── ui-icons_ffd27a_256x240.png │ │ │ └── ui-icons_ffffff_256x240.png │ │ ├── jquery-ui-timepicker-addon.min.css │ │ ├── jquery-ui.min.css │ │ └── style.css │ │ ├── images │ │ ├── favicon.ico │ │ ├── info.png │ │ ├── logo.png │ │ ├── logo2.png │ │ └── offline-icon.svg │ │ └── js │ │ ├── jquery-2.0.3.min.js │ │ ├── jquery-ui-timepicker-addon.min.js │ │ ├── jquery-ui.min.js │ │ ├── script.js │ │ └── stupidtable.min.js └── test │ └── java │ └── de │ └── rwth │ └── idsg │ └── steve │ ├── ApplicationJsonTest.java │ ├── ApplicationTest.java │ ├── OperationalTestSoapOCPP16.java │ ├── StressTest.java │ ├── StressTestJsonOCPP16.java │ ├── StressTestSoapOCPP16.java │ ├── TypeStoreTest.java │ ├── issues │ ├── Issue1219.java │ ├── Issue72.java │ ├── Issue72LowLevelSoap.java │ ├── Issue73Fix.java │ └── Issue81.java │ ├── ocpp │ ├── OcppProtocolTest.java │ ├── OcppVersionTest.java │ └── ws │ │ └── custom │ │ └── CustomStringModuleTest.java │ ├── utils │ ├── Helpers.java │ ├── OcppJsonChargePoint.java │ ├── StressTester.java │ ├── StringUtilsTest.java │ ├── TransactionStopServiceHelperTest.java │ └── __DatabasePreparer__.java │ └── web │ ├── api │ ├── AbstractControllerTest.java │ ├── OcppTagsRestControllerTest.java │ └── TransactionRestControllerTest.java │ └── validation │ ├── ChargeBoxIdValidatorTest.java │ └── IdTagValidatorTest.java └── website ├── logo └── managed-by-steve.pdf └── screenshots ├── chargepoints.png ├── connector-status.png ├── home.png ├── lightsail-1-create-instance.PNG ├── lightsail-2-static-ip.PNG ├── lightsail-3-firewall.PNG ├── lightsail-4-create-database.PNG ├── lightsail-5-check-database-status.PNG ├── lightsail-6-connect-instance.PNG ├── ocpp-tags.png ├── ocpp12.png ├── ocpp15.png ├── reservations.png ├── settings.png ├── transactions.png └── users.png /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [goekay] 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Report a problem in this project 4 | 5 | --- 6 | 7 | #### Checklist 8 | 9 | - [ ] I checked other issues already, but found no answer/solution 10 | - [ ] I checked the documentation and wiki, but found no answer/solution 11 | - [ ] I am running the latest version and the issue still occurs 12 | - [ ] I am sure that this issue is about SteVe (and not about the charging station software or something unrelated to SteVe) 13 | 14 | #### Specifications 15 | ``` 16 | SteVe Version : ... 17 | Operating system : ... 18 | JDK : ... 19 | Database : ... 20 | ``` 21 | 22 | #### Expected Behavior 23 | 24 | ... 25 | 26 | #### Actual Behavior 27 | 28 | ... 29 | 30 | #### Steps to Reproduce the Problem 31 | 32 | 1. ... 33 | 2. ... 34 | 3. ... 35 | 36 | 37 | #### Additional context 38 | 39 | ... -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Request a feature in this project 4 | 5 | --- 6 | 7 | #### Checklist 8 | 9 | - [ ] I checked other issues already and found no answer 10 | - [ ] I checked the documentation and found no answer 11 | - [ ] I am running the latest version and the feature i am requesting is not implemented there 12 | 13 | #### Describe the problem you are trying to solve 14 | 15 | ... 16 | 17 | #### Describe the solution you'd like 18 | 19 | ... 20 | 21 | #### Describe alternative solutions or features you've considered 22 | 23 | ... 24 | 25 | #### Additional context 26 | 27 | ... -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Please see the documentation for all configuration options: 2 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 3 | 4 | version: 2 5 | updates: 6 | 7 | - package-ecosystem: "maven" 8 | directory: "/" 9 | open-pull-requests-limit: 10 10 | schedule: 11 | interval: "weekly" 12 | day: "saturday" 13 | 14 | - package-ecosystem: "github-actions" 15 | directory: "/" 16 | schedule: 17 | interval: "weekly" 18 | -------------------------------------------------------------------------------- /.github/workflows/review.yml: -------------------------------------------------------------------------------- 1 | name: analyze and review code 2 | on: [ push, pull_request ] 3 | 4 | jobs: 5 | license-check: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - uses: actions/checkout@v4 9 | with: 10 | fetch-depth: 0 11 | 12 | - name: Set up Java 17 13 | uses: actions/setup-java@v4 14 | with: 15 | java-version: 17 16 | distribution: 'temurin' 17 | cache: maven 18 | 19 | - name: Check with Maven 20 | run: mvn -B -V license:check --file pom.xml 21 | checkstyle: 22 | runs-on: 'ubuntu-latest' 23 | steps: 24 | - uses: actions/checkout@v4 25 | - uses: actions/setup-java@v4 26 | with: 27 | distribution: 'temurin' 28 | java-version: '17' 29 | - name: Run Checkstyle 30 | uses: nikitasavinov/checkstyle-action@master 31 | with: 32 | checkstyle_config: './checkstyle.xml' 33 | workdir: './src/main/java' 34 | reporter: 'github-pr-check' 35 | tool_name: 'checkstyle' 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /.idea 3 | *.iml 4 | .DS_Store -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # https://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.2/apache-maven-3.9.2-bin.zip 18 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar 19 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM eclipse-temurin:17-jdk 2 | 3 | ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 4 | 5 | MAINTAINER Ling Li 6 | 7 | # Download and install dockerize. 8 | # Needed so the web container will wait for MariaDB to start. 9 | ENV DOCKERIZE_VERSION v0.19.0 10 | RUN curl -sfL https://github.com/powerman/dockerize/releases/download/"$DOCKERIZE_VERSION"/dockerize-`uname -s`-`uname -m` | install /dev/stdin /usr/local/bin/dockerize 11 | 12 | EXPOSE 8180 13 | EXPOSE 8443 14 | WORKDIR /code 15 | 16 | VOLUME ["/code"] 17 | 18 | # Copy the application's code 19 | COPY . /code 20 | 21 | # Wait for the db to startup(via dockerize), then 22 | # Build and run steve, requires a db to be available on port 3306 23 | CMD dockerize -wait tcp://mariadb:3306 -timeout 60s && \ 24 | ./mvnw clean package -Pdocker -Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2" && \ 25 | java -XX:MaxRAMPercentage=85 -jar target/steve.jar 26 | 27 | -------------------------------------------------------------------------------- /LICENSE-HEADER.txt: -------------------------------------------------------------------------------- 1 | ${project.name} - ${project.description} - ${project.organization.url} 2 | Copyright (C) ${license.git.copyrightYears} ${owner} 3 | All Rights Reserved. 4 | 5 | This program is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with this program. If not, see . -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.0" 2 | 3 | volumes: 4 | db-data: 5 | external: false 6 | 7 | services: 8 | 9 | db: 10 | # Pinning MariaDB to point release 10.4.30 works around the issues with the 11 | # database migrations seen with 10.4.31 in issue #1212. 12 | # 13 | # TODO: Get database migrations to work with the latest point releases of 14 | # MariaDB 10.4. 15 | image: mariadb:10.4.30 16 | restart: unless-stopped 17 | ports: 18 | - 3306:3306 19 | environment: 20 | MYSQL_RANDOM_ROOT_PASSWORD: "yes" 21 | MYSQL_DATABASE: stevedb 22 | MYSQL_USER: steve 23 | MYSQL_PASSWORD: changeme 24 | app: 25 | restart: unless-stopped 26 | build: . 27 | links: 28 | - "db:mariadb" 29 | volumes: 30 | - .:/code 31 | ports: 32 | - "8180:8180" 33 | - "8443:8443" 34 | depends_on: 35 | - db 36 | 37 | -------------------------------------------------------------------------------- /k8s/docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM eclipse-temurin:17-jdk 2 | MAINTAINER daynnnnn 3 | 4 | ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 5 | 6 | ARG DB_HOST 7 | ARG DB_USERNAME 8 | ARG DB_PASSWORD 9 | ARG DB_DATABASE 10 | ARG DB_PORT 11 | 12 | WORKDIR /code 13 | 14 | ADD /src /code/src 15 | ADD /website /code/website 16 | ADD /pom.xml /code/pom.xml 17 | 18 | RUN sed -i 's|${db.ip}|${env.DB_HOST}|g' pom.xml 19 | RUN sed -i 's|${db.port}|${env.DB_PORT}|g' pom.xml 20 | RUN sed -i 's|${db.user}|${env.DB_USERNAME}|g' pom.xml 21 | RUN sed -i 's|${db.password}|${env.DB_PASSWORD}|g' pom.xml 22 | RUN sed -i 's|${db.schema}|${env.DB_DATABASE}|g' pom.xml 23 | 24 | RUN ./mvnw clean package -Pkubernetes -Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2" 25 | 26 | CMD java -jar target/steve.jar 27 | 28 | -------------------------------------------------------------------------------- /k8s/yaml/Deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: steve-deployment 5 | namespace: steve 6 | spec: 7 | replicas: 1 8 | selector: 9 | matchLabels: 10 | app: steve-deployment 11 | template: 12 | metadata: 13 | labels: 14 | app: steve-deployment 15 | spec: 16 | containers: 17 | - name: steve 18 | image: "### YOUR BUILT IMAGE HERE ###" 19 | imagePullPolicy: Always 20 | env: 21 | - name: DB_HOST 22 | value: "" 23 | - name: DB_PORT 24 | value: "" 25 | - name: DB_USERNAME 26 | value: "" 27 | - name: DB_PASSWORD 28 | value: "" 29 | - name: DB_DATABASE 30 | value: "" 31 | - name: ADMIN_USERNAME 32 | value: "" 33 | - name: ADMIN_PASSWORD 34 | value: "" 35 | - name: WEBAPI_KEY 36 | value: "STEVE-API-KEY" 37 | - name: WEBAPI_VALUE 38 | value: "" 39 | -------------------------------------------------------------------------------- /k8s/yaml/Service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: 'steve-service' 5 | namespace: 'steve' 6 | spec: 7 | ports: 8 | - name: steve 9 | port: 8180 10 | protocol: TCP 11 | targetPort: 8180 12 | selector: 13 | app: 'steve-deployment' 14 | sessionAffinity: None 15 | type: ClusterIP -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ApplicationProfile.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve; 20 | 21 | /** 22 | * @author Sevket Goekay 23 | * @since 05.11.2015 24 | */ 25 | public enum ApplicationProfile { 26 | DEV, 27 | TEST, 28 | PROD; 29 | 30 | public static ApplicationProfile fromName(String v) { 31 | for (ApplicationProfile ap : ApplicationProfile.values()) { 32 | if (ap.name().equalsIgnoreCase(v)) { 33 | return ap; 34 | } 35 | } 36 | throw new IllegalArgumentException(v); 37 | } 38 | 39 | public boolean isProd() { 40 | return this == PROD; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/config/DelegatingTaskExecutor.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.config; 20 | 21 | import lombok.RequiredArgsConstructor; 22 | import lombok.extern.slf4j.Slf4j; 23 | import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; 24 | 25 | import java.io.Closeable; 26 | import java.io.IOException; 27 | 28 | /** 29 | * @author Sevket Goekay 30 | * @since 02.02.2025 31 | */ 32 | @Slf4j 33 | @RequiredArgsConstructor 34 | public class DelegatingTaskExecutor implements Closeable { 35 | 36 | private final ThreadPoolTaskExecutor delegate; 37 | 38 | @Override 39 | public void close() throws IOException { 40 | log.info("Shutting down"); 41 | delegate.shutdown(); 42 | } 43 | 44 | public void execute(Runnable task) { 45 | delegate.execute(task); 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/RequestResult.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | import org.jetbrains.annotations.NotNull; 24 | import org.jetbrains.annotations.Nullable; 25 | 26 | /** 27 | * @author Sevket Goekay 28 | * @since 13.10.2015 29 | */ 30 | @Getter 31 | @Setter 32 | public class RequestResult { 33 | private String response; 34 | private String errorMessage; 35 | private Object details; 36 | 37 | @Nullable 38 | @SuppressWarnings("unchecked") 39 | public T getDetails() { 40 | return (T) details; 41 | } 42 | 43 | public void setDetails(@NotNull T item) { 44 | this.details = item; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/TaskOrigin.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp; 20 | 21 | import lombok.RequiredArgsConstructor; 22 | 23 | /** 24 | * @author Sevket Goekay 25 | * @since 23.11.2015 26 | */ 27 | @RequiredArgsConstructor 28 | public enum TaskOrigin { 29 | 30 | // When the action was triggered by SteVe internally (e.g. by the admin/user) 31 | INTERNAL, 32 | 33 | // When the action was triggered by an external system (e.g. integrated roaming partner) 34 | EXTERNAL 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/converter/Convert.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.converter; 20 | 21 | import java.util.function.Function; 22 | 23 | /** 24 | * @author Sevket Goekay 25 | * @since 08.03.2018 26 | */ 27 | public class Convert { 28 | 29 | public static Function start(T arg, Function function) { 30 | return function; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/FutureResponseContextStore.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws; 20 | 21 | import de.rwth.idsg.steve.ocpp.ws.data.FutureResponseContext; 22 | import org.jetbrains.annotations.Nullable; 23 | import org.springframework.web.socket.WebSocketSession; 24 | 25 | /** 26 | * @author Sevket Goekay 27 | * @since 08.02.2025 28 | */ 29 | public interface FutureResponseContextStore { 30 | 31 | void addSession(WebSocketSession session); 32 | 33 | void removeSession(WebSocketSession session); 34 | 35 | void add(WebSocketSession session, String messageId, FutureResponseContext context); 36 | 37 | @Nullable FutureResponseContext get(WebSocketSession session, String messageId); 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/SessionContextStore.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws; 20 | 21 | import de.rwth.idsg.steve.ocpp.ws.data.SessionContext; 22 | import org.springframework.web.socket.WebSocketSession; 23 | 24 | import java.util.Deque; 25 | import java.util.List; 26 | import java.util.Map; 27 | import java.util.concurrent.ScheduledFuture; 28 | 29 | /** 30 | * @author Sevket Goekay 31 | * @since 08.02.2025 32 | */ 33 | public interface SessionContextStore { 34 | 35 | void add(String chargeBoxId, WebSocketSession session, ScheduledFuture pingSchedule); 36 | 37 | void remove(String chargeBoxId, WebSocketSession session); 38 | 39 | WebSocketSession getSession(String chargeBoxId); 40 | 41 | int getSize(String chargeBoxId); 42 | 43 | int getNumberOfChargeBoxes(); 44 | 45 | List getChargeBoxIdList(); 46 | 47 | Map> getACopy(); 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/TypeStore.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws; 20 | 21 | import de.rwth.idsg.ocpp.jaxb.RequestType; 22 | import de.rwth.idsg.steve.ocpp.ws.data.ActionResponsePair; 23 | 24 | /** 25 | * @author Sevket Goekay 26 | * @since 17.03.2015 27 | */ 28 | public interface TypeStore { 29 | 30 | /** 31 | * For incoming requests 32 | * 33 | * Action field --> Request JAXB class 34 | */ 35 | Class findRequestClass(String action); 36 | 37 | /** 38 | * For outgoing requests 39 | * 40 | * Request JAXB class --> Action field, Response JAXB class 41 | */ 42 | ActionResponsePair findActionResponse(T requestPayload); 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/custom/EnumMixin.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws.custom; 20 | 21 | import com.fasterxml.jackson.annotation.JsonValue; 22 | 23 | /** 24 | * @author Sevket Goekay 25 | * @since 27.04.2015 26 | */ 27 | public interface EnumMixin { 28 | 29 | @JsonValue 30 | String value(); 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/custom/MeterValue15Mixin.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws.custom; 20 | 21 | import com.fasterxml.jackson.databind.annotation.JsonDeserialize; 22 | import ocpp.cs._2012._06.MeterValue; 23 | 24 | import java.util.List; 25 | 26 | /** 27 | * @author Sevket Goekay 28 | * @since 27.04.2015 29 | */ 30 | public abstract class MeterValue15Mixin { 31 | 32 | @JsonDeserialize(using = MeterValue15Deserializer.class) 33 | List values; 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/custom/WsSessionSelectStrategy.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws.custom; 20 | 21 | import de.rwth.idsg.steve.ocpp.ws.data.SessionContext; 22 | import org.springframework.web.socket.WebSocketSession; 23 | 24 | import java.util.Deque; 25 | 26 | /** 27 | * We want to support multiple connections to a charge point. For sending messages we need a 28 | * mechanism to select one WebSocketSession. Implementations of this interface should use 29 | * different mechanisms to realize that. 30 | * 31 | * @author Sevket Goekay 32 | * @since 30.04.2015 33 | */ 34 | public interface WsSessionSelectStrategy { 35 | WebSocketSession getSession(Deque sessionContexts); 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/data/ActionResponsePair.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws.data; 20 | 21 | import de.rwth.idsg.ocpp.jaxb.ResponseType; 22 | import lombok.Getter; 23 | import lombok.RequiredArgsConstructor; 24 | 25 | /** 26 | * @author Sevket Goekay 27 | * @since 23.03.2015 28 | */ 29 | @Getter 30 | @RequiredArgsConstructor 31 | public final class ActionResponsePair { 32 | private final String action; 33 | private final Class responseClass; 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/data/FutureResponseContext.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws.data; 20 | 21 | import de.rwth.idsg.ocpp.jaxb.ResponseType; 22 | import de.rwth.idsg.steve.ocpp.CommunicationTask; 23 | import lombok.Getter; 24 | import lombok.RequiredArgsConstructor; 25 | import lombok.Setter; 26 | 27 | /** 28 | * @author Sevket Goekay 29 | * @since 23.03.2015 30 | */ 31 | @Getter 32 | @Setter 33 | @RequiredArgsConstructor 34 | public class FutureResponseContext { 35 | private final CommunicationTask task; 36 | private final Class responseClass; 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/data/MessageType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws.data; 20 | 21 | import lombok.Getter; 22 | import lombok.RequiredArgsConstructor; 23 | 24 | /** 25 | * @author Sevket Goekay 26 | * @since 13.03.2015 27 | */ 28 | @RequiredArgsConstructor 29 | @Getter 30 | public enum MessageType { 31 | CALL(2), 32 | CALL_RESULT(3), 33 | CALL_ERROR(4); 34 | 35 | private final int typeNr; 36 | 37 | public static MessageType fromTypeNr(int typeNr) { 38 | for (MessageType messageType : MessageType.values()) { 39 | if (messageType.typeNr == typeNr) { 40 | return messageType; 41 | } 42 | } 43 | throw new IllegalArgumentException(typeNr + " is an unknown message type"); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/data/OcppJsonCall.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws.data; 20 | 21 | import de.rwth.idsg.ocpp.jaxb.RequestType; 22 | import lombok.Getter; 23 | import lombok.Setter; 24 | 25 | /** 26 | * @author Sevket Goekay 27 | * @since 13.03.2015 28 | */ 29 | @Getter 30 | @Setter 31 | public class OcppJsonCall extends OcppJsonMessage { 32 | private String action; 33 | private RequestType payload; 34 | 35 | public OcppJsonCall() { 36 | super(MessageType.CALL); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/data/OcppJsonMessage.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws.data; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | 24 | /** 25 | * Class hierarchy: 26 | * 27 | * OcppJsonMessage 28 | * + 29 | * +--> OcppJsonCall 30 | * + 31 | * +--> OcppJsonResponse 32 | * + 33 | * +--> OcppJsonResult 34 | * + 35 | * +--> OcppJsonError 36 | * 37 | * @author Sevket Goekay 38 | * @since 12.03.2015 39 | */ 40 | @Getter 41 | @Setter 42 | public abstract class OcppJsonMessage { 43 | private final MessageType messageType; 44 | private String messageId; 45 | 46 | public OcppJsonMessage(MessageType messageType) { 47 | this.messageType = messageType; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/data/OcppJsonResponse.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws.data; 20 | 21 | /** 22 | * @author Sevket Goekay 23 | * @since 13.03.2015 24 | */ 25 | public abstract class OcppJsonResponse extends OcppJsonMessage { 26 | public OcppJsonResponse(MessageType messageType) { 27 | super(messageType); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/data/OcppJsonResult.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws.data; 20 | 21 | import de.rwth.idsg.ocpp.jaxb.ResponseType; 22 | import lombok.Getter; 23 | import lombok.Setter; 24 | 25 | /** 26 | * @author Sevket Goekay 27 | * @since 13.03.2015 28 | */ 29 | @Getter 30 | @Setter 31 | public class OcppJsonResult extends OcppJsonResponse { 32 | private ResponseType payload; 33 | 34 | public OcppJsonResult() { 35 | super(MessageType.CALL_RESULT); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/data/SessionContext.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws.data; 20 | 21 | import lombok.Getter; 22 | import lombok.RequiredArgsConstructor; 23 | import org.joda.time.DateTime; 24 | import org.springframework.web.socket.WebSocketSession; 25 | 26 | import java.util.concurrent.ScheduledFuture; 27 | 28 | /** 29 | * @author Sevket Goekay 30 | * @since 25.03.2015 31 | */ 32 | @Getter 33 | @RequiredArgsConstructor 34 | public class SessionContext { 35 | private final WebSocketSession session; 36 | private final ScheduledFuture pingSchedule; 37 | private final DateTime openSince; 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/ocpp12/Ocpp12TypeStore.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws.ocpp12; 20 | 21 | import de.rwth.idsg.steve.ocpp.ws.AbstractTypeStore; 22 | 23 | /** 24 | * @author Sevket Goekay 25 | * @since 17.03.2015 26 | */ 27 | public final class Ocpp12TypeStore extends AbstractTypeStore { 28 | 29 | public static final Ocpp12TypeStore INSTANCE = new Ocpp12TypeStore(); 30 | 31 | private Ocpp12TypeStore() { 32 | super( 33 | ocpp.cs._2010._08.ObjectFactory.class.getPackage().getName(), 34 | ocpp.cp._2010._08.ObjectFactory.class.getPackage().getName() 35 | ); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/ocpp15/Ocpp15TypeStore.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws.ocpp15; 20 | 21 | import de.rwth.idsg.steve.ocpp.ws.AbstractTypeStore; 22 | 23 | /** 24 | * @author Sevket Goekay 25 | * @since 15.03.2015 26 | */ 27 | public final class Ocpp15TypeStore extends AbstractTypeStore { 28 | 29 | public static final Ocpp15TypeStore INSTANCE = new Ocpp15TypeStore(); 30 | 31 | private Ocpp15TypeStore() { 32 | super( 33 | ocpp.cs._2012._06.ObjectFactory.class.getPackage().getName(), 34 | ocpp.cp._2012._06.ObjectFactory.class.getPackage().getName() 35 | ); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/ocpp/ws/ocpp16/Ocpp16TypeStore.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp.ws.ocpp16; 20 | 21 | import de.rwth.idsg.steve.ocpp.ws.AbstractTypeStore; 22 | 23 | /** 24 | * @author Sevket Goekay 25 | * @since 13.03.2018 26 | */ 27 | public final class Ocpp16TypeStore extends AbstractTypeStore { 28 | 29 | public static final Ocpp16TypeStore INSTANCE = new Ocpp16TypeStore(); 30 | 31 | private Ocpp16TypeStore() { 32 | super( 33 | ocpp.cs._2015._10.ObjectFactory.class.getPackage().getName(), 34 | ocpp.cp._2015._10.ObjectFactory.class.getPackage().getName() 35 | ); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/AddressRepository.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository; 20 | 21 | import de.rwth.idsg.steve.web.dto.Address; 22 | import jooq.steve.db.tables.records.AddressRecord; 23 | import org.jetbrains.annotations.Nullable; 24 | import org.jooq.DSLContext; 25 | import org.jooq.Record1; 26 | import org.jooq.SelectConditionStep; 27 | 28 | /** 29 | * @author Sevket Goekay 30 | * @since 24.11.2015 31 | */ 32 | public interface AddressRepository { 33 | @Nullable AddressRecord get(DSLContext ctx, Integer addressPk); 34 | @Nullable Integer updateOrInsert(DSLContext ctx, Address address); 35 | void delete(DSLContext ctx, SelectConditionStep> addressPkSelect); 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/GenericRepository.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository; 20 | 21 | import de.rwth.idsg.steve.repository.dto.DbVersion; 22 | import de.rwth.idsg.steve.web.dto.Statistics; 23 | 24 | /** 25 | * @author Sevket Goekay 26 | * @since 19.08.2014 27 | */ 28 | public interface GenericRepository { 29 | 30 | void checkJavaAndMySQLOffsets(); 31 | 32 | Statistics getStats(); 33 | 34 | /** 35 | * Returns database version of SteVe and last database update timestamp 36 | * 37 | */ 38 | DbVersion getDBVersion(); 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/SettingsRepository.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository; 20 | 21 | import de.rwth.idsg.steve.repository.dto.MailSettings; 22 | import de.rwth.idsg.steve.web.dto.SettingsForm; 23 | 24 | /** 25 | * @author Sevket Goekay 26 | * @since 06.11.2015 27 | */ 28 | public interface SettingsRepository { 29 | SettingsForm getForm(); 30 | MailSettings getMailSettings(); 31 | int getHeartbeatIntervalInSeconds(); 32 | int getHoursToExpire(); 33 | void update(SettingsForm settingsForm); 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/TaskStore.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository; 20 | 21 | import de.rwth.idsg.steve.ocpp.CommunicationTask; 22 | import de.rwth.idsg.steve.repository.dto.TaskOverview; 23 | 24 | import java.util.List; 25 | 26 | /** 27 | * @author Sevket Goekay 28 | * @since 29.12.2014 29 | */ 30 | public interface TaskStore { 31 | List getOverview(); 32 | CommunicationTask get(Integer taskId); 33 | Integer add(CommunicationTask task); 34 | void clearFinished(); 35 | void clearUnfinished(); 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/TransactionRepository.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository; 20 | 21 | import de.rwth.idsg.steve.repository.dto.Transaction; 22 | import de.rwth.idsg.steve.repository.dto.TransactionDetails; 23 | import de.rwth.idsg.steve.web.dto.TransactionQueryForm; 24 | 25 | import java.io.Writer; 26 | import java.util.List; 27 | 28 | /** 29 | * @author Sevket Goekay 30 | * @since 19.08.2014 31 | */ 32 | public interface TransactionRepository { 33 | List getTransactions(TransactionQueryForm form); 34 | 35 | void writeTransactionsCSV(TransactionQueryForm form, Writer writer); 36 | 37 | List getActiveTransactionIds(String chargeBoxId); 38 | 39 | TransactionDetails getDetails(int transactionPk); 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/UserRepository.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository; 20 | 21 | import de.rwth.idsg.steve.repository.dto.User; 22 | import de.rwth.idsg.steve.web.dto.UserForm; 23 | import de.rwth.idsg.steve.web.dto.UserQueryForm; 24 | 25 | import java.util.List; 26 | 27 | /** 28 | * @author Sevket Goekay 29 | * @since 25.11.2015 30 | */ 31 | public interface UserRepository { 32 | List getOverview(UserQueryForm form); 33 | User.Details getDetails(int userPk); 34 | 35 | void add(UserForm form); 36 | void update(UserForm form); 37 | void delete(int userPk); 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/WebUserRepository.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository; 20 | 21 | import jooq.steve.db.tables.records.WebUserRecord; 22 | 23 | public interface WebUserRepository { 24 | 25 | void createUser(WebUserRecord user); 26 | 27 | void updateUser(WebUserRecord user); 28 | 29 | void deleteUser(String username); 30 | 31 | void deleteUser(int webUserPk); 32 | 33 | void changeStatusOfUser(String username, boolean enabled); 34 | 35 | Integer getUserCountWithAuthority(String authority); 36 | 37 | void changePassword(String username, String newPassword); 38 | 39 | boolean userExists(String username); 40 | 41 | WebUserRecord loadUserByUsername(String username); 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/dto/ChargePoint.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository.dto; 20 | 21 | import jooq.steve.db.tables.records.AddressRecord; 22 | import jooq.steve.db.tables.records.ChargeBoxRecord; 23 | import lombok.Builder; 24 | import lombok.Getter; 25 | import lombok.RequiredArgsConstructor; 26 | import org.joda.time.DateTime; 27 | 28 | /** 29 | * 30 | * @author Sevket Goekay 31 | * 32 | */ 33 | public final class ChargePoint { 34 | 35 | @Getter 36 | @Builder 37 | public static final class Overview { 38 | private final int chargeBoxPk; 39 | private final String chargeBoxId, description, ocppProtocol, lastHeartbeatTimestamp; 40 | private final DateTime lastHeartbeatTimestampDT; 41 | } 42 | 43 | @Getter 44 | @RequiredArgsConstructor 45 | public static final class Details { 46 | private final ChargeBoxRecord chargeBox; 47 | private final AddressRecord address; 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/dto/ChargingProfileAssignment.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository.dto; 20 | 21 | import lombok.Builder; 22 | import lombok.Getter; 23 | 24 | /** 25 | * @author Sevket Goekay 26 | * @since 16.11.2018 27 | */ 28 | @Getter 29 | @Builder 30 | public class ChargingProfileAssignment { 31 | private final int chargeBoxPk, connectorId, chargingProfilePk; 32 | private final String chargeBoxId, chargingProfileDescription; 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/dto/DbVersion.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository.dto; 20 | 21 | import lombok.Builder; 22 | import lombok.Getter; 23 | 24 | /** 25 | * @author Sevket Goekay 26 | * @since 19.08.2014 27 | */ 28 | @Getter 29 | @Builder 30 | public final class DbVersion { 31 | private final String version, updateTimestamp; 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/dto/InsertConnectorStatusParams.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository.dto; 20 | 21 | import lombok.Builder; 22 | import lombok.Getter; 23 | import org.joda.time.DateTime; 24 | 25 | /** 26 | * @author Sevket Goekay 27 | * @since 17.11.2015 28 | */ 29 | @Getter 30 | @Builder 31 | public class InsertConnectorStatusParams { 32 | private final String chargeBoxId; 33 | private final int connectorId; 34 | private final DateTime timestamp; 35 | private final String status; 36 | private final String errorCode; 37 | 38 | // Only in OCPP1.5 39 | private final String errorInfo, vendorId, vendorErrorCode; 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/dto/InsertReservationParams.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository.dto; 20 | 21 | import lombok.Builder; 22 | import lombok.Getter; 23 | import org.joda.time.DateTime; 24 | 25 | /** 26 | * @author Sevket Goekay 27 | * @since 21.03.2016 28 | */ 29 | @Getter 30 | @Builder 31 | public class InsertReservationParams { 32 | private final String idTag, chargeBoxId; 33 | private final int connectorId; 34 | private final DateTime startTimestamp, expiryTimestamp; 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/dto/MailSettings.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository.dto; 20 | 21 | import de.rwth.idsg.steve.NotificationFeature; 22 | import lombok.Builder; 23 | import lombok.Getter; 24 | 25 | import java.util.List; 26 | 27 | /** 28 | * @author Sevket Goekay 29 | * @since 22.01.2016 30 | */ 31 | @Getter 32 | @Builder 33 | public class MailSettings { 34 | private final boolean enabled; 35 | private final String mailHost, username, password, from, protocol; 36 | private final Integer port; 37 | private final List recipients; 38 | private final List enabledFeatures; 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/dto/Reservation.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository.dto; 20 | 21 | import lombok.Builder; 22 | import lombok.Getter; 23 | import org.joda.time.DateTime; 24 | 25 | /** 26 | * 27 | * @author Sevket Goekay 28 | * 29 | */ 30 | @Getter 31 | @Builder 32 | public final class Reservation { 33 | private final int id, ocppTagPk, chargeBoxPk; 34 | private final int connectorId; 35 | private final Integer transactionId; 36 | private final String ocppIdTag, chargeBoxId, startDatetime, expiryDatetime, status; 37 | private final DateTime startDatetimeDT; 38 | private final DateTime expiryDatetimeDT; 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/dto/TaskOverview.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository.dto; 20 | 21 | import de.rwth.idsg.steve.ocpp.TaskOrigin; 22 | import lombok.Builder; 23 | import lombok.EqualsAndHashCode; 24 | import lombok.Getter; 25 | import org.joda.time.DateTime; 26 | 27 | /** 28 | * @author Sevket Goekay 29 | * @since 29.12.2014 30 | */ 31 | @Getter 32 | @EqualsAndHashCode 33 | @Builder 34 | public final class TaskOverview implements Comparable { 35 | private final int taskId, responseCount, requestCount; 36 | private final DateTime start, end; 37 | private final TaskOrigin origin; 38 | 39 | /** 40 | * We want the tasks to be printed in descending order. 41 | */ 42 | @Override 43 | public int compareTo(TaskOverview o) { 44 | return (o.taskId - this.taskId); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/dto/TransactionStatusUpdate.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository.dto; 20 | 21 | import lombok.Getter; 22 | import ocpp.cs._2015._10.ChargePointErrorCode; 23 | import ocpp.cs._2015._10.ChargePointStatus; 24 | 25 | /** 26 | * Exists only to ensure type safety 27 | * 28 | * @author Sevket Goekay 29 | * @since 17.03.2016 30 | */ 31 | @Getter 32 | public enum TransactionStatusUpdate { 33 | 34 | AfterStart(ChargePointStatus.CHARGING), 35 | AfterStop(ChargePointStatus.AVAILABLE); 36 | 37 | private final String status; 38 | private final String errorCode = ChargePointErrorCode.NO_ERROR.value(); 39 | 40 | TransactionStatusUpdate(ChargePointStatus status) { 41 | this.status = status.value(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/dto/UpdateChargeboxParams.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository.dto; 20 | 21 | import de.rwth.idsg.steve.ocpp.OcppProtocol; 22 | import lombok.Builder; 23 | import lombok.Getter; 24 | import org.joda.time.DateTime; 25 | 26 | /** 27 | * @author Sevket Goekay 28 | * @since 17.11.2015 29 | */ 30 | @Getter 31 | @Builder 32 | public final class UpdateChargeboxParams { 33 | private final OcppProtocol ocppProtocol; 34 | private final DateTime heartbeatTimestamp; 35 | private final String vendor, model, pointSerial, boxSerial, fwVersion, 36 | iccid, imsi, meterType, meterSerial, chargeBoxId; 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/dto/UpdateTransactionParams.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository.dto; 20 | 21 | import jooq.steve.db.enums.TransactionStopEventActor; 22 | import lombok.Builder; 23 | import lombok.Getter; 24 | import org.joda.time.DateTime; 25 | 26 | /** 27 | * @author Sevket Goekay 28 | * @since 17.03.2016 29 | */ 30 | @Getter 31 | @Builder 32 | public class UpdateTransactionParams { 33 | private final String chargeBoxId; 34 | private final int transactionId; 35 | private final DateTime stopTimestamp; 36 | private final String stopMeterValue; 37 | private final String stopReason; 38 | 39 | private final TransactionStatusUpdate statusUpdate = TransactionStatusUpdate.AfterStop; 40 | 41 | // these two came after splitting transaction table into two tables (start and stop) 42 | private final TransactionStopEventActor eventActor; 43 | private final DateTime eventTimestamp; 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/repository/dto/User.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.repository.dto; 20 | 21 | import jooq.steve.db.tables.records.AddressRecord; 22 | import jooq.steve.db.tables.records.UserRecord; 23 | import lombok.Builder; 24 | import lombok.Getter; 25 | 26 | import java.util.Optional; 27 | 28 | /** 29 | * @author Sevket Goekay 30 | * @since 25.11.2015 31 | */ 32 | public class User { 33 | 34 | @Getter 35 | @Builder 36 | public static final class Overview { 37 | private final Integer userPk, ocppTagPk; 38 | private final String ocppIdTag, name, phone, email; 39 | } 40 | 41 | @Getter 42 | @Builder 43 | public static final class Details { 44 | private final UserRecord userRecord; 45 | private final AddressRecord address; 46 | private Optional ocppIdTag; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/service/AuthTagService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.service; 20 | 21 | import ocpp.cs._2015._10.IdTagInfo; 22 | import org.jetbrains.annotations.Nullable; 23 | 24 | public interface AuthTagService { 25 | 26 | IdTagInfo decideStatus(String idTag, boolean isStartTransactionReqContext, 27 | @Nullable String chargeBoxId, @Nullable Integer connectorId); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/service/DummyReleaseCheckService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.service; 20 | 21 | import de.rwth.idsg.steve.web.dto.ReleaseReport; 22 | 23 | /** 24 | * @author Sevket Goekay 25 | * @since 19.04.2016 26 | */ 27 | public class DummyReleaseCheckService implements ReleaseCheckService { 28 | @Override 29 | public ReleaseReport check() { 30 | return new ReleaseReport(false); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/service/MailService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.service; 20 | 21 | import de.rwth.idsg.steve.repository.dto.MailSettings; 22 | 23 | import jakarta.mail.MessagingException; 24 | 25 | /** 26 | * @author Sevket Goekay 27 | * @since 11.03.2025 28 | */ 29 | public interface MailService { 30 | 31 | MailSettings getSettings(); 32 | 33 | void sendTestMail(); 34 | 35 | void sendAsync(String subject, String body); 36 | 37 | void send(String subject, String body) throws MessagingException; 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/service/ReleaseCheckService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.service; 20 | 21 | import de.rwth.idsg.steve.web.dto.ReleaseReport; 22 | 23 | /** 24 | * @author Sevket Goekay 25 | * @since 19.04.2016 26 | */ 27 | public interface ReleaseCheckService { 28 | ReleaseReport check(); 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/service/dto/EnhancedReserveNowParams.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.service.dto; 20 | 21 | import de.rwth.idsg.steve.repository.dto.ChargePointSelect; 22 | import de.rwth.idsg.steve.web.dto.ocpp.ChargePointSelection; 23 | import de.rwth.idsg.steve.web.dto.ocpp.ReserveNowParams; 24 | import lombok.Getter; 25 | import lombok.RequiredArgsConstructor; 26 | 27 | import java.util.List; 28 | 29 | /** 30 | * @author Andreas Heuvels 31 | * @since 09.03.18 32 | */ 33 | @Getter 34 | @RequiredArgsConstructor 35 | public class EnhancedReserveNowParams implements ChargePointSelection { 36 | private final ReserveNowParams reserveNowParams; 37 | private final int reservationId; 38 | private final String parentIdTag; 39 | 40 | @Override 41 | public List getChargePointSelectList() { 42 | return reserveNowParams.getChargePointSelectList(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/service/dto/UnidentifiedIncomingObject.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.service.dto; 20 | 21 | import lombok.Getter; 22 | import lombok.ToString; 23 | import org.joda.time.DateTime; 24 | 25 | /** 26 | * @author Sevket Goekay 27 | * @since 20.03.2018 28 | */ 29 | @ToString 30 | @Getter 31 | public class UnidentifiedIncomingObject { 32 | 33 | private final String key; 34 | private int numberOfAttempts = 0; 35 | private DateTime lastAttemptTimestamp; 36 | 37 | public UnidentifiedIncomingObject(String key) { 38 | this.key = key; 39 | } 40 | 41 | public synchronized void updateStats() { 42 | numberOfAttempts++; 43 | lastAttemptTimestamp = DateTime.now(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/service/notification/OccpStationBooted.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.service.notification; 20 | 21 | import java.util.Optional; 22 | import lombok.Data; 23 | import ocpp.cs._2015._10.RegistrationStatus; 24 | 25 | @Data 26 | public class OccpStationBooted { 27 | 28 | private final String chargeBoxId; 29 | private final Optional status; 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/service/notification/OcppStationStatusFailure.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.service.notification; 20 | 21 | import lombok.Data; 22 | 23 | @Data 24 | public class OcppStationStatusFailure { 25 | 26 | private final String chargeBoxId; 27 | private final int connectorId; 28 | private final String errorCode; 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/service/notification/OcppStationWebSocketConnected.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.service.notification; 20 | 21 | import lombok.Data; 22 | 23 | @Data 24 | public class OcppStationWebSocketConnected { 25 | 26 | private final String chargeBoxId; 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/service/notification/OcppStationWebSocketDisconnected.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.service.notification; 20 | 21 | import lombok.Data; 22 | 23 | @Data 24 | public class OcppStationWebSocketDisconnected { 25 | 26 | private final String chargeBoxId; 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/service/notification/OcppTransactionEnded.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.service.notification; 20 | 21 | import de.rwth.idsg.steve.repository.dto.UpdateTransactionParams; 22 | import lombok.Data; 23 | 24 | @Data 25 | public class OcppTransactionEnded { 26 | 27 | private final UpdateTransactionParams params; 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/service/notification/OcppTransactionStarted.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.service.notification; 20 | 21 | import de.rwth.idsg.steve.repository.dto.InsertTransactionParams; 22 | import lombok.Data; 23 | 24 | @Data 25 | public class OcppTransactionStarted { 26 | 27 | private final int transactionId; 28 | private final InsertTransactionParams params; 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/api/exception/BadRequestException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.api.exception; 20 | 21 | public class BadRequestException extends RuntimeException { 22 | 23 | public BadRequestException(String message) { 24 | super(message); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ChargePointBatchInsertForm.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto; 20 | 21 | import de.rwth.idsg.steve.web.validation.ChargeBoxId; 22 | import lombok.Getter; 23 | import lombok.Setter; 24 | import lombok.ToString; 25 | 26 | import jakarta.validation.constraints.NotEmpty; 27 | import java.util.List; 28 | 29 | /** 30 | * @author Sevket Goekay 31 | * @since 21.06.2016 32 | */ 33 | @Getter 34 | @Setter 35 | @ToString 36 | public class ChargePointBatchInsertForm { 37 | 38 | @NotEmpty 39 | @ChargeBoxId 40 | private List idList; 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ChargingProfileAssignmentQueryForm.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | import lombok.ToString; 24 | 25 | /** 26 | * @author Sevket Goekay 27 | * @since 16.11.2018 28 | */ 29 | @Getter 30 | @Setter 31 | @ToString 32 | public class ChargingProfileAssignmentQueryForm { 33 | 34 | private String chargeBoxId; 35 | private Integer chargingProfilePk; 36 | private String chargingProfileDescription; 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ChargingProfileQueryForm.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | import lombok.ToString; 24 | import ocpp.cp._2015._10.ChargingProfileKindType; 25 | import ocpp.cp._2015._10.ChargingProfilePurposeType; 26 | import ocpp.cp._2015._10.RecurrencyKindType; 27 | import org.joda.time.LocalDateTime; 28 | 29 | /** 30 | * @author Sevket Goekay 31 | * @since 12.11.2018 32 | */ 33 | @Getter 34 | @Setter 35 | @ToString 36 | public class ChargingProfileQueryForm { 37 | private Integer chargingProfilePk; 38 | private Integer stackLevel; 39 | private String description; 40 | private ChargingProfilePurposeType profilePurpose; 41 | private ChargingProfileKindType profileKind; 42 | private RecurrencyKindType recurrencyKind; 43 | private LocalDateTime validFrom; 44 | private LocalDateTime validTo; 45 | 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ConnectorStatusForm.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | import lombok.ToString; 24 | 25 | /** 26 | * @author Sevket Goekay 27 | * @since 18.09.2018 28 | */ 29 | @Getter 30 | @Setter 31 | @ToString 32 | public class ConnectorStatusForm { 33 | private String chargeBoxId; 34 | private String status; 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/OcppJsonStatus.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto; 20 | 21 | import de.rwth.idsg.steve.ocpp.OcppVersion; 22 | import lombok.Builder; 23 | import lombok.Getter; 24 | import lombok.ToString; 25 | import org.joda.time.DateTime; 26 | 27 | /** 28 | * @author Sevket Goekay 29 | * @since 25.03.2015 30 | */ 31 | @Getter 32 | @Builder 33 | @ToString 34 | public final class OcppJsonStatus { 35 | private final int chargeBoxPk; 36 | private final String chargeBoxId, connectedSince; 37 | private final String connectionDuration; 38 | private final OcppVersion version; 39 | private final DateTime connectedSinceDT; 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/OcppTagBatchInsertForm.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto; 20 | 21 | import de.rwth.idsg.steve.web.validation.IdTag; 22 | import lombok.Getter; 23 | import lombok.Setter; 24 | import lombok.ToString; 25 | 26 | import jakarta.validation.constraints.NotEmpty; 27 | import java.util.List; 28 | 29 | /** 30 | * @author Sevket Goekay 31 | * @since 15.08.2014 32 | */ 33 | @Getter 34 | @Setter 35 | @ToString 36 | public class OcppTagBatchInsertForm { 37 | 38 | @IdTag 39 | @NotEmpty 40 | private List idList; 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ReleaseReport.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto; 20 | 21 | import lombok.Getter; 22 | import lombok.RequiredArgsConstructor; 23 | import lombok.Setter; 24 | import lombok.ToString; 25 | 26 | /** 27 | * @author Sevket Goekay 28 | * @since 19.04.2016 29 | */ 30 | @Getter 31 | @Setter 32 | @ToString 33 | @RequiredArgsConstructor 34 | public class ReleaseReport { 35 | private final boolean moreRecent; 36 | 37 | private String githubVersion; 38 | 39 | private String htmlUrl; 40 | private String downloadUrl; 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ReleaseResponse.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | import lombok.ToString; 24 | 25 | /** 26 | * Does not contain all the fields in the actual response, but only the ones that we are interested in. 27 | * 28 | * API doc: https://developer.github.com/v3/repos/releases/#get-the-latest-release 29 | * 30 | * @author Sevket Goekay 31 | * @since 04.10.2016 32 | */ 33 | @Getter 34 | @Setter 35 | @ToString 36 | public class ReleaseResponse { 37 | private String tagName; 38 | private String name; 39 | 40 | private String htmlUrl; 41 | private String tarballUrl; 42 | private String zipballUrl; 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/Statistics.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto; 20 | 21 | import lombok.Builder; 22 | import lombok.Getter; 23 | import lombok.Setter; 24 | import lombok.ToString; 25 | 26 | import java.util.Map; 27 | 28 | /** 29 | * 30 | * @author Sevket Goekay 31 | * 32 | */ 33 | @Getter 34 | @Builder 35 | @ToString 36 | public final class Statistics { 37 | // Number of chargeboxes, ocppTags, users, reservations, transactions 38 | private final Integer numChargeBoxes, numOcppTags, numUsers, numReservations, numTransactions, 39 | // Received heartbeats 40 | heartbeatToday, heartbeatYesterday, heartbeatEarlier; 41 | 42 | // Number of connected WebSocket/JSON chargeboxes 43 | @Setter private int numOcpp12JChargeBoxes, numOcpp15JChargeBoxes, numOcpp16JChargeBoxes; 44 | 45 | // Count of connectors based on their status 46 | @Setter private Map statusCountMap; 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/UserForm.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | import lombok.ToString; 24 | import org.joda.time.LocalDate; 25 | 26 | import jakarta.validation.constraints.Email; 27 | import jakarta.validation.constraints.NotNull; 28 | 29 | /** 30 | * @author Sevket Goekay 31 | * @since 25.11.2015 32 | */ 33 | @Getter 34 | @Setter 35 | @ToString 36 | public class UserForm { 37 | 38 | // Internal database id 39 | private Integer userPk; 40 | 41 | private String ocppIdTag; 42 | 43 | private String firstName; 44 | private String lastName; 45 | private LocalDate birthDay; 46 | private String phone; 47 | private String note; 48 | 49 | @NotNull(message = "Sex is required") 50 | private UserSex sex; 51 | 52 | @Email(message = "Not a valid e-mail address") 53 | private String eMail; 54 | 55 | private Address address; 56 | 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/UserQueryForm.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | import lombok.ToString; 24 | 25 | /** 26 | * @author Sevket Goekay 27 | * @since 26.11.2015 28 | */ 29 | @Getter 30 | @Setter 31 | @ToString 32 | public class UserQueryForm { 33 | 34 | private Integer userPk; 35 | 36 | // Free text input 37 | private String ocppIdTag; 38 | private String name; 39 | private String email; 40 | 41 | public boolean isSetUserPk() { 42 | return userPk != null; 43 | } 44 | 45 | public boolean isSetOcppIdTag() { 46 | return ocppIdTag != null; 47 | } 48 | 49 | public boolean isSetName() { 50 | return name != null; 51 | } 52 | 53 | public boolean isSetEmail() { 54 | return email != null; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/AvailabilityType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | /** 22 | * @author Sevket Goekay 23 | * @since 08.03.2018 24 | */ 25 | public enum AvailabilityType { 26 | INOPERATIVE("Inoperative"), 27 | OPERATIVE("Operative"); 28 | 29 | private final String value; 30 | 31 | AvailabilityType(String v) { 32 | value = v; 33 | } 34 | 35 | public String value() { 36 | return value; 37 | } 38 | 39 | public static AvailabilityType fromValue(String v) { 40 | for (AvailabilityType c : AvailabilityType.values()) { 41 | if (c.value.equals(v)) { 42 | return c; 43 | } 44 | } 45 | throw new IllegalArgumentException(v); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/CancelReservationParams.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | 24 | import jakarta.validation.constraints.Min; 25 | import jakarta.validation.constraints.NotNull; 26 | 27 | /** 28 | * @author Sevket Goekay 29 | * @since 02.01.2015 30 | */ 31 | @Getter 32 | @Setter 33 | public class CancelReservationParams extends SingleChargePointSelect { 34 | 35 | @NotNull(message = "Reservation ID is required") 36 | @Min(value = 0, message = "Reservation ID must be at least {value}") 37 | private Integer reservationId; 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/ChangeAvailabilityParams.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | 24 | import jakarta.validation.constraints.Min; 25 | import jakarta.validation.constraints.NotNull; 26 | import java.util.Objects; 27 | 28 | /** 29 | * @author Sevket Goekay 30 | * @since 08.03.2018 31 | */ 32 | @Getter 33 | public class ChangeAvailabilityParams extends MultipleChargePointSelect { 34 | 35 | @Min(value = 0, message = "Connector ID must be at least {value}") 36 | private Integer connectorId; 37 | 38 | @NotNull(message = "Availability Type is required") 39 | @Setter private AvailabilityType availType; 40 | 41 | /** 42 | * if empty, 0 = charge point as a whole 43 | */ 44 | public void setConnectorId(Integer connectorId) { 45 | this.connectorId = Objects.requireNonNullElse(connectorId, 0); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/ChargePointSelection.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | import de.rwth.idsg.steve.repository.dto.ChargePointSelect; 22 | 23 | import java.util.List; 24 | 25 | /** 26 | * @author Sevket Goekay 27 | * @since 09.03.2018 28 | */ 29 | public interface ChargePointSelection { 30 | List getChargePointSelectList(); 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/ClearChargingProfileFilterType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | /** 22 | * @author Sevket Goekay 23 | * @since 13.11.2018 24 | */ 25 | public enum ClearChargingProfileFilterType { 26 | 27 | ChargingProfileId("ChargingProfileId"), 28 | OtherParameters("OtherParameters"); 29 | 30 | private final String value; 31 | 32 | ClearChargingProfileFilterType(String v) { 33 | value = v; 34 | } 35 | 36 | public String value() { 37 | return value; 38 | } 39 | 40 | public static ClearChargingProfileFilterType fromValue(String v) { 41 | for (ClearChargingProfileFilterType c : ClearChargingProfileFilterType.values()) { 42 | if (c.value.equals(v)) { 43 | return c; 44 | } 45 | } 46 | throw new IllegalArgumentException(v); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/ConfigurationKeyReadWriteEnum.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | /** 22 | * Determines if a configuration key is read-only ("R") or read-write ("RW"). In case the key is read-only, the Central 23 | * System can read the value for the key using GetConfiguration, but not write it. In case the accessibility is 24 | * read-write, the Central System can also write the value for the key using ChangeConfiguration. 25 | * 26 | * This distinction was added in OCPP 1.6. 27 | */ 28 | public enum ConfigurationKeyReadWriteEnum { 29 | R, 30 | RW 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/DataTransferParams.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | 24 | import jakarta.validation.constraints.NotNull; 25 | 26 | /** 27 | * @author Sevket Goekay 28 | * @since 02.01.2015 29 | */ 30 | @Getter 31 | @Setter 32 | public class DataTransferParams extends MultipleChargePointSelect { 33 | 34 | @NotNull(message = "Vendor ID is required") 35 | private String vendorId; 36 | 37 | private String messageId; 38 | 39 | private String data; 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/GetCompositeScheduleParams.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | import ocpp.cp._2015._10.ChargingRateUnitType; 24 | 25 | import jakarta.validation.constraints.Min; 26 | import jakarta.validation.constraints.NotNull; 27 | import jakarta.validation.constraints.Positive; 28 | 29 | /** 30 | * @author Sevket Goekay 31 | * @since 13.11.2018 32 | */ 33 | @Getter 34 | @Setter 35 | public class GetCompositeScheduleParams extends MultipleChargePointSelect { 36 | 37 | @NotNull 38 | @Min(value = 0, message = "Connector ID must be at least {value}") 39 | private Integer connectorId; 40 | 41 | @NotNull 42 | @Positive 43 | private Integer durationInSeconds; 44 | 45 | private ChargingRateUnitType chargingRateUnit; 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/MultipleChargePointSelect.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | import de.rwth.idsg.steve.repository.dto.ChargePointSelect; 22 | import lombok.Getter; 23 | import lombok.Setter; 24 | 25 | import jakarta.validation.constraints.NotNull; 26 | import jakarta.validation.constraints.Size; 27 | import java.util.Collections; 28 | import java.util.List; 29 | 30 | /** 31 | * @author Sevket Goekay 32 | * @since 29.12.2014 33 | */ 34 | @Getter 35 | @Setter 36 | public class MultipleChargePointSelect implements ChargePointSelection { 37 | 38 | @NotNull(message = "Charge point selection is required") 39 | @Size(min = 1, message = "Please select at least {min} charge point") 40 | private List chargePointSelectList = Collections.emptyList(); 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/RemoteStopTransactionParams.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | 24 | import jakarta.validation.constraints.NotNull; 25 | 26 | /** 27 | * @author Sevket Goekay 28 | * @since 01.01.2015 29 | */ 30 | @Getter 31 | @Setter 32 | public class RemoteStopTransactionParams extends SingleChargePointSelect { 33 | 34 | @NotNull(message = "Transaction ID is required") 35 | private Integer transactionId; 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/ResetParams.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | 24 | import jakarta.validation.constraints.NotNull; 25 | 26 | /** 27 | * @author Sevket Goekay 28 | * @since 08.03.2018 29 | */ 30 | @Getter 31 | @Setter 32 | public class ResetParams extends MultipleChargePointSelect { 33 | 34 | @NotNull(message = "Reset Type is required") 35 | private ResetType resetType; 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/ResetType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | /** 22 | * @author Sevket Goekay 23 | * @since 08.03.2018 24 | */ 25 | public enum ResetType { 26 | HARD("Hard"), 27 | SOFT("Soft"); 28 | 29 | private final String value; 30 | 31 | ResetType(String v) { 32 | value = v; 33 | } 34 | 35 | public String value() { 36 | return value; 37 | } 38 | 39 | public static ResetType fromValue(String v) { 40 | for (ResetType c : ResetType.values()) { 41 | if (c.value.equals(v)) { 42 | return c; 43 | } 44 | } 45 | throw new IllegalArgumentException(v); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/SendLocalListUpdateType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | /** 22 | * @author Sevket Goekay 23 | * @since 13.03.2018 24 | */ 25 | public enum SendLocalListUpdateType { 26 | DIFFERENTIAL("Differential"), 27 | FULL("Full"); 28 | 29 | private final String value; 30 | 31 | SendLocalListUpdateType(String v) { 32 | value = v; 33 | } 34 | 35 | public String value() { 36 | return value; 37 | } 38 | 39 | public static SendLocalListUpdateType fromValue(String v) { 40 | for (SendLocalListUpdateType c : SendLocalListUpdateType.values()) { 41 | if (c.value.equals(v)) { 42 | return c; 43 | } 44 | } 45 | throw new IllegalArgumentException(v); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/SetChargingProfileParams.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | 24 | import jakarta.validation.constraints.Min; 25 | import jakarta.validation.constraints.NotNull; 26 | import jakarta.validation.constraints.Positive; 27 | 28 | /** 29 | * @author Sevket Goekay 30 | * @since 12.11.2018 31 | */ 32 | @Setter 33 | @Getter 34 | public class SetChargingProfileParams extends MultipleChargePointSelect { 35 | 36 | @NotNull 37 | @Min(value = 0, message = "Connector ID must be at least {value}") 38 | private Integer connectorId; 39 | 40 | @NotNull 41 | @Positive 42 | private Integer chargingProfilePk; 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/SingleChargePointSelect.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | import de.rwth.idsg.steve.repository.dto.ChargePointSelect; 22 | import lombok.Getter; 23 | import lombok.Setter; 24 | 25 | import jakarta.validation.constraints.NotNull; 26 | import jakarta.validation.constraints.Size; 27 | import java.util.Collections; 28 | import java.util.List; 29 | 30 | /** 31 | * Why a list, if the list size == 1? 32 | * To keep the method calls and data types (for ex: tasks api) consistent for both cases. 33 | * 34 | * @author Sevket Goekay 35 | * @since 29.12.2014 36 | */ 37 | @Getter 38 | @Setter 39 | public class SingleChargePointSelect implements ChargePointSelection { 40 | 41 | @NotNull(message = "Charge point selection is required") 42 | @Size(min = 1, max = 1, message = "It is required to select exactly 1 charge point") 43 | private List chargePointSelectList = Collections.emptyList(); 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/TriggerMessageParams.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | 24 | import jakarta.validation.constraints.Min; 25 | import jakarta.validation.constraints.NotNull; 26 | 27 | /** 28 | * @author David Rerimassie 29 | * @since 20.03.2018 30 | */ 31 | @Setter 32 | @Getter 33 | public class TriggerMessageParams extends MultipleChargePointSelect { 34 | 35 | @NotNull(message = "Requested Message required") 36 | private TriggerMessageEnum triggerMessage; 37 | 38 | @Min(value = 1, message = "Connector ID must be at least {value}") 39 | private Integer connectorId; 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/dto/ocpp/UnlockConnectorParams.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.dto.ocpp; 20 | 21 | import lombok.Getter; 22 | import lombok.Setter; 23 | 24 | import jakarta.validation.constraints.Min; 25 | import jakarta.validation.constraints.NotNull; 26 | 27 | /** 28 | * @author Sevket Goekay 29 | * @since 01.01.2015 30 | */ 31 | @Setter 32 | @Getter 33 | public class UnlockConnectorParams extends SingleChargePointSelect { 34 | 35 | @NotNull(message = "Connector ID is required") 36 | @Min(value = 1, message = "Connector ID must be at least {value}") 37 | private Integer connectorId; 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/validation/ChargeBoxIdListValidator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.validation; 20 | 21 | import jakarta.validation.ConstraintValidator; 22 | import jakarta.validation.ConstraintValidatorContext; 23 | import java.util.List; 24 | 25 | /** 26 | * @author Sevket Goekay 27 | * @since 21.01.2016 28 | */ 29 | public class ChargeBoxIdListValidator implements ConstraintValidator> { 30 | 31 | private static final ChargeBoxIdValidator VALIDATOR = new ChargeBoxIdValidator(); 32 | 33 | @Override 34 | public void initialize(ChargeBoxId constraintAnnotation) { 35 | // No-op 36 | } 37 | 38 | @Override 39 | public boolean isValid(List value, ConstraintValidatorContext context) { 40 | for (String s : value) { 41 | if (!VALIDATOR.isValid(s, context)) { 42 | return false; 43 | } 44 | } 45 | return true; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/validation/EmailCollection.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.validation; 20 | 21 | import jakarta.validation.Constraint; 22 | import jakarta.validation.Payload; 23 | import java.lang.annotation.Retention; 24 | import java.lang.annotation.Target; 25 | 26 | import static java.lang.annotation.ElementType.FIELD; 27 | import static java.lang.annotation.ElementType.METHOD; 28 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 29 | 30 | /** 31 | * @author Sevket Goekay 32 | * @since 21.01.2016 33 | */ 34 | @Target({FIELD, METHOD}) 35 | @Retention(RUNTIME) 36 | @Constraint(validatedBy = EmailCollectionValidator.class) 37 | public @interface EmailCollection { 38 | 39 | String message() default "E-mail(s) not valid"; 40 | 41 | // Required by validation runtime 42 | Class[] groups() default {}; 43 | 44 | // Required by validation runtime 45 | Class[] payload() default {}; 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/de/rwth/idsg/steve/web/validation/IdTagListValidator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.validation; 20 | 21 | import jakarta.validation.ConstraintValidator; 22 | import jakarta.validation.ConstraintValidatorContext; 23 | import java.util.List; 24 | 25 | /** 26 | * @author Sevket Goekay 27 | * @since 21.01.2016 28 | */ 29 | public class IdTagListValidator implements ConstraintValidator> { 30 | 31 | private static final IdTagValidator VALIDATOR = new IdTagValidator(); 32 | 33 | @Override 34 | public void initialize(IdTag constraintAnnotation) { 35 | // No-op 36 | } 37 | 38 | @Override 39 | public boolean isValid(List value, ConstraintValidatorContext context) { 40 | for (String s : value) { 41 | if (!VALIDATOR.isValid(s, context)) { 42 | return false; 43 | } 44 | } 45 | return true; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/resources/config/docker/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ${LOG_PATTERN} 9 | 10 | 11 | 12 | 13 | ${LOG_DIR}/steve.log 14 | 15 | 16 | 17 | 18 | ${LOG_DIR}/steve-%d{yyyy-MM-dd}.log.gz 19 | 30 20 | 3GB 21 | 22 | 23 | 24 | ${LOG_PATTERN} 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/main/resources/config/kubernetes/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ${LOG_PATTERN} 9 | 10 | 11 | 12 | 13 | ${LOG_DIR}/steve.log 14 | 15 | 16 | 17 | 18 | ${LOG_DIR}/steve-%d{yyyy-MM-dd}.log.gz 19 | 30 20 | 3GB 21 | 22 | 23 | 24 | ${LOG_PATTERN} 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/main/resources/config/prod/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ${LOG_PATTERN} 9 | 10 | 11 | 12 | 13 | ${LOG_DIR}/steve.log 14 | 15 | 16 | 17 | 18 | ${LOG_DIR}/steve-%d{yyyy-MM-dd}.log.gz 19 | 30 20 | 3GB 21 | 22 | 23 | 24 | ${LOG_PATTERN} 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_6_9__update.sql: -------------------------------------------------------------------------------- 1 | UPDATE `dbVersion` SET `version` = '0.6.9'; 2 | 3 | ALTER TABLE `user` 4 | ADD CONSTRAINT `FK_user_parentIdTag` 5 | FOREIGN KEY (`parentIdTag`) 6 | REFERENCES `user` (`idTag`) 7 | ON DELETE NO ACTION 8 | ON UPDATE NO ACTION; 9 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_7_1__update.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE `dbVersion`; 2 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_7_2__update.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `chargebox` 2 | CHANGE COLUMN `ocppVersion` `ocppProtocol` VARCHAR(10) NULL DEFAULT NULL ; 3 | 4 | -- 5 | -- Migrate existing charge points from old 'version' scheme to the newer 'protocol' scheme 6 | -- 7 | UPDATE `chargebox` SET `ocppProtocol`='ocpp1.2S' WHERE `ocppProtocol`='1.2'; 8 | UPDATE `chargebox` SET `ocppProtocol`='ocpp1.5S' WHERE `ocppProtocol`='1.5'; 9 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_7_3__update.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `chargebox` 2 | CHANGE COLUMN `fwVersion` `fwVersion` VARCHAR(50) NULL DEFAULT NULL ; 3 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_7_6__update.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `user` 2 | ADD COLUMN `note` TEXT NULL COMMENT '' AFTER `blocked`; 3 | 4 | ALTER TABLE `chargebox` 5 | ADD COLUMN `note` TEXT NULL COMMENT '' AFTER `lastHeartbeatTimestamp`; 6 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_7_8__update.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `settings` ( 2 | `appId` VARCHAR(40), 3 | `heartbeatIntervalInSeconds` INT, 4 | `hoursToExpire` INT, 5 | PRIMARY KEY (`appId`), 6 | UNIQUE KEY `settings_id_UNIQUE` (`appId`) 7 | ); 8 | 9 | INSERT INTO `settings` (appId, heartbeatIntervalInSeconds, hoursToExpire) 10 | VALUES ('U3RlY2tkb3NlblZlcndhbHR1bmc=', 14400, 1); -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_7_9__update.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- all timestamps have fractional seconds with the precision 6 now. 3 | -- fractional seconds are unfortunately not default, for compatibility with previous MySQL versions 4 | -- (https://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html) 5 | -- 6 | 7 | ALTER TABLE `chargebox` 8 | CHANGE COLUMN `fwUpdateTimestamp` `fwUpdateTimestamp` TIMESTAMP(6) NULL DEFAULT NULL, 9 | CHANGE COLUMN `diagnosticsTimestamp` `diagnosticsTimestamp` TIMESTAMP(6) NULL DEFAULT NULL, 10 | CHANGE COLUMN `lastHeartbeatTimestamp` `lastHeartbeatTimestamp` TIMESTAMP(6) NULL DEFAULT NULL; 11 | 12 | ALTER TABLE `connector_metervalue` 13 | CHANGE COLUMN `valueTimestamp` `valueTimestamp` TIMESTAMP(6) NULL DEFAULT NULL; 14 | 15 | ALTER TABLE `connector_status` 16 | CHANGE COLUMN `statusTimestamp` `statusTimestamp` TIMESTAMP(6) NULL DEFAULT NULL; 17 | 18 | ALTER TABLE `transaction` 19 | CHANGE COLUMN `startTimestamp` `startTimestamp` TIMESTAMP(6) NULL DEFAULT NULL, 20 | CHANGE COLUMN `stopTimestamp` `stopTimestamp` TIMESTAMP(6) NULL DEFAULT NULL; 21 | 22 | ALTER TABLE `user` 23 | CHANGE COLUMN `expiryDate` `expiryDate` TIMESTAMP(6) NULL DEFAULT NULL; -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_8_0__update.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- add some indexes 3 | -- 4 | 5 | ALTER TABLE `chargebox` ADD INDEX `chargebox_op_ep_idx` (`ocppProtocol`, `endpoint_address`); 6 | 7 | ALTER TABLE `connector_status` ADD INDEX `connector_status_cpk_st_idx` (`connector_pk`, `statusTimestamp`); 8 | 9 | ALTER TABLE `user` 10 | ADD INDEX `user_expiryDate_idx` (`expiryDate`), 11 | ADD INDEX `user_inTransaction_idx` (`inTransaction`), 12 | ADD INDEX `user_blocked_idx` (`blocked`); 13 | 14 | ALTER TABLE `reservation` 15 | ADD INDEX `reservation_start_idx` (`startDatetime`), 16 | ADD INDEX `reservation_expiry_idx` (`expiryDatetime`), 17 | ADD INDEX `reservation_status_idx` (`status`); 18 | 19 | ALTER TABLE `transaction` 20 | ADD INDEX `transaction_start_idx` (`startTimestamp`), 21 | ADD INDEX `transaction_stop_idx` (`stopTimestamp`); 22 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_8_7__update.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- split "street_and_house_number" into "street" and "house_number" 3 | -- 4 | 5 | ALTER TABLE `address` 6 | CHANGE COLUMN `street_and_house_number` `street` VARCHAR(1000), 7 | ADD house_number varchar(255) AFTER `street`; 8 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_8_8__update.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `settings` 2 | ADD COLUMN `mail_enabled` BOOLEAN DEFAULT FALSE, 3 | 4 | ADD COLUMN `mail_host` VARCHAR(255) DEFAULT NULL, 5 | ADD COLUMN `mail_username` VARCHAR(255) DEFAULT NULL, 6 | ADD COLUMN `mail_password` VARCHAR(255) DEFAULT NULL, 7 | ADD COLUMN `mail_from` VARCHAR(255) DEFAULT NULL, 8 | ADD COLUMN `mail_protocol` VARCHAR(255) DEFAULT 'smtp', 9 | 10 | ADD COLUMN `mail_port` INT DEFAULT 25, 11 | 12 | ADD COLUMN `mail_recipients` TEXT COMMENT 'comma separated list of email addresses', 13 | ADD COLUMN `notification_features` TEXT COMMENT 'comma separated list'; -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_9_0__update.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- store connector_pk in reservation table. 3 | -- 4 | 5 | START TRANSACTION; 6 | 7 | -- add column without constraints 8 | 9 | ALTER TABLE `reservation` 10 | ADD COLUMN `connector_pk` INT(11) UNSIGNED AFTER `reservation_pk`; 11 | 12 | 13 | -- set connector_pk of existing reservations to connector 0 of the corresponding charge box. 14 | 15 | UPDATE `reservation` 16 | SET `connector_pk` = ( 17 | SELECT `connector`.`connector_pk` 18 | FROM `connector` 19 | WHERE `connector`.`charge_box_id` = `reservation`.`charge_box_id` AND `connector`.`connector_id` = 0 20 | ); 21 | 22 | 23 | -- now that all connector_pk columns have values set, add constraints 24 | 25 | ALTER TABLE `reservation` 26 | MODIFY COLUMN `connector_pk` INT(11) UNSIGNED NOT NULL AFTER `reservation_pk`, 27 | ADD INDEX `FK_connector_pk_reserv_idx` (`connector_pk` ASC); 28 | 29 | ALTER TABLE `reservation` 30 | ADD CONSTRAINT `FK_connector_pk_reserv` FOREIGN KEY (`connector_pk`) 31 | REFERENCES `connector` (`connector_pk`) 32 | ON DELETE CASCADE 33 | ON UPDATE NO ACTION; 34 | 35 | 36 | -- charge_box_id column is redundant, remove it. 37 | 38 | ALTER TABLE `reservation` 39 | DROP FOREIGN KEY `FK_reservation_charge_box_cbid`, 40 | DROP COLUMN `charge_box_id`, 41 | DROP INDEX `FK_chargeBoxId_r_idx` ; 42 | 43 | COMMIT; 44 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_9_1__update.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `connector_meter_value` 2 | ADD INDEX `cmv_value_timestamp_idx` (`value_timestamp` ASC) COMMENT ''; 3 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_9_2__update.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `transaction` 2 | ADD COLUMN `stop_reason` VARCHAR(255) DEFAULT NULL AFTER `stop_value`; 3 | 4 | ALTER TABLE `connector_meter_value` 5 | ADD COLUMN `phase` VARCHAR(255) DEFAULT NULL AFTER `unit`; -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_9_3__update.sql: -------------------------------------------------------------------------------- 1 | DROP TRIGGER IF EXISTS `transaction_AINS`; 2 | 3 | DROP TRIGGER IF EXISTS `transaction_AUPD`; 4 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_9_4__update.sql: -------------------------------------------------------------------------------- 1 | DROP PROCEDURE `get_stats`; 2 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_9_5__update.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `charge_box` 2 | ADD admin_address varchar(255) NULL, 3 | ADD insert_connector_status_after_transaction_msg BOOLEAN DEFAULT TRUE; 4 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_9_7__update.sql: -------------------------------------------------------------------------------- 1 | DROP INDEX user_inTransaction_idx ON ocpp_tag; 2 | 3 | ALTER TABLE ocpp_tag DROP COLUMN in_transaction; 4 | 5 | CREATE OR REPLACE VIEW ocpp_tag_activity AS 6 | SELECT 7 | ocpp_tag.*, 8 | COALESCE(tx_activity.active_transaction_count, 0) as 'active_transaction_count', 9 | CASE WHEN (active_transaction_count > 0) THEN TRUE ELSE FALSE END AS 'in_transaction' 10 | FROM ocpp_tag 11 | LEFT JOIN 12 | (SELECT id_tag, count(id_tag) as 'active_transaction_count' 13 | FROM transaction 14 | WHERE stop_timestamp IS NULL 15 | AND stop_value IS NULL 16 | GROUP BY id_tag) tx_activity 17 | ON ocpp_tag.id_tag = tx_activity.id_tag; 18 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V0_9_9__update.sql: -------------------------------------------------------------------------------- 1 | START TRANSACTION; 2 | 3 | ALTER TABLE `ocpp_tag` 4 | ADD `max_active_transaction_count` INTEGER NOT NULL DEFAULT 1 AFTER `expiry_date`; 5 | 6 | UPDATE `ocpp_tag` SET `max_active_transaction_count` = 0 WHERE `blocked` = TRUE; 7 | 8 | ALTER TABLE `ocpp_tag` DROP COLUMN `blocked`; 9 | 10 | -- recreate this view, with derived "blocked" field to be transparent to java app 11 | CREATE OR REPLACE VIEW ocpp_tag_activity AS 12 | SELECT 13 | ocpp_tag.*, 14 | COALESCE(tx_activity.active_transaction_count, 0) as 'active_transaction_count', 15 | CASE WHEN (active_transaction_count > 0) THEN TRUE ELSE FALSE END AS 'in_transaction', 16 | CASE WHEN (ocpp_tag.max_active_transaction_count = 0) THEN TRUE ELSE FALSE END AS 'blocked' 17 | FROM ocpp_tag 18 | LEFT JOIN 19 | (SELECT id_tag, count(id_tag) as 'active_transaction_count' 20 | FROM transaction 21 | WHERE stop_timestamp IS NULL 22 | AND stop_value IS NULL 23 | GROUP BY id_tag) tx_activity 24 | ON ocpp_tag.id_tag = tx_activity.id_tag; 25 | 26 | COMMIT; 27 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V1_0_0__update.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE transaction_stop_failed ( 2 | transaction_pk INT, 3 | event_timestamp TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), 4 | event_actor ENUM('station', 'manual'), 5 | stop_timestamp TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), 6 | stop_value VARCHAR(255), 7 | stop_reason VARCHAR(255), 8 | fail_reason TEXT 9 | ); 10 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V1_0_1__update.sql: -------------------------------------------------------------------------------- 1 | -- https://github.com/RWTH-i5-IDSG/steve/issues/212 2 | ALTER TABLE `connector_meter_value` MODIFY `value` TEXT; 3 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V1_0_2__update.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `charge_box` 2 | ADD COLUMN `registration_status` VARCHAR(255) NOT NULL DEFAULT 'Accepted' AFTER `ocpp_protocol`; -------------------------------------------------------------------------------- /src/main/resources/db/migration/V1_0_3__update.sql: -------------------------------------------------------------------------------- 1 | -- came with https://github.com/RWTH-i5-IDSG/steve/issues/310 2 | ALTER TABLE `charging_schedule_period` 3 | CHANGE COLUMN `power_limit_in_amperes` `power_limit` DECIMAL(15, 1) NOT NULL; 4 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V1_0_4__update.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `transaction_stop_failed` 2 | ADD COLUMN `charge_box_id` varchar(255) default null AFTER `transaction_pk`; 3 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V1_0_5__update.sql: -------------------------------------------------------------------------------- 1 | -- came with https://github.com/steve-community/steve/issues/1219 2 | CREATE OR REPLACE VIEW ocpp_tag_activity AS 3 | select `o`.*, 4 | count(`t`.`id_tag`) AS `active_transaction_count`, 5 | case when count(`t`.`id_tag`) > 0 then 1 else 0 end AS `in_transaction`, 6 | case when `o`.`max_active_transaction_count` = 0 then 1 else 0 end AS `blocked` 7 | from `ocpp_tag` `o` left join `transaction` `t` on ( 8 | `o`.`id_tag` = `t`.`id_tag` and 9 | `t`.`stop_timestamp` is null and 10 | `t`.`stop_value` is null) 11 | group by 12 | `o`.`ocpp_tag_pk`, 13 | `o`.`parent_id_tag`, 14 | `o`.`expiry_date`, 15 | `o`.`max_active_transaction_count`, 16 | `o`.`note`; 17 | 18 | CREATE OR REPLACE VIEW `transaction` AS 19 | SELECT 20 | tx1.transaction_pk, 21 | tx1.connector_pk, 22 | tx1.id_tag, 23 | tx1.event_timestamp as 'start_event_timestamp', 24 | tx1.start_timestamp, 25 | tx1.start_value, 26 | tx2.event_actor as 'stop_event_actor', 27 | tx2.event_timestamp as 'stop_event_timestamp', 28 | tx2.stop_timestamp, 29 | tx2.stop_value, 30 | tx2.stop_reason 31 | FROM transaction_start tx1 32 | LEFT JOIN transaction_stop tx2 33 | ON tx1.transaction_pk = tx2.transaction_pk 34 | AND tx2.event_timestamp = (SELECT MAX(event_timestamp) FROM transaction_stop s2 WHERE tx2.transaction_pk = s2.transaction_pk) 35 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V1_0_6__update.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE web_user 2 | ( 3 | web_user_pk INT NOT NULL AUTO_INCREMENT, 4 | username varchar(500) NOT NULL, 5 | password varchar(500) NOT NULL, 6 | api_token varchar(500) NULL, 7 | enabled BOOLEAN NOT NULL, 8 | authorities JSON NOT NULL, 9 | 10 | PRIMARY KEY (web_user_pk), 11 | UNIQUE KEY (username), 12 | 13 | CONSTRAINT authorities_must_be_array CHECK (json_type(authorities) = convert('ARRAY' using utf8)) 14 | ); 15 | -------------------------------------------------------------------------------- /src/main/resources/db/migration/V1_0_7__update.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE web_user CHANGE COLUMN api_token api_password varchar(500) NULL; 2 | -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/00-context.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | <%@ taglib uri="jakarta.tags.core" prefix="c" %> 22 | 23 | <%-- This is the global variable to be used in every jsp file as the prefix of the links --%> 24 | 25 | -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/00-cp-multiple.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | <%@ taglib uri="jakarta.tags.core" prefix="c" %> 22 | 23 | 24 | 27 | 34 | 35 |
25 | 26 | 28 | 29 | 30 | 31 | 32 | 33 |
36 |
37 | -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/00-cp-single.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | <%@ taglib uri="jakarta.tags.core" prefix="c" %> 22 | 23 | 24 | 25 | 32 | 33 |
Select one: 26 | 27 | 28 | 29 | 30 | 31 |
34 |
35 | -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/00-error.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | <%@ include file="00-header.jsp" %> 22 |
23 |

Error:

24 |

${exception}

25 | 26 |

Reason:

27 |

${exception.cause}

28 |
29 |
30 |

You can go back or, for more detail, view the log

31 |
32 | <%@ include file="00-footer.jsp" %> -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/00-footer.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/00-op-bind-errors.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | <%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %> 22 | <%@ taglib uri="jakarta.tags.core" prefix="c" %> 23 | 24 |
25 |
    26 | 27 |
  • ${error.defaultMessage}
  • 28 |
    29 |
30 |
31 |
32 | -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/GetConfigurationResponse.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | <%@ include file="00-header.jsp" %> 22 |
23 |
24 |
GetConfigurationResponse from ${chargeBoxId}
25 | 26 |
27 | Unknown keys: ${response.unknownKeys} 28 |
29 |
30 |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
KeyValueRead only?
${element.readonly}
49 |
50 |
51 | <%@ include file="00-footer.jsp" %> 52 | -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/data-man/00-address.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
Address
Street:
House Number:
Zip code:
City:
Country:
-------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/data-man/00-user-ocpp.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 34 | 35 |
OCPP
OCPP ID Tag:
31 | 32 | 33 |
-------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/data-man/00-user-profile.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 33 | 34 | 35 | 36 | 37 |
Profile
First name:
Last name:
Birthday:
Sex: 30 | 31 | 32 |
Phone:
E-mail:
Additional Note:
-------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/op-forms/CancelReservationForm.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | 22 |
Charge Points with OCPP ${opVersion}
23 | <%@ include file="../00-cp-single.jsp" %> 24 |
Parameters
25 | 26 | 27 | 28 |
ID of the Existing Reservation:
29 |
-------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/op-forms/ChangeAvailabilityForm.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | 22 |
Charge Points with OCPP ${opVersion}
23 | <%@ include file="../00-cp-multiple.jsp" %> 24 |
Parameters
25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 36 | 37 | 38 |
Connector ID (integer):
Availability Type: 33 | 34 | 35 |
39 |
-------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/op-forms/ClearCacheForm.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | 22 |
Charge Points with OCPP ${opVersion}
23 | <%@ include file="../00-cp-multiple.jsp" %> 24 |
Parameters
25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
No parameters required.
33 |
-------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/op-forms/DataTransferForm.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | 22 |
Charge Points with OCPP ${opVersion}
23 | <%@ include file="../00-cp-multiple.jsp" %> 24 |
Parameters
25 | 26 | 27 | 28 | 29 | 30 |
Vendor ID (String):
Message ID (String):
Data (Text):
31 |
-------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/op-forms/GetLocalListForm.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | 22 |
Charge Points with OCPP ${opVersion}
23 | <%@ include file="../00-cp-multiple.jsp" %> 24 |
Parameters
25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
No parameters required.
33 |
-------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/op-forms/RemoteStartTransactionForm.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | 22 |
Charge Points with OCPP ${opVersion}
23 | <%@ include file="../00-cp-single.jsp" %> 24 |
Parameters
25 | 26 | 27 | 28 | 29 | 30 | 35 | 36 | 37 |
Connector ID:
OCPP ID Tag: 31 | 32 | 33 | 34 |
38 |
-------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/op-forms/RemoteStopTransactionForm.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | 22 |
Charge Points with OCPP ${opVersion}
23 | <%@ include file="../00-cp-single.jsp" %> 24 |
Parameters
25 | 26 | 27 | 28 |
ID of the Active Transaction:
29 |
-------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/op-forms/ResetForm.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | 22 |
Charge Points with OCPP ${opVersion}
23 | <%@ include file="../00-cp-multiple.jsp" %> 24 |
Parameters
25 | 26 | 27 | 28 | 33 | 34 |
Reset Type: 29 | 30 | 31 | 32 |
35 |
-------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/op-forms/UnlockConnectorForm.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | 3 | SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 4 | Copyright (C) 2013-2025 SteVe Community Team 5 | All Rights Reserved. 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see . 19 | 20 | --%> 21 | 22 |
Charge Points with OCPP ${opVersion}
23 | <%@ include file="../00-cp-single.jsp" %> 24 |
Parameters
25 | 26 | 27 | 28 | 29 | 30 |
Connector ID:
31 |
-------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/snippets/clearChargingProfile.js: -------------------------------------------------------------------------------- 1 | var updateSelection = $("#filterType"); 2 | changeMultiSelects(updateSelection.val()); 3 | updateSelection.change(function() { 4 | changeMultiSelects(this.value); 5 | }); 6 | 7 | function changeMultiSelects(value) { 8 | if (value == 'ChargingProfileId') { 9 | $("#chargingProfilePk").prop("disabled", false); 10 | $("#connectorId, #chargingProfilePurpose, #stackLevel").prop("disabled", true); 11 | 12 | } else if (value == 'OtherParameters') { 13 | $("#chargingProfilePk").prop("disabled", true); 14 | $("#connectorId, #chargingProfilePurpose, #stackLevel").prop("disabled", false); 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/snippets/confKeySelect.js: -------------------------------------------------------------------------------- 1 | var keyTypeSelect = $("#keyType"); 2 | function togglePeriodType(keyTypeSelect) { 3 | if (keyTypeSelect.find("option:selected").text() == "Predefined") { 4 | $("#confKey").prop("disabled", false); 5 | $("#customConfKey").prop("disabled", true); 6 | } else { 7 | $("#confKey").prop("disabled", true); 8 | $("#customConfKey").prop("disabled", false); 9 | } 10 | } 11 | 12 | togglePeriodType(keyTypeSelect); 13 | keyTypeSelect.change(function() { 14 | togglePeriodType(keyTypeSelect); 15 | }); -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/snippets/datePicker-past.js: -------------------------------------------------------------------------------- 1 | $('.datePicker').datepicker({ 2 | dateFormat: 'yy-mm-dd', 3 | maxDate: new Date(), 4 | changeMonth: true, 5 | changeYear: true, 6 | yearRange: '-100:+0' 7 | }); -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/snippets/dateTimePicker-future.js: -------------------------------------------------------------------------------- 1 | $('.dateTimePicker').datetimepicker({ 2 | dateFormat: 'yy-mm-dd' 3 | //, minDateTime: new Date() 4 | }); -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/snippets/dateTimePicker-past.js: -------------------------------------------------------------------------------- 1 | $('.dateTimePicker').datetimepicker({ 2 | dateFormat: 'yy-mm-dd' 3 | //, maxDateTime: new Date() 4 | }); -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/snippets/dateTimePicker.js: -------------------------------------------------------------------------------- 1 | $('.dateTimePicker').datetimepicker({ 2 | dateFormat: 'yy-mm-dd' 3 | }); -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/snippets/getConnectorIds.js: -------------------------------------------------------------------------------- 1 | $("#chargePointSelectList").change(function() { 2 | var cp = $(this).find("option:selected").text(); 3 | $.getJSON("${ctxPath}/manager/ajax/" + cp + "/connectorIds", function(data) { 4 | var options = ""; 5 | $.each(data, function() { 6 | options += ""; 7 | }); 8 | var select = $("#connectorId"); 9 | select.prop("disabled", false); 10 | select.html(options); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/snippets/getConnectorIdsZeroAllowed.js: -------------------------------------------------------------------------------- 1 | $("#chargePointSelectList").change(function() { 2 | var cp = $(this).find("option:selected").text(); 3 | $.getJSON("${ctxPath}/manager/ajax/" + cp + "/connectorIds", function(data) { 4 | var options = ""; 5 | $.each(data, function() { 6 | options += ""; 7 | }); 8 | var select = $("#connectorId"); 9 | select.prop("disabled", false); 10 | select.html(options); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/snippets/getReservationIds.js: -------------------------------------------------------------------------------- 1 | $("#chargePointSelectList").change(function() { 2 | var cp = $(this).find("option:selected").text(); 3 | $.getJSON("${ctxPath}/manager/ajax/" + cp + "/reservationIds", function(data) { 4 | var options = ""; 5 | $.each(data, function() { 6 | options += ""; 7 | }); 8 | var select = $("#reservationId"); 9 | select.prop("disabled", false); 10 | select.html(options); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/snippets/getTransactionIds.js: -------------------------------------------------------------------------------- 1 | $("#chargePointSelectList").change(function() { 2 | var cp = $(this).find("option:selected").text(); 3 | $.getJSON("${ctxPath}/manager/ajax/" + cp + "/transactionIds", function(data) { 4 | var options = ""; 5 | $.each(data, function() { 6 | options += ""; 7 | }); 8 | var select = $("#transactionId"); 9 | select.prop("disabled", false); 10 | select.html(options); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/snippets/periodTypeSelect.js: -------------------------------------------------------------------------------- 1 | var ptSel = $("#periodTypeSelect"); 2 | function togglePeriodType(ptSel) { 3 | if (ptSel.find("option:selected").text() == "From/To") { 4 | $("#intervalPeriodTypeFrom").prop("disabled", false); 5 | $("#intervalPeriodTypeTo").prop("disabled", false); 6 | } else { 7 | $("#intervalPeriodTypeFrom").prop("disabled", true); 8 | $("#intervalPeriodTypeTo").prop("disabled", true); 9 | } 10 | } 11 | 12 | togglePeriodType(ptSel); 13 | ptSel.change(function() { 14 | togglePeriodType(ptSel); 15 | }); -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/snippets/schedulePeriodsTable.js: -------------------------------------------------------------------------------- 1 | // https://stackoverflow.com/a/14533243 2 | $('#periodsTable').on('click', '.removeRow', function() { 3 | $(this).closest("tr").remove(); 4 | }); 5 | 6 | $('#addRow').click(function () { 7 | // use prefix for new rows to be at the end when ordered 8 | var id = "zz" + Date.now(); 9 | var startPeriodInSeconds = ""; 10 | var powerLimit = ""; 11 | var numberPhases = ""; 12 | var deleteButton = ""; 13 | var row = "" + startPeriodInSeconds + powerLimit + numberPhases + deleteButton + ""; 14 | 15 | $('#periodsTable tbody').append(row); 16 | }); -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/snippets/sendLocalList.js: -------------------------------------------------------------------------------- 1 | var updateSelection = $("#updateType"); 2 | changeMultiSelects(updateSelection.val()); 3 | updateSelection.change(function() { 4 | changeMultiSelects(this.value); 5 | }); 6 | 7 | function changeMultiSelects(value) { 8 | if (value == 'DIFFERENTIAL') { 9 | $("#addUpdateList, #deleteList").prop("disabled", false); 10 | $("#sendEmptyListWhenFull").prop("disabled", true); 11 | 12 | } else if (value == 'FULL') { 13 | selectNone(document.getElementById('addUpdateList')); 14 | selectNone(document.getElementById('deleteList')); 15 | $("#addUpdateList, #deleteList").prop("disabled", true); 16 | $("#sendEmptyListWhenFull").prop("disabled", false); 17 | } 18 | } -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/views/snippets/sortable.js: -------------------------------------------------------------------------------- 1 | var table = $(".res").stupidtable({ 2 | "date": function (a, b) { 3 | var aDate = (parseInt(a) || 0); 4 | var bDate = (parseInt(b) || 0); 5 | return aDate - bDate; 6 | } 7 | }); 8 | 9 | table.on("aftertablesort", function (event, data) { 10 | var th = $(this).find("th"); 11 | th.find(".arrow").remove(); 12 | var dir = $.fn.stupidtable.dir; 13 | 14 | // https://en.wikipedia.org/wiki/Geometric_Shapes 15 | var arrow = data.direction === dir.ASC ? "▲" : "▼"; 16 | th.eq(data.column).append('' + arrow + ''); 17 | }); 18 | -------------------------------------------------------------------------------- /src/main/resources/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/DroidSerif.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/DroidSerif.ttf -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/images/ui-bg_diagonals-thick_20_666666_40x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/images/ui-bg_diagonals-thick_20_666666_40x40.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/images/ui-bg_flat_10_000000_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/images/ui-bg_flat_10_000000_40x100.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/images/ui-bg_glass_100_f6f6f6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/images/ui-bg_glass_100_f6f6f6_1x400.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/images/ui-bg_glass_100_fdf5ce_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/images/ui-bg_glass_100_fdf5ce_1x400.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/images/ui-icons_228ef1_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/images/ui-icons_228ef1_256x240.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/images/ui-icons_ef8c08_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/images/ui-icons_ef8c08_256x240.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/images/ui-icons_ffd27a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/images/ui-icons_ffd27a_256x240.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/css/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/css/jquery-ui-timepicker-addon.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery Timepicker Addon - v1.5.0 - 2014-09-01 2 | * http://trentrichardson.com/examples/timepicker 3 | * Copyright (c) 2014 Trent Richardson; Licensed MIT */ 4 | 5 | .ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:left}.ui-timepicker-div dl dt{float:left;clear:left;padding:0 0 0 5px}.ui-timepicker-div dl dd{margin:0 10px 10px 40%}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:0 0;border:0;margin:0;padding:0}.ui-timepicker-rtl{direction:rtl}.ui-timepicker-rtl dl{text-align:right;padding:0 5px 0 0}.ui-timepicker-rtl dl dt{float:right;clear:right}.ui-timepicker-rtl dl dd{margin:0 40% 10px 10px} -------------------------------------------------------------------------------- /src/main/resources/webapp/static/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/images/favicon.ico -------------------------------------------------------------------------------- /src/main/resources/webapp/static/images/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/images/info.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/images/logo.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/images/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/src/main/resources/webapp/static/images/logo2.png -------------------------------------------------------------------------------- /src/main/resources/webapp/static/js/script.js: -------------------------------------------------------------------------------- 1 | function selectAll(selectBox) { 2 | for (var i = 0; i < selectBox.options.length; i++) { 3 | selectBox.options[i].selected = true; 4 | } 5 | } 6 | function selectNone(selectBox) { 7 | for (var i = 0; i < selectBox.options.length; i++) { 8 | selectBox.options[i].selected = false; 9 | } 10 | } 11 | $(document).ready(function() { 12 | var menuItem = $("#dm-menu a"); 13 | menuItem.click(function(){ 14 | var attr = "#" + $(this).attr("name"); 15 | $(attr).siblings().hide(); 16 | $(attr).show(); 17 | menuItem.removeAttr("class"); 18 | $(this).addClass("highlight"); 19 | }); 20 | }); -------------------------------------------------------------------------------- /src/main/resources/webapp/static/js/stupidtable.min.js: -------------------------------------------------------------------------------- 1 | /* http://joequery.github.io/Stupid-Table-Plugin/ */ 2 | (function(c){c.fn.stupidtable=function(b){return this.each(function(){var a=c(this);b=b||{};b=c.extend({},c.fn.stupidtable.default_sort_fns,b);a.data("sortFns",b);a.on("click.stupidtable","thead th",function(){c(this).stupidsort()})})};c.fn.stupidsort=function(b){var a=c(this),g=0,f=c.fn.stupidtable.dir,e=a.closest("table"),k=a.data("sort")||null;if(null!==k){a.parents("tr").find("th").slice(0,c(this).index()).each(function(){var a=c(this).attr("colspan")||1;g+=parseInt(a,10)});var d;1==arguments.length? 3 | d=b:(d=b||a.data("sort-default")||f.ASC,a.data("sort-dir")&&(d=a.data("sort-dir")===f.ASC?f.DESC:f.ASC));e.trigger("beforetablesort",{column:g,direction:d});e.css("display");setTimeout(function(){var b=[],l=e.data("sortFns")[k],h=e.children("tbody").children("tr");h.each(function(a,e){var d=c(e).children().eq(g),f=d.data("sort-value");"undefined"===typeof f&&(f=d.text(),d.data("sort-value",f));b.push([f,e])});b.sort(function(a,b){return l(a[0],b[0])});d!=f.ASC&&b.reverse();h=c.map(b,function(a){return a[1]}); 4 | e.children("tbody").append(h);e.find("th").data("sort-dir",null).removeClass("sorting-desc sorting-asc");a.data("sort-dir",d).addClass("sorting-"+d);e.trigger("aftertablesort",{column:g,direction:d});e.css("display")},10);return a}};c.fn.updateSortVal=function(b){var a=c(this);a.is("[data-sort-value]")&&a.attr("data-sort-value",b);a.data("sort-value",b);return a};c.fn.stupidtable.dir={ASC:"asc",DESC:"desc"};c.fn.stupidtable.default_sort_fns={"int":function(b,a){return parseInt(b,10)-parseInt(a,10)}, 5 | "float":function(b,a){return parseFloat(b)-parseFloat(a)},string:function(b,a){return b.localeCompare(a)},"string-ins":function(b,a){b=b.toLocaleLowerCase();a=a.toLocaleLowerCase();return b.localeCompare(a)}}})(jQuery); 6 | -------------------------------------------------------------------------------- /src/test/java/de/rwth/idsg/steve/ocpp/OcppProtocolTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.ocpp; 20 | 21 | import org.junit.jupiter.api.Assertions; 22 | import org.junit.jupiter.params.ParameterizedTest; 23 | import org.junit.jupiter.params.provider.EnumSource; 24 | 25 | public class OcppProtocolTest { 26 | 27 | @ParameterizedTest 28 | @EnumSource(OcppProtocol.class) 29 | public void testFromCompositeValue(OcppProtocol input) { 30 | String toTest = input.getCompositeValue(); 31 | OcppProtocol inputBack = OcppProtocol.fromCompositeValue(toTest); 32 | Assertions.assertEquals(input, inputBack); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/test/java/de/rwth/idsg/steve/web/api/AbstractControllerTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve 3 | * Copyright (C) 2013-2025 SteVe Community Team 4 | * All Rights Reserved. 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | package de.rwth.idsg.steve.web.api; 20 | 21 | import com.fasterxml.jackson.databind.DeserializationFeature; 22 | import com.fasterxml.jackson.databind.ObjectMapper; 23 | import com.fasterxml.jackson.databind.SerializationFeature; 24 | import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; 25 | 26 | public class AbstractControllerTest { 27 | 28 | ObjectMapper objectMapper; 29 | 30 | AbstractControllerTest() { 31 | ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().build(); 32 | objectMapper.findAndRegisterModules(); 33 | // if the client sends unknown props, just ignore them instead of failing 34 | objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 35 | // default is true 36 | objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); 37 | 38 | this.objectMapper = objectMapper; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /website/logo/managed-by-steve.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/logo/managed-by-steve.pdf -------------------------------------------------------------------------------- /website/screenshots/chargepoints.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/chargepoints.png -------------------------------------------------------------------------------- /website/screenshots/connector-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/connector-status.png -------------------------------------------------------------------------------- /website/screenshots/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/home.png -------------------------------------------------------------------------------- /website/screenshots/lightsail-1-create-instance.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/lightsail-1-create-instance.PNG -------------------------------------------------------------------------------- /website/screenshots/lightsail-2-static-ip.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/lightsail-2-static-ip.PNG -------------------------------------------------------------------------------- /website/screenshots/lightsail-3-firewall.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/lightsail-3-firewall.PNG -------------------------------------------------------------------------------- /website/screenshots/lightsail-4-create-database.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/lightsail-4-create-database.PNG -------------------------------------------------------------------------------- /website/screenshots/lightsail-5-check-database-status.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/lightsail-5-check-database-status.PNG -------------------------------------------------------------------------------- /website/screenshots/lightsail-6-connect-instance.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/lightsail-6-connect-instance.PNG -------------------------------------------------------------------------------- /website/screenshots/ocpp-tags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/ocpp-tags.png -------------------------------------------------------------------------------- /website/screenshots/ocpp12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/ocpp12.png -------------------------------------------------------------------------------- /website/screenshots/ocpp15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/ocpp15.png -------------------------------------------------------------------------------- /website/screenshots/reservations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/reservations.png -------------------------------------------------------------------------------- /website/screenshots/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/settings.png -------------------------------------------------------------------------------- /website/screenshots/transactions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/transactions.png -------------------------------------------------------------------------------- /website/screenshots/users.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steve-community/steve/dff652c3f9bf50971d4e732913594ef461485480/website/screenshots/users.png --------------------------------------------------------------------------------