//------------------------------------------------------
        //
        //  Public Constructors
        //
        //------------------------------------------------------
        // None
        //------------------------------------------------------
        //
        //  Public Properties
        //
        //------------------------------------------------------
        // None
        //------------------------------------------------------
        //
        //  Public Methods
        //
        //------------------------------------------------------

        #region Public Methods

        /// <summary>
        /// Custom Implementation for the GetStream Method
        /// </summary>
        /// <param name="mode">Mode in which the stream should be opened</param>
        /// <param name="access">Access with which the stream should be opened</param>
        /// <returns>Stream Corresponding to this part</returns>
        protected override Stream GetStreamCore(FileMode mode, FileAccess access)
        {
            if (Package.InStreamingCreation)
            {
                // Convert Metro CompressionOption to Zip CompressionMethodEnum.
                CompressionMethodEnum compressionMethod;
                DeflateOptionEnum     deflateOption;
                ZipPackage.GetZipCompressionMethodFromOpcCompressionOption(this.CompressionOption,
                                                                           out compressionMethod, out deflateOption);

                // Mode and access get validated in StreamingZipPartStream().
                return(new StreamingZipPartStream(
                           PackUriHelper.GetStringForPartUri(this.Uri),
                           _zipArchive,
                           compressionMethod, deflateOption,
                           mode, access));
            }
            else if (_zipFileInfo != null)
            {
                // Case of an atomic part.
                return(_zipFileInfo.GetStream(mode, access));
            }
            else
            {
                // Case of an interleaved part.
                Invariant.Assert(_pieces != null);
                return(new InterleavedZipPartStream(this, mode, access));
            }
        }