internal void Load(OpenXmlPackage?openXmlPackage, OpenXmlPart?parent, Uri uriTarget, string id, Dictionary <Uri, OpenXmlPart> loadedParts) { if (uriTarget is null) { throw new ArgumentNullException(nameof(uriTarget)); } if (id is null) { throw new ArgumentNullException(nameof(id)); } if (openXmlPackage is null && parent is null) { throw new ArgumentNullException(ExceptionMessages.PackageRelatedArgumentNullException); } if (parent is not null && openXmlPackage is not null && parent.OpenXmlPackage != openXmlPackage) { throw new ArgumentOutOfRangeException(nameof(parent)); } if (parent is not null && openXmlPackage is null) { openXmlPackage = parent.OpenXmlPackage; } _openXmlPackage = openXmlPackage ?? throw new ArgumentNullException(nameof(openXmlPackage)); Debug.Assert(loadedParts.ContainsKey(uriTarget)); _uri = uriTarget; // TODO: should we delay load? var part = openXmlPackage.Package.GetPart(uriTarget); _packagePart = part; if (IsContentTypeFixed && !IsValidContentType(part)) { var errorMessage = SR.Format( ExceptionMessages.InvalidPartContentType, part.Uri.OriginalString, part.ContentType, ContentType); throw new OpenXmlPackageException(errorMessage); } // add the _uri to be reserved openXmlPackage.ReserveUri(ContentType, Uri); // load recursively var relationshipCollection = new PackagePartRelationshipPropertyCollection(PackagePart); LoadReferencedPartsAndRelationships(openXmlPackage, this, relationshipCollection, loadedParts); }
internal void Load(OpenXmlPackage openXmlPackage, OpenXmlPart parent, Uri uriTarget, string id, Dictionary <Uri, OpenXmlPart> loadedParts) { if (uriTarget == null) { throw new ArgumentNullException(nameof(uriTarget)); } if (id == null) { throw new ArgumentNullException(nameof(id)); } if (openXmlPackage == null && parent == null) { throw new ArgumentNullException(ExceptionMessages.PackageRelatedArgumentNullException); } else if (parent != null && openXmlPackage != null && parent.OpenXmlPackage != openXmlPackage) { throw new ArgumentOutOfRangeException(nameof(parent)); } else if (parent != null && openXmlPackage == null) { openXmlPackage = parent.OpenXmlPackage; } this._openXmlPackage = openXmlPackage; //this._ownerPart = parent; Debug.Assert(loadedParts.ContainsKey(uriTarget)); this._uri = uriTarget; // TODO: should we delay load? PackagePart metroPart = this.OpenXmlPackage.Package.GetPart(uriTarget); if (this.IsContentTypeFixed && metroPart.ContentType != this.ContentType) { string errorMessage = String.Format(CultureInfo.CurrentUICulture, ExceptionMessages.InvalidPartContentType, metroPart.Uri.OriginalString, metroPart.ContentType, this.ContentType); throw new OpenXmlPackageException(errorMessage); } this._metroPart = metroPart; // add the _uri to be reserved this.OpenXmlPackage.ReserveUri(this.ContentType, this.Uri); // load recursively RelationshipCollection relationshipCollection = new PackagePartRelationshipPropertyCollection(this.PackagePart); LoadReferencedPartsAndRelationships(openXmlPackage, this, relationshipCollection, loadedParts); }