2016-07-18 11 views
0

Ich schreibe Plugin in Eclipse und ich muss Editor für Datei im RAM geladen öffnen. Wenn ich einen neuen Editor öffne, benötigt er Eingaben von IEditorInput. Es gibt viele Klassen, die diese Schnittstelle implementieren, aber normalerweise lesen sie Dateien von der Festplatte, oder sie sind für diesen Zweck nutzlos.Wie kann ich IEditorInput machen, die Datei aus dem Speicher lesen?

So ist die Frage: Wie kann IEditorInput, die Datei aus dem Speicher lesen?

Antwort

1

Sie können ein Objekt, das IStorageEditorInput implementiert, als Editoreingabe verwenden. Dies verwendet ein Objekt IStorage, um die zu bearbeitenden Daten im Speicher zu halten.

Eine einfache IStorageEditorInput Implementierung würde in etwa so aussehen:

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; 
    } 
} 

(oben von org.eclipse.debug.internal.ui.views.console.ProcessConsole angepasst)

Sie auch Ihre eigene Implementierung von IStorage zu bieten haben, in der Tat sollten Sie wahrscheinlich IEncodedStorage implementieren, die erweitert IStorage, um die Zeichencodierung einzuschließen.

Beachten Sie, dass einige Editoren möglicherweise IStorageEditorInput nicht verstehen.