Ejemplo n.º 1
0
        /// <summary>
        /// 新方法-加载所有规则
        /// </summary>
        public void LoadRules()
        {
            var files = Directory.GetFiles(config.RulefilesPath, "*.rule");

            if (files == null || files.Length == 0)
            {
                throw new Exception("rule文件不存在");
            }

            List <Region> regions  = new List <Region>();
            string        fileName = string.Empty;
            StringBuilder text     = new StringBuilder();

            files.ToList().ForEach(file =>
            {
                fileName     = Path.GetFileNameWithoutExtension(file);
                var fileText = File.ReadAllText(file);
                config.FileRegion[fileName] = RegionParser.ParseRegions(fileText.ToString());
                regions.AddRange(config.FileRegion[fileName]);
                text.AppendLine(fileText);
            });

            if (regions == null || regions.Count == 0)
            {
                throw new Exception("region不存在");
            }

            regions.ForEach(region =>
            {
                var rules = RuleParser.ParseRules(region.RegionContent);

                if (regions == null || regions.Count == 0)
                {
                    throw new Exception(string.Format("region '{0}' 无法找到rule", region.RegionName));
                }

                rules.ForEach(rule =>
                {
                    rule.RegionName = region.RegionName;
                });

                rules.ForEach(rule =>
                {
                    var key = string.Format("{0}.{1}", rule.RegionName, rule.RuleName);
                    config.RuleDefinations[key] = rule;
                });
            });
        }
        public void ParseMultipleRegions()
        {
            var parser = new RegionParser();

            var source = new StringBuilder();

            source.AppendLine(@"using System;");
            source.AppendLine(@"using System.Collections.Generic;");
            source.AppendLine(@"");
            source.AppendLine(@"namespace EntityFrameworkCore.Generator.Core.Tests");
            source.AppendLine(@"{");
            source.AppendLine(@"    public partial class User");
            source.AppendLine(@"    {");
            source.AppendLine(@"        public User()");
            source.AppendLine(@"        {");
            source.AppendLine(@"            #region Generated Initializes");
            source.AppendLine(@"            Created = DateTimeOffset.UtcNow;");
            source.AppendLine(@"            Updated = DateTimeOffset.UtcNow;");
            source.AppendLine(@"            UserRoles = new HashSet<UserRole>();");
            source.AppendLine(@"            #endregion");
            source.AppendLine(@"        }");
            source.AppendLine(@"");
            source.AppendLine(@"        #region Generated Properties");
            source.AppendLine(@"        public Guid Id { get; set; }");
            source.AppendLine(@"        public string EmailAddress { get; set; }");
            source.AppendLine(@"        public DateTimeOffset Created { get; set; }");
            source.AppendLine(@"        public DateTimeOffset Updated { get; set; }");
            source.AppendLine(@"        #endregion");
            source.AppendLine(@"");
            source.AppendLine(@"        #region Generated Relationships");
            source.AppendLine(@"        public virtual ICollection<UserRole> UserRoles { get; set; }");
            source.AppendLine(@"        #endregion");
            source.AppendLine(@"    }");
            source.AppendLine(@"}");


            var result = parser.ParseRegions(source.ToString());

            result.Should().NotBeNull();
            result.Count.Should().Be(3);

            var first = result.Values.First();

            first.Should().NotBeNull();
            first.Name.Should().Be("Generated Initializes");
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 原方法-加载所有规则
        /// </summary>
        public void LoadRules0()
        {
            var files = System.IO.Directory.GetFiles(config.RulefilesPath, "*.rule");

            if (files == null || files.Length == 0)
            {
                throw new Exception("rule文件不存在");
            }

            StringBuilder text = new StringBuilder();

            files.ToList().ForEach(file =>
            {
                var fileText = System.IO.File.ReadAllText(file);
                text.AppendLine(fileText);
            });

            List <Region> regions = RegionParser.ParseRegions(text.ToString());

            if (regions == null || regions.Count == 0)
            {
                throw new Exception("region不存在");
            }

            regions.ForEach(region =>
            {
                var rules = RuleParser.ParseRules(region.RegionContent);

                if (regions == null || regions.Count == 0)
                {
                    throw new Exception(string.Format("region '{0}' 无法找到rule", region.RegionName));
                }

                rules.ForEach(rule =>
                {
                    rule.RegionName = region.RegionName;
                });

                rules.ForEach(rule =>
                {
                    var key = string.Format("{0}.{1}", rule.RegionName, rule.RuleName);
                    config.RuleDefinations[key] = rule;
                });
            });
        }
Ejemplo n.º 4
0
        protected virtual void MergeOutput(string fullPath, string outputContent)
        {
            var outputRegions = RegionParser.ParseRegions(outputContent);

            var originalContent = File.ReadAllText(fullPath);
            var originalRegions = RegionParser.ParseRegions(originalContent);
            var originalBuilder = new StringBuilder(originalContent);

            int offset = 0;

            foreach (var pair in outputRegions)
            {
                var outputRegion = pair.Value;
                if (!originalRegions.TryGetValue(pair.Key, out var originalRegion))
                {
                    // log error
                    continue;
                }

                int startIndex    = originalRegion.StartIndex + offset;
                int beforeReplace = originalBuilder.Length;
                int length        = (originalRegion.EndIndex + offset) - startIndex;

                originalBuilder.Remove(startIndex, length);
                originalBuilder.Insert(startIndex, outputRegion.Content);

                int afterReplace = originalBuilder.Length;

                offset = offset + (afterReplace - beforeReplace);
            }

            var finalContent = originalBuilder.ToString();

            if (originalContent == finalContent)
            {
                return;
            }

            File.WriteAllText(fullPath, finalContent);
        }
        public void ParseRegions()
        {
            var parser = new RegionParser();

            var source = new StringBuilder();

            source.AppendLine(@"using System;");
            source.AppendLine(@"using System.Collections.Generic;");
            source.AppendLine(@"");
            source.AppendLine(@"namespace EntityFrameworkCore.Generator.Core.Tests");
            source.AppendLine(@"{");
            source.AppendLine(@"    public partial class User");
            source.AppendLine(@"    {");
            source.AppendLine(@"        #region Generated Properties");
            source.AppendLine(@"        public Guid Id { get; set; }");
            source.AppendLine(@"        #endregion");
            source.AppendLine(@"    }");
            source.AppendLine(@"}");


            var result = parser.ParseRegions(source.ToString());

            result.Should().NotBeNull();
            result.Count.Should().Be(1);

            var first = result.Values.First();

            first.Should().NotBeNull();
            first.Name.Should().Be("Generated Properties");

            var content = new StringBuilder();

            content.AppendLine(@"#region Generated Properties");
            content.AppendLine(@"        public Guid Id { get; set; }");
            content.AppendLine(@"        #endregion");

            first.Content.Should().Be(content.ToString());
        }
        public void ParseNestedRegions()
        {
            var parser = new RegionParser();

            var source = new StringBuilder();

            source.AppendLine(@"using System;");
            source.AppendLine(@"using System.Collections.Generic;");
            source.AppendLine(@"");
            source.AppendLine(@"namespace EntityFrameworkCore.Generator.Core.Tests");
            source.AppendLine(@"{");
            source.AppendLine(@"    public partial class User");
            source.AppendLine(@"    {");
            source.AppendLine(@"        #region Generated Properties");
            source.AppendLine(@"        public Guid Id { get; set; }");
            source.AppendLine(@"");
            source.AppendLine(@"        #region Nested Properties");
            source.AppendLine(@"        public string EmailAddress { get; set; }");
            source.AppendLine(@"        #endregion");
            source.AppendLine(@"");
            source.AppendLine(@"        #endregion");
            source.AppendLine(@"    }");
            source.AppendLine(@"}");


            var result = parser.ParseRegions(source.ToString());

            result.Should().NotBeNull();
            result.Count.Should().Be(2);

            var nested = result["Nested Properties"];

            nested.Should().NotBeNull();
            nested.Name.Should().Be("Nested Properties");

            var nestedContent = new StringBuilder();

            nestedContent.AppendLine(@"#region Nested Properties");
            nestedContent.AppendLine(@"        public string EmailAddress { get; set; }");
            nestedContent.AppendLine(@"        #endregion");

            nested.Content.Should().Be(nestedContent.ToString());

            var generated = result["Generated Properties"];

            generated.Should().NotBeNull();
            generated.Name.Should().Be("Generated Properties");

            var generatedContent = new StringBuilder();

            generatedContent.AppendLine(@"#region Generated Properties");
            generatedContent.AppendLine(@"        public Guid Id { get; set; }");
            generatedContent.AppendLine(@"");
            generatedContent.AppendLine(@"        #region Nested Properties");
            generatedContent.AppendLine(@"        public string EmailAddress { get; set; }");
            generatedContent.AppendLine(@"        #endregion");
            generatedContent.AppendLine(@"");
            generatedContent.AppendLine(@"        #endregion");

            generated.Content.Should().Be(generatedContent.ToString());
        }