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 )); }
public AddRoadSegmentToNumberedRoad( AttributeId temporaryAttributeId, RoadSegmentId segmentId, NumberedRoadNumber number, RoadSegmentNumberedRoadDirection direction, RoadSegmentNumberedRoadOrdinal ordinal) { TemporaryAttributeId = temporaryAttributeId; SegmentId = segmentId; Number = number; Direction = direction; Ordinal = ordinal; }
public ZipArchiveProblems Validate(ZipArchiveEntry entry, IDbaseRecordEnumerator <NumberedRoadChangeDbaseRecord> records) { if (entry == null) { throw new ArgumentNullException(nameof(entry)); } if (records == null) { throw new ArgumentNullException(nameof(records)); } var problems = ZipArchiveProblems.None; try { var identifiers = new Dictionary <AttributeId, RecordNumber>(); var moved = records.MoveNext(); if (moved) { while (moved) { var recordContext = entry.AtDbaseRecord(records.CurrentRecordNumber); var record = records.Current; if (record != null) { if (!record.RECORDTYPE.HasValue) { problems += recordContext.RequiredFieldIsNull(record.RECORDTYPE.Field); } else { if (!RecordType.ByIdentifier.ContainsKey(record.RECORDTYPE.Value)) { problems += recordContext.RecordTypeMismatch(record.RECORDTYPE.Value); } } if (record.GW_OIDN.HasValue) { if (record.GW_OIDN.Value == 0) { problems += recordContext.IdentifierZero(); } else { var identifier = new AttributeId(record.GW_OIDN.Value); if (identifiers.TryGetValue(identifier, out var takenByRecordNumber)) { problems += recordContext.IdentifierNotUnique( identifier, takenByRecordNumber ); } else { identifiers.Add(identifier, records.CurrentRecordNumber); } } } else { problems += recordContext.RequiredFieldIsNull(record.GW_OIDN.Field); } if (record.IDENT8.Value == null) { problems += recordContext.RequiredFieldIsNull(record.IDENT8.Field); } else if (!NumberedRoadNumber.CanParse(record.IDENT8.Value)) { problems += recordContext.NotNumberedRoadNumber(record.IDENT8.Value); } if (!record.RICHTING.HasValue) { problems += recordContext.RequiredFieldIsNull(record.RICHTING.Field); } else if (!RoadSegmentNumberedRoadDirection.ByIdentifier.ContainsKey(record.RICHTING.Value)) { problems += recordContext.NumberedRoadDirectionMismatch(record.RICHTING.Value); } if (!record.VOLGNUMMER.HasValue) { problems += recordContext.RequiredFieldIsNull(record.VOLGNUMMER.Field); } else if (!RoadSegmentNumberedRoadOrdinal.Accepts(record.VOLGNUMMER.Value)) { problems += recordContext.NumberedRoadOrdinalOutOfRange(record.VOLGNUMMER.Value); } if (!record.WS_OIDN.HasValue) { problems += recordContext.RequiredFieldIsNull(record.WS_OIDN.Field); } else if (!RoadSegmentId.Accepts(record.WS_OIDN.Value)) { problems += recordContext.RoadSegmentIdOutOfRange(record.WS_OIDN.Value); } } moved = records.MoveNext(); } } else { problems += entry.HasNoDbaseRecords(true); } } catch (Exception exception) { problems += entry.AtDbaseRecord(records.CurrentRecordNumber).HasDbaseRecordFormatError(exception); } return(problems); }