com.microsoft.tfs.client.common.ui.teambuild.prefs.BuildNotificationPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.tfs.client.common.ui.teambuild.prefs.BuildNotificationPreferencePage.java

Source

// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See License.txt in the repository root.

package com.microsoft.tfs.client.common.ui.teambuild.prefs;

import org.eclipse.core.runtime.Preferences;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

import com.microsoft.tfs.client.common.TFSCommonClientPlugin;
import com.microsoft.tfs.client.common.prefs.PreferenceConstants;
import com.microsoft.tfs.client.common.server.TFSServer;
import com.microsoft.tfs.client.common.ui.TFSCommonUIClientPlugin;
import com.microsoft.tfs.client.common.ui.framework.layout.GridDataBuilder;
import com.microsoft.tfs.client.common.ui.helpers.AutomationIDHelper;
import com.microsoft.tfs.client.common.ui.prefs.BasePreferencePage;
import com.microsoft.tfs.client.common.ui.prefs.UIPreferenceConstants;
import com.microsoft.tfs.client.common.ui.teambuild.Messages;

public class BuildNotificationPreferencePage extends BasePreferencePage {
    public static final String REFRESH_INTERVAL_TEXT_ID = "WatchedBuildsPreferencePage.refreshInterval"; //$NON-NLS-1$
    public static final String NOTIFY_BUILD_SUCCESS_BUTTON_ID = "WatchedBuildsPreferencePage.notifyBuildSuccess"; //$NON-NLS-1$
    public static final String NOTIFY_BUILD_PARTIALLY_SUCCEEDED_BUTTON_ID = "WatchedBuildsPreferencePage.notifyBuildPartiallySucceeded"; //$NON-NLS-1$
    public static final String NOTIFY_BUILD_FAILURE_BUTTON_ID = "WatchedBuildsPreferencePage.notifyBuildFailure"; //$NON-NLS-1$

    private Text refreshTimeText;

    private Button notifyBuildSuccessButton;
    private Button notifyBuildPartiallySucceededButton;
    private Button notifyBuildFailureButton;

    public BuildNotificationPreferencePage() {
        super();
    }

    public BuildNotificationPreferencePage(final String title) {
        super(title);
    }

    public BuildNotificationPreferencePage(final String title, final ImageDescriptor image) {
        super(title, image);
    }

    // get preference settings from the preference store
    private void initializeValues() {
        /*
         * Note: The interval preference is from the non-UI common client
         * plug-in because BuildStatusManager is in that plug-in and uses the
         * pref directly.
         *
         * TODO Use a non-deprecated method to access the preferences in the
         * non-UI common client plug-in or refactor TFSServer and
         * BuildStatusManager not to use a pref (pass in the value).
         */
        final Preferences nonUIPrefs = TFSCommonClientPlugin.getDefault().getPluginPreferences();

        int refreshIntervalMillis = nonUIPrefs.getInt(PreferenceConstants.BUILD_STATUS_REFRESH_INTERVAL);

        if (refreshIntervalMillis <= 0) {
            refreshIntervalMillis = nonUIPrefs.getDefaultInt(PreferenceConstants.BUILD_STATUS_REFRESH_INTERVAL);
        }

        int refreshIntervalMins = 0;
        if (refreshIntervalMillis > 0) {
            refreshIntervalMins = refreshIntervalMillis / (60 * 1000);
        }
        if (refreshIntervalMins <= 0) {
            refreshIntervalMins = 5;
        }

        refreshTimeText.setText(Integer.toString(refreshIntervalMins));

        /*
         * These prefs are in the UI client with most other prefs.
         */

        final IPreferenceStore uiPrefs = TFSCommonUIClientPlugin.getDefault().getPreferenceStore();

        final boolean notifySuccess = uiPrefs.contains(UIPreferenceConstants.BUILD_NOTIFICATION_SUCCESS)
                ? uiPrefs.getBoolean(UIPreferenceConstants.BUILD_NOTIFICATION_SUCCESS)
                : uiPrefs.getDefaultBoolean(UIPreferenceConstants.BUILD_NOTIFICATION_SUCCESS);

        final boolean notifyPartiallySucceeded = uiPrefs
                .contains(UIPreferenceConstants.BUILD_NOTIFICATION_PARTIALLY_SUCCEEDED)
                        ? uiPrefs.getBoolean(UIPreferenceConstants.BUILD_NOTIFICATION_PARTIALLY_SUCCEEDED)
                        : uiPrefs.getDefaultBoolean(UIPreferenceConstants.BUILD_NOTIFICATION_PARTIALLY_SUCCEEDED);

        final boolean notifyFailure = uiPrefs.contains(UIPreferenceConstants.BUILD_NOTIFICATION_FAILURE)
                ? uiPrefs.getBoolean(UIPreferenceConstants.BUILD_NOTIFICATION_FAILURE)
                : uiPrefs.getDefaultBoolean(UIPreferenceConstants.BUILD_NOTIFICATION_FAILURE);

        notifyBuildSuccessButton.setSelection(notifySuccess);
        notifyBuildPartiallySucceededButton.setSelection(notifyPartiallySucceeded);
        notifyBuildFailureButton.setSelection(notifyFailure);
    }

    @Override
    protected void performDefaults() {
        // TODO see TODO in initializeValues()

        final Preferences nonUIPrefs = TFSCommonClientPlugin.getDefault().getPluginPreferences();

        final int refreshIntervalMillis = nonUIPrefs
                .getDefaultInt(PreferenceConstants.BUILD_STATUS_REFRESH_INTERVAL);

        int refreshIntervalMins = 0;
        if (refreshIntervalMillis > 0) {
            refreshIntervalMins = refreshIntervalMillis / (60 * 1000);
        }
        if (refreshIntervalMins == 0) {
            refreshIntervalMins = 5;
        }

        refreshTimeText.setText(Integer.toString(refreshIntervalMins));

        // Back to normal UI prefs

        final IPreferenceStore uiPrefs = TFSCommonUIClientPlugin.getDefault().getPreferenceStore();

        notifyBuildSuccessButton
                .setSelection(uiPrefs.getDefaultBoolean(UIPreferenceConstants.BUILD_NOTIFICATION_SUCCESS));
        notifyBuildPartiallySucceededButton.setSelection(
                uiPrefs.getDefaultBoolean(UIPreferenceConstants.BUILD_NOTIFICATION_PARTIALLY_SUCCEEDED));
        notifyBuildFailureButton
                .setSelection(uiPrefs.getDefaultBoolean(UIPreferenceConstants.BUILD_NOTIFICATION_FAILURE));

        super.performDefaults();
    }

    private int getRefreshInterval() {
        int refreshIntervalMins = -1;

        try {
            refreshIntervalMins = Integer.parseInt(refreshTimeText.getText());
        } catch (final Exception e) {
        }

        if (refreshIntervalMins < 1) {
            MessageDialog.openError(getShell(),
                    Messages.getString("BuildNotificationPreferencePage.InvalidTimeTitle"), //$NON-NLS-1$
                    Messages.getString("BuildNotificationPreferencePage.InvalidTimeMessage")); //$NON-NLS-1$
            return -1;
        }

        return (refreshIntervalMins * 60 * 1000);
    }

    @Override
    public boolean performOk() {
        final int refreshTime = getRefreshInterval();

        if (refreshTime < 1) {
            return false;
        }

        // TODO see TODO in initializeValues()

        final Preferences nonUIPrefs = TFSCommonClientPlugin.getDefault().getPluginPreferences();

        nonUIPrefs.setValue(PreferenceConstants.BUILD_STATUS_REFRESH_INTERVAL, refreshTime);

        TFSCommonClientPlugin.getDefault().savePluginPreferences();

        // Back to normal UI prefs

        final IPreferenceStore uiPrefs = TFSCommonUIClientPlugin.getDefault().getPreferenceStore();

        uiPrefs.setValue(UIPreferenceConstants.BUILD_NOTIFICATION_SUCCESS, notifyBuildSuccessButton.getSelection());
        uiPrefs.setValue(UIPreferenceConstants.BUILD_NOTIFICATION_PARTIALLY_SUCCEEDED,
                notifyBuildPartiallySucceededButton.getSelection());
        uiPrefs.setValue(UIPreferenceConstants.BUILD_NOTIFICATION_FAILURE, notifyBuildFailureButton.getSelection());

        final TFSServer currentServer = TFSCommonUIClientPlugin.getDefault().getProductPlugin().getServerManager()
                .getDefaultServer();

        if (currentServer != null) {
            currentServer.getBuildStatusManager().setRefreshInterval(refreshTime);
        }

        return super.performOk();
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse
     * .swt.widgets.Composite)
     */
    @Override
    protected Control createContents(final Composite parent) {
        final Composite container = new Composite(parent, SWT.NONE);

        final GridLayout layout = new GridLayout(3, false);
        layout.marginWidth = 0;
        layout.marginHeight = 0;
        layout.horizontalSpacing = getHorizontalSpacing();
        layout.verticalSpacing = getVerticalSpacing();

        container.setLayout(layout);

        final Label refreshDescriptionLabel = new Label(container, SWT.NONE);
        refreshDescriptionLabel.setText(Messages.getString("BuildNotificationPreferencePage.RefreshPromptMessage")); //$NON-NLS-1$

        refreshTimeText = new Text(container, SWT.BORDER);
        refreshTimeText.setTextLimit(3);
        GridDataBuilder.newInstance().wCHint(refreshTimeText, 5).applyTo(refreshTimeText);
        AutomationIDHelper.setWidgetID(refreshTimeText, REFRESH_INTERVAL_TEXT_ID);
        refreshTimeText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(final ModifyEvent e) {
                setValid(refreshTimeText.getText().length() > 0);
            }
        });

        final Label refreshUnitsLabel = new Label(container, SWT.NONE);
        refreshUnitsLabel.setText(Messages.getString("BuildNotificationPreferencePage.RefreshUnitsMessage")); //$NON-NLS-1$

        final Label spacerLabel = new Label(container, SWT.NONE);
        GridDataBuilder.newInstance().hSpan(3).applyTo(spacerLabel);

        final Label notifyDescriptionLabel = new Label(container, SWT.WRAP);
        notifyDescriptionLabel.setText(Messages.getString("BuildNotificationPreferencePage.NotifyPromptMessage")); //$NON-NLS-1$
        GridDataBuilder.newInstance().hSpan(3).applyTo(notifyDescriptionLabel);

        notifyBuildSuccessButton = new Button(container, SWT.CHECK);
        AutomationIDHelper.setWidgetID(notifyBuildSuccessButton, NOTIFY_BUILD_SUCCESS_BUTTON_ID);
        notifyBuildSuccessButton
                .setText(Messages.getString("BuildNotificationPreferencePage.NotifySucceededLabel")); //$NON-NLS-1$
        GridDataBuilder.newInstance().hSpan(3).applyTo(notifyBuildSuccessButton);

        notifyBuildPartiallySucceededButton = new Button(container, SWT.CHECK);
        AutomationIDHelper.setWidgetID(notifyBuildPartiallySucceededButton,
                NOTIFY_BUILD_PARTIALLY_SUCCEEDED_BUTTON_ID);
        notifyBuildPartiallySucceededButton
                .setText(Messages.getString("BuildNotificationPreferencePage.NotifyPartiallySucceededButtonLabel")); //$NON-NLS-1$
        GridDataBuilder.newInstance().hSpan(3).applyTo(notifyBuildPartiallySucceededButton);

        notifyBuildFailureButton = new Button(container, SWT.CHECK);
        AutomationIDHelper.setWidgetID(notifyBuildFailureButton, NOTIFY_BUILD_FAILURE_BUTTON_ID);
        notifyBuildFailureButton
                .setText(Messages.getString("BuildNotificationPreferencePage.NotifyFailedButtonLabel")); //$NON-NLS-1$
        GridDataBuilder.newInstance().hSpan(3).applyTo(notifyBuildFailureButton);

        initializeValues();

        return container;
    }
}