/** * Creates {@code NumberedTransactionId} or {@code UUIDTransactionId} by inspecting the provided transactionId String. * @param transactionNumber the String to create into a TransactionId * @param chargingStationId the chargingstation id * @param protocol the protocol identifier * @return a {@code TransactionId} * @throws NullPointerException in case transactionNumber is null. * @throws IllegalArgumentException in case no {@code TransactionId} could be created. */ public static TransactionId createTransactionId(String transactionNumber, ChargingStationId chargingStationId, String protocol) { return Ints.tryParse(checkNotNull(transactionNumber)) != null ? new NumberedTransactionId(chargingStationId, protocol, Ints.tryParse(transactionNumber)) : new UuidTransactionId(UUID.fromString(transactionNumber)); } }
/** * {@inheritDoc} */ @Override public void handle(StopTransactionRequestedEvent event, CorrelationToken correlationToken) { LOG.info("OCPP 1.2 StopTransactionRequestedEvent"); if (event.getTransactionId() instanceof NumberedTransactionId) { NumberedTransactionId transactionId = (NumberedTransactionId) event.getTransactionId(); chargingStationOcpp12Client.stopTransaction(event.getChargingStationId(), transactionId.getNumber()); } else { LOG.warn("StopTransactionRequestedEvent does not contain a NumberedTransactionId. Event: {}", event); } }
/** * Creates a {@code NumberedTransactionId}. * <p/> * This constructor should be used if a {@code NumberedTransactionId} is needed and the transaction number is not * available, but the transactionId string is. * * @param chargingStationId the charging station's identifier. * @param protocol the protocol identifier. * @param transactionId the transaction id string (containing the number). * @throws NumberFormatException if the number cannot be extracted from {@code transactionId}. */ public NumberedTransactionId(ChargingStationId chargingStationId, String protocol, String transactionId) { this.chargingStationId = checkNotNull(chargingStationId); checkNotNull(protocol); checkArgument(!protocol.isEmpty()); this.protocol = protocol; checkNotNull(transactionId); checkArgument(!transactionId.isEmpty()); this.number = numberFromTransactionIdString(chargingStationId, protocol, transactionId); }
NumberedTransactionId transactionId = new NumberedTransactionId(chargingStationId, protocolIdentifier, transaction.getId().intValue()); futureResult.setTransactionId(transactionId.getNumber());
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()); response.setTransactionId(transactionId.getNumber()); response.setIdTagInfo(idTagInfo);
@Override public StopTransactionResponse stopTransaction(StopTransactionRequest request, String chargeBoxIdentity) { ChargingStationId chargingStationId = new ChargingStationId(chargeBoxIdentity); NumberedTransactionId transactionId = new NumberedTransactionId(chargingStationId, PROTOCOL_IDENTIFIER, request.getTransactionId()); IdentifyingToken identifyingToken = new TextualToken(request.getIdTag()); //OCPP 1.2 does not include the meter values in a stop transaction message List<MeterValue> meterValues = new ArrayList<>(); domainService.stopTransaction(chargingStationId, transactionId, identifyingToken, request.getMeterStop(), request.getTimestamp(), meterValues, addOnIdentity); return new StopTransactionResponse(); }
public void remoteStopTransaction(ChargingStationId chargingStationId, TransactionId transactionId, CorrelationToken correlationToken) { NumberedTransactionId transactionIdNumber = (NumberedTransactionId) transactionId; Remotestoptransaction remoteStopTransactionRequest = new Remotestoptransaction(); remoteStopTransactionRequest.setTransactionId(transactionIdNumber.getNumber()); responseHandlers.put(correlationToken.getToken(), new RemoteStopTransactionResponseHandler(correlationToken)); WampMessage wampMessage = new WampMessage(WampMessage.CALL, correlationToken.getToken(), MessageProcUri.REMOTE_STOP_TRANSACTION, remoteStopTransactionRequest); sendWampMessage(wampMessage, chargingStationId); }
/** * {@inheritDoc} */ @Override public void handle(String chargingStationId, JsonObject commandObject, IdentityContext identityContext) throws UserIdentityUnauthorizedException { ChargingStationId csId = new ChargingStationId(chargingStationId); if (!commandAuthorizationService.isAuthorized(csId, identityContext.getUserIdentity(), RequestStopTransactionCommand.class)) { throw new UserIdentityUnauthorizedException(chargingStationId, identityContext.getUserIdentity(), RequestStopTransactionCommand.class); } try { RequestStopTransactionApiCommand command = gson.fromJson(commandObject, RequestStopTransactionApiCommand.class); ChargingStation chargingStation = repository.findOne(chargingStationId); if (chargingStation != null && chargingStation.communicationAllowed()) { TransactionId transactionId = new NumberedTransactionId(csId, chargingStation.getProtocol(), command.getId()); commandGateway.send(new RequestStopTransactionCommand(csId, transactionId, identityContext), new CorrelationToken()); } } catch (JsonSyntaxException ex) { throw new IllegalArgumentException("Configure command not able to parse the payload, is your json correctly formatted?", ex); } } }
public void stopTransaction(ChargingStationId chargingStationId, NumberedTransactionId transactionId, IdentifyingToken idTag, int meterValueStop, Date timeStamp, List<MeterValue> meterValues, AddOnIdentity addOnIdentity) { this.checkChargingStationExistsAndIsRegisteredAndConfigured(chargingStationId); IdentityContext identityContext = new IdentityContext(addOnIdentity, new NullUserIdentity()); StopTransactionCommand command = new StopTransactionCommand(chargingStationId, transactionId, idTag, meterValueStop, timeStamp, identityContext); commandGateway.send(command); if (meterValues != null && !meterValues.isEmpty()) { Transaction transaction = transactionRepository.findTransactionById((long) transactionId.getNumber()); commandGateway.send(new ProcessMeterValueCommand(chargingStationId, transactionId, transaction.getEvseId(), meterValues, identityContext)); } }
TransactionId transactionId = new NumberedTransactionId(chargingStationId, "OCPP15", sessionInfo.getTransactionId()); Object command = new RequestStopTransactionCommand(chargingStationId, transactionId, identityContext);
/** * {@inheritDoc} */ @Override public void handle(StopTransactionRequestedEvent event, CorrelationToken correlationToken) { LOG.info("StopTransactionRequestedEvent"); if (event.getTransactionId() instanceof NumberedTransactionId) { NumberedTransactionId transactionId = (NumberedTransactionId) event.getTransactionId(); boolean stopTransactionAccepted = chargingStationOcpp15Client.stopTransaction(event.getChargingStationId(), transactionId.getNumber()); if (stopTransactionAccepted){ domainService.informRequestStopTransactionAccepted(event.getChargingStationId(), event.getTransactionId(), event.getIdentityContext(), correlationToken); } else { domainService.informRequestStopTransactionRejected(event.getChargingStationId(), event.getTransactionId(), event.getIdentityContext(), correlationToken); } } else { LOG.warn("StopTransactionRequestedEvent does not contain a NumberedTransactionId. Event: {}", event); } }
@Override public void handleRequest(ChargingStationId chargingStationId, String callId, String payload, WebSocketWrapper webSocketWrapper) { Metervalues request = gson.fromJson(payload, Metervalues.class); List<MeterValue> meterValues = new ArrayList<>(); for (Value meterValue : request.getValues()) { for (Value_ value : meterValue.getValues()) { ReadingContext readingContext = new ReadingContextTranslator(value.getContext()).translate(); ValueFormat valueFormat = new ValueFormatTranslator(value.getFormat()).translate(); Location location = new LocationTranslator(value.getLocation()).translate(); Measurand measurand = new MeasurandTranslator(value.getMeasurand()).translate(); UnitOfMeasure unitOfMeasure = new UnitOfMeasureTranslator(value.getUnit()).translate(); meterValues.add(new MeterValue(meterValue.getTimestamp(), value.getValue(), readingContext, valueFormat, measurand, location, unitOfMeasure)); } } TransactionId transactionId = null; Integer requestTransactionId = request.getTransactionId(); if (requestTransactionId != null && requestTransactionId > 0) { transactionId = new NumberedTransactionId(chargingStationId, protocolIdentifier, requestTransactionId); } domainService.meterValues(chargingStationId, transactionId, new EvseId(request.getConnectorId()), meterValues, addOnIdentity); writeResponse(webSocketWrapper, new MetervaluesResponse(), callId, MessageProcUri.METERVALUES); }
@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) { Stoptransaction request = gson.fromJson(payload, Stoptransaction.class); List<MeterValue> meterValues = new ArrayList<>(); for (TransactionDatum data : request.getTransactionData()) { for (Value__ meterValue : data.getValues()) { for (Value___ value : meterValue.getValues()) { ReadingContext readingContext = new ReadingContextTranslator(value.getContext()).translate(); ValueFormat valueFormat = new ValueFormatTranslator(value.getFormat()).translate(); Location location = new LocationTranslator(value.getLocation()).translate(); Measurand measurand = new MeasurandTranslator(value.getMeasurand()).translate(); UnitOfMeasure unitOfMeasure = new UnitOfMeasureTranslator(value.getUnit()).translate(); meterValues.add(new MeterValue(meterValue.getTimestamp(), value.getValue(), readingContext, valueFormat, measurand, location, unitOfMeasure)); } } } NumberedTransactionId transactionId = new NumberedTransactionId(chargingStationId, protocolIdentifier, request.getTransactionId()); domainService.stopTransaction(chargingStationId, transactionId, new TextualToken(request.getIdTag()), request.getMeterStop(), request.getTimestamp(), meterValues, addOnIdentity); writeResponse(webSocketWrapper, new StoptransactionResponse(), callId, MessageProcUri.STOP_TRANSACTION); }
@EventHandler protected void onEvent(TransactionStoppedEvent event) { LOG.info("Sending notifyRequestResult for a TransactionStoppedEvent to the source PMS"); Integer transactionId = ((NumberedTransactionId) event.getTransactionId()).getNumber();
@Override public MeterValuesResponse meterValues(MeterValuesRequest request, String chargeBoxIdentity) { ChargingStationId chargingStationId = new ChargingStationId(chargeBoxIdentity); TransactionId transactionId = request.getTransactionId() != null ? new NumberedTransactionId(chargingStationId, PROTOCOL_IDENTIFIER, request.getTransactionId()) : null; List<MeterValue> meterValues = new ArrayList<>(); for (io.motown.ocpp.v15.soap.centralsystem.schema.MeterValue mv : request.getValues()) { for (io.motown.ocpp.v15.soap.centralsystem.schema.MeterValue.Value value : mv.getValue()) { ReadingContext readingContext = new ReadingContextTranslator(value.getContext()).translate(); ValueFormat valueFormat = new ValueFormatTranslator(value.getFormat()).translate(); Measurand measurand = new MeasurandTranslator(value.getMeasurand()).translate(); Location location = new LocationTranslator(value.getLocation()).translate(); UnitOfMeasure unitOfMeasure = new UnitOfMeasureTranslator(value.getUnit()).translate(); meterValues.add(new MeterValue(mv.getTimestamp(), value.getValue(), readingContext, valueFormat, measurand, location, unitOfMeasure)); } } domainService.meterValues(chargingStationId, transactionId, new EvseId(request.getConnectorId()), meterValues, addOnIdentity); return new MeterValuesResponse(); }
@Override public StopTransactionResponse stopTransaction(StopTransactionRequest request, String chargeBoxIdentity) { ChargingStationId chargingStationId = new ChargingStationId(chargeBoxIdentity); NumberedTransactionId transactionId = new NumberedTransactionId(chargingStationId, PROTOCOL_IDENTIFIER, request.getTransactionId()); // In case the idTag is missing we create an empty token String idTag = request.getIdTag() != null ? request.getIdTag() : ""; IdentifyingToken identifyingToken = new TextualToken(idTag); List<MeterValue> meterValues = new ArrayList<>(); List<TransactionData> transactionData = request.getTransactionData(); for (TransactionData data : transactionData) { for (io.motown.ocpp.v15.soap.centralsystem.schema.MeterValue mv : data.getValues()) { for (io.motown.ocpp.v15.soap.centralsystem.schema.MeterValue.Value value : mv.getValue()) { ReadingContext readingContext = new ReadingContextTranslator(value.getContext()).translate(); ValueFormat valueFormat = new ValueFormatTranslator(value.getFormat()).translate(); Measurand measurand = new MeasurandTranslator(value.getMeasurand()).translate(); Location location = new LocationTranslator(value.getLocation()).translate(); UnitOfMeasure unitOfMeasure = new UnitOfMeasureTranslator(value.getUnit()).translate(); meterValues.add(new MeterValue(mv.getTimestamp(), value.getValue(), readingContext, valueFormat, measurand, location, unitOfMeasure)); } } } domainService.stopTransaction(chargingStationId, transactionId, identifyingToken, request.getMeterStop(), request.getTimestamp(), meterValues, addOnIdentity); return new StopTransactionResponse(); }