Skip to content

Commit

Permalink
CSSTUDIO-1891 Ignore unspecified parameters when constructing a searc…
Browse files Browse the repository at this point in the history
…h query.
  • Loading branch information
abrahamwolk committed Aug 21, 2023
1 parent 2f5f875 commit 199e8c7
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,13 @@ private AlarmLogSearchJob(WebResource client, Boolean isNodeTable, ObservableMap
@Override
public void run(JobMonitor monitor) {
String searchString = "searching for alarm log entries : " +
searchParameters.entrySet().stream().map(e -> e.getKey() + ":" + e.getValue()).collect(Collectors.joining(","));
searchParameters.entrySet().stream().filter(e -> !e.getValue().equals("")).map(e -> e.getKey() + ":" + e.getValue()).collect(Collectors.joining(","));
logger.log(Level.INFO, "Searching for alarm entries: " + searchString);
monitor.beginTask(searchString);
int size = prefs.getInt("results_max_size");

MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
searchParameters.forEach((key, value) -> map.add(key.getName(), value));
searchParameters.forEach((key, value) -> { if (!value.equals("")) map.add(key.getName(), value); });
map.putIfAbsent("size", List.of(String.valueOf(size)));

try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
Expand Down Expand Up @@ -286,11 +288,13 @@ protected void updateItem(String item, boolean empty) {
.collect(Collectors.joining("&")));

searchParameters.addListener(
(MapChangeListener<Keys, String>) change -> query.setText(searchParameters.entrySet().stream()
.sorted(Entry.comparingByKey())
.filter(e -> !e.getKey().getName().equals(Keys.ROOT.getName())) // Exclude alarm config (root) as selection is managed in drop-down
.map((e) -> e.getKey().getName().trim() + "=" + e.getValue().trim())
.collect(Collectors.joining("&"))));
(MapChangeListener<Keys, String>) change ->
query.setText(searchParameters.entrySet().stream()
.sorted(Entry.comparingByKey())
.filter(e -> !e.getKey().getName().equals(Keys.ROOT.getName())) // Exclude alarm config (root) as selection is managed in drop-down
.filter(e -> !e.getValue().equals(""))
.map((e) -> e.getKey().getName().trim() + "=" + e.getValue().trim())
.collect(Collectors.joining("&"))));

query.setOnKeyPressed(keyEvent -> {
if (keyEvent.getCode() == KeyCode.ENTER) {
Expand Down Expand Up @@ -470,13 +474,25 @@ public void resize() {
@FXML
void updateQuery() {
List<String> searchTerms = Arrays.asList(query.getText().split("&"));
Set<String> searchKeywords = new TreeSet<>();
searchTerms.forEach(s -> {
String key = s.split("=")[0];
String value = s.split("=")[1];
if (lookup.containsKey(key)) {
searchParameters.put(lookup.get(key), value);
String[] splitString = s.split("=");
if (splitString.length > 1) {
String key = splitString[0];
searchKeywords.add(key);
String value = splitString[1];
if (lookup.containsKey(key)) {
searchParameters.put(lookup.get(key), value);
}
}
});

for (Keys key : searchParameters.keySet()) {
if (!searchKeywords.contains(key.toString())) {
searchParameters.put(key, "");
}
}

// Add root (alarm config) separately as it is selected differently by user,
// i.e. from drop-down rather than typing into the text field.
searchParameters.put(Keys.ROOT, configSelection.getText());
Expand Down

0 comments on commit 199e8c7

Please sign in to comment.