@@ -16,19 +16,19 @@ public class Options
16
16
{
17
17
[ Option ( 'd' , "directory" , Default = "." , HelpText = "Search for *.dcm files in this directory" ) ]
18
18
19
- public string Directory { get ; set ; }
19
+ public string ? Directory { get ; set ; }
20
20
21
21
[ Option ( 'f' , "filePattern" , Default = "*.dcm" , HelpText = "Only query files that satisfy this file pattern" ) ]
22
- public string FilePattern { get ; set ; }
22
+ public string ? FilePattern { get ; set ; }
23
23
24
24
[ Option ( 'r' , "recursive" , Default = true , HelpText = "Search recursively in nested directories" ) ]
25
25
public bool Recursive { get ; set ; }
26
26
27
27
[ Option ( 'l' , "limit" , Default = 100 , HelpText = "Limit results and stop finding after this many results" ) ]
28
28
public int Limit { get ; set ; }
29
29
30
- [ Option ( shortName : 'q' , longName : "query" , Default = "" , Required = true , HelpText = "The query that should be applied" ) ]
31
- public string Query { get ; set ; }
30
+ [ Option ( shortName : 'q' , longName : "query" , Default = "" , Separator = ',' , Min = 1 , HelpText = "The query that should be applied" ) ]
31
+ public IEnumerable < string > ? Query { get ; set ; }
32
32
}
33
33
// ReSharper restore UnusedAutoPropertyAccessor.Global
34
34
// ReSharper restore MemberCanBePrivate.Global
@@ -53,15 +53,20 @@ private static void Fail(IEnumerable<Error> errors)
53
53
private static void Query ( Options options )
54
54
{
55
55
var directory = new DirectoryInfo ( options . Directory ) . FullName ;
56
+ var filePattern = options . FilePattern ;
57
+ var recursive = options . Recursive ;
58
+ var query = options . Query ;
59
+ var limit = options . Limit ;
60
+ if ( filePattern == null || query == null )
61
+ return ;
56
62
57
63
if ( ! Directory . Exists ( directory ) )
58
64
{
59
65
Console . Error . WriteLine ( $ "Invalid directory: { directory } does not exist") ;
60
66
return ;
61
67
}
62
68
63
- var filePattern = options . FilePattern ;
64
- var recursive = options . Recursive ;
69
+
65
70
var files = Files ( directory , filePattern , recursive ) ;
66
71
// ReSharper disable PossibleMultipleEnumeration
67
72
if ( ! files . Any ( ) )
@@ -70,13 +75,19 @@ private static void Query(Options options)
70
75
return ;
71
76
}
72
77
73
- if ( ! QueryParser . TryParse ( options . Query , out var query ) )
78
+ var queries = new List < IQuery > ( ) ;
79
+ foreach ( var q in options . Query ?? Array . Empty < string > ( ) )
74
80
{
75
- Console . Error . WriteLine ( $ "Invalid query: { query } ") ;
76
- return ;
81
+ if ( ! QueryParser . TryParse ( q , out var parsedQuery ) || parsedQuery == null )
82
+ {
83
+ Console . Error . WriteLine ( $ "Invalid query: { query } ") ;
84
+ return ;
85
+ }
86
+
87
+ queries . Add ( parsedQuery ) ;
77
88
}
78
89
79
- foreach ( var result in Results ( files , query , options . Limit ) )
90
+ foreach ( var result in Results ( files , queries , limit ) )
80
91
Console . WriteLine ( result ) ;
81
92
// ReSharper restore PossibleMultipleEnumeration
82
93
}
@@ -86,7 +97,7 @@ private static IEnumerable<string> Files(string directory, string filePattern, b
86
97
return Directory . EnumerateFiles ( directory , filePattern , recursive ? SearchOption . AllDirectories : SearchOption . TopDirectoryOnly ) ;
87
98
}
88
99
89
- private static DicomFile ToDicomFile ( string file )
100
+ private static DicomFile ? ToDicomFile ( string file )
90
101
{
91
102
try
92
103
{
@@ -100,24 +111,14 @@ private static DicomFile ToDicomFile(string file)
100
111
}
101
112
}
102
113
103
- private static bool NotNull ( DicomFile dicomFile )
104
- {
105
- return dicomFile != null ;
106
- }
107
-
108
- private static string FileName ( DicomFile dicomFile )
109
- {
110
- return dicomFile . File . Name ;
111
- }
112
-
113
- private static IEnumerable < string > Results ( IEnumerable < string > files , IQuery query , int limit )
114
+ private static IEnumerable < string > Results ( IEnumerable < string > files , List < IQuery > queries , int limit )
114
115
{
115
116
return files
116
117
. Select ( ToDicomFile )
117
- . Where ( NotNull )
118
- . Where ( f => query . Matches ( f . Dataset ) )
118
+ . Where ( f => f != null && queries . All ( q => q . Matches ( f . Dataset ) ) )
119
119
. Take ( limit )
120
- . Select ( FileName ) ;
120
+ . Select ( f => f ? . File ? . Name )
121
+ . Where ( fileName => fileName != null ) ;
121
122
}
122
123
}
123
124
}
0 commit comments