2003-08-02 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaParticle.cs
1 // Author: Dwivedi, Ajay kumar\r
2 //            Adwiv@Yahoo.com\r
3 using System;\r
4 using System.Xml.Serialization;\r
5 \r
6 namespace System.Xml.Schema\r
7 {\r
8         /// <summary>\r
9         /// Summary description for XmlSchemaParticle.\r
10         /// </summary>\r
11         public abstract class XmlSchemaParticle : XmlSchemaAnnotated\r
12         {\r
13                 decimal minOccurs, maxOccurs;\r
14                 string  minstr, maxstr;\r
15                 static XmlSchemaParticle empty;\r
16 \r
17                 internal static XmlSchemaParticle Empty {\r
18                         get {\r
19                                 if (empty == null) {\r
20                                         empty = new XmlSchemaParticleEmpty ();\r
21                                 }\r
22                                 return empty;\r
23                         }\r
24                 }\r
25 \r
26                 protected XmlSchemaParticle()\r
27                 {\r
28                         minOccurs = decimal.One;\r
29                         maxOccurs = decimal.One;\r
30                 }\r
31 \r
32                 #region Attributes\r
33 \r
34                 [System.Xml.Serialization.XmlAttribute("minOccurs")]\r
35                 public string MinOccursString\r
36                 {\r
37                         get{ return minstr; }\r
38                         set\r
39                         {\r
40                                 decimal val = decimal.Parse(value);\r
41                                 if(val >= 0 && (val == Decimal.Truncate(val)))\r
42                                 {\r
43                                         minOccurs = val;\r
44                                         minstr   = val.ToString();\r
45                                 }\r
46                                 else\r
47                                 {\r
48                                         throw new XmlSchemaException\r
49                                                 ("MinOccursString must be a non-negative number",null);                                         \r
50                                 }\r
51                         }\r
52                 }\r
53 \r
54                 [System.Xml.Serialization.XmlAttribute("maxOccurs")]\r
55                 public string MaxOccursString\r
56                 {\r
57                         get{ return maxstr; }\r
58                         set\r
59                         {\r
60                                 if(value == "unbounded")\r
61                                 {\r
62                                         maxstr = value;\r
63                                         maxOccurs = decimal.MaxValue;\r
64                                 }\r
65                                 else\r
66                                 {\r
67                                         decimal val = decimal.Parse(value);\r
68                                         if(val >= 0 && (val == Decimal.Truncate(val)))\r
69                                         {\r
70                                                 maxOccurs = val;\r
71                                                 maxstr = val.ToString();\r
72                                         }\r
73                                         else\r
74                                         {\r
75                                                 throw new XmlSchemaException\r
76                                                         ("MaxOccurs must be a non-negative integer",null);\r
77                                         }\r
78                                 }\r
79                         }\r
80                 }\r
81 \r
82                 #endregion\r
83 \r
84                 #region XmlIgnore\r
85 \r
86                 [XmlIgnore]\r
87                 public decimal MinOccurs\r
88                 {\r
89                         get{ return  minOccurs; }\r
90                         set\r
91                         {\r
92                                 MinOccursString = value.ToString();\r
93                         }\r
94                 }\r
95 \r
96                 [XmlIgnore]\r
97                 public decimal MaxOccurs \r
98                 {\r
99                         get{ return  maxOccurs; } \r
100                         set\r
101                         {\r
102                                 MaxOccursString = value.ToString();\r
103                         }\r
104                 }\r
105 \r
106                 #endregion\r
107 \r
108                 #region Internal Class\r
109                 public class XmlSchemaParticleEmpty : XmlSchemaParticle\r
110                 {\r
111                         internal XmlSchemaParticleEmpty ()\r
112                         {\r
113                         }\r
114                 }\r
115                 #endregion\r
116         }\r
117 }