-// \r
-// System.Xml.Serialization.XmlCodeExporter \r
-//\r
-// Author:\r
-// Tim Coleman (tim@timcoleman.com)\r
-// Lluis Sanchez Gual (lluis@ximian.com)\r
-//\r
-// Copyright (C) Tim Coleman, 2002\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-using System.CodeDom;\r
-using System.Collections;\r
-using System.Xml.Schema;\r
-using System.CodeDom.Compiler;\r
-\r
-namespace System.Xml.Serialization \r
-{\r
-\r
- public class XmlCodeExporter \r
-#if NET_2_0\r
- : CodeExporter\r
-#endif\r
- {\r
- #region Fields\r
-\r
-#if NET_2_0\r
- CodeGenerationOptions options;\r
-#else\r
- XmlMapCodeGenerator codeGenerator;\r
-#endif\r
-\r
- #endregion\r
-\r
- #region Constructors\r
-\r
- public XmlCodeExporter (CodeNamespace codeNamespace): this (codeNamespace, null)\r
- {\r
- }\r
-\r
- public XmlCodeExporter (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit)\r
- {\r
-#if NET_2_0\r
- codeGenerator = new XmlMapCodeGenerator (codeNamespace, codeCompileUnit, CodeGenerationOptions.GenerateProperties);\r
-#else\r
- codeGenerator = new XmlMapCodeGenerator (codeNamespace, codeCompileUnit, CodeGenerationOptions.None);\r
-#endif\r
- }\r
-\r
-#if NET_2_0\r
- public XmlCodeExporter (CodeNamespace codeNamespace, \r
- CodeCompileUnit codeCompileUnit, \r
- CodeGenerationOptions options)\r
- : this (codeNamespace, codeCompileUnit, null, options, null)\r
- {\r
- }\r
- \r
- public XmlCodeExporter (CodeNamespace codeNamespace, \r
- CodeCompileUnit codeCompileUnit, \r
- CodeGenerationOptions options, \r
- Hashtable mappings)\r
- : this (codeNamespace, codeCompileUnit, null, options, mappings)\r
- {\r
- \r
- }\r
- \r
- [MonoTODO ("mappings?")]\r
- public XmlCodeExporter (CodeNamespace codeNamespace, \r
- CodeCompileUnit codeCompileUnit, \r
- CodeDomProvider codeProvider, \r
- CodeGenerationOptions options, \r
- Hashtable mappings)\r
- {\r
- codeGenerator = new XmlMapCodeGenerator (codeNamespace, codeCompileUnit, codeProvider, options, mappings);\r
- }\r
-#endif\r
-\r
- #endregion // Constructors\r
-\r
- #region Properties\r
-\r
-#if !NET_2_0\r
- public CodeAttributeDeclarationCollection IncludeMetadata {\r
- get { return codeGenerator.IncludeMetadata; }\r
- }\r
-#endif\r
-\r
- #endregion Properties\r
-\r
- #region Methods\r
-\r
- public void AddMappingMetadata (CodeAttributeDeclarationCollection metadata, XmlMemberMapping member, string ns)\r
- {\r
- AddMappingMetadata (metadata, member, ns, false);\r
- }\r
-\r
- public void AddMappingMetadata (CodeAttributeDeclarationCollection metadata, XmlTypeMapping member, string ns)\r
- {\r
- if ( (member.TypeData.SchemaType == SchemaTypes.Primitive ||\r
- member.TypeData.SchemaType == SchemaTypes.Array) \r
- && member.Namespace != XmlSchema.Namespace)\r
- {\r
- CodeAttributeDeclaration ratt = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlRoot");\r
- ratt.Arguments.Add (MapCodeGenerator.GetArg (member.ElementName));\r
- ratt.Arguments.Add (MapCodeGenerator.GetArg ("Namespace", member.Namespace));\r
- ratt.Arguments.Add (MapCodeGenerator.GetArg ("IsNullable", member.IsNullable));\r
- metadata.Add (ratt);\r
- }\r
- }\r
-\r
- public void AddMappingMetadata (CodeAttributeDeclarationCollection metadata, XmlMemberMapping member, string ns, bool forceUseMemberName)\r
- {\r
- CodeAttributeDeclaration att;\r
- TypeData memType = member.TypeMapMember.TypeData;\r
- \r
- if (member.Any)\r
- {\r
- XmlTypeMapElementInfoList list = (XmlTypeMapElementInfoList)((XmlTypeMapMemberElement)member.TypeMapMember).ElementInfo;\r
- foreach (XmlTypeMapElementInfo info in list)\r
- {\r
- if (info.IsTextElement)\r
- metadata.Add (new CodeAttributeDeclaration ("System.Xml.Serialization.XmlText"));\r
- else {\r
- att = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlAnyElement");\r
- if (!info.IsUnnamedAnyElement) {\r
- att.Arguments.Add (MapCodeGenerator.GetArg ("Name", info.ElementName));\r
- if (info.Namespace != ns) att.Arguments.Add (MapCodeGenerator.GetArg ("Namespace", member.Namespace));\r
- }\r
- metadata.Add (att);\r
- }\r
- }\r
- }\r
- else if (member.TypeMapMember is XmlTypeMapMemberList)\r
- {\r
- // Array parameter\r
- XmlTypeMapMemberList list = member.TypeMapMember as XmlTypeMapMemberList;\r
- ListMap listMap = (ListMap) list.ListTypeMapping.ObjectMap;\r
- \r
- codeGenerator.AddArrayAttributes (metadata, list, ns, forceUseMemberName);\r
- codeGenerator.AddArrayItemAttributes (metadata, listMap, memType.ListItemTypeData, list.Namespace, 0);\r
- }\r
- else if (member.TypeMapMember is XmlTypeMapMemberElement) {\r
- codeGenerator.AddElementMemberAttributes ((XmlTypeMapMemberElement) member.TypeMapMember, ns, metadata, forceUseMemberName);\r
- }\r
- else if (member.TypeMapMember is XmlTypeMapMemberAttribute) {\r
- codeGenerator.AddAttributeMemberAttributes ((XmlTypeMapMemberAttribute) member.TypeMapMember, ns, metadata, forceUseMemberName);\r
- }\r
- else\r
- throw new NotSupportedException ("Schema type not supported");\r
- }\r
-\r
- public void ExportMembersMapping (XmlMembersMapping xmlMembersMapping)\r
- {\r
- codeGenerator.ExportMembersMapping (xmlMembersMapping);\r
- }\r
-\r
- public void ExportTypeMapping (XmlTypeMapping xmlTypeMapping)\r
- {\r
- codeGenerator.ExportTypeMapping (xmlTypeMapping, true);\r
- }\r
-\r
- #endregion // Methods\r
- }\r
- \r
- class XmlMapCodeGenerator : MapCodeGenerator\r
- {\r
- public XmlMapCodeGenerator (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit, CodeGenerationOptions options)\r
- : base (codeNamespace, codeCompileUnit, options)\r
- {\r
- }\r
-\r
- public XmlMapCodeGenerator (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit, CodeDomProvider codeProvider, CodeGenerationOptions options, Hashtable mappings)\r
- : base (codeNamespace, codeCompileUnit, codeProvider, options, mappings)\r
- {\r
- }\r
- \r
- protected override void GenerateClass (XmlTypeMapping map, CodeTypeDeclaration codeClass, bool isTopLevel)\r
- {\r
- CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlTypeAttribute");\r
- if (map.XmlType != map.TypeData.TypeName) att.Arguments.Add (GetArg (map.XmlType));\r
- if (map.XmlTypeNamespace != "") att.Arguments.Add (GetArg ("Namespace", map.XmlTypeNamespace));\r
- if (!map.IncludeInSchema) att.Arguments.Add (GetArg ("IncludeInSchema", false));\r
- AddCustomAttribute (codeClass, att, false);\r
-\r
- CodeAttributeDeclaration ratt = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlRootAttribute");\r
- if (map.ElementName != map.XmlType) ratt.Arguments.Add (GetArg (map.ElementName));\r
- if (isTopLevel) {\r
- ratt.Arguments.Add (GetArg ("Namespace", map.Namespace));\r
- ratt.Arguments.Add (GetArg ("IsNullable", map.IsNullable));\r
- } else {\r
- if (map.Namespace != "") \r
- ratt.Arguments.Add (GetArg ("Namespace", map.Namespace));\r
- }\r
- AddCustomAttribute (codeClass, ratt, isTopLevel);\r
- }\r
- \r
- protected override void GenerateClassInclude (CodeAttributeDeclarationCollection attributes, XmlTypeMapping map)\r
- {\r
- CodeAttributeDeclaration iatt = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlIncludeAttribute");\r
- iatt.Arguments.Add (new CodeAttributeArgument (new CodeTypeOfExpression(map.TypeData.FullTypeName)));\r
- attributes.Add (iatt);\r
- }\r
- \r
- protected override void GenerateAnyAttribute (CodeTypeMember codeField)\r
- {\r
- AddCustomAttribute (codeField, "System.Xml.Serialization.XmlAnyAttribute");\r
- }\r
- \r
- protected override void GenerateAttributeMember (CodeAttributeDeclarationCollection attributes, XmlTypeMapMemberAttribute attinfo, string defaultNamespace, bool forceUseMemberName)\r
- {\r
- CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlAttributeAttribute");\r
- if (forceUseMemberName || attinfo.Name != attinfo.AttributeName) att.Arguments.Add (GetArg (attinfo.AttributeName));\r
- if (attinfo.Namespace != defaultNamespace) att.Arguments.Add (GetArg ("Namespace", attinfo.Namespace));\r
- if (attinfo.Form == XmlSchemaForm.Qualified) att.Arguments.Add (GetEnumArg ("Form","System.Xml.Schema.XmlSchemaForm",attinfo.Form.ToString()));\r
- if (!TypeTranslator.IsDefaultPrimitiveTpeData(attinfo.TypeData)) att.Arguments.Add (GetArg ("DataType",attinfo.TypeData.XmlType));\r
- attributes.Add (att);\r
- \r
- if (attinfo.Ignore)\r
- attributes.Add (new CodeAttributeDeclaration ("System.Xml.Serialization.XmlIgnoreAttribute"));\r
- }\r
- \r
- protected override void GenerateElementInfoMember (CodeAttributeDeclarationCollection attributes, XmlTypeMapMemberElement member, XmlTypeMapElementInfo einfo, TypeData defaultType, string defaultNamespace, bool addAlwaysAttr, bool forceUseMemberName)\r
- {\r
- CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlElementAttribute");\r
- if (forceUseMemberName || einfo.ElementName != member.Name) att.Arguments.Add (GetArg (einfo.ElementName));\r
- if (einfo.TypeData.FullTypeName != defaultType.FullTypeName) att.Arguments.Add (GetTypeArg ("Type", einfo.TypeData.FullTypeName));\r
- if (einfo.Namespace != defaultNamespace) att.Arguments.Add (GetArg ("Namespace", einfo.Namespace));\r
- if (einfo.Form == XmlSchemaForm.Unqualified) att.Arguments.Add (GetEnumArg ("Form", "System.Xml.Schema.XmlSchemaForm", einfo.Form.ToString()));\r
- if (einfo.IsNullable) att.Arguments.Add (GetArg ("IsNullable", true));\r
- if (!TypeTranslator.IsDefaultPrimitiveTpeData(einfo.TypeData)) att.Arguments.Add (GetArg ("DataType",einfo.TypeData.XmlType));\r
- if (addAlwaysAttr || att.Arguments.Count > 0) attributes.Add (att);\r
- }\r
- \r
- protected override void GenerateElementMember (CodeAttributeDeclarationCollection attributes, XmlTypeMapMemberElement member)\r
- {\r
- if (member.ChoiceMember != null) {\r
- CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlChoiceIdentifier");\r
- att.Arguments.Add (GetArg(member.ChoiceMember));\r
- attributes.Add (att);\r
- }\r
-\r
- if (member.Ignore)\r
- attributes.Add (new CodeAttributeDeclaration ("System.Xml.Serialization.XmlIgnoreAttribute"));\r
- }\r
- \r
- protected override void GenerateArrayElement (CodeAttributeDeclarationCollection attributes, XmlTypeMapMemberElement member, string defaultNamespace, bool forceUseMemberName)\r
- {\r
- XmlTypeMapElementInfo einfo = (XmlTypeMapElementInfo) member.ElementInfo[0];\r
- CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlArray");\r
- if (forceUseMemberName || (einfo.ElementName != member.Name)) att.Arguments.Add (GetArg ("ElementName", einfo.ElementName));\r
- if (einfo.Namespace != defaultNamespace) att.Arguments.Add (GetArg ("Namespace", einfo.Namespace));\r
- if (einfo.Form == XmlSchemaForm.Unqualified) att.Arguments.Add (MapCodeGenerator.GetEnumArg ("Form", "System.Xml.Schema.XmlSchemaForm", einfo.Form.ToString()));\r
- if (einfo.IsNullable) att.Arguments.Add (GetArg ("IsNullable", true));\r
- if (att.Arguments.Count > 0) attributes.Add (att);\r
- }\r
- \r
- protected override void GenerateArrayItemAttributes (CodeAttributeDeclarationCollection attributes, ListMap listMap, TypeData type, XmlTypeMapElementInfo ainfo, string defaultName, string defaultNamespace, int nestingLevel)\r
- {\r
- bool needsType = (listMap.ItemInfo.Count > 1) ||\r
- (ainfo.TypeData.FullTypeName != type.FullTypeName && !listMap.IsMultiArray);\r
-\r
- CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlArrayItem");\r
- if (ainfo.ElementName != defaultName) att.Arguments.Add (GetArg ("ElementName", ainfo.ElementName));\r
- if (ainfo.Namespace != defaultNamespace && ainfo.Namespace != XmlSchema.Namespace) att.Arguments.Add (GetArg ("Namespace", ainfo.Namespace));\r
- if (needsType) att.Arguments.Add (GetTypeArg ("Type", ainfo.TypeData.FullTypeName));\r
- if (!ainfo.IsNullable) att.Arguments.Add (GetArg ("IsNullable", false));\r
- if (ainfo.Form == XmlSchemaForm.Unqualified) att.Arguments.Add (MapCodeGenerator.GetEnumArg ("Form", "System.Xml.Schema.XmlSchemaForm", ainfo.Form.ToString()));\r
- if (att.Arguments.Count > 0 && nestingLevel > 0) att.Arguments.Add (GetArg ("NestingLevel", nestingLevel));\r
- \r
- if (att.Arguments.Count > 0) attributes.Add (att);\r
- }\r
-\r
- protected override void GenerateTextElementAttribute (CodeAttributeDeclarationCollection attributes, XmlTypeMapElementInfo einfo, TypeData defaultType)\r
- {\r
- CodeAttributeDeclaration uatt = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlTextAttribute");\r
- if (einfo.TypeData.FullTypeName != defaultType.FullTypeName) uatt.Arguments.Add (GetTypeArg ("Type", einfo.TypeData.FullTypeName));\r
- attributes.Add (uatt);\r
- }\r
- \r
- protected override void GenerateUnnamedAnyElementAttribute (CodeAttributeDeclarationCollection attributes, XmlTypeMapElementInfo einfo, string defaultNamespace)\r
- {\r
- CodeAttributeDeclaration uatt = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlAnyElement");\r
- if (!einfo.IsUnnamedAnyElement) uatt.Arguments.Add (GetArg ("Name", einfo.ElementName));\r
- if (einfo.Namespace != defaultNamespace) uatt.Arguments.Add (GetArg ("Namespace", einfo.Namespace));\r
- attributes.Add (uatt);\r
- }\r
-\r
- protected override void GenerateEnum (XmlTypeMapping map, CodeTypeDeclaration codeEnum, bool isTopLevel)\r
- {\r
- GenerateClass (map, codeEnum, isTopLevel);\r
- }\r
- \r
- protected override void GenerateEnumItem (CodeMemberField codeField, EnumMap.EnumMapMember emem)\r
- {\r
- if (emem.EnumName != emem.XmlName)\r
- {\r
- CodeAttributeDeclaration xatt = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlEnumAttribute");\r
- xatt.Arguments.Add (GetArg (emem.XmlName));\r
-\r
- AddCustomAttribute (codeField, xatt, true);\r
- }\r
- }\r
- \r
- protected override void GenerateSpecifierMember (CodeTypeMember codeField)\r
- {\r
- AddCustomAttribute (codeField, "System.Xml.Serialization.XmlIgnore");\r
- }\r
-\r
- }\r
-}\r
+//
+// System.Xml.Serialization.XmlCodeExporter
+//
+// Author:
+// Tim Coleman (tim@timcoleman.com)
+// Lluis Sanchez Gual (lluis@ximian.com)
+//
+// Copyright (C) Tim Coleman, 2002
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.CodeDom;
+using System.Collections;
+using System.Xml.Schema;
+using System.CodeDom.Compiler;
+
+namespace System.Xml.Serialization
+{
+
+ public class XmlCodeExporter
+ : CodeExporter
+ {
+ #region Fields
+
+ // CodeGenerationOptions options;
+
+ #endregion
+
+ #region Constructors
+
+ public XmlCodeExporter (CodeNamespace codeNamespace): this (codeNamespace, null)
+ {
+ }
+
+ public XmlCodeExporter (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit)
+ {
+ codeGenerator = new XmlMapCodeGenerator (codeNamespace, codeCompileUnit, CodeGenerationOptions.GenerateProperties);
+ }
+
+ public XmlCodeExporter (CodeNamespace codeNamespace,
+ CodeCompileUnit codeCompileUnit,
+ CodeGenerationOptions options)
+ : this (codeNamespace, codeCompileUnit, null, options, null)
+ {
+ }
+
+ public XmlCodeExporter (CodeNamespace codeNamespace,
+ CodeCompileUnit codeCompileUnit,
+ CodeGenerationOptions options,
+ Hashtable mappings)
+ : this (codeNamespace, codeCompileUnit, null, options, mappings)
+ {
+
+ }
+
+ [MonoTODO]// FIXME: mappings?
+ public XmlCodeExporter (CodeNamespace codeNamespace,
+ CodeCompileUnit codeCompileUnit,
+ CodeDomProvider codeProvider,
+ CodeGenerationOptions options,
+ Hashtable mappings)
+ {
+ codeGenerator = new XmlMapCodeGenerator (codeNamespace, codeCompileUnit, codeProvider, options, mappings);
+ }
+
+ #endregion // Constructors
+
+ #region Properties
+
+
+ #endregion Properties
+
+ #region Methods
+
+ public void AddMappingMetadata (CodeAttributeDeclarationCollection metadata, XmlMemberMapping member, string ns)
+ {
+ AddMappingMetadata (metadata, member, ns, false);
+ }
+
+ public void AddMappingMetadata (CodeAttributeDeclarationCollection metadata, XmlTypeMapping mapping, string ns)
+ {
+ if ( (mapping.TypeData.SchemaType == SchemaTypes.Primitive ||
+ mapping.TypeData.SchemaType == SchemaTypes.Array)
+ && mapping.Namespace != XmlSchema.Namespace)
+ {
+ CodeAttributeDeclaration ratt = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlRoot");
+ ratt.Arguments.Add (MapCodeGenerator.GetArg (mapping.ElementName));
+ ratt.Arguments.Add (MapCodeGenerator.GetArg ("Namespace", mapping.Namespace));
+ ratt.Arguments.Add (MapCodeGenerator.GetArg ("IsNullable", mapping.IsNullable));
+ metadata.Add (ratt);
+ }
+ }
+
+ public void AddMappingMetadata (CodeAttributeDeclarationCollection metadata, XmlMemberMapping member, string ns, bool forceUseMemberName)
+ {
+ CodeAttributeDeclaration att;
+ TypeData memType = member.TypeMapMember.TypeData;
+
+ if (member.Any)
+ {
+ XmlTypeMapElementInfoList list = (XmlTypeMapElementInfoList)((XmlTypeMapMemberElement)member.TypeMapMember).ElementInfo;
+ foreach (XmlTypeMapElementInfo info in list)
+ {
+ if (info.IsTextElement)
+ metadata.Add (new CodeAttributeDeclaration ("System.Xml.Serialization.XmlText"));
+ else {
+ att = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlAnyElement");
+ if (!info.IsUnnamedAnyElement) {
+ att.Arguments.Add (MapCodeGenerator.GetArg ("Name", info.ElementName));
+ if (info.Namespace != ns) att.Arguments.Add (MapCodeGenerator.GetArg ("Namespace", member.Namespace));
+ }
+ metadata.Add (att);
+ }
+ }
+ }
+ else if (member.TypeMapMember is XmlTypeMapMemberList)
+ {
+ // Array parameter
+ XmlTypeMapMemberList list = member.TypeMapMember as XmlTypeMapMemberList;
+ ListMap listMap = (ListMap) list.ListTypeMapping.ObjectMap;
+
+ codeGenerator.AddArrayAttributes (metadata, list, ns, forceUseMemberName);
+ codeGenerator.AddArrayItemAttributes (metadata, listMap, memType.ListItemTypeData, list.Namespace, 0);
+ }
+ else if (member.TypeMapMember is XmlTypeMapMemberElement) {
+ codeGenerator.AddElementMemberAttributes ((XmlTypeMapMemberElement) member.TypeMapMember, ns, metadata, forceUseMemberName);
+ }
+ else if (member.TypeMapMember is XmlTypeMapMemberAttribute) {
+ codeGenerator.AddAttributeMemberAttributes ((XmlTypeMapMemberAttribute) member.TypeMapMember, ns, metadata, forceUseMemberName);
+ }
+ else
+ throw new NotSupportedException ("Schema type not supported");
+ }
+
+ public void ExportMembersMapping (XmlMembersMapping xmlMembersMapping)
+ {
+ codeGenerator.ExportMembersMapping (xmlMembersMapping);
+ }
+
+ public void ExportTypeMapping (XmlTypeMapping xmlTypeMapping)
+ {
+ codeGenerator.ExportTypeMapping (xmlTypeMapping, true);
+ }
+
+ #endregion // Methods
+ }
+
+ class XmlMapCodeGenerator : MapCodeGenerator
+ {
+ public XmlMapCodeGenerator (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit, CodeGenerationOptions options)
+ : base (codeNamespace, codeCompileUnit, options)
+ {
+ }
+
+ public XmlMapCodeGenerator (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit, CodeDomProvider codeProvider, CodeGenerationOptions options, Hashtable mappings)
+ : base (codeNamespace, codeCompileUnit, codeProvider, options, mappings)
+ {
+ }
+
+ protected override void GenerateClass (XmlTypeMapping map, CodeTypeDeclaration codeClass, bool isTopLevel)
+ {
+ CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlTypeAttribute");
+ if (map.XmlType != map.TypeData.TypeName) att.Arguments.Add (GetArg (map.XmlType));
+ if (map.XmlTypeNamespace != "") att.Arguments.Add (GetArg ("Namespace", map.XmlTypeNamespace));
+ if (!map.IncludeInSchema) att.Arguments.Add (GetArg ("IncludeInSchema", false));
+ AddCustomAttribute (codeClass, att, false);
+
+ CodeAttributeDeclaration ratt = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlRootAttribute");
+ if (map.ElementName != map.XmlType) ratt.Arguments.Add (GetArg (map.ElementName));
+ if (isTopLevel) {
+ ratt.Arguments.Add (GetArg ("Namespace", map.Namespace));
+ ratt.Arguments.Add (GetArg ("IsNullable", map.IsNullable));
+ } else {
+ if (map.Namespace != "")
+ ratt.Arguments.Add (GetArg ("Namespace", map.Namespace));
+ }
+ AddCustomAttribute (codeClass, ratt, isTopLevel);
+ }
+
+ protected override void GenerateClassInclude (CodeAttributeDeclarationCollection attributes, XmlTypeMapping map)
+ {
+ CodeAttributeDeclaration iatt = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlIncludeAttribute");
+ iatt.Arguments.Add (new CodeAttributeArgument (new CodeTypeOfExpression(map.TypeData.FullTypeName)));
+ attributes.Add (iatt);
+ }
+
+ protected override void GenerateAnyAttribute (CodeTypeMember codeField)
+ {
+ AddCustomAttribute (codeField, "System.Xml.Serialization.XmlAnyAttribute");
+ }
+
+ protected override void GenerateAttributeMember (CodeAttributeDeclarationCollection attributes, XmlTypeMapMemberAttribute attinfo, string defaultNamespace, bool forceUseMemberName)
+ {
+ CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlAttributeAttribute");
+ if (forceUseMemberName || attinfo.Name != attinfo.AttributeName) att.Arguments.Add (GetArg (attinfo.AttributeName));
+ if (attinfo.Namespace != defaultNamespace) att.Arguments.Add (GetArg ("Namespace", attinfo.Namespace));
+ if (attinfo.Form == XmlSchemaForm.Qualified) att.Arguments.Add (GetEnumArg ("Form","System.Xml.Schema.XmlSchemaForm",attinfo.Form.ToString()));
+ if (!TypeTranslator.IsDefaultPrimitiveTpeData(attinfo.TypeData)) att.Arguments.Add (GetArg ("DataType",attinfo.TypeData.XmlType));
+ attributes.Add (att);
+
+ if (attinfo.Ignore)
+ attributes.Add (new CodeAttributeDeclaration ("System.Xml.Serialization.XmlIgnoreAttribute"));
+ }
+
+ protected override void GenerateElementInfoMember (CodeAttributeDeclarationCollection attributes, XmlTypeMapMemberElement member, XmlTypeMapElementInfo einfo, TypeData defaultType, string defaultNamespace, bool addAlwaysAttr, bool forceUseMemberName)
+ {
+ CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlElementAttribute");
+ if (forceUseMemberName || einfo.ElementName != member.Name) att.Arguments.Add (GetArg (einfo.ElementName));
+ if (einfo.TypeData.FullTypeName != defaultType.FullTypeName) att.Arguments.Add (GetTypeArg ("Type", einfo.TypeData.FullTypeName));
+ if (einfo.Namespace != defaultNamespace) att.Arguments.Add (GetArg ("Namespace", einfo.Namespace));
+ if (einfo.Form == XmlSchemaForm.Unqualified) att.Arguments.Add (GetEnumArg ("Form", "System.Xml.Schema.XmlSchemaForm", einfo.Form.ToString()));
+ if (einfo.IsNullable) att.Arguments.Add (GetArg ("IsNullable", true));
+ if (!TypeTranslator.IsDefaultPrimitiveTpeData(einfo.TypeData)) att.Arguments.Add (GetArg ("DataType",einfo.TypeData.XmlType));
+ if (addAlwaysAttr || att.Arguments.Count > 0) attributes.Add (att);
+ }
+
+ protected override void GenerateElementMember (CodeAttributeDeclarationCollection attributes, XmlTypeMapMemberElement member)
+ {
+ if (member.ChoiceMember != null) {
+ CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlChoiceIdentifier");
+ att.Arguments.Add (GetArg(member.ChoiceMember));
+ attributes.Add (att);
+ }
+
+ if (member.Ignore)
+ attributes.Add (new CodeAttributeDeclaration ("System.Xml.Serialization.XmlIgnoreAttribute"));
+ }
+
+ protected override void GenerateArrayElement (CodeAttributeDeclarationCollection attributes, XmlTypeMapMemberElement member, string defaultNamespace, bool forceUseMemberName)
+ {
+ XmlTypeMapElementInfo einfo = (XmlTypeMapElementInfo) member.ElementInfo[0];
+ CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlArray");
+ if (forceUseMemberName || (einfo.ElementName != member.Name)) att.Arguments.Add (GetArg ("ElementName", einfo.ElementName));
+ if (einfo.Namespace != defaultNamespace) att.Arguments.Add (GetArg ("Namespace", einfo.Namespace));
+ if (einfo.Form == XmlSchemaForm.Unqualified) att.Arguments.Add (MapCodeGenerator.GetEnumArg ("Form", "System.Xml.Schema.XmlSchemaForm", einfo.Form.ToString()));
+ if (einfo.IsNullable) att.Arguments.Add (GetArg ("IsNullable", true));
+ if (att.Arguments.Count > 0) attributes.Add (att);
+ }
+
+ protected override void GenerateArrayItemAttributes (CodeAttributeDeclarationCollection attributes, ListMap listMap, TypeData type, XmlTypeMapElementInfo ainfo, string defaultName, string defaultNamespace, int nestingLevel)
+ {
+ bool needsType = (listMap.ItemInfo.Count > 1) ||
+ (ainfo.TypeData.FullTypeName != type.FullTypeName && !listMap.IsMultiArray);
+
+ CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlArrayItem");
+ if (ainfo.ElementName != defaultName) att.Arguments.Add (GetArg ("ElementName", ainfo.ElementName));
+ if (ainfo.Namespace != defaultNamespace && ainfo.Namespace != XmlSchema.Namespace) att.Arguments.Add (GetArg ("Namespace", ainfo.Namespace));
+ if (needsType) att.Arguments.Add (GetTypeArg ("Type", ainfo.TypeData.FullTypeName));
+ if (!ainfo.IsNullable) att.Arguments.Add (GetArg ("IsNullable", false));
+ if (ainfo.Form == XmlSchemaForm.Unqualified) att.Arguments.Add (MapCodeGenerator.GetEnumArg ("Form", "System.Xml.Schema.XmlSchemaForm", ainfo.Form.ToString()));
+ if (att.Arguments.Count > 0 && nestingLevel > 0) att.Arguments.Add (GetArg ("NestingLevel", nestingLevel));
+
+ if (att.Arguments.Count > 0) attributes.Add (att);
+ }
+
+ protected override void GenerateTextElementAttribute (CodeAttributeDeclarationCollection attributes, XmlTypeMapElementInfo einfo, TypeData defaultType)
+ {
+ CodeAttributeDeclaration uatt = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlTextAttribute");
+ if (einfo.TypeData.FullTypeName != defaultType.FullTypeName) uatt.Arguments.Add (GetTypeArg ("Type", einfo.TypeData.FullTypeName));
+ attributes.Add (uatt);
+ }
+
+ protected override void GenerateUnnamedAnyElementAttribute (CodeAttributeDeclarationCollection attributes, XmlTypeMapElementInfo einfo, string defaultNamespace)
+ {
+ CodeAttributeDeclaration uatt = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlAnyElement");
+ if (!einfo.IsUnnamedAnyElement) uatt.Arguments.Add (GetArg ("Name", einfo.ElementName));
+ if (einfo.Namespace != defaultNamespace) uatt.Arguments.Add (GetArg ("Namespace", einfo.Namespace));
+ attributes.Add (uatt);
+ }
+
+ protected override void GenerateEnum (XmlTypeMapping map, CodeTypeDeclaration codeEnum, bool isTopLevel)
+ {
+ GenerateClass (map, codeEnum, isTopLevel);
+ }
+
+ protected override void GenerateEnumItem (CodeMemberField codeField, EnumMap.EnumMapMember emem)
+ {
+ if (emem.EnumName != emem.XmlName)
+ {
+ CodeAttributeDeclaration xatt = new CodeAttributeDeclaration ("System.Xml.Serialization.XmlEnumAttribute");
+ xatt.Arguments.Add (GetArg (emem.XmlName));
+
+ AddCustomAttribute (codeField, xatt, true);
+ }
+ }
+
+ protected override void GenerateSpecifierMember (CodeTypeMember codeField)
+ {
+ AddCustomAttribute (codeField, "System.Xml.Serialization.XmlIgnore");
+ }
+
+ }
+}