Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Server / System / Data / Services / Epm / EpmCustomContentDeSerializer.cs / 1305376 / EpmCustomContentDeSerializer.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // //// Deserializer for the EPM content on the server // // // @owner [....] //--------------------------------------------------------------------- namespace System.Data.Services.Common { #region Namespaces using System.Collections.Generic; using System.Data.Services.Providers; using System.Diagnostics; using System.Linq; using System.ServiceModel.Syndication; using System.Xml; using System.Text; #endregion ///Custom content reader for EPM content internal sealed class EpmCustomContentDeSerializer : EpmContentDeSerializerBase { ///Constructor ///to read content from /// State of the deserializer internal EpmCustomContentDeSerializer(SyndicationItem item, EpmContentDeSerializer.EpmContentDeserializerState state) : base(item, state) { } /// Publicly accessible deserialization entry point /// Type of resource to deserialize /// Token corresponding to object ofinternal void DeSerialize(ResourceType resourceType, object element) { foreach (SyndicationElementExtension extension in this.Item.ElementExtensions) { using (XmlReader extensionReader = extension.GetReader()) { this.DeSerialize(extensionReader, resourceType.EpmTargetTree.NonSyndicationRoot, resourceType, element); } } } /// Called internally to deserialize each /// XmlReader for current extension /// Node in the target path being processed /// ResourceType /// object being deserialized private void DeSerialize(XmlReader reader, EpmTargetPathSegment currentRoot, ResourceType resourceType, object element) { EpmValueBuilder currentValue = new EpmValueBuilder(); do { switch (reader.NodeType) { case XmlNodeType.Element: if (currentRoot.HasContent) { // Throw an exception that we hit mixed-content. //value //throw DataServiceException.CreateBadRequestError(Strings.EpmDeserialize_MixedContent(resourceType.FullName)); } String elementName = reader.LocalName; String namespaceUri = reader.NamespaceURI; EpmTargetPathSegment newRoot = currentRoot.SubSegments .SingleOrDefault(s => s.SegmentNamespaceUri == namespaceUri && s.SegmentName == elementName); if (newRoot == null) { WebUtil.SkipToEnd(reader, elementName, namespaceUri); continue; } currentRoot = newRoot; this.DeserializeAttributes(reader, currentRoot, element, resourceType); if (currentRoot.HasContent) { if (reader.IsEmptyElement) { if (!EpmContentDeSerializerBase.Match(currentRoot, this.PropertiesApplied)) { resourceType.SetEpmValue(currentRoot, element, String.Empty, this); } currentRoot = currentRoot.ParentSegment; } } break; case XmlNodeType.CDATA: case XmlNodeType.Text: case XmlNodeType.SignificantWhitespace: if (!currentRoot.HasContent) { // Throw an exception that we hit mixed-content. // value value //value throw DataServiceException.CreateBadRequestError(Strings.EpmDeserialize_MixedContent(resourceType.FullName)); } currentValue.Append(reader.Value); break; case XmlNodeType.EndElement: if (currentRoot.HasContent) { if (!EpmContentDeSerializerBase.Match(currentRoot, this.PropertiesApplied)) { resourceType.SetEpmValue(currentRoot, element, currentValue.Value, this); } } currentRoot = currentRoot.ParentSegment; currentValue.Reset(); break; case XmlNodeType.Comment: case XmlNodeType.Whitespace: break; case XmlNodeType.None: case XmlNodeType.XmlDeclaration: case XmlNodeType.Attribute: case XmlNodeType.EndEntity: case XmlNodeType.EntityReference: case XmlNodeType.Entity: case XmlNodeType.Document: case XmlNodeType.DocumentType: case XmlNodeType.DocumentFragment: case XmlNodeType.Notation: case XmlNodeType.ProcessingInstruction: throw DataServiceException.CreateBadRequestError(Strings.EpmDeserialize_InvalidXmlEntity); } } while (currentRoot.ParentSegment != null && reader.Read()); } /// value value/// Deserializes the attributes from the /// Current content reader. /// Segment which has child attribute segments. /// Current object. /// Resource type ofand sets values on /// private void DeserializeAttributes(XmlReader reader, EpmTargetPathSegment currentRoot, object element, ResourceType resourceType) { foreach (var attributeSegment in currentRoot.SubSegments.Where(s => s.IsAttribute)) { String attribValue = WebUtil.GetAttributeEx(reader, attributeSegment.SegmentName.Substring(1), attributeSegment.SegmentNamespaceUri); if (attribValue != null) { if (!EpmContentDeSerializerBase.Match(attributeSegment, this.PropertiesApplied)) { resourceType.SetEpmValue(attributeSegment, element, attribValue, this); } } } } /// Collects current XmlReader values into a single string. private class EpmValueBuilder { ///Current value when single text content value is seen. private string elementValue; ///Current value if multiple text content values are seen together. private StringBuilder builder; ///Final value which is concatenation of all text content. internal string Value { get { if (this.builder != null) { return this.builder.ToString(); } return this.elementValue ?? String.Empty; } } ///Appends the current text content value to already held values. /// Current text content value. internal void Append(string value) { if (this.elementValue == null) { this.elementValue = value; } else if (this.builder == null) { string newValue = value; this.builder = new StringBuilder(elementValue.Length + newValue.Length) .Append(elementValue) .Append(newValue); } else { this.builder.Append(value); } } ///Once value is read, resets the current content to null. internal void Reset() { this.elementValue = null; this.builder = null; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // //// Deserializer for the EPM content on the server // // // @owner [....] //--------------------------------------------------------------------- namespace System.Data.Services.Common { #region Namespaces using System.Collections.Generic; using System.Data.Services.Providers; using System.Diagnostics; using System.Linq; using System.ServiceModel.Syndication; using System.Xml; using System.Text; #endregion ///Custom content reader for EPM content internal sealed class EpmCustomContentDeSerializer : EpmContentDeSerializerBase { ///Constructor ///to read content from /// State of the deserializer internal EpmCustomContentDeSerializer(SyndicationItem item, EpmContentDeSerializer.EpmContentDeserializerState state) : base(item, state) { } /// Publicly accessible deserialization entry point /// Type of resource to deserialize /// Token corresponding to object ofinternal void DeSerialize(ResourceType resourceType, object element) { foreach (SyndicationElementExtension extension in this.Item.ElementExtensions) { using (XmlReader extensionReader = extension.GetReader()) { this.DeSerialize(extensionReader, resourceType.EpmTargetTree.NonSyndicationRoot, resourceType, element); } } } /// Called internally to deserialize each /// XmlReader for current extension /// Node in the target path being processed /// ResourceType /// object being deserialized private void DeSerialize(XmlReader reader, EpmTargetPathSegment currentRoot, ResourceType resourceType, object element) { EpmValueBuilder currentValue = new EpmValueBuilder(); do { switch (reader.NodeType) { case XmlNodeType.Element: if (currentRoot.HasContent) { // Throw an exception that we hit mixed-content. //value //throw DataServiceException.CreateBadRequestError(Strings.EpmDeserialize_MixedContent(resourceType.FullName)); } String elementName = reader.LocalName; String namespaceUri = reader.NamespaceURI; EpmTargetPathSegment newRoot = currentRoot.SubSegments .SingleOrDefault(s => s.SegmentNamespaceUri == namespaceUri && s.SegmentName == elementName); if (newRoot == null) { WebUtil.SkipToEnd(reader, elementName, namespaceUri); continue; } currentRoot = newRoot; this.DeserializeAttributes(reader, currentRoot, element, resourceType); if (currentRoot.HasContent) { if (reader.IsEmptyElement) { if (!EpmContentDeSerializerBase.Match(currentRoot, this.PropertiesApplied)) { resourceType.SetEpmValue(currentRoot, element, String.Empty, this); } currentRoot = currentRoot.ParentSegment; } } break; case XmlNodeType.CDATA: case XmlNodeType.Text: case XmlNodeType.SignificantWhitespace: if (!currentRoot.HasContent) { // Throw an exception that we hit mixed-content. // value value //value throw DataServiceException.CreateBadRequestError(Strings.EpmDeserialize_MixedContent(resourceType.FullName)); } currentValue.Append(reader.Value); break; case XmlNodeType.EndElement: if (currentRoot.HasContent) { if (!EpmContentDeSerializerBase.Match(currentRoot, this.PropertiesApplied)) { resourceType.SetEpmValue(currentRoot, element, currentValue.Value, this); } } currentRoot = currentRoot.ParentSegment; currentValue.Reset(); break; case XmlNodeType.Comment: case XmlNodeType.Whitespace: break; case XmlNodeType.None: case XmlNodeType.XmlDeclaration: case XmlNodeType.Attribute: case XmlNodeType.EndEntity: case XmlNodeType.EntityReference: case XmlNodeType.Entity: case XmlNodeType.Document: case XmlNodeType.DocumentType: case XmlNodeType.DocumentFragment: case XmlNodeType.Notation: case XmlNodeType.ProcessingInstruction: throw DataServiceException.CreateBadRequestError(Strings.EpmDeserialize_InvalidXmlEntity); } } while (currentRoot.ParentSegment != null && reader.Read()); } /// value value/// Deserializes the attributes from the /// Current content reader. /// Segment which has child attribute segments. /// Current object. /// Resource type ofand sets values on /// private void DeserializeAttributes(XmlReader reader, EpmTargetPathSegment currentRoot, object element, ResourceType resourceType) { foreach (var attributeSegment in currentRoot.SubSegments.Where(s => s.IsAttribute)) { String attribValue = WebUtil.GetAttributeEx(reader, attributeSegment.SegmentName.Substring(1), attributeSegment.SegmentNamespaceUri); if (attribValue != null) { if (!EpmContentDeSerializerBase.Match(attributeSegment, this.PropertiesApplied)) { resourceType.SetEpmValue(attributeSegment, element, attribValue, this); } } } } /// Collects current XmlReader values into a single string. private class EpmValueBuilder { ///Current value when single text content value is seen. private string elementValue; ///Current value if multiple text content values are seen together. private StringBuilder builder; ///Final value which is concatenation of all text content. internal string Value { get { if (this.builder != null) { return this.builder.ToString(); } return this.elementValue ?? String.Empty; } } ///Appends the current text content value to already held values. /// Current text content value. internal void Append(string value) { if (this.elementValue == null) { this.elementValue = value; } else if (this.builder == null) { string newValue = value; this.builder = new StringBuilder(elementValue.Length + newValue.Length) .Append(elementValue) .Append(newValue); } else { this.builder.Append(value); } } ///Once value is read, resets the current content to null. internal void Reset() { this.elementValue = null; this.builder = null; } } } } // 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
- XmlLoader.cs
- Deserializer.cs
- PLINQETWProvider.cs
- SystemEvents.cs
- RawUIStateInputReport.cs
- MaskInputRejectedEventArgs.cs
- XamlStream.cs
- DependencyStoreSurrogate.cs
- StringFreezingAttribute.cs
- TdsParameterSetter.cs
- CodeParameterDeclarationExpressionCollection.cs
- WinInet.cs
- SingleObjectCollection.cs
- JoinTreeNode.cs
- StatusBarItemAutomationPeer.cs
- SerializationEventsCache.cs
- CollectionBase.cs
- FontStyles.cs
- GetRecipientRequest.cs
- ProcessManager.cs
- EntityDataSourceContainerNameItem.cs
- DataGridItemEventArgs.cs
- CodeRegionDirective.cs
- MarkupProperty.cs
- XNodeNavigator.cs
- HwndStylusInputProvider.cs
- Normalization.cs
- KeyValueConfigurationElement.cs
- AliasGenerator.cs
- TextEffectCollection.cs
- XamlReader.cs
- HttpChannelBindingToken.cs
- PagedDataSource.cs
- PerspectiveCamera.cs
- ClientApiGenerator.cs
- AssemblySettingAttributes.cs
- selecteditemcollection.cs
- SqlAliaser.cs
- FormsAuthenticationTicket.cs
- SecurityTokenContainer.cs
- RemotingAttributes.cs
- PrivilegedConfigurationManager.cs
- OutOfMemoryException.cs
- HtmlTableRow.cs
- TimeIntervalCollection.cs
- SHA1.cs
- AppearanceEditorPart.cs
- ProviderConnectionPointCollection.cs
- DbMetaDataColumnNames.cs
- LinkAreaEditor.cs
- RegisteredScript.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- URLIdentityPermission.cs
- XmlRawWriter.cs
- SqlReferenceCollection.cs
- OpenTypeCommon.cs
- ObjectTag.cs
- PageParser.cs
- WebPartManagerInternals.cs
- CellParagraph.cs
- ColorBuilder.cs
- WebPartZoneBaseDesigner.cs
- UnsafeNativeMethods.cs
- SqlServer2KCompatibilityAnnotation.cs
- DbDataAdapter.cs
- ArrayItemValue.cs
- DictionaryEntry.cs
- EntityWithKeyStrategy.cs
- BehaviorEditorPart.cs
- GraphicsState.cs
- EditingMode.cs
- EventMappingSettings.cs
- RowUpdatedEventArgs.cs
- XmlLinkedNode.cs
- MLangCodePageEncoding.cs
- SendKeys.cs
- IdentityNotMappedException.cs
- ToolStripScrollButton.cs
- WindowsRebar.cs
- XmlNamespaceMapping.cs
- RoleManagerEventArgs.cs
- EntityDataSourceReferenceGroup.cs
- FlowDocumentFormatter.cs
- OleTxTransaction.cs
- StorageAssociationTypeMapping.cs
- XmlSchemaExporter.cs
- InboundActivityHelper.cs
- TextPatternIdentifiers.cs
- AxisAngleRotation3D.cs
- SequentialActivityDesigner.cs
- SchemaNamespaceManager.cs
- PropertyItem.cs
- RuntimeHelpers.cs
- StateWorkerRequest.cs
- ThreadStateException.cs
- EditorPartChrome.cs
- AnonymousIdentificationSection.cs
- MouseGestureValueSerializer.cs
- Profiler.cs
- CodeDirectoryCompiler.cs