//-----------------------------------------------------------------------
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//-----------------------------------------------------------------------
namespace System.IdentityModel.Tokens
{
    using System.Collections.Generic;
    using System.IdentityModel.Configuration;
    using System.Xml;
    ///  
    /// Defines a simple interface to a cache of security tokens.
    /// 
    public abstract class SessionSecurityTokenCache : ICustomIdentityConfiguration
    {
        /// 
        /// Load custom configuration from Xml
        /// 
        /// Custom configuration elements
        public virtual void LoadCustomConfiguration(XmlNodeList nodelist)
        {
            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException(SR.GetString(SR.ID0023, this.GetType().AssemblyQualifiedName)));
        }
        /// 
        /// Attempts to add an entry to the cache or update an existing one.
        /// 
        /// The key of the entry to be added.
        /// The associated SessionSecurityToken to be added.
        /// The expiration time of the entry.
        public abstract void AddOrUpdate(SessionSecurityTokenCacheKey key, SessionSecurityToken value, DateTime expiryTime);
       
        /// 
        /// Retrieves all tokens associated with a given key.
        /// 
        /// The endpointId to search for.
        /// The contextId to search for.
        /// In the derived class returns, the collection of tokens associated with the key.
        public abstract IEnumerable GetAll(string endpointId, System.Xml.UniqueId contextId);
       
        /// 
        /// Attempts to retrieve an entry from the cache.
        /// 
        /// The key of the entry to be retrieved.
        /// The SessionSecurityToken associated with the input key, null if not match is found.
        public abstract SessionSecurityToken Get(SessionSecurityTokenCacheKey key);
       
        /// 
        /// Attempts to remove all matching entries from cache.
        /// 
        /// The endpoint id for the entry to be removed.
        /// The context Id for the entry to be removed.
        public abstract void RemoveAll(string endpointId, System.Xml.UniqueId contextId);
        
        /// 
        /// Attempts to remove all entries with a matching endpoint Id from the cache.
        /// 
        /// The endpoint id for the entry to be removed.
        public abstract void RemoveAll(string endpointId);
               
        /// 
        /// Attempts to remove an entry from the cache.
        /// 
        /// The key of the entry to be removed.
        public abstract void Remove(SessionSecurityTokenCacheKey key);
    }
}