Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Server / System / Data / Services / Epm / EpmContentDeSerializer.cs / 1305376 / EpmContentDeSerializer.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Class used for deserializing EntityPropertyMappingAttribute content.
//
//
// @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;
#endregion
/// DeSerializer for reading EPM content
internal sealed class EpmContentDeSerializer
{
/// for which this serializer works
private readonly ResourceType resourceType;
/// Object for which this serializer works
private readonly object element;
///
/// Constructor creates contained serializers
///
/// Resource type being serialized
/// Instance of
internal EpmContentDeSerializer(ResourceType resourceType, object element)
{
Debug.Assert(resourceType.HasEntityPropertyMappings == true, "Must have entity property mappings to instantiate EpmContentDeSerializer");
this.resourceType = resourceType;
this.element = element;
this.resourceType.EnsureEpmInfoAvailability();
}
/// Delegates to each of custom and syndication deserializers for serializing content
/// to deserialize
/// State of the deserializer
internal void DeSerialize(SyndicationItem item, EpmContentDeserializerState state)
{
if (this.resourceType.EpmTargetTree.SyndicationRoot.SubSegments.Count > 0)
{
new EpmSyndicationContentDeSerializer(item, state).DeSerialize(this.resourceType, this.element);
}
if (this.resourceType.EpmTargetTree.NonSyndicationRoot.SubSegments.Count > 0)
{
new EpmCustomContentDeSerializer(item, state).DeSerialize(this.resourceType, this.element);
}
}
/// Representation of deserializer state
internal sealed class EpmContentDeserializerState
{
/// Is current operation an update
public bool IsUpdateOperation
{
get;
set;
}
/// IUpdatable used for updating the object
public UpdatableWrapper Updatable
{
get;
set;
}
/// Service instance
public IDataService Service
{
get;
set;
}
/// Properties that have been applied
public EpmAppliedPropertyInfo PropertiesApplied
{
get;
set;
}
}
/// Holder of information about properties applied during deserialization of an object
internal sealed class EpmAppliedPropertyInfo
{
/// Properties already applied
private List properties;
/// Map from properties to their corresponding type names
private List propertyToTypeNameMap;
/// Propeties already applied
private IList Properties
{
get
{
if (this.properties == null)
{
this.properties = new List();
}
return this.properties;
}
}
/// Propeties to type name mappings
private IList PropertyToTypeNameMap
{
get
{
if (this.propertyToTypeNameMap == null)
{
this.propertyToTypeNameMap = new List();
}
return this.propertyToTypeNameMap;
}
}
/// Adds the given property to the collection of applied ones
/// Path of property
/// Does the path include all sub-properties
internal void AddAppliedProperty(String propertyPath, bool wholePathCovered)
{
this.Properties.Add(new EpmAppliedProperty { PropertyPath = propertyPath, ApplyRecursive = wholePathCovered });
}
/// Adds the given property to the collection of applied ones
/// Path of property
/// Type of the property
internal void AddPropertyToTypeMapItem(String propertyPath, String typeName)
{
this.PropertyToTypeNameMap.Add(new EpmPropertyToTypeMappingElement { PropertyPath = propertyPath, TypeName = typeName });
}
/// Checks if the given path is already applied
/// Given property path
/// true if the property has already been applied, false otherwise
internal bool Lookup(String propertyPath)
{
return this.properties != null && this.Properties.Any(e => e.PropertyPath == propertyPath ||
(e.ApplyRecursive == true &&
e.PropertyPath.Length <= propertyPath.Length && e.PropertyPath == propertyPath.Substring(0, e.PropertyPath.Length)));
}
/// Looksup the type given a property path
/// Given property path
/// String containing mapped type name, null otherwise
internal String MapPropertyToType(String propertyPath)
{
if (this.propertyToTypeNameMap != null)
{
EpmPropertyToTypeMappingElement mapping = this.PropertyToTypeNameMap.FirstOrDefault(e => e.PropertyPath == propertyPath);
return mapping != null ? mapping.TypeName : null;
}
else
{
return null;
}
}
/// Property that is applied
private sealed class EpmAppliedProperty
{
/// Path of property
public String PropertyPath
{
get;
set;
}
/// Is the property application path considered recursive
public bool ApplyRecursive
{
get;
set;
}
}
/// Maps a property path with the type
private sealed class EpmPropertyToTypeMappingElement
{
/// Path of property
public String PropertyPath
{
get;
set;
}
/// Type of the property
public String TypeName
{
get;
set;
}
}
}
}
}
// 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
- SafeCryptHandles.cs
- Win32Native.cs
- ToolStripDropTargetManager.cs
- ActivityInstanceMap.cs
- PcmConverter.cs
- SettingsAttributeDictionary.cs
- StylusCaptureWithinProperty.cs
- MatrixTransform.cs
- TextClipboardData.cs
- SystemNetHelpers.cs
- Publisher.cs
- CmsUtils.cs
- backend.cs
- DoubleLinkList.cs
- XmlnsDictionary.cs
- FormParameter.cs
- WindowsListViewItemStartMenu.cs
- HtmlLabelAdapter.cs
- TimeSpanSecondsConverter.cs
- LinearKeyFrames.cs
- MarkupCompiler.cs
- SubMenuStyleCollection.cs
- GradientStop.cs
- EdmToObjectNamespaceMap.cs
- PageCatalogPart.cs
- OleDbConnectionInternal.cs
- TextHidden.cs
- HtmlHistory.cs
- DataGridSortingEventArgs.cs
- HttpGetProtocolReflector.cs
- GenericPrincipal.cs
- ClientSettingsSection.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- TypeListConverter.cs
- Update.cs
- ContractComponent.cs
- NavigateUrlConverter.cs
- newinstructionaction.cs
- HttpCacheParams.cs
- WrapperEqualityComparer.cs
- BlobPersonalizationState.cs
- FixedSOMLineCollection.cs
- MethodBuilder.cs
- GiveFeedbackEventArgs.cs
- ServiceEndpoint.cs
- ExternalException.cs
- TextLineBreak.cs
- XmlException.cs
- InvalidateEvent.cs
- Timer.cs
- LoginUtil.cs
- XmlSchemaInfo.cs
- LinqTreeNodeEvaluator.cs
- SerializableAttribute.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- Size3DConverter.cs
- Metadata.cs
- HttpListenerTimeoutManager.cs
- DataListItemEventArgs.cs
- Evidence.cs
- ScriptMethodAttribute.cs
- BitmapEffectInput.cs
- DesignerObjectListAdapter.cs
- EncryptedXml.cs
- TagPrefixAttribute.cs
- SigningCredentials.cs
- MonitoringDescriptionAttribute.cs
- FixedSOMImage.cs
- FillRuleValidation.cs
- InstanceNameConverter.cs
- ClientSideQueueItem.cs
- TripleDESCryptoServiceProvider.cs
- Vector3DAnimation.cs
- GeometryCombineModeValidation.cs
- MemoryMappedViewStream.cs
- ListViewInsertionMark.cs
- TextTreeObjectNode.cs
- SymbolEqualComparer.cs
- ColumnResizeUndoUnit.cs
- HttpTransportSecurity.cs
- ObjectDesignerDataSourceView.cs
- FillErrorEventArgs.cs
- WorkItem.cs
- HandledEventArgs.cs
- SqlGenerator.cs
- X509Certificate2.cs
- ActivityWithResultConverter.cs
- SignedInfo.cs
- PowerModeChangedEventArgs.cs
- SemaphoreSecurity.cs
- GridItemPattern.cs
- TableSectionStyle.cs
- CqlGenerator.cs
- UnsafeNativeMethods.cs
- XXXInfos.cs
- ContentPosition.cs
- DataView.cs
- RegionIterator.cs
- CultureMapper.cs
- DataGridViewToolTip.cs