using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Text.RegularExpressions;
|
using System.Web;
|
|
namespace PalGain.Core
|
{
|
/// <summary>
|
/// Represents a manager for caching during an HTTP request (short term caching)
|
/// </summary>
|
public partial class PerRequestCacheManager : ICacheManager
|
{
|
private readonly HttpContextBase _context;
|
|
/// <summary>
|
/// Ctor
|
/// </summary>
|
/// <param name="context">Context</param>
|
public PerRequestCacheManager(HttpContextBase context)
|
{
|
this._context = context;
|
}
|
|
/// <summary>
|
/// Creates a new instance of the NopRequestCache class
|
/// </summary>
|
protected virtual IDictionary GetItems()
|
{
|
if (_context != null)
|
return _context.Items;
|
|
return null;
|
}
|
|
/// <summary>
|
/// Gets or sets the value associated with the specified key.
|
/// </summary>
|
/// <typeparam name="T">Type</typeparam>
|
/// <param name="key">The key of the value to get.</param>
|
/// <returns>The value associated with the specified key.</returns>
|
public virtual T Get<T>(string key)
|
{
|
var items = GetItems();
|
if (items == null)
|
return default(T);
|
|
return (T)items[key];
|
}
|
|
/// <summary>
|
/// Adds the specified key and object to the cache.
|
/// </summary>
|
/// <param name="key">key</param>
|
/// <param name="data">Data</param>
|
/// <param name="cacheTime">Cache time</param>
|
public virtual void Set(string key, object data, int cacheTime)
|
{
|
var items = GetItems();
|
if (items == null)
|
return;
|
|
if (data != null)
|
{
|
if (items.Contains(key))
|
items[key] = data;
|
else
|
items.Add(key, data);
|
}
|
}
|
|
/// <summary>
|
/// Gets a value indicating whether the value associated with the specified key is cached
|
/// </summary>
|
/// <param name="key">key</param>
|
/// <returns>Result</returns>
|
public virtual bool IsSet(string key)
|
{
|
var items = GetItems();
|
if (items == null)
|
return false;
|
|
return (items[key] != null);
|
}
|
|
/// <summary>
|
/// Removes the value with the specified key from the cache
|
/// </summary>
|
/// <param name="key">/key</param>
|
public virtual void Remove(string key)
|
{
|
var items = GetItems();
|
if (items == null)
|
return;
|
|
items.Remove(key);
|
}
|
|
/// <summary>
|
/// Removes items by pattern
|
/// </summary>
|
/// <param name="pattern">pattern</param>
|
public virtual void RemoveByPattern(string pattern)
|
{
|
var items = GetItems();
|
if (items == null)
|
return;
|
|
var enumerator = items.GetEnumerator();
|
var regex = new Regex(pattern, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
var keysToRemove = new List<String>();
|
while (enumerator.MoveNext())
|
{
|
if (regex.IsMatch(enumerator.Key.ToString()))
|
{
|
keysToRemove.Add(enumerator.Key.ToString());
|
}
|
}
|
|
foreach (string key in keysToRemove)
|
{
|
items.Remove(key);
|
}
|
}
|
|
/// <summary>
|
/// Clear all cache data
|
/// </summary>
|
public virtual void Clear()
|
{
|
var items = GetItems();
|
if (items == null)
|
return;
|
|
var enumerator = items.GetEnumerator();
|
var keysToRemove = new List<String>();
|
while (enumerator.MoveNext())
|
{
|
keysToRemove.Add(enumerator.Key.ToString());
|
}
|
|
foreach (string key in keysToRemove)
|
{
|
items.Remove(key);
|
}
|
}
|
}
|
}
|