diff --git a/Filtration.Tests/Filtration.Tests.csproj b/Filtration.Tests/Filtration.Tests.csproj index 13323d6..cb218bd 100644 --- a/Filtration.Tests/Filtration.Tests.csproj +++ b/Filtration.Tests/Filtration.Tests.csproj @@ -47,10 +47,12 @@ + + diff --git a/Filtration.Tests/Models/TestItemFilterScript.cs b/Filtration.Tests/Models/TestItemFilterScript.cs index 8a0acbe..e36fc25 100644 --- a/Filtration.Tests/Models/TestItemFilterScript.cs +++ b/Filtration.Tests/Models/TestItemFilterScript.cs @@ -29,10 +29,8 @@ namespace Filtration.Tests.Models { // Arrange - var script = new ItemFilterScript - { - ItemFilterBlocks = new ObservableCollection {new ItemFilterBlock()} - }; + var script = new ItemFilterScript(); + script.ItemFilterBlocks.Add(new ItemFilterBlock()); // Act var result = script.Validate(); @@ -62,15 +60,12 @@ namespace Filtration.Tests.Models var testInputBlock3 = new ItemFilterBlock(); testInputBlock3.BlockItems.Add(new BackgroundColorBlockItem(new Color { A = 255, R = 255, G = 0, B = 0 })); - var script = new ItemFilterScript() - { - ItemFilterBlocks = new ObservableCollection - { - testInputBlock1, - testInputBlock2, - testInputBlock3 - } - }; + var script = new ItemFilterScript(); + + script.ItemFilterBlocks.Add(testInputBlock1); + script.ItemFilterBlocks.Add(testInputBlock2); + script.ItemFilterBlocks.Add(testInputBlock3); + // Act script.ReplaceColors(testInputReplaceColors); @@ -108,14 +103,9 @@ namespace Filtration.Tests.Models testInputBlock2.BlockItems.Add(new BackgroundColorBlockItem(oldBackgroundColor)); testInputBlock2.BlockItems.Add(new TextColorBlockItem(new Color {A = 1, R = 2, G = 3, B = 4})); - var script = new ItemFilterScript - { - ItemFilterBlocks = new ObservableCollection - { - testInputBlock1, - testInputBlock2 - } - }; + var script = new ItemFilterScript(); + script.ItemFilterBlocks.Add(testInputBlock1); + script.ItemFilterBlocks.Add(testInputBlock2); // Act script.ReplaceColors(testInputReplaceColors); @@ -131,3 +121,4 @@ namespace Filtration.Tests.Models } } } + diff --git a/Filtration.Tests/Translators/TestItemFilterBlockTranslator.cs b/Filtration.Tests/Translators/TestItemFilterBlockTranslator.cs index 75ec9e6..93c38b4 100644 --- a/Filtration.Tests/Translators/TestItemFilterBlockTranslator.cs +++ b/Filtration.Tests/Translators/TestItemFilterBlockTranslator.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Windows.Media; using Filtration.Enums; @@ -6,6 +7,7 @@ using Filtration.Models; using Filtration.Models.BlockItemBaseTypes; using Filtration.Models.BlockItemTypes; using Filtration.Translators; +using Moq; using NUnit.Framework; namespace Filtration.Tests.Translators @@ -38,6 +40,64 @@ namespace Filtration.Tests.Translators Assert.AreEqual(FilterPredicateOperator.GreaterThanOrEqual, blockItem.FilterPredicate.PredicateOperator); } + [Test] + public void TranslateStringToItemFilterBlock_BlockGroupComment_CallsBlockGroupHierarchyBuilder() + { + // Arrange + var inputString = "Show # TestBlockGroup" + Environment.NewLine; + + // Act + _testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny>())).Verifiable(); + var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString); + + // Assert + _testUtility.MockBlockGroupHierarchyBuilder.Verify(); + } + + [Test] + public void TranslateStringToItemFilterBlock_NoBlockGroupComment_CallsBlockGroupHierarchyBuilder() + { + // Arrange + var inputString = "Show" + Environment.NewLine; + + // Act + _testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny>())).Verifiable(); + var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString); + + // Assert + _testUtility.MockBlockGroupHierarchyBuilder.Verify(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny>()), Times.Never); + } + + [Test] + public void TranslateStringToItemFilterBlock_BlockGroupCommentWithNoGroups_DoesNotThrow() + { + // Arrange + var inputString = "Show #" + Environment.NewLine; + + // Act + _testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny>())).Verifiable(); + var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString); + + // Assert + _testUtility.MockBlockGroupHierarchyBuilder.Verify(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny>()), Times.Never); + } + + [Test] + public void TranslateStringToItemFilterBlock_BlockGroupComment_SetsBlockItemGroupCorrectly() + { + // Arrange + var inputString = "Show # Test Block Group - Test Sub Block Group - Test Another Block Group" + Environment.NewLine; + var testBlockGroup = new ItemFilterBlockGroup("zzzzz", null); + + // Act + _testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny>())).Returns(testBlockGroup).Verifiable(); + var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString); + + // Assert + Assert.AreEqual(testBlockGroup, result.BlockGroup); + _testUtility.MockBlockGroupHierarchyBuilder.Verify(); + } + [Test] public void TranslateStringToItemFilterBlock_Hide_ReturnsCorrectObject() { @@ -686,6 +746,24 @@ namespace Filtration.Tests.Translators Assert.AreEqual(expectedResult, result); } + [Test] + public void TranslateItemFilterBlockToString_HasBlockGroup_ReturnsCorrectString() + { + // Arrange + var expectedResult = "Show # 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); + _testUtility.TestBlock.BlockGroup = child2BlockGroup; + + // Act + var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock); + + // Assert + Assert.AreEqual(expectedResult, result); + } + [Test] public void TranslateItemFilterBlockToString_FilterTypeHide_ReturnsCorrectString() { @@ -1158,11 +1236,15 @@ namespace Filtration.Tests.Translators // Test Data TestBlock = new ItemFilterBlock(); + // Mock setups + MockBlockGroupHierarchyBuilder = new Mock(); + // Class under test instantiation - Translator = new ItemFilterBlockTranslator(); + Translator = new ItemFilterBlockTranslator(MockBlockGroupHierarchyBuilder.Object); } public ItemFilterBlock TestBlock { get; set; } + public Mock MockBlockGroupHierarchyBuilder { get; private set; } public ItemFilterBlockTranslator Translator { get; private set; } } } diff --git a/Filtration.Tests/Translators/TestItemFilterScriptTranslator.cs b/Filtration.Tests/Translators/TestItemFilterScriptTranslator.cs index 1b44add..5304938 100644 --- a/Filtration.Tests/Translators/TestItemFilterScriptTranslator.cs +++ b/Filtration.Tests/Translators/TestItemFilterScriptTranslator.cs @@ -13,23 +13,28 @@ namespace Filtration.Tests.Translators [TestFixture] public class TestItemFilterScriptTranslator { + private ItemFilterScriptTranslatorTestUtility _testUtility; + + [SetUp] + public void ItemFilterScriptTranslatorTestSetup() + { + _testUtility = new ItemFilterScriptTranslatorTestUtility(); + } + [Test] public void TranslateStringToItemFilterScript_ReturnsScriptWithCorrectNumberOfBlocks() { // Arrange var testInput = File.ReadAllText(@"Resources/testscript.txt"); - var mockItemFilterBlockTranslator = new Mock(); - mockItemFilterBlockTranslator.Setup(t => t.TranslateStringToItemFilterBlock(It.IsAny())).Verifiable(); - - var translator = new ItemFilterScriptTranslator(mockItemFilterBlockTranslator.Object); + _testUtility.MockItemFilterBlockTranslator.Setup(t => t.TranslateStringToItemFilterBlock(It.IsAny())).Verifiable(); // Act - var script = translator.TranslateStringToItemFilterScript(testInput); + var script = _testUtility.ScriptTranslator.TranslateStringToItemFilterScript(testInput); // Assert Assert.AreEqual(5, script.ItemFilterBlocks.Count); - mockItemFilterBlockTranslator.Verify(); + _testUtility.MockItemFilterBlockTranslator.Verify(); } [Test] @@ -46,10 +51,8 @@ namespace Filtration.Tests.Translators var mockItemFilterBlockTranslator = new Mock(); mockItemFilterBlockTranslator.Setup(t => t.TranslateStringToItemFilterBlock(It.IsAny())).Verifiable(); - var translator = new ItemFilterScriptTranslator(mockItemFilterBlockTranslator.Object); - // Act - var script = translator.TranslateStringToItemFilterScript(testInput); + var script = _testUtility.ScriptTranslator.TranslateStringToItemFilterScript(testInput); // Assert Assert.AreEqual(expectedDescription, script.Description); @@ -62,9 +65,10 @@ namespace Filtration.Tests.Translators // Arrange var testInput = File.ReadAllText(@"Resources/ThioleItemFilter.txt"); - - var BlockTranslator = new ItemFilterBlockTranslator(); - var translator = new ItemFilterScriptTranslator(BlockTranslator); + + var mockBlockGroupHierarchyBuilder = new Mock(); + var blockTranslator = new ItemFilterBlockTranslator(mockBlockGroupHierarchyBuilder.Object); + var translator = new ItemFilterScriptTranslator(blockTranslator, mockBlockGroupHierarchyBuilder.Object); // Act var script = translator.TranslateStringToItemFilterScript(testInput); @@ -82,20 +86,17 @@ namespace Filtration.Tests.Translators testBlock.BlockItems.Add(new ItemLevelBlockItem(FilterPredicateOperator.Equal, 5)); var BlockOutput = "Test Script Output"; - var expectedOutput = "Test Script Output" + Environment.NewLine + Environment.NewLine; testScript.ItemFilterBlocks.Add(testBlock); - var mockItemFilterBlockTranslator = new Mock(); - mockItemFilterBlockTranslator.Setup(t => t.TranslateItemFilterBlockToString(testBlock)).Returns(BlockOutput).Verifiable(); + _testUtility.MockItemFilterBlockTranslator.Setup(t => t.TranslateItemFilterBlockToString(testBlock)).Returns(BlockOutput).Verifiable(); - var translator = new ItemFilterScriptTranslator(mockItemFilterBlockTranslator.Object); // Act - var result = translator.TranslateItemFilterScriptToString(testScript); + var result = _testUtility.ScriptTranslator.TranslateItemFilterScriptToString(testScript); // Assert - mockItemFilterBlockTranslator.Verify(); + _testUtility.MockItemFilterBlockTranslator.Verify(); } [Test] @@ -132,8 +133,9 @@ namespace Filtration.Tests.Translators " Width = 3" + Environment.NewLine + " SetFontSize 7" + Environment.NewLine + Environment.NewLine; - var blockTranslator = new ItemFilterBlockTranslator(); - var translator = new ItemFilterScriptTranslator(blockTranslator); + var mockBlockGroupHierarchyBuilder = new Mock(); + var blockTranslator = new ItemFilterBlockTranslator(mockBlockGroupHierarchyBuilder.Object); + var translator = new ItemFilterScriptTranslator(blockTranslator, mockBlockGroupHierarchyBuilder.Object); // Act var result = translator.TranslateItemFilterScriptToString(script); @@ -155,11 +157,8 @@ namespace Filtration.Tests.Translators Environment.NewLine + "# Test script description" + Environment.NewLine + Environment.NewLine; - var blockTranslator = new ItemFilterBlockTranslator(); - var translator = new ItemFilterScriptTranslator(blockTranslator); - // Act - var result = translator.TranslateItemFilterScriptToString(script); + var result = _testUtility.ScriptTranslator.TranslateItemFilterScriptToString(script); // Assert Assert.AreEqual(expectedOutput, result); @@ -177,8 +176,8 @@ namespace Filtration.Tests.Translators " SetBorderColor 255 0 255" + Environment.NewLine + " SetFontSize 25"; - var blockTranslator = new ItemFilterBlockTranslator(); - var translator = new ItemFilterScriptTranslator(blockTranslator); + var blockTranslator = new ItemFilterBlockTranslator(_testUtility.MockBlockGroupHierarchyBuilder.Object); + var translator = new ItemFilterScriptTranslator(blockTranslator, _testUtility.MockBlockGroupHierarchyBuilder.Object); // Act var result = translator.TranslateStringToItemFilterScript(testInputScript); @@ -191,5 +190,22 @@ namespace Filtration.Tests.Translators Assert.AreEqual(2, baseTypeItem.Items.Count); } + + private class ItemFilterScriptTranslatorTestUtility + { + public ItemFilterScriptTranslatorTestUtility() + { + // Mock setups + MockItemFilterBlockTranslator = new Mock(); + MockBlockGroupHierarchyBuilder = new Mock(); + + // Class under test instantiation + ScriptTranslator = new ItemFilterScriptTranslator(MockItemFilterBlockTranslator.Object, MockBlockGroupHierarchyBuilder.Object); + } + + public ItemFilterScriptTranslator ScriptTranslator { get; private set; } + public Mock MockItemFilterBlockTranslator { get; private set; } + public Mock MockBlockGroupHierarchyBuilder { get; private set; } + } } } diff --git a/Filtration/Filtration.csproj b/Filtration/Filtration.csproj index e132367..1135f42 100644 --- a/Filtration/Filtration.csproj +++ b/Filtration/Filtration.csproj @@ -142,6 +142,7 @@ + diff --git a/Filtration/Models/ItemFilterBlock.cs b/Filtration/Models/ItemFilterBlock.cs index 0f16372..1495958 100644 --- a/Filtration/Models/ItemFilterBlock.cs +++ b/Filtration/Models/ItemFilterBlock.cs @@ -14,6 +14,7 @@ namespace Filtration.Models } public string Description { get; set; } + public ItemFilterBlockGroup BlockGroup { get; set; } public BlockAction Action { diff --git a/Filtration/Models/ItemFilterBlockGroup.cs b/Filtration/Models/ItemFilterBlockGroup.cs index 5c56259..39acf0f 100644 --- a/Filtration/Models/ItemFilterBlockGroup.cs +++ b/Filtration/Models/ItemFilterBlockGroup.cs @@ -1,12 +1,32 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Collections.Generic; namespace Filtration.Models { - class ItemFilterBlockGroup + internal class ItemFilterBlockGroup { + public ItemFilterBlockGroup(string groupName, ItemFilterBlockGroup parent) + { + GroupName = groupName; + ParentGroup = parent; + ChildGroups = new List(); + } + + public override string ToString() + { + var currentBlockGroup = this; + + var outputString = GroupName; + while (currentBlockGroup.ParentGroup.ParentGroup != null) + { + outputString = currentBlockGroup.ParentGroup.GroupName + " - " + outputString; + currentBlockGroup = currentBlockGroup.ParentGroup; + } + + return outputString; + } + + public string GroupName { get; private set; } + public ItemFilterBlockGroup ParentGroup { get; private set; } + public List ChildGroups { get; private set; } } } diff --git a/Filtration/Models/ItemFilterScript.cs b/Filtration/Models/ItemFilterScript.cs index fc25075..50b16b1 100644 --- a/Filtration/Models/ItemFilterScript.cs +++ b/Filtration/Models/ItemFilterScript.cs @@ -11,9 +11,15 @@ namespace Filtration.Models public ItemFilterScript() { ItemFilterBlocks = new ObservableCollection(); + ItemFilterBlockGroups = new ObservableCollection + { + new ItemFilterBlockGroup("Root", null) + }; } - public ObservableCollection ItemFilterBlocks { get; set; } + public ObservableCollection ItemFilterBlocks { get; private set; } + public ObservableCollection ItemFilterBlockGroups { get; private set; } + public string FilePath { get; set; } public string Description { get; set; } public DateTime DateModified { get; set; } diff --git a/Filtration/Translators/BlockGroupHierarchyBuilder.cs b/Filtration/Translators/BlockGroupHierarchyBuilder.cs new file mode 100644 index 0000000..144a6c9 --- /dev/null +++ b/Filtration/Translators/BlockGroupHierarchyBuilder.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Filtration.Models; + +namespace Filtration.Translators +{ + internal interface IBlockGroupHierarchyBuilder + { + void Initialise(ItemFilterBlockGroup rootBlockGroup); + ItemFilterBlockGroup IntegrateStringListIntoBlockGroupHierarchy(IEnumerable groupStrings); + } + + internal class BlockGroupHierarchyBuilder : IBlockGroupHierarchyBuilder + { + private ItemFilterBlockGroup _rootBlockGroup; + + public void Initialise(ItemFilterBlockGroup rootBlockGroup) + { + _rootBlockGroup = rootBlockGroup; + } + + public ItemFilterBlockGroup IntegrateStringListIntoBlockGroupHierarchy(IEnumerable groupStrings) + { + if (_rootBlockGroup == null) + { + throw new Exception("BlockGroupHierarchyBuilder must be initialised with root BlockGroup before use"); + } + return IntegrateStringListIntoBlockGroupHierarchy(groupStrings, _rootBlockGroup); + } + + public ItemFilterBlockGroup IntegrateStringListIntoBlockGroupHierarchy(IEnumerable groupStrings, ItemFilterBlockGroup startItemGroup) + { + var inputGroups = groupStrings.ToList(); + var firstGroup = inputGroups.First().Trim(); + + 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 = new ItemFilterBlockGroup(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; + } + } +} diff --git a/Filtration/Translators/ItemFilterBlockTranslator.cs b/Filtration/Translators/ItemFilterBlockTranslator.cs index 2a10f7e..4ada0e3 100644 --- a/Filtration/Translators/ItemFilterBlockTranslator.cs +++ b/Filtration/Translators/ItemFilterBlockTranslator.cs @@ -21,9 +21,15 @@ namespace Filtration.Translators internal class ItemFilterBlockTranslator : IItemFilterBlockTranslator { + private readonly IBlockGroupHierarchyBuilder _blockGroupHierarchyBuilder; private const string Indent = " "; private readonly string _newLine = Environment.NewLine + Indent; + public ItemFilterBlockTranslator(IBlockGroupHierarchyBuilder blockGroupHierarchyBuilder) + { + _blockGroupHierarchyBuilder = blockGroupHierarchyBuilder; + } + // This method converts a string into a ItemFilterBlock. This is used for pasting ItemFilterBlocks // and reading ItemFilterScripts from a file. public ItemFilterBlock TranslateStringToItemFilterBlock(string inputString) @@ -32,6 +38,7 @@ namespace Filtration.Translators var showHideFound = false; foreach (var line in new LineReader(() => new StringReader(inputString))) { + if (line.StartsWith(@"# Section:")) { var section = new ItemFilterSection @@ -47,7 +54,8 @@ namespace Filtration.Translators continue; } - var trimmedLine = line.TrimStart(' '); + var adjustedLine = line.Replace("#", " # "); + var trimmedLine = adjustedLine.TrimStart(' '); var spaceOrEndOfLinePos = trimmedLine.IndexOf(" ", StringComparison.Ordinal) > 0 ? trimmedLine.IndexOf(" ", StringComparison.Ordinal) : trimmedLine.Length; var lineOption = trimmedLine.Substring(0, spaceOrEndOfLinePos); @@ -56,10 +64,12 @@ namespace Filtration.Translators case "Show": showHideFound = true; block.Action = BlockAction.Show; + AddBlockGroupToBlock(block, trimmedLine); break; case "Hide": showHideFound = true; block.Action = BlockAction.Hide; + AddBlockGroupToBlock(block, trimmedLine); break; case "ItemLevel": { @@ -122,20 +132,6 @@ namespace Filtration.Translators } case "SocketGroup": { - //var blockItem = new SocketGroupBlockItem(); - - //var socketGroups = Regex.Matches(trimmedLine, @"\s+([RGBW]{1,6})"); - - //foreach (Match socketGroupMatch in socketGroups) - //{ - - // var socketGroupCharArray = socketGroupMatch.Groups[1].Value.Trim(' ').ToCharArray(); - // var socketColorList = socketGroupCharArray.Select(c => (EnumHelper.GetEnumValueFromDescription(c.ToString()))).ToList(); - - // blockItem.SocketColorGroups.Add(socketColorList); - //} - - //block.FilterBlockItems.Add(blockItem); AddStringListItemToBlockItems(block, trimmedLine); break; } @@ -268,6 +264,19 @@ namespace Filtration.Translators block.BlockItems.Add(blockItem); } + private void AddBlockGroupToBlock(ItemFilterBlock block, string inputString) + { + var blockGroupStart = inputString.IndexOf("#", StringComparison.Ordinal); + if (blockGroupStart <= 0) return; + + var blockGroupText = inputString.Substring(blockGroupStart + 1); + var blockGroups = blockGroupText.Split('-').ToList(); + if (blockGroups.Count(b => !string.IsNullOrEmpty(b.Trim())) > 0) + { + block.BlockGroup = _blockGroupHierarchyBuilder.IntegrateStringListIntoBlockGroupHierarchy(blockGroups); + } + } + private static Color GetColorFromString(string inputString) { var argbValues = Regex.Matches(inputString, @"\s+(\d+)"); @@ -294,7 +303,7 @@ namespace Filtration.Translators return new Color(); } - // This method converts a ItemFilterBlock object into a string. This is used for copying a ItemFilterBlock + // This method converts an ItemFilterBlock object into a string. This is used for copying a ItemFilterBlock // to the clipboard, and when saving a ItemFilterScript. public string TranslateItemFilterBlockToString(ItemFilterBlock block) { @@ -312,6 +321,11 @@ namespace Filtration.Translators outputString += block.Action.GetAttributeDescription(); + if (block.BlockGroup != null) + { + outputString += " # " + block.BlockGroup; + } + // This could be refactored to use the upcasted NumericFilterPredicateBlockItem (or even IItemFilterBlockItem) instead // of the specific downcasts. Leaving it like this currently to preserve sorting since the different // downcasts have no defined sort order (yet). diff --git a/Filtration/Translators/ItemFilterScriptTranslator.cs b/Filtration/Translators/ItemFilterScriptTranslator.cs index 5aceb5e..bb68b48 100644 --- a/Filtration/Translators/ItemFilterScriptTranslator.cs +++ b/Filtration/Translators/ItemFilterScriptTranslator.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text.RegularExpressions; using Filtration.Models; using Filtration.Utilities; @@ -16,15 +17,19 @@ namespace Filtration.Translators internal class ItemFilterScriptTranslator : IItemFilterScriptTranslator { private readonly IItemFilterBlockTranslator _blockTranslator; + private readonly IBlockGroupHierarchyBuilder _blockGroupHierarchyBuilder; - public ItemFilterScriptTranslator(IItemFilterBlockTranslator blockTranslator) + public ItemFilterScriptTranslator(IItemFilterBlockTranslator blockTranslator, IBlockGroupHierarchyBuilder blockGroupHierarchyBuilder) { _blockTranslator = blockTranslator; + _blockGroupHierarchyBuilder = blockGroupHierarchyBuilder; } public ItemFilterScript TranslateStringToItemFilterScript(string inputString) { var script = new ItemFilterScript(); + _blockGroupHierarchyBuilder.Initialise(script.ItemFilterBlockGroups.First()); + inputString = inputString.Replace("\t", ""); var conditionBoundaries = IdentifyBlockBoundaries(inputString); diff --git a/Filtration/WindsorInstallers/TranslatorsInstaller.cs b/Filtration/WindsorInstallers/TranslatorsInstaller.cs index c5e6585..549b9b5 100644 --- a/Filtration/WindsorInstallers/TranslatorsInstaller.cs +++ b/Filtration/WindsorInstallers/TranslatorsInstaller.cs @@ -18,6 +18,11 @@ namespace Filtration.WindsorInstallers Component.For() .ImplementedBy() .LifeStyle.Singleton); + + container.Register( + Component.For() + .ImplementedBy() + .LifeStyle.Singleton); } } }