From 8f1019f522f630e98a254f13c4da96aed844bda1 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Tue, 18 Dec 2018 02:59:11 +0000
Subject: [PATCH] ...
---
borgbutler-webapp/src/components/views/archives/FileListEntry.jsx | 4
borgbutler-webapp/src/components/views/archives/FileListPanel.jsx | 2
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java | 6 ++
borgbutler-core/src/main/java/de/micromata/borgbutler/data/FileSystemFilter.java | 42 +++++++++++--
borgbutler-core/src/test/java/de/micromata/borgbutler/data/FileSystemFilterTest.java | 68 ++++++++++++++++++++++
5 files changed, 112 insertions(+), 10 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 6ed144b..8f0e580 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
@@ -19,7 +19,6 @@
@Getter
private Mode mode;
@Getter
- @Setter
private String currentDirectory;
// For storing sub directories of the currentDirectory
private Map<String, BorgFilesystemItem> subDirectories;
@@ -48,6 +47,7 @@
* @return true if the given item matches this filter.
*/
public boolean matches(BorgFilesystemItem item) {
+ item.setDisplayPath(item.getPath());
if (fileNumber != null) {
if (item.getFileNumber() == fileNumber) {
finished = true; // Force finishing.
@@ -105,9 +105,14 @@
list = new ArrayList<>();
for (BorgFilesystemItem item : list2) {
String topLevel = getTopLevel(item.getPath());
+ if (topLevel == null) {
+ continue;
+ }
if (set.contains(topLevel) == false) {
set.add(topLevel);
- list.add(subDirectories.get(topLevel));
+ BorgFilesystemItem topItem = subDirectories.get(topLevel);
+ topItem.setDisplayPath(StringUtils.removeStart(topItem.getPath(), currentDirectory));
+ list.add(topItem);
}
}
}
@@ -119,7 +124,7 @@
* @return null if the item is not a child of the current directory otherwise the top level sub directory name of
* the current directory.
*/
- private String getTopLevel(String path) {
+ String getTopLevel(String path) {
if (StringUtils.isEmpty(currentDirectory)) {
int pos = path.indexOf('/');
if (pos < 0) {
@@ -135,7 +140,12 @@
// Don't show the current directory itself.
return null;
}
- return path.substring(currentDirectory.length());
+ path = StringUtils.removeStart(path, currentDirectory);
+ int pos = path.indexOf('/');
+ if (pos < 0) {
+ return path;
+ }
+ return path.substring(0, pos);
}
/**
@@ -179,10 +189,19 @@
*/
public FileSystemFilter setMode(String mode) {
if (mode != null && mode.toLowerCase().equals("tree")) {
- this.mode = Mode.TREE;
+ return setMode(Mode.TREE);
+ }
+ return setMode(Mode.FLAT);
+ }
+
+ /**
+ * @param mode
+ * @return this for chaining.
+ */
+ public FileSystemFilter setMode(Mode mode) {
+ this.mode = mode;
+ if (mode == Mode.TREE) {
this.subDirectories = new HashMap<>(); // needed only for tree view.
- } else {
- this.mode = Mode.FLAT;
}
return this;
}
@@ -195,4 +214,13 @@
this.finished = true;
}
}
+
+ public FileSystemFilter setCurrentDirectory(String currentDirectory) {
+ if (currentDirectory != null && currentDirectory.length() > 0) {
+ this.currentDirectory = currentDirectory + "/";
+ } else {
+ this.currentDirectory = currentDirectory;
+ }
+ 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 fb6c737..f2c48a6 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
@@ -1,5 +1,6 @@
package de.micromata.borgbutler.json.borg;
+import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
@@ -12,6 +13,7 @@
* d (directory), - (file)
*/
@Getter
+ @Setter
private String type;
/**
* Unix mode, e. g. <tt>drwxr-xr-x</tt>
@@ -27,7 +29,11 @@
@Getter
private long gid;
@Getter
+ @Setter
private String path;
+ @Setter
+ @Getter
+ private String displayPath;
@Getter
private boolean healthy;
@Getter
diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/data/FileSystemFilterTest.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/data/FileSystemFilterTest.java
new file mode 100644
index 0000000..83622a5
--- /dev/null
+++ b/borgbutler-core/src/test/java/de/micromata/borgbutler/data/FileSystemFilterTest.java
@@ -0,0 +1,68 @@
+package de.micromata.borgbutler.data;
+
+import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+public class FileSystemFilterTest {
+ @Test
+ void getTopLevelTest() {
+ FileSystemFilter filter = new FileSystemFilter();
+ assertEquals("home", filter.getTopLevel("home"));
+ assertEquals("home", filter.getTopLevel("home/test"));
+ assertEquals("home", filter.getTopLevel("home/"));
+ filter.setCurrentDirectory("home");
+ assertNull(filter.getTopLevel("home"));
+ assertEquals("kai", filter.getTopLevel("home/kai"));
+ assertEquals("kai", filter.getTopLevel("home/kai/test.java"));
+ assertNull(filter.getTopLevel("etc/test"));
+ List<BorgFilesystemItem> list = createList();
+ filter.setCurrentDirectory("").setMode(FileSystemFilter.Mode.TREE);
+ for (BorgFilesystemItem item : list) {
+ if (filter.matches(item)) {
+ // Do nothing.
+ }
+ }
+ list = filter.reduce(list);
+ assertEquals(2, list.size());
+ list = createList();
+ filter.setCurrentDirectory("home");
+ for (BorgFilesystemItem item : list) {
+ if (filter.matches(item)) {
+ // Do nothing.
+ }
+ }
+ list = filter.reduce(list);
+ assertEquals(2, list.size());
+
+ }
+
+ private BorgFilesystemItem create(String path, boolean directory) {
+ BorgFilesystemItem item = new BorgFilesystemItem().setPath(path);
+ if (directory) {
+ item.setType("d");
+ } else {
+ item.setType("-");
+ }
+ return item;
+ }
+
+ private List<BorgFilesystemItem> createList() {
+ List<BorgFilesystemItem> list = new ArrayList<>();
+ list.add(create("home", true));
+ list.add(create("home/admin", false));
+ list.add(create("home/kai", true));
+ list.add(create("home/kai/borg/cache", false));
+ list.add(create("home/kai/borg/config", false));
+ list.add(create("home/kai/Java/test.java", false));
+ list.add(create("home/kai/Java/test2.java", false));
+ list.add(create("etc/apache", true));
+ list.add(create("etc/apache/http.conf", false));
+ return list;
+ }
+}
diff --git a/borgbutler-webapp/src/components/views/archives/FileListEntry.jsx b/borgbutler-webapp/src/components/views/archives/FileListEntry.jsx
index 1d51d4c..f90abe1 100644
--- a/borgbutler-webapp/src/components/views/archives/FileListEntry.jsx
+++ b/borgbutler-webapp/src/components/views/archives/FileListEntry.jsx
@@ -35,9 +35,9 @@
function FileListEntry({archiveId, entry, search, mode, changeCurrentDirectory}) {
let path;
if (mode === 'tree' && entry.type === 'd') {
- path = <a href={'#'} onClick={() => changeCurrentDirectory(entry.path)}><Highlight search={search}>{entry.path}</Highlight></a>;
+ path = <a href={'#'} onClick={() => changeCurrentDirectory(entry.path)}><Highlight search={search}>{entry.displayPath}</Highlight></a>;
} else {
- path = <Highlight search={search}>{entry.path} tree</Highlight>;
+ path = <Highlight search={search}>{entry.displayPath}</Highlight>;
}
return (
<tr>
diff --git a/borgbutler-webapp/src/components/views/archives/FileListPanel.jsx b/borgbutler-webapp/src/components/views/archives/FileListPanel.jsx
index 46ad627..905dc6b 100644
--- a/borgbutler-webapp/src/components/views/archives/FileListPanel.jsx
+++ b/borgbutler-webapp/src/components/views/archives/FileListPanel.jsx
@@ -109,7 +109,7 @@
<BreadcrumbItem><a onClick={() => this.changeCurrentDirectory('')}
href="#">Top</a></BreadcrumbItem>
{breadcrumbs}
- <BreadcrumbItem active>{dirs[dirs.length - 1]}lkdjfls</BreadcrumbItem>
+ <BreadcrumbItem active>{dirs[dirs.length - 1]}</BreadcrumbItem>
</Breadcrumb>;
} else {
breadcrumb = '';
--
Gitblit v1.10.0