Update Reference Sources to .NET Framework 4.6.1
[mono.git] / mcs / class / referencesource / System.Data.Entity / System / Data / EntityModel / SchemaObjectModel / SchemaEnumMember.cs
1 //---------------------------------------------------------------------
2 // <copyright file="SchemaEnumMember.cs" company="Microsoft">
3 //      Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 //
6 // @owner  [....]
7 // @backupOwner [....]
8 //---------------------------------------------------------------------
9
10 using System.Data.Metadata.Edm;
11 using System.Diagnostics;
12 using System.Globalization;
13 using System.Xml;
14
15 namespace System.Data.EntityModel.SchemaObjectModel
16 {
17     /// <summary>
18     /// Represents enum Member element from the CSDL.
19     /// </summary>
20     internal class SchemaEnumMember : SchemaElement
21     {
22         /// <summary>
23         /// Value for this member.
24         /// </summary>
25         long? _value;
26
27         /// <summary>
28         /// Initializes a new instance of the <see cref="SchemaEnumMember"/> class.
29         /// </summary>
30         /// <param name="parentElement">
31         /// Parent element.
32         /// </param>
33         public SchemaEnumMember(SchemaElement parentElement)
34             : base(parentElement)
35         { }
36
37         /// <summary>
38         /// Gets the value of this enum member. Possibly null if not specified in the CSDL.
39         /// </summary>
40         public long? Value
41         {
42             get 
43             {
44                 return _value;
45             }
46
47             set
48             {
49                 Debug.Assert(value != null, "value != null");
50
51                 _value = value;
52             }
53         }
54
55         /// <summary>
56         /// Generic handler for the Member element attributes
57         /// </summary>
58         /// <param name="reader">Xml reader positioned on an attribute.</param>
59         /// <c>true</c> if the attribute is a known attribute and was handled. Otherwise <c>false</c>
60         protected override bool HandleAttribute(XmlReader reader)
61         {
62             Debug.Assert(reader != null, "reader != null");
63
64             bool handled = base.HandleAttribute(reader);
65             if (!handled && (handled = CanHandleAttribute(reader, XmlConstants.Value)))
66             {
67                 HandleValueAttribute(reader);
68             }
69             
70             return handled;
71         }
72
73         /// <summary>
74         /// Handler for the Member Value attribute.
75         /// </summary>
76         /// <param name="reader">XmlReader positioned on the Member Value attribute.</param>
77         private void HandleValueAttribute(XmlReader reader)
78         {
79             Debug.Assert(reader != null, "reader != null");
80
81             // xsd validation will report an error if the value is not a valid xs:long number. If the number is valid
82             // xs:long number then long.TryParse will succeed.
83             long tmpValue;
84             if (long.TryParse(reader.Value, NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out tmpValue))
85             {
86                 _value = tmpValue;
87             }
88         }
89     }
90 }