org.eclipse.jubula.client.ui.rcp.preferences.TestResultPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jubula.client.ui.rcp.preferences.TestResultPreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2004, 2010 BREDEX GmbH.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     BREDEX GmbH - initial API and implementation and/or initial documentation
 *******************************************************************************/
package org.eclipse.jubula.client.ui.rcp.preferences;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jubula.client.ui.constants.Constants;
import org.eclipse.jubula.client.ui.constants.ContextHelpIds;
import org.eclipse.jubula.client.ui.rcp.Plugin;
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
import org.eclipse.jubula.client.ui.rcp.widgets.I18nStringCombo;
import org.eclipse.jubula.client.ui.utils.LayoutUtil;
import org.eclipse.jubula.tools.internal.constants.StringConstants;
import org.eclipse.jubula.tools.internal.exception.Assert;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

/**
 * @author BREDEX GmbH
 * @created 10.01.2005
 */
public class TestResultPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {

    /** 1 column */
    private static final int NUM_COLUMNS = 4;

    /** 10 horizontal spaces */
    private static final int HORIZONTAL_SPACING_10 = 10;

    /** 10 vertical spaces */
    private static final int VERTICAL_SPACING_10 = 10;

    /** margin height = 10 */
    private static final int MARGIN_HEIGHT_10 = 10;

    /** margin width = 10 */
    private static final int MARGIN_WIDTH_10 = 10;

    /** Available report styles (i18n keys)*/
    private static final String[] REPORT_STYLES = { "StyleComplete", //$NON-NLS-1$
            "StyleErrorsOnly" //$NON-NLS-1$
    };

    /** Available report style prefix (for i18n) */
    private static final String REPORT_STYLE_BASIC_KEY = "TestResultViewPreferencePage"; //$NON-NLS-1$

    /** textfield to define path to xml Generation */
    private Text m_path = null;

    /**  Checkbox to decide Open ResultView */
    private Button m_openResultView = null;

    /**  Checkbox to decide Open ResultView */
    private Button m_trackResults = null;

    /**  Checkbox to decide to automatically take screenshots */
    private Button m_autoScreenshots = null;

    /** Checkbox to decide Report Generation */
    private Button m_generateReport = null;

    /** Checkbox to decide Monitoring Report Generation */
    private Button m_generateMonitoringReport = null;

    /** ComboBox to decide Report Generation style */
    private Combo m_reportStyle = null;

    /** Browse Button */
    private Button m_browser = null;

    /**
     * textfield to define maximum number of results in the test result summary
     * view
     */
    private Text m_numberOfDays = null;

    /** textfield to define maximum number of iterations */
    private Text m_iterMaxField = null;

    /**
     * <code>m_testExecRememberValue</code>
     */
    private boolean m_testExecRememberValue;

    /** LogView Radio Button for always */
    private Button m_openLogButton;
    /** LogView Radio Button for never */
    private Button m_openLog1Button;
    /** LogView Radio Button for prompt */
    private Button m_openLog2Button;
    /** the value */
    private int m_openLogValue;
    /** listener for changes in the open logview settings */
    private SelectionListener m_logButtonListener = new WidgetSelectionListener();

    /**
     * Default Constructor  
     */
    public TestResultPreferencePage() {
        setPreferenceStore(Plugin.getDefault().getPreferenceStore());
    }

    /**
     * Implement the user interface for the preference page. Returns a control
     * that should be used as the main control for the page.
     * <p>
     * User interface defined here supports the definition of preference
     * settings used by the management logic.
     * </p>
     * 
     * {@inheritDoc}
     */
    protected Control createContents(Composite parent) {
        /** Add layer to parent widget */
        setMessage(Messages.TestResultViewPreferencePageTitle, NONE);
        final ScrolledComposite scrollComposite = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL);
        final Composite composite = new Composite(scrollComposite, SWT.NONE);

        /** Define laout rules for widget placement */
        compositeGridData(composite);
        // add widgets to composite
        createOpenResultView(composite);
        createRememberGroup(composite);
        createGenerateReport(composite);

        createMaxNumberOfResults(composite);
        createIterMaxField(composite);
        // context sensitive help
        Plugin.getHelpSystem().setHelp(parent, ContextHelpIds.PREFPAGE_TESTRESULT);
        initPreferences();

        /** return the widget used as the base for the user interface */
        scrollComposite.setContent(composite);
        scrollComposite.setExpandHorizontal(true);
        scrollComposite.setExpandVertical(true);
        scrollComposite.addControlListener(new ControlAdapter() {
            public void controlResized(ControlEvent e) {
                scrollComposite.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
            }
        });
        addListener();
        return scrollComposite;
    }

    /**
     * @param composite the parent composite
     */
    private void createMaxNumberOfResults(Composite composite) {
        Label label = new Label(composite, SWT.NONE);
        label.setFont(LayoutUtil.BOLD_TAHOMA);
        label.setText(Messages.TestResultViewPreferencePageMaxNumberOfDaysText);
        GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.horizontalSpan = 4;
        gridData.grabExcessHorizontalSpace = true;
        label.setLayoutData(gridData);
        m_numberOfDays = newTextField(composite);
        gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.horizontalSpan = 3;
        gridData.grabExcessHorizontalSpace = true;
        LayoutUtil.addToolTipAndMaxWidth(gridData, m_numberOfDays);
        m_numberOfDays.setLayoutData(gridData);
        gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
        gridData.horizontalSpan = 1;
        gridData.grabExcessHorizontalSpace = false;
        m_numberOfDays.addKeyListener(new KeyListener() {
            public void keyPressed(KeyEvent e) {
                // nothing
            }

            public void keyReleased(KeyEvent e) {
                checkCompleteness();
            }
        });
    }

    /**
     * @param composite the parent composite
     */
    private void createIterMaxField(Composite composite) {
        Label label = new Label(composite, SWT.NONE);
        label.setFont(LayoutUtil.BOLD_TAHOMA);
        label.setText(Messages.TestResultViewPreferencePageMaxNumOfItersText);
        GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.horizontalSpan = 4;
        gridData.grabExcessHorizontalSpace = true;
        label.setLayoutData(gridData);
        m_iterMaxField = newTextField(composite);
        gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.horizontalSpan = 3;
        gridData.grabExcessHorizontalSpace = true;
        LayoutUtil.addToolTipAndMaxWidth(gridData, m_iterMaxField);
        m_iterMaxField.setLayoutData(gridData);
        gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
        gridData.horizontalSpan = 1;
        gridData.grabExcessHorizontalSpace = false;
        m_iterMaxField.addKeyListener(new KeyListener() {
            public void keyPressed(KeyEvent e) {
                // nothing
            }

            public void keyReleased(KeyEvent e) {
                checkCompleteness();
            }
        });
    }

    /**
     * @param composite The composite.
     */
    private void compositeGridData(Composite composite) {
        GridLayout compositeLayout = new GridLayout();
        compositeLayout.numColumns = NUM_COLUMNS;
        compositeLayout.horizontalSpacing = HORIZONTAL_SPACING_10;
        compositeLayout.verticalSpacing = VERTICAL_SPACING_10;
        compositeLayout.marginHeight = MARGIN_HEIGHT_10;
        compositeLayout.marginWidth = MARGIN_WIDTH_10;
        composite.setLayout(compositeLayout);
        GridData compositeData = new GridData(GridData.FILL_BOTH);
        compositeData.grabExcessHorizontalSpace = true;
        compositeData.grabExcessVerticalSpace = true;
        composite.setLayoutData(compositeData);
    }

    /**
     * Checks if Preference Page is complete and valid
     */
    protected void checkCompleteness() {
        String path = m_path.getText().trim();
        boolean writeResult = m_generateReport.getSelection();
        if (writeResult && path.equals(StringConstants.EMPTY)) {
            setErrorMessage(Messages.TestResultViewPreferencePagePathEmpty);
            setValid(false);
            return;
        }
        File dir = new File(path);
        boolean valid = true;

        if (writeResult) {
            if (dir.isDirectory() && dir.exists()) {
                File file = new File(dir.getAbsolutePath() + "/tmp.xml"); //$NON-NLS-1$
                try {
                    boolean created = false;
                    if (!file.exists()) {
                        file.createNewFile();
                        created = true;
                    }
                    if (!file.canWrite()) {
                        valid = false;
                    }
                    if (created) {
                        file.delete();
                    }
                } catch (IOException e) {
                    valid = false;
                }
            } else {
                valid = false;
            }
        }
        if (!valid) {
            setErrorMessage(Messages.TestResultViewPreferencePagePathInvalid);
            setValid(false);
            return;
        }
        if (!checkValidNumber(m_numberOfDays.getText().trim())) {
            return;
        }
        if (!checkValidNumber(m_iterMaxField.getText().trim())) {
            return;
        }

        setErrorMessage(null);
        setMessage(Messages.TestResultViewPreferencePageTitle, NONE);
        setValid(true);
    }

    /**
     * Checks whether an input is a positive integer
     * @param text the text
     * @return whether it is a positive integer
     */
    private boolean checkValidNumber(String text) {
        try {
            int num = Integer.parseInt(text);
            if (num < 1) {
                setErrorMessage(Messages.TestResultViewPreferencePageNegativeNumber);
                setValid(false);
                return false;
            }
        } catch (NumberFormatException e) {
            setErrorMessage(Messages.TestResultViewPreferencePageInvalidNumber);
            setValid(false);
            return false;
        }
        return true;
    }

    /**
     * @param parent The composite.
     * @return a new m_text field
     */
    private Text newTextField(Composite parent) {
        final Text textField = new Text(parent, SWT.BORDER);
        GridData textGrid = new GridData(GridData.FILL, GridData.CENTER, true, false, 3, 1);
        textGrid.widthHint = Dialog.convertWidthInCharsToPixels(LayoutUtil.getFontMetrics(textField),
                LayoutUtil.WIDTH);
        textField.setLayoutData(textGrid);
        return textField;
    }

    /**
     * @param parent parent of this textfield
     */
    private void createOpenResultView(Composite parent) {
        // create Widget
        m_openResultView = new Button(parent, SWT.CHECK);
        m_openResultView.setText(Messages.TestResultViewPreferencePageOpenResultView);
        GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.horizontalSpan = 4;
        gridData.grabExcessHorizontalSpace = false;
        m_openResultView.setLayoutData(gridData);

        m_trackResults = new Button(parent, SWT.CHECK);
        m_trackResults.setText(Messages.TestResultViewPreferencePageTrackResults);
        gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.horizontalSpan = 4;
        gridData.grabExcessHorizontalSpace = false;
        m_trackResults.setLayoutData(gridData);

        m_autoScreenshots = new Button(parent, SWT.CHECK);
        m_autoScreenshots.setText(Messages.TestResultViewPreferencePageAutoScreenshots);
        gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.horizontalSpan = 4;
        gridData.grabExcessHorizontalSpace = false;
        m_autoScreenshots.setLayoutData(gridData);
    }

    /**
     * @param parent parent of this textfield
     */
    private void createGenerateReport(Composite parent) {
        // create Widget
        m_generateReport = new Button(parent, SWT.CHECK);
        m_generateReport.setText(Messages.TestResultViewPreferencePageGenerateReport);
        GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.horizontalSpan = 4;
        gridData.grabExcessHorizontalSpace = true;
        m_generateReport.setLayoutData(gridData);
        m_generateReport.addSelectionListener(new SelectionListener() {
            public void widgetSelected(SelectionEvent e) {
                enableReportStyleCombo();
                enableMonitoringReportGeneration();
                enableLogFileBrowser();
                checkCompleteness();
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                // nothing here
            }
        });

        createMonitoringReportButton(parent);

        createReportStyleCombo(parent);
        Label label = new Label(parent, SWT.NONE);
        label.setFont(LayoutUtil.BOLD_TAHOMA);
        label.setText(Messages.TestResultViewPreferencePagePathText);
        gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.horizontalSpan = 4;
        gridData.grabExcessHorizontalSpace = true;
        label.setLayoutData(gridData);
        m_path = newTextField(parent);
        gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.horizontalSpan = 3;
        gridData.grabExcessHorizontalSpace = true;
        LayoutUtil.addToolTipAndMaxWidth(gridData, m_path);
        m_path.setLayoutData(gridData);
        m_browser = new Button(parent, SWT.NONE);
        gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
        gridData.horizontalSpan = 1;
        gridData.grabExcessHorizontalSpace = false;
        m_browser.setLayoutData(gridData);
        m_browser.setText(Messages.TestResultViewPreferencePageBrowse);
        m_path.addKeyListener(new KeyListener() {
            public void keyPressed(KeyEvent e) {
                // nothing
            }

            public void keyReleased(KeyEvent e) {
                checkCompleteness();
            }

        });
        m_browser.addSelectionListener(new SelectionListener() {
            public void widgetSelected(SelectionEvent e) {
                DirectoryDialog directoryDialog = new DirectoryDialog(getShell(), SWT.APPLICATION_MODAL);
                String directory;
                directoryDialog.setMessage(Messages.TestResultViewPreferencePageDirSelector);
                directoryDialog.setFilterPath(getPath());
                directory = directoryDialog.open();
                if (directory != null) {
                    setPath(directory);
                }
                checkCompleteness();
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                // nothing
            }
        });
    }

    /**
     * Create view to decide automatic monitoring report generation.
     * @param parent The parent <code>Composite</code>
     */
    private void createMonitoringReportButton(Composite parent) {
        GridData gridData;
        m_generateMonitoringReport = new Button(parent, SWT.CHECK);
        m_generateMonitoringReport.setText(Messages.TestResultViewPreferencePageGenerateMonitoringReport);
        gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.horizontalSpan = 4;
        gridData.grabExcessHorizontalSpace = true;
        m_generateMonitoringReport.setLayoutData(gridData);
    }

    /**
     * Create the combo box that determines the style of report generation. 
    *
     * @param parent The parent <code>Composite</code>
     */
    private void createReportStyleCombo(Composite parent) {
        Label label = new Label(parent, SWT.NONE);
        label.setFont(LayoutUtil.BOLD_TAHOMA);
        label.setText(Messages.TestResultViewPreferencePageStyleText);
        GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.horizontalSpan = 4;
        gridData.grabExcessHorizontalSpace = true;
        label.setLayoutData(gridData);

        m_reportStyle = new I18nStringCombo(parent, SWT.NONE, REPORT_STYLE_BASIC_KEY, Arrays.asList(REPORT_STYLES),
                false, false);
        gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.horizontalSpan = 3;
        gridData.grabExcessHorizontalSpace = true;
        LayoutUtil.addToolTipAndMaxWidth(gridData, m_reportStyle);
        m_reportStyle.setLayoutData(gridData);
    }

    /**
     * Initializes the preference page
     * 
     * {@inheritDoc}
     */
    public void init(IWorkbench workbench) {
        setDescription(Messages.TestResultViewPreferencePageDescription);
    }

    /**
     * Performs special processing when this page's Restore Defaults button has
     * been pressed. Sets the contents of the nameEntry field to be the default
     */
    protected void performDefaults() {
        // sets widgets to default values
        m_openResultView.setSelection(getDefaultPrefsBool(Constants.OPENRESULTVIEW_KEY));
        m_generateReport.setSelection(getDefaultPrefsBool(Constants.GENERATEREPORT_KEY));
        m_generateMonitoringReport.setSelection(getDefaultPrefsBool(Constants.GENERATE_MONITORING_REPORT_KEY));
        m_trackResults.setSelection(getDefaultPrefsBool(Constants.TRACKRESULTS_KEY));
        m_autoScreenshots.setSelection(getDefaultPrefsBool(Constants.AUTO_SCREENSHOT_KEY));
        m_testExecRememberValue = getPreferenceStore()
                .getDefaultBoolean(Constants.TEST_EXECUTION_RELEVANT_REMEMBER_KEY);
        m_reportStyle.setText(getDefaultPrefsString(Constants.REPORTGENERATORSTYLE_KEY));
        m_reportStyle.setEnabled(m_generateReport.getSelection());
        m_path.setText(getDefaultPrefsString(Constants.RESULTPATH_KEY));
        m_generateMonitoringReport.setEnabled(m_generateReport.getSelection());
        m_path.setEnabled(m_generateReport.getSelection());
        m_numberOfDays.setText(getDefaultPrefsString(Constants.MAX_NUMBER_OF_DAYS_KEY));
        m_iterMaxField.setText(getDefaultPrefsString(Constants.MAX_ITERATION_KEY));
        setErrorMessage(null);
        setMessage(Messages.TestResultViewPreferencePageTitle, NONE);
        setValid(true);
    }

    /**
     * @return default value
     * @param key
     *            preference key
     */
    private boolean getDefaultPrefsBool(String key) {
        return getPreferenceStore().getDefaultBoolean(key);
    }

    /**
     * Performs special processing when this page's Restore Defaults button has
     * been pressed. Sets the contents of the nameEntry field to be the default
     */
    protected void initPreferences() {
        // sets widgets to default values
        m_openResultView.setSelection(getPreferenceStore().getBoolean(Constants.OPENRESULTVIEW_KEY));
        m_generateReport.setSelection(getPreferenceStore().getBoolean(Constants.GENERATEREPORT_KEY));
        m_generateMonitoringReport
                .setSelection(getPreferenceStore().getBoolean(Constants.GENERATE_MONITORING_REPORT_KEY));
        m_trackResults.setSelection(getPreferenceStore().getBoolean(Constants.TRACKRESULTS_KEY));
        m_autoScreenshots.setSelection(getPreferenceStore().getBoolean(Constants.AUTO_SCREENSHOT_KEY));
        m_reportStyle.setText(getPreferenceStore().getString(Constants.REPORTGENERATORSTYLE_KEY));
        m_path.setText(getPreferenceStore().getString(Constants.RESULTPATH_KEY));
        m_numberOfDays.setText(getPreferenceStore().getString(Constants.MAX_NUMBER_OF_DAYS_KEY));
        m_iterMaxField.setText(getPreferenceStore().getString(Constants.MAX_ITERATION_KEY));
        enableReportStyleCombo();
        enableLogFileBrowser();
        enableMonitoringReportGeneration();

    }

    /**
     * @return default value
     * @param key preference key
     */
    private String getDefaultPrefsString(String key) {
        return getPreferenceStore().getDefaultString(key);
    }

    /**
     * Method declared on IPreferencePage. 
     * 
     * @return performOK
     */
    public boolean performOk() {
        // read preferences from widgets
        // set preferences in store
        boolean openResult = m_openResultView.getSelection();
        boolean generateReport = m_generateReport.getSelection();
        boolean generateMonitoringReport = m_generateMonitoringReport.getSelection();
        boolean trackResults = m_trackResults.getSelection();
        boolean autoScreenshots = m_autoScreenshots.getSelection();
        // set preferences in store
        getPreferenceStore().setValue(Constants.OPENRESULTVIEW_KEY, openResult);
        getPreferenceStore().setValue(Constants.GENERATEREPORT_KEY, generateReport);
        getPreferenceStore().setValue(Constants.GENERATE_MONITORING_REPORT_KEY, generateMonitoringReport);
        getPreferenceStore().setValue(Constants.TRACKRESULTS_KEY, trackResults);
        getPreferenceStore().setValue(Constants.AUTO_SCREENSHOT_KEY, autoScreenshots);
        getPreferenceStore().setValue(Constants.REPORTGENERATORSTYLE_KEY, m_reportStyle.getText());
        getPreferenceStore().setValue(Constants.RESULTPATH_KEY, m_path.getText());
        getPreferenceStore().setValue(Constants.MAX_NUMBER_OF_DAYS_KEY, m_numberOfDays.getText());
        getPreferenceStore().setValue(Constants.MAX_ITERATION_KEY, m_iterMaxField.getText());
        getPreferenceStore().setValue(Constants.TEST_EXECUTION_RELEVANT_REMEMBER_KEY, m_testExecRememberValue);
        getPreferenceStore().setValue(Constants.OPEN_LOGVIEW_KEY, m_openLogValue);
        removeListener();
        return super.performOk();
    }

    /**
     * Can be used to implement any special processing, such as notification, if
     * required. Logic to actually change preference values should be in the
     * <code>performOk</code> method as that method will also be triggered
     * when the Apply push button is selected.
     * <p>
     * If others are interested in tracking preference changes they can use the
     * <code>addPropertyChangeListener</code> method available for for an
     * <code>IPreferenceStore</code> or <code>Preferences</code>.
     * </p>
     * 
     * {@inheritDoc}
     * {@inheritDoc}
     * {@inheritDoc}
     * {@inheritDoc}
     */
    protected void performApply() {
        performOk();
    }

    /**
     * Set the same enabled state to monitoring report generation like the
     * html/xml generation.
     */
    protected void enableMonitoringReportGeneration() {
        m_generateMonitoringReport.setEnabled(m_generateReport.getSelection());
    }

    /**
     * 
     */
    protected void enableLogFileBrowser() {
        m_path.setEnabled(m_generateReport.getSelection());
        m_browser.setEnabled(m_generateReport.getSelection());
    }

    /**
     * 
     */
    protected void enableReportStyleCombo() {
        m_reportStyle.setEnabled(m_generateReport.getSelection());
    }

    /**
     * @return Returns the path.
     */
    protected String getPath() {
        return m_path.getText();
    }

    /**
     * @param path The path to set.
     */
    protected void setPath(String path) {
        m_path.setText(path);
    }

    /**
     * @param composite The parent composite.
     */
    private void createRememberGroup(Composite composite) {
        Group group = new Group(composite, SWT.NONE);
        group.setText(Messages.TestResultViewPreferencePageOpenLogView);
        RowLayout layout = new RowLayout();
        group.setLayout(layout);
        GridData layoutData = new GridData(GridData.FILL_HORIZONTAL);
        layoutData.grabExcessHorizontalSpace = true;
        group.setLayoutData(layoutData);
        m_openLogButton = new Button(group, SWT.RADIO);
        m_openLogButton.setText(Messages.PrefPageBasicAlways);
        m_openLog1Button = new Button(group, SWT.RADIO);
        m_openLog1Button.setText(Messages.PrefPageBasicNever);
        m_openLog2Button = new Button(group, SWT.RADIO);
        m_openLog2Button.setText(Messages.PrefPageBasicPrompt);

        m_openLogValue = getPreferenceStore().getInt(Constants.OPEN_LOGVIEW_KEY);
        switch (m_openLogValue) {
        case Constants.UTILS_YES:
            m_openLogButton.setSelection(true);
            break;
        case Constants.UTILS_NO:
            m_openLog1Button.setSelection(true);
            break;
        default:
            m_openLog2Button.setSelection(true);
            break;
        }
    }

    /**
     * adds listeners to widgets
     */
    private void addListener() {
        m_openLogButton.addSelectionListener(m_logButtonListener);
        m_openLog1Button.addSelectionListener(m_logButtonListener);
        m_openLog2Button.addSelectionListener(m_logButtonListener);
    }

    /**
     * removes listener from widgets
     */
    private void removeListener() {
        m_openLogButton.removeSelectionListener(m_logButtonListener);
        m_openLog1Button.removeSelectionListener(m_logButtonListener);
        m_openLog2Button.removeSelectionListener(m_logButtonListener);
    }

    /**
     * This inner class creates a new SelectionListener.
     * @author BREDEX GmbH
     * @created 09.08.2005
     */
    private class WidgetSelectionListener extends SelectionAdapter {
        /** @param e The selection event. */
        public void widgetSelected(SelectionEvent e) {
            Object o = e.getSource();
            if (o == m_openLogButton) {
                m_openLogValue = Constants.UTILS_YES;
                return;
            } else if (o == m_openLog1Button) {
                m_openLogValue = Constants.UTILS_NO;
                return;
            } else if (o == m_openLog2Button) {
                m_openLogValue = Constants.UTILS_PROMPT;
                return;
            }
            Assert.notReached(Messages.EventActivatedUnknownWidget + StringConstants.LEFT_PARENTHESES + o
                    + StringConstants.RIGHT_PARENTHESES + StringConstants.DOT);
        }
    }
}