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);
}
}
}