// 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,
IDictionary attribs)
{
// enough?
+ if (parser != null)
+ FileName = parser.InputFile;
base.Init (parser, parentBuilder, type, tagName, ID, attribs);
}
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;
+ }
+ }
}