Transaction transaction = domainService.createTransaction(startTransaction.getEvseId()); NumberedTransactionId transactionId = new NumberedTransactionId(chargingStationId, protocolIdentifier, transaction.getId().intValue()); StartTransactionInfo extendedStartTransactionInfo = new StartTransactionInfo(startTransaction.getEvseId(), startTransaction.getMeterStart(), startTransaction.getTimestamp(), identifyingToken, startTransaction.getAttributes());
@EventHandler public void handle(TransactionStartedEvent event) { LOG.debug("TransactionStartedEvent for [{}] received!", event.getChargingStationId()); StartTransactionInfo startTransactionInfo = event.getStartTransactionInfo(); IdentifyingToken identifyingToken = startTransactionInfo.getIdentifyingToken(); Transaction transaction = new Transaction(event.getChargingStationId().getId(), event.getTransactionId().getId(), startTransactionInfo.getEvseId(), identifyingToken.getToken(), startTransactionInfo.getMeterStart(), startTransactionInfo.getTimestamp(), identifyingToken.getMobilityServiceProvider(), identifyingToken.getVisibleId()); repository.createOrUpdate(transaction); }
@EventHandler protected void onEvent(TransactionStartedEvent event) { LOG.info("Sending notifyRequestResult for a TransactionStartedEvent to the source PMS"); String authorizationIdentifier = event.getStartTransactionInfo().getIdentifyingToken().getToken(); Integer transactionId = ((NumberedTransactionId) event.getTransactionId()).getNumber(); SessionInfo sessionInfo = destinationSessionRepository.findSessionInfoByAuthorizationId(authorizationIdentifier); sessionInfo.setTransactionId(transactionId); sessionInfo.getSessionStateMachine().eventStartOk(); sessionInfo.setMeterStart(event.getStartTransactionInfo().getMeterStart()); sessionInfo.setStartTimestamp(event.getStartTransactionInfo().getTimestamp()); destinationSessionRepository.insertOrUpdateSessionInfo(sessionInfo); String requestIdentifier = sessionInfo.getRequestIdentifier(); SourceEndpoint sourceEndpoint = sourceEndpointRepository.findSourceEndpointByPmsIdentifier(sessionInfo.getPmsIdentifier()); SourceClient sourceClient = new SourceClient(sourceEndpoint.getSourceEndpointUrl()); DestinationNotifyRequestResultRequest destinationNotifyRequestResultRequest = new DestinationNotifyRequestResultRequest(requestIdentifier); sourceClient.notifyRequestResult(destinationNotifyRequestResultRequest); LOG.info("Received a notifyRequestResultResponse from the source PMS"); }
@Override public void handleRequest(ChargingStationId chargingStationId, String callId, String payload, WebSocketWrapper webSocketWrapper) { Starttransaction request = gson.fromJson(payload, Starttransaction.class); AttributeMap<String, String> attributes = new AttributeMap<String, String>(). putIfValueNotNull(AttributeMapKeys.RESERVATION_ID, request.getReservationId() != null ? request.getReservationId().toString() : null); StartTransactionInfo startTransactionInfo = new StartTransactionInfo(new EvseId(request.getConnectorId()), request.getMeterStart(), request.getTimestamp(), new TextualToken(request.getIdTag()), attributes); FutureEventCallback futureEventCallback = new StartTransactionFutureEventCallback(callId, webSocketWrapper, chargingStationId, protocolIdentifier, startTransactionInfo, domainService, addOnIdentity); // futureEventCallback will handle authorize result and trigger a startTransaction command domainService.authorize(chargingStationId, request.getIdTag(), futureEventCallback, addOnIdentity); } }
/** * Handles a {@link StartTransactionCommand}. * * @param command the command which needs to be applied to the ChargingStation. */ @CommandHandler public void handle(StartTransactionCommand command, MetaData metaData) { if (command.getStartTransactionInfo().getEvseId().getNumberedId() > numberOfEvses) { apply(new EvseNotFoundEvent(id, command.getStartTransactionInfo().getEvseId(), command.getIdentityContext()), metaData); return; } apply(new TransactionStartedEvent(command.getChargingStationId(), command.getTransactionId(), command.getStartTransactionInfo(), command.getIdentityContext()), metaData); }
@Override public StartTransactionResponse startTransaction(final StartTransactionRequest parameters, final String chargeBoxIdentity) { final ChargingStationId chargingStationId = new ChargingStationId(chargeBoxIdentity); StartTransactionInfo startTransactionInfo = new StartTransactionInfo(new EvseId(parameters.getConnectorId()), parameters.getMeterStart(), parameters.getTimestamp(), new TextualToken(parameters.getIdTag()), Collections.<String, String>emptyMap()); final StartTransactionFutureEventCallback future = new StartTransactionFutureEventCallback(domainService, chargingStationId, PROTOCOL_IDENTIFIER, startTransactionInfo, addOnIdentity); FutureRequestHandler<StartTransactionResponse, StartTransactionFutureResult> handler = new FutureRequestHandler<>(context.getMessageContext(), continuationTimeout); return handler.handle(future, new CallInitiator() { @Override public void initiateCall() { domainService.startTransaction(chargingStationId, new EvseId(parameters.getConnectorId()), new TextualToken(parameters.getIdTag()), future, addOnIdentity); } }, new StartTransactionResponseFactory(), new ResponseFactory<StartTransactionResponse>() { @Override public StartTransactionResponse createResponse() { LOG.error("Error while handling 'startTransaction' request"); StartTransactionResponse response = new StartTransactionResponse(); IdTagInfo tagInfo = new IdTagInfo(); tagInfo.setStatus(AuthorizationStatus.INVALID); response.setIdTagInfo(tagInfo); return response; } }); }
Transaction transaction = domainService.createTransaction(startTransactionInfo.getEvseId()); NumberedTransactionId transactionId = new NumberedTransactionId(chargingStationId, protocolIdentifier, transaction.getId().intValue()); IdentifyingToken identifyingToken = resultEvent.getIdentifyingToken(); StartTransactionInfo extendedStartTransactionInfo = new StartTransactionInfo(startTransactionInfo.getEvseId(), startTransactionInfo.getMeterStart(), startTransactionInfo.getTimestamp(), identifyingToken, startTransactionInfo.getAttributes());
@Override public StartTransactionResponse startTransaction(final StartTransactionRequest parameters, final String chargeBoxIdentity) { final ChargingStationId chargingStationId = new ChargingStationId(chargeBoxIdentity); AttributeMap<String, String> attributes = new AttributeMap<String, String>(). putIfValueNotNull(AttributeMapKeys.RESERVATION_ID, parameters.getReservationId() != null ? parameters.getReservationId().toString() : null); StartTransactionInfo startTransactionInfo = new StartTransactionInfo(new EvseId(parameters.getConnectorId()), parameters.getMeterStart(), parameters.getTimestamp(), new TextualToken(parameters.getIdTag()), attributes); final StartTransactionFutureEventCallback future = new StartTransactionFutureEventCallback(domainService, chargingStationId, PROTOCOL_IDENTIFIER, startTransactionInfo, addOnIdentity); FutureRequestHandler<StartTransactionResponse, StartTransactionFutureResult> handler = new FutureRequestHandler<>(context.getMessageContext(), continuationTimeout); return handler.handle(future, new CallInitiator() { @Override public void initiateCall() { domainService.startTransaction(chargingStationId, new EvseId(parameters.getConnectorId()), new TextualToken(parameters.getIdTag()), future, addOnIdentity); } }, new StartTransactionResponseFactory(), new ResponseFactory<StartTransactionResponse>() { @Override public StartTransactionResponse createResponse() { LOG.error("Error while handling 'startTransaction' request"); StartTransactionResponse response = new StartTransactionResponse(); IdTagInfo tagInfo = new IdTagInfo(); tagInfo.setStatus(AuthorizationStatus.INVALID); response.setIdTagInfo(tagInfo); return response; } }); }