Einer Eclipse View Parameter übergeben?

Yadis

Grünschnabel
Hallo.
Mal wieder bin ich nach langem Suchen fast verzweifelt und versuche hier wieder mein Glück.
Kurz worums geht: Ich schreibe grade ein Eclipse Plugin und im Moment hab ich Probleme mit einer View. Die View soll eine XML Datei mithilfe eines TableViewers anzeigen. Das funktioniert auch, solange die XML Datei fest im Quelltext steht.
Das ist natürlich nicht sonderlich praktisch, und deshalb möchte ich eine beliebige XML Datei anzeigen können. Übergebe ich aber einen Parameter an die Klasse, so bekomme ich eine sofort eine java.lang.InstantiationException geworfen, weil ViewPart eine abstrakte Klasse ist.
Kurzer Codeauszug:

Code:
public class HistoryView extends ViewPart
{
	@Override
	public void createPartControl(Composite parent)
	{
		historyFilePath = "G:\\";
		history = new HistoryFile(historyFilePath, "history.xml");
		new HistoryTable(parent, history);
	}
}

Dieser Code funktioniert auch, alles so wie es soll.
Nun möchte ich aber eben den historyFilePath übergeben, sodass dieser nicht mehr fest im Code steht.

Versucht hab ich folgendes:

Code:
public class HistoryView extends ViewPart
{
	String historyFilePath;

	public HistoryView(String historyFilePath)
	{
		this.historyFilePath = historyFilePath;
	}
	
	@Override
	public void createPartControl(Composite parent)
	{
		history = new HistoryFile(historyFilePath, "history.xml");
		new HistoryTable(parent, history);
	}
}

Der Konstruktor an sich wird halt ignoriert, und sonst habe ich ja keine Möglichkeit Parameter zu übergeben. Der einzige Konstruktor, der funktioniert ist der, der keine Parameter hat.
Mir ist schon bewusst, dass ich diesen Fehler provoziere, wenn ich die View einfach so öffne. Im Moment geschieht das so, dass es einen Editor gibt, wo der Dateiname angezeigt wird und man die View auf Knopfdruck öffnen kann (so zumindest soll es gehn).

Hat da jemand eine Idee, wie ich da Parameter übergeben kann?
 
Zuletzt bearbeitet:
Kannst du den Pfad nicht in den Preferences ablegen?

Was hat das überhaupt damit zu tun, dass ViewPart eine abstrakte Klasse ist? Du sollst Views ja sowieso nicht selbst instantiieren sondern als Extension anmelden und dann über die Workbench erstellen.
 
Musst du das denn unbedingt als Parameter übergeben?

Weil sonst würd ich dir zu einem FileDialog raten, hab leider grad kein Beispiel parat aber funktioniert super einfach. Bei Interesse einfach mal danach googeln oder anschreiben dann kann ich dir n Beispiel reinsetzen.

lg unltd
 
Musst du das denn unbedingt als Parameter übergeben?

Weil sonst würd ich dir zu einem FileDialog raten, hab leider grad kein Beispiel parat aber funktioniert super einfach. Bei Interesse einfach mal danach googeln oder anschreiben dann kann ich dir n Beispiel reinsetzen.

lg unltd

Das versteh ich leider nicht?! Ich weiß schon was ein FileDialog ist, benutz den auch selbst, aber inwiefern soll das mein Problem lösen? Wenn du vorschlägst, dass ich den in der View aufrufe, dann ist das nicht sehr schön, weil ich dann nicht sicherstellen kann, dass der Benutzer wirklich die Datei angibt, die er soll.
Vielleicht muss ich umfangreicher erklären, was ich möchte.
Ich stelle also eine neue Perspektive zu Verfügung, inkl Package Explorer. Klickt man nun im Package Explorer auf eine Datei mit der Endung meines Dateitypen (ist im Prinzip eine ZipDatei), so werden alle Dateien lokal entpackt und ein Editor für jede betreffende Datei geöffnet, alle, bis auf eine. Diese eine Datei muss in einer View dargestellt werden, weil sie immer sichtbar sein soll, und das geht ja eben nicht mit einem Editor. Bearbeitbar muss diese Datei auch nicht sein, aber anzeigen muss ich sie können.
Also kurz: Doppelklick auf Zip Datei entpackt alle Dateien und öffnet die Editoren für alle sie. Die xml Datei allerdings soll in einer View dargestellt werden. Im Prinzip soll also der Editor für die Zip Datei diese View öffnen mit der richtigen Datei.
So zumindest soll es funktionieren, evtl bin ich aber auch gar nicht auf dem richtigen Weg.

@zeja: Ich versuchs mal. Das ich die Klasse nicht instanziieren soll ist mir auch klar, aber ich hab ja keine andere Möglichkeit gesehn die View irgendwie zu beeinflussen. Das muss doch gehen...
 
Es geht über ne Secondary-Id die du mit übergeben kannst. Aber dafür ist sie nicht gedacht. Dann kannst du die View auch nur einmal öffnen. Also die Preferences und dort als Default-Value ist sicher der schönere Weg. Wenn mans später dann mal vom Nutzer her ändern können soll, musst du dann auch nicht mehr so viel ändern.
 
Es geht über ne Secondary-Id die du mit übergeben kannst. Aber dafür ist sie nicht gedacht. Dann kannst du die View auch nur einmal öffnen. Also die Preferences und dort als Default-Value ist sicher der schönere Weg. Wenn mans später dann mal vom Nutzer her ändern können soll, musst du dann auch nicht mehr so viel ändern.

Danke, Preferences sind wohl der einzig sinnvolle Weg.
 

Neue Beiträge

Zurück