コード例 #1
0
ファイル: OpenXmlPart.cs プロジェクト: OfficeDev/Open-XML-SDK
        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);
        }
コード例 #2
0
        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);
        }