mirror of https://github.com/micromata/borgbackup-butler.git

...
Kai Reinhard
18.59.2018 8f1019f522f630e98a254f13c4da96aed844bda1
...
1 files added
4 files modified
122 ■■■■■ changed files
borgbutler-core/src/main/java/de/micromata/borgbutler/data/FileSystemFilter.java 42 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java 6 ●●●●● patch | view | raw | blame | history
borgbutler-core/src/test/java/de/micromata/borgbutler/data/FileSystemFilterTest.java 68 ●●●●● patch | view | raw | blame | history
borgbutler-webapp/src/components/views/archives/FileListEntry.jsx 4 ●●●● patch | view | raw | blame | history
borgbutler-webapp/src/components/views/archives/FileListPanel.jsx 2 ●●● patch | view | raw | blame | history
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;
    }
}
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
borgbutler-core/src/test/java/de/micromata/borgbutler/data/FileSystemFilterTest.java
New file
@@ -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;
    }
}
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>
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 = '';