public SpatialRecord Map(ISOSpatialRow isoSpatialRow, List<WorkingData> meters)
        {
            var spatialRecord = new SpatialRecord();

            foreach (var meter in meters.OfType<NumericWorkingData>())
            {
                SetNumericMeterValue(isoSpatialRow, meter, spatialRecord);
            }

            foreach (var meter in meters.OfType<EnumeratedWorkingData>())
            {
                SetEnumeratedMeterValue(isoSpatialRow, meter, spatialRecord);
            }

            spatialRecord.Geometry = new ApplicationDataModel.Shapes.Point
            {
                X = Convert.ToDouble(isoSpatialRow.EastPosition * CoordinateMultiplier),
                Y = Convert.ToDouble(isoSpatialRow.NorthPosition * CoordinateMultiplier),
                Z = isoSpatialRow.Elevation
            };

            spatialRecord.Timestamp = isoSpatialRow.TimeStart;

            return spatialRecord;
        }
        public static void AreEqual(ISOSpatialRow isoSpatialRow, SpatialRecord adaptSpatialRecord, IEnumerable<WorkingData> meters)
        {
            foreach (var meter in meters)
            {
                var isoValue = isoSpatialRow.SpatialValues.SingleOrDefault(v => v.Id == meter.Id.FindIntIsoId());

                if(isoValue == null)
                    continue;

                if (meter is NumericWorkingData)
                {
                    var numericMeter = meter as NumericWorkingData;

                    var numericRepresentationValue = (NumericRepresentationValue)adaptSpatialRecord.GetMeterValue(numericMeter);
                    if (isoValue != null)
                        Assert.AreEqual(isoValue.Value, numericRepresentationValue.Value.Value);
                }
                if (meter is EnumeratedWorkingData)
                {
                    var isoEnumeratedMeter = meter as ISOEnumeratedMeter;
                    var enumeratedValue = isoEnumeratedMeter.GetEnumeratedValue(isoValue, isoEnumeratedMeter);
                    Assert.AreEqual(enumeratedValue.Representation.Description, meter.Representation.Description);
                }
            }
        }
        public void GivenOperationDataWithSpatialRecordDataWithNumericRepValueWhenProcessOperationDAtaThenRowsAreAdded()
        {
            var harvestMoistureMeter = new NumericWorkingData { Representation = RepresentationInstanceList.vrHarvestMoisture.ToModelRepresentation() };
            _workingDatas.Add(harvestMoistureMeter);
            _deviceElementUses.Add(0, new List<DeviceElementUse>
            {
                new DeviceElementUse
                {
                    Depth = 0,
                    GetWorkingDatas = () => _workingDatas,
                }
            });

            var spatialRecord = new SpatialRecord();
            var numericRepresentation = new NumericRepresentationValue(RepresentationInstanceList.vrHarvestMoisture.ToModelRepresentation(), UnitSystemManager.GetUnitOfMeasure("prcnt"), new NumericValue(UnitSystemManager.GetUnitOfMeasure("prcnt"), 3.0));

            spatialRecord.SetMeterValue(harvestMoistureMeter, numericRepresentation);

            _spatialRecords.Add(spatialRecord);

            var dataTable = _operationDataProcessor.ProcessOperationData(_operationData);

            Assert.AreEqual(1, dataTable.Rows.Count);
            Assert.AreEqual(numericRepresentation.Value.Value.ToString(), dataTable.Rows[0][0]);
        }
        public void Setup()
        {
            _meter = new NumericMeter();
            _spatialRecord = new SpatialRecord();
            _representationMapperMock = new Mock<IRepresentationMapper>();

            _mapper = new NumericValueMapper(_representationMapperMock.Object);
        }
Beispiel #5
0
        private static void CreateNumericMeterCell(SpatialRecord spatialRecord, WorkingData workingData, int depth, DataRow dataRow)
        {
            var numericRepresentationValue = spatialRecord.GetMeterValue(workingData) as NumericRepresentationValue;
            var value = numericRepresentationValue != null
                ? numericRepresentationValue.Value.Value.ToString(CultureInfo.InvariantCulture)
                : "";

            dataRow[GetColumnName(workingData, depth)] = value;
        }
        public uint Map(NumericWorkingData meter, SpatialRecord spatialRecord)
        {
            var value = (NumericRepresentationValue)spatialRecord.GetMeterValue(meter);
            if (value == null)
                return 0;

            var resolution = GetResolution(value);
            return (UInt32)(value.Value.Value / resolution);
        }
        public void GivenMetersWithPartlyCloudyWhenGetMetersValueThenIsCorrect()
        {
            var enumeratedMeter = new ISOEnumeratedMeter();
            var meters = new List<WorkingData> { enumeratedMeter };

            var spatialRecord = new SpatialRecord();
            spatialRecord.SetMeterValue(enumeratedMeter, new EnumeratedValue { Value = DefinedTypeEnumerationInstanceList.dtiPartlyCloudy.ToModelEnumMember() });

            var result = _creator.GetMetersValue(meters, spatialRecord);
            Assert.AreEqual(0x20544353, result);
        }
        public void GivenMetersWithUnknownWhenGetMetersValueThenThree()
        {
            var enumeratedMeter1 = new ISOEnumeratedMeter();
            var meters = new List<WorkingData> { enumeratedMeter1 };

            var spatialRecord = new SpatialRecord();
            spatialRecord.SetMeterValue(enumeratedMeter1, new EnumeratedValue { Value = DefinedTypeEnumerationInstanceList.dtiSunny.ToModelEnumMember() });

            var result = _creator.GetMetersValue(meters, spatialRecord);
            Assert.AreEqual(0x03, result);
        }
        public void GivenMetersWithUnStableWhenGetMetersValueThenIsZero()
        {
            var enumeratedMeter = new ISOEnumeratedMeter();
            var meters = new List<WorkingData> { enumeratedMeter };

            var spatialRecord = new SpatialRecord();
            spatialRecord.SetMeterValue(enumeratedMeter, new EnumeratedValue { Value = DefinedTypeEnumerationInstanceList.dtiWeightUnStable.ToModelEnumMember() });

            var result = _creator.GetMetersValue(meters, spatialRecord);
            Assert.AreEqual(0x00, result);
        }
        public void GivenMetersWithRearPivotWagonHitchWhenGetMetersValueThenSeven()
        {
            var enumeratedMeter1 = new ISOEnumeratedMeter();
            var meters = new List<WorkingData> { enumeratedMeter1 };

            var spatialRecord = new SpatialRecord();
            spatialRecord.SetMeterValue(enumeratedMeter1, new EnumeratedValue { Value = DefinedTypeEnumerationInstanceList.dtiRearPivotWagonHitch.ToModelEnumMember() });

            var result = _creator.GetMetersValue(meters, spatialRecord);
            Assert.AreEqual(0x07, result);
        }
        private static void AreEqual(SpatialRecord adaptSpatialRecord, ISOSpatialRow isoSpatialRow, List<WorkingData> meters)
        {
            Assert.AreEqual(adaptSpatialRecord.Timestamp, isoSpatialRow.TimeStart);

            var point = (Point)adaptSpatialRecord.Geometry;
            Assert.AreEqual((int)(point.X / CoordinateMultiplier), isoSpatialRow.EastPosition, CoordinateMultiplier);
            Assert.AreEqual((int)(point.Y / CoordinateMultiplier), isoSpatialRow.NorthPosition, CoordinateMultiplier);
            Assert.AreEqual(point.Z, isoSpatialRow.Elevation);

            SpatialValueAssert.AreEqual(isoSpatialRow, adaptSpatialRecord, meters);
        }
        private static void AreEqual(ISOSpatialRow isoSpatialRow, SpatialRecord adaptSpatialRecord, IEnumerable<WorkingData> meters)
        {
            Assert.AreEqual(isoSpatialRow.TimeStart, adaptSpatialRecord.Timestamp);

            var point = adaptSpatialRecord.Geometry as Point;
            Assert.AreEqual(isoSpatialRow.EastPosition * CoordinateMultiplier, point.X, 0.000001);
            Assert.AreEqual(isoSpatialRow.NorthPosition * CoordinateMultiplier, point.Y, 0.000001);
            Assert.AreEqual(isoSpatialRow.Elevation, point.Z);

            SpatialValueAssert.AreEqual(isoSpatialRow, adaptSpatialRecord, meters);
        }
        public UInt32 Map(ISOEnumeratedMeter currentMeter, List<WorkingData> meters, SpatialRecord spatialRecord)
        {
            var matchingMeters = meters.Where(x => x.Id.FindIntIsoId() == currentMeter.Id.FindIntIsoId()).ToList();
            var ddi = _representationMapper.Map(currentMeter.Representation);

            if (ddi == 141 && currentMeter.DeviceElementUseId != 0)
                ddi = 161;

            var creator = _enumeratedMeterFactory.GetMeterCreator(ddi.GetValueOrDefault());
            return creator.GetMetersValue(matchingMeters, spatialRecord);
        }
        public UInt32 GetMetersValue(List<WorkingData> meters, SpatialRecord spatialRecord)
        {
            var meter = (ISOEnumeratedMeter) meters.SingleOrDefault();
            var value = (EnumeratedValue)spatialRecord.GetMeterValue(meter);

            if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiRecordingStatusOn.ToModelEnumMember().Code)
                return 1;
            if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiRecordingStatusOff.ToModelEnumMember().Code)
                return 0;

            return 3;
        }
        public UInt32 GetMetersValue(List<WorkingData> meters, SpatialRecord spatialRecord)
        {
            var meter = (ISOEnumeratedMeter) meters.FirstOrDefault();
            var value = (EnumeratedValue)spatialRecord.GetMeterValue(meter);

            if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiPrscMasterManualOff.ToModelEnumMember().Code)
                return 0;
            if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiPrscMasterAutoOn.ToModelEnumMember().Code)
                return 1;
            if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiPrscMasterError.ToModelEnumMember().Code)
                return 2;

            return 3;
        }
Beispiel #16
0
        public static void AreEqual(ISOSpatialRow isoSpatialRow, SpatialRecord adaptSpatialRecord, List<WorkingData> meters)
        {
            foreach (var meter in meters)
            {
                var adaptValue = adaptSpatialRecord.GetMeterValue(meter);
                if(adaptValue == null)
                    continue;

                var isoValue = isoSpatialRow.SpatialValues.Single(v => v.Id == meter.Id.FindIntIsoId());

                var adaptEnumeratedValue = adaptValue as EnumeratedValue;
                if (adaptEnumeratedValue != null)
                {
                    var representation = RepresentationManager.Instance.Representations.First(x => x.DomainId == adaptEnumeratedValue.Representation.Code);
                    Assert.AreEqual(representation.Ddi.GetValueOrDefault(), Convert.ToInt32(isoValue.Dlv.A, 16));

                    if(representation.Ddi == 141)
                        CompareWorkState(adaptEnumeratedValue, isoValue);
                    if (representation.Ddi == 157)
                        CompareConnectorType(adaptEnumeratedValue, isoValue);
                    if (representation.Ddi == 158)
                        ComparePrescriptionControl(adaptEnumeratedValue, isoValue);
                    if (representation.Ddi == 160)
                        CompareSectionControlState(adaptEnumeratedValue, isoValue);
                    if (representation.Ddi >= 161 && representation.Ddi <= 176)
                        CompareCondensedWorkState(adaptEnumeratedValue, isoValue);
                    if (representation.Ddi == 210)
                        CompareSkyConditions(adaptEnumeratedValue, isoValue);
                    if (representation.Ddi == 230)
                        CompareNetWeightState(adaptEnumeratedValue, isoValue);
                    if (representation.Ddi == 240)
                        CompareActualLoadingSystemStatus(adaptEnumeratedValue, isoValue);
                    if (representation.Ddi >= 290 && representation.Ddi < 305)
                        CompareCondensedWorkState(adaptEnumeratedValue, isoValue);
                    if (representation.Ddi >= 367 && representation.Ddi <= 382)
                        CompareCondensedSectionOverrideState(adaptEnumeratedValue, isoValue);
                }

                var adaptNumericValue = adaptValue as NumericRepresentationValue;
                if (adaptNumericValue != null)
                {
                    var representation = RepresentationManager.Instance.Representations.FirstOrDefault(x => x.DomainId == adaptNumericValue.Representation.Code);
                    if (representation != null)
                        Assert.AreEqual(representation.Ddi, Convert.ToInt32(isoValue.Dlv.A, 16));

                    Assert.AreEqual(adaptNumericValue.Value.Value, isoValue.Value);
                }
            }
        }
        public UInt32 GetMetersValue(List<WorkingData> meters, SpatialRecord spatialRecord)
        {
            var meter = (ISOEnumeratedMeter) meters.FirstOrDefault();
            var value = (EnumeratedValue) spatialRecord.GetMeterValue(meter);

            if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiClear.ToModelEnumMember().Code)
                return 0x20524C43;
            if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiSunny.ToModelEnumMember().Code)
                return 0x2043534E;
            if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiPartlyCloudy.ToModelEnumMember().Code)
                return 0x20544353;
            if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiCloudy.ToModelEnumMember().Code)
                return 0x2043564F;
            return 0;
        }
        public UInt32 GetMetersValue(List<WorkingData> meters, SpatialRecord spatialRecord)
        {
            var meter = (ISOEnumeratedMeter) meters.FirstOrDefault();
            var value = (EnumeratedValue) spatialRecord.GetMeterValue(meter);

            if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiDrawbar.ToModelEnumMember().Code)
                return 1;
            if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiRearTwoPoint.ToModelEnumMember().Code)
                return 2;
            if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiThreePoint.ToModelEnumMember().Code)
                return 3;
            if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiRearPivotWagonHitch.ToModelEnumMember().Code)
                return 7;

            return 0;
        }
 private void SetEnumeratedMeterValue(ISOSpatialRow isoSpatialRow, EnumeratedWorkingData meter, SpatialRecord spatialRecord)
 {
     var isoValue = isoSpatialRow.SpatialValues.SingleOrDefault(v => v.Id == meter.Id.FindIntIsoId());
     if (isoValue != null)
     {
         var isoEnumeratedMeter = meter as ISOEnumeratedMeter;
         var enumeratedValue = isoEnumeratedMeter.GetEnumeratedValue(isoValue, isoEnumeratedMeter);
         spatialRecord.SetMeterValue(meter, enumeratedValue);
         _representationValueInterpolator.SetMostRecentMeterValue(meter, enumeratedValue);
     }
     else
     {
         var value = _representationValueInterpolator.Interpolate(meter) as EnumeratedValue;
         spatialRecord.SetMeterValue(meter, value);
     }
 }
        public void GivenMetersWithRearTwoPointWhenGetMetersValueThenTwo()
        {
            var enumeratedMeter1 = new ISOEnumeratedMeter
            {
                GetEnumeratedValue = (value, meter) => new EnumeratedValue
                {
                    Value = DefinedTypeEnumerationInstanceList.dtiRearTwoPoint.ToModelEnumMember(),
                },
            };
            var meters = new List<WorkingData> { enumeratedMeter1 };

            var spatialRecord = new SpatialRecord();
            spatialRecord.SetMeterValue(enumeratedMeter1, new EnumeratedValue { Value = DefinedTypeEnumerationInstanceList.dtiRearTwoPoint.ToModelEnumMember() });

            var result = _creator.GetMetersValue(meters, spatialRecord);
            Assert.AreEqual(0x02, result);
        }
        public void GivenMetersWithRecordingStatusOnWhenGetMetersValueThenOne()
        {
            var enumeratedMeter1 = new ISOEnumeratedMeter
            {
                GetEnumeratedValue = (value, meter) => new EnumeratedValue
                {
                    Value = DefinedTypeEnumerationInstanceList.dtiRecordingStatusOn.ToModelEnumMember(),
                },
                DeviceElementUseId = 1,
            };
            var meters = new List<WorkingData> { enumeratedMeter1 };

            var spatialRecord = new SpatialRecord();
            spatialRecord.SetMeterValue(enumeratedMeter1, new EnumeratedValue { Value = DefinedTypeEnumerationInstanceList.dtiRecordingStatusOn.ToModelEnumMember() });

            var result = _creator.GetMetersValue(meters, spatialRecord);
            Assert.AreEqual(0x01, result);
        }
        public void GivenMetersErrorAndNotAvailableWhenGetMetersValueThenValuesReturned()
        {
            var enumeratedMeter1 = new ISOEnumeratedMeter
            {
                DeviceElementUseId = 1,
            };
            var enumeratedMeter2 = new ISOEnumeratedMeter
            {
                DeviceElementUseId = 2,
            };
            var meters = new List<WorkingData> { enumeratedMeter1, enumeratedMeter2 };

            var spatialRecord = new SpatialRecord();
            spatialRecord.SetMeterValue(enumeratedMeter1, new EnumeratedValue { Value = DefinedTypeEnumerationInstanceList.dtiUnloadingAugerStateError.ToModelEnumMember() });
            spatialRecord.SetMeterValue(enumeratedMeter2, new EnumeratedValue { Value = DefinedTypeEnumerationInstanceList.dtiUnloadingAugerStateNotAvailable.ToModelEnumMember() });

            var result = _creator.GetMetersValue(meters, spatialRecord);
            Assert.AreEqual(0x0302, result);
        }
        private void CreateRow(Dictionary<int, IEnumerable<WorkingData>> workingDataDictionary, SpatialRecord spatialRecord)
        {
            var dataRow = _dataTable.NewRow();

            foreach(var key in workingDataDictionary.Keys)
            {
                var depth = key;

                foreach (var workingData in workingDataDictionary[key])
                {
                    if (workingData as NumericWorkingData != null)
                        CreateNumericMeterCell(spatialRecord, workingData, depth, dataRow);

                    if (workingData as EnumeratedWorkingData != null)
                        CreateEnumeratedMeterCell(spatialRecord, workingData, depth, dataRow);
                }
            }

            _dataTable.Rows.Add(dataRow);
        }
Beispiel #24
0
        private Dictionary<int, uint> GetMeterValues(SpatialRecord spatialRecord, List<WorkingData> meters, Dictionary<WorkingData, int> metersByIsoIds)
        {
            var dlvsToWrite = new Dictionary<int, uint>();
            var metersWithValues = meters.Where(x => spatialRecord.GetMeterValue(x) != null);
            var dlvOrders = metersWithValues.Select(m => metersByIsoIds[m]).Distinct();

            foreach (var order in dlvOrders)
            {
                var dlvMeters = meters.Where(m => metersByIsoIds[m] == order).ToList();
                var numericMeter = dlvMeters[0] as NumericWorkingData;
                UInt32? value = null;
                if (numericMeter != null && spatialRecord.GetMeterValue(numericMeter) != null)
                {
                    value = _numericValueMapper.Map(numericMeter, spatialRecord);
                }

                var isoEnumerateMeter = dlvMeters[0] as ISOEnumeratedMeter;
                if (isoEnumerateMeter != null && spatialRecord.GetMeterValue(isoEnumerateMeter) != null)
                {
                    value = _enumeratedValueMapper.Map(isoEnumerateMeter, dlvMeters, spatialRecord);
                }

                if (value == null)
                    continue;

                if (_previousDlvs.ContainsKey(order) && _previousDlvs[order] != value)
                {
                    _previousDlvs[order] = value.Value;
                    dlvsToWrite.Add(order, value.Value);
                }
                else if (!_previousDlvs.ContainsKey(order))
                {
                    _previousDlvs.Add(order, value.Value);
                    dlvsToWrite.Add(order, value.Value);
                }
            }

            return dlvsToWrite;
        }
        public override UInt32 GetMetersValue(List<WorkingData> meters, SpatialRecord spatialRecord)
        {
            var returnValue = new UInt32();
            for (int i = 0; i < meters.Count; i++)
            {
                var sectionId = ((DDI - StartingDdi) * 16) + (i + 1);

                var meter = (ISOEnumeratedMeter)meters.SingleOrDefault(x => x.DeviceElementUseId == sectionId);
                var value = (EnumeratedValue)spatialRecord.GetMeterValue(meter);

                int meterInt;
                if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiPrescriptionUsed.ToModelEnumMember().Code)
                    meterInt = 0;
                else if (value.Value.Code == DefinedTypeEnumerationInstanceList.dtiPrescriptionOverridden.ToModelEnumMember().Code)
                    meterInt = 1;
                else
                    meterInt = 3;

                returnValue |= Convert.ToUInt32(meterInt << (i * 2));
            }
            return returnValue;
        }
        public void GivenCurrentMeterWithMatchingMetersWhenMapThenValueReturned()
        {
            var enumeratedMeter1 = new ISOEnumeratedMeter{ Representation = RepresentationInstanceList.dtRecordingStatus.ToModelRepresentation() };
            var enumeratedMeter2 = new ISOEnumeratedMeter();

            enumeratedMeter1.Id.UniqueIds.Add(new UniqueId{ Id = "DLV3", Source = UniqueIdMapper.IsoSource, CiTypeEnum = CompoundIdentifierTypeEnum.String });
            enumeratedMeter2.Id.UniqueIds.Add(new UniqueId{ Id = "DLV3", Source = UniqueIdMapper.IsoSource, CiTypeEnum = CompoundIdentifierTypeEnum.String });

            var meters = new List<WorkingData> { enumeratedMeter1, enumeratedMeter2 };

            var spatialRecord = new SpatialRecord();

            const int ddi = 141;
            _representationMapperMock.Setup(x => x.Map(enumeratedMeter1.Representation)).Returns(ddi);

            var enumeratedMeterCreatorMock = new Mock<IEnumeratedMeterCreator>();
            _enumeratedMeterFactoryMock.Setup(x => x.GetMeterCreator(ddi)).Returns(enumeratedMeterCreatorMock.Object);

            const uint value = 0x123456;
            enumeratedMeterCreatorMock.Setup(x => x.GetMetersValue(meters, spatialRecord)).Returns(value);

            var result = _enumeratedValueMapper.Map(enumeratedMeter1, meters, spatialRecord);
            Assert.AreEqual(value, result);
        }
Beispiel #27
0
 private void WriteSpatialRecord(SpatialRecord spatialRecord, List<WorkingData> meters, MemoryStream memoryStream, Dictionary<WorkingData, int> metersByIsoIds)
 {
     WriteTimeStart(spatialRecord.Timestamp, memoryStream);
     WritePosition(spatialRecord.Geometry, memoryStream);
     WriteMeterValues(spatialRecord, meters, memoryStream, metersByIsoIds);
 }
Beispiel #28
0
        private void WriteMeterValues(SpatialRecord spatialRecord, List<WorkingData> meters, MemoryStream memoryStream, Dictionary<WorkingData, int> metersByIsoIds)
        {
            var dlvOrders = metersByIsoIds.Values.Distinct();
            Dictionary<int, uint> dlvsToWrite;

            if (dlvOrders.Contains(-1))
                dlvsToWrite = GetMeterValuesAndAssignDlvNumbers(spatialRecord, meters);
            else
                dlvsToWrite = GetMeterValues(spatialRecord, meters, metersByIsoIds);

            var numberOfMeters = (byte)dlvsToWrite.Count;
            var numberOfMetersStream = new MemoryStream();
            numberOfMetersStream.WriteByte(numberOfMeters);
            numberOfMetersStream.WriteTo(memoryStream);

            foreach (var key in dlvsToWrite.Keys)
            {
                var order = (byte) key;
                var value = dlvsToWrite[key];

                memoryStream.WriteByte(order);

                var valueStream = new MemoryStream(BitConverter.GetBytes(value));
                valueStream.WriteTo(memoryStream);
            }
        }
Beispiel #29
0
        private Dictionary<int, uint> GetMeterValuesAndAssignDlvNumbers(SpatialRecord spatialRecord, List<WorkingData> meters)
        {
            var dlvValues = new Dictionary<int, uint>();

            for (int meterIndex = 0; meterIndex < meters.Count; meterIndex++)
            {
                var meter = meters[meterIndex];
                var numericMeter = meter as NumericWorkingData;
                UInt32? value = null;
                if (numericMeter != null && spatialRecord.GetMeterValue(numericMeter) != null)
                {
                    value = _numericValueMapper.Map(numericMeter, spatialRecord);
                }

                var isoEnumerateMeter = meter as ISOEnumeratedMeter;
                if (isoEnumerateMeter != null && spatialRecord.GetMeterValue(isoEnumerateMeter) != null)
                {
                    value = _enumeratedValueMapper.Map(isoEnumerateMeter, new List<WorkingData> {meter}, spatialRecord);
                }

                if (value == null)
                    continue;

                if (_previousDlvs.ContainsKey(meterIndex) && _previousDlvs[meterIndex] != value)
                {
                    _previousDlvs[meterIndex] = value.Value;
                    dlvValues.Add(meterIndex, value.Value);
                }
                else if (!_previousDlvs.ContainsKey(meterIndex))
                {
                    _previousDlvs.Add(meterIndex, value.Value);
                    dlvValues.Add(meterIndex, value.Value);
                }
            }

            return dlvValues;
        }
        private static void CreateEnumeratedMeterCell(SpatialRecord spatialRecord, WorkingData workingData, int depth, DataRow dataRow)
        {
            var enumeratedValue = spatialRecord.GetMeterValue(workingData) as EnumeratedValue;

            dataRow[GetColumnName(workingData, depth)] = enumeratedValue != null && enumeratedValue.Value != null ? enumeratedValue.Value.Value : "";
        }