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); }
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; }
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); }
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); }
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); }
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); } }
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 : ""; }