package org.jboss.tools.seam.ui.wizard;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.jboss.tools.common.ui.widget.editor.ButtonFieldEditor;
import org.jboss.tools.common.ui.widget.editor.CompositeEditor;
import org.jboss.tools.common.ui.widget.editor.IFieldEditor;
import org.jboss.tools.seam.core.SeamCoreMessages;
public class ShowProjectSettingsAction extends ButtonFieldEditor.ButtonPressedAction implements PropertyChangeListener {
IFieldEditor editor;
IFieldEditor button;
public ShowProjectSettingsAction() {
super(SeamCoreMessages.SHOW_PROJECT_SETTINGS_ACTION);
}
public void setEditor(IFieldEditor editor) {
this.editor = editor;
editor.addPropertyChangeListener(this);
CompositeEditor c = (CompositeEditor)editor;
List<IFieldEditor> es = c.getEditors();
button = es.get(es.size() - 1);
}
@Override
public void run() {
if(editor == null) return;
IProject p = getSelectedProject();
if(p == null) return;
PreferenceDialog prefsdlg = PreferencesUtil.createPropertyDialogOn(
PlatformUI.getWorkbench().getDisplay().getActiveShell(),
p,
"org.jboss.tools.seam.ui.propertyPages.SeamSettingsPreferencePage",
new String[]{"org.jboss.tools.seam.ui.propertyPages.SeamSettingsPreferencePage"},
null);
prefsdlg.open();
Object value = editor.getValue();
//firing to provoke validation
editor.setValueAsString("");
editor.setValue(value);
}
public void propertyChange(PropertyChangeEvent evt) {
IProject p = getSelectedProject();
boolean enabled = p != null;
if(isEnabled() != enabled) {
setEnabled(enabled);
button.setEnabled(enabled);
}
}
IProject getSelectedProject() {
String s = editor.getValueAsString();
if(s == null || s.length() == 0) return null;
IProject p = ResourcesPlugin.getWorkspace().getRoot().getProject(s);
if(p == null || !p.isAccessible()) return null;
return p;
}
}