* TypeData.cs, TypeTranslator.cs: Implemented some methods.
[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
23                 public XmlTypeMapMemberElement()
24                 {
25                 }
26
27                 public XmlTypeMapElementInfoList ElementInfo
28                 {
29                         get { return _elementInfo; }
30                         set { _elementInfo = value; }
31                 }
32
33                 public string ChoiceMember
34                 {
35                         get { return _choiceMember; }
36                         set { _choiceMember = value; }
37                 }
38
39                 public XmlTypeMapElementInfo FindElement (object ob, object memberValue)
40                 {
41                         if (_elementInfo.Count == 1) 
42                                 return (XmlTypeMapElementInfo) _elementInfo[0];
43                         else if (_choiceMember != null)
44                         {
45                                 string choiceValue = GetValue (ob, _choiceMember).ToString();
46                                 foreach (XmlTypeMapElementInfo elem in _elementInfo)
47                                         if (elem.ChoiceValue == choiceValue) return elem;
48                         }
49                         else
50                         {
51                                 Type type = memberValue.GetType();
52                                 foreach (XmlTypeMapElementInfo elem in _elementInfo)
53                                         if (elem.TypeData.Type == type) return elem;
54                         }
55                         return null;
56                 }
57         }
58
59         // XmlTypeMapMemberList
60         // A member of a class that must be serialized as a list
61
62         internal class XmlTypeMapMemberList : XmlTypeMapMemberElement
63         {
64                 XmlTypeMapping _listMap;
65                 string _elementName;
66                 string _namespace;
67
68                 public XmlTypeMapping ListTypeMapping
69                 {
70                         get { return _listMap; }
71                         set { _listMap = value; }
72                 }
73
74                 public string ElementName
75                 {
76                         get { return _elementName; }
77                         set { _elementName = value; }
78                 }
79
80                 public string Namespace
81                 {
82                         get { return _namespace; }
83                         set { _namespace = value; }
84                 }
85         }
86
87         // XmlTypeMapMemberFlatList
88         // A member of a class that must be serialized as a flat list
89
90         internal class XmlTypeMapMemberFlatList : XmlTypeMapMemberElement
91         {
92                 ListMap _listMap;
93                 int _flatArrayIndex;
94
95                 public ListMap ListMap
96                 {
97                         get { return _listMap; }
98                         set { _listMap = value; }
99                 }
100
101                 public int FlatArrayIndex
102                 {
103                         get { return _flatArrayIndex; }
104                         set { _flatArrayIndex = value; }
105                 }
106         }
107 }