public ItemFilterBlockGroup IntegrateStringListIntoBlockGroupHierarchy(IEnumerable <string> groupStrings, ItemFilterBlockGroup startItemGroup)
        {
            var inputGroups = groupStrings.ToList();
            var firstGroup  = inputGroups.First().Trim();

            if (firstGroup.StartsWith("~"))
            {
                firstGroup = firstGroup.Substring(1);
            }

            ItemFilterBlockGroup matchingChildItemGroup = null;

            if (startItemGroup.ChildGroups.Count(g => g.GroupName == firstGroup) > 0)
            {
                matchingChildItemGroup = startItemGroup.ChildGroups.First(c => c.GroupName == firstGroup);
            }

            if (matchingChildItemGroup == null)
            {
                var newItemGroup = CreateBlockGroup(inputGroups.First().Trim(), startItemGroup);
                startItemGroup.ChildGroups.Add(newItemGroup);
                inputGroups = inputGroups.Skip(1).ToList();
                return(inputGroups.Count > 0 ? IntegrateStringListIntoBlockGroupHierarchy(inputGroups, newItemGroup) : newItemGroup);
            }
            inputGroups = inputGroups.Skip(1).ToList();
            return(inputGroups.Count > 0 ? IntegrateStringListIntoBlockGroupHierarchy(inputGroups, matchingChildItemGroup) : matchingChildItemGroup);
        }
        public void IntegrateStringListIntoBlockGroupHierarchy_MultipleBlockGroups()
        {
            // Arrange
            var rootBlock = new ItemFilterBlockGroup("Root", null);
            var builder   = new BlockGroupHierarchyBuilder();

            // Act
            var inputStrings = new List <string> {
                "Block Group"
            };

            builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock);
            inputStrings = new List <string> {
                "Block Group 2"
            };
            builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock);
            inputStrings = new List <string> {
                "Block Group", "Sub Block Group"
            };
            var result = builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock);

            // Assert
            Assert.AreEqual(2, rootBlock.ChildGroups.Count);
            Assert.AreEqual("Sub Block Group", result.GroupName);
        }
Ejemplo n.º 3
0
        public ItemFilterBlockGroupViewModel(ItemFilterBlockGroup itemFilterBlockGroup, bool showAdvanced, ItemFilterBlockGroupViewModel parent)
        {
            GroupName        = itemFilterBlockGroup.GroupName;
            ParentGroup      = parent;
            Advanced         = itemFilterBlockGroup.Advanced;
            SourceBlockGroup = itemFilterBlockGroup;
            SourceBlockGroup.ClearStatusChangeSubscribers();
            SourceBlockGroup.BlockGroupStatusChanged += OnSourceBlockGroupStatusChanged;
            IsShowChecked   = itemFilterBlockGroup.IsShowChecked;
            IsEnableChecked = itemFilterBlockGroup.IsEnableChecked;

            ChildGroups = new ObservableCollection <ItemFilterBlockGroupViewModel>();
            foreach (var childGroup in itemFilterBlockGroup.ChildGroups.Where(c => showAdvanced || !c.Advanced))
            {
                ChildGroups.Add(new ItemFilterBlockGroupViewModel(childGroup, showAdvanced, this));
            }

            VisibleChildGroups = new ObservableCollection <ItemFilterBlockGroupViewModel>();
            foreach (var childGroup in ChildGroups.Where(item => !item.IsHidden))
            {
                VisibleChildGroups.Add(childGroup);
            }

            if (ChildGroups.Any())
            {
                SetIsCheckedBasedOnChildGroups();
            }
        }
        public void ToString_ReturnsFullBlockHierarchy()
        {
            // Arrange
            const string expectedResult = "Child 1 Block Group - Child 2 Block Group";

            var rootBlockGroup = new ItemFilterBlockGroup("Root Block Group", null);
            var child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup);
            var child2BlockGroup = new ItemFilterBlockGroup("Child 2 Block Group", child1BlockGroup);

            // Act
            var result = child2BlockGroup.ToString();

            // Assert
            Assert.AreEqual(expectedResult, result);
        }
        public void ToString_AddsTildeForAdvancedBlock()
        {
            // Arrange
            const string expectedResult = "~Child 1 Block Group - Child 2 Block Group";

            var rootBlockGroup = new ItemFilterBlockGroup("Root Block Group", null);
            var child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup, true);
            var child2BlockGroup = new ItemFilterBlockGroup("Child 2 Block Group", child1BlockGroup);

            // Act
            var result = child2BlockGroup.ToString();

            // Assert
            Assert.AreEqual(expectedResult, result);
        }
Ejemplo n.º 6
0
        public void ToString_ReturnsFullBlockHierarchy()
        {
            // Arrange
            const string ExpectedResult = "Child 1 Block Group - Child 2 Block Group";

            var rootBlockGroup   = new ItemFilterBlockGroup("Root Block Group", null);
            var child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup);
            var child2BlockGroup = new ItemFilterBlockGroup("Child 2 Block Group", child1BlockGroup);

            // Act
            var result = child2BlockGroup.ToString();

            // Assert
            Assert.AreEqual(ExpectedResult, result);
        }
Ejemplo n.º 7
0
        public void ToString_AddsTildeForAdvancedBlock()
        {
            // Arrange
            const string ExpectedResult = "~Child 1 Block Group - Child 2 Block Group";

            var rootBlockGroup   = new ItemFilterBlockGroup("Root Block Group", null);
            var child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup, true);
            var child2BlockGroup = new ItemFilterBlockGroup("Child 2 Block Group", child1BlockGroup);

            // Act
            var result = child2BlockGroup.ToString();

            // Assert
            Assert.AreEqual(ExpectedResult, result);
        }
Ejemplo n.º 8
0
        public void HasParentInBlockGroupHierarchy_ReturnsCorrectResult()
        {
            // Arrange
            var testInputRootBlockGroup = new ItemFilterBlockGroup("Root Block Group", null);
            var testInputSubBlockGroup = new ItemFilterBlockGroup("Sub Block Group", testInputRootBlockGroup);
            var testInputSubSubBlockGroup = new ItemFilterBlockGroup("Sub Sub Block Group", testInputSubBlockGroup);

            var block = new ItemFilterBlock {BlockGroup = testInputSubSubBlockGroup};

            // Act

            // Assert
            Assert.AreEqual(true, block.HasBlockGroupInParentHierarchy(testInputRootBlockGroup, block.BlockGroup));
            Assert.AreEqual(true, block.HasBlockGroupInParentHierarchy(testInputSubBlockGroup, block.BlockGroup));
        }
        private ItemFilterBlockGroup CreateBlockGroup(string groupNameString, ItemFilterBlockGroup parentGroup)
        {
            var advanced = false;

            if (groupNameString.StartsWith("~"))
            {
                groupNameString = groupNameString.Substring(1);
                advanced        = true;
            }

            if (parentGroup.Advanced)
            {
                advanced = true;
            }

            return(new ItemFilterBlockGroup(groupNameString, parentGroup, advanced));
        }
Ejemplo n.º 10
0
        public void HasParentInBlockGroupHierarchy_ReturnsCorrectResult()
        {
            // Arrange
            var testInputRootBlockGroup   = new ItemFilterBlockGroup("Root Block Group", null);
            var testInputSubBlockGroup    = new ItemFilterBlockGroup("Sub Block Group", testInputRootBlockGroup);
            var testInputSubSubBlockGroup = new ItemFilterBlockGroup("Sub Sub Block Group", testInputSubBlockGroup);

            var block = new ItemFilterBlock {
                BlockGroup = testInputSubSubBlockGroup
            };

            // Act

            // Assert
            Assert.AreEqual(true, block.HasBlockGroupInParentHierarchy(testInputRootBlockGroup, block.BlockGroup));
            Assert.AreEqual(true, block.HasBlockGroupInParentHierarchy(testInputSubBlockGroup, block.BlockGroup));
        }
Ejemplo n.º 11
0
        public void IntegrateStringListIntoBlockGroupHierarchy_SingleBlockGroup()
        {
            // Arrange
            var inputStrings = new List <string> {
                "Block Group"
            };

            var rootBlock = new ItemFilterBlockGroup("Root", null);
            var builder   = new BlockGroupHierarchyBuilder();

            // Act
            var result = builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock, true, true);

            // Assert
            Assert.AreEqual(1, rootBlock.ChildGroups.Count);
            Assert.AreEqual("Block Group", result.ParentGroup.GroupName);
        }
        public void IntegrateStringListIntoBlockGroupHierarchy_AdvancedBlockGroup_ChildrenAreCreatedAsAdvanced()
        {
            // Arrange
            var inputStrings = new List <string> {
                "~Advanced Block Group", "This should be advanced too"
            };

            var rootBlock = new ItemFilterBlockGroup("Root", null);
            var builder   = new BlockGroupHierarchyBuilder();

            // Act
            var result = builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock);

            // Assert
            Assert.AreEqual(1, rootBlock.ChildGroups.Count);
            Assert.AreEqual(true, result.Advanced);
        }
        public void IntegrateStringListIntoBlockGroupHierarchy_AdvancedBlockGroup_MarksBlockGroupAsAdvanced()
        {
            // Arrange
            var inputStrings = new List <string> {
                "~Block Group"
            };

            var rootBlock = new ItemFilterBlockGroup("Root", null);
            var builder   = new BlockGroupHierarchyBuilder();

            // Act
            var result = builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock);

            // Assert
            Assert.AreEqual(1, rootBlock.ChildGroups.Count);
            Assert.AreEqual("Block Group", result.GroupName);
            Assert.AreEqual(true, result.Advanced);
        }
Ejemplo n.º 14
0
        public ItemFilterBlockGroupViewModel(ItemFilterBlockGroup itemFilterBlockGroup, bool showAdvanced, ItemFilterBlockGroupViewModel parent)
        {
            GroupName        = itemFilterBlockGroup.GroupName;
            ParentGroup      = parent;
            Advanced         = itemFilterBlockGroup.Advanced;
            SourceBlockGroup = itemFilterBlockGroup;
            IsChecked        = itemFilterBlockGroup.IsChecked;

            ChildGroups = new ObservableCollection <ItemFilterBlockGroupViewModel>();
            foreach (var childGroup in itemFilterBlockGroup.ChildGroups.Where(c => showAdvanced || !c.Advanced))
            {
                ChildGroups.Add(new ItemFilterBlockGroupViewModel(childGroup, showAdvanced, this));
            }

            if (ChildGroups.Any())
            {
                SetIsCheckedBasedOnChildGroups();
            }
        }
Ejemplo n.º 15
0
        public void IntegrateStringListIntoBlockGroupHierarchy_ExistingAdvancedBlockGroup_SetsParentCorrectly()
        {
            // Arrange
            var inputStrings = new List <string> {
                "~Block Group"
            };

            var rootBlock = new ItemFilterBlockGroup("Root", null);
            var subBlock  = new ItemFilterBlockGroup("Block Group", rootBlock, true);

            rootBlock.ChildGroups.Add(subBlock);

            var builder = new BlockGroupHierarchyBuilder();

            // Act
            var result = builder.IntegrateStringListIntoBlockGroupHierarchy(inputStrings, rootBlock, true, true);

            // Assert
            Assert.AreEqual(1, rootBlock.ChildGroups.Count);
            Assert.AreEqual("Block Group", result.ParentGroup.GroupName);
            Assert.AreEqual(true, result.ParentGroup.Advanced);
        }
Ejemplo n.º 16
0
        public ItemFilterBlockGroup IntegrateStringListIntoBlockGroupHierarchy(IEnumerable <string> groupStrings, ItemFilterBlockGroup startItemGroup, bool show, bool enabled)
        {
            var inputGroups = groupStrings.ToList();
            var firstGroup  = inputGroups.First().Trim();

            if (firstGroup.StartsWith("~"))
            {
                firstGroup = firstGroup.Substring(1);
            }

            ItemFilterBlockGroup matchingChildItemGroup = null;

            if (startItemGroup.ChildGroups.Count(g => g.GroupName == firstGroup) > 0)
            {
                matchingChildItemGroup = startItemGroup.ChildGroups.First(c => c.GroupName == firstGroup);
            }

            if (matchingChildItemGroup == null)
            {
                var newItemGroup = CreateBlockGroup(inputGroups.First().Trim(), startItemGroup);
                newItemGroup.IsShowChecked   = show;
                newItemGroup.IsEnableChecked = enabled;
                startItemGroup.ChildGroups.Add(newItemGroup);
                inputGroups = inputGroups.Skip(1).ToList();
                if (inputGroups.Count > 0)
                {
                    return(IntegrateStringListIntoBlockGroupHierarchy(inputGroups, newItemGroup, show, enabled));
                }
                else
                {
                    var leafNode = new ItemFilterBlockGroup("", newItemGroup, false, true);
                    leafNode.IsShowChecked   = show;
                    leafNode.IsEnableChecked = enabled;
                    newItemGroup.ChildGroups.Add(leafNode);
                    return(leafNode);
                }
            }
            else
            {
                if (matchingChildItemGroup.IsShowChecked != show)
                {
                    matchingChildItemGroup.IsShowChecked = null;
                }
                if (matchingChildItemGroup.IsEnableChecked != enabled)
                {
                    matchingChildItemGroup.IsEnableChecked = null;
                }
            }
            inputGroups = inputGroups.Skip(1).ToList();
            if (inputGroups.Count > 0)
            {
                return(IntegrateStringListIntoBlockGroupHierarchy(inputGroups, matchingChildItemGroup, show, enabled));
            }
            else
            {
                var leafNode = new ItemFilterBlockGroup("", matchingChildItemGroup, false, true);
                leafNode.IsShowChecked   = show;
                leafNode.IsEnableChecked = enabled;
                matchingChildItemGroup.ChildGroups.Add(leafNode);
                return(leafNode);
            }
        }
 public void Cleanup()
 {
     _rootBlockGroup = null;
 }
 public void Initialise(ItemFilterBlockGroup rootBlockGroup)
 {
     _rootBlockGroup = rootBlockGroup;
 }