PageRenderTime 43ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/CKS Developer Edition-VS2012/CKS.Dev.WCT/Mappers/FeatureMapper.cs

#
C# | 260 lines | 200 code | 55 blank | 5 comment | 22 complexity | cdfc13abf152aabbfca1a1f6a929986f MD5 | raw file
Possible License(s): CC-BY-SA-3.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Xml;
  5. using Microsoft.VisualStudio.SharePoint;
  6. using CKS.Dev.WCT.Common;
  7. using CKS.Dev.WCT.Resources;
  8. using CKS.Dev.WCT.SolutionModel;
  9. using CKS.Dev.WCT.ModelCreators;
  10. using Microsoft.VisualStudio.SharePoint.Features;
  11. using CKS.Dev.WCT.Framework.Extensions;
  12. using CKS.Dev.WCT.Extensions;
  13. using CKS.Dev.WCT.Framework.IO;
  14. using EnvDTE;
  15. namespace CKS.Dev.WCT.Mappers
  16. {
  17. class FeatureMapper
  18. {
  19. private IList<string> _associatedFiles = new List<string>();
  20. private IList<bool> _featureResults;
  21. private IList<XmlNode> PropertyNodes;
  22. public bool SplitOccured { get; set; }
  23. public WCTContext WCTContext { get; set; }
  24. public FeatureMapper(WCTContext context)
  25. {
  26. this.WCTContext = context;
  27. }
  28. public void Map()
  29. {
  30. foreach (FeatureDefinition feature in this.WCTContext.Solution.FeatureList)
  31. {
  32. try
  33. {
  34. this.MapFeature(feature);
  35. }
  36. catch (Exception ex)
  37. {
  38. Logger.LogError(String.Format(StringResources.Strings_Errors_MapFeature, feature.Name, ex.ToString()));
  39. }
  40. }
  41. }
  42. private void MapFeature(FeatureDefinition featureDef)
  43. {
  44. Logger.LogStatus(String.Format(StringResources.String_LogMessages_ImportingFeature, "Feature", featureDef.Name));
  45. ISharePointProjectFeature spFeature = CreateSPF(featureDef);
  46. VSItemMapper itemMapper = new VSItemMapper(this.WCTContext);
  47. itemMapper.CreateItems(featureDef, spFeature);
  48. }
  49. public ISharePointProjectFeature CreateSPF(FeatureDefinition featureDefinition)
  50. {
  51. ISharePointProjectFeature vsFeature = null;
  52. try
  53. {
  54. if (!string.IsNullOrEmpty(featureDefinition.Name))
  55. {
  56. // Create the feature
  57. // Create a safe name for the feature creation. It seems that there is a problem with to many . (dots)
  58. string safename = featureDefinition.Name.Replace(".", "_");
  59. vsFeature = this.WCTContext.SharePointProject.Features.Add(safename);
  60. // Change the name back to the original from the safename, if it has changed
  61. if (!safename.Equals(featureDefinition.Name))
  62. {
  63. // Correct the name
  64. ProjectItem folder = this.WCTContext.DteProject.ProjectItems.FindFolder(vsFeature.FullPath);
  65. folder.Name = featureDefinition.Name;
  66. }
  67. }
  68. else
  69. {
  70. vsFeature = this.WCTContext.SharePointProject.Features.Add();
  71. }
  72. Setup(featureDefinition, vsFeature.Model);
  73. if (featureDefinition.Classes != null)
  74. {
  75. foreach (ClassInformation classInfo in featureDefinition.Classes)
  76. {
  77. ProjectFile sourceFile = classInfo.File;
  78. if (!sourceFile.Used)
  79. {
  80. string targetPath = Path.Combine(vsFeature.FullPath, sourceFile.Info.Name);
  81. ProjectItem featureItem = this.WCTContext.DteProject.ProjectItems.FindFile(vsFeature.FeatureFile.FullPath);
  82. if (featureItem != null)
  83. {
  84. FileSystem.Copy(sourceFile.Info.FullName, targetPath);
  85. featureItem.ProjectItems.AddFromFile(targetPath);
  86. sourceFile.Used = true;
  87. }
  88. }
  89. }
  90. }
  91. }
  92. catch (Exception ex)
  93. {
  94. Logger.LogError(String.Format(
  95. StringResources.Strings_Errors_CreateFeature,
  96. featureDefinition.Name,
  97. ex.ToString()));
  98. }
  99. return vsFeature;
  100. }
  101. public void Setup(FeatureDefinition featureDef, IFeature vsFeature)
  102. {
  103. if (featureDef.ActivateOnDefaultSpecified)
  104. {
  105. vsFeature.ActivateOnDefault = TRUEFALSEExtensions.IsTrue(featureDef.ActivateOnDefault);
  106. }
  107. foreach (FeatureActivationDependencyDefinition def in featureDef.ActivationDependencies.AsSafeEnumable())
  108. {
  109. ICustomFeatureActivationDependency dep = vsFeature.ActivationDependencies.AddCustomFeatureActivationDependency();
  110. dep.FeatureDescription = def.FeatureDescription;
  111. if (!String.IsNullOrEmpty(def.SolutionId))
  112. {
  113. dep.FeatureId = new Guid(def.FeatureId);
  114. }
  115. dep.FeatureTitle = def.FeatureTitle;
  116. dep.MinimumVersion = new System.Version(def.MinimumVersion);
  117. dep.SolutionId = dep.SolutionId;
  118. dep.SolutionName = dep.SolutionName;
  119. dep.SolutionTitle = dep.SolutionTitle;
  120. dep.SolutionUrl = dep.SolutionUrl;
  121. }
  122. if (featureDef.AlwaysForceInstallSpecified)
  123. {
  124. vsFeature.AlwaysForceInstall = TRUEFALSEExtensions.IsTrue(featureDef.AlwaysForceInstall);
  125. }
  126. if (featureDef.AutoActivateInCentralAdminSpecified)
  127. {
  128. vsFeature.AutoActivateInCentralAdmin = TRUEFALSEExtensions.IsTrue(featureDef.AutoActivateInCentralAdmin);
  129. }
  130. vsFeature.Creator = featureDef.Creator;
  131. vsFeature.DefaultResourceFile = featureDef.DefaultResourceFile;
  132. //vsFeature.DeploymentPath = "$SharePoint.Feature.FileNameWithoutExtension$";
  133. vsFeature.Description = featureDef.Description;
  134. vsFeature.FeatureId = new Guid(featureDef.Id);
  135. vsFeature.ImageAltText = featureDef.ImageUrlAltText;
  136. if (!String.IsNullOrEmpty(featureDef.ImageUrl))
  137. {
  138. vsFeature.ImageUrl = new Uri(featureDef.ImageUrl, UriKind.RelativeOrAbsolute);
  139. }
  140. if (featureDef.HiddenSpecified)
  141. {
  142. vsFeature.IsHidden = TRUEFALSEExtensions.IsTrue(featureDef.Hidden);
  143. }
  144. foreach (FeaturePropertyDefinition def in featureDef.Properties.AsSafeEnumable())
  145. {
  146. IProperty prop = vsFeature.Properties.Add();
  147. prop.Key = def.Key;
  148. prop.Value = def.Value;
  149. }
  150. vsFeature.ReceiverAssembly = featureDef.ReceiverAssembly;
  151. vsFeature.ReceiverClass = featureDef.ReceiverClass;
  152. if (featureDef.RequireResourcesSpecified)
  153. {
  154. vsFeature.RequireResources = TRUEFALSEExtensions.IsTrue(featureDef.RequireResources);
  155. }
  156. Microsoft.VisualStudio.SharePoint.Features.FeatureScope featureScope = Microsoft.VisualStudio.SharePoint.Features.FeatureScope.Site;
  157. if (Enum.TryParse(featureDef.Scope.ToString(), out featureScope))
  158. {
  159. vsFeature.Scope = featureScope;
  160. }
  161. if (!String.IsNullOrEmpty(featureDef.SolutionId))
  162. {
  163. vsFeature.SolutionId = new Guid(featureDef.SolutionId);
  164. }
  165. vsFeature.Title = featureDef.Title;
  166. vsFeature.UIVersion = featureDef.UIVersion;
  167. if (featureDef.UpgradeActions != null)
  168. {
  169. featureDef.UpgradeActions.Setup(vsFeature);
  170. }
  171. }
  172. private string GetUniqueProjectPath(string projectRoot, string baseRelativePath, bool alwaysUseNumberSuffix)
  173. {
  174. int i = alwaysUseNumberSuffix ? 1 : 0;
  175. string relativePath = alwaysUseNumberSuffix ? baseRelativePath + i : baseRelativePath;
  176. string folder = Path.Combine(projectRoot, relativePath);
  177. while (Directory.Exists(folder))
  178. {
  179. i++;
  180. relativePath = baseRelativePath + i;
  181. folder = Path.Combine(projectRoot, relativePath);
  182. }
  183. return relativePath;
  184. }
  185. private string GetAbsolutePath(string relativePath)
  186. {
  187. string projectRootFolderPath = Path.GetDirectoryName(this.WCTContext.DteProject.FileName);
  188. string classRelativePath = relativePath;
  189. if (classRelativePath.StartsWith(@"\"))
  190. {
  191. classRelativePath = classRelativePath.Substring(1);
  192. }
  193. return Path.Combine(projectRootFolderPath, classRelativePath);
  194. }
  195. private string GetFullClassName(string fullClassName)
  196. {
  197. if (!this.WCTContext.SourceProject.IsCSharp
  198. && !string.IsNullOrEmpty(this.WCTContext.SourceProject.RootNamespace))
  199. {
  200. fullClassName = String.Format("{0}.{1}", this.WCTContext.SourceProject.RootNamespace, fullClassName);
  201. }
  202. return fullClassName;
  203. }
  204. }
  205. }