示例#1
0
        private AddRoadSegmentToNumberedRoad Translate(Messages.AddRoadSegmentToNumberedRoad command, IRequestedChangeIdentityTranslator translator)
        {
            var permanent = _nextNumberedRoadAttributeId();
            var temporary = new AttributeId(command.TemporaryAttributeId);

            var           segmentId = new RoadSegmentId(command.SegmentId);
            RoadSegmentId?temporarySegmentId;

            if (translator.TryTranslateToPermanent(segmentId, out var permanentSegmentId))
            {
                temporarySegmentId = segmentId;
                segmentId          = permanentSegmentId;
            }
            else
            {
                temporarySegmentId = null;
            }

            var number    = NumberedRoadNumber.Parse(command.Ident8);
            var direction = RoadSegmentNumberedRoadDirection.Parse(command.Direction);
            var ordinal   = new RoadSegmentNumberedRoadOrdinal(command.Ordinal);

            return(new AddRoadSegmentToNumberedRoad
                   (
                       permanent,
                       temporary,
                       segmentId,
                       temporarySegmentId,
                       number,
                       direction,
                       ordinal
                   ));
        }
示例#2
0
 private static NumberedRoadSegmentDirectionDbaseRecord RecordFrom(RoadSegmentNumberedRoadDirection item)
 {
     return(new NumberedRoadSegmentDirectionDbaseRecord
     {
         RICHTING = { Value = item.Translation.Identifier },
         LBLRICHT = { Value = item.Translation.Name },
         DEFRICHT = { Value = item.Translation.Description }
     });
 }
示例#3
0
 public AddRoadSegmentToNumberedRoad(
     AttributeId temporaryAttributeId,
     RoadSegmentId segmentId,
     NumberedRoadNumber number,
     RoadSegmentNumberedRoadDirection direction,
     RoadSegmentNumberedRoadOrdinal ordinal)
 {
     TemporaryAttributeId = temporaryAttributeId;
     SegmentId            = segmentId;
     Number    = number;
     Direction = direction;
     Ordinal   = ordinal;
 }
        public Task When_importing_road_nodes()
        {
            var random = new Random();
            var data   = _fixture
                         .CreateMany <ImportedRoadSegment>(random.Next(1, 10))
                         .Select(segment =>
            {
                segment.PartOfNumberedRoads = _fixture
                                              .CreateMany <ImportedRoadSegmentNumberedRoadAttributes>(random.Next(1, 10))
                                              .ToArray();

                var expected = segment
                               .PartOfNumberedRoads
                               .Select(numberedRoad => new RoadSegmentNumberedRoadAttributeRecord
                {
                    Id            = numberedRoad.AttributeId,
                    RoadSegmentId = segment.Id,
                    DbaseRecord   = new RoadSegmentNumberedRoadAttributeDbaseRecord
                    {
                        GW_OIDN    = { Value = numberedRoad.AttributeId },
                        WS_OIDN    = { Value = segment.Id },
                        IDENT8     = { Value = numberedRoad.Ident8 },
                        RICHTING   = { Value = RoadSegmentNumberedRoadDirection.Parse(numberedRoad.Direction).Translation.Identifier },
                        LBLRICHT   = { Value = RoadSegmentNumberedRoadDirection.Parse(numberedRoad.Direction).Translation.Name },
                        VOLGNUMMER = { Value = numberedRoad.Ordinal },
                        BEGINTIJD  = { Value = numberedRoad.Origin.Since },
                        BEGINORG   = { Value = numberedRoad.Origin.OrganizationId },
                        LBLBGNORG  = { Value = numberedRoad.Origin.Organization }
                    }.ToBytes(_services.MemoryStreamManager, Encoding.UTF8)
                });

                return(new
                {
                    importedRoadSegment = segment,
                    expected
                });
            }).ToList();

            return(new RoadSegmentNumberedRoadAttributeRecordProjection(_services.MemoryStreamManager, Encoding.UTF8)
                   .Scenario()
                   .Given(data.Select(d => d.importedRoadSegment))
                   .Expect(data
                           .SelectMany(d => d.expected)
                           .Cast <object>()
                           .ToArray()
                           ));
        }
        public RoadSegmentNumberedRoadAttributeRecordProjection(RecyclableMemoryStreamManager manager,
                                                                Encoding encoding)
        {
            if (manager == null)
            {
                throw new ArgumentNullException(nameof(manager));
            }
            if (encoding == null)
            {
                throw new ArgumentNullException(nameof(encoding));
            }

            When <Envelope <ImportedRoadSegment> >((context, envelope, token) =>
            {
                if (envelope.Message.PartOfNumberedRoads.Length == 0)
                {
                    return(Task.CompletedTask);
                }

                var numberedRoadAttributes = envelope.Message
                                             .PartOfNumberedRoads
                                             .Select(numberedRoad =>
                {
                    var directionTranslation =
                        RoadSegmentNumberedRoadDirection.Parse(numberedRoad.Direction).Translation;
                    return(new RoadSegmentNumberedRoadAttributeRecord
                    {
                        Id = numberedRoad.AttributeId,
                        RoadSegmentId = envelope.Message.Id,
                        DbaseRecord = new RoadSegmentNumberedRoadAttributeDbaseRecord
                        {
                            GW_OIDN = { Value = numberedRoad.AttributeId },
                            WS_OIDN = { Value = envelope.Message.Id },
                            IDENT8 = { Value = numberedRoad.Ident8 },
                            RICHTING = { Value = directionTranslation.Identifier },
                            LBLRICHT = { Value = directionTranslation.Name },
                            VOLGNUMMER = { Value = numberedRoad.Ordinal },
                            BEGINTIJD = { Value = numberedRoad.Origin.Since },
                            BEGINORG = { Value = numberedRoad.Origin.OrganizationId },
                            LBLBGNORG = { Value = numberedRoad.Origin.Organization },
                        }.ToBytes(manager, encoding)
                    });
                });
                return(context.RoadSegmentNumberedRoadAttributes.AddRangeAsync(numberedRoadAttributes, token));
            });

            When <Envelope <RoadNetworkChangesBasedOnArchiveAccepted> >(async(context, envelope, token) =>
            {
                foreach (var change in envelope.Message.Changes.Flatten())
                {
                    switch (change)
                    {
                    case RoadSegmentAddedToNumberedRoad numberedRoad:
                        var directionTranslation =
                            RoadSegmentNumberedRoadDirection.Parse(numberedRoad.Direction).Translation;
                        await context.RoadSegmentNumberedRoadAttributes.AddAsync(new RoadSegmentNumberedRoadAttributeRecord
                        {
                            Id            = numberedRoad.AttributeId,
                            RoadSegmentId = numberedRoad.SegmentId,
                            DbaseRecord   = new RoadSegmentNumberedRoadAttributeDbaseRecord
                            {
                                GW_OIDN    = { Value = numberedRoad.AttributeId },
                                WS_OIDN    = { Value = numberedRoad.SegmentId },
                                IDENT8     = { Value = numberedRoad.Ident8 },
                                RICHTING   = { Value = directionTranslation.Identifier },
                                LBLRICHT   = { Value = directionTranslation.Name },
                                VOLGNUMMER = { Value = numberedRoad.Ordinal },
                                BEGINTIJD  = { Value = LocalDateTimeTranslator.TranslateFromWhen(envelope.Message.When) },
                                BEGINORG   = { Value = envelope.Message.OrganizationId },
                                LBLBGNORG  = { Value = envelope.Message.Organization }
                            }.ToBytes(manager, encoding)
                        });
                        break;
                    }
                }
            });
        }