public void ParseGpsDirectory_ValidDirectory_LatLongMetadata() { var gpsDirectory = new GpsDirectory(); var photo = new Photo(""); var gpsReference = "N"; var gpsRationalArr = new Rational[3] { new Rational(1, 1), new Rational(60, 1), new Rational(3600, 1) }; gpsDirectory.Set(GpsDirectory.TagLatitudeRef, gpsReference); gpsDirectory.Set(GpsDirectory.TagLatitude, gpsRationalArr); gpsDirectory.Set(GpsDirectory.TagLongitudeRef, gpsReference); gpsDirectory.Set(GpsDirectory.TagLongitude, gpsRationalArr); gpsDirectory.Parse(photo); var actualLatitude = photo.Latitude; var actualLongitude = photo.Longitude; var expectedLatitude = MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(gpsRationalArr, gpsReference); var expectedLongitude = MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(gpsRationalArr, gpsReference); Assert.Equal(expectedLatitude, actualLatitude); Assert.Equal(expectedLongitude, actualLongitude); }
/// <summary>Parses <see cref="ExifSubIfdDirectory" /> metadata and saves it to the <see cref="Photo" />.</summary> /// <param name="directory">Directory containing the F-number, ISO, shutter speed, datetime original and focal length metadata.</param> /// <param name="photo">Photo object used for storing metadata.</param> public static void Parse(this ExifSubIfdDirectory directory, Photo photo) { if (directory is null || photo is null) { return; } if (directory.TryGetSingle(ExifDirectoryBase.TagFNumber, out var fNum)) { photo.FNumber = fNum; } if (directory.TryGetInt16(ExifDirectoryBase.TagIsoEquivalent, out var iso)) { photo.Iso = iso; } if (directory.TryGetSingle(ExifDirectoryBase.TagShutterSpeed, out var apexValue)) { photo.ShutterSpeed = MetadataConverter.ComputeShutterSpeed(apexValue); } if (directory.TryGetDateTime(ExifDirectoryBase.TagDateTimeOriginal, out var dateTimeOriginal)) { photo.DateTimeOriginal = dateTimeOriginal; } if (directory.TryGetSingle(ExifDirectoryBase.TagFocalLength, out var focalLength)) { photo.FocalLength = focalLength; } }
/// <summary>Parses <see cref="GpsDirectory" /> metadata and saves it to the <see cref="Photo" />.</summary> /// <param name="directory">Directory containing the GPS metadata.</param> /// <param name="photo">Photo object used for storing metadata.</param> public static void Parse(this GpsDirectory directory, Photo photo) { if (directory is null || photo is null) { return; } var gpsLatRef = directory.GetString(GpsDirectory.TagLatitudeRef); var gpsLat = directory.GetRationalArray(GpsDirectory.TagLatitude); var gpsLonRef = directory.GetString(GpsDirectory.TagLongitudeRef); var gpsLon = directory.GetRationalArray(GpsDirectory.TagLongitude); var latitude = MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(gpsLat, gpsLatRef); var longitude = MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(gpsLon, gpsLonRef); photo.Latitude = latitude; photo.Longitude = longitude; // if we cannot get both the altitude and its reference, do not save anything if (directory.TryGetByte(GpsDirectory.TagAltitudeRef, out var gpsAltBit) && directory.TryGetInt16(GpsDirectory.TagAltitude, out var gpsAlt)) { photo.AltitudeReference = gpsAltBit == 0 ? "Sea level" : "Below sea level"; photo.Altitude = gpsAlt; } }
public void ComputeShutterSpeed_GreaterThanOneValue() { var expected = "1/4 sec"; // exp(2 * log(2)) = 4 var actual = MetadataConverter.ComputeShutterSpeed(2); Assert.Equal(expected, actual); }
public void ComputeGpsDmsToDecimalDegrees_InvalidDms() { var degMinSec = new Rational[2]; var actual = MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(degMinSec, ""); Assert.Null(actual); }
public Metadata GetForTargetAssembly(string path) { if (!File.Exists(path)) { return(null); } using (var session = _provider.GetMetadata(GetAssemblies(path))) return(MetadataConverter.ConvertMetadata(session)); }
public void ComputeGpsDmsToDecimalDegrees_ValidDms_InvalidGpsReference() { var degMinSec = new Rational[3]; degMinSec[0] = new Rational(1, 1); // 1 degMinSec[1] = new Rational(60, 1); // 60 degMinSec[2] = new Rational(3600, 1); // 3600 Assert.Throws <ArgumentException>(() => MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(degMinSec, "A")); }
public void Convert_v0_1_0alpha4_ConvertsProperly() { Models.v0_1.Metadata input = new Models.v0_1.Metadata(); var sut = new MetadataConverter(); var actual = sut.Convert(input); Assert.IsType <Models.v0_1.Metadata>(actual); }
public void ComputeShutterSpeed_LessOrEqualToOneValue() { // Align the data formatting for testing Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); var expected = "0.5 sec"; // round((1 / exp(1 * log(2))) * 10) / 10 = 0.5 var actual = MetadataConverter.ComputeShutterSpeed(1); Assert.Equal(expected, actual); }
public void Convert_v0_1_0alpha3Nulls_ConvertsProperly() { Models.v0_1_0alpha3.Metadata input = new Models.v0_1_0alpha3.Metadata(); input.File.CreationDate = "2020-01-01"; var sut = new MetadataConverter(); var actual = sut.Convert(input); Assert.IsType <Models.v0_2.Metadata>(actual); }
public void ComputeGpsDmsToDecimalDegrees_ValidDms_SouthGpsReference() { var degMinSec = new Rational[3]; degMinSec[0] = new Rational(1, 1); // 1 degMinSec[1] = new Rational(60, 1); // 60 degMinSec[2] = new Rational(3600, 1); // 3600 var expected = -3.0; // -1 * (1 + 60/60 + 3600/3600) = -3.0 var actual = MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(degMinSec, "S"); Assert.Equal(expected, actual); }
public void Write(MetadataSerializer serializer, Utf8JsonWriter writer, object value, IEnumerable <string> valuePath, RendererContext context) { writer.WriteString("type", "object"); writer.WriteString("extendedType", MetadataConverter.GetFullName(value.GetType())); var dict = value as Dictionary <TKey, TValue>; writer.WriteStartObject("children"); foreach (var kv in dict) { writer.WriteStartObject(kv.Key.ToString()); serializer.Serialize(writer, kv.Value, valuePath, context); writer.WriteEndObject(); } writer.WriteEndObject(); }
private void UpdateXsltMetadata() { DataTable MapTable = null; string MetadataText = string.Empty; // Get Area_Map Metadata Table MapTable = this.DBConnection.ExecuteDataTable(this.DBQueries.Xslt.GetXSLT(FilterFieldType.Search, XSLT.XSLTText + " IS NOT NULL OR " + XSLT.XSLTText + " <> '' ")); foreach (DataRow Row in MapTable.Rows) { MetadataText = Convert.ToString(Row[XSLT.XSLTText]); if (!string.IsNullOrEmpty(MetadataText)) { MetadataText = MetadataConverter.ConvertXml(MetadataText); // Update IndicatorClassificationInfo(Metadata) this.DBConnection.ExecuteNonQuery(DevInfo.Lib.DI_LibDAL.Queries.Xslt.Update.UpdateXSLT(this.DBQueries.DataPrefix, DICommon.RemoveQuotes(MetadataText), Convert.ToString(Row[XSLT.XSLTFile]))); } } }
private void ConvertICMetadata() { DataTable ICTable = null; string ICInfo = string.Empty; // Get Indicator Metadata Table ICTable = this.DBConnection.ExecuteDataTable(this.DBQueries.IndicatorClassification.GetICForSearch(FilterFieldType.Search, IndicatorClassifications.ICInfo + " IS NOT NULL AND " + IndicatorClassifications.ICInfo + " <> '' ", FieldSelection.Heavy)); // Update each Indicator Row where Metadata exists foreach (DataRow Row in ICTable.Rows) { ICInfo = Convert.ToString(Row[IndicatorClassifications.ICInfo]); if (!string.IsNullOrEmpty(ICInfo)) { ICInfo = MetadataConverter.ConvertXml(ICInfo); // Update IndicatorClassificationInfo(Source Metadata) this.DBConnection.ExecuteNonQuery(DALQueries.IndicatorClassification.Update.UpdateICInfo(this.DBQueries.DataPrefix, this.DBQueries.LanguageCode, DICommon.RemoveQuotes(ICInfo), ICType.Source, Convert.ToInt32(Row[IndicatorClassifications.ICNId]))); } } }
public void Test1() { var fileSystem = new MockFileSystem(); var conv = new MetadataConverter(Encoding.UTF8, fileSystem); var filePath = @"c:\Test\Metadata"; var data = new byte[] { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x05, 0x44, 0x41, 0x54, 0x45, 0x53, 0x24, 0x35, 0x37, 0x33, 0x65, 0x66, 0x62, 0x31, 0x34, 0x2D, 0x36, 0x30, 0x33, 0x33, 0x2D, 0x34, 0x36, 0x61, 0x61, 0x2D, 0x38, 0x34, 0x63, 0x36, 0x2D, 0x37, 0x64, 0x33, 0x38, 0x35, 0x39, 0x38, 0x39, 0x62, 0x61, 0x61, 0x62, 0x12, 0x46, 0x4F, 0x52, 0x4D, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x53, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x66, 0x66, 0x66, 0x64, 0x37, 0x31, 0x63, 0x30, 0x2D, 0x31, 0x37, 0x66, 0x61, 0x2D, 0x34, 0x62, 0x64, 0x35, 0x2D, 0x62, 0x38, 0x31, 0x65, 0x2D, 0x30, 0x30, 0x32, 0x64, 0x37, 0x32, 0x63, 0x34, 0x38, 0x30, 0x32, 0x30, 0x12, 0x48, 0x49, 0x53, 0x54, 0x4F, 0x52, 0x49, 0x51, 0x55, 0x45, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x34, 0x31, 0x39, 0x39, 0x65, 0x63, 0x30, 0x62, 0x2D, 0x66, 0x33, 0x32, 0x36, 0x2D, 0x34, 0x33, 0x30, 0x66, 0x2D, 0x39, 0x35, 0x63, 0x36, 0x2D, 0x31, 0x37, 0x62, 0x66, 0x39, 0x38, 0x33, 0x35, 0x34, 0x31, 0x31, 0x37, 0x3B, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x65, 0x72, 0x20, 0x6C, 0x27, 0x65, 0x78, 0x65, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x64, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x20, 0xC3, 0xA0, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x72, 0x20, 0x64, 0x65, 0x20, 0x46, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0x53, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x24, 0x31, 0x32, 0x33, 0x65, 0x61, 0x32, 0x34, 0x33, 0x2D, 0x37, 0x37, 0x63, 0x33, 0x2D, 0x34, 0x39, 0x39, 0x61, 0x2D, 0x38, 0x33, 0x34, 0x38, 0x2D, 0x61, 0x37, 0x37, 0x39, 0x39, 0x34, 0x32, 0x63, 0x65, 0x36, 0x30, 0x61, 0x23, 0x50, 0x61, 0x72, 0x61, 0x6D, 0xC3, 0xA8, 0x74, 0x72, 0x65, 0x20, 0x64, 0x65, 0x20, 0x6C, 0x27, 0x65, 0x78, 0x65, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x64, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x31, 0x24, 0x36, 0x65, 0x37, 0x37, 0x66, 0x37, 0x66, 0x63, 0x2D, 0x32, 0x30, 0x64, 0x66, 0x2D, 0x34, 0x63, 0x31, 0x61, 0x2D, 0x62, 0x32, 0x62, 0x34, 0x2D, 0x62, 0x39, 0x37, 0x64, 0x65, 0x35, 0x65, 0x64, 0x36, 0x34, 0x39, 0x33, 0x12, 0x45, 0x78, 0x65, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x64, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x24, 0x36, 0x63, 0x30, 0x63, 0x64, 0x32, 0x34, 0x62, 0x2D, 0x38, 0x61, 0x30, 0x37, 0x2D, 0x34, 0x38, 0x30, 0x66, 0x2D, 0x39, 0x38, 0x31, 0x32, 0x2D, 0x62, 0x66, 0x66, 0x64, 0x61, 0x64, 0x37, 0x34, 0x35, 0x30, 0x37, 0x35, 0x31, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x65, 0x72, 0x20, 0x6C, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x20, 0xC3, 0xA0, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x72, 0x20, 0x64, 0x65, 0x20, 0x46, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0x53, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x24, 0x37, 0x39, 0x30, 0x38, 0x66, 0x61, 0x32, 0x34, 0x2D, 0x66, 0x63, 0x61, 0x65, 0x2D, 0x34, 0x37, 0x61, 0x30, 0x2D, 0x61, 0x63, 0x36, 0x35, 0x2D, 0x37, 0x33, 0x35, 0x37, 0x30, 0x30, 0x38, 0x62, 0x32, 0x34, 0x38, 0x66, 0x10, 0x41, 0x42, 0x53, 0x45, 0x4E, 0x43, 0x45, 0x53, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x35, 0x30, 0x66, 0x33, 0x38, 0x63, 0x35, 0x63, 0x2D, 0x62, 0x32, 0x66, 0x62, 0x2D, 0x34, 0x62, 0x30, 0x32, 0x2D, 0x39, 0x31, 0x62, 0x38, 0x2D, 0x63, 0x33, 0x38, 0x63, 0x30, 0x63, 0x62, 0x65, 0x32, 0x31, 0x33, 0x61, 0x11, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x45, 0x53, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x63, 0x34, 0x64, 0x36, 0x32, 0x31, 0x39, 0x32, 0x2D, 0x38, 0x65, 0x32, 0x61, 0x2D, 0x34, 0x38, 0x64, 0x38, 0x2D, 0x62, 0x38, 0x33, 0x34, 0x2D, 0x62, 0x39, 0x63, 0x36, 0x65, 0x38, 0x33, 0x37, 0x34, 0x34, 0x37, 0x65, 0x17, 0x31, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x49, 0x46, 0x53, 0x24, 0x39, 0x62, 0x37, 0x62, 0x62, 0x66, 0x62, 0x36, 0x2D, 0x39, 0x32, 0x33, 0x32, 0x2D, 0x34, 0x31, 0x33, 0x30, 0x2D, 0x61, 0x39, 0x34, 0x32, 0x2D, 0x66, 0x39, 0x66, 0x62, 0x31, 0x35, 0x38, 0x33, 0x37, 0x30, 0x35, 0x35, 0x15, 0x54, 0x45, 0x4D, 0x50, 0x53, 0x5F, 0x54, 0x52, 0x41, 0x56, 0x41, 0x49, 0x4C, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x63, 0x33, 0x61, 0x30, 0x32, 0x64, 0x64, 0x36, 0x2D, 0x37, 0x63, 0x30, 0x64, 0x2D, 0x34, 0x34, 0x63, 0x39, 0x2D, 0x38, 0x64, 0x33, 0x36, 0x2D, 0x35, 0x32, 0x37, 0x64, 0x35, 0x34, 0x62, 0x30, 0x35, 0x31, 0x30, 0x39, 0x14, 0x52, 0x45, 0x4D, 0x55, 0x4E, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x32, 0x36, 0x31, 0x65, 0x30, 0x31, 0x39, 0x39, 0x2D, 0x37, 0x62, 0x34, 0x39, 0x2D, 0x34, 0x63, 0x33, 0x63, 0x2D, 0x38, 0x33, 0x64, 0x39, 0x2D, 0x61, 0x33, 0x62, 0x66, 0x65, 0x38, 0x64, 0x66, 0x36, 0x37, 0x61, 0x34, 0x21, 0x45, 0x72, 0x72, 0x65, 0x75, 0x72, 0x73, 0x20, 0x64, 0x61, 0x6E, 0x73, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x4E, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x30, 0x63, 0x32, 0x64, 0x35, 0x63, 0x66, 0x63, 0x2D, 0x34, 0x32, 0x62, 0x33, 0x2D, 0x34, 0x39, 0x30, 0x33, 0x2D, 0x38, 0x34, 0x62, 0x66, 0x2D, 0x34, 0x63, 0x35, 0x38, 0x64, 0x62, 0x39, 0x34, 0x38, 0x38, 0x64, 0x64, 0x10, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x20, 0x73, 0x71, 0x6C, 0x20, 0x73, 0x65, 0x75, 0x6C, 0x65, 0x24, 0x62, 0x34, 0x32, 0x32, 0x33, 0x31, 0x32, 0x62, 0x2D, 0x37, 0x36, 0x38, 0x34, 0x2D, 0x34, 0x34, 0x36, 0x63, 0x2D, 0x38, 0x62, 0x37, 0x34, 0x2D, 0x34, 0x65, 0x62, 0x32, 0x65, 0x31, 0x30, 0x36, 0x64, 0x34, 0x34, 0x34, 0x1A, 0x32, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x4E, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x24, 0x35, 0x65, 0x38, 0x37, 0x35, 0x35, 0x36, 0x65, 0x2D, 0x39, 0x37, 0x62, 0x33, 0x2D, 0x34, 0x61, 0x66, 0x35, 0x2D, 0x62, 0x63, 0x64, 0x63, 0x2D, 0x61, 0x62, 0x61, 0x36, 0x33, 0x34, 0x34, 0x37, 0x61, 0x34, 0x33, 0x33, 0x18, 0x33, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x4D, 0x4F, 0x55, 0x56, 0x45, 0x4D, 0x45, 0x4E, 0x54, 0x53, 0x24, 0x39, 0x34, 0x39, 0x32, 0x31, 0x38, 0x62, 0x33, 0x2D, 0x66, 0x65, 0x30, 0x61, 0x2D, 0x34, 0x64, 0x35, 0x66, 0x2D, 0x61, 0x62, 0x63, 0x63, 0x2D, 0x33, 0x30, 0x38, 0x37, 0x37, 0x33, 0x61, 0x33, 0x34, 0x31, 0x32, 0x39, 0x17, 0x34, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x46, 0x4F, 0x52, 0x4D, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x24, 0x64, 0x65, 0x36, 0x36, 0x63, 0x36, 0x36, 0x65, 0x2D, 0x39, 0x33, 0x63, 0x37, 0x2D, 0x34, 0x34, 0x64, 0x66, 0x2D, 0x62, 0x65, 0x30, 0x31, 0x2D, 0x32, 0x39, 0x39, 0x33, 0x61, 0x36, 0x62, 0x39, 0x31, 0x33, 0x33, 0x64, 0x17, 0x35, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x44, 0x41, 0x53, 0x48, 0x42, 0x4F, 0x41, 0x52, 0x44, 0x24, 0x64, 0x66, 0x64, 0x64, 0x30, 0x32, 0x31, 0x35, 0x2D, 0x33, 0x61, 0x35, 0x37, 0x2D, 0x34, 0x38, 0x34, 0x30, 0x2D, 0x61, 0x38, 0x35, 0x31, 0x2D, 0x31, 0x33, 0x34, 0x37, 0x31, 0x33, 0x65, 0x31, 0x38, 0x37, 0x33, 0x31, 0x1B, 0x36, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x5F, 0x54, 0x45, 0x4D, 0x50, 0x53, 0x5F, 0x54, 0x52, 0x41, 0x56, 0x41, 0x49, 0x4C, 0x24, 0x64, 0x38, 0x64, 0x38, 0x61, 0x37, 0x65, 0x62, 0x2D, 0x38, 0x30, 0x39, 0x30, 0x2D, 0x34, 0x33, 0x62, 0x35, 0x2D, 0x38, 0x66, 0x32, 0x34, 0x2D, 0x61, 0x66, 0x33, 0x39, 0x39, 0x63, 0x32, 0x66, 0x39, 0x62, 0x33, 0x63, 0x13, 0x00, 0x00, 0x00, 0x24, 0x35, 0x37, 0x33, 0x65, 0x66, 0x62, 0x31, 0x34, 0x2D, 0x36, 0x30, 0x33, 0x33, 0x2D, 0x34, 0x36, 0x61, 0x61, 0x2D, 0x38, 0x34, 0x63, 0x36, 0x2D, 0x37, 0x64, 0x33, 0x38, 0x35, 0x39, 0x38, 0x39, 0x62, 0x61, 0x61, 0x62, 0x05, 0x44, 0x41, 0x54, 0x45, 0x53, 0x24, 0x66, 0x66, 0x66, 0x64, 0x37, 0x31, 0x63, 0x30, 0x2D, 0x31, 0x37, 0x66, 0x61, 0x2D, 0x34, 0x62, 0x64, 0x35, 0x2D, 0x62, 0x38, 0x31, 0x65, 0x2D, 0x30, 0x30, 0x32, 0x64, 0x37, 0x32, 0x63, 0x34, 0x38, 0x30, 0x32, 0x30, 0x12, 0x46, 0x4F, 0x52, 0x4D, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x53, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x34, 0x31, 0x39, 0x39, 0x65, 0x63, 0x30, 0x62, 0x2D, 0x66, 0x33, 0x32, 0x36, 0x2D, 0x34, 0x33, 0x30, 0x66, 0x2D, 0x39, 0x35, 0x63, 0x36, 0x2D, 0x31, 0x37, 0x62, 0x66, 0x39, 0x38, 0x33, 0x35, 0x34, 0x31, 0x31, 0x37, 0x12, 0x48, 0x49, 0x53, 0x54, 0x4F, 0x52, 0x49, 0x51, 0x55, 0x45, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x31, 0x32, 0x33, 0x65, 0x61, 0x32, 0x34, 0x33, 0x2D, 0x37, 0x37, 0x63, 0x33, 0x2D, 0x34, 0x39, 0x39, 0x61, 0x2D, 0x38, 0x33, 0x34, 0x38, 0x2D, 0x61, 0x37, 0x37, 0x39, 0x39, 0x34, 0x32, 0x63, 0x65, 0x36, 0x30, 0x61, 0x3B, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x65, 0x72, 0x20, 0x6C, 0x27, 0x65, 0x78, 0x65, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x64, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x20, 0xC3, 0xA0, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x72, 0x20, 0x64, 0x65, 0x20, 0x46, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0x53, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x24, 0x36, 0x65, 0x37, 0x37, 0x66, 0x37, 0x66, 0x63, 0x2D, 0x32, 0x30, 0x64, 0x66, 0x2D, 0x34, 0x63, 0x31, 0x61, 0x2D, 0x62, 0x32, 0x62, 0x34, 0x2D, 0x62, 0x39, 0x37, 0x64, 0x65, 0x35, 0x65, 0x64, 0x36, 0x34, 0x39, 0x33, 0x23, 0x50, 0x61, 0x72, 0x61, 0x6D, 0xC3, 0xA8, 0x74, 0x72, 0x65, 0x20, 0x64, 0x65, 0x20, 0x6C, 0x27, 0x65, 0x78, 0x65, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x64, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x31, 0x24, 0x36, 0x63, 0x30, 0x63, 0x64, 0x32, 0x34, 0x62, 0x2D, 0x38, 0x61, 0x30, 0x37, 0x2D, 0x34, 0x38, 0x30, 0x66, 0x2D, 0x39, 0x38, 0x31, 0x32, 0x2D, 0x62, 0x66, 0x66, 0x64, 0x61, 0x64, 0x37, 0x34, 0x35, 0x30, 0x37, 0x35, 0x12, 0x45, 0x78, 0x65, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x64, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x24, 0x37, 0x39, 0x30, 0x38, 0x66, 0x61, 0x32, 0x34, 0x2D, 0x66, 0x63, 0x61, 0x65, 0x2D, 0x34, 0x37, 0x61, 0x30, 0x2D, 0x61, 0x63, 0x36, 0x35, 0x2D, 0x37, 0x33, 0x35, 0x37, 0x30, 0x30, 0x38, 0x62, 0x32, 0x34, 0x38, 0x66, 0x31, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x65, 0x72, 0x20, 0x6C, 0x65, 0x20, 0x66, 0x69, 0x63, 0x68, 0x69, 0x65, 0x72, 0x20, 0xC3, 0xA0, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x72, 0x20, 0x64, 0x65, 0x20, 0x46, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0x53, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x24, 0x35, 0x30, 0x66, 0x33, 0x38, 0x63, 0x35, 0x63, 0x2D, 0x62, 0x32, 0x66, 0x62, 0x2D, 0x34, 0x62, 0x30, 0x32, 0x2D, 0x39, 0x31, 0x62, 0x38, 0x2D, 0x63, 0x33, 0x38, 0x63, 0x30, 0x63, 0x62, 0x65, 0x32, 0x31, 0x33, 0x61, 0x10, 0x41, 0x42, 0x53, 0x45, 0x4E, 0x43, 0x45, 0x53, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x63, 0x34, 0x64, 0x36, 0x32, 0x31, 0x39, 0x32, 0x2D, 0x38, 0x65, 0x32, 0x61, 0x2D, 0x34, 0x38, 0x64, 0x38, 0x2D, 0x62, 0x38, 0x33, 0x34, 0x2D, 0x62, 0x39, 0x63, 0x36, 0x65, 0x38, 0x33, 0x37, 0x34, 0x34, 0x37, 0x65, 0x11, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x45, 0x53, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x39, 0x62, 0x37, 0x62, 0x62, 0x66, 0x62, 0x36, 0x2D, 0x39, 0x32, 0x33, 0x32, 0x2D, 0x34, 0x31, 0x33, 0x30, 0x2D, 0x61, 0x39, 0x34, 0x32, 0x2D, 0x66, 0x39, 0x66, 0x62, 0x31, 0x35, 0x38, 0x33, 0x37, 0x30, 0x35, 0x35, 0x17, 0x31, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x49, 0x46, 0x53, 0x24, 0x63, 0x33, 0x61, 0x30, 0x32, 0x64, 0x64, 0x36, 0x2D, 0x37, 0x63, 0x30, 0x64, 0x2D, 0x34, 0x34, 0x63, 0x39, 0x2D, 0x38, 0x64, 0x33, 0x36, 0x2D, 0x35, 0x32, 0x37, 0x64, 0x35, 0x34, 0x62, 0x30, 0x35, 0x31, 0x30, 0x39, 0x15, 0x54, 0x45, 0x4D, 0x50, 0x53, 0x5F, 0x54, 0x52, 0x41, 0x56, 0x41, 0x49, 0x4C, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x32, 0x36, 0x31, 0x65, 0x30, 0x31, 0x39, 0x39, 0x2D, 0x37, 0x62, 0x34, 0x39, 0x2D, 0x34, 0x63, 0x33, 0x63, 0x2D, 0x38, 0x33, 0x64, 0x39, 0x2D, 0x61, 0x33, 0x62, 0x66, 0x65, 0x38, 0x64, 0x66, 0x36, 0x37, 0x61, 0x34, 0x14, 0x52, 0x45, 0x4D, 0x55, 0x4E, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x30, 0x63, 0x32, 0x64, 0x35, 0x63, 0x66, 0x63, 0x2D, 0x34, 0x32, 0x62, 0x33, 0x2D, 0x34, 0x39, 0x30, 0x33, 0x2D, 0x38, 0x34, 0x62, 0x66, 0x2D, 0x34, 0x63, 0x35, 0x38, 0x64, 0x62, 0x39, 0x34, 0x38, 0x38, 0x64, 0x64, 0x21, 0x45, 0x72, 0x72, 0x65, 0x75, 0x72, 0x73, 0x20, 0x64, 0x61, 0x6E, 0x73, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x4E, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x5F, 0x53, 0x41, 0x4C, 0x41, 0x52, 0x49, 0x45, 0x24, 0x62, 0x34, 0x32, 0x32, 0x33, 0x31, 0x32, 0x62, 0x2D, 0x37, 0x36, 0x38, 0x34, 0x2D, 0x34, 0x34, 0x36, 0x63, 0x2D, 0x38, 0x62, 0x37, 0x34, 0x2D, 0x34, 0x65, 0x62, 0x32, 0x65, 0x31, 0x30, 0x36, 0x64, 0x34, 0x34, 0x34, 0x10, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x20, 0x73, 0x71, 0x6C, 0x20, 0x73, 0x65, 0x75, 0x6C, 0x65, 0x24, 0x35, 0x65, 0x38, 0x37, 0x35, 0x35, 0x36, 0x65, 0x2D, 0x39, 0x37, 0x62, 0x33, 0x2D, 0x34, 0x61, 0x66, 0x35, 0x2D, 0x62, 0x63, 0x64, 0x63, 0x2D, 0x61, 0x62, 0x61, 0x36, 0x33, 0x34, 0x34, 0x37, 0x61, 0x34, 0x33, 0x33, 0x1A, 0x32, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x52, 0x45, 0x4D, 0x55, 0x4E, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x24, 0x39, 0x34, 0x39, 0x32, 0x31, 0x38, 0x62, 0x33, 0x2D, 0x66, 0x65, 0x30, 0x61, 0x2D, 0x34, 0x64, 0x35, 0x66, 0x2D, 0x61, 0x62, 0x63, 0x63, 0x2D, 0x33, 0x30, 0x38, 0x37, 0x37, 0x33, 0x61, 0x33, 0x34, 0x31, 0x32, 0x39, 0x18, 0x33, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x4D, 0x4F, 0x55, 0x56, 0x45, 0x4D, 0x45, 0x4E, 0x54, 0x53, 0x24, 0x64, 0x65, 0x36, 0x36, 0x63, 0x36, 0x36, 0x65, 0x2D, 0x39, 0x33, 0x63, 0x37, 0x2D, 0x34, 0x34, 0x64, 0x66, 0x2D, 0x62, 0x65, 0x30, 0x31, 0x2D, 0x32, 0x39, 0x39, 0x33, 0x61, 0x36, 0x62, 0x39, 0x31, 0x33, 0x33, 0x64, 0x17, 0x34, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x46, 0x4F, 0x52, 0x4D, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x24, 0x64, 0x66, 0x64, 0x64, 0x30, 0x32, 0x31, 0x35, 0x2D, 0x33, 0x61, 0x35, 0x37, 0x2D, 0x34, 0x38, 0x34, 0x30, 0x2D, 0x61, 0x38, 0x35, 0x31, 0x2D, 0x31, 0x33, 0x34, 0x37, 0x31, 0x33, 0x65, 0x31, 0x38, 0x37, 0x33, 0x31, 0x17, 0x35, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x20, 0x44, 0x41, 0x53, 0x48, 0x42, 0x4F, 0x41, 0x52, 0x44, 0x24, 0x64, 0x38, 0x64, 0x38, 0x61, 0x37, 0x65, 0x62, 0x2D, 0x38, 0x30, 0x39, 0x30, 0x2D, 0x34, 0x33, 0x62, 0x35, 0x2D, 0x38, 0x66, 0x32, 0x34, 0x2D, 0x61, 0x66, 0x33, 0x39, 0x39, 0x63, 0x32, 0x66, 0x39, 0x62, 0x33, 0x63, 0x1B, 0x36, 0x5F, 0x4D, 0x54, 0x34, 0x5F, 0x4D, 0x45, 0x53, 0x55, 0x52, 0x45, 0x53, 0x5F, 0x54, 0x45, 0x4D, 0x50, 0x53, 0x5F, 0x54, 0x52, 0x41, 0x56, 0x41, 0x49, 0x4C, 0x00, 0x01, 0x05, 0x43, 0x6C, 0x6F, 0x75, 0x64, 0x01, 0x07, 0x32, 0x30, 0x31, 0x38, 0x2E, 0x30, 0x31 }; var fileData = new MockFileData(data); fileSystem.AddFile(filePath, fileData); var b = fileSystem.File.Open(filePath, FileMode.Open); var o = conv.RawToVcs(b); o.Seek(0, SeekOrigin.Begin); var b2 = conv.VcsToRaw(o); for (var i = 0; i < data.Length; i++) { if (b2.ReadByte() != data[i]) { throw new Exception(string.Format("Metadata from vcs is not correct at position {0}", i)); } } }
public void Setup() { _converter = new MetadataConverter(); }
public InMemoryCachedCrmMetaDataProvider(IEntityMetadataRepository repository) { _repository = repository; this._metadataConverter = new MetadataConverter(); }
public void ComputeGpsDmsToDecimalDegrees_NullDms() { var actual = MetadataConverter.DegreesMinutesSecondsToDecimalDegrees(null, "S"); Assert.Null(actual); }
public void Convert_v0_1_0alpha3WithVals_ConvertsProperly() { var creationDate = "2020-12-20"; var contactName = "TestUser"; var startDate = "1999-20-01"; var tempExtent = $"{startDate}/{startDate}"; List <string> expectedQC = new List <string>() { "Assurance", "Point", "Review" }; Models.v0_1_0alpha3.Metadata input = new Models.v0_1_0alpha3.Metadata() { File = new Models.v0_1_0alpha3.File() { CreationDate = creationDate }, Dataset = new Models.v0_1_0alpha3.Dataset() { Zone = Models.v0_1_0alpha3.Zones.Production, Project = "UnitTest", Name = "Convert_v0_1_0alpha3WithVals_ConvertsProperly", Description = "Pleh", Format = "geotiff", Contacts = new List <Models.v0_1_0alpha3.Person>() { new Models.v0_1_0alpha3.Person() { Name = contactName, Email = "*****@*****.**", Role = "Tool" } }, StartDate = startDate, EndDate = startDate, Variables = new List <Models.v0_1_0alpha3.Variable>() { new Models.v0_1_0alpha3.Variable() { Name = "value", IsQCSpecified = false, ProcessingLevel = Models.v0_1_0alpha3.ProcessingLevels.Calculated }, new Models.v0_1_0alpha3.Variable() { Name = "value2", IsQCSpecified = true, QCApplied = new Models.v0_1_0alpha3.QCApplied() { Assurance = true, Point = true, Review = true }, StartDate = startDate, EndDate = startDate } } } }; var sut = new MetadataConverter(); Models.v0_2.Metadata actual = sut.Convert(input); Assert.Equal(creationDate, actual.CreationDate.ToString()); Assert.Equal(contactName, actual.Dataset.Contacts[0].Name); Assert.Equal(tempExtent, actual.Dataset.TemporalExtent); Assert.False(actual.Dataset.Variables[0].IsQCSpecified); Assert.Equal("Calculated", actual.Dataset.Variables[0].ProcessingLevel); Assert.Equal(expectedQC, actual.Dataset.Variables[1].QCApplied); Assert.Equal(tempExtent, actual.Dataset.Variables[1].TemporalExtent); }