private async Task TransformToTopologyElementAsync(ResourceDescription modelEntity) { string verboseMessage = $"{baseLogString} entering TransformToTopologyElement method."; Logger.LogVerbose(verboseMessage); DMSType dmsType; dmsType = GetDMSTypeOfTopologyElement(modelEntity.Id); if (dmsType == DMSType.DISCRETE) { Measurement newDiscrete = await GetPopulatedDiscreteMeasurement(modelEntity); if (!await Measurements.ContainsKeyAsync(newDiscrete.Id)) { await Measurements.SetAsync(newDiscrete.Id, newDiscrete); //contains moze da bude false, a da kad doje ova linija na red, da vrednost bude popunjena, zato SetAsync, ali onda je sam if suvisan (ne znam da li je kljucan za neku logiku...) } var measurementProviderClient = MeasurementProviderClient.CreateClient(); await measurementProviderClient.AddDiscreteMeasurement(newDiscrete as DiscreteMeasurement); } else if (dmsType == DMSType.ANALOG) { Measurement newAnalog = await GetPopulatedAnalogMeasurement(modelEntity); if (!await Measurements.ContainsKeyAsync(newAnalog.Id)) { await Measurements.SetAsync(newAnalog.Id, newAnalog); //contains moze da bude false, a da kad doje ova linija na red, da vrednost bude popunjena, zato SetAsync, ali onda je sam if suvisan (ne znam da li je kljucan za neku logiku...) } var measurementProviderClient = MeasurementProviderClient.CreateClient(); await measurementProviderClient.AddAnalogMeasurement(newAnalog as AnalogMeasurement); } else if (dmsType != DMSType.MASK_TYPE && dmsType != DMSType.BASEVOLTAGE) { ITopologyElement newElement = await GetPopulatedElement(modelEntity); //lock (syncObj) //{ if (!await TopologyElements.ContainsKeyAsync(newElement.Id)) { await TopologyElements.SetAsync(newElement.Id, newElement); //contains moze da bude false, a da kad doje ova linija na red, da vrednost bude popunjena, zato SetAsync, ali onda je sam if suvisan (ne znam da li je kljucan za neku logiku...) } else { Logger.LogDebug($"{baseLogString} TransformToTopologyElementAsync => TopologyElements contain key {newElement.Id:X16}"); } //} if (dmsType == DMSType.ENERGYSOURCE) { var energySourcesResult = await EnergySources.TryGetValueAsync(ReliableDictionaryNames.EnergySources); if (energySourcesResult.HasValue) { var energySources = energySourcesResult.Value; energySources.Add(newElement.Id); await EnergySources.SetAsync(ReliableDictionaryNames.EnergySources, energySources); } else { Logger.LogWarning($"{baseLogString} Reliable collection '{ReliableDictionaryNames.EnergySources}' was not defined yet. Handling..."); await EnergySources.SetAsync(ReliableDictionaryNames.EnergySources, new List <long>() { newElement.Id }); } } //lock (syncObj) //{ if (!await ElementConnections.ContainsKeyAsync(modelEntity.Id)) { await ElementConnections.SetAsync(modelEntity.Id, await GetAllReferencedElements(modelEntity)); //contains moze da bude false, a da kad doje ova linija na red, da vrednost bude popunjena, zato SetAsync, ali onda je sam if suvisan (ne znam da li je kljucan za neku logiku...) } else { Logger.LogDebug($"{baseLogString} TransformToTopologyElementAsync => ElementConnections contain key {modelEntity.Id:X16}"); } //} } }