public void authorize(ChargingStationId chargingStationId, String idTag, FutureEventCallback future, AddOnIdentity addOnIdentity) { this.checkChargingStationExistsAndIsRegisteredAndConfigured(chargingStationId); IdentityContext identityContext = new IdentityContext(addOnIdentity, new NullUserIdentity()); eventWaitingGateway.sendAndWaitForEvent(new AuthorizeCommand(chargingStationId, new TextualToken(idTag), identityContext), future, authorizationTimeoutInMillis); }
@Override public TextualToken deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) { JsonObject obj; try { obj = json.getAsJsonObject(); } catch (ClassCastException | IllegalStateException e) { throw new JsonParseException("TextualToken must be a JSON object", e); } String token = getMemberAsString(obj, TOKEN_MEMBER, ""); IdentifyingToken.AuthenticationStatus statusToSet = null; String status = getMemberAsString(obj, "status", null); if (status != null) { statusToSet = IdentifyingToken.AuthenticationStatus.valueOf(status); } String mobilityServiceProvider = getMemberAsString(obj, "mobilityServiceProvider", null); String visibleId = getMemberAsString(obj, "visibleId", null); return new TextualToken(token, statusToSet, mobilityServiceProvider, visibleId); }
@Override public void initiateCall() { domainService.startTransaction(chargingStationId, new EvseId(parameters.getConnectorId()), new TextualToken(parameters.getIdTag()), future, addOnIdentity); } }, new StartTransactionResponseFactory(), new ResponseFactory<StartTransactionResponse>() {
@Override public void initiateCall() { domainService.startTransaction(chargingStationId, new EvseId(parameters.getConnectorId()), new TextualToken(parameters.getIdTag()), future, addOnIdentity); } }, new StartTransactionResponseFactory(), new ResponseFactory<StartTransactionResponse>() {
@Override public IdentifyingToken validate(IdentifyingToken identifyingToken, @Nullable ChargingStationId chargingStationId) { LOG.debug("validate({}, {})", identifyingToken.getToken(), chargingStationId); String stationIdentifier = null; if (chargingStationId != null) { stationIdentifier = chargingStationId.getId(); } LocalToken localToken = tokenRepository.findToken(identifyingToken.getToken(), stationIdentifier); if (localToken != null) { if (localToken.isValid()) { LOG.debug("Token valid: {}", localToken.getHiddenId()); return new TextualToken(localToken.getHiddenId(), IdentifyingToken.AuthenticationStatus.ACCEPTED, null, localToken.getVisualId()); } else { LOG.debug("Token not valid: {}", localToken.getHiddenId()); } } else { LOG.debug("Token {} not found for charging station {}", identifyingToken.getToken(), chargingStationId); } return identifyingToken; }
@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); } }
@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(); }
LOG.debug("Token valid: {}", token.getUid()); return new TextualToken(identification.getToken(), AuthenticationStatus.ACCEPTED, token.getIssuingCompany(), token.getVisualNumber()); } else {
@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; } }); }
@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; } }); }
IdentifyingToken identifyingToken = new TextualToken(sessionInfo.getAuthorizationIdentifier()); EvseId evseId = new EvseId(Integer.parseInt(sessionInfo.getConnectorIdentifier()));
@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); }
public SourceAuthorizeResponse authorize(SourceAuthorizeRequest sourceAuthorizeRequest) { LOG.trace("Authorize called"); SourceAuthorizeResponse sourceAuthorizeResponse; if (identificationAuthorizationService.validate(new TextualToken(sourceAuthorizeRequest.getUserIdentifier()), null).isValid()) { DestinationEndpoint destinationEndpoint = destinationEndpointRepository.findDestinationEndpointByPmsIdentifier(sourceAuthorizeRequest.getServicePms()); if (destinationEndpoint != null) { DestinationClient destinationClient = new DestinationClient(destinationEndpoint.getDestinationEndpointUrl()); sourceAuthorizeResponse = destinationClient.authorize(sourceAuthorizeRequest); createSessionInfo(sourceAuthorizeRequest, sourceAuthorizeResponse); } else { ResponseError responseError = new ResponseError(); responseError.setErrorMsg("PMS Unknown: " + sourceAuthorizeRequest.getServicePms()); responseError.setErrorCode("400"); sourceAuthorizeResponse = new SourceAuthorizeResponse(responseError); } } else { ResponseError responseError = new ResponseError(); responseError.setErrorMsg("Invalid userIdentifier"); responseError.setErrorCode("400"); sourceAuthorizeResponse = new SourceAuthorizeResponse(responseError); } return sourceAuthorizeResponse; }
@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(); }