using System;
using System.Configuration;
using System.Web;
using System.Web.Caching;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
namespace Umbraco.Core
{
///
/// the Umbraco Application context
///
///
/// one per AppDomain, represents the global Umbraco application
///
public class ApplicationContext
{
///
/// Constructor
///
internal ApplicationContext()
{
//create a new application cache from the HttpRuntime.Cache
ApplicationCache = HttpRuntime.Cache == null
? new CacheHelper(new Cache())
: new CacheHelper(HttpRuntime.Cache);
}
///
/// Singleton accessor
///
public static ApplicationContext Current { get; internal set; }
///
/// Returns the application wide cache accessor
///
///
/// Any caching that is done in the application (app wide) should be done through this property
///
internal CacheHelper ApplicationCache { get; private set; }
// IsReady is set to true by the boot manager once it has successfully booted
// note - the original umbraco module checks on content.Instance in umbraco.dll
// now, the boot task that setup the content store ensures that it is ready
bool _isReady = false;
readonly System.Threading.ManualResetEventSlim _isReadyEvent = new System.Threading.ManualResetEventSlim(false);
public bool IsReady
{
get
{
return _isReady;
}
internal set
{
AssertIsNotReady();
_isReady = value;
_isReadyEvent.Set();
}
}
public bool WaitForReady(int timeout)
{
return _isReadyEvent.WaitHandle.WaitOne(timeout);
}
// notes
// GlobalSettings.ConfigurationStatus returns the value that's in the web.config, so it's the "configured version"
// GlobalSettings.CurrentVersion returns the hard-coded "current version"
// the system is configured if they match
// if they don't, install runs, updates web.config (presumably) and updates GlobalSettings.ConfiguredStatus
//
// then there is Application["umbracoNeedConfiguration"] which makes no sense... getting rid of it...
//
public bool IsConfigured
{
// fixme - let's do this for the time being
get
{
return Configured;
}
}
private bool Configured
{
get
{
try
{
string configStatus = ConfigurationStatus;
string currentVersion = GlobalSettings.CurrentVersion;
if (currentVersion != configStatus)
{
LogHelper.Info("CurrentVersion different from configStatus: '" + currentVersion + "','" + configStatus + "'");
}
return (configStatus == currentVersion);
}
catch
{
return false;
}
}
}
private string ConfigurationStatus
{
get
{
try
{
return ConfigurationManager.AppSettings["umbracoConfigurationStatus"];
}
catch
{
return String.Empty;
}
}
}
private void AssertIsReady()
{
if (!this.IsReady)
throw new Exception("ApplicationContext is not ready yet.");
}
private void AssertIsNotReady()
{
if (this.IsReady)
throw new Exception("ApplicationContext has already been initialized.");
}
///
/// Gets the current DatabaseContext
///
public DatabaseContext DatabaseContext
{
get { return DatabaseContext.Current; }
}
}
}