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
- ManipulationDeltaEventArgs.cs
- BaseParaClient.cs
- ComponentEvent.cs
- PersistenceTypeAttribute.cs
- TypeDescriptorContext.cs
- KerberosSecurityTokenProvider.cs
- PagerSettings.cs
- UniqueTransportManagerRegistration.cs
- AssemblySettingAttributes.cs
- Decimal.cs
- CFStream.cs
- HtmlTableCell.cs
- WebBrowserNavigatingEventHandler.cs
- MergePropertyDescriptor.cs
- PolyLineSegmentFigureLogic.cs
- DocumentViewerBaseAutomationPeer.cs
- BaseConfigurationRecord.cs
- TransportOutputChannel.cs
- ProcessInfo.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- ListContractAdapter.cs
- OdbcPermission.cs
- EndOfStreamException.cs
- CodeCommentStatement.cs
- CommentAction.cs
- ControlIdConverter.cs
- PeerNameRegistration.cs
- ServiceModelSecurityTokenRequirement.cs
- TextBlockAutomationPeer.cs
- StreamInfo.cs
- HttpListenerResponse.cs
- RelationshipManager.cs
- BindingNavigatorDesigner.cs
- DataGridDesigner.cs
- AbstractExpressions.cs
- TextElementEnumerator.cs
- BindingExpression.cs
- SiteMapDataSource.cs
- GridViewColumn.cs
- ReadOnlyDictionary.cs
- FloatAverageAggregationOperator.cs
- MsmqIntegrationInputMessage.cs
- TypeLoadException.cs
- _NetworkingPerfCounters.cs
- BindingCollection.cs
- BamlBinaryWriter.cs
- WebServiceAttribute.cs
- FixedSOMGroup.cs
- _LoggingObject.cs
- WorkflowDebuggerSteppingAttribute.cs
- FixedNode.cs
- FilterableAttribute.cs
- TreeViewHitTestInfo.cs
- MetadataItemEmitter.cs
- DataControlField.cs
- DBDataPermission.cs
- ParentQuery.cs
- XmlSchemaSimpleType.cs
- TopClause.cs
- COM2TypeInfoProcessor.cs
- MediaEntryAttribute.cs
- ProcessStartInfo.cs
- ProfileGroupSettings.cs
- ImageSourceTypeConverter.cs
- MULTI_QI.cs
- ImpersonationContext.cs
- Utility.cs
- SoapFormatterSinks.cs
- WindowsBrush.cs
- MDIWindowDialog.cs
- NativeCppClassAttribute.cs
- ReachBasicContext.cs
- DependencyPropertyDescriptor.cs
- DataReaderContainer.cs
- DataControlImageButton.cs
- DataMember.cs
- UInt64.cs
- DistinctQueryOperator.cs
- SQLInt64.cs
- PolyLineSegment.cs
- HttpApplication.cs
- ProtocolsSection.cs
- Method.cs
- ResetableIterator.cs
- LayoutUtils.cs
- ReaderContextStackData.cs
- RtfControls.cs
- IISUnsafeMethods.cs
- DefaultMergeHelper.cs
- DeleteCardRequest.cs
- bidPrivateBase.cs
- _Connection.cs
- ShaderEffect.cs
- TypeConverter.cs
- EventSinkHelperWriter.cs
- ContainerParaClient.cs
- XamlReaderHelper.cs
- SequentialUshortCollection.cs
- precedingquery.cs
- RijndaelManaged.cs