From fa2417db7c301f8cb6b721b45dd827846f0918bc Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sun, 16 Dec 2018 18:04:38 +0000
Subject: [PATCH] Black list and white list of keywords in search for files in file system is now supported.
---
borgbutler-core/src/main/java/de/micromata/borgbutler/data/FileSystemFilter.java | 47 ++++++++++++++++++++++++++++++++++++++---------
1 files changed, 38 insertions(+), 9 deletions(-)
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/data/FileSystemFilter.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/data/FileSystemFilter.java
index e3e6b23..ac91755 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/data/FileSystemFilter.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/data/FileSystemFilter.java
@@ -5,6 +5,9 @@
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
+import java.util.ArrayList;
+import java.util.List;
+
public class FileSystemFilter {
@Getter
private String searchString;
@@ -12,29 +15,55 @@
@Setter
private int maxResultSize;
private String[] searchKeyWords;
+ private String[] blackListSearchKeyWords;
public boolean matches(BorgFilesystemItem item) {
- if (searchKeyWords == null) {
- return true;
+ if (searchKeyWords != null) {
+ for (String searchKeyWord : searchKeyWords) {
+ if (!StringUtils.containsIgnoreCase(item.getPath(), searchKeyWord))
+ return false;
+ }
}
- for (String searchKeyWord : searchKeyWords) {
- if (!StringUtils.containsIgnoreCase(item.getPath(), searchKeyWord))
- return false;
+ if (blackListSearchKeyWords != null) {
+ for (String blackListSearchKeyWord : blackListSearchKeyWords) {
+ if (StringUtils.containsIgnoreCase(item.getPath(), blackListSearchKeyWord))
+ return false;
+ }
}
return true;
}
/**
- *
* @param searchString The search string. If this string contains several key words separated by white chars,
* all key words must be found.
* @return this for chaining.
*/
public FileSystemFilter setSearchString(String searchString) {
this.searchString = searchString;
- searchKeyWords = StringUtils.split(searchString);
- if (searchKeyWords != null && searchKeyWords.length == 0) {
- searchKeyWords = null;
+ String[] keyWords = StringUtils.split(searchString);
+ this.searchKeyWords = null;
+ this.blackListSearchKeyWords = null;
+ if (keyWords != null) {
+ List<String> whiteList = new ArrayList<>();
+ List<String> blackList = new ArrayList<>();
+ for (String keyWord : keyWords) {
+ if (StringUtils.isEmpty(keyWord)) {
+ continue;
+ }
+ if (keyWord.startsWith("!") && keyWord.length() > 1) {
+ blackList.add(keyWord.substring(1));
+ } else {
+ whiteList.add(keyWord);
+ }
+ }
+ if (whiteList.size() > 0) {
+ this.searchKeyWords = new String[whiteList.size()];
+ this.searchKeyWords = whiteList.toArray(this.searchKeyWords);
+ }
+ if (blackList.size() > 0) {
+ this.blackListSearchKeyWords = new String[blackList.size()];
+ this.blackListSearchKeyWords = blackList.toArray(this.blackListSearchKeyWords);
+ }
}
return this;
}
--
Gitblit v1.10.0