private void ReadMetadataObjects(Type typePart, Collection list) { Collection packagePartModel = PackagePart.GetModel(); var sectionGuid = typePart.GetCustomAttributes(false).OfType <GuidAttribute>().FirstOrDefault(); if (sectionGuid != null) { if (sectionGuid.Value != list[0].ToString()) { throw new InvalidOperationException("Section Guid is invalid"); } } var guids = list.Skip(2); var request = from row in Image.Rows.AsParallel() where guids.Contains(row.FileName) select Activator.CreateInstance(typePart, new object[] { row }) as ImageRowElement; var array = request.ToArray(); array.AsParallel().ForAll(m => m.Package = this); lock (MetadataObjects) { MetadataObjects.AddRange(array); } }
protected override void ReadMetadataPartsFromImage() { base.ReadMetadataPartsFromImage(); var requestRootPointer = from row in Image.Rows.AsParallel() where row.FileName == "root" select new RootPointer(row); _rootPointer = requestRootPointer.FirstOrDefault(); if (_rootPointer == null) { throw new InvalidOperationException("Unsupported file structure. May be 8.0 format. RootPointer == null"); } lock (MetadataObjects) { MetadataObjects.Add(_rootPointer); } var requestRoot = from row in Image.Rows.AsParallel() where row.FileName.Contains(_rootPointer.MetadataPackageFileName.ToString()) select row; PackagePart = new Configuration(requestRoot.FirstOrDefault()); lock (MetadataObjects) { MetadataObjects.Add(PackagePart); } var requestVersion = from row in Image.Rows.AsParallel() where row.FileName == "version" select row; _version = new Version(requestVersion.FirstOrDefault()); lock (MetadataObjects) { MetadataObjects.Add(_version); } var requestVersions = from row in Image.Rows.AsParallel() where row.FileName == "versions" select row; _versions = new Versions(requestVersions.FirstOrDefault()); lock (MetadataObjects) { MetadataObjects.Add(_versions); } ReadMetadataObjects(); }
protected override void ReadMetadataPartsFromImage() { base.ReadMetadataPartsFromImage(); var requestUpdateInfo = from row in Image.Rows.AsParallel() where row.FileName == "UpdateInfo.inf" select new UpdateInfo(row); var updateInfo = requestUpdateInfo.FirstOrDefault(); lock (MetadataObjects) { MetadataObjects.Add(updateInfo); } }