Как реализовать отслеживание версий документов в редакторе GUI - PullRequest
0 голосов
/ 20 мая 2019

Я нахожусь в центре Java-проекта в разгаре.Я уже сделал редактор GUI, в котором вы можете загружать, редактировать через GUI и сохранять на системный диск.Я пришел к этой истории пользователя и не знаю, как к ней подойти.Похоже, что это мерзавец для документов?

Как пользователь, я должен иметь возможность в любое время активировать механизм автоматического отслеживания версий, который отслеживает историю развития документа.История состоит из последовательности последующих версий латексного документа.Механизм должен предоставлять как минимум две альтернативные стратегии хранения истории эволюции документа:

  • Volatile (стратегия по умолчанию): при каждом изменении документа механизм сохраняет предыдущую версию документа в списке основной памяти.последующие версии документа.
  • Стабильно: при каждом изменении документа механизм сохраняет предыдущую версию документа на диске.

Я думаю, что энергозависимая стратегия сохраняеттекущий прогресс в строке?Если каждый раз, когда JTextArea GUI редактируется, строка должна обновляться?

1 Ответ

0 голосов
/ 20 мая 2019

На самом деле, похоже, что действие UNDO обеспечивает большинство редакторов, но с другим процессом "обработки версий".

Чтобы реализовать стратегию Volatile (как описано), я бы использовал структуру данных, чтобы сохранить версии документа. Например, HashMap<Integer, Document>, который сохраняет версии документа в качестве ключей, а клоны документов - в качестве значений. Поэтому, когда я хочу перейти к предыдущей версии, я просто делаю это следующим образом:

private void goToPreviousVersion(Document doc)
{
    Document oldVersion = hashmap.get(doc.getVersionId());
    doc.setContent(oldVersion);
    //copy all properties from old version the the document

    //Update the view (GUI)
}

Теперь сохранение версии должно быть простым. Что-то вроде:

private void saveVersion(Document doc)
{
    hashmap.put(doc.getVersionId(), doc.clone());
    doc.setVersionId(doc.getVersionId +1);
}

То же самое относится и к Стабильной стратегии, но вместо структуры данных вы сохраняете клоны на жестком диске с именами, которые вы можете искать позже, чтобы вернуться назад. Например, версия1, версия2, версия3 и т. Д. Если вы хотите вернуться назад, просто загрузите файл «версия» + (document.getVersionId-1).


Об изменении стратегии версий в любое время легко. Создайте классы, которые представляют эти механизмы версий (например, VolatileStrategy, StableStrategy) и добавьте к ним отношение. Может быть сделано через родительский класс (VolatileStrategy extends VersionStrategy) или, возможно, через интерфейс (что я бы предпочел), например VolatileStrategy implements VersionStrategy. Наконец, сохраните ссылку на активную стратегию private VersionStrategy versionStrategy;, и всякий раз, когда вы захотите ее изменить, просто: versionStrategy = new StableStrategy();


Сохранение версий может быть сделано разными способами. Один из простых способов - добавить в графический интерфейс кнопку с названием «Сохранить версию». При щелчке по нему сохраняется версия документа. Другой способ, наиболее распространенный во всех редакторах (но более сложный для реализации), заключается в использовании таймера.

При нажатии клавиши в текстовом поле запускается таймер, скажем, на 300 мс. Если другая клавиша нажата до 300 мс, таймер перезапускается. Если в течение 300 мс ничего не нажимается, таймер сохраняет версию документа и останавливается. Затем при следующем нажатии клавиши таймер запускается снова, и этот процесс повторяется.

Если вам интересно реализовать второй способ, но вы никогда раньше не работали с таймерами Swing, взгляните на Как использовать таймеры в колебании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...