public void RemoveItemFromFileTest() { CreateTestDirectoryAndFiles(); string test_text = "<text-remove file=\"test3.result.xml\" regex=\"bbb\"></text-remove>"; string xmlContent = "<test><t2>bbb</t2></test>"; ModifyTextFileRule modifyTextFileRule = new ModifyTextFileRule(); IFileManager fileManager = new LocalFileManager(TestDiretoryPath); using (FileStream fs = File.Create(TestFilePath)) { AddText(fs, test_text); fs.Flush(); fs.Close(); } using (FileStream fs = File.Create(TestXmlFilePath)) { AddText(fs, xmlContent); fs.Flush(); fs.Close(); } XPathDocument ruleXPathDoc = new XPathDocument(new StringReader(test_text)); XPathNavigator ruleFileNav = ruleXPathDoc.CreateNavigator().SelectSingleNode("/*"); FileRuleContext fileRuleContext = new FileRuleContext(TestFilePath, fileManager, ruleFileNav); modifyTextFileRule.Execute(fileRuleContext); Assert.AreEqual(false, File.ReadAllText(TestXmlFilePath).Contains("bbb")); }
public void InsertTextFileTest() { CreateTestDirectoryAndFiles(); string insertNode = "test1"; string test_text = "<text-insert file=\"test3.result.xml\" start=\"<test>\"><" + insertNode + "/></text-insert>"; string xmlContent = "<test><t2>bbb</t2></test>"; ModifyTextFileRule modifyTextFileRule = new ModifyTextFileRule(); IFileManager fileManager = new LocalFileManager(TestDiretoryPath); using (FileStream fs = File.Create(TestFilePath)) { AddText(fs, test_text); fs.Flush(); fs.Close(); } using (FileStream fs = File.Create(TestXmlFilePath)) { AddText(fs, xmlContent); fs.Flush(); fs.Close(); } XPathDocument ruleXPathDoc = new XPathDocument(new StringReader(test_text)); XPathNavigator ruleFileNav = ruleXPathDoc.CreateNavigator().SelectSingleNode("/*"); Console.WriteLine(ruleFileNav.LocalName); bool isMatched = modifyTextFileRule.IsMatch(ruleFileNav); Assert.AreEqual(true, isMatched); FileRuleContext fileRuleContext = new FileRuleContext(TestFilePath, fileManager, ruleFileNav); modifyTextFileRule.Execute(fileRuleContext); Assert.AreEqual(true, File.ReadAllText(TestXmlFilePath).Contains(insertNode)); Assert.AreEqual(true, IsNodeInXmlFile(TestXmlFilePath, insertNode)); DeleteTestDirectoryAndFiles(); }
public void ExecuteForFiles(string[] files) { var matchRuleFileNameRegex = new Regex(RuleFileNameRegexPattern, RegexOptions.Compiled | RegexOptions.Singleline); // sort files - processing order is defined Array.Sort <string>(files); IList <string> executionPlan = new List <string>(); // build execution plan foreach (string filePath in files) { string fName = Path.GetFileName(filePath); if (fName.Length > 0 && matchRuleFileNameRegex.IsMatch(fName)) { executionPlan.Add(Path.GetFullPath(filePath)); } } log.Write(LogEvent.Info, "Found {0} rule file(s)", executionPlan.Count); // stats IDictionary <IFileRule, int> counters = new Dictionary <IFileRule, int>(); foreach (var rule in Rules) { counters[rule] = 0; } // execute in exact order foreach (string ruleFile in executionPlan) { string fileContent = FileManager.Read(ruleFile); log.Write(LogEvent.Info, "Processing rule file: {0}", ruleFile); var ruleFileReadArgs = new FileRuleEventArgs(ruleFile, null); // raise event if (RuleFileReadStart != null) { RuleFileReadStart(this, ruleFileReadArgs); } Mvp.Xml.XInclude.XIncludingReader xmlIncludeContentRdr = new Mvp.Xml.XInclude.XIncludingReader(new StringReader(fileContent)); xmlIncludeContentRdr.XmlResolver = new FileManagerXmlResolver(FileManager, Path.GetDirectoryName(ruleFile)); XPathDocument ruleXPathDoc = new XPathDocument(xmlIncludeContentRdr); XPathNavigator ruleFileNav = ruleXPathDoc.CreateNavigator(); XPathNodeIterator ruleNavs = ruleFileNav.SelectSingleNode("rules") != null? ruleFileNav.Select("rules/*") : ruleFileNav.Select("*"); // raise event if (RuleFileReadEnd != null) { RuleFileReadEnd(this, ruleFileReadArgs); } foreach (XPathNavigator ruleNav in ruleNavs) { for (int i = 0; i < Rules.Length; i++) { if (Rules[i].IsMatch(ruleNav)) { var r = Rules[i]; // for now its hardcoded rule that handles XslTransformRule caching issue if (r is XslTransformFileRule) { ((XslTransformFileRule)r).TransformRule.CacheEnabled = false; } var ruleContext = new FileRuleContext(ruleFile, FileManager, ruleNav); if (RuleExecuting != null) { RuleExecuting(this, new FileRuleEventArgs(ruleFile, r)); } try { Rules[i].Execute(ruleContext); } catch (Exception ex) { throw new Exception(String.Format("Rule processing failed: {0} ({1})", ex.Message, ruleContext), ex); } if (RuleExecuted != null) { RuleExecuted(this, new FileRuleEventArgs(ruleFile, r)); } counters[Rules[i]]++; } } } } foreach (var rule in Rules) { log.Write(LogEvent.Info, "Applied {0} for {1} file(s)", rule, counters[rule]); } }
public void ExecuteForFiles(string[] files) { var matchRuleFileNameRegex = new Regex(RuleFileNameRegexPattern, RegexOptions.Compiled | RegexOptions.Singleline); // sort files - processing order is defined Array.Sort<string>(files); IList<string> executionPlan = new List<string>(); // build execution plan foreach (string filePath in files) { string fName = Path.GetFileName(filePath); if (fName.Length > 0 && matchRuleFileNameRegex.IsMatch(fName) ) { executionPlan.Add(Path.GetFullPath(filePath)); } } log.Write(LogEvent.Info, "Found {0} rule file(s)", executionPlan.Count); // stats IDictionary<IFileRule, int> counters = new Dictionary<IFileRule, int>(); foreach (var rule in Rules) counters[rule] = 0; // execute in exact order foreach (string ruleFile in executionPlan) { string fileContent = FileManager.Read(ruleFile); log.Write(LogEvent.Info, "Processing rule file: {0}", ruleFile); var ruleFileReadArgs = new FileRuleEventArgs(ruleFile, null); // raise event if (RuleFileReadStart != null) RuleFileReadStart(this, ruleFileReadArgs); Mvp.Xml.XInclude.XIncludingReader xmlIncludeContentRdr = new Mvp.Xml.XInclude.XIncludingReader(new StringReader(fileContent)); xmlIncludeContentRdr.XmlResolver = new FileManagerXmlResolver(FileManager, Path.GetDirectoryName(ruleFile)); XPathDocument ruleXPathDoc = new XPathDocument(xmlIncludeContentRdr); XPathNavigator ruleFileNav = ruleXPathDoc.CreateNavigator(); XPathNodeIterator ruleNavs = ruleFileNav.SelectSingleNode("rules")!=null ? ruleFileNav.Select("rules/*") : ruleFileNav.Select("*"); // raise event if (RuleFileReadEnd != null) RuleFileReadEnd(this, ruleFileReadArgs); foreach (XPathNavigator ruleNav in ruleNavs) { for (int i = 0; i < Rules.Length; i++) if (Rules[i].IsMatch(ruleNav)) { var r = Rules[i]; // for now its hardcoded rule that handles XslTransformRule caching issue if (r is XslTransformFileRule) ((XslTransformFileRule)r).TransformRule.CacheEnabled = false; var ruleContext = new FileRuleContext(ruleFile, FileManager, ruleNav); if (RuleExecuting != null) RuleExecuting(this, new FileRuleEventArgs(ruleFile, r)); try { Rules[i].Execute(ruleContext); } catch (Exception ex) { throw new Exception(String.Format("Rule processing failed: {0} ({1})", ex.Message, ruleContext), ex); } if (RuleExecuted != null) RuleExecuted(this, new FileRuleEventArgs(ruleFile, r)); counters[Rules[i]]++; } } } foreach (var rule in Rules) { log.Write(LogEvent.Info, "Applied {0} for {1} file(s)", rule, counters[rule]); } }