public async Task Handle(GeographicalAreaUpdated request, CancellationToken token)
        {
            _logger.LogInformation($"Starting {nameof(GeographicalAreaUpdatedHandler)}");

            var envelope     = _envelopeFactory.Create(request.RouteNodes, request.RouteSegment);
            var envelopeInfo = new EnvelopeInfo(envelope.MinX, envelope.MaxX, envelope.MinY, envelope.MaxY);

            var routeNodesIds   = request.RouteNodes.Select(x => x.Mrid);
            var routeSegmentIds = request.RouteSegment.Select(x => x.Mrid);

            var idChangeSets = routeNodesIds.Concat(routeSegmentIds);

            var geographicalAreaUpdatedEvent = new ObjectsWithinGeographicalAreaUpdated(
                nameof(ObjectsWithinGeographicalAreaUpdated),
                Guid.NewGuid(),
                DateTime.UtcNow,
                _applicationSettings.ApplicationName,
                string.Empty,
                "RouteNetworkUpdated",
                envelopeInfo,
                null
                );

            await _producer.Produce(_kafkaSettings.EventGeographicalAreaUpdated, geographicalAreaUpdatedEvent);
        }
Example #2
0
        private async void PublishObjectsWithinGeographicalAreaUpdatedEvent(Dictionary <Guid, IRouteNetworkElement> addedElements, Dictionary <Guid, IRouteNetworkElement> deletedElements)
        {
            List <IdChangeSet> idChangeSets = new List <IdChangeSet>();

            // Only add ids, if less that 1000. This to prevent message size to big error in Kafka
            if ((addedElements.Count + deletedElements.Count <= 1000))
            {
                // NB: We don't have to deal with modifications, because the element not feeded validation just produces a list of route network element ids that are not feeded
                if (addedElements.Count > 0)
                {
                    idChangeSets.Add(new IdChangeSet("RouteElementNotFeeded", ChangeTypeEnum.Addition, addedElements.Keys.ToArray()));
                }

                if (deletedElements.Count > 0)
                {
                    idChangeSets.Add(new IdChangeSet("RouteElementNotFeeded", ChangeTypeEnum.Deletion, deletedElements.Keys.ToArray()));
                }
            }

            // Create an envelop that covers all route network elements that have either added og deleted by the validation logic
            Envelope env = new Envelope();

            foreach (var addedElement in addedElements.Values)
            {
                env.ExpandToInclude(addedElement.Envelope);
            }
            foreach (var deletedElement in deletedElements.Values)
            {
                env.ExpandToInclude(deletedElement.Envelope);
            }

            EnvelopeInfo envelopeInfo = new EnvelopeInfo(env.MinX, env.MaxX, env.MinY, env.MaxY);

            var graphicalObjectsUpdatedEvent =
                new ObjectsWithinGeographicalAreaUpdated(
                    eventType: typeof(ObjectsWithinGeographicalAreaUpdated).Name,
                    eventId: Guid.NewGuid(),
                    eventTimestamp: DateTime.UtcNow,
                    applicationName: "RouteNetworkValidator",
                    applicationInfo: null,
                    category: "RouteNetworkValidation",
                    envelope: envelopeInfo,
                    idChangeSets: idChangeSets.ToArray()
                    );

            await _eventProducer.Produce(_kafkaSetting.GeographicalAreaUpdatedTopic, graphicalObjectsUpdatedEvent);
        }
 public GeographicalAreaUpdated(ObjectsWithinGeographicalAreaUpdated objectsWithinGeographicalAreaUpdated)
 {
     ObjectsWithinGeographicalAreaUpdated = objectsWithinGeographicalAreaUpdated;
 }