Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / EntityModel / SchemaObjectModel / TypeElement.cs / 1 / TypeElement.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.Xml;
using System.Data.Common;
using System.Diagnostics;
namespace System.Data.EntityModel.SchemaObjectModel
{
///
/// Responsible for parsing Type ProviderManifest
/// xml elements
///
internal class TypeElement : SchemaType
{
PrimitiveType _primitiveType = new PrimitiveType();
List _facetDescriptions = new List();
public TypeElement(Schema parent)
: base(parent)
{
_primitiveType.NamespaceName = Schema.Namespace;
}
protected override bool HandleElement(XmlReader reader)
{
if (base.HandleElement(reader))
{
return true;
}
else if (CanHandleElement(reader, XmlConstants.FacetDescriptionsElement))
{
SkipThroughElement(reader);
return true;
}
else if (CanHandleElement(reader, XmlConstants.PrecisionElement))
{
HandlePrecisionElement(reader);
return true;
}
else if (CanHandleElement(reader, XmlConstants.ScaleElement))
{
HandleScaleElement(reader);
return true;
}
else if (CanHandleElement(reader, XmlConstants.MaxLengthElement))
{
HandleMaxLengthElement(reader);
return true;
}
else if (CanHandleElement(reader, XmlConstants.UnicodeElement))
{
HandleUnicodeElement(reader);
return true;
}
else if (CanHandleElement(reader, XmlConstants.FixedLengthElement))
{
HandleFixedLengthElement(reader);
return true;
}
return false;
}
protected override bool HandleAttribute(XmlReader reader)
{
if (base.HandleAttribute(reader))
{
return true;
}
else if (CanHandleAttribute(reader, XmlConstants.PrimitiveTypeKindAttribute))
{
HandlePrimitiveTypeKindAttribute(reader);
return true;
}
return false;
}
/////////////////////////////////////////////////////////////////////
// Element Handlers
///
/// Handler for the Precision element
///
/// xml reader currently positioned at Precision element
private void HandlePrecisionElement(XmlReader reader)
{
Debug.Assert(reader != null);
ByteFacetDescriptionElement facetDescription = new ByteFacetDescriptionElement(this, DbProviderManifest.PrecisionFacetName);
facetDescription.Parse(reader);
// Bug 476451: Preventing decimal precision to be more than 29 since clr
// decimal is capable of holding decimals upto 29 precision
if ((this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.Decimal) && (facetDescription.MaxValue > EdmProviderManifest.MaximumDecimalPrecision))
{
AddError(ErrorCode.PrecisionMoreThanAllowedMax,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.PrecisionMoreThanAllowedMax(facetDescription.MaxValue, EdmProviderManifest.MaximumDecimalPrecision));
}
else if (((this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.DateTime) || (this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.DateTimeOffset)
|| (this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.Time)) && (facetDescription.MaxValue > EdmProviderManifest.MaximumDateTimePrecision))
{
AddError(ErrorCode.PrecisionMoreThanAllowedMax,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.PrecisionMoreThanAllowedMax(facetDescription.MaxValue, EdmProviderManifest.MaximumDateTimePrecision));
}
else
{
_facetDescriptions.Add(facetDescription);
}
}
///
/// Handler for the Scale element
///
/// xml reader currently positioned at Scale element
private void HandleScaleElement(XmlReader reader)
{
Debug.Assert(reader != null);
ByteFacetDescriptionElement facetDescription = new ByteFacetDescriptionElement(this, DbProviderManifest.ScaleFacetName);
facetDescription.Parse(reader);
_facetDescriptions.Add(facetDescription);
}
///
/// Handler for the MaxLength element
///
/// xml reader currently positioned at MaxLength element
private void HandleMaxLengthElement(XmlReader reader)
{
Debug.Assert(reader != null);
IntegerFacetDescriptionElement facetDescription = new IntegerFacetDescriptionElement(this, DbProviderManifest.MaxLengthFacetName);
facetDescription.Parse(reader);
_facetDescriptions.Add(facetDescription);
}
///
/// Handler for the Unicode element
///
/// xml reader currently positioned at Unicode element
private void HandleUnicodeElement(XmlReader reader)
{
Debug.Assert(reader != null);
BooleanFacetDescriptionElement facetDescription = new BooleanFacetDescriptionElement(this, DbProviderManifest.UnicodeFacetName);
facetDescription.Parse(reader);
_facetDescriptions.Add(facetDescription);
}
///
/// Handler for the FixedLength element
///
/// xml reader currently positioned at FixedLength element
private void HandleFixedLengthElement(XmlReader reader)
{
Debug.Assert(reader != null);
BooleanFacetDescriptionElement facetDescription = new BooleanFacetDescriptionElement(this, DbProviderManifest.FixedLengthFacetName);
facetDescription.Parse(reader);
_facetDescriptions.Add(facetDescription);
}
/////////////////////////////////////////////////////////////////////
// Attribute Handlers
///
/// Handler for the PrimitiveTypeKind attribute
///
/// xml reader currently positioned at Version attribute
private void HandlePrimitiveTypeKindAttribute(XmlReader reader)
{
Debug.Assert(reader != null);
string value = reader.Value;
try
{
_primitiveType.PrimitiveTypeKind = (PrimitiveTypeKind)Enum.Parse(typeof(PrimitiveTypeKind), value);
_primitiveType.BaseType = MetadataItem.EdmProviderManifest.GetPrimitiveType(_primitiveType.PrimitiveTypeKind);
}
catch (ArgumentException)
{
AddError(ErrorCode.InvalidPrimitiveTypeKind, EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.InvalidPrimitiveTypeKind(value));
}
}
public override string Name
{
get
{
return _primitiveType.Name;
}
set
{
_primitiveType.Name = value;
}
}
public PrimitiveType PrimitiveType
{
get
{
return _primitiveType;
}
}
public IEnumerable FacetDescriptions
{
get
{
foreach (FacetDescriptionElement element in _facetDescriptions)
{
yield return element.FacetDescription;
}
}
}
internal override void ResolveTopLevelNames()
{
base.ResolveTopLevelNames();
// Call validate on the facet descriptions
foreach (FacetDescriptionElement facetDescription in _facetDescriptions)
{
try
{
facetDescription.CreateAndValidateFacetDescription(this.Name);
}
catch (ArgumentException e)
{
AddError(ErrorCode.InvalidFacetInProviderManifest,
EdmSchemaErrorSeverity.Error,
e.Message);
}
}
// facet descriptions don't have any names to resolve
}
internal override void Validate()
{
base.Validate();
if (!ValidateSufficientFacets())
{
// the next checks will ---- up, so get out
// if we had errors
return;
}
if (!ValidateInterFacetConsistency())
{
return;
}
}
private bool ValidateInterFacetConsistency()
{
if (PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.Decimal)
{
FacetDescription precisionFacetDescription = Helper.GetFacet(FacetDescriptions, EdmProviderManifest.PrecisionFacetName);
FacetDescription scaleFacetDescription = Helper.GetFacet(FacetDescriptions, EdmProviderManifest.ScaleFacetName);
if(precisionFacetDescription.MaxValue.Value < scaleFacetDescription.MaxValue.Value)
{
AddError(ErrorCode.BadPrecisionAndScale,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.BadPrecisionAndScale(
precisionFacetDescription.MaxValue.Value,
scaleFacetDescription.MaxValue.Value));
return false;
}
}
return true;
}
private bool ValidateSufficientFacets()
{
PrimitiveType baseType = _primitiveType.BaseType as PrimitiveType;
// the base type will be an edm type
// the edm type is the athority for which facets are required
if (baseType == null)
{
// an error will already have been added for this
return false;
}
bool addedErrors = false;
foreach (FacetDescription systemFacetDescription in baseType.FacetDescriptions)
{
FacetDescription providerFacetDescription = Helper.GetFacet(FacetDescriptions, systemFacetDescription.FacetName);
if (providerFacetDescription == null)
{
AddError(ErrorCode.RequiredFacetMissing,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.MissingFacetDescription(
PrimitiveType.Name,
PrimitiveType.PrimitiveTypeKind,
systemFacetDescription.FacetName));
addedErrors = true;
}
}
return !addedErrors;
}
}
}
// 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.Xml;
using System.Data.Common;
using System.Diagnostics;
namespace System.Data.EntityModel.SchemaObjectModel
{
///
/// Responsible for parsing Type ProviderManifest
/// xml elements
///
internal class TypeElement : SchemaType
{
PrimitiveType _primitiveType = new PrimitiveType();
List _facetDescriptions = new List();
public TypeElement(Schema parent)
: base(parent)
{
_primitiveType.NamespaceName = Schema.Namespace;
}
protected override bool HandleElement(XmlReader reader)
{
if (base.HandleElement(reader))
{
return true;
}
else if (CanHandleElement(reader, XmlConstants.FacetDescriptionsElement))
{
SkipThroughElement(reader);
return true;
}
else if (CanHandleElement(reader, XmlConstants.PrecisionElement))
{
HandlePrecisionElement(reader);
return true;
}
else if (CanHandleElement(reader, XmlConstants.ScaleElement))
{
HandleScaleElement(reader);
return true;
}
else if (CanHandleElement(reader, XmlConstants.MaxLengthElement))
{
HandleMaxLengthElement(reader);
return true;
}
else if (CanHandleElement(reader, XmlConstants.UnicodeElement))
{
HandleUnicodeElement(reader);
return true;
}
else if (CanHandleElement(reader, XmlConstants.FixedLengthElement))
{
HandleFixedLengthElement(reader);
return true;
}
return false;
}
protected override bool HandleAttribute(XmlReader reader)
{
if (base.HandleAttribute(reader))
{
return true;
}
else if (CanHandleAttribute(reader, XmlConstants.PrimitiveTypeKindAttribute))
{
HandlePrimitiveTypeKindAttribute(reader);
return true;
}
return false;
}
/////////////////////////////////////////////////////////////////////
// Element Handlers
///
/// Handler for the Precision element
///
/// xml reader currently positioned at Precision element
private void HandlePrecisionElement(XmlReader reader)
{
Debug.Assert(reader != null);
ByteFacetDescriptionElement facetDescription = new ByteFacetDescriptionElement(this, DbProviderManifest.PrecisionFacetName);
facetDescription.Parse(reader);
// Bug 476451: Preventing decimal precision to be more than 29 since clr
// decimal is capable of holding decimals upto 29 precision
if ((this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.Decimal) && (facetDescription.MaxValue > EdmProviderManifest.MaximumDecimalPrecision))
{
AddError(ErrorCode.PrecisionMoreThanAllowedMax,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.PrecisionMoreThanAllowedMax(facetDescription.MaxValue, EdmProviderManifest.MaximumDecimalPrecision));
}
else if (((this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.DateTime) || (this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.DateTimeOffset)
|| (this.PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.Time)) && (facetDescription.MaxValue > EdmProviderManifest.MaximumDateTimePrecision))
{
AddError(ErrorCode.PrecisionMoreThanAllowedMax,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.PrecisionMoreThanAllowedMax(facetDescription.MaxValue, EdmProviderManifest.MaximumDateTimePrecision));
}
else
{
_facetDescriptions.Add(facetDescription);
}
}
///
/// Handler for the Scale element
///
/// xml reader currently positioned at Scale element
private void HandleScaleElement(XmlReader reader)
{
Debug.Assert(reader != null);
ByteFacetDescriptionElement facetDescription = new ByteFacetDescriptionElement(this, DbProviderManifest.ScaleFacetName);
facetDescription.Parse(reader);
_facetDescriptions.Add(facetDescription);
}
///
/// Handler for the MaxLength element
///
/// xml reader currently positioned at MaxLength element
private void HandleMaxLengthElement(XmlReader reader)
{
Debug.Assert(reader != null);
IntegerFacetDescriptionElement facetDescription = new IntegerFacetDescriptionElement(this, DbProviderManifest.MaxLengthFacetName);
facetDescription.Parse(reader);
_facetDescriptions.Add(facetDescription);
}
///
/// Handler for the Unicode element
///
/// xml reader currently positioned at Unicode element
private void HandleUnicodeElement(XmlReader reader)
{
Debug.Assert(reader != null);
BooleanFacetDescriptionElement facetDescription = new BooleanFacetDescriptionElement(this, DbProviderManifest.UnicodeFacetName);
facetDescription.Parse(reader);
_facetDescriptions.Add(facetDescription);
}
///
/// Handler for the FixedLength element
///
/// xml reader currently positioned at FixedLength element
private void HandleFixedLengthElement(XmlReader reader)
{
Debug.Assert(reader != null);
BooleanFacetDescriptionElement facetDescription = new BooleanFacetDescriptionElement(this, DbProviderManifest.FixedLengthFacetName);
facetDescription.Parse(reader);
_facetDescriptions.Add(facetDescription);
}
/////////////////////////////////////////////////////////////////////
// Attribute Handlers
///
/// Handler for the PrimitiveTypeKind attribute
///
/// xml reader currently positioned at Version attribute
private void HandlePrimitiveTypeKindAttribute(XmlReader reader)
{
Debug.Assert(reader != null);
string value = reader.Value;
try
{
_primitiveType.PrimitiveTypeKind = (PrimitiveTypeKind)Enum.Parse(typeof(PrimitiveTypeKind), value);
_primitiveType.BaseType = MetadataItem.EdmProviderManifest.GetPrimitiveType(_primitiveType.PrimitiveTypeKind);
}
catch (ArgumentException)
{
AddError(ErrorCode.InvalidPrimitiveTypeKind, EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.InvalidPrimitiveTypeKind(value));
}
}
public override string Name
{
get
{
return _primitiveType.Name;
}
set
{
_primitiveType.Name = value;
}
}
public PrimitiveType PrimitiveType
{
get
{
return _primitiveType;
}
}
public IEnumerable FacetDescriptions
{
get
{
foreach (FacetDescriptionElement element in _facetDescriptions)
{
yield return element.FacetDescription;
}
}
}
internal override void ResolveTopLevelNames()
{
base.ResolveTopLevelNames();
// Call validate on the facet descriptions
foreach (FacetDescriptionElement facetDescription in _facetDescriptions)
{
try
{
facetDescription.CreateAndValidateFacetDescription(this.Name);
}
catch (ArgumentException e)
{
AddError(ErrorCode.InvalidFacetInProviderManifest,
EdmSchemaErrorSeverity.Error,
e.Message);
}
}
// facet descriptions don't have any names to resolve
}
internal override void Validate()
{
base.Validate();
if (!ValidateSufficientFacets())
{
// the next checks will ---- up, so get out
// if we had errors
return;
}
if (!ValidateInterFacetConsistency())
{
return;
}
}
private bool ValidateInterFacetConsistency()
{
if (PrimitiveType.PrimitiveTypeKind == PrimitiveTypeKind.Decimal)
{
FacetDescription precisionFacetDescription = Helper.GetFacet(FacetDescriptions, EdmProviderManifest.PrecisionFacetName);
FacetDescription scaleFacetDescription = Helper.GetFacet(FacetDescriptions, EdmProviderManifest.ScaleFacetName);
if(precisionFacetDescription.MaxValue.Value < scaleFacetDescription.MaxValue.Value)
{
AddError(ErrorCode.BadPrecisionAndScale,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.BadPrecisionAndScale(
precisionFacetDescription.MaxValue.Value,
scaleFacetDescription.MaxValue.Value));
return false;
}
}
return true;
}
private bool ValidateSufficientFacets()
{
PrimitiveType baseType = _primitiveType.BaseType as PrimitiveType;
// the base type will be an edm type
// the edm type is the athority for which facets are required
if (baseType == null)
{
// an error will already have been added for this
return false;
}
bool addedErrors = false;
foreach (FacetDescription systemFacetDescription in baseType.FacetDescriptions)
{
FacetDescription providerFacetDescription = Helper.GetFacet(FacetDescriptions, systemFacetDescription.FacetName);
if (providerFacetDescription == null)
{
AddError(ErrorCode.RequiredFacetMissing,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.MissingFacetDescription(
PrimitiveType.Name,
PrimitiveType.PrimitiveTypeKind,
systemFacetDescription.FacetName));
addedErrors = true;
}
}
return !addedErrors;
}
}
}
// 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
- LineServicesCallbacks.cs
- WebServiceTypeData.cs
- OleDbPermission.cs
- AuthenticatingEventArgs.cs
- XDRSchema.cs
- ProxyElement.cs
- HyperLinkField.cs
- RoutedEvent.cs
- UnsafeNativeMethods.cs
- ProcessModuleDesigner.cs
- StrongNameMembershipCondition.cs
- ExpressionBindingCollection.cs
- CompensableActivity.cs
- XmlDocumentType.cs
- DataGridViewHeaderCell.cs
- ColumnPropertiesGroup.cs
- RunClient.cs
- StateWorkerRequest.cs
- TreeNodeSelectionProcessor.cs
- ToggleProviderWrapper.cs
- Registry.cs
- SHA512CryptoServiceProvider.cs
- TextStore.cs
- Wizard.cs
- XsdDuration.cs
- MimeFormImporter.cs
- HttpVersion.cs
- ConfigurationLocationCollection.cs
- TextRunTypographyProperties.cs
- LinkLabel.cs
- WebBrowser.cs
- DateTimeUtil.cs
- SelectedDatesCollection.cs
- WebEventTraceProvider.cs
- HandlerWithFactory.cs
- VSWCFServiceContractGenerator.cs
- RegexCompiler.cs
- ZipIOModeEnforcingStream.cs
- QilStrConcat.cs
- ResourceCodeDomSerializer.cs
- TableCellAutomationPeer.cs
- TextElementEditingBehaviorAttribute.cs
- Label.cs
- SafeRightsManagementHandle.cs
- ToolbarAUtomationPeer.cs
- InputProviderSite.cs
- WindowsListViewItemCheckBox.cs
- EmbeddedMailObjectCollectionEditor.cs
- CqlErrorHelper.cs
- DodSequenceMerge.cs
- NumericUpDownAcceleration.cs
- ReflectionPermission.cs
- AuthenticationSection.cs
- PageParserFilter.cs
- DotNetATv1WindowsLogEntryDeserializer.cs
- DecoderReplacementFallback.cs
- PageHandlerFactory.cs
- DbExpressionRules.cs
- NumberSubstitution.cs
- HtmlElementEventArgs.cs
- Msec.cs
- SrgsElement.cs
- WebPartDisplayModeEventArgs.cs
- URLMembershipCondition.cs
- RsaSecurityKey.cs
- XmlDictionaryReaderQuotas.cs
- GridViewPageEventArgs.cs
- Expression.cs
- CircleHotSpot.cs
- LocalizationParserHooks.cs
- MimeReturn.cs
- MessageRpc.cs
- SBCSCodePageEncoding.cs
- PrinterUnitConvert.cs
- XmlSchemaSimpleContent.cs
- ExpressionBuilderContext.cs
- DataServiceStreamResponse.cs
- PriorityQueue.cs
- ClientBuildManagerCallback.cs
- JavascriptXmlWriterWrapper.cs
- ImageList.cs
- QuaternionAnimation.cs
- BuilderPropertyEntry.cs
- CodeObject.cs
- DefaultSection.cs
- ToolStripOverflow.cs
- X509PeerCertificateAuthentication.cs
- DetailsViewCommandEventArgs.cs
- WebContext.cs
- RepeaterDesigner.cs
- SafeSecurityHandles.cs
- Literal.cs
- DataRecordObjectView.cs
- RangeValueProviderWrapper.cs
- CodeDomComponentSerializationService.cs
- TreeNodeStyleCollectionEditor.cs
- RtfControlWordInfo.cs
- HtmlSelectionListAdapter.cs
- ColumnHeader.cs
- CroppedBitmap.cs