public void AddOrUpdateEVSE(EVSEDataRecord CurrentEVSEDataRecord)
        {
            if (!_EVSEs.ContainsKey(CurrentEVSEDataRecord.Id))
            {
                _EVSEs.Add(CurrentEVSEDataRecord.Id, CurrentEVSEDataRecord);
            }

            else
            {
                DebugX.Log("Duplicate EVSE identification: '" + CurrentEVSEDataRecord.Id + "'!");
            }
        }
Beispiel #2
0
        /// <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);
            }
        }
Beispiel #3
0
        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)));
                    }
                }