Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntityDesign / Design / System / Data / EntityModel / Emitters / MetadataItemEmitter.cs / 1305376 / MetadataItemEmitter.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Metadata.Edm;
using System.Diagnostics;
using System.CodeDom;
using System.Reflection;
namespace System.Data.EntityModel.Emitters
{
internal abstract class MetadataItemEmitter : Emitter
{
private MetadataItem _item;
protected MetadataItemEmitter(ClientApiGenerator generator, MetadataItem item)
:base(generator)
{
Debug.Assert(item != null, "item is null");
_item = item;
}
protected MetadataItem Item
{
get { return _item; }
}
///
/// Emitter-specific validation here
///
protected abstract void Validate();
#region Operations for Getting Accessibility
private const string CodeGenerationValueAccessibilityInternal = "Internal";
private const string CodeGenerationValueAccessibilityProtected = "Protected";
private const string CodeGenerationValueAccessibilityPublic = "Public";
private const string CodeGenerationValueAccessibilityPrivate = "Private";
#region Protected Block
protected static MemberAttributes AccessibilityFromGettersAndSetters(EdmMember property)
{
MemberAttributes scope = MemberAttributes.Private;
MemberAttributes getter = GetGetterAccessibility(property);
if (IsLeftMoreAccessableThanRight(getter, scope))
{
scope = getter;
}
MemberAttributes setter = GetSetterAccessibility(property);
if (IsLeftMoreAccessableThanRight(setter, scope))
{
scope = setter;
}
return scope;
}
protected static MemberAttributes GetGetterAccessibility(EdmMember item)
{
return GetAccessibilityValue(item, XmlConstants.GetterAccess);
}
protected static MemberAttributes GetSetterAccessibility(EdmMember item)
{
return GetAccessibilityValue(item, XmlConstants.SetterAccess);
}
protected static MemberAttributes GetFunctionImportAccessibility(EdmFunction item)
{
return GetAccessibilityValue(item, XmlConstants.MethodAccess);
}
protected static MemberAttributes GetEntitySetPropertyAccessibility(EntitySet item)
{
return GetAccessibilityValue(item, XmlConstants.GetterAccess);
}
protected static MemberAttributes GetEntityTypeAccessibility(EntityType item)
{
return GetAccessibilityValue(item, XmlConstants.TypeAccess);
}
protected static int GetAccessibilityRank(MemberAttributes accessibility)
{
Debug.Assert(accessibility == MemberAttributes.Private ||
accessibility == MemberAttributes.Public ||
accessibility == MemberAttributes.Assembly ||
accessibility == MemberAttributes.Family,
"this method is intended to deal with only single access attributes");
switch (accessibility)
{
case MemberAttributes.Public:
return 0;
case MemberAttributes.Assembly:
return 1;
case MemberAttributes.Family:
return 2;
default:
Debug.Assert(accessibility == MemberAttributes.Private, "did a new type get added?");
return 3;
}
}
protected static TypeAttributes GetTypeAccessibilityValue(MetadataItem item)
{
TypeAttributes accessibilty = TypeAttributes.Public;
MetadataProperty metadataProperty;
if (item.MetadataProperties.TryGetValue(Utils.GetFullyQualifiedCodeGenerationAttributeName(XmlConstants.TypeAccess), false, out metadataProperty))
{
accessibilty = GetCodeAccessibilityTypeAttribute(metadataProperty.Value.ToString());
}
return accessibilty;
}
#endregion Protected
#region Private Block
private static MemberAttributes GetAccessibilityValue(MetadataItem item, string attribute)
{
MemberAttributes accessibilty = MemberAttributes.Public;
MetadataProperty metadataProperty;
if (item.MetadataProperties.TryGetValue(Utils.GetFullyQualifiedCodeGenerationAttributeName(attribute), false, out metadataProperty))
{
accessibilty = GetCodeAccessibilityMemberAttribute(metadataProperty.Value.ToString());
}
return accessibilty;
}
private static MemberAttributes GetCodeAccessibilityMemberAttribute(string accessibility)
{
Debug.Assert(accessibility != null, "why does accessibility == null?");
switch (accessibility)
{
case CodeGenerationValueAccessibilityInternal:
return MemberAttributes.Assembly;
case CodeGenerationValueAccessibilityPrivate:
return MemberAttributes.Private;
case CodeGenerationValueAccessibilityProtected:
return MemberAttributes.Family;
default:
Debug.Assert(accessibility == CodeGenerationValueAccessibilityPublic, "found an accessibility other than " + CodeGenerationValueAccessibilityPublic);
return MemberAttributes.Public;
}
}
///
/// Given a MemberAttribute, returns a string representation used in CSDL.
/// For e.g: MemebrAttribtue.Family is Protected in our csdl, (protected in C#, Family in VB)
/// Inverse of the method above (GetCodeAccessibilityMemberAttribute)
///
protected static string GetAccessibilityCsdlStringFromMemberAttribute(MemberAttributes attribute)
{
switch (attribute)
{
case MemberAttributes.Assembly:
return CodeGenerationValueAccessibilityInternal;
case MemberAttributes.Private:
return CodeGenerationValueAccessibilityPrivate;
case MemberAttributes.Family:
return CodeGenerationValueAccessibilityProtected;
default:
Debug.Assert(attribute == MemberAttributes.Public, "found MemberAttribute other than " + CodeGenerationValueAccessibilityPublic);
return CodeGenerationValueAccessibilityPublic;
}
}
private static bool IsLeftMoreAccessableThanRight(MemberAttributes left, MemberAttributes right)
{
return GetAccessibilityRank(left) < GetAccessibilityRank(right);
}
private static TypeAttributes GetCodeAccessibilityTypeAttribute(string accessibility)
{
Debug.Assert(accessibility != null, "why does accessibility == null?");
if (accessibility == CodeGenerationValueAccessibilityInternal || accessibility == CodeGenerationValueAccessibilityProtected)
{
return TypeAttributes.NotPublic;
}
else
{
Debug.Assert(accessibility == CodeGenerationValueAccessibilityPublic, "found an accessibility other than " + CodeGenerationValueAccessibilityPublic);
return TypeAttributes.Public;
}
}
#endregion Private
#endregion Operations for getting Accessibility
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Metadata.Edm;
using System.Diagnostics;
using System.CodeDom;
using System.Reflection;
namespace System.Data.EntityModel.Emitters
{
internal abstract class MetadataItemEmitter : Emitter
{
private MetadataItem _item;
protected MetadataItemEmitter(ClientApiGenerator generator, MetadataItem item)
:base(generator)
{
Debug.Assert(item != null, "item is null");
_item = item;
}
protected MetadataItem Item
{
get { return _item; }
}
///
/// Emitter-specific validation here
///
protected abstract void Validate();
#region Operations for Getting Accessibility
private const string CodeGenerationValueAccessibilityInternal = "Internal";
private const string CodeGenerationValueAccessibilityProtected = "Protected";
private const string CodeGenerationValueAccessibilityPublic = "Public";
private const string CodeGenerationValueAccessibilityPrivate = "Private";
#region Protected Block
protected static MemberAttributes AccessibilityFromGettersAndSetters(EdmMember property)
{
MemberAttributes scope = MemberAttributes.Private;
MemberAttributes getter = GetGetterAccessibility(property);
if (IsLeftMoreAccessableThanRight(getter, scope))
{
scope = getter;
}
MemberAttributes setter = GetSetterAccessibility(property);
if (IsLeftMoreAccessableThanRight(setter, scope))
{
scope = setter;
}
return scope;
}
protected static MemberAttributes GetGetterAccessibility(EdmMember item)
{
return GetAccessibilityValue(item, XmlConstants.GetterAccess);
}
protected static MemberAttributes GetSetterAccessibility(EdmMember item)
{
return GetAccessibilityValue(item, XmlConstants.SetterAccess);
}
protected static MemberAttributes GetFunctionImportAccessibility(EdmFunction item)
{
return GetAccessibilityValue(item, XmlConstants.MethodAccess);
}
protected static MemberAttributes GetEntitySetPropertyAccessibility(EntitySet item)
{
return GetAccessibilityValue(item, XmlConstants.GetterAccess);
}
protected static MemberAttributes GetEntityTypeAccessibility(EntityType item)
{
return GetAccessibilityValue(item, XmlConstants.TypeAccess);
}
protected static int GetAccessibilityRank(MemberAttributes accessibility)
{
Debug.Assert(accessibility == MemberAttributes.Private ||
accessibility == MemberAttributes.Public ||
accessibility == MemberAttributes.Assembly ||
accessibility == MemberAttributes.Family,
"this method is intended to deal with only single access attributes");
switch (accessibility)
{
case MemberAttributes.Public:
return 0;
case MemberAttributes.Assembly:
return 1;
case MemberAttributes.Family:
return 2;
default:
Debug.Assert(accessibility == MemberAttributes.Private, "did a new type get added?");
return 3;
}
}
protected static TypeAttributes GetTypeAccessibilityValue(MetadataItem item)
{
TypeAttributes accessibilty = TypeAttributes.Public;
MetadataProperty metadataProperty;
if (item.MetadataProperties.TryGetValue(Utils.GetFullyQualifiedCodeGenerationAttributeName(XmlConstants.TypeAccess), false, out metadataProperty))
{
accessibilty = GetCodeAccessibilityTypeAttribute(metadataProperty.Value.ToString());
}
return accessibilty;
}
#endregion Protected
#region Private Block
private static MemberAttributes GetAccessibilityValue(MetadataItem item, string attribute)
{
MemberAttributes accessibilty = MemberAttributes.Public;
MetadataProperty metadataProperty;
if (item.MetadataProperties.TryGetValue(Utils.GetFullyQualifiedCodeGenerationAttributeName(attribute), false, out metadataProperty))
{
accessibilty = GetCodeAccessibilityMemberAttribute(metadataProperty.Value.ToString());
}
return accessibilty;
}
private static MemberAttributes GetCodeAccessibilityMemberAttribute(string accessibility)
{
Debug.Assert(accessibility != null, "why does accessibility == null?");
switch (accessibility)
{
case CodeGenerationValueAccessibilityInternal:
return MemberAttributes.Assembly;
case CodeGenerationValueAccessibilityPrivate:
return MemberAttributes.Private;
case CodeGenerationValueAccessibilityProtected:
return MemberAttributes.Family;
default:
Debug.Assert(accessibility == CodeGenerationValueAccessibilityPublic, "found an accessibility other than " + CodeGenerationValueAccessibilityPublic);
return MemberAttributes.Public;
}
}
///
/// Given a MemberAttribute, returns a string representation used in CSDL.
/// For e.g: MemebrAttribtue.Family is Protected in our csdl, (protected in C#, Family in VB)
/// Inverse of the method above (GetCodeAccessibilityMemberAttribute)
///
protected static string GetAccessibilityCsdlStringFromMemberAttribute(MemberAttributes attribute)
{
switch (attribute)
{
case MemberAttributes.Assembly:
return CodeGenerationValueAccessibilityInternal;
case MemberAttributes.Private:
return CodeGenerationValueAccessibilityPrivate;
case MemberAttributes.Family:
return CodeGenerationValueAccessibilityProtected;
default:
Debug.Assert(attribute == MemberAttributes.Public, "found MemberAttribute other than " + CodeGenerationValueAccessibilityPublic);
return CodeGenerationValueAccessibilityPublic;
}
}
private static bool IsLeftMoreAccessableThanRight(MemberAttributes left, MemberAttributes right)
{
return GetAccessibilityRank(left) < GetAccessibilityRank(right);
}
private static TypeAttributes GetCodeAccessibilityTypeAttribute(string accessibility)
{
Debug.Assert(accessibility != null, "why does accessibility == null?");
if (accessibility == CodeGenerationValueAccessibilityInternal || accessibility == CodeGenerationValueAccessibilityProtected)
{
return TypeAttributes.NotPublic;
}
else
{
Debug.Assert(accessibility == CodeGenerationValueAccessibilityPublic, "found an accessibility other than " + CodeGenerationValueAccessibilityPublic);
return TypeAttributes.Public;
}
}
#endregion Private
#endregion Operations for getting Accessibility
}
}
// 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
- IsolatedStorageFilePermission.cs
- OptimizedTemplateContent.cs
- Native.cs
- AssociationSetMetadata.cs
- InvalidateEvent.cs
- VariableQuery.cs
- UniqueEventHelper.cs
- DeferredElementTreeState.cs
- PropertyInfoSet.cs
- DateBoldEvent.cs
- AggregationMinMaxHelpers.cs
- TracingConnectionInitiator.cs
- EntityConnectionStringBuilderItem.cs
- DataGridItemAutomationPeer.cs
- CdpEqualityComparer.cs
- ErrorFormatterPage.cs
- Int64Converter.cs
- SystemMulticastIPAddressInformation.cs
- HMACRIPEMD160.cs
- ValidationVisibilityAttribute.cs
- TextEditorCharacters.cs
- Publisher.cs
- DateTimePicker.cs
- AccessText.cs
- WaitingCursor.cs
- SelectionService.cs
- RegexNode.cs
- DelegateTypeInfo.cs
- StatusBarDrawItemEvent.cs
- SQLRoleProvider.cs
- Sentence.cs
- OdbcException.cs
- EventEntry.cs
- HostingEnvironmentException.cs
- BamlBinaryWriter.cs
- X509Certificate2.cs
- Int32Animation.cs
- FormsAuthenticationUser.cs
- PerspectiveCamera.cs
- ListBox.cs
- RectangleHotSpot.cs
- MLangCodePageEncoding.cs
- SkinIDTypeConverter.cs
- CfgParser.cs
- TargetControlTypeCache.cs
- CodeTypeMember.cs
- BuilderPropertyEntry.cs
- HtmlEmptyTagControlBuilder.cs
- OleDbDataReader.cs
- ApplyHostConfigurationBehavior.cs
- AdRotator.cs
- dataSvcMapFileLoader.cs
- RtType.cs
- SingleObjectCollection.cs
- NativeMethods.cs
- ReceiveMessageContent.cs
- ContentControl.cs
- RangeBaseAutomationPeer.cs
- EmptyCollection.cs
- HierarchicalDataSourceControl.cs
- IsolatedStorage.cs
- ToolStripSplitStackLayout.cs
- DetailsViewModeEventArgs.cs
- RestHandlerFactory.cs
- TextElement.cs
- FrameworkElement.cs
- FileSecurity.cs
- SQLBytesStorage.cs
- ConstructorNeedsTagAttribute.cs
- PageTheme.cs
- ContentType.cs
- SQLDouble.cs
- UriWriter.cs
- _Rfc2616CacheValidators.cs
- SafeRegistryHandle.cs
- ToolStripSplitStackLayout.cs
- WebBrowserNavigatedEventHandler.cs
- NamespaceMapping.cs
- storepermissionattribute.cs
- XmlExpressionDumper.cs
- SocketAddress.cs
- TileBrush.cs
- WebServiceParameterData.cs
- AudioException.cs
- OdbcConnectionString.cs
- ApplyTemplatesAction.cs
- AssemblyInfo.cs
- CatalogPartCollection.cs
- XhtmlBasicValidationSummaryAdapter.cs
- SequentialOutput.cs
- ResourcesChangeInfo.cs
- ControlsConfig.cs
- MessageSmuggler.cs
- AssociationType.cs
- EventBuilder.cs
- AttributeUsageAttribute.cs
- SymbolEqualComparer.cs
- AssociationSetMetadata.cs
- ManagementDateTime.cs
- DeclarativeCatalogPart.cs