public void AddOrUpdateEVSE(EVSEDataRecord CurrentEVSEDataRecord) { if (!_EVSEs.ContainsKey(CurrentEVSEDataRecord.Id)) { _EVSEs.Add(CurrentEVSEDataRecord.Id, CurrentEVSEDataRecord); } else { DebugX.Log("Duplicate EVSE identification: '" + CurrentEVSEDataRecord.Id + "'!"); } }
/// <summary> /// Try to parse the given XML representation of an OICP operator EVSE data request. /// </summary> /// <param name="OperatorEVSEDataXML">The XML to parse.</param> /// <param name="OperatorEVSEData">The parsed operator EVSE data request.</param> /// <param name="CustomOperatorEVSEDataParser">A delegate to parse custom OperatorEVSEData XML elements.</param> /// <param name="CustomEVSEDataRecordParser">A delegate to parse custom EVSEDataRecord XML elements.</param> /// <param name="CustomAddressParser">A delegate to parse custom Address XML elements.</param> /// <param name="CustomChargingFacilityParser">A delegate to parse custom ChargingFacility XML elements.</param> /// <param name="OnException">An optional delegate called whenever an exception occured.</param> public static Boolean TryParse(XElement OperatorEVSEDataXML, out OperatorEVSEData OperatorEVSEData, CustomXMLParserDelegate <OperatorEVSEData> CustomOperatorEVSEDataParser = null, CustomXMLParserDelegate <EVSEDataRecord> CustomEVSEDataRecordParser = null, CustomXMLParserDelegate <Address> CustomAddressParser = null, CustomXMLParserDelegate <ChargingFacility> CustomChargingFacilityParser = null, OnExceptionDelegate OnException = null) { try { if (OperatorEVSEDataXML.Name != OICPNS.EVSEData + "OperatorEvseData") { OperatorEVSEData = null; return(false); } OperatorEVSEData = new OperatorEVSEData( OperatorEVSEDataXML.MapElements(OICPNS.EVSEData + "EvseDataRecord", (xml, e) => EVSEDataRecord.Parse(xml, CustomEVSEDataRecordParser, CustomAddressParser, CustomChargingFacilityParser, e), OnException). Where(operatorevsedata => operatorevsedata != null), OperatorEVSEDataXML.MapValueOrFail(OICPNS.EVSEData + "OperatorID", Operator_Id.Parse), OperatorEVSEDataXML.ElementValueOrDefault(OICPNS.EVSEData + "OperatorName") ); if (CustomOperatorEVSEDataParser != null) { OperatorEVSEData = CustomOperatorEVSEDataParser(OperatorEVSEDataXML, OperatorEVSEData); } return(true); } catch (Exception e) { OnException?.Invoke(DateTime.UtcNow, OperatorEVSEDataXML, e); OperatorEVSEData = null; return(false); } }
public void AddOrUpdateChargingPool(EVSEDataRecord CurrentEVSEDataRecord) { var chargingPoolId = CurrentEVSEDataRecord.ChargingPoolId ?? ChargingPool_Id.Generate(OperatorId, CurrentEVSEDataRecord.Address, CurrentEVSEDataRecord.GeoCoordinates, CurrentEVSEDataRecord.SubOperatorName); if (!_ChargingPools.TryGetValue(chargingPoolId, out ChargingPoolInfo chargingPoolInfo)) { chargingPoolInfo = new ChargingPoolInfo(this, chargingPoolId, CurrentEVSEDataRecord.Address, CurrentEVSEDataRecord.GeoCoordinates); _ChargingPools.Add(chargingPoolInfo.PoolId, chargingPoolInfo); } chargingPoolInfo.AddOrUpdateChargingStation(CurrentEVSEDataRecord); }
PushEVSEData(this ICPOClient ICPOClient, EVSEDataRecord EVSEDataRecord, Operator_Id OperatorId, String OperatorName = null, ActionTypes Action = ActionTypes.insert, DateTime?Timestamp = null, CancellationToken?CancellationToken = null, EventTracking_Id EventTrackingId = null, TimeSpan?RequestTimeout = null) => ICPOClient.PushEVSEData(new PushEVSEDataRequest(new OperatorEVSEData(new EVSEDataRecord[] { EVSEDataRecord }, OperatorId, OperatorName), Action, Timestamp, CancellationToken, EventTrackingId, RequestTimeout ?? ICPOClient.RequestTimeout));
/// <summary> /// Try to parse the given JSON representation of a PullEVSEData response. /// </summary> /// <param name="Request">The request leading to this response.</param> /// <param name="JSON">The JSON to parse.</param> /// <param name="ResponseTimestamp">The timestamp of the response creation.</param> /// <param name="EventTrackingId">An optional event tracking identification for correlating this response with other events.</param> /// <param name="Runtime">The runtime of the request/response.</param> /// <param name="PullEVSEDataResponse">The parsed PullEVSEData response.</param> /// <param name="ErrorResponse">An optional error response.</param> /// <param name="ProcessId">The optional Hubject process identification of the request.</param> /// <param name="HTTPResponse">The optional HTTP response.</param> /// <param name="CustomPullEVSEDataResponseParser">A delegate to parse custom PullEVSEData response JSON objects.</param> public static Boolean TryParse(PullEVSEDataRequest Request, JObject JSON, DateTime ResponseTimestamp, EventTracking_Id EventTrackingId, TimeSpan Runtime, out PullEVSEDataResponse PullEVSEDataResponse, out String ErrorResponse, Process_Id?ProcessId = null, HTTPResponse HTTPResponse = null, CustomJObjectParserDelegate <PullEVSEDataResponse> CustomPullEVSEDataResponseParser = null) { try { PullEVSEDataResponse = default; if (JSON?.HasValues != true) { ErrorResponse = "The given JSON object must not be null or empty!"; return(false); } #region Parse Content [mandatory] if (!JSON.ParseMandatory("content", "EVSE data content", out JArray EVSEDataRecordsJSON, out ErrorResponse)) { return(false); } var EVSEDataRecords = new List <EVSEDataRecord>(); var Warnings = new List <Warning>(); foreach (var evseDataRecordJSON in EVSEDataRecordsJSON) { try { var ErrorResponse2 = String.Empty; if (evseDataRecordJSON is JObject evseDataRecordJObject && EVSEDataRecord.TryParse(evseDataRecordJObject, out EVSEDataRecord evseDataRecord, out ErrorResponse2)) { EVSEDataRecords.Add(evseDataRecord); } else { if (evseDataRecordJSON is JObject evseDataRecordJObject2) { ErrorResponse2 = "EVSE " + evseDataRecordJObject2["EvseID"]?.Value <String>() + ": " + ErrorResponse2; } Warnings.Add(Warning.Create(I18NString.Create(Languages.en, ErrorResponse2))); } } catch (Exception e) { var message = e.Message; if (evseDataRecordJSON is JObject evseDataRecordJObject2) { message = "EVSE " + evseDataRecordJObject2["EvseID"]?.Value <String>() + ": " + message; } Warnings.Add(Warning.Create(I18NString.Create(Languages.en, message))); } }