ObjectTag.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / UI / ObjectTag.cs / 1305376 / 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() { 
    }
} 
 

///  
/// 
/// 
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, check for a classid attribute
        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, check for a progid attribute 
        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.
                        

                        

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