diff options
Diffstat (limited to 'mcs/class/System.Web/System.Web.UI/CollectionBuilder.cs')
-rw-r--r-- | mcs/class/System.Web/System.Web.UI/CollectionBuilder.cs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/mcs/class/System.Web/System.Web.UI/CollectionBuilder.cs b/mcs/class/System.Web/System.Web.UI/CollectionBuilder.cs new file mode 100644 index 00000000000..e494ce07c47 --- /dev/null +++ b/mcs/class/System.Web/System.Web.UI/CollectionBuilder.cs @@ -0,0 +1,57 @@ +// +// System.Web.UI.CollectionBuilder.cs +// +// Authors: +// Gonzalo Paniagua Javier (gonzalo@ximian.com) +// +// (c) 2003 Ximian, Inc. (http://www.ximian.com) +// + +using System; +using System.Collections; +using System.Reflection; + +namespace System.Web.UI +{ + class CollectionBuilder : ControlBuilder + { + Type elementType; + + internal CollectionBuilder () + { + } + + public override void AppendLiteralString (string s) + { + if (s != null && s.Trim () != "") + throw new HttpException ("Literal content not allowed for " + ControlType); + } + + public override Type GetChildControlType (string tagName, IDictionary attribs) + { + Type t = Parser.GetTypeFromTag (tagName); + if (elementType != null && !(elementType.IsAssignableFrom (t))) + throw new HttpException ("Cannot add a " + t + " to " + elementType); + + return t; + } + + public override void Init (TemplateParser parser, + ControlBuilder parentBuilder, + Type type, + string tagName, + string id, + IDictionary attribs) + { + base.Init (parser, parentBuilder, type, tagName, id, attribs); + + PropertyInfo prop = parentBuilder.ControlType.GetProperty (tagName, flagsNoCase); + SetControlType (prop.PropertyType); + + prop = ControlType.GetProperty ("Item", flagsNoCase & ~BindingFlags.IgnoreCase); + if (prop != null) + elementType = prop.PropertyType; + } + } +} + |