private static SP.HtmlElement CreateHTMLNode(string NodeName, bool EmptyTag = false) { var Node = new SP.HtmlElement(); Node.Name = NodeName; Node.IsEmptyTag = EmptyTag; return Node; }
private SP.HtmlElement GetSettingWithKeyAndValue(SP.HtmlElement appSettings, string settingName, string settingValue) { return((from SP.HtmlElement item in appSettings.Nodes where item.Attributes["value"].Value == settingValue && item.Attributes["key"].Value == settingName select item).First()); }
private static SP.HtmlElement CreateHTMLNode(string NodeName, bool EmptyTag = false) { var Node = new SP.HtmlElement(); Node.Name = NodeName; Node.IsEmptyTag = EmptyTag; return(Node); }
private SP.HtmlElement GetAppSettings(SP.HtmlElement RootNode) { var TopLevelNodes = from SP.HtmlElement item in RootNode.Nodes select item; var AppSettings = (from SP.HtmlElement item in TopLevelNodes where item.Name == "appSettings" select item).FirstOrDefault(); return(AppSettings); }
private void ConvertStringToAppSetting_Execute(Object sender, ApplyContentEventArgs ea) { TextDocument CodeDoc = CodeRush.Documents.ActiveTextDocument; using (CodeDoc.NewCompoundAction("Extract to App.config setting")) { ProjectElement ActiveProject = CodeRush.Source.ActiveProject; PrimitiveExpression StringLiteral = ea.Element as PrimitiveExpression; // Ensure App.config string BasePath = System.IO.Path.GetDirectoryName(ActiveProject.FilePath); string Filename = BasePath + "\\App.Config"; TextDocument configDoc = CodeRush.Documents.GetTextDocument(Filename); if (configDoc == null) { // Open configDoc configDoc = (TextDocument)CodeRush.File.Activate(Filename); } if (configDoc == null) { // Create configDoc string DefaultSettings = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><configuration></configuration>"; CodeRush.File.WriteTextFile(Filename, DefaultSettings); CodeRush.Project.AddFile(ActiveProject, Filename); configDoc = (TextDocument)CodeRush.File.Activate(Filename); } //Ensure RootNode SP.HtmlElement RootNode = (SP.HtmlElement)configDoc.FileNode.Nodes[1]; // Get appSettings node SP.HtmlElement AppSettings = GetAppSettings(RootNode); if (AppSettings == null) { AppSettings = CreateHTMLNode("appSettings"); RootNode.AddNode(AppSettings); RewriteNodeInDoc(RootNode, configDoc); RootNode = (SP.HtmlElement)configDoc.FileNode.Nodes[1]; AppSettings = GetAppSettings(RootNode); } // Generate a new setting... Add it to correct location in App.config. string SettingValue = (string)StringLiteral.PrimitiveValue; string SettingName = SettingValue.Replace(" ", ""); SP.HtmlElement SettingNode = CreateSettingNode(SettingName, SettingValue); AppSettings.AddNode(SettingNode); RewriteNodeInDoc(AppSettings, configDoc); // Add reference to System.Configuration dll. CodeRush.Project.AddReference(ActiveProject, "System.Configuration.dll"); // Replace Literal with reference to setting through Configuration manager string Code = String.Format("System.Configuration.ConfigurationManager.AppSettings[\"{0}\"]", SettingName); var NewCodeRange = CodeDoc.SetText(StringLiteral.Range, Code); CodeDoc.ParseIfTextChanged(); CodeDoc.ParseIfNeeded(); var SourceNode = CodeDoc.GetNodeAt(NewCodeRange.Start); // Find Newly created Setting configDoc.ParseIfTextChanged(); configDoc.ParseIfNeeded(); RootNode = (SP.HtmlElement)configDoc.FileNode.Nodes[1]; AppSettings = GetAppSettings(RootNode); SettingNode = GetSettingWithKeyAndValue(AppSettings, SettingName, SettingValue); // Link Code and Setting. var LinkSet = CodeRush.LinkedIdentifiers.NewMultiDocumentContainer(); SourceRange StringRange = (SourceNode.Parent.Parent.Parent.Parent.DetailNodes[0] as LanguageElement).Range; SourceRange CodeSourceRange = new SourceRange(StringRange.Start.OffsetPoint(0, 1), StringRange.End.OffsetPoint(0, -1)); LinkSet.Add(new FileSourceRange(CodeDoc.FileNode, CodeSourceRange)); LinkSet.Add(new FileSourceRange(configDoc.FileNode, SettingNode.Attributes["key"].ValueRange)); CodeRush.LinkedIdentifiers.Invalidate(configDoc); CodeDoc.Activate(); CodeRush.LinkedIdentifiers.Invalidate(CodeDoc); CodeRush.Selection.SelectRange(CodeSourceRange); configDoc.ParseIfTextChanged(); configDoc.ParseIfNeeded(); } }