File: UI\ControlCachePolicy.cs
Project: ndp\fx\src\xsp\system\Web\System.Web.csproj (System.Web)
//------------------------------------------------------------------------------
// <copyright file="ControlCachePolicy.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
 
namespace System.Web.UI {
 
using System;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Specialized;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Globalization;
using System.Web;
using System.Web.Util;
using System.Web.UI.WebControls;
using System.Web.Caching;
using System.Security.Permissions;
 
public sealed class ControlCachePolicy {
 
    private static ControlCachePolicy _cachePolicyStub = new ControlCachePolicy();
 
    private BasePartialCachingControl _pcc;
 
    internal ControlCachePolicy() {
    }
 
    internal ControlCachePolicy(BasePartialCachingControl pcc) {
        _pcc = pcc;
    }
 
    internal static ControlCachePolicy GetCachePolicyStub() {
        // Return a stub, which returns SupportsCaching==false and throws on everything else.
        return _cachePolicyStub;
    }
 
    // Check whether it is valid to access properties on this object
    private void CheckValidCallingContext() {
 
        // If it's not being cached, the CachePolicy can't be used
        if (_pcc == null) {
            throw new HttpException(
                SR.GetString(SR.UC_not_cached));
        }
 
        // Make sure it's not being used too late
        if (_pcc.ControlState >= ControlState.PreRendered) {
            throw new HttpException(
                SR.GetString(SR.UCCachePolicy_unavailable));
        }
    }
 
 
    public bool SupportsCaching {
        get {
            // Caching is supported if we have a PartialCachingControl
            return (_pcc != null);
        }
    }
 
 
    public bool Cached {
        get {
            CheckValidCallingContext();
 
            return !_pcc._cachingDisabled;
        }
        
        set {
            CheckValidCallingContext();
 
            _pcc._cachingDisabled = !value;
        }
    }
 
 
    public TimeSpan Duration {
        get {
            CheckValidCallingContext();
 
            return _pcc.Duration;
        }
        
        set {
            CheckValidCallingContext();
 
            _pcc.Duration = value;
        }
    }
 
 
    public HttpCacheVaryByParams VaryByParams {
        get {
            CheckValidCallingContext();
 
            return _pcc.VaryByParams;
        }
    }
 
 
    public string VaryByControl {
        get {
            CheckValidCallingContext();
 
            return _pcc.VaryByControl;
        }
        
        set {
            CheckValidCallingContext();
 
            _pcc.VaryByControl = value;
        }
    }
 
 
    public CacheDependency Dependency {
        get {
            CheckValidCallingContext();
 
            return _pcc.Dependency;
        }
        
        set {
            CheckValidCallingContext();
 
            _pcc.Dependency = value;
        }
    }
 
 
    public void SetVaryByCustom(string varyByCustom) {
        CheckValidCallingContext();
 
        _pcc._varyByCustom = varyByCustom;
    }
 
 
    public void SetSlidingExpiration(bool useSlidingExpiration) {
        CheckValidCallingContext();
 
        _pcc._useSlidingExpiration = useSlidingExpiration;
    }
 
 
    public void SetExpires(DateTime expirationTime) {
        CheckValidCallingContext();
 
        _pcc._utcExpirationTime = DateTimeUtil.ConvertToUniversalTime(expirationTime);
    }
 
    public String ProviderName {
        get {
            CheckValidCallingContext();
            if (_pcc._provider == null) {
                return OutputCache.ASPNET_INTERNAL_PROVIDER_NAME;
            }
            else {
                return _pcc._provider;            
            }
        }
        set {
            CheckValidCallingContext();
            if (value == OutputCache.ASPNET_INTERNAL_PROVIDER_NAME) {
                value = null;
            }
            OutputCache.ThrowIfProviderNotFound(value);
            _pcc._provider = value;
        }
    }
}
 
}