2015-08-10 2 views
1

Я создал редактор, который открывается из представления.Как сохранить состояние редактора в eclipse

В частности, я создал класс редактора, который расширяет EditorPart и ввод редактора, который расширяет IEditorInput. Я также создал представление, где, если вы дважды щелкните элемент в представлении, редактор откроется. Редактор просто показывает дерево.

Все работает хорошо. Мне нужно сделать, чтобы сохранить состояние редактора при его изменении, например, когда я добавляю treeItem в дерево.

Я прочитал несколько руководств, но большинство из них объясняет, как сохранить состояние представления с помощью mementos. Я новичок в разработке Eclipse, поэтому, пожалуйста, медведь со мной: P

+0

Это довольно широкий вопрос. Большинство редакторов редактируют или создают файл, не так ли здесь? –

+0

Если редактор поддерживает расширение файла, например .txt, процесс сохранения является автоматическим, так как изменения внесены в файл. В моем случае это своего рода графический, а не текстовый, поскольку он показывает дерево, поэтому его нельзя сохранить в виде файла. Я предполагаю, что вы каким-то образом сохраняете элементы дерева внутри памяти, тогда память сохраняется как файл xml, как вид, но я не могу снять это, atm: P –

ответ

2

Если у вас нет файла для сохранения, вы можете поместить данные в «состояние местоположения» для своего плагина - это папка в каталог рабочей области .metadata/.plugins, который ваш плагин может использовать, как вам нравится.

Вы получаете государственное местоположение с помощью:

Bundle bundle = Platform.getBundle("your plugin id"); 

IPath stateLoc = Platform.getStateLocation(bundle); 

Примечания: Есть несколько способов, чтобы получить Bundle, например, вы можете также использовать:

Bundle bundle = FrameworkUtil.getBundle(getClass()); 

, который возвращает пакет для тока класс.

Вы можете сохранить/восстановить файл в любом формате. Вы указываете формат Memento. Написать на память с помощью:

XMLMemento memento = XMLMemento.createWriteRoot("root"); 

... add your entries 

try (Writer writer = new OutputStreamWriter(new FileOutputStream("file name"), StandardCharsets.UTF_8)) 
{ 
    memento.save(writer); 
} 

Читайте сувенир с чем-то вроде:

try (Reader reader = new InputStreamReader(new FileInputStream("file name"), StandardCharsets.UTF_8)) 
{ 
    IMemento memento = XMLMemento.createReadRoot(reader); 

    ... read the memento contents 
} 
+0

Большое спасибо за ваш ответ. Этот путь, безусловно, очень полезен для сохранения данных. Я нахожу ваш подход очень хорошим. Я сделаю так. –