示例#1
0
 public AddRoadNode(RecordNumber recordNumber, RoadNodeId temporaryId, RoadNodeType type)
 {
     RecordNumber = recordNumber;
     TemporaryId  = temporaryId;
     Type         = type ?? throw new ArgumentNullException(nameof(type));
     Geometry     = null;
 }
示例#2
0
 private AddRoadNode(RecordNumber recordNumber, RoadNodeId temporaryId, RoadNodeType type, NetTopologySuite.Geometries.Point geometry)
 {
     RecordNumber = recordNumber;
     TemporaryId  = temporaryId;
     Type         = type;
     Geometry     = geometry;
 }
示例#3
0
 public AddRoadNode(RoadNodeId id, RoadNodeId temporaryId, RoadNodeType type, Point geometry)
 {
     Id          = id;
     TemporaryId = temporaryId;
     Type        = type ?? throw new ArgumentNullException(nameof(type));
     Geometry    = geometry ?? throw new ArgumentNullException(nameof(geometry));
 }
示例#4
0
 private static RoadNodeTypeDbaseRecord RecordFrom(RoadNodeType item)
 {
     return(new RoadNodeTypeDbaseRecord
     {
         TYPE = { Value = item.Translation.Identifier },
         LBLTYPE = { Value = item.Translation.Name },
         DEFTYPE = { Value = item.Translation.Description }
     });
 }
示例#5
0
        private AddRoadNode Translate(Messages.AddRoadNode command)
        {
            var permanent = _nextRoadNodeId();
            var temporary = new RoadNodeId(command.TemporaryId);

            return(new AddRoadNode
                   (
                       permanent,
                       temporary,
                       RoadNodeType.Parse(command.Type),
                       GeometryTranslator.Translate(command.Geometry)
                   ));
        }
示例#6
0
        public Task When_road_nodes_were_imported()
        {
            var data = _fixture
                       .CreateMany <ImportedRoadNode>(new Random().Next(1, 100))
                       .Select(@event =>
            {
                var point             = BackOffice.Core.GeometryTranslator.Translate(@event.Geometry);
                var pointShapeContent = new PointShapeContent(
                    Be.Vlaanderen.Basisregisters.Shaperon.Geometries.GeometryTranslator.FromGeometryPoint(
                        new NetTopologySuite.Geometries.Point(point.X, point.Y)
                        )
                    );
                var expectedRecord = new RoadNodeRecord
                {
                    Id          = @event.Id,
                    DbaseRecord = new RoadNodeDbaseRecord
                    {
                        WK_OIDN = { Value = @event.Id },
                        WK_UIDN = { Value = @event.Id + "_" + @event.Version },
                        TYPE    = { Value = RoadNodeType.Parse(@event.Type).Translation.Identifier },
                        LBLTYPE =
                        {
                            Value = RoadNodeType.Parse(@event.Type).Translation.Name
                        },
                        BEGINTIJD = { Value = @event.Origin.Since },
                        BEGINORG  = { Value = @event.Origin.OrganizationId },
                        LBLBGNORG = { Value = @event.Origin.Organization }
                    }.ToBytes(_services.MemoryStreamManager, Encoding.UTF8),
                    ShapeRecordContent       = pointShapeContent.ToBytes(_services.MemoryStreamManager, Encoding.UTF8),
                    ShapeRecordContentLength = pointShapeContent.ContentLength.ToInt32(),
                    BoundingBox = RoadNodeBoundingBox.From(pointShapeContent.Shape)
                };

                return(new
                {
                    ImportedRoadNode = @event,
                    ExpectedRecord = expectedRecord
                });
            }).ToList();

            return(new RoadNodeRecordProjection(new RecyclableMemoryStreamManager(), Encoding.UTF8)
                   .Scenario()
                   .Given(data.Select(d => d.ImportedRoadNode))
                   .Expect(data.Select(d => d.ExpectedRecord)));
        }
示例#7
0
        public Problems RoadNodeTypeMismatch(int connectedSegmentCount, RoadNodeType actualType, RoadNodeType[] expectedTypes)
        {
            if (expectedTypes == null)
            {
                throw new ArgumentNullException(nameof(expectedTypes));
            }
            if (expectedTypes.Length == 0)
            {
                throw new ArgumentException("The expected road node types must contain at least one.", nameof(expectedTypes));
            }

            var parameters = new List <ProblemParameter>
            {
                new ProblemParameter("ConnectedSegmentCount",
                                     connectedSegmentCount.ToString(CultureInfo.InvariantCulture)),
                new ProblemParameter("Actual", actualType.ToString())
            };

            parameters.AddRange(expectedTypes.Select(type => new ProblemParameter("Expected", type.ToString())));

            return(new Problems(_problems.Add(new Error(nameof(RoadNodeTypeMismatch), parameters.ToArray()))));
        }
        public RoadNodeRecordProjection(RecyclableMemoryStreamManager manager, Encoding encoding)
        {
            if (manager == null)
            {
                throw new ArgumentNullException(nameof(manager));
            }
            if (encoding == null)
            {
                throw new ArgumentNullException(nameof(encoding));
            }

            When <Envelope <ImportedRoadNode> >(async(context, envelope, token) =>
            {
                var typeTranslation = RoadNodeType.Parse(envelope.Message.Type).Translation;
                var dbaseRecord     = new RoadNodeDbaseRecord
                {
                    WK_OIDN   = { Value = envelope.Message.Id },
                    WK_UIDN   = { Value = envelope.Message.Id + "_" + envelope.Message.Version },
                    TYPE      = { Value = typeTranslation.Identifier },
                    LBLTYPE   = { Value = typeTranslation.Name },
                    BEGINTIJD = { Value = envelope.Message.Origin.Since },
                    BEGINORG  = { Value = envelope.Message.Origin.OrganizationId },
                    LBLBGNORG = { Value = envelope.Message.Origin.Organization }
                };

                var point             = GeometryTranslator.FromGeometryPoint(BackOffice.Core.GeometryTranslator.Translate(envelope.Message.Geometry));
                var pointShapeContent = new PointShapeContent(point);

                await context.RoadNodes.AddAsync(new RoadNodeRecord
                {
                    Id = envelope.Message.Id,
                    ShapeRecordContent       = pointShapeContent.ToBytes(manager, encoding),
                    ShapeRecordContentLength = pointShapeContent.ContentLength.ToInt32(),
                    DbaseRecord = dbaseRecord.ToBytes(manager, encoding),
                    BoundingBox = RoadNodeBoundingBox.From(pointShapeContent.Shape)
                }, token);
            });

            When <Envelope <RoadNetworkChangesBasedOnArchiveAccepted> >(async(context, envelope, token) =>
            {
                foreach (var message in envelope.Message.Changes.Flatten())
                {
                    switch (message)
                    {
                    case RoadNodeAdded node:
                        var typeTranslation = RoadNodeType.Parse(node.Type).Translation;
                        var dbaseRecord     = new RoadNodeDbaseRecord
                        {
                            WK_OIDN   = { Value = node.Id },
                            WK_UIDN   = { Value = node.Id + "_0" },  // 1?
                            TYPE      = { Value = typeTranslation.Identifier },
                            LBLTYPE   = { Value = typeTranslation.Name },
                            BEGINTIJD = { Value = LocalDateTimeTranslator.TranslateFromWhen(envelope.Message.When) },
                            BEGINORG  = { Value = envelope.Message.OrganizationId },
                            LBLBGNORG = { Value = envelope.Message.Organization }
                        };

                        var point             = GeometryTranslator.FromGeometryPoint(BackOffice.Core.GeometryTranslator.Translate(node.Geometry));
                        var pointShapeContent = new PointShapeContent(point);

                        await context.RoadNodes.AddAsync(new RoadNodeRecord
                        {
                            Id = node.Id,
                            ShapeRecordContent       = pointShapeContent.ToBytes(manager, encoding),
                            ShapeRecordContentLength = pointShapeContent.ContentLength.ToInt32(),
                            DbaseRecord = dbaseRecord.ToBytes(manager, encoding),
                            BoundingBox = RoadNodeBoundingBox.From(pointShapeContent.Shape)
                        }, token);
                        break;
                    }
                }
            });
        }