Esempio n. 1
0
 public void OnRuleExecuting(object sender, FileRuleEventArgs e)
 {
     if (RuleDependencies.ContainsKey(e.RuleFileName)) {
         // because one file may contain more than one rule, lets just accumulate all deps
         //RuleDependencies[e.RuleFileName].Clear();
     } else {
         RuleDependencies[e.RuleFileName] = new RuleDepInfo();
         RuleDependencies[e.RuleFileName].Uses.Add(e.RuleFileName);
     }
     CurrentRule = e;
 }
Esempio n. 2
0
 public void OnRuleExecuting(object sender, FileRuleEventArgs e)
 {
     if (RuleDependencies.ContainsKey(e.RuleFileName))
     {
         // because one file may contain more than one rule, lets just accumulate all deps
         //RuleDependencies[e.RuleFileName].Clear();
     }
     else
     {
         RuleDependencies[e.RuleFileName] = new RuleDepInfo();
         RuleDependencies[e.RuleFileName].Uses.Add(e.RuleFileName);
     }
     CurrentRule = e;
 }
Esempio n. 3
0
 public void OnRuleExecuted(object sender, FileRuleEventArgs e)
 {
     CurrentRule = null;
 }
Esempio n. 4
0
 public void OnRuleExecuted(object sender, FileRuleEventArgs e)
 {
     CurrentRule = null;
 }
Esempio n. 5
0
        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]);
            }
        }