# PreferencePage in PropertiesPage ummodeln



## MZ3291 (9. Nov 2012)

Hallo,

für mein Plugin habe ich eine Preference Page bereit gestellt, in dem man Dateipfade angeben kann.. dafür habe ich dne Erweiterungspunkt org.eclipse.ui.preferencePages benutzt.. das sah folgender maßen aus:

```
public class ResourcePreferencePage extends FieldEditorPreferencePage implements WorkbenchPreferencePage {

	private IWorkbench workbench;
	public static final String RESOURCE_FILES = "resourceFiles";
	
	public ResourcePreferencePage() {
		super(FieldEditorPreferencePage.GRID);
		IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
		setPreferenceStore(preferenceStore);
	}

	@Override
	protected void createFieldEditors() {
		FileEditor fileField = new FileEditor(RESOURCE_FILES, "Resource Files:", getFieldEditorParent());
		addField(fileField);
	}

	@Override
	public void init(IWorkbench workbench) {
		this.workbench = workbench;
	}

}
```

Die Dateipfade konnte ich mir überall im Plugin dann auf folgende Weise holen:

```
String resourceFileString = Activator.getDefault().getPreferenceStore().getString(ResourcePreferencePage.RESOURCE_FILES);
```

Jetzt möchte ich allerdings diese Dateien projekt-spezifisch einstellen. Ich weiß, dass ich dafür den extension point org.eclipse.ui.propertyPages brauche und IWorkbenchPropertyPage implementieren muss.. die einfache Methode mit den Fieldeditoren würde ich allerdings gerne beibehalten.. weiß jemand wie das geht? und wie ich dann auf die EInstellungen zugreifen kann? 
Freue mich über jede Hilfe
MZ


----------



## MZ3291 (9. Nov 2012)

Ok habe jetzt festgestellt, dass die Seite angezeigt wird, wenn ich das folgendermaßen mache:


```
public class ResourcePropertyPage extends PropertyPage implements IWorkbenchPropertyPage {
	
	public static final String RESOURCE_FILES = "resourceFiles";
	private IPreferenceStore preferenceStore;
	
	public ResourcePropertyPage() {
		IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
		this.preferenceStore = preferenceStore;
	}

	@Override
	protected Control createContents(Composite parent) {
		Composite composite = new Composite(parent, SWT.NONE);
		FileEditor fileEditor = new FileEditor(RESOURCE_FILES, "Resource File", composite);
		fileEditor.setPreferenceStore(preferenceStore);
		return composite;
	}
}
```

Dummerweise wird der DateiPfad nicht gespeichert.. fileEditor.setPreferenceStore(preferenceStore); ist vermutlich nicht ganz der richtige weg.. jemand eine idee wie ich das lösen kann?


----------



## Gonzo17 (9. Nov 2012)

Was ist denn 
	
	
	
	





```
FileEditor
```
? Hast du das selbst geschrieben?


----------



## MZ3291 (9. Nov 2012)

Ja ist eine eigene Klasse.. funktioniert wie PathEditor nur eben dass man Filepaths angeben kann und nicht nur directories..
Ist aber eigtl für das Problem nicht relevant glaub ich .. ich würd mich schon freuen wenns mit einem FileFieldEditor hinhaut..

ich müsste irgendwie an den eingegebenen wert rankommen .. wenn das nicht geht begnüge ich mich wohl auch damit das mit swt widgets nach zubauen -.-


----------



## Gonzo17 (9. Nov 2012)

Es ist insofern wichtig, weil man eben mehr oder weniger entsprechend nachvollziehen kann, was da so geschieht.

Der 
	
	
	
	





```
PreferenceStore
```
 ist hier der falsche Weg. Du möchtest das Zeug ja in deinem Projekt speichern, oder? Ich weiß jetzt auch keine konkrete Lösung, aber du müsstest dir überlegen wo der Ort wäre, an dem die Information gespeichert werden soll.


----------



## MZ3291 (9. Nov 2012)

Zum Speichern habe ich folgendes gelesen:

```
private void setPersitentSelection (String name) throws CoreException {
        IResource resource = (IResource) getElement().getAdapter(IResource.class);
        resource.setPersistentProperty(PROPERTY_KEY, name);
}

    public static String getPersitentSelection (IProject project) throws CoreException {
        IResource resource = (IResource) project.getAdapter(IResource.class);
        String name = resource.getPersistentProperty(PROPERTY_KEY);
	
        return name;
}
```

die methoden müsste man dann allerdings auch wieder an der korrekten stelle aufrufen..
bin mittlerweile soweit, dass ich mir die Seite manuell zusammenbastle, aber auch da komm ich nicht vorran .. 

```
@Override
protected Control createContents(Composite parent) {	
	Composite composite = new Composite(parent, SWT.NONE);
	Label label = new Label(composite, SWT.NONE);
	label.setText("Resource File: ");
	Text text = new Text(composite, SWT.BORDER);
	Button button = new Button(composite, SWT.PUSH);
	return composite;
}
```
irgendwas habe ich vergessen.. denn die sahcen werden ja gar nicht angezeigt


----------



## MZ3291 (9. Nov 2012)

Na gut bin jetzt soweit, dass ich mit swt ganz gut zu recht komme.. Trotzdem würde ich mich über Hinweise freuen, wie man das ganze mit Field Editors bewerkstelligen kann.. ist für die Zukunft sicher einfacher..


----------

