using System.Linq;
using CMS.CMSHelper;
using CMS.SettingsProvider;
using CMS.FormEngine;
using CMS.FormControls;
///
/// Class providing resolvers for IntelliSense and ConditionBuilders throughout the system.
///
public static class ResolverFactory
{
#region "Methods"
///
/// Returns static resolver if exists.
///
/// Name of the resolver to return
private static ContextResolver GetStaticResolver(string name)
{
switch (name.ToLowerCSafe())
{
case "analyticsresolver":
return EmailTemplateMacros.AnalyticsResolver;
case "workflowbasedocumentresolver":
return EmailTemplateMacros.WorkflowBaseDocumentResolver;
case "workflowsimpledocumentresolver":
return EmailTemplateMacros.WorkflowSimpleDocumentResolver;
case "automationsimpleresolver":
return EmailTemplateMacros.AutomationSimpleResolver;
case "contactresolver":
return EmailTemplateMacros.ContactResolver;
case "contactactivityresolver":
return EmailTemplateMacros.ContactActivityResolver;
case "contactscoreresolver":
return EmailTemplateMacros.ContactScoreResolver;
case "variantresolver":
return EmailTemplateMacros.VariantResolver;
case "newsletterresolver":
return EmailTemplateMacros.NewsletterResolver;
case "newsletteroptinresolver":
return EmailTemplateMacros.NewsletterOptInResolver;
case "emailtemplateresolver":
return EmailTemplateMacros.EmailTemplateResolver;
case "bookingresolver":
return EmailTemplateMacros.BookingResolver;
case "deviceprofilesresolver":
return EmailTemplateMacros.DeviceProfilesResolver;
}
return null;
}
///
/// Returns a resolver based on given name.
///
/// Name of the resolver
public static ContextResolver GetResolver(string name)
{
if (string.IsNullOrEmpty(name))
{
return GetDefaultResolver();
}
string key = name.ToLowerCSafe();
ContextResolver resolver = GetStaticResolver(name);
if (resolver == null)
{
if (key.StartsWithCSafe("form."))
{
resolver = GetFormResolver(key.Substring(5));
}
else if (key.StartsWithCSafe("formdefinition."))
{
resolver = GetFormDefinitionResolver(name.Substring(15));
}
else
{
resolver = GetDefaultResolver();
}
}
return resolver.CreateContextChild();
}
///
/// Returns new instance of resolver for given class (includes all fields, etc.).
///
/// Name of the class
private static ContextResolver GetFormResolver(string className)
{
DataClassInfo dc = DataClassInfoProvider.GetDataClass(className);
if (dc != null)
{
return GetFormDefinitionResolver(dc.ClassFormDefinition);
}
return null;
}
///
/// Returns new instance of resolver based on given form definition.
///
/// Form definition
private static ContextResolver GetFormDefinitionResolver(string formDefinition)
{
FormInfo fi = new FormInfo(formDefinition);
return GetFormResolver(fi);
}
///
/// Returns new instance of resolver for given class (includes all fields, etc.).
///
/// FormInfo
private static ContextResolver GetFormResolver(FormInfo formInfo)
{
ContextResolver mContextResolver = GetDefaultResolver();
var controlPlaceholder = new EditingFormControl();
foreach (var fieldInfo in formInfo.ItemsList.OfType())
{
mContextResolver.SetNamedSourceData(fieldInfo.Name, controlPlaceholder);
}
return mContextResolver;
}
///
/// Returns resolver which should be used if not other is applicable.
///
private static ContextResolver GetDefaultResolver()
{
return CMSContext.CurrentResolver.CreateContextChild();
}
#endregion
}