private TreeItem GenerateS1Tree(S1Data data) { var allDirectories = new DirectoryInfo(data.BaseDirectory.FullName).GetDirectories(); MethodHelper.TryGetPropertyDescription(data.MeasurementDataUnits.First().GetType(), "NoiseAnnotation", out var noiseAnnotationDescription); MethodHelper.TryGetPropertyDescription(data.MeasurementDataUnits.First().GetType(), "ProductAnnotation", out var productAnnotationDescription); MethodHelper.TryGetPropertyDescription(data.MeasurementDataUnits.First().GetType(), "CalibriationAnnotation", out var calibrationAnnotationDescription); var measurementDirectory = new DirectoryTreeItem(allDirectories.First(f => f.Name == "measurement")); measurementDirectory.Children.AddRange(data.MeasurementDataUnits.Select(f => new FileTreeItem(f.File, f))); var previewDirectory = new DirectoryTreeItem(allDirectories.First(f => f.Name == "preview")); previewDirectory.Children.Add(new FileTreeItem(data.Preview.MapOverlay.File, data.Preview.MapOverlay)); previewDirectory.Children.Add(new FileTreeItem(data.Preview.ProductPreview.File, data.Preview.ProductPreview)); previewDirectory.Children.Add(new FileTreeItem(data.Preview.QuickLook.File, data.Preview.QuickLook)); var supportDirectory = new DirectoryTreeItem(allDirectories.First(f => f.Name == "support")); var firstMeasurmenet = data.MeasurementDataUnits.First(); supportDirectory.Children.Add(new FileTreeItem(firstMeasurmenet.Documentation.File, firstMeasurmenet.Documentation)); supportDirectory.Children.Add(new FileTreeItem(firstMeasurmenet.ProductAnnotation.Documentation.File, firstMeasurmenet.ProductAnnotation.Documentation)); supportDirectory.Children.Add(new FileTreeItem(firstMeasurmenet.CalibriationAnnotation.Documentation.File, firstMeasurmenet.CalibriationAnnotation.Documentation)); supportDirectory.Children.Add(new FileTreeItem(firstMeasurmenet.NoiseAnnotation.Documentation.File, firstMeasurmenet.NoiseAnnotation.Documentation)); supportDirectory.Children.Add(new FileTreeItem(data.Preview.MapOverlay.Documentation.File, data.Preview.MapOverlay.Documentation)); supportDirectory.Children.Add(new FileTreeItem(data.Preview.QuickLook.Documentation.File, data.Preview.QuickLook.Documentation)); supportDirectory.Children.Add(new FileTreeItem(data.Preview.ProductPreview.Documentation.File, data.Preview.ProductPreview.Documentation)); var annotationDirectory = new DirectoryTreeItem(allDirectories.First(f => f.Name == "annotation")); var calibrationDirectory = new DirectoryTreeItem(annotationDirectory.DirectoryInfo.GetDirectories().First(f => f.Name == "calibration")); calibrationDirectory.Children.AddRange(data.MeasurementDataUnits.Select(f => f.CalibriationAnnotation).Select(f => new FileTreeItem(f.File, f, calibrationAnnotationDescription))); calibrationDirectory.Children.AddRange(data.MeasurementDataUnits.Select(f => f.NoiseAnnotation).Select(f => new FileTreeItem(f.File, f, noiseAnnotationDescription))); annotationDirectory.Children.Add(calibrationDirectory); annotationDirectory.Children.AddRange(data.MeasurementDataUnits.Select(f => f.ProductAnnotation).Select(f => new FileTreeItem(f.File, f, productAnnotationDescription))); var mainItem = new DirectoryTreeItem(data.BaseDirectory) { Children = new BindableCollection <TreeItem> { annotationDirectory, measurementDirectory, previewDirectory, supportDirectory, new FileTreeItem(data.Manifest.File, data.Manifest), new FileTreeItem(data.ReportFile.File, data.ReportFile) } }; return(mainItem); }
/// <summary> /// Parses the manifest.safe data /// </summary> /// <param name="directory">Path to the SAFE directory</param> /// <returns>The parsed manifest data</returns> public static S1Data Parse([NotNull] string directory) { Guard.NotNullOrWhitespace(directory, nameof(directory)); var directoryInfo = new DirectoryInfo(directory); Guard.NotNullAndValidFileSystemInfo(directoryInfo, nameof(directoryInfo)); var data = new S1Data { BaseDirectory = directoryInfo }; var file = FileHelper.GetFiles(directory, SAFEFileTypes.Manifest).First(); Guard.NotNullAndValidFileSystemInfo(file, nameof(file)); using (var fileStream = new FileStream(file.FullName, FileMode.Open)) { var document = new XmlDocument(); document.Load(fileStream); var manager = GenerateManager(document); var informationPackageMap = document.SelectSingleNodeThrowIfNull("xfdu:XFDU/informationPackageMap", manager); var metaDataSection = document.SelectSingleNodeThrowIfNull("xfdu:XFDU/metadataSection", manager); var dataObjectSection = document.SelectSingleNodeThrowIfNull("xfdu:XFDU/dataObjectSection", manager); data.Manifest = new Manifest { MetaData = MetaDataParser.Parse(metaDataSection, manager), RawXml = document.InnerXml, File = file }; data.MeasurementDataUnits = MeasurementDataUnitParser.Parse(informationPackageMap, metaDataSection, dataObjectSection, manager, data.BaseDirectory); data.Preview = PreviewParser.Parse(informationPackageMap, metaDataSection, dataObjectSection, manager, data.BaseDirectory); } var reportFile = directoryInfo.GetFiles().FirstOrDefault(f => f.Name.Contains("report") && f.Extension == ".pdf"); if (reportFile != null) { data.ReportFile = new ReportFile { File = reportFile } } ; return(data); }