44import javafx .beans .value .ObservableValue ;
55import javafx .collections .FXCollections ;
66import javafx .collections .ObservableList ;
7+ import org .antlr .v4 .runtime .CharStream ;
8+ import org .antlr .v4 .runtime .CommonTokenStream ;
9+ import org .antlr .v4 .runtime .TokenStream ;
10+ import org .antlr .v4 .runtime .tree .RuleNode ;
711import org .stt .Streams ;
12+ import org .stt .command .CaseInsensitiveInputStream ;
13+ import org .stt .grammar .EnglishCommandsBaseVisitor ;
14+ import org .stt .grammar .EnglishCommandsLexer ;
15+ import org .stt .grammar .EnglishCommandsParser ;
816import org .stt .model .TimeTrackingItem ;
917
1018import java .util .ArrayList ;
@@ -41,8 +49,9 @@ private List<TimeTrackingItem> createFilteredList() {
4149 if (filter .isEmpty ()) {
4250 result = new ArrayList <>(allItems );
4351 } else {
52+ String parsed = parseActivityPart (filter );
4453 Stream <TimeTrackingItem > processingStream = allItems .stream ()
45- .filter (item -> item .getActivity ().toLowerCase ().contains (filter ));
54+ .filter (item -> item .getActivity ().toLowerCase ().contains (parsed != null ? parsed : filter ));
4655 if (filterDuplicates ) {
4756 processingStream = processingStream .filter (Streams .distinctByKey (TimeTrackingItem ::getActivity ));
4857 }
@@ -51,4 +60,23 @@ private List<TimeTrackingItem> createFilteredList() {
5160 Collections .reverse (result );
5261 return result ;
5362 }
63+
64+ private String parseActivityPart (String filter ) {
65+ CharStream inputStream = new CaseInsensitiveInputStream (filter );
66+ EnglishCommandsLexer lexer = new EnglishCommandsLexer (inputStream );
67+ TokenStream tokenStream = new CommonTokenStream (lexer );
68+ EnglishCommandsParser parser = new EnglishCommandsParser (tokenStream );
69+ EnglishCommandsBaseVisitor <String > visitor = new EnglishCommandsBaseVisitor <String >() {
70+ @ Override
71+ protected boolean shouldVisitNextChild (RuleNode node , String currentResult ) {
72+ return currentResult == null ;
73+ }
74+
75+ @ Override
76+ public String visitItemWithComment (EnglishCommandsParser .ItemWithCommentContext ctx ) {
77+ return ctx .text ;
78+ }
79+ };
80+ return visitor .visit (parser .command ());
81+ }
5482}
0 commit comments