コード例 #1
0
        /// <summary> Converts the properties to sql. </summary>
        /// <param name="instance"> The properties. </param>
        /// <returns> The given data converted to a sql. </returns>
        public QueryBuilder ConvertToSql(object instance)
        {
            var flattener  = new Flattener();
            var properties = flattener.GetPropertiesWithDefaultValues <KeyAttribute>(instance);

            return(ConvertToSql(properties));
        }
コード例 #2
0
        internal void DeleteSecurityGroup(SecurityContext context, int groupId)
        {
            // delete from Groups
            SecurityGroup group;

            if (this.Groups.TryGetValue(groupId, out group))
            {
                // getting support lists
                var allUsers   = Flattener.GetAllUserIds(group);
                var allParents = Flattener.GetAllParentGroupIdsInclusive(group);

                // remove references
                foreach (var g in group.Groups)
                {
                    g.ParentGroups.Remove(group);
                }
                foreach (var g in group.ParentGroups)
                {
                    g.Groups.Remove(group);
                }
                this.Groups.Remove(groupId);

                // refresh flattening with support lists
                Flattener.DeleteGroup(group, allUsers, allParents, this.Groups, this.Membership);
            }

            // delete Aces & emtpy Acls
            SecurityEntity.RemoveIdentityRelatedAces(context, groupId);
        }
コード例 #3
0
ファイル: FlattenArrayTest.cs プロジェクト: felix91gr/csharp
    public void Flattens_6_Level_Nested_List()
    {
        var nestedList = new List <object>
        {
            1,
            new List <object>
            {
                2,
                new List <object> {
                    new List <object> {
                        3
                    }
                },
                new List <object> {
                    4, new List <object> {
                        new List <object> {
                            5
                        }
                    }
                },
                6,
                7
            },
            8
        };

        Assert.Equal(new List <int> {
            1, 2, 3, 4, 5, 6, 7, 8
        }, Flattener.Flatten(nestedList).Cast <int>());
    }
コード例 #4
0
ファイル: FlattenArrayTest.cs プロジェクト: felix91gr/csharp
    public void Flattens_5_Level_Nested_List()
    {
        var nestedList = new List <object>
        {
            0,
            2,
            new List <object>
            {
                new List <object> {
                    2, 3
                },
                8,
                100,
                4,
                new List <object> {
                    new List <object> {
                        new List <object> {
                            50
                        }
                    }
                },
                -2
            }
        };

        Assert.Equal(new List <int> {
            0, 2, 2, 3, 8, 100, 4, 50, -2
        }, Flattener.Flatten(nestedList).Cast <int>());
    }
コード例 #5
0
    public void Flattens_6_Level_Nested_List()
    {
        var nestedList = new List <object>
        {
            1,
            new List <object>
            {
                2,
                new List <object> {
                    new List <object> {
                        3
                    }
                },
                new List <object> {
                    4, new List <object> {
                        new List <object> {
                            5
                        }
                    }
                },
                6,
                7
            },
            8
        };

        Assert.That(Flattener.Flatten(nestedList), Is.EquivalentTo(new List <object> {
            1, 2, 3, 4, 5, 6, 7, 8
        }));
    }
コード例 #6
0
    public void Flattens_5_Level_Nested_List()
    {
        var nestedList = new List <object>
        {
            0,
            2,
            new List <object>
            {
                new List <object> {
                    2, 3
                },
                8,
                100,
                4,
                new List <object> {
                    new List <object> {
                        new List <object> {
                            50
                        }
                    }
                },
                -2
            }
        };

        Assert.That(Flattener.Flatten(nestedList), Is.EquivalentTo(new List <object> {
            0, 2, 2, 3, 8, 100, 4, 50, -2
        }));
    }
コード例 #7
0
ファイル: FlattenerNode.cs プロジェクト: NeoCodeMode/Kebler
 private void ReplaceWith(FlattenerNode node)
 {
     if (_Parent != null)
     {
         if (_Parent._left == this)
         {
             _Parent._left = node;
         }
         else
         {
             _Parent._right = node;
         }
         if (node != null)
         {
             node._Parent = _Parent;
         }
         _Parent = null;
     }
     else
     {
         node._Parent = null;
         if (_treeFlattener == null)
         {
             return;
         }
         node._treeFlattener       = _treeFlattener;
         _treeFlattener            = null;
         node._treeFlattener._root = node;
     }
 }
コード例 #8
0
 public void DebugTest()
 {
     using (var originalStream = GetMergerTestFileStreamByFileName("onlv.xsd"))
     {
         var merger = new SimpleMerger(originalStream, GetMergerTestFileStreamByFileName);
         using (var mergeResult = merger.MergeSchemas())
         {
             var flattener       = new Flattener(mergeResult);
             var groupsToFlatten = new List <string>
             {
                 "ontext.Inline.mix",
                 "ontext.Inline.class",
                 "ontext.InlPres.class",
                 "ontext.List.class",
                 "ontext.Flow.mix",
                 "ontext.Block.class",
                 "ontext.BlkSpecial.class",
                 "ontext.Table.class",
             };
             using (var flattenedresult = flattener.FlattenGroups(groupsToFlatten))
             {
                 using (var strmRdr = new StreamReader(flattenedresult))
                 {
                     var text = strmRdr.ReadToEnd();
                     Assert.False(string.IsNullOrWhiteSpace(text));
                 }
             }
         }
     }
 }
コード例 #9
0
        public void NonIntElementsThrow()
        {
            var array = new dynamic[] { 1, "2" };

            var sut = new Flattener();

            Assert.Throws <InvalidOperationException>(() => sut.Flatten(array));
        }
コード例 #10
0
    public void Flattens_A_Nested_List()
    {
        var nestedList = new List <object> {
            new List <object>()
        };

        Assert.That(Flattener.Flatten(nestedList), Is.Empty);
    }
コード例 #11
0
        /// <summary> Updates the builder described by item. </summary>
        /// <param name="item"> The item. </param>
        /// <returns> . </returns>
        public Persist Update(object item, string name = null)
        {
            var flattener = new Flattener();
            var values    = flattener.GetNamesAndValues(item);
            var tableName = name ?? item.GetType().Name;

            return(Update(tableName, item, values));
        }
コード例 #12
0
        // We don't want to run this one often since it adds an extra 7-8 seconds to the test run
        public void LargeNumberOfElementsGetsProcessed()
        {
            var expected = new int[10000000];

            var sut    = new Flattener();
            var result = sut.Flatten(expected);

            Assert.Equal(expected, result);
        }
コード例 #13
0
        public void ShouldBeFlattenCorrectly()
        {
            var input    = Input();
            var expected = Expected();

            SourceNode result = new Flattener(input).Do();

            SourceNodeEqualityAsserter.AssertNode(expected, result);
        }
コード例 #14
0
ファイル: Program.cs プロジェクト: poizan42/ManagedNtApi
        static void Main(string[] args)
        {
            //Console.ReadLine();
              try
              {
            var argumentOptions = new HashSet<string>(new string[] { "-out" });
            Dictionary<string, string> options;
            List<string> positional;
            ParseArgs(args, argumentOptions, out options, out positional);
            string sourceFile = positional[0];
            bool is64Bit = options.ContainsKey("-64");

            TextWriter outWriter;
            string outFile;
            var version = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);

            Console.WriteLine("StructFlattener v. " + version.ProductVersion);
            Console.WriteLine("Input file: {0}, source files: {1}", sourceFile,
              String.Join(", ", positional.Skip(1)));
            if (options.TryGetValue("-out", out outFile))
            {
              DateTime thisTime = File.GetLastWriteTimeUtc(Assembly.GetExecutingAssembly().Location);
              DateTime dstTime = DateTime.MinValue;
              if (File.Exists(outFile))
            dstTime = File.GetLastWriteTimeUtc(outFile);
              DateTime srcTime = File.GetLastWriteTimeUtc(sourceFile);
              if (dstTime >= srcTime && dstTime >= thisTime && !options.ContainsKey("-force"))
              {
            Console.WriteLine("File already up to date (use -force to override)");
            return;
              }
              outWriter = new StreamWriter(outFile, false);
            }
            else
              outWriter = Console.Out;

            Flattener flattener = new Flattener(sourceFile, is64Bit);

            for (int i = 1; i < positional.Count; i++)
              flattener.AddFile(positional[i]);

            string code = flattener.FlattenStructsInFile();
            outWriter.WriteLine("// Generated by StructFlattener v. " + version.ProductVersion);
            outWriter.WriteLine("// Based on " + sourceFile);
            outWriter.WriteLine("// Commandline: " + Environment.CommandLine);
            outWriter.WriteLine("// CHANGES TO THIS FILE WILL BE LOST. Modify the input file, or improve StructFlattener if necessary. ");
            outWriter.WriteLine(is64Bit ? "#if X64" : "#if X86");
            outWriter.WriteLine(code);
            outWriter.WriteLine("#endif");
            outWriter.Flush();
              }
              catch (Exception e)
              {
            Console.WriteLine(e);
              }
        }
コード例 #15
0
        public void NestedElements()
        {
            var array    = new dynamic[] { 1, 2, new dynamic[] { 3, 6, new[] { 7, 7, 7 } }, 4, 5 };
            var expected = new[] { 1, 2, 3, 6, 7, 7, 7, 4, 5 };

            var sut    = new Flattener();
            var result = sut.Flatten(array);

            Assert.Equal(expected, result);
        }
コード例 #16
0
        public void EmptyArray()
        {
            var array    = new int[0];
            var expected = new int[0];

            var sut    = new Flattener();
            var result = sut.Flatten(array);

            Assert.Equal(expected, result);
        }
コード例 #17
0
        public void SingleAndMultiElements()
        {
            var array    = new dynamic[] { 1, 2, new[] { 3, 6 }, 4, 5 };
            var expected = new[] { 1, 2, 3, 6, 4, 5 };

            var sut    = new Flattener();
            var result = sut.Flatten(array);

            Assert.Equal(expected, result);
        }
コード例 #18
0
        public void SingleElementsOnly()
        {
            var array    = new int[] { 1, 2, 3, 4, 5 };
            var expected = new int[] { 1, 2, 3, 4, 5 };

            var sut    = new Flattener();
            var result = sut.Flatten(array);

            Assert.Equal(expected, result);
        }
コード例 #19
0
        public void EmptyArrayElementsInMiddle()
        {
            var array    = new dynamic[] { 1, 2, new string[] {}, 4, 5 };
            var expected = new[] { 1, 2, 4, 5 };

            var sut    = new Flattener();
            var result = sut.Flatten(array);

            Assert.Equal(expected, result);
        }
コード例 #20
0
        internal void RemoveMembers(int groupId, IEnumerable <int> groupIds, IEnumerable <int> userIds, IEnumerable <int> parentGroupIds)
        {
            SecurityGroup group;

            if (!this.Groups.TryGetValue(groupId, out group))
            {
                return;
            }


            if (userIds != null)
            {
                foreach (var userId in userIds)
                {
                    group.UserMemberIds.Remove(userId);
                    Flattener.RemoveUserFromGroup(userId, group, this.Membership, this.Groups);
                }
            }


            // support list for refreshing flattened membership
            List <int> allUsers;
            List <int> allParents;

            if (groupIds != null)
            {
                var memberGroups = group.Groups.Where(x => groupIds.Contains(x.Id)).ToArray();
                foreach (var memberGroup in memberGroups)
                {
                    allUsers   = Flattener.GetAllUserIds(memberGroup);
                    allParents = Flattener.GetAllParentGroupIdsInclusive(memberGroup);

                    memberGroup.ParentGroups.Remove(group);
                    group.Groups.Remove(memberGroup);

                    // refresh flattening
                    Flattener.DeleteGroup(memberGroup, allUsers, allParents, this.Groups, this.Membership);
                }
            }
            if (parentGroupIds != null)
            {
                var parentGroups = group.ParentGroups.Where(x => parentGroupIds.Contains(x.Id)).ToArray();
                foreach (var parentGroup in parentGroups)
                {
                    allUsers   = Flattener.GetAllUserIds(parentGroup);
                    allParents = Flattener.GetAllParentGroupIdsInclusive(parentGroup);

                    parentGroup.Groups.Remove(group);
                    group.ParentGroups.Remove(parentGroup);

                    // refresh flattening
                    Flattener.DeleteGroup(parentGroup, allUsers, allParents, this.Groups, this.Membership);
                }
            }
        }
コード例 #21
0
        public void Test3()
        {
            Flattener f = new Flattener();

            object[] testArray = new object[]
            { 1, new object[] { }, 3, 4 };
            var rc =
                f.Flatten(testArray);

            Assert.True(rc.Length == 3, "Length is incorrect, should be 3");
        }
コード例 #22
0
        public void Test1()
        {
            Flattener f = new Flattener();

            object[] testArray = new object[]
            {};
            var rc =
                f.Flatten(testArray);

            Assert.True(rc.Length == 0, "Length is incorrect, should be 0");
        }
コード例 #23
0
        public void Test4()
        {
            Flattener f = new Flattener();

            object[] testArray = new object[]
            { 1, new object[] { 2, 3, new object[] { 6, 7, 8 } }, 4, 5 };
            var rc =
                f.Flatten(testArray);

            Assert.True(rc.Length == 8, "Length is incorrect, should be 8");
        }
コード例 #24
0
ファイル: FlattenArrayTest.cs プロジェクト: felix91gr/csharp
    public void Flattens_2_Level_Nested_List()
    {
        var nestedList = new List <object> {
            1, new List <object> {
                2, 3, 4
            }, 5
        };

        Assert.Equal(new List <int> {
            1, 2, 3, 4, 5
        }, Flattener.Flatten(nestedList).Cast <int>());
    }
コード例 #25
0
    public void Flattens_2_Level_Nested_List()
    {
        var nestedList = new List <object> {
            1, new List <object> {
                2, 3, 4
            }, 5
        };

        Assert.That(Flattener.Flatten(nestedList), Is.EquivalentTo(new List <object> {
            1, 2, 3, 4, 5
        }));
    }
コード例 #26
0
        internal void DeleteUser(SecurityContext context, int userId)
        {
            // refresh flattening
            Flattener.DeleteUser(userId, Membership);

            // delete from Groups
            foreach (var group in Groups.Values)
            {
                group.UserMemberIds.Remove(userId);
            }

            // delete ACEs & empty ACLs
            EntityManager.RemoveIdentityRelatedAces(userId);
        }
コード例 #27
0
        internal void DeleteUser(SecurityContext context, int userId)
        {
            // refresh flattening
            Flattener.DeleteUser(userId, this.Membership);

            // delete from Groups
            foreach (var group in this.Groups.Values)
            {
                group.UserMemberIds.Remove(userId);
            }

            // delete Aces & emtpy Acls
            SecurityEntity.RemoveIdentityRelatedAces(context, userId);
        }
コード例 #28
0
        internal bool IsInGroup(int memberId, int groupId)
        {
            // if it is a user: first look for the id in the flattened user --> groups collection
            if (Membership.TryGetValue(memberId, out var flattenedGroups))
            {
                return(flattenedGroups.Contains(groupId));
            }

            // if it is a group: search in the group graph
            if (Groups.TryGetValue(memberId, out var group))
            {
                return(Flattener.GetAllParentGroupIdsExclusive(group).Contains(groupId));
            }

            return(false);
        }
コード例 #29
0
        /// <summary> Generates a sql. </summary>
        /// <param name="item"> The item. </param>
        /// <param name="name"> The name. </param>
        /// <returns> The sql. </returns>
        private static Persist GenerateSql(object item, string name)
        {
            IKeysDefined[] keysDefineds = { new HasPrimaryKeys(), new PrimaryKeysNotDefined() };

            var flattener   = new Flattener();
            var primaryKeys = flattener.GetPropertiesWithDefaultValues <KeyAttribute>(item).ToList();
            var properties  = flattener.GetNamesAndValues(item).ToList();
            var nameTable   = name ?? GetTableNameByType(item);

            var primaryKeysExists = primaryKeys.Any();
            var first             = keysDefineds.First(k => k.PrimaryKeysExist == primaryKeysExists);

            var sql = first.GenerateSql(nameTable, item, primaryKeys, properties);

            return(sql);
        }
コード例 #30
0
        internal void AddUserToGroups(int userId, IEnumerable <int> parentGroupIds)
        {
            if (parentGroupIds == null)
            {
                return;
            }

            // place the new relations, skip old ones.
            foreach (var parentGroupId in parentGroupIds)
            {
                var parentGroup = EnsureGroup(parentGroupId);
                if (!parentGroup.UserMemberIds.Contains(userId))
                {
                    parentGroup.UserMemberIds.Add(userId);
                }
                Flattener.AddUserToGroup(userId, parentGroup, Membership);
            }
        }
コード例 #31
0
        internal void RemoveUserFromGroups(int userId, IEnumerable <int> parentGroupIds)
        {
            if (parentGroupIds == null)
            {
                return;
            }

            foreach (var parentGroupId in parentGroupIds)
            {
                if (Groups.TryGetValue(parentGroupId, out var group))
                {
                    var allUsers   = Flattener.GetAllUserIds(group);
                    var allParents = Flattener.GetAllParentGroupIdsInclusive(group);

                    group.UserMemberIds.Remove(userId);

                    // refresh flattening
                    Flattener.DeleteGroup(group, allUsers, allParents, Groups, Membership);
                }
            }
        }
コード例 #32
0
 /// <summary> Converts the properties to sql. </summary>
 /// <param name="instance"> The properties. </param>
 /// <returns> The given data converted to a sql. </returns>
 public string ConvertToSql(object instance)
 {
     Flattener flattener = new Flattener();
     var properties = flattener.GetPropertiesWithDefaultValues<PrimaryKeyAttribute>(instance);
     return ConvertToSql(properties);
 }