/// <summary> /// Applies the xml changes to this instance. /// </summary> /// <returns></returns> public Boolean Run() { //Add them in a specific order foreach (XmlAdd mod in file.Add) { mod.Value = RenderConfigEngine.ReplaceEnvironmentVariables(mod.Value); LogUtilities.LogKeyValue("TYPE", "ADD", 27, MessageImportance.High, log); LogModificationDetails(mod.xpath, mod.attribute, mod.Value, string.Empty, log); Add(mod); } foreach (XmlUpdate mod in file.Update) { mod.Value = RenderConfigEngine.ReplaceEnvironmentVariables(mod.Value); LogUtilities.LogKeyValue("TYPE", "UPDATE", 27, MessageImportance.High, log); LogModificationDetails(mod.xpath, string.Empty, mod.Value, string.Empty, log); Update(mod); } foreach (XmlReplace mod in file.Replace) { //HACK: This is not pretty...anytime I use out I swear a puppy dies somewhere... mod.Value = RenderConfigEngine.ReplaceEnvironmentVariables(mod.Value); LogUtilities.LogKeyValue("TYPE", "REPLACE", 27, MessageImportance.High, log); LogModificationDetails(string.Empty, string.Empty, mod.Value, mod.regex, log); int count = 0; document.LoadXml(RenderConfigEngine.RegExParseAndReplace(out count, mod.regex, mod.Value, document.OuterXml.ToString())); LogUtilities.LogCount(count, log); } foreach (XmlDelete mod in file.Delete) { LogUtilities.LogKeyValue("TYPE", "DELETE", 27, MessageImportance.High, log); LogModificationDetails(mod.xpath, string.Empty, mod.Value, string.Empty, log); Delete(mod); } //TODO: Make sure that we stamp the renderconfig data if required if (config.StampRenderData) { XmlComment comment = document.CreateComment("Test Comment"); document.FirstChild.AppendChild(comment); } //HACK Why oh why are XmlWriterSettings and XmlReaderSettings SOOO SIMILAR, and yet.... XmlWriterSettings writerSettings = GetXmlWriterSettings(config.CleanOutput, document); using (XmlWriter writer = XmlWriter.Create(targetFile, writerSettings)) { document.Save(writer); } //HACK BAD returnCode = true; return(returnCode); }
/// <summary> /// Applies the specified config by passing through each set of modifications (in order, deterministic). /// </summary> /// <param name="config">The config.</param> /// <param name="inputLog">The input log.</param> /// <returns></returns> public Boolean Apply(RenderConfigConfig config, IRenderConfigLogger inputLog) { log = inputLog; Boolean returnCode = true; foreach (XmlTargetFile file in TargetFiles.XML) { CheckAndModifySourceAndDestination(config, file); //If we arent doing anything else, we are doing a straight copy... if (file.Add == null & file.Delete == null && file.Update == null && file.Replace == null) { log.LogMessage(MessageImportance.High, "TYPE = ".PadLeft(27) + "substitute"); RenderConfigEngine.Substitute(file, config.OutputDirectory); } else { IFileModifier fileModifier = new XmlFileModifier(file, RenderConfigEngine.ResolveAndCopyDestinationFilename(file, config.OutputDirectory, true), log, config); fileModifier.Run(); } } foreach (IniTargetFile file in TargetFiles.INI) { CheckAndModifySourceAndDestination(config, file); //If we arent doing anything else, we are doing a straight copy... //TODO possibly add all these checks as a boolean get{} on the partial class..so if (file.IsSimpleCopy) if (file.Add == null & file.Delete == null && file.Update == null && file.Replace == null) { log.LogMessage(MessageImportance.High, "TYPE = ".PadLeft(27) + "substitute"); RenderConfigEngine.Substitute(file, config.OutputDirectory); } else { IFileModifier fileModifier = new IniFileModifier(file, RenderConfigEngine.ResolveAndCopyDestinationFilename(file, config.OutputDirectory, true), log, config); fileModifier.Run(); } } foreach (TxtTargetFile file in TargetFiles.TXT) { CheckAndModifySourceAndDestination(config, file); //If we arent doing anything else, we are doing a straight copy... if (file.Replace == null) { log.LogMessage(MessageImportance.High, "TYPE = ".PadLeft(27) + "substitute"); RenderConfigEngine.Substitute(file, config.OutputDirectory); } else { IFileModifier fileModifier = new TxtFileModifier(file, RenderConfigEngine.ResolveAndCopyDestinationFilename(file, config.OutputDirectory, true), log, config); fileModifier.Run(); } } return(returnCode); }
/// <summary> /// Runs this modification. /// </summary> /// <returns></returns> public bool Run() { if (config.StampRenderData) { //TODO: Nini doesnt seem to do comments for us, need to do this by hand. } //Add them in a specific order foreach (IniAdd mod in file.Add) { mod.Value = RenderConfigEngine.ReplaceEnvironmentVariables(mod.Value); LogUtilities.LogKeyValue("TYPE", "ADD", 27, MessageImportance.High, log); LogModificationDetails(mod.section, mod.key, mod.Value, string.Empty, log); Add(mod); } foreach (IniUpdate mod in file.Update) { mod.Value = RenderConfigEngine.ReplaceEnvironmentVariables(mod.Value); LogUtilities.LogKeyValue("TYPE", "Update", 27, MessageImportance.High, log); LogModificationDetails(mod.section, mod.key, mod.Value, string.Empty, log); Update(mod); } foreach (IniReplace mod in file.Replace) { mod.Value = RenderConfigEngine.ReplaceEnvironmentVariables(mod.Value); LogUtilities.LogKeyValue("TYPE", "ADD", 27, MessageImportance.High, log); LogModificationDetails(string.Empty, string.Empty, mod.Value, mod.regex, log); LogUtilities.LogCount(RenderConfigEngine.ReplaceTokenInFile(mod.regex, mod.Value, targetFile), log); } foreach (IniDelete mod in file.Delete) { LogUtilities.LogKeyValue("TYPE", "DELETE", 27, MessageImportance.High, log); LogModificationDetails(mod.section, mod.key, string.Empty, string.Empty, log); Delete(mod); } //HACK BAd returnCode = true; return(returnCode); }
public static Boolean RunAllConfigurations(RenderConfigConfig config, IRenderConfigLogger log) { Boolean returnBool = false; if (config.Configuration.Contains(",")) { string[] configs = config.Configuration.Split(','); foreach (string configToRun in configs) { RenderConfigConfig newConfig = (RenderConfigConfig)config.Clone(); newConfig.Configuration = configToRun; if (config.SubDirectoryEachConfiguration) { newConfig.OutputDirectory = Path.Combine(newConfig.OutputDirectory, configToRun); } RenderConfigEngine engine = new RenderConfigEngine(newConfig, log); returnBool = engine.Render(); } } else { if (config.SubDirectoryEachConfiguration) { if (!String.IsNullOrEmpty(config.OutputDirectory)) { config.OutputDirectory = Path.Combine(config.OutputDirectory, config.Configuration); } else { config.OutputDirectory = config.Configuration; } } RenderConfigEngine engine = new RenderConfigEngine(config, log); return(engine.Render()); } return(returnBool); }
/// <summary> /// Splits an XPath so that we can look to add a namespace. Although the method says intelligently, it wont be until someone rewrites this drivel. Tests pass though. /// </summary> /// <param name="xpath"> /// A <see cref="System.String"/> /// </param> /// <returns> /// A <see> /// <cref>System.String[]</cref> /// </see> /// </returns> static string[] SplitXPathIntelligently(string xpath) { //First we split the string, then looked for unmatched quotes string[] firstParse = xpath.Split('/'); List <string> returnList = new List <string>(); Boolean inTextBlock = false; string concat = string.Empty; foreach (string s in firstParse) { string varS = s; //If we find an unmatched set of quotes, we have to look at contatenating the preceding strings... if (varS.Contains("\'") && RenderConfigEngine.CharacterCountInString(varS, '\'') != 2) { if (!inTextBlock) { concat = string.Empty; inTextBlock = true; } else { varS = string.Concat(concat, "/", varS); inTextBlock = false; } } if (inTextBlock) { concat = string.Concat(concat, varS); } else { returnList.Add(varS); } } return(returnList.ToArray()); }
/// <summary> /// Runs this instance. /// </summary> /// <returns></returns> public bool Run() { int count = 0; foreach (IniReplace mod in file.Replace) { mod.Value = RenderConfigEngine.ReplaceEnvironmentVariables(mod.Value); LogUtilities.LogKeyValue("TYPE", "REPLACE", 27, MessageImportance.High, log); LogUtilities.LogKeyValue("REGEX", mod.regex, 27, MessageImportance.Normal, log); LogUtilities.LogKeyValue("VALUE", mod.Value, 27, MessageImportance.Normal, log); count = RenderConfigEngine.ReplaceTokenInFile(mod.regex, mod.Value, targetFile); LogUtilities.LogCount(count, log); } //TODO if (config.BreakOnNoMatch && count == 0) { return(false); } else { return(true); } }
public static Boolean RunAllConfigurations(RenderConfigConfig config, IRenderConfigLogger log) { Boolean returnBool = false; if (config.Configuration.Contains(",")) { string[] configs = config.Configuration.Split(','); foreach (string configToRun in configs) { RenderConfigConfig newConfig = (RenderConfigConfig)config.Clone(); newConfig.Configuration = configToRun; if (config.SubDirectoryEachConfiguration) { newConfig.OutputDirectory = Path.Combine(newConfig.OutputDirectory, configToRun); } RenderConfigEngine engine = new RenderConfigEngine(newConfig, log); returnBool = engine.Render(); } } else { if (config.SubDirectoryEachConfiguration) { if (!String.IsNullOrEmpty(config.OutputDirectory)) { config.OutputDirectory = Path.Combine(config.OutputDirectory, config.Configuration); } else { config.OutputDirectory = config.Configuration; } } RenderConfigEngine engine = new RenderConfigEngine(config, log); return engine.Render(); } return returnBool; }