ObjectTag.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / xsp / System / Web / UI / ObjectTag.cs / 1 / ObjectTag.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

/* 
 * Implements the  tag 
 *
 * Copyright (c) 1999 Microsoft Corporation 
 */

namespace System.Web.UI {
 
using System;
using System.IO; 
using System.Collections; 
using System.Web;
using System.Web.Util; 
using System.Globalization;
using System.Security.Permissions;

/* 
 * ObjectTag is a marker class, that should never be instantiated.  Its
 * only purpose is to point to the ObjectTagBuilder class through its 
 * metadata. 
 */
[ 
    ControlBuilderAttribute(typeof(ObjectTagBuilder))
]
internal class ObjectTag {
    private ObjectTag() { 
    }
} 
 

///  
/// 
/// 
[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)]
public sealed class ObjectTagBuilder : ControlBuilder { 

    private ObjectTagScope _scope; 
    private Type _type; 
    private bool _lateBound;
    private string _progid; // Only used for latebound objects 
    private string _clsid;  // Only used for latebound objects
    private bool _fLateBinding; // Force latebinding when early binding could be done

 
    /// 
    ///  
    ///  
    public override void Init(TemplateParser parser, ControlBuilder parentBuilder,
        Type type, string tagName, 
        string id, IDictionary attribs) {

        if (id == null) {
            throw new HttpException( 
                SR.GetString(SR.Object_tag_must_have_id));
        } 
 
        ID = id;
 
        // Get the scope attribute of the object tag
        string scope = (string) attribs["scope"];

        // Map it to an ObjectTagScope enum 
        if (scope == null)
            _scope = ObjectTagScope.Default; 
        else if (StringUtil.EqualsIgnoreCase(scope, "page")) 
            _scope = ObjectTagScope.Page;
        else if (StringUtil.EqualsIgnoreCase(scope, "session")) 
            _scope = ObjectTagScope.Session;
        else if (StringUtil.EqualsIgnoreCase(scope, "application"))
            _scope = ObjectTagScope.Application;
        else if (StringUtil.EqualsIgnoreCase(scope, "appinstance")) 
            _scope = ObjectTagScope.AppInstance;
        else 
            throw new HttpException(SR.GetString(SR.Invalid_scope, scope)); 

        Util.GetAndRemoveBooleanAttribute(attribs, "latebinding", 
            ref _fLateBinding);

        string tmp = (string) attribs["class"];
 
        // Is there a 'class' attribute?
        if (tmp != null) { 
            // Get a Type object from the type string 
            _type = parser.GetType(tmp);
        } 

        // If we don't have a type,
        if (_type == null) {
            tmp = (string) attribs["classid"]; 

            if (tmp != null) { 
                // Create a Guid out of it 
                Guid clsid = new Guid(tmp);
 
                // Turn it into a type
                _type = Type.GetTypeFromCLSID(clsid);

                if (_type == null) 
                    throw new HttpException(SR.GetString(SR.Invalid_clsid, tmp));
 
                // 

 


                if (_fLateBinding || Util.IsLateBoundComClassicType(_type)) {
                    _lateBound = true; 
                    _clsid = tmp;
                } 
                else { 

                    // Add a dependency to the type, so that the user can use it without 
                    // having to import it
                    parser.AddTypeDependency(_type);
                }
            } 
        }
 
        // If we don't have a type, 
        if (_type == null) {
            tmp = (string) attribs["progid"]; 

            if (tmp != null) {
#if !FEATURE_PAL // FEATURE_PAL does not enable COM
                // Turn it into a type 
                _type = Type.GetTypeFromProgID(tmp);
#else // !FEATURE_PAL 
                throw new NotImplementedException("ROTORTODO"); 
#endif // !FEATURE_PAL
 

                if (_type == null)
                    throw new HttpException(SR.GetString(SR.Invalid_progid, tmp));
 
                Debug.Trace("Template", " type: " + _type.FullName);
 
                // 

 


                if (_fLateBinding || Util.IsLateBoundComClassicType(_type)) {
                    _lateBound = true; 
                    _progid = tmp;
                } 
                else { 

                    // Add a dependency to the type, so that the user can use it without 
                    // having to import it
                    parser.AddTypeDependency(_type);
                }
            } 
        }
 
        // If we still don't have a type, fail 
        if (_type == null) {
            throw new HttpException( 
                SR.GetString(SR.Object_tag_must_have_class_classid_or_progid));
        }
    }
 
    // Ignore all content
 
    ///  
    /// 
    ///  
    public override void AppendSubBuilder(ControlBuilder subBuilder) {}

    /// 
    ///  
    /// 
    public override void AppendLiteralString(string s) {} 
 
    internal ObjectTagScope Scope {
        get { return _scope; } 
    }

    internal Type ObjectType {
        get { return _type; } 
    }
 
    internal bool LateBound { 
        get { return _lateBound;}
    } 

    internal Type DeclaredType {
        get { return _lateBound ? typeof(object) : ObjectType; }
    } 

    internal string Progid { 
        get { return _progid; } 
    }
 
    internal string Clsid {
        get { return _clsid; }
    }
} 

/* 
 * Enum for the scope of an object tag 
 */
internal enum ObjectTagScope { 
    Default = 0,
    Page = 1,
    Session = 2,
    Application = 3, 
    AppInstance = 4
} 
 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK