Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Print / Reach / Packaging / PartEditor.cs / 1 / PartEditor.cs
/*++
Copyright (C) 2004 - 2005 Microsoft Corporation
All rights reserved.
Module Name:
PartEditor.cs
Abstract:
This file contains the definition and implementation
for PartEditor and XmlPartEditor classes. These classes
are used as wrappers around the Metro package API part
classes.
Author:
[....] ([....]) 1-November-2004
Revision History:
--*/
using System;
using System.Diagnostics;
using System.Security.Permissions;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.IO.Packaging;
using System.Windows;
using System.Windows.Markup;
using System.Xml;
namespace System.Windows.Xps.Packaging
{
///
/// Provides access to the stream of a Metro part
///
internal class PartEditor : IDisposable
{
#region Constructors
///
/// Attach an editor to a part
///
///
internal
PartEditor(
PackagePart metroPart
)
{
if (null == metroPart)
{
throw new ArgumentNullException("metroPart");
}
_metroPart = metroPart;
}
#endregion Constructors
#region Protected properties
protected PackagePart MetroPart
{
get
{
return _metroPart;
}
}
#endregion Protected properties
#region Internal properties
///
/// Return a data stream for the part
///
///
internal Stream DataStream
{
get
{
if (null == _partDataStream)
{
if (_metroPart.Package.FileOpenAccess == FileAccess.Write)
{
_partDataStream = _metroPart.GetStream(FileMode.Create);
}
else
{
_partDataStream = _metroPart.GetStream(FileMode.OpenOrCreate);
}
}
return _partDataStream;
}
}
#endregion Internal properties
#region Internal methods
///
/// Close the part data stream
///
internal
virtual
void
Close(
)
{
if (null != _partDataStream)
{
if (_partDataStream.CanWrite)
{
_partDataStream.Close();
}
_partDataStream = null;
}
}
///
/// Forcibly flush the part data stream
///
internal
virtual
void
Flush(
)
{
if (null != _partDataStream)
{
_partDataStream.Flush();
}
}
///
/// Forcibly flush the part data stream
///
internal
virtual
void
FlushRelationships(
)
{
if (null != _metroPart)
{
_metroPart.FlushRelationships();
}
}
#endregion Internal methods
#region Private data
private PackagePart _metroPart;
private Stream _partDataStream;
#endregion Private data
#region IDisposable implementation
void
IDisposable.Dispose(
)
{
Close();
}
#endregion IDisposable implementation
}
///
/// Part editor with XML content
///
internal class XmlPartEditor : PartEditor
{
#region Constructors
///
/// Attach an editor to an existing part
///
///
internal
XmlPartEditor(
PackagePart metroPart
)
: base(metroPart)
{
_doesWriteStartEndTags = true;
_isStartElementWritten = false;
}
#endregion Constructors
#region Internal properties
internal bool DoesWriteStartEndTags
{
get
{
return _doesWriteStartEndTags;
}
set
{
_doesWriteStartEndTags = value;
}
}
internal bool IsStartElementWritten
{
get
{
return _isStartElementWritten;
}
}
internal XmlTextWriter XmlWriter
{
get
{
if (null == _xmlWriter)
{
OpenDocumentForWrite();
}
return _xmlWriter;
}
}
internal XmlTextReader XmlReader
{
get
{
if (null == _xmlReader)
{
OpenDocumentForRead();
}
return _xmlReader;
}
}
#endregion Internal properties
#region Internal methods
///
/// Setup for writing
///
internal
void
OpenDocumentForRead(
)
{
if (_xmlReader != null)
{
throw new XpsPackagingException(ReachSR.Get(ReachSRID.ReachPackaging_OpenDocOrElementAlreadyCalled));
}
Stream stream = MetroPart.GetStream(FileMode.Open);
_xmlReader = new XmlTextReader(stream);
}
///
/// Setup for writing
///
internal
void
OpenDocumentForWrite(
)
{
if (_xmlWriter != null)
{
throw new XpsPackagingException(ReachSR.Get(ReachSRID.ReachPackaging_OpenDocOrElementAlreadyCalled));
}
Stream stream = MetroPart.GetStream(FileMode.Create);
_xmlWriter = new XmlTextWriter(stream, System.Text.Encoding.UTF8);
}
internal
void
PrepareXmlWriter(
string startTag,
string namespaceUri
)
{
if (null == _xmlWriter)
{
//
// Stream not open yet, create it and write open tag
//
OpenDocumentForWrite();
if (_doesWriteStartEndTags)
{
_xmlWriter.WriteStartDocument();
}
_xmlWriter.WriteStartElement(startTag, namespaceUri);
_isStartElementWritten = true;
}
}
///
/// Flush any XML written so far for sequence (does not end Sequence tag)
///
internal
override
void
Flush(
)
{
if (null != _xmlWriter)
{
_xmlWriter.Flush();
}
}
///
/// Close XML written for sequence (adds end Sequence tag)
///
internal
override
void
Close(
)
{
if (null != _xmlWriter)
{
_xmlWriter.Close();
_xmlWriter = null;
}
if (null != _xmlReader)
{
_xmlReader.Close();
_xmlReader = null;
}
base.Close();
}
#endregion Internal methods
#region Private data
private bool _doesWriteStartEndTags;
private XmlTextWriter _xmlWriter;
private XmlTextReader _xmlReader;
private bool _isStartElementWritten;
#endregion Private data
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RecoverInstanceLocksCommand.cs
- FlowDocumentView.cs
- SpeechUI.cs
- CategoryEditor.cs
- ComboBoxAutomationPeer.cs
- NamespaceList.cs
- OperationCanceledException.cs
- TransformFinalBlockRequest.cs
- StateRuntime.cs
- WebPartAuthorizationEventArgs.cs
- SqlProvider.cs
- DocumentPageView.cs
- IndexerNameAttribute.cs
- SurrogateDataContract.cs
- SiteMapPathDesigner.cs
- CommaDelimitedStringAttributeCollectionConverter.cs
- ToolStripPanelRenderEventArgs.cs
- InfoCardTrace.cs
- EntityType.cs
- InputLanguage.cs
- Stroke2.cs
- BuilderPropertyEntry.cs
- WebMessageBodyStyleHelper.cs
- StsCommunicationException.cs
- IIS7WorkerRequest.cs
- FixedPosition.cs
- ReflectionPermission.cs
- XmlSchemaParticle.cs
- IItemContainerGenerator.cs
- BinaryNode.cs
- WebScriptMetadataFormatter.cs
- DataViewListener.cs
- DataGridColumnCollection.cs
- SerialErrors.cs
- ArrayMergeHelper.cs
- ResponseBodyWriter.cs
- LogPolicy.cs
- RemoteWebConfigurationHostStream.cs
- StreamInfo.cs
- MouseButton.cs
- DocumentSequenceHighlightLayer.cs
- GridErrorDlg.cs
- ProfileService.cs
- EntityDescriptor.cs
- ArrayConverter.cs
- CodeBinaryOperatorExpression.cs
- SerializableAttribute.cs
- XPathException.cs
- TextElementCollection.cs
- Identifier.cs
- FixedSOMPage.cs
- XmlAnyAttributeAttribute.cs
- ReturnValue.cs
- Overlapped.cs
- QuotedStringFormatReader.cs
- RegistrySecurity.cs
- BridgeDataReader.cs
- ResourcePermissionBase.cs
- Delay.cs
- ValidationUtility.cs
- ObjectPersistData.cs
- SqlEnums.cs
- ListViewTableRow.cs
- Transform.cs
- MetadataUtil.cs
- OutputCacheSettings.cs
- DataViewManagerListItemTypeDescriptor.cs
- DependencyPropertyKind.cs
- Menu.cs
- RelationshipConverter.cs
- EncryptedReference.cs
- BoundPropertyEntry.cs
- MultiPageTextView.cs
- SoapIgnoreAttribute.cs
- DrawingContextDrawingContextWalker.cs
- FlowDocumentPage.cs
- MultipleViewPatternIdentifiers.cs
- BStrWrapper.cs
- IItemProperties.cs
- ConnectionManagementSection.cs
- TextBox.cs
- OracleConnection.cs
- XmlDataDocument.cs
- ProcessHostMapPath.cs
- WebPartVerbsEventArgs.cs
- DoubleAnimationClockResource.cs
- AutomationEventArgs.cs
- AppDomainFactory.cs
- XmlQuerySequence.cs
- GrammarBuilderPhrase.cs
- VisualTreeHelper.cs
- DatatypeImplementation.cs
- Image.cs
- KnownTypeDataContractResolver.cs
- UniqueEventHelper.cs
- SocketInformation.cs
- DataServiceHost.cs
- BufferAllocator.cs
- EntitySqlQueryCacheKey.cs
- DataExpression.cs