Как я могу сделать IEditorInput, который будет читать файл из памяти?

java eclipse eclipse-plugin eclipse-rcp

256 просмотра

1 ответ

761 Репутация автора

Я пишу плагин для затмения, и мне нужно открыть редактор для файла, загруженного в RAM. Когда я открываю новый редактор, он принимает данные из IEditorInput. Есть много классов, которые реализуют этот интерфейс, но они обычно читают файл с жесткого диска, или они бесполезны для этой цели.

Итак, вопрос: как сделать IEditorInput, который будет читать файл из памяти?

Автор: Přemysl Šťastný Источник Размещён: 18.07.2016 06:30

Ответы (1)


2 плюса

94417 Репутация автора

Решение

Вы можете использовать объект, реализующий IStorageEditorInputкак ввод редактора. При этом используется IStorageобъект для хранения данных в памяти для редактирования.

Простая IStorageEditorInputреализация будет выглядеть примерно так:

class StorageEditorInput extends PlatformObject implements IStorageEditorInput {
    private IStorage fStorage;

    public StorageEditorInput(IStorage storage) {
        fStorage = storage;
    }

    @Override
    public IStorage getStorage() {
        return fStorage;
    }

    @Override
    public ImageDescriptor getImageDescriptor() {
        return null;
    }

    @Override
    public String getName() {
        return getStorage().getName();
    }

    @Override
    public IPersistableElement getPersistable() {
        return null;
    }

    @Override
    public String getToolTipText() {
        return getStorage().getFullPath().toOSString();
    }

    @Override
    public boolean equals(Object object) {
        return object instanceof StorageEditorInput &&
         getStorage().equals(((StorageEditorInput)object).getStorage());
    }

    @Override
    public int hashCode() {
        return getStorage().hashCode();
    }

    @Override
    public boolean exists() {
        return true;
    }
}

(выше адаптировано из org.eclipse.debug.internal.ui.views.console.ProcessConsole)

Вы также должны будете предоставить свою собственную реализацию IStorage, фактически вам, вероятно, следует реализовать ее, IEncodedStorageкоторая IStorageвключает кодировку символов.

Обратите внимание, что некоторые редакторы могут не понимать IStorageEditorInput.

Автор: greg-449 Размещён: 18.07.2016 06:51
Вопросы из категории :
32x32