package net.sourceforge.pmd.eclipse.ui.preferences.br; import java.lang.reflect.InvocationTargetException; import net.sourceforge.pmd.eclipse.plugin.PMDPlugin; import net.sourceforge.pmd.eclipse.runtime.preferences.IPreferences; import net.sourceforge.pmd.eclipse.ui.nls.StringKeys; import net.sourceforge.pmd.eclipse.ui.preferences.editors.SWTUtil; import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; public abstract class AbstractPMDPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { protected IPreferences preferences; private boolean modified; protected static PMDPlugin plugin = PMDPlugin.getDefault(); protected abstract String descriptionId(); /** * Returns the isModified. * @return boolean */ public boolean isModified() { return modified; } public void setModified() { setModified(true); } /** * Sets the isModified. * @param isModified The isModified to set */ public void setModified(boolean isModified) { modified = isModified; SWTUtil.setEnabled(getApplyButton(), modified); SWTUtil.setEnabled(getDefaultsButton(), !modified); } /** * Insert the method's description here. * @see PreferencePage#init */ public void init(IWorkbench workbench) { // setDescription(getMessage(descriptionId())); preferences = PMDPlugin.getDefault().loadPreferences(); } /** * @see org.eclipse.jface.preference.IPreferencePage#performOk() */ public boolean performOk() { preferences.sync(); return super.performOk(); } /** * Helper method to shorten message access * @param key a message key * @return requested message */ protected String getMessage(String key) { return PMDPlugin.getDefault().getStringTable().getString(key); } /** * If user wants to, rebuild all projects */ protected void rebuildProjects() { if (MessageDialog.openQuestion(getShell(), getMessage(StringKeys.QUESTION_TITLE), getMessage(StringKeys.QUESTION_RULES_CHANGED))) { try { ProgressMonitorDialog monitorDialog = new ProgressMonitorDialog(getShell()); monitorDialog.run(true, true, new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { try { ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, monitor); } catch (CoreException e) { plugin.logError("Exception building all projects after a preference change", e); } } }); } catch (Exception e) { plugin.logError("Exception building all projects after a preference change", e); } } } }