Skip to content

Commit 49e4b4f

Browse files
author
Bytekeeper
committed
Closes #58
1 parent 240aed2 commit 49e4b4f

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

src/main/java/org/stt/gui/jfx/binding/TimeTrackingListFilter.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,15 @@
44
import javafx.beans.value.ObservableValue;
55
import javafx.collections.FXCollections;
66
import 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;
711
import 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;
816
import org.stt.model.TimeTrackingItem;
917

1018
import 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

Comments
 (0)