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);
        }
Esempio n. 2
0
        /// <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);
        }