[asp.net] use auto-generated backing fields for all properties
[mono.git] / mcs / class / System.Web / System.Web.UI / TemplateBuilder.cs
index 9a30ef94609bc07b7e810493dae046b2021f3b74..085ae900ff83ffc4e525721a7c54fbc331a88313 100644 (file)
@@ -5,8 +5,7 @@
 //     Gonzalo Paniagua Javier (gonzalo@ximian.com)
 //
 // (C) 2003 Ximian, Inc. (http://www.ximian.com)
-//
-
+// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
 using System.Collections;
-using System.Reflection;
-#if NET_2_0
+using System.Collections.Generic;
 using System.ComponentModel;
-#endif
+using System.Reflection;
+using System.Security.Permissions;
+
+namespace System.Web.UI {
+
+       // CAS
+       [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       public class TemplateBuilder : ControlBuilder, ITemplate {
 
-namespace System.Web.UI
-{
-       public class TemplateBuilder : ControlBuilder, ITemplate
-       {
                string text;
                TemplateContainerAttribute containerAttribute;
-#if NET_2_0
-               ArrayList bindings;
-#endif
+               TemplateInstanceAttribute instanceAttribute;
+               List <TemplateBinding> bindings;
 
                public TemplateBuilder ()
                {
@@ -51,10 +51,13 @@ namespace System.Web.UI
 
                internal TemplateBuilder (ICustomAttributeProvider prov)
                {
-                       object[] ats = prov.GetCustomAttributes (typeof(TemplateContainerAttribute), true);
-                       if (ats.Length > 0) {
+                       object[] ats = prov.GetCustomAttributes (typeof (TemplateContainerAttribute), true);
+                       if (ats.Length > 0)
                                containerAttribute = (TemplateContainerAttribute) ats [0];
-                       }
+
+                       ats = prov.GetCustomAttributes (typeof (TemplateInstanceAttribute), true);
+                       if (ats.Length > 0)
+                               instanceAttribute = (TemplateInstanceAttribute) ats [0];
                }
 
                public virtual string Text {
@@ -66,21 +69,29 @@ namespace System.Web.UI
                        get { return containerAttribute != null ? containerAttribute.ContainerType : null; }
                }
                
-#if NET_2_0
+               internal TemplateInstance? TemplateInstance {
+                       get { return instanceAttribute != null ? instanceAttribute.Instances : (TemplateInstance?)null; }
+               }
+                                       
                internal BindingDirection BindingDirection {
-                       get { return containerAttribute != null ? containerAttribute.BindingDirection : BindingDirection.OneWay; }
+                       get { return containerAttribute != null ? containerAttribute.BindingDirection : BindingDirection.TwoWay; }
                }
                
                internal void RegisterBoundProperty (Type controlType, string controlProperty, string controlId, string fieldName)
                {
-                       if (bindings == null) bindings = new ArrayList ();
+                       if (bindings == null)
+                               bindings = new List <TemplateBinding> ();
                        bindings.Add (new TemplateBinding (controlType, controlProperty, controlId, fieldName));
                }
                
                internal ICollection Bindings {
                        get { return bindings; }
                }
-#endif
+
+               public override object BuildObject ()
+               {
+                       return base.BuildObject ();
+               }
 
                public override void Init (TemplateParser parser,
                                          ControlBuilder parentBuilder,
@@ -90,6 +101,8 @@ namespace System.Web.UI
                                          IDictionary attribs)
                {
                        // enough?
+                       if (parser != null)
+                               FileName = parser.InputFile;
                        base.Init (parser, parentBuilder, type, tagName, ID, attribs);
                }
                
@@ -109,7 +122,6 @@ namespace System.Web.UI
                }
        }
        
-#if NET_2_0
        internal class TemplateBinding
        {
                public Type ControlType;
@@ -125,6 +137,5 @@ namespace System.Web.UI
                        FieldName = fieldName;
                }
        }
-#endif
 }