GETTING STARTED WITH PREFERENCE PAGES (PAGE 2)
Lets Customize Preference Pages
In this section we will modify the preference page so as to create a
single String Text Box where user can set his preference for the name of
folder which will be displayed in the Property Manager View.
Modify the PreferenceConstants class to add another constant FOLDER_NAME
as shown in bold below.
public class PreferenceConstants {
public static final String P_PATH = "pathPreference";
public static final String P_BOOLEAN = "booleanPreference";
public static final String P_CHOICE = "choicePreference";
public static final String P_STRING = "stringPreference";
public static final String FOLDER_NAME = "folderName";
}
Next, Modify the createFieldEditors() in PropertyManagerPreferencePage
class to create String filed editor. Provide FOLDER_NAME constant as the
name of this field editor (as shown below). Also declare class level
reference variable to hold String Field Editor object.
private StringFieldEditor fieldEditor;
public void createFieldEditors() {
fieldEditor = new StringFieldEditor(PreferenceConstants.
FOLDER_NAME, "Folder Name: ", getFieldEditorParent());
addField(fieldEditor);
}
Following figure shows, how preference page will look like after above
customization.

Next, Override checkState() method defined in FieldEditorPreferencePage
for the purpose of customized validations. I could have very well use
fieldEditor.setEmptyStringAllowed to perform same validation. However, I
am manually checking it here so that you can get an idea as to how to
use this method for complex validations. protected void checkState() {
super.checkState();
if(fieldEditor.getStringValue()!= null && !fieldEditor.getStringValue().equals("")){
setErrorMessage(null);
setValid(true);
}else{
setErrorMessage("Folder name cannot be blank!");
setValid(false);
}
}
The FieldEditorPropertyPage listens for FieldEditor.IS_VALID property
change events and then calls checkState() and setValid() as necessary.
The String field editors are never in an invalid state and thus do not
issue FieldEditor.IS_VALID property change events, only
FieldEditor.VALUE property change events. You must override the
FieldEditorPreferencePage propertyChange() method to call the checkState()
method when the FieldEditor.VALUE property change event is received.
public void propertyChange(PropertyChangeEvent event) {
super.propertyChange(event);
if (event.getProperty().equals(FieldEditor.VALUE)) {
checkState();
}
}
With above change an error message is displayed across the top of the
preference page and the Apply and OK buttons are disabled (as shown
below)

Next, Modify com.myplugin.rmp.preferences.
PreferenceInitializer (Generated by create preference page wizard) to set
the default value for folder name. In general Initializers are used to
initialize default preference values. Modify
initializeDefaultPreferences() as shown below
public void initializeDefaultPreferences() {
IPreferenceStore store = RmpPlugin.getDefault()
.getPreferenceStore();
store.setDefault(PreferenceConstants.FOLDER_NAME,"WorkSpace Property Files");
}
With above change, folder name will be defaulted to “WorkSpace Property
Files” whenever user clicks on default button in preferences dialog (as
shown below)

Next Modify PropertyManagerView class so as to use preference rather
than hard coded folder name. Modify initialize method as follows:
public void initialize() {
IPreferenceStore store = RmpPlugin.getDefault()
.getPreferenceStore();
String folderName = store.getString(PreferenceConstants.FOLDER_NAME);
TreeParent root = new TreeParent(folderName);
try {
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IProject[] projects = workspace.getRoot().getProjects();
rest method is same
With above mentioned change, On every refresh on root
node of Properties view – folder name will be picked up from
preferences.

|