Получив доступ к различным уровням Java-объекта, добавьте / удалите объект и сделайте так, чтобы родитель отражал изменения. - PullRequest
0 голосов
/ 12 октября 2018

У меня есть такая структура класса

public class TreeModel {

    private String name;
    private List<FileModel> files;
    private List<FolderModel> folder;

    public TreeModel () {
        this.files = new ArrayList<>();
        this.folder = new ArrayList<>();
    }
    //getters, setters
}

public class FolderModel {

    private String name;
    private List<FileModel> files = null;
    private List<FolderModel> folder = null;

    public FolderModel () {
        this.files = new ArrayList<>();
        this.folder = new ArrayList<>();
    }

    // getters, setters
}


public class FileModel {

    private String name;
    private String text;

    //getters, setters
}

это json, который я анализирую в классе java

{
  "files": [],
  "folder": [
    {
      "name": "1 folder",
      "files": [],
      "folder": [{
          "name": "1.1 folder",
          "files": [],
          "folder": []
        },
        {
          "name": "1.2 folder",
          "files": [],
          "folder": [{
              "name": "1.2.1 folder",
              "files": [],
              "folder": []
            }
          ]
        }
      ]
    },
    {
      "name": "2 folder",
      "files": [],
      "folder": []
    },
    {
      "name": "3 folder",
      "files": [],
      "folder": []
    }
  ]
}

Пока все хорошо, но я столкнулся с проблемойчто я не знаю, как это сделать.

Хорошо, просто чтобы уточнить, у меня есть статический объект дерева, который имеет все структуры папок и файлов, уже находящихся в памяти

Допустим, у меня есть 2различные функции в одном I have to simulate the cd console command давайте вызовем эту функцию cd, поэтому я начинаю искать список папок, искать имя, выбранное пользователем, затем делать то же самое для списка папок внутри этого и так далее, покапользователь перестает заходить в папку за папкой (очевидно, мы делаем все проверки, если она существует и все такое)

как только я скажу на 5 уровней глубже, я хочу добавить / удалить папку, поэтому я вызываю другую функцию, которая добавляетпапки mkdir и вот в чем проблема как мне использовать объект, который я просматривал в функции cd и вставить новую папку в эту функцию mkdir, затемОсновной объект статического дерева отражает все изменения , если я создаю новые переменные для доступа к папкам внутри папок, позвольте мне показать вам пример.

очевидно, у меня есть много других функций ивсе они делают разные вещи внутри объекта. Я хочу, чтобы все эти изменения были отражены в главном «родительском» объекте дерева.

Функция CD перемещается по папкам

public static void cd(String FolderName) {
    // validations

    TreeModel tree = MemoryModel.getTree();

    folderPath.forEachOrdered(path -> {

        List<FolderModel> folder = newFolder.stream().filter(f -> f.getName().equals(path)).collect(Collectors.toList());

        //validations

        **HOW CAN I USE THAT folder VARIABLE INSIDE mkdir CREATE MY FOLDER AND THEN HAVE MY tree variable REFLECTS THE CHANGES I DID INSIDE OF MANY FOLDER STRUCTURES?**
    });

    //setting new path
}

Функция mkdir создает папку

public static void mkdir(String FolderName) {

    //validations

    TreeModel tree = MemoryModel.getTree();

    //more validations

    FolderModel newFolder = new FolderModel();
    newFolder.setName(FolderName);

    tree.AddOneFolder(newFolder);

    MemoryModel.setTree(tree);
    MemoryModel.setMemory(-Constants.FOLDER_MEMORY);
}
...