73 lines
2.5 KiB
C#
73 lines
2.5 KiB
C#
using KssSmaPlaLib.Commons;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace KssSmaPlaLib.InBox
|
|
{
|
|
public class SheetFilterUxer : IFilterUxer<string>
|
|
{
|
|
private readonly HashSet<string> includedSheets;
|
|
private readonly HashSet<string> excludedSheets;
|
|
|
|
public SheetFilterUxer(IEnumerable<string> included, IEnumerable<string> excluded)
|
|
{
|
|
includedSheets = new HashSet<string>(included ?? Enumerable.Empty<string>());
|
|
excludedSheets = new HashSet<string>(excluded ?? Enumerable.Empty<string>());
|
|
}
|
|
|
|
public IEnumerable<string> ApplyFilter(IEnumerable<string> sheetNames)
|
|
{
|
|
if (includedSheets.Any())
|
|
{
|
|
// Included優先 → lineNamesの中でincludedに含まれるものだけ返す
|
|
//return sheetNames.Where(name => includedSheets.Contains(name));
|
|
// ワイルドカード(*)ありとする!
|
|
List<string> listA = new List<string>();
|
|
foreach (var name in sheetNames)
|
|
{
|
|
foreach (var iName in includedSheets)
|
|
{
|
|
if (StringUxer.WildcardMatch(name, iName))
|
|
{
|
|
listA.Add(name);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return listA;
|
|
}
|
|
|
|
// Excluded適用 → lineNamesの中でexcludedに含まれないものだけ返す
|
|
//return sheetNames.Where(name => !excludedSheets.Contains(name));
|
|
// ワイルドカード(*)ありとする!
|
|
List<string> listB = new List<string>();
|
|
foreach (var name in sheetNames)
|
|
{
|
|
var isMatch = false;
|
|
foreach (var eName in excludedSheets)
|
|
{
|
|
if (StringUxer.WildcardMatch(name, eName))
|
|
{
|
|
isMatch = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!isMatch) listB.Add(name);
|
|
}
|
|
return listB;
|
|
}
|
|
public bool CanPass(string sheetName)
|
|
{
|
|
return HasAnyPass(new[] { sheetName });
|
|
}
|
|
|
|
public bool HasAnyPass(IEnumerable<string> sheetNames)
|
|
{
|
|
return ApplyFilter(sheetNames).Any();
|
|
}
|
|
}
|
|
}
|