PageRenderTime 26ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 1ms

/CompositeC1/Composite/Plugins/Elements/ElementProviders/XsltBasedFunctionProviderElementProvider/XsltBasedFunctionProviderElementProvider.cs

#
C# | 263 lines | 184 code | 47 blank | 32 comment | 6 complexity | c4f21ea27dfa0691c462798a46a0295e MD5 | raw file
Possible License(s): LGPL-2.1
  1. /*
  2. * The contents of this web application are subject to the Mozilla Public License Version
  3. * 1.1 (the "License"); you may not use this web application except in compliance with
  4. * the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/.
  5. *
  6. * Software distributed under the License is distributed on an "AS IS" basis,
  7. * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  8. * for the specific language governing rights and limitations under the License.
  9. *
  10. * The Original Code is owned by and the Initial Developer of the Original Code is
  11. * Composite A/S (Danish business reg.no. 21744409). All Rights Reserved
  12. *
  13. * Section 11 of the License is EXPRESSLY amended to include a provision stating
  14. * that any dispute, including but not limited to disputes related to the enforcement
  15. * of the License, to which Composite A/S as owner of the Original Code, as Initial
  16. * Developer or in any other role, becomes a part to shall be governed by Danish law
  17. * and be initiated before the Copenhagen City Court ("K�benhavns Byret")
  18. */
  19. using System;
  20. using System.Collections.Generic;
  21. using System.Configuration;
  22. using System.Linq;
  23. using Composite.Data;
  24. using Composite.Data.Types;
  25. using Composite.C1Console.Elements;
  26. using Composite.C1Console.Elements.Plugins.ElementProvider;
  27. using Composite.Core.ResourceSystem;
  28. using Composite.Core.ResourceSystem.Icons;
  29. using Composite.C1Console.Security;
  30. using Composite.Plugins.Elements.ElementProviders.BaseFunctionProviderElementProvider;
  31. using Composite.C1Console.Workflow;
  32. using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
  33. using Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder;
  34. using Microsoft.Practices.ObjectBuilder;
  35. namespace Composite.Plugins.Elements.ElementProviders.XsltBasedFunctionProviderElementProvider
  36. {
  37. /// <summary>
  38. /// </summary>
  39. /// <exclude />
  40. [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
  41. [ConfigurationElementType(typeof(XsltBasedFunctionProviderElementProviderData))]
  42. public sealed class XsltBasedFunctionProviderElementProvider : BaseFunctionProviderElementProvider.BaseFunctionProviderElementProvider
  43. {
  44. private string _providerName;
  45. private static readonly ActionGroup PrimaryActionGroup = new ActionGroup(ActionGroupPriority.PrimaryHigh);
  46. /// <exclude />
  47. public static ResourceHandle AddFunction { get { return GetIconHandle("xslt-based-function-add"); } }
  48. /// <exclude />
  49. public static ResourceHandle EditFunction { get { return GetIconHandle("xslt-based-function-edit"); } }
  50. /// <exclude />
  51. public static ResourceHandle DeleteFunction { get { return GetIconHandle("xslt-based-function-delete"); } }
  52. /// <exclude />
  53. public XsltBasedFunctionProviderElementProvider(string providerName)
  54. {
  55. _providerName = providerName;
  56. }
  57. /// <exclude />
  58. protected override string RootFolderLabel
  59. {
  60. get
  61. {
  62. return StringResourceSystemFacade.GetString("Composite.Plugins.XsltBasedFunction", "Plugins.XsltBasedFunctionProviderElementProvider.RootFolderLabel");
  63. }
  64. }
  65. /// <exclude />
  66. protected override string RootFolderToolTip
  67. {
  68. get
  69. {
  70. return StringResourceSystemFacade.GetString("Composite.Plugins.XsltBasedFunction", "Plugins.XsltBasedFunctionProviderElementProvider.RootFolderToolTip");
  71. }
  72. }
  73. /// <exclude />
  74. protected override IEnumerable<IFunctionTreeBuilderLeafInfo> OnGetFunctionInfos(SearchToken searchToken)
  75. {
  76. if (searchToken.IsValidKeyword() == false)
  77. {
  78. return
  79. from function in DataFacade.GetData<IXsltFunction>()
  80. orderby function.Name
  81. select (IFunctionTreeBuilderLeafInfo)new XsltFunctionTreeBuilderLeafInfo(function);
  82. }
  83. else
  84. {
  85. string keyword = searchToken.Keyword.ToLowerInvariant();
  86. return
  87. from function in DataFacade.GetData<IXsltFunction>()
  88. where function.Name.ToLowerInvariant().Contains(keyword) ||
  89. function.Namespace.ToLowerInvariant().Contains(keyword)
  90. orderby function.Name
  91. select (IFunctionTreeBuilderLeafInfo)new XsltFunctionTreeBuilderLeafInfo(function);
  92. }
  93. }
  94. /// <exclude />
  95. protected override IEnumerable<Type> OnGetEntityTokenTypes()
  96. {
  97. yield return typeof(DataEntityToken);
  98. }
  99. /// <exclude />
  100. protected override IFunctionTreeBuilderLeafInfo OnIsEntityOwner(EntityToken entityToken)
  101. {
  102. DataEntityToken dataEntityToken = entityToken as DataEntityToken;
  103. if (dataEntityToken == null) return null;
  104. if (dataEntityToken.InterfaceType != typeof(IXsltFunction)) return null;
  105. return new XsltFunctionTreeBuilderLeafInfo(dataEntityToken.Data as IXsltFunction);
  106. }
  107. /// <exclude />
  108. protected override IEnumerable<ElementAction> OnGetFolderActions()
  109. {
  110. return new ElementAction[]
  111. {
  112. new ElementAction(new ActionHandle(
  113. new WorkflowActionToken(
  114. WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.XsltBasedFunctionProviderElementProvider.AddNewXsltFunctionWorkflow"),
  115. new PermissionType[] { PermissionType.Add }
  116. ))) {
  117. VisualData = new ActionVisualizedData {
  118. Label = StringResourceSystemFacade.GetString("Composite.Plugins.XsltBasedFunction", "XsltBasedFunctionProviderElementProvider.Add"),
  119. ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.XsltBasedFunction", "XsltBasedFunctionProviderElementProvider.AddToolTip"),
  120. Icon = XsltBasedFunctionProviderElementProvider.AddFunction,
  121. Disabled = false,
  122. ActionLocation = new ActionLocation {
  123. ActionType = ActionType.Edit,
  124. IsInFolder = false,
  125. IsInToolbar = true,
  126. ActionGroup = PrimaryActionGroup
  127. }
  128. }
  129. }
  130. };
  131. }
  132. /// <exclude />
  133. protected override IEnumerable<ElementAction> OnGetFunctionActions(IFunctionTreeBuilderLeafInfo function)
  134. {
  135. return new ElementAction[]
  136. {
  137. new ElementAction(new ActionHandle(
  138. new WorkflowActionToken(
  139. WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.XsltBasedFunctionProviderElementProvider.EditXsltFunctionWorkflow"),
  140. new PermissionType[] { PermissionType.Edit }
  141. ))) {
  142. VisualData = new ActionVisualizedData {
  143. Label = StringResourceSystemFacade.GetString("Composite.Plugins.XsltBasedFunction", "XsltBasedFunctionProviderElementProvider.Edit"),
  144. ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.XsltBasedFunction", "XsltBasedFunctionProviderElementProvider.EditToolTip"),
  145. Icon = XsltBasedFunctionProviderElementProvider.EditFunction,
  146. Disabled = false,
  147. ActionLocation = new ActionLocation {
  148. ActionType = ActionType.Edit,
  149. IsInFolder = false,
  150. IsInToolbar = true,
  151. ActionGroup = PrimaryActionGroup
  152. }
  153. }
  154. },
  155. new ElementAction(new ActionHandle(
  156. new WorkflowActionToken(
  157. WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.XsltBasedFunctionProviderElementProvider.DeleteXsltFunctionWorkflow"),
  158. new PermissionType[] { PermissionType.Delete }
  159. ){Payload = GetContext().ProviderName})) {
  160. VisualData = new ActionVisualizedData {
  161. Label = StringResourceSystemFacade.GetString("Composite.Plugins.XsltBasedFunction", "XsltBasedFunctionProviderElementProvider.Delete"),
  162. ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.XsltBasedFunction", "XsltBasedFunctionProviderElementProvider.DeleteToolTip"),
  163. Icon = XsltBasedFunctionProviderElementProvider.DeleteFunction,
  164. Disabled = false,
  165. ActionLocation = new ActionLocation {
  166. ActionType = ActionType.Delete,
  167. IsInFolder = false,
  168. IsInToolbar = true,
  169. ActionGroup = PrimaryActionGroup
  170. }
  171. }
  172. }
  173. };
  174. }
  175. private sealed class XsltFunctionTreeBuilderLeafInfo : IFunctionTreeBuilderLeafInfo
  176. {
  177. private IXsltFunction _function;
  178. public XsltFunctionTreeBuilderLeafInfo(IXsltFunction function)
  179. {
  180. _function = function;
  181. }
  182. public string Name
  183. {
  184. get { return _function.Name; }
  185. }
  186. public string Namespace
  187. {
  188. get { return _function.Namespace; }
  189. }
  190. public EntityToken EntityToken
  191. {
  192. get { return _function.GetDataEntityToken(); }
  193. }
  194. }
  195. }
  196. [Assembler(typeof(XsltBasedFunctionProviderElementProviderAssembler))]
  197. internal sealed class XsltBasedFunctionProviderElementProviderData : HooklessElementProviderData
  198. {
  199. private const string _codeDomQueryResultProviderNameProperty = "XsltBasedFunctionProviderName";
  200. [ConfigurationProperty(_codeDomQueryResultProviderNameProperty, IsRequired = true)]
  201. public string XsltBasedFunctionProviderName
  202. {
  203. get { return (string)base[_codeDomQueryResultProviderNameProperty]; }
  204. set { base[_codeDomQueryResultProviderNameProperty] = value; }
  205. }
  206. }
  207. internal sealed class XsltBasedFunctionProviderElementProviderAssembler : IAssembler<IHooklessElementProvider, HooklessElementProviderData>
  208. {
  209. [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:ValidateArgumentsOfPublicMethods")]
  210. public IHooklessElementProvider Assemble(IBuilderContext context, HooklessElementProviderData objectConfiguration, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache)
  211. {
  212. XsltBasedFunctionProviderElementProviderData data = (XsltBasedFunctionProviderElementProviderData)objectConfiguration;
  213. return new XsltBasedFunctionProviderElementProvider(data.XsltBasedFunctionProviderName);
  214. }
  215. }
  216. }