public VerificationContext(RoadNetworkView view, IRequestedChangeIdentityTranslator translator)
 {
     View       = view ?? throw new ArgumentNullException(nameof(view));
     Translator = translator ?? throw new ArgumentNullException(nameof(translator));
     Tolerance  = 0.001; // 1 mm
 }
Пример #2
0
        private AddGradeSeparatedJunction Translate(Messages.AddGradeSeparatedJunction command, IRequestedChangeIdentityTranslator translator)
        {
            var permanent = _nextGradeSeparatedJunctionId();
            var temporary = new GradeSeparatedJunctionId(command.TemporaryId);

            var           upperSegmentId = new RoadSegmentId(command.UpperSegmentId);
            RoadSegmentId?temporaryUpperSegmentId;

            if (translator.TryTranslateToPermanent(upperSegmentId, out var permanentUpperSegmentId))
            {
                temporaryUpperSegmentId = upperSegmentId;
                upperSegmentId          = permanentUpperSegmentId;
            }
            else
            {
                temporaryUpperSegmentId = null;
            }

            var           lowerSegmentId = new RoadSegmentId(command.LowerSegmentId);
            RoadSegmentId?temporaryLowerSegmentId;

            if (translator.TryTranslateToPermanent(lowerSegmentId, out var permanentLowerSegmentId))
            {
                temporaryLowerSegmentId = lowerSegmentId;
                lowerSegmentId          = permanentLowerSegmentId;
            }
            else
            {
                temporaryLowerSegmentId = null;
            }

            return(new AddGradeSeparatedJunction(
                       permanent,
                       temporary,
                       GradeSeparatedJunctionType.Parse(command.Type),
                       upperSegmentId,
                       temporaryUpperSegmentId,
                       lowerSegmentId,
                       temporaryLowerSegmentId));
        }
Пример #3
0
        private AddRoadSegmentToNationalRoad Translate(Messages.AddRoadSegmentToNationalRoad command, IRequestedChangeIdentityTranslator translator)
        {
            var permanent = _nextNationalRoadAttributeId();
            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 = NationalRoadNumber.Parse(command.Ident2);

            return(new AddRoadSegmentToNationalRoad
                   (
                       permanent,
                       temporary,
                       segmentId,
                       temporarySegmentId,
                       number
                   ));
        }
Пример #4
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
                   ));
        }
Пример #5
0
        private AddRoadSegment Translate(Messages.AddRoadSegment command, IRequestedChangeIdentityTranslator translator)
        {
            var permanent = _nextRoadSegmentId();
            var temporary = new RoadSegmentId(command.TemporaryId);

            var        startNodeId = new RoadNodeId(command.StartNodeId);
            RoadNodeId?temporaryStartNodeId;

            if (translator.TryTranslateToPermanent(startNodeId, out var permanentStartNodeId))
            {
                temporaryStartNodeId = startNodeId;
                startNodeId          = permanentStartNodeId;
            }
            else
            {
                temporaryStartNodeId = null;
            }

            var        endNodeId = new RoadNodeId(command.EndNodeId);
            RoadNodeId?temporaryEndNodeId;

            if (translator.TryTranslateToPermanent(endNodeId, out var permanentEndNodeId))
            {
                temporaryEndNodeId = endNodeId;
                endNodeId          = permanentEndNodeId;
            }
            else
            {
                temporaryEndNodeId = null;
            }

            var geometry             = GeometryTranslator.Translate(command.Geometry);
            var maintainer           = new OrganizationId(command.MaintenanceAuthority);
            var geometryDrawMethod   = RoadSegmentGeometryDrawMethod.Parse(command.GeometryDrawMethod);
            var morphology           = RoadSegmentMorphology.Parse(command.Morphology);
            var status               = RoadSegmentStatus.Parse(command.Status);
            var category             = RoadSegmentCategory.Parse(command.Category);
            var accessRestriction    = RoadSegmentAccessRestriction.Parse(command.AccessRestriction);
            var leftSideStreetNameId = command.LeftSideStreetNameId.HasValue
                ? new CrabStreetnameId(command.LeftSideStreetNameId.Value)
                : new CrabStreetnameId?();
            var rightSideStreetNameId = command.RightSideStreetNameId.HasValue
                ? new CrabStreetnameId(command.RightSideStreetNameId.Value)
                : new CrabStreetnameId?();
            var nextLaneAttributeId = _nextRoadSegmentLaneAttributeId(permanent);
            var laneAttributes      = Array.ConvertAll(
                command.Lanes,
                item => new RoadSegmentLaneAttribute(
                    nextLaneAttributeId(),
                    new AttributeId(item.AttributeId),
                    new RoadSegmentLaneCount(item.Count),
                    RoadSegmentLaneDirection.Parse(item.Direction),
                    new RoadSegmentPosition(item.FromPosition),
                    new RoadSegmentPosition(item.ToPosition),
                    new GeometryVersion(0)
                    )
                );
            var nextWidthAttributeId = _nextRoadSegmentWidthAttributeId(permanent);
            var widthAttributes      = Array.ConvertAll(
                command.Widths,
                item => new RoadSegmentWidthAttribute(
                    nextWidthAttributeId(),
                    new AttributeId(item.AttributeId),
                    new RoadSegmentWidth(item.Width),
                    new RoadSegmentPosition(item.FromPosition),
                    new RoadSegmentPosition(item.ToPosition),
                    new GeometryVersion(0)
                    )
                );
            var nextSurfaceAttributeId = _nextRoadSegmentSurfaceAttributeId(permanent);
            var surfaceAttributes      = Array.ConvertAll(
                command.Surfaces,
                item => new RoadSegmentSurfaceAttribute(
                    nextSurfaceAttributeId(),
                    new AttributeId(item.AttributeId),
                    RoadSegmentSurfaceType.Parse(item.Type),
                    new RoadSegmentPosition(item.FromPosition),
                    new RoadSegmentPosition(item.ToPosition),
                    new GeometryVersion(0)
                    )
                );

            return(new AddRoadSegment
                   (
                       permanent,
                       temporary,
                       startNodeId,
                       temporaryStartNodeId,
                       endNodeId,
                       temporaryEndNodeId,
                       geometry,
                       maintainer,
                       geometryDrawMethod,
                       morphology,
                       status,
                       category,
                       accessRestriction,
                       leftSideStreetNameId,
                       rightSideStreetNameId,
                       laneAttributes,
                       widthAttributes,
                       surfaceAttributes
                   ));
        }