Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #5
0
        /// <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;
        }