Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Server / System / Data / Services / Epm / EpmCustomContentWriterNodeData.cs / 1305376 / EpmCustomContentWriterNodeData.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Data held by each node in the EpmTargetTree containing information used
// by the EpmCustomContentWriter visitor
//
//
// @owner [....]
//---------------------------------------------------------------------
namespace System.Data.Services.Common
{
using System;
using System.IO;
using System.Xml;
#if !ASTORIA_CLIENT
using System.ServiceModel.Syndication;
using System.Data.Services.Serializers;
using System.Data.Services.Providers;
#else
using System.Data.Services.Client;
#endif
///
/// Data held by each node in the EpmTargetTree containing information used by the
/// EpmCustomContentWriter visitor
///
internal sealed class EpmCustomContentWriterNodeData : IDisposable
{
///
/// IDisposable helper state
///
private bool disposed;
#if ASTORIA_CLIENT
/// Initializes the per node data for custom serializer
/// Segment in target tree corresponding to this node
/// Object from which to read properties
internal EpmCustomContentWriterNodeData(EpmTargetPathSegment segment, object element)
#else
/// Initializes the per node data for custom serializer
/// Segment in target tree corresponding to this node
/// Object from which to read properties
/// Null valued properties found during serialization
/// Data Service provider used for rights verification.
internal EpmCustomContentWriterNodeData(EpmTargetPathSegment segment, object element, EpmContentSerializer.EpmNullValuedPropertyTree nullValuedProperties, DataServiceProviderWrapper provider)
#endif
{
this.XmlContentStream = new MemoryStream();
XmlWriterSettings customContentWriterSettings = new XmlWriterSettings();
customContentWriterSettings.OmitXmlDeclaration = true;
customContentWriterSettings.ConformanceLevel = ConformanceLevel.Fragment;
this.XmlContentWriter = XmlWriter.Create(this.XmlContentStream, customContentWriterSettings);
#if ASTORIA_CLIENT
this.PopulateData(segment, element);
#else
this.PopulateData(segment, element, nullValuedProperties, provider);
#endif
}
#if ASTORIA_CLIENT
/// Initializes the per node data for custom serializer
/// Parent node whose xml writer we are going to reuse
/// Segment in target tree corresponding to this node
/// Object from which to read properties
internal EpmCustomContentWriterNodeData(EpmCustomContentWriterNodeData parentData, EpmTargetPathSegment segment, object element)
#else
/// Initializes the per node data for custom serializer
/// Parent node whose xml writer we are going to reuse
/// Segment in target tree corresponding to this node
/// Object from which to read properties
/// Null valued properties found during serialization
/// Data Service provider used for rights verification.
internal EpmCustomContentWriterNodeData(EpmCustomContentWriterNodeData parentData, EpmTargetPathSegment segment, object element, EpmContentSerializer.EpmNullValuedPropertyTree nullValuedProperties, DataServiceProviderWrapper provider)
#endif
{
this.XmlContentStream = parentData.XmlContentStream;
this.XmlContentWriter = parentData.XmlContentWriter;
#if ASTORIA_CLIENT
this.PopulateData(segment, element);
#else
this.PopulateData(segment, element, nullValuedProperties, provider);
#endif
}
///
/// Memory stream on top of which XmlWriter works
///
internal MemoryStream XmlContentStream
{
get;
private set;
}
///
/// Xml writer used for holding custom content fragment
///
internal XmlWriter XmlContentWriter
{
get;
private set;
}
/// Data for current node
internal String Data
{
get;
private set;
}
///
/// Closes XmlWriter and disposes the MemoryStream
///
public void Dispose()
{
if (!this.disposed)
{
if (this.XmlContentWriter != null)
{
this.XmlContentWriter.Close();
this.XmlContentWriter = null;
}
if (this.XmlContentStream != null)
{
this.XmlContentStream.Dispose();
this.XmlContentStream = null;
}
this.disposed = true;
}
}
///
/// Adds the content generated through custom serialization to the SyndicationItem or XmlWriter
///
/// SyndicationItem or XmlWriter being serialized
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "XmlReader on MemoryStream does not require disposal")]
#if ASTORIA_CLIENT
internal void AddContentToTarget(XmlWriter target)
#else
internal void AddContentToTarget(SyndicationItem target)
#endif
{
#if ASTORIA_CLIENT
Util.CheckArgumentNull(target, "target");
#else
WebUtil.CheckArgumentNull(target, "target");
#endif
this.XmlContentWriter.Close();
this.XmlContentWriter = null;
this.XmlContentStream.Seek(0, SeekOrigin.Begin);
XmlReaderSettings customContentReaderSettings = new XmlReaderSettings();
customContentReaderSettings.ConformanceLevel = ConformanceLevel.Fragment;
XmlReader reader = XmlReader.Create(this.XmlContentStream, customContentReaderSettings);
this.XmlContentStream = null;
#if ASTORIA_CLIENT
target.WriteNode(reader, false);
#else
target.ElementExtensions.Add(reader);
#endif
}
#if ASTORIA_CLIENT
///
/// Populates the data value corresponding to this node, also updates the list of null attributes
/// in the parent null attribute list if current node is attribute with null value
///
/// Segment being populated
/// Object whose property will be read
private void PopulateData(EpmTargetPathSegment segment, object element)
#else
///
/// Populates the data value corresponding to this node, also updates the list of null attributes
/// in the parent null attribute list if current node is attribute with null value
///
/// Segment being populated
/// Object whose property will be read
/// Null valued properties found during serialization
/// Data Service provider used for rights verification.
private void PopulateData(EpmTargetPathSegment segment, object element, EpmContentSerializer.EpmNullValuedPropertyTree nullValuedProperties, DataServiceProviderWrapper provider)
#endif
{
if (segment.EpmInfo != null)
{
Object propertyValue;
try
{
#if ASTORIA_CLIENT
propertyValue = segment.EpmInfo.PropValReader.DynamicInvoke(element);
#else
propertyValue = segment.EpmInfo.PropValReader.DynamicInvoke(element, provider);
#endif
}
catch
#if ASTORIA_CLIENT
(System.Reflection.TargetInvocationException)
#else
(System.Reflection.TargetInvocationException e)
#endif
{
#if !ASTORIA_CLIENT
ErrorHandler.HandleTargetInvocationException(e);
#endif
throw;
}
#if ASTORIA_CLIENT
this.Data = propertyValue == null ? String.Empty : ClientConvert.ToString(propertyValue, false /* atomDateConstruct */);
#else
if (propertyValue == null || propertyValue == DBNull.Value)
{
this.Data = String.Empty;
nullValuedProperties.Add(segment.EpmInfo);
}
else
{
this.Data = PlainXmlSerializer.PrimitiveToString(propertyValue);
}
#endif
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ButtonBaseAutomationPeer.cs
- EncryptedKey.cs
- ObjectCache.cs
- TextModifierScope.cs
- InstancePersistenceContext.cs
- IPPacketInformation.cs
- XmlSiteMapProvider.cs
- MergeFilterQuery.cs
- QilValidationVisitor.cs
- ConnectionInterfaceCollection.cs
- RemoteDebugger.cs
- UniqueConstraint.cs
- StagingAreaInputItem.cs
- XmlDocumentFieldSchema.cs
- SeekStoryboard.cs
- MdiWindowListItemConverter.cs
- CodeConstructor.cs
- TextDecoration.cs
- Query.cs
- SqlBulkCopy.cs
- EntityCommandExecutionException.cs
- TextEditorTables.cs
- ResXResourceSet.cs
- StatusBarAutomationPeer.cs
- EDesignUtil.cs
- PrtTicket_Editor.cs
- PlanCompiler.cs
- UInt32Converter.cs
- StringSource.cs
- LazyTextWriterCreator.cs
- GeneralTransformCollection.cs
- Material.cs
- SqlWebEventProvider.cs
- PaperSize.cs
- BindingContext.cs
- QueryMath.cs
- ReflectionTypeLoadException.cs
- _LocalDataStoreMgr.cs
- SamlAssertion.cs
- TextSelectionProcessor.cs
- DataControlLinkButton.cs
- SizeChangedInfo.cs
- XmlAnyAttributeAttribute.cs
- MetadataUtil.cs
- XmlAnyElementAttribute.cs
- FixedSOMLineRanges.cs
- XmlSchemaRedefine.cs
- TextPatternIdentifiers.cs
- PassportAuthenticationModule.cs
- StorageMappingItemCollection.cs
- StylusPointPropertyInfo.cs
- BlockUIContainer.cs
- SafeNativeMethodsMilCoreApi.cs
- ErrorTableItemStyle.cs
- FrameSecurityDescriptor.cs
- UnsafeNativeMethodsMilCoreApi.cs
- DeclaredTypeElement.cs
- TextTreeObjectNode.cs
- TdsParser.cs
- DataGridViewRow.cs
- CapabilitiesPattern.cs
- XmlAttribute.cs
- SchemaNames.cs
- DropAnimation.xaml.cs
- ValueConversionAttribute.cs
- MonthChangedEventArgs.cs
- FileDialog.cs
- SqlParameter.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- HwndTarget.cs
- ColorPalette.cs
- XmlDataSourceNodeDescriptor.cs
- Pen.cs
- SystemFonts.cs
- PropertyCollection.cs
- TextSimpleMarkerProperties.cs
- ChangesetResponse.cs
- XmlReflectionImporter.cs
- SafeFileHandle.cs
- MailHeaderInfo.cs
- EncoderParameter.cs
- LineServices.cs
- RoutedEventHandlerInfo.cs
- Transform.cs
- Accessible.cs
- IPEndPoint.cs
- UriTemplateTable.cs
- InputGestureCollection.cs
- EntityViewContainer.cs
- OutputCacheModule.cs
- DragEvent.cs
- Directory.cs
- ComponentCommands.cs
- EnumerableRowCollectionExtensions.cs
- ShowExpandedMultiValueConverter.cs
- CommonXSendMessage.cs
- Padding.cs
- EncryptedData.cs
- DateTimeSerializationSection.cs
- TransactionManager.cs