From d70dc529484a3d8e13ca41d7052b27df75c0e91d Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sun, 16 Dec 2018 17:53:25 +0000
Subject: [PATCH] Sorting of files added and multiple key words supported in search.

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java                 |    6 ++----
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java |    8 +++++++-
 borgbutler-core/src/main/java/de/micromata/borgbutler/data/FileSystemFilter.java        |   25 ++++++++++++++++++++++---
 3 files changed, 31 insertions(+), 8 deletions(-)

diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
index a166a35..d9d0542 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
@@ -22,10 +22,7 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Scanner;
+import java.util.*;
 
 public class BorgCommands {
     private static Logger log = LoggerFactory.getLogger(BorgCommands.class);
@@ -148,6 +145,7 @@
                 content.add(item);
             }
         }
+        Collections.sort(content); // Sort by path.
         return content;
     }
 
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 2f2b8ad..e3e6b23 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
@@ -7,16 +7,35 @@
 
 public class FileSystemFilter {
     @Getter
-    @Setter
     private String searchString;
     @Getter
     @Setter
     private int maxResultSize;
+    private String[] searchKeyWords;
 
     public boolean matches(BorgFilesystemItem item) {
-        if (searchString == null || searchString.length() == 0) {
+        if (searchKeyWords == null) {
             return true;
         }
-        return StringUtils.containsIgnoreCase(item.getPath(), searchString);
+        for (String searchKeyWord : searchKeyWords) {
+            if (!StringUtils.containsIgnoreCase(item.getPath(), searchKeyWord))
+                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;
+        }
+        return this;
     }
 }
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java
index 2677b99..789fede 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java
@@ -2,10 +2,11 @@
 
 import lombok.Getter;
 import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
 
 import java.io.Serializable;
 
-public class BorgFilesystemItem implements Serializable {
+public class BorgFilesystemItem implements Serializable, Comparable<BorgFilesystemItem> {
     private static final long serialVersionUID = -5545350851640655468L;
     /**
      * d (directory), - (file)
@@ -40,4 +41,9 @@
     private String mtime;
     @Getter
     private long size;
+
+    @Override
+    public int compareTo(BorgFilesystemItem o) {
+        return StringUtils.compare(this.path, o.path);
+    }
 }

--
Gitblit v1.10.0