package org.testng.eclipse.ui.preferences;
import java.io.File;
import org.eclipse.debug.internal.ui.preferences.BooleanFieldEditor2;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.preference.DirectoryFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.StringButtonFieldEditor;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.testng.eclipse.TestNGPlugin;
import org.testng.eclipse.TestNGPluginConstants;
import org.testng.eclipse.ui.util.Utils;
import org.testng.eclipse.util.ResourceUtil;
/**
* Workspace wide preferences for TestNG.
*/
public class WorkspacePreferencePage
extends FieldEditorPreferencePage
implements IWorkbenchPreferencePage
{
private FSBrowseDirectoryFieldEditor m_outputdir;
private BooleanFieldEditor2 m_absolutePath;
private BooleanFieldEditor2 m_disabledDefaultListeners;
private BooleanFieldEditor2 m_showViewWhenTestsComplete;
private BooleanFieldEditor2 m_showCaseNameOnViewTitle;
private ResourceSelectionFieldEditor m_xmlTemplateFile;
private StringFieldEditor m_excludedStackTraces;
private StringFieldEditor m_preDefinedListeners;
public WorkspacePreferencePage() {
super(GRID);
setPreferenceStore(TestNGPlugin.getDefault().getPreferenceStore());
setDescription("TestNG workbench preferences"); //$NON-NLS-1$
}
/**
* Creates the field editors. Field editors are abstractions of
* the common GUI blocks needed to manipulate various types
* of preferences. Each field editor knows how to save and
* restore itself.
*/
@Override
public void createFieldEditors() {
Composite parentComposite= getFieldEditorParent();
m_outputdir= new FSBrowseDirectoryFieldEditor(TestNGPluginConstants.S_OUTDIR,
"Output directory:", //$NON-NLS-1$
parentComposite);
m_outputdir.fillIntoGrid(parentComposite, 3);
Button btn= m_outputdir.getChangeControl(parentComposite);
btn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent evt) {
m_absolutePath.getChangeControl(getFieldEditorParent()).setSelection(true);
}
});
m_absolutePath= new BooleanFieldEditor2(TestNGPluginConstants.S_ABSOLUTEPATH,
"Absolute output path", //$NON-NLS-1$
SWT.NONE,
parentComposite);
m_outputdir.setAbsolutePathVerifier(m_absolutePath);
// XML template
m_xmlTemplateFile = new ResourceSelectionFieldEditor(TestNGPluginConstants.S_XML_TEMPLATE_FILE,
ResourceUtil.getString("TestNGPropertyPage.templateXml"), parentComposite);
m_xmlTemplateFile.setEmptyStringAllowed(true);
m_xmlTemplateFile.fillIntoGrid(parentComposite, 3);
m_disabledDefaultListeners= new BooleanFieldEditor2(TestNGPluginConstants.S_DISABLEDLISTENERS,
ResourceUtil.getString("TestNGPropertyPage.disableDefaultListeners"), //$NON-NLS-1$
SWT.NONE,
parentComposite);
m_preDefinedListeners = new StringFieldEditor(TestNGPluginConstants.S_PRE_DEFINED_LISTENERS,
ResourceUtil.getString("TestNGPropertyPage.preDefinedListeners"), parentComposite);
Label sepLabel = new Label(parentComposite, SWT.SEPARATOR | SWT.HORIZONTAL);
GridDataFactory.fillDefaults().span(3, SWT.DEFAULT).applyTo(sepLabel);
m_showViewWhenTestsComplete = new BooleanFieldEditor2(
TestNGPluginConstants.S_SHOW_VIEW_WHEN_TESTS_COMPLETE,
"Show view when tests complete", //$NON-NLS-1$
SWT.NONE, parentComposite);
m_showCaseNameOnViewTitle = new BooleanFieldEditor2(
TestNGPluginConstants.S_VIEW_TITLE_SHOW_CASE_NAME,
"Show test name on view title when tests complete", //$NON-NLS-1$
SWT.NONE, parentComposite);
// Excluded stack traces
m_excludedStackTraces = new StringFieldEditor(TestNGPluginConstants.S_EXCLUDED_STACK_TRACES,
"Excluded stack traces:", parentComposite);
m_excludedStackTraces.fillIntoGrid(parentComposite, 3);
GridDataFactory.fillDefaults().grab(true, false)
.hint(convertWidthInCharsToPixels(36), SWT.DEFAULT)
.applyTo(m_excludedStackTraces.getTextControl(parentComposite));
addField(m_outputdir);
addField(m_absolutePath);
addField(m_disabledDefaultListeners);
addField(m_showViewWhenTestsComplete);
addField(m_showCaseNameOnViewTitle);
addField(m_xmlTemplateFile);
addField(m_excludedStackTraces);
addField(m_preDefinedListeners);
}
/* (non-Javadoc)
* @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
*/
public void init(IWorkbench workbench) {
}
private static class ResourceSelectionFieldEditor extends StringButtonFieldEditor {
public ResourceSelectionFieldEditor(String name, String labelText, Composite parent) {
super(name, labelText, parent);
setChangeButtonText("Browse...");
}
@Override
protected String changePressed() {
return Utils.selectTemplateFile(getShell());
}
}
private static class FSBrowseDirectoryFieldEditor extends DirectoryFieldEditor {
BooleanFieldEditor2 absolutePath;
public FSBrowseDirectoryFieldEditor(String name, String labelText, Composite parent) {
super(name, labelText, parent);
}
protected void setAbsolutePathVerifier(BooleanFieldEditor2 isAbsolute) {
absolutePath= isAbsolute;
}
@Override
public Button getChangeControl(Composite parent) {
return super.getChangeControl(parent);
}
@Override
protected boolean doCheckState() {
String fileName = getTextControl().getText();
fileName = fileName.trim();
if (fileName.length() == 0 && isEmptyStringAllowed()) {
return true;
}
if(absolutePath.getBooleanValue()) {
File file = new File(fileName);
return file.isDirectory();
}
return true;
}
}
}