[asp.net] use auto-generated backing fields for all properties
[mono.git] / mcs / class / System.Web / System.Web.UI / TemplateBuilder.cs
index 78d591f8f6c14b1e85a78b27a99a47908a034887..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.Collections.Generic;
+using System.ComponentModel;
+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;
+               TemplateInstanceAttribute instanceAttribute;
+               List <TemplateBinding> bindings;
 
                public TemplateBuilder ()
                {
                }
 
+               internal TemplateBuilder (ICustomAttributeProvider prov)
+               {
+                       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 {
                        get { return text; }
                        set { text = value; }
                }
+               
+               internal Type ContainerType {
+                       get { return containerAttribute != null ? containerAttribute.ContainerType : null; }
+               }
+               
+               internal TemplateInstance? TemplateInstance {
+                       get { return instanceAttribute != null ? instanceAttribute.Instances : (TemplateInstance?)null; }
+               }
+                                       
+               internal BindingDirection BindingDirection {
+                       get { return containerAttribute != null ? containerAttribute.BindingDirection : BindingDirection.TwoWay; }
+               }
+               
+               internal void RegisterBoundProperty (Type controlType, string controlProperty, string controlId, string fieldName)
+               {
+                       if (bindings == null)
+                               bindings = new List <TemplateBinding> ();
+                       bindings.Add (new TemplateBinding (controlType, controlProperty, controlId, fieldName));
+               }
+               
+               internal ICollection Bindings {
+                       get { return bindings; }
+               }
+
+               public override object BuildObject ()
+               {
+                       return base.BuildObject ();
+               }
 
                public override void Init (TemplateParser parser,
                                          ControlBuilder parentBuilder,
@@ -54,6 +101,8 @@ namespace System.Web.UI
                                          IDictionary attribs)
                {
                        // enough?
+                       if (parser != null)
+                               FileName = parser.InputFile;
                        base.Init (parser, parentBuilder, type, tagName, ID, attribs);
                }
                
@@ -72,5 +121,21 @@ namespace System.Web.UI
                        this.text = text;
                }
        }
+       
+       internal class TemplateBinding
+       {
+               public Type ControlType;
+               public string ControlProperty;
+               public string ControlId;
+               public string FieldName;
+               
+               public TemplateBinding (Type controlType, string controlProperty, string controlId, string fieldName)
+               {
+                       ControlType = controlType;
+                       ControlProperty = controlProperty;
+                       ControlId = controlId;
+                       FieldName = fieldName;
+               }
+       }
 }