* XmlSchemaImporter.cs: Implemented ImportTypeMapping and all needed parsing
[mono.git] / mcs / class / System.XML / System.Xml.Serialization / XmlTypeMapMemberElement.cs
1 //
2 // XmlTypeMapMemberElement.cs: 
3 //
4 // Author:
5 //   Lluis Sanchez Gual (lluis@ximian.com)
6 //
7 // (C) 2002, 2003 Ximian, Inc.  http://www.ximian.com
8 //
9
10 using System;
11 using System.Collections;
12
13 namespace System.Xml.Serialization
14 {
15         // XmlTypeMapMemberElement
16         // A member of a class that must be serialized as an XmlElement
17
18         internal class XmlTypeMapMemberElement: XmlTypeMapMember
19         {
20                 XmlTypeMapElementInfoList _elementInfo;
21                 string _choiceMember;
22                 bool _isTextCollector;
23
24                 public XmlTypeMapMemberElement()
25                 {
26                 }
27
28                 public XmlTypeMapElementInfoList ElementInfo
29                 {
30                         get
31                         {
32                                 if (_elementInfo == null) _elementInfo = new XmlTypeMapElementInfoList ();
33                                 return _elementInfo;
34                         }
35                         set { _elementInfo = value; }
36                 }
37
38                 public string ChoiceMember
39                 {
40                         get { return _choiceMember; }
41                         set { _choiceMember = value; }
42                 }
43
44                 public XmlTypeMapElementInfo FindElement (object ob, object memberValue)
45                 {
46                         if (_elementInfo.Count == 1) 
47                                 return (XmlTypeMapElementInfo) _elementInfo[0];
48                         else if (_choiceMember != null)
49                         {
50                                 string choiceValue = GetValue (ob, _choiceMember).ToString();
51                                 foreach (XmlTypeMapElementInfo elem in _elementInfo)
52                                         if (elem.ChoiceValue == choiceValue) return elem;
53                         }
54                         else
55                         {
56                                 if (memberValue == null)
57                                         return (XmlTypeMapElementInfo) _elementInfo[0];
58                                 Type type = memberValue.GetType();
59                                 foreach (XmlTypeMapElementInfo elem in _elementInfo)
60                                         if (elem.TypeData.Type == type) return elem;
61                         }
62                         return null;
63                 }
64
65                 public bool IsXmlTextCollector
66                 {
67                         get { return _isTextCollector; }
68                         set { _isTextCollector = value; }
69                 }
70         }
71
72         // XmlTypeMapMemberList
73         // A member of a class that must be serialized as a list
74
75         internal class XmlTypeMapMemberList : XmlTypeMapMemberElement
76         {
77                 public XmlTypeMapping ListTypeMapping
78                 {
79                         get { return ((XmlTypeMapElementInfo) ElementInfo[0]).MappedType; }
80                 }
81
82                 public string ElementName
83                 {
84                         get { return ((XmlTypeMapElementInfo) ElementInfo[0]).ElementName; }
85                 }
86
87                 public string Namespace
88                 {
89                         get { return ((XmlTypeMapElementInfo) ElementInfo[0]).Namespace; }
90                 }
91         }
92
93         // XmlTypeMapMemberFlatList
94         // A member of a class that must be serialized as a flat list
95
96         internal class XmlTypeMapMemberExpandable : XmlTypeMapMemberElement
97         {
98                 int _flatArrayIndex;
99
100                 public int FlatArrayIndex
101                 {
102                         get { return _flatArrayIndex; }
103                         set { _flatArrayIndex = value; }
104                 }
105         }
106
107         internal class XmlTypeMapMemberFlatList : XmlTypeMapMemberExpandable
108         {
109                 ListMap _listMap;
110
111                 public ListMap ListMap
112                 {
113                         get { return _listMap; }
114                         set { _listMap = value; }
115                 }
116         }
117
118         internal class XmlTypeMapMemberAnyElement : XmlTypeMapMemberExpandable
119         {
120                 public bool IsElementDefined (string name, string ns)
121                 {
122                         foreach (XmlTypeMapElementInfo elem in ElementInfo)
123                         {
124                                 if (elem.ElementName == "")             // Default AnyElementAttribute
125                                         return true;
126
127                                 if (elem.ElementName == name && elem.Namespace == ns)
128                                         return true;
129                         }
130                         return false;
131                 }
132
133                 public bool IsDefaultAny
134                 {
135                         get
136                         {
137                                 foreach (XmlTypeMapElementInfo elem in ElementInfo)
138                                 {
139                                         if (elem.IsUnnamedAnyElement) 
140                                                 return true;
141                                 }
142                                 return false;
143                         }
144                 }
145         }
146
147         internal class XmlTypeMapMemberAnyAttribute: XmlTypeMapMember
148         {
149         }
150 }