Make Filter abstract (nw)

This commit is contained in:
Matt Nadareski
2020-12-12 22:16:43 -08:00
parent 15730c02d8
commit 710213ff9d
4 changed files with 49 additions and 1945 deletions

View File

@@ -11,17 +11,8 @@ namespace SabreTools.Filtering
/// </summary> /// </summary>
/// TODO: Investigate how to reduce the amount of hardcoded filter statements /// TODO: Investigate how to reduce the amount of hardcoded filter statements
/// TODO: Add DatHeader filters /// TODO: Add DatHeader filters
public class DatHeaderFilter public class DatHeaderFilter : Filter
{ {
#region Logging
/// <summary>
/// Logging object
/// </summary>
private readonly Logger logger;
#endregion
#region Constructors #region Constructors
/// <summary> /// <summary>
@@ -40,29 +31,18 @@ namespace SabreTools.Filtering
/// Populate the filters object using a set of key:value filters /// Populate the filters object using a set of key:value filters
/// </summary> /// </summary>
/// <param name="filters">List of key:value where ~key/!key is negated</param> /// <param name="filters">List of key:value where ~key/!key is negated</param>
public void PopulateFromList(List<string> filters) public override void PopulateFromList(List<string> filters)
{ {
foreach (string filterPair in filters) foreach (string filterPair in filters)
{ {
(string field, string value, bool negate) = ProcessFilterPair(filterPair);
// If we don't even have a possible filter pair // If we don't even have a possible filter pair
if (!filterPair.Contains(":")) if (field == null && value == null)
{
logger.Warning($"'{filterPair}` is not a valid filter string. Valid filter strings are of the form 'key:value'. Please refer to README.1ST or the help feature for more details.");
continue; continue;
}
string filterPairTrimmed = filterPair.Trim('"', ' ', '\t'); DatHeaderField filterField = field.AsDatHeaderField();
bool negate = filterPairTrimmed.StartsWith("!") SetFilter(filterField, value, negate);
|| filterPairTrimmed.StartsWith("~")
|| filterPairTrimmed.StartsWith("not-");
filterPairTrimmed = filterPairTrimmed.TrimStart('!', '~');
filterPairTrimmed = filterPairTrimmed.StartsWith("not-") ? filterPairTrimmed.Substring(4) : filterPairTrimmed;
string filterFieldString = filterPairTrimmed.Split(':')[0].ToLowerInvariant().Trim('"', ' ', '\t');
string filterValue = filterPairTrimmed.Substring(filterFieldString.Length + 1).Trim('"', ' ', '\t');
DatHeaderField filterField = filterFieldString.AsDatHeaderField();
SetFilter(filterField, filterValue, negate);
} }
} }

View File

@@ -1,5 +1,4 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using SabreTools.Core; using SabreTools.Core;
using SabreTools.Core.Tools; using SabreTools.Core.Tools;
@@ -12,7 +11,7 @@ namespace SabreTools.Filtering
/// </summary> /// </summary>
/// TODO: Can clever use of Filtering allow for easier external splitting methods? /// TODO: Can clever use of Filtering allow for easier external splitting methods?
/// TODO: Investigate how to reduce the amount of hardcoded filter statements /// TODO: Investigate how to reduce the amount of hardcoded filter statements
public class DatItemFilter public class DatItemFilter : Filter
{ {
#region Fields #region Fields
@@ -200,15 +199,6 @@ namespace SabreTools.Filtering
#endregion // Fields #endregion // Fields
#region Logging
/// <summary>
/// Logging object
/// </summary>
private readonly Logger logger;
#endregion
#region Constructors #region Constructors
/// <summary> /// <summary>
@@ -227,29 +217,18 @@ namespace SabreTools.Filtering
/// Populate the filters object using a set of key:value filters /// Populate the filters object using a set of key:value filters
/// </summary> /// </summary>
/// <param name="filters">List of key:value where ~key/!key is negated</param> /// <param name="filters">List of key:value where ~key/!key is negated</param>
public void PopulateFromList(List<string> filters) public override void PopulateFromList(List<string> filters)
{ {
foreach (string filterPair in filters) foreach (string filterPair in filters)
{ {
(string field, string value, bool negate) = ProcessFilterPair(filterPair);
// If we don't even have a possible filter pair // If we don't even have a possible filter pair
if (!filterPair.Contains(":")) if (field == null && value == null)
{
logger.Warning($"'{filterPair}` is not a valid filter string. Valid filter strings are of the form 'key:value'. Please refer to README.1ST or the help feature for more details.");
continue; continue;
}
string filterPairTrimmed = filterPair.Trim('"', ' ', '\t'); DatItemField filterField = field.AsDatItemField();
bool negate = filterPairTrimmed.StartsWith("!") SetFilter(filterField, value, negate);
|| filterPairTrimmed.StartsWith("~")
|| filterPairTrimmed.StartsWith("not-");
filterPairTrimmed = filterPairTrimmed.TrimStart('!', '~');
filterPairTrimmed = filterPairTrimmed.StartsWith("not-") ? filterPairTrimmed.Substring(4) : filterPairTrimmed;
string filterFieldString = filterPairTrimmed.Split(':')[0].ToLowerInvariant().Trim('"', ' ', '\t');
string filterValue = filterPairTrimmed.Substring(filterFieldString.Length + 1).Trim('"', ' ', '\t');
DatItemField filterField = filterFieldString.AsDatItemField();
SetFilter(filterField, filterValue, negate);
} }
} }
@@ -810,5 +789,7 @@ namespace SabreTools.Filtering
#endregion // Item-Specific #endregion // Item-Specific
} }
} }
#endregion
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -11,7 +11,7 @@ namespace SabreTools.Filtering
/// </summary> /// </summary>
/// TODO: Can clever use of Filtering allow for easier external splitting methods? /// TODO: Can clever use of Filtering allow for easier external splitting methods?
/// TODO: Investigate how to reduce the amount of hardcoded filter statements /// TODO: Investigate how to reduce the amount of hardcoded filter statements
public class MachineFilter public class MachineFilter : Filter
{ {
#region Fields #region Fields
@@ -100,15 +100,6 @@ namespace SabreTools.Filtering
#endregion // Fields #endregion // Fields
#region Logging
/// <summary>
/// Logging object
/// </summary>
private readonly Logger logger;
#endregion
#region Constructors #region Constructors
/// <summary> /// <summary>
@@ -127,29 +118,18 @@ namespace SabreTools.Filtering
/// Populate the filters object using a set of key:value filters /// Populate the filters object using a set of key:value filters
/// </summary> /// </summary>
/// <param name="filters">List of key:value where ~key/!key is negated</param> /// <param name="filters">List of key:value where ~key/!key is negated</param>
public void PopulateFromList(List<string> filters) public override void PopulateFromList(List<string> filters)
{ {
foreach (string filterPair in filters) foreach (string filterPair in filters)
{ {
(string field, string value, bool negate) = ProcessFilterPair(filterPair);
// If we don't even have a possible filter pair // If we don't even have a possible filter pair
if (!filterPair.Contains(":")) if (field == null && value == null)
{
logger.Warning($"'{filterPair}` is not a valid filter string. Valid filter strings are of the form 'key:value'. Please refer to README.1ST or the help feature for more details.");
continue; continue;
}
string filterPairTrimmed = filterPair.Trim('"', ' ', '\t'); MachineField filterField = field.AsMachineField();
bool negate = filterPairTrimmed.StartsWith("!") SetFilter(filterField, value, negate);
|| filterPairTrimmed.StartsWith("~")
|| filterPairTrimmed.StartsWith("not-");
filterPairTrimmed = filterPairTrimmed.TrimStart('!', '~');
filterPairTrimmed = filterPairTrimmed.StartsWith("not-") ? filterPairTrimmed.Substring(4) : filterPairTrimmed;
string filterFieldString = filterPairTrimmed.Split(':')[0].ToLowerInvariant().Trim('"', ' ', '\t');
string filterValue = filterPairTrimmed.Substring(filterFieldString.Length + 1).Trim('"', ' ', '\t');
MachineField filterField = filterFieldString.AsMachineField();
SetFilter(filterField, filterValue, negate);
} }
} }