-// \r
-// System.Xml.Serialization.SoapCodeExporter \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.CodeDom.Compiler;\r
-using System.Collections;\r
-\r
-namespace System.Xml.Serialization \r
-{\r
- public class SoapCodeExporter\r
-#if NET_2_0\r
- : CodeExporter\r
-#endif\r
- {\r
- #region Fields\r
-\r
-#if !NET_2_0\r
- SoapMapCodeGenerator codeGenerator;\r
-#endif\r
-\r
- #endregion\r
-\r
- #region Constructors\r
-\r
- public SoapCodeExporter (CodeNamespace codeNamespace): this (codeNamespace, null)\r
- {\r
- }\r
-\r
- public SoapCodeExporter (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit)\r
- {\r
- codeGenerator = new SoapMapCodeGenerator (codeNamespace, codeCompileUnit);\r
- }\r
-\r
-#if NET_2_0\r
-\r
- public SoapCodeExporter (CodeNamespace codeNamespace, \r
- CodeCompileUnit codeCompileUnit, \r
- CodeGenerationOptions options)\r
- : this (codeNamespace, codeCompileUnit, null, options, null)\r
- {\r
- }\r
- \r
- public SoapCodeExporter (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 SoapCodeExporter (CodeNamespace codeNamespace, \r
- CodeCompileUnit codeCompileUnit, \r
- CodeDomProvider codeProvider, \r
- CodeGenerationOptions options, \r
- Hashtable mappings)\r
- {\r
- codeGenerator = new SoapMapCodeGenerator (codeNamespace, codeCompileUnit, codeProvider, options, mappings);\r
- }\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)\r
- {\r
- AddMappingMetadata (metadata, member, false);\r
- }\r
-\r
- public void AddMappingMetadata (CodeAttributeDeclarationCollection metadata, XmlMemberMapping member, bool forceUseMemberName)\r
- {\r
- TypeData memType = member.TypeMapMember.TypeData;\r
- \r
- CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.SoapElement");\r
- if (forceUseMemberName || (member.ElementName != member.MemberName))\r
- att.Arguments.Add (new CodeAttributeArgument (new CodePrimitiveExpression(member.ElementName)));\r
- if (!TypeTranslator.IsDefaultPrimitiveTpeData (memType))\r
- att.Arguments.Add (new CodeAttributeArgument ("DataType", new CodePrimitiveExpression(member.TypeName)));\r
- \r
- if (att.Arguments.Count > 0) \r
- metadata.Add (att);\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
-\r
- #endregion // Methods\r
- }\r
-\r
- class SoapMapCodeGenerator : MapCodeGenerator\r
- {\r
- public SoapMapCodeGenerator (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit)\r
- : base (codeNamespace, codeCompileUnit, CodeGenerationOptions.None)\r
- {\r
- includeArrayTypes = true;\r
- }\r
-\r
- public SoapMapCodeGenerator (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.SoapType");\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
- AddCustomAttribute (codeClass, att, false);\r
- }\r
- \r
- protected override void GenerateClassInclude (CodeAttributeDeclarationCollection attributes, XmlTypeMapping map)\r
- {\r
- CodeAttributeDeclaration iatt = new CodeAttributeDeclaration ("System.Xml.Serialization.SoapInclude");\r
- iatt.Arguments.Add (new CodeAttributeArgument (new CodeTypeOfExpression(map.TypeData.FullTypeName)));\r
- attributes.Add (iatt);\r
- }\r
- \r
- protected override void GenerateAttributeMember (CodeAttributeDeclarationCollection attributes, XmlTypeMapMemberAttribute attinfo, string defaultNamespace, bool forceUseMemberName)\r
- {\r
- CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.SoapAttribute");\r
- if (attinfo.Name != attinfo.AttributeName) att.Arguments.Add (GetArg (attinfo.AttributeName));\r
- if (attinfo.Namespace != defaultNamespace) att.Arguments.Add (GetArg ("Namespace", attinfo.Namespace));\r
- if (!TypeTranslator.IsDefaultPrimitiveTpeData(attinfo.TypeData)) att.Arguments.Add (GetArg ("DataType",attinfo.TypeData.XmlType));\r
- attributes.Add (att);\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.SoapElement");\r
- if (forceUseMemberName || einfo.ElementName != member.Name) att.Arguments.Add (GetArg (einfo.ElementName));\r
-// if (einfo.IsNullable) att.Arguments.Add (GetArg ("IsNullable", true)); MS seems to ignore this\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 GenerateEnum (XmlTypeMapping map, CodeTypeDeclaration codeEnum, bool isTopLevel)\r
- {\r
- CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.SoapType");\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
- AddCustomAttribute (codeEnum, att, false);\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.SoapEnum");\r
- xatt.Arguments.Add (GetArg ("Name", emem.XmlName));\r
- AddCustomAttribute (codeField, xatt, true);\r
- }\r
- } \r
- \r
- protected override void GenerateSpecifierMember (CodeTypeMember codeField)\r
- {\r
- AddCustomAttribute (codeField, "System.Xml.Serialization.SoapIgnore");\r
- }\r
- }\r
-}\r
+//
+// System.Xml.Serialization.SoapCodeExporter
+//
+// 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.CodeDom.Compiler;
+using System.Collections;
+
+namespace System.Xml.Serialization
+{
+ public class SoapCodeExporter
+#if NET_2_0
+ : CodeExporter
+#endif
+ {
+ #region Fields
+
+#if !NET_2_0
+ SoapMapCodeGenerator codeGenerator;
+#endif
+
+ #endregion
+
+ #region Constructors
+
+ public SoapCodeExporter (CodeNamespace codeNamespace): this (codeNamespace, null)
+ {
+ }
+
+ public SoapCodeExporter (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit)
+ {
+ codeGenerator = new SoapMapCodeGenerator (codeNamespace, codeCompileUnit);
+ }
+
+#if NET_2_0
+
+ public SoapCodeExporter (CodeNamespace codeNamespace,
+ CodeCompileUnit codeCompileUnit,
+ CodeGenerationOptions options)
+ : this (codeNamespace, codeCompileUnit, null, options, null)
+ {
+ }
+
+ public SoapCodeExporter (CodeNamespace codeNamespace,
+ CodeCompileUnit codeCompileUnit,
+ CodeGenerationOptions options,
+ Hashtable mappings)
+ : this (codeNamespace, codeCompileUnit, null, options, mappings)
+ {
+
+ }
+
+ [MonoTODO]// FIXME: mappings?
+ public SoapCodeExporter (CodeNamespace codeNamespace,
+ CodeCompileUnit codeCompileUnit,
+ CodeDomProvider codeProvider,
+ CodeGenerationOptions options,
+ Hashtable mappings)
+ {
+ codeGenerator = new SoapMapCodeGenerator (codeNamespace, codeCompileUnit, codeProvider, options, mappings);
+ }
+
+#endif
+
+#endregion // Constructors
+
+ #region Properties
+
+#if !NET_2_0
+ public CodeAttributeDeclarationCollection IncludeMetadata {
+ get { return codeGenerator.IncludeMetadata; }
+ }
+#endif
+
+ #endregion // Properties
+
+ #region Methods
+
+ public void AddMappingMetadata (CodeAttributeDeclarationCollection metadata, XmlMemberMapping member)
+ {
+ AddMappingMetadata (metadata, member, false);
+ }
+
+ public void AddMappingMetadata (CodeAttributeDeclarationCollection metadata, XmlMemberMapping member, bool forceUseMemberName)
+ {
+ TypeData memType = member.TypeMapMember.TypeData;
+
+ CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.SoapElement");
+ if (forceUseMemberName || (member.ElementName != member.MemberName))
+ att.Arguments.Add (new CodeAttributeArgument (new CodePrimitiveExpression(member.ElementName)));
+ if (!TypeTranslator.IsDefaultPrimitiveTpeData (memType))
+ att.Arguments.Add (new CodeAttributeArgument ("DataType", new CodePrimitiveExpression(member.TypeName)));
+
+ if (att.Arguments.Count > 0)
+ metadata.Add (att);
+ }
+
+ public void ExportMembersMapping (XmlMembersMapping xmlMembersMapping)
+ {
+ codeGenerator.ExportMembersMapping (xmlMembersMapping);
+ }
+
+ public void ExportTypeMapping (XmlTypeMapping xmlTypeMapping)
+ {
+ codeGenerator.ExportTypeMapping (xmlTypeMapping, true);
+ }
+
+
+ #endregion // Methods
+ }
+
+ class SoapMapCodeGenerator : MapCodeGenerator
+ {
+ public SoapMapCodeGenerator (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit)
+ : base (codeNamespace, codeCompileUnit, CodeGenerationOptions.None)
+ {
+ includeArrayTypes = true;
+ }
+
+ public SoapMapCodeGenerator (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.SoapType");
+ if (map.XmlType != map.TypeData.TypeName) att.Arguments.Add (GetArg (map.XmlType));
+ if (map.XmlTypeNamespace != "") att.Arguments.Add (GetArg ("Namespace", map.XmlTypeNamespace));
+ AddCustomAttribute (codeClass, att, false);
+ }
+
+ protected override void GenerateClassInclude (CodeAttributeDeclarationCollection attributes, XmlTypeMapping map)
+ {
+ CodeAttributeDeclaration iatt = new CodeAttributeDeclaration ("System.Xml.Serialization.SoapInclude");
+ iatt.Arguments.Add (new CodeAttributeArgument (new CodeTypeOfExpression(map.TypeData.FullTypeName)));
+ attributes.Add (iatt);
+ }
+
+ protected override void GenerateAttributeMember (CodeAttributeDeclarationCollection attributes, XmlTypeMapMemberAttribute attinfo, string defaultNamespace, bool forceUseMemberName)
+ {
+ CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.SoapAttribute");
+ if (attinfo.Name != attinfo.AttributeName) att.Arguments.Add (GetArg (attinfo.AttributeName));
+ if (attinfo.Namespace != defaultNamespace) att.Arguments.Add (GetArg ("Namespace", attinfo.Namespace));
+ if (!TypeTranslator.IsDefaultPrimitiveTpeData(attinfo.TypeData)) att.Arguments.Add (GetArg ("DataType",attinfo.TypeData.XmlType));
+ attributes.Add (att);
+ }
+
+ 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.SoapElement");
+ if (forceUseMemberName || einfo.ElementName != member.Name) att.Arguments.Add (GetArg (einfo.ElementName));
+// if (einfo.IsNullable) att.Arguments.Add (GetArg ("IsNullable", true)); MS seems to ignore this
+ 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 GenerateEnum (XmlTypeMapping map, CodeTypeDeclaration codeEnum, bool isTopLevel)
+ {
+ CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Xml.Serialization.SoapType");
+ if (map.XmlType != map.TypeData.TypeName) att.Arguments.Add (GetArg (map.XmlType));
+ if (map.XmlTypeNamespace != "") att.Arguments.Add (GetArg ("Namespace", map.XmlTypeNamespace));
+ AddCustomAttribute (codeEnum, att, false);
+ }
+
+ protected override void GenerateEnumItem (CodeMemberField codeField, EnumMap.EnumMapMember emem)
+ {
+ if (emem.EnumName != emem.XmlName)
+ {
+ CodeAttributeDeclaration xatt = new CodeAttributeDeclaration ("System.Xml.Serialization.SoapEnum");
+ xatt.Arguments.Add (GetArg ("Name", emem.XmlName));
+ AddCustomAttribute (codeField, xatt, true);
+ }
+ }
+
+ protected override void GenerateSpecifierMember (CodeTypeMember codeField)
+ {
+ AddCustomAttribute (codeField, "System.Xml.Serialization.SoapIgnore");
+ }
+ }
+}