PageRenderTime 51ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/CKS Developer Edition-VS2012/CKS.Dev.WCT/ModelCreators/FeatureCreator.cs

#
C# | 290 lines | 202 code | 64 blank | 24 comment | 36 complexity | d3848e9e0f8ec9213a47fa7c14b77f97 MD5 | raw file
Possible License(s): CC-BY-SA-3.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using Microsoft.VisualStudio.SharePoint;
  7. using CKS.Dev.WCT.Framework.Extensions;
  8. using CKS.Dev.WCT.SolutionModel;
  9. using CKS.Dev.WCT.Extensions;
  10. using CKS.Dev.WCT.Framework.IO;
  11. namespace CKS.Dev.WCT.ModelCreators
  12. {
  13. public class FeatureCreator
  14. {
  15. #region Properties
  16. public WCTContext WCTContext { get; set; }
  17. #endregion
  18. public FeatureCreator(WCTContext context)
  19. {
  20. this.WCTContext = context;
  21. }
  22. //[System.Xml.Serialization.XmlElementAttribute("ContentType", typeof(ContentTypeDefinition))]
  23. //[System.Xml.Serialization.XmlElementAttribute("ContentTypeBinding", typeof(ContentTypeBindingDefinition))]
  24. //[System.Xml.Serialization.XmlElementAttribute("Control", typeof(DelegateControlDefinition))]
  25. //[System.Xml.Serialization.XmlElementAttribute("CustomAction", typeof(CustomActionDefinition))]
  26. //[System.Xml.Serialization.XmlElementAttribute("CustomActionGroup", typeof(CustomActionGroupDefinition))]
  27. //[System.Xml.Serialization.XmlElementAttribute("DocumentConverter", typeof(DocumentConverterDefinition))]
  28. //[System.Xml.Serialization.XmlElementAttribute("FeatureSiteTemplateAssociation", typeof(FeatureSiteTemplateAssociationDefinition))]
  29. //[System.Xml.Serialization.XmlElementAttribute("Field", typeof(SharedFieldDefinition))]
  30. //[System.Xml.Serialization.XmlElementAttribute("GroupMigrator", typeof(GroupMigratorDefinition))]
  31. //[System.Xml.Serialization.XmlElementAttribute("HideCustomAction", typeof(HideCustomActionDefinition))]
  32. //[System.Xml.Serialization.XmlElementAttribute("ListInstance", typeof(ListInstanceDefinition))]
  33. //[System.Xml.Serialization.XmlElementAttribute("ListTemplate", typeof(ListTemplateDefinition))]
  34. //[System.Xml.Serialization.XmlElementAttribute("Module", typeof(ModuleDefinition))]
  35. //[System.Xml.Serialization.XmlElementAttribute("PropertyBag", typeof(PropertyBagDefinition))]
  36. //[System.Xml.Serialization.XmlElementAttribute("Receivers", typeof(ReceiverDefinitionCollection))]
  37. //[System.Xml.Serialization.XmlElementAttribute("UserMigrator", typeof(UserMigratorDefinition))]
  38. //[System.Xml.Serialization.XmlElementAttribute("WebPartAdderExtension", typeof(WebPartAdderExtensionDefinition))]
  39. //[System.Xml.Serialization.XmlElementAttribute("WebTemplate", typeof(WebTemplateDefinition))]
  40. //[System.Xml.Serialization.XmlElementAttribute("Workflow", typeof(WorkflowDefinition))]
  41. //[System.Xml.Serialization.XmlElementAttribute("WorkflowActions", typeof(WorkflowActionsDefinition))]
  42. //[System.Xml.Serialization.XmlElementAttribute("WorkflowAssociation", typeof(WorkflowAssociationDefinition))]
  43. public void AddVSSharePointItems(FeatureDefinition feature, FileInfo info)
  44. {
  45. ElementDefinitionCollection elementDefintion = FileSystem.Load<ElementDefinitionCollection>(info.FullName);
  46. elementDefintion.SourceFileInfo = info;
  47. foreach (object item in elementDefintion.Items)
  48. {
  49. VSSharePointItem vsItem = Create(feature, elementDefintion, item);
  50. if (vsItem != null)
  51. {
  52. feature.SharePointItems.Add(vsItem);
  53. }
  54. }
  55. foreach (var entry in elementDefintion.GenericItems)
  56. {
  57. string typeName = entry.Key;
  58. if (entry.Value.Count > 0)
  59. {
  60. VSGenericItem vsItem = new VSGenericItem(feature);
  61. vsItem.Items = entry.Value;
  62. Type type = vsItem.Items[0].GetType();
  63. vsItem.Name = feature.Name + " " + type.Name;
  64. feature.SharePointItems.Add(vsItem);
  65. }
  66. }
  67. ProjectFile projFile = this.WCTContext.SourceProject.Files.GetValue(info.FullName);
  68. if (projFile != null)
  69. {
  70. projFile.Used = true;
  71. projFile.Referenced = true;
  72. }
  73. }
  74. private VSSharePointItem Create(FeatureDefinition feature, ElementDefinitionCollection elementDefintion, object item)
  75. {
  76. VSSharePointItem result = null;
  77. if (result == null && item is ModuleDefinition)
  78. {
  79. result = ProcessModuleDefinition(feature, (ModuleDefinition)item);
  80. }
  81. if (result == null && item is ContentTypeDefinition)
  82. {
  83. result = ProcessContentTypeDefinition(feature, (ContentTypeDefinition)item);
  84. }
  85. if (result == null && item is ReceiverDefinitionCollection)
  86. {
  87. result = ProcessReceiversDefinition(feature, (ReceiverDefinitionCollection)item);
  88. }
  89. if (result == null && item is ListTemplateDefinition)
  90. {
  91. result = ProcessListDefinition(feature, elementDefintion, (ListTemplateDefinition)item);
  92. }
  93. if (result == null && item is ListInstanceDefinition)
  94. {
  95. result = ProcessListInstance(feature, (ListInstanceDefinition)item);
  96. }
  97. if (result == null && item is WorkflowDefinition)
  98. {
  99. result = ProcessWorkflowDefinition(feature, (WorkflowDefinition)item);
  100. }
  101. if (result == null)
  102. {
  103. result = ProcessGenericDefinition(feature, elementDefintion, item);
  104. }
  105. return result;
  106. }
  107. private VSSharePointItem ProcessModuleDefinition(FeatureDefinition feature, ModuleDefinition module)
  108. {
  109. VSSharePointItem result = null;
  110. if (module.List == 113 || "_catalogs/wp".EqualsIgnoreCase(module.Url))
  111. {
  112. result = AddElementWebPart(feature, module);
  113. }
  114. else
  115. {
  116. result = AddElementModule(feature, module);
  117. }
  118. return result;
  119. }
  120. private VSSharePointItem AddElementWebPart(FeatureDefinition feature, ModuleDefinition module)
  121. {
  122. VSWebPartItem vsItem = new VSWebPartItem(feature);
  123. vsItem.Module = module;
  124. foreach (FileDefinition fileDef in module.File.AsSafeEnumable())
  125. {
  126. string filename = (String.IsNullOrWhiteSpace(fileDef.Path)) ? fileDef.Url : fileDef.Path;
  127. fileDef.LocalPath = Path.Combine(module.Path.EnsureString(), filename);
  128. fileDef.Filename = Path.Combine(feature.SourceFolder, fileDef.LocalPath);
  129. fileDef.ParseWebPart(this.WCTContext.SourceProject);
  130. vsItem.AddProjectFile(this.WCTContext, fileDef.Filename, fileDef.LocalPath);
  131. // Add the class file to this Item
  132. if (fileDef.Classes != null)
  133. {
  134. foreach (ClassInformation classInfo in fileDef.Classes)
  135. {
  136. if (!classInfo.File.Used)
  137. {
  138. vsItem.AddProjectFile(this.WCTContext, classInfo.File.Info.FullName, DeploymentType.NoDeployment);
  139. vsItem.Classes.Add(classInfo);
  140. }
  141. }
  142. }
  143. }
  144. return vsItem;
  145. }
  146. private VSSharePointItem AddElementModule(FeatureDefinition feature, ModuleDefinition module)
  147. {
  148. VSModuleItem vsItem = new VSModuleItem(feature);
  149. vsItem.Module = module;
  150. foreach (FileDefinition fileDef in module.File.AsSafeEnumable())
  151. {
  152. string filename = (String.IsNullOrWhiteSpace(fileDef.Path)) ? fileDef.Url : fileDef.Path;
  153. fileDef.LocalPath = Path.Combine(module.Path.EnsureString(), filename);
  154. fileDef.Filename = Path.Combine(feature.SourceFolder, fileDef.LocalPath);
  155. vsItem.AddProjectFile(this.WCTContext, fileDef.Filename, fileDef.LocalPath);
  156. }
  157. return vsItem;
  158. }
  159. private VSSharePointItem ProcessContentTypeDefinition(FeatureDefinition feature, ContentTypeDefinition ct)
  160. {
  161. VSContentTypeItem vsItem = new VSContentTypeItem(feature);
  162. vsItem.ContentType = ct;
  163. return vsItem;
  164. }
  165. private VSSharePointItem ProcessReceiversDefinition(FeatureDefinition feature, ReceiverDefinitionCollection receiver)
  166. {
  167. VSEventHandlerItem vsItem = new VSEventHandlerItem(feature, receiver);
  168. foreach (ReceiverDefinition def in vsItem.Receivers.Receiver)
  169. {
  170. ClassInformationCollection classes = this.WCTContext.SourceProject.Classes.GetValue(def.Class);
  171. foreach (ClassInformation classInfo in classes)
  172. {
  173. if (classInfo != null && !classInfo.File.Used)
  174. {
  175. vsItem.AddProjectFile(this.WCTContext, classInfo.File.Info.FullName, DeploymentType.NoDeployment);
  176. }
  177. }
  178. }
  179. return vsItem;
  180. }
  181. private VSSharePointItem ProcessListDefinition(FeatureDefinition feature, ElementDefinitionCollection elementDefintion, ListTemplateDefinition listTemplateDef)
  182. {
  183. VSListDefinitionItem vsItem = new VSListDefinitionItem(feature, listTemplateDef);
  184. string path = Path.Combine(feature.SourceFolder, listTemplateDef.Name);
  185. if (Directory.Exists(path))
  186. {
  187. DirectoryInfo dir = new DirectoryInfo(path);
  188. foreach (var file in dir.GetFiles(this.WCTContext, "*", SearchOption.AllDirectories))
  189. {
  190. //string localName = file.GetLocalName(feature.SourceFolder);
  191. //string filePath = Path.Combine(Path.GetDirectoryName(elementDefintion.SourceFileInfo.DirectoryName), file.Name);
  192. vsItem.AddProjectFile(this.WCTContext, file.FullName);
  193. }
  194. }
  195. return vsItem;
  196. }
  197. private VSSharePointItem ProcessListInstance(FeatureDefinition feature, ListInstanceDefinition listInstance)
  198. {
  199. VSListInstanceItem vsItem = new VSListInstanceItem(feature, listInstance);
  200. return vsItem;
  201. }
  202. private VSSharePointItem ProcessWorkflowDefinition(FeatureDefinition feature, WorkflowDefinition workflow)
  203. {
  204. VSWorkflowItem vsItem = new VSWorkflowItem(feature, workflow);
  205. vsItem.AddCodeFile(this.WCTContext, vsItem.Workflow.CodeBesideClass);
  206. vsItem.AddCodeFile(this.WCTContext, vsItem.Workflow.EngineClass);
  207. return vsItem;
  208. }
  209. private VSSharePointItem ProcessGenericDefinition(FeatureDefinition feature, ElementDefinitionCollection elementDefintion, object item)
  210. {
  211. string name = item.GetType().FullName;
  212. List<object> list = null;
  213. if (elementDefintion.GenericItems.ContainsKey(name))
  214. {
  215. list = elementDefintion.GenericItems[name];
  216. }
  217. else
  218. {
  219. list = new List<object>();
  220. elementDefintion.GenericItems.Add(name, list);
  221. }
  222. list.Add(item);
  223. return null;
  224. }
  225. }
  226. }