Auswahl von IFile Instanzen speichern und wiederherstellen

thommyslaw

Mitglied
Ich wähle über einen ResourceSelectionDialog eine Menge von Dateien aus, die mir der Dialog anschließend als IFile Instanzen zurückgibt.
Diese Instanzen speichere ich in einer Liste und hänge diese an ein anderes Objekt.
Zur Persistenz werden diese Objekte in einer .xmi Datei gespeichert.
Beim Wiederherstellen muss ich nun die IFile Referenzen wieder aufbauen - fragt sich nur wie?!

Ich muss im weiteren Verlauf auf den konkreten Dateien, die sich hinter den IFile Instanzen befinden, Aktionen durchführen. Es würden also auch "gewöhnliche" File Objekte möglich sein.
Ich benötige allerdings IFile Instanzen, um diese dem ResourceSelectionDialog als initialInput zu übergeben zum erneuten Bearbeiten.

Hat jemand evtl. eine (bessere) Idee?
 
Hallo,

hab ich das richtig verstanden, dass deine Frage ist, wie du die IFile-Instance wieder herstellst, oder?

MFG

Sascha
 
Hallo,

du solltest schon noch erwähnen, dass du hier von Eclipse API sprichst ;-)
Das IFile abstrahiert ein konkrete Datei in deinem Workspace.
In deinem XMI speicherst du wohl dann den Pfad zu dieser Datei.
Du kannst nun org.eclipse.core.internal.resources.File Instanzen über den entsprechenden Konstruktor erzeugen-> mit
einem IPath (den du beispielsweise via: org.eclipse.core.runtime.Path.fromXXXX(...) erhälst ) und dem Workspace
(bekommst du via ResourcesPlugin.getWorkspace() ).
Alternativ könntest du dir auch noch mit FileLocator.getBundleFile(...) helfen.

Gruß Tom
 
Der Konstruktor org.eclipse.core.internal.resources.File(IPath path, Workspace container) ist leider protected :(.

Ich nehme gerne noch Tipps für einen anderen Weg an ;).
 
org.eclipse.core.resources.IWorkspaceRoot.getFileForLocation(IPath) liefert immer null zurück, egal was ich auch übergebe.

Durch Zufall fand ich dann die Methode getFile(IPath path) in der Klasse org.eclipse.core.resources.IContainer, welche auch vom IWorkspaceRoot implementiert wird.

Damit geht's nun folgendermaßen einwandfrei:
- Den Pfad mit Hilfe von fileInstance.getFullPath().toPortableString() in XMI schreiben
- Wiederherstellen der IFile mit:
Java:
IPath path = Path.fromPortableString(pathString);
IWorkspaceRoot rootWorkspace = ResourcesPlugin.getWorkspace().getRoot();
IFile file = rootWorkspace.getFile(path);

Vielen Dank für die Hilfe! ;-)
 
Zurück