org.eclipse.equinox.internal.p2.ui.sdk.scheduler.AutomaticUpdatesPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.equinox.internal.p2.ui.sdk.scheduler.AutomaticUpdatesPreferencePage.java

Source

/*******************************************************************************
 *  Copyright (c) 2007, 2010 IBM Corporation and others.
 *  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:
 *     IBM Corporation - initial API and implementation
 *     Johannes Michler <orgler@gmail.com> - Bug 321568 -  [ui] Preference for automatic-update-reminder doesn't work in multilanguage-environments
 *******************************************************************************/
package org.eclipse.equinox.internal.p2.ui.sdk.scheduler;

import org.eclipse.core.runtime.IProduct;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.*;

/**
 * Preference page for automated updates.
 * 
 * @since 3.4
 * 
 */
public class AutomaticUpdatesPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {

    private Button enabledCheck;
    private Button onStartupRadio, onScheduleRadio;
    private Combo dayCombo;
    private Label atLabel;
    private Combo hourCombo;
    private Button searchOnlyRadio, searchAndDownloadRadio;
    private Button remindOnceRadio, remindScheduleRadio;
    private Combo remindElapseCombo;
    private Group updateScheduleGroup, downloadGroup, remindGroup;

    public void init(IWorkbench workbench) {
        // nothing to init
    }

    protected Control createContents(Composite parent) {
        PlatformUI.getWorkbench().getHelpSystem().setHelp(parent,
                IAutomaticUpdaterHelpContextIds.AUTOMATIC_UPDATES_PREFERENCE_PAGE);

        Composite container = new Composite(parent, SWT.NULL);
        GridLayout layout = new GridLayout();
        layout.marginWidth = layout.marginHeight = 0;
        container.setLayout(layout);

        enabledCheck = new Button(container, SWT.CHECK);
        enabledCheck.setText(AutomaticUpdateMessages.AutomaticUpdatesPreferencePage_findUpdates);

        createSpacer(container, 1);

        updateScheduleGroup = new Group(container, SWT.NONE);
        updateScheduleGroup.setText(AutomaticUpdateMessages.AutomaticUpdatesPreferencePage_UpdateSchedule);
        layout = new GridLayout();
        layout.numColumns = 3;
        updateScheduleGroup.setLayout(layout);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        updateScheduleGroup.setLayoutData(gd);

        onStartupRadio = new Button(updateScheduleGroup, SWT.RADIO);
        IProduct product = Platform.getProduct();
        String productName = product != null && product.getName() != null ? product.getName()
                : AutomaticUpdateMessages.AutomaticUpdatesPreferencePage_GenericProductName;
        onStartupRadio
                .setText(NLS.bind(AutomaticUpdateMessages.AutomaticUpdatesPreferencePage_findOnStart, productName));
        gd = new GridData();
        gd.horizontalSpan = 3;
        onStartupRadio.setLayoutData(gd);
        onStartupRadio.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                pageChanged();
            }
        });

        onScheduleRadio = new Button(updateScheduleGroup, SWT.RADIO);
        onScheduleRadio.setText(AutomaticUpdateMessages.AutomaticUpdatesPreferencePage_findOnSchedule);
        gd = new GridData();
        gd.horizontalSpan = 3;
        onScheduleRadio.setLayoutData(gd);
        onScheduleRadio.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                pageChanged();
            }
        });

        dayCombo = new Combo(updateScheduleGroup, SWT.READ_ONLY);
        dayCombo.setItems(AutomaticUpdateScheduler.DAYS);
        gd = new GridData();
        gd.widthHint = 200;
        gd.horizontalIndent = 30;
        dayCombo.setLayoutData(gd);

        atLabel = new Label(updateScheduleGroup, SWT.NULL);
        atLabel.setText(AutomaticUpdateMessages.AutomaticUpdatesPreferencePage_at);

        hourCombo = new Combo(updateScheduleGroup, SWT.READ_ONLY);
        hourCombo.setItems(AutomaticUpdateScheduler.HOURS);
        gd = new GridData();
        hourCombo.setLayoutData(gd);

        createSpacer(container, 1);

        downloadGroup = new Group(container, SWT.NONE);
        downloadGroup.setText(AutomaticUpdateMessages.AutomaticUpdatesPreferencePage_downloadOptions);
        layout = new GridLayout();
        layout.numColumns = 3;
        downloadGroup.setLayout(layout);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        downloadGroup.setLayoutData(gd);

        searchOnlyRadio = new Button(downloadGroup, SWT.RADIO);
        searchOnlyRadio.setText(AutomaticUpdateMessages.AutomaticUpdatesPreferencePage_searchAndNotify);
        gd = new GridData();
        gd.horizontalSpan = 3;
        searchOnlyRadio.setLayoutData(gd);
        searchOnlyRadio.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                pageChanged();
            }
        });

        searchAndDownloadRadio = new Button(downloadGroup, SWT.RADIO);
        searchAndDownloadRadio.setText(AutomaticUpdateMessages.AutomaticUpdatesPreferencePage_downloadAndNotify);
        gd = new GridData();
        gd.horizontalSpan = 3;
        searchAndDownloadRadio.setLayoutData(gd);
        searchAndDownloadRadio.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                pageChanged();
            }
        });

        createSpacer(container, 1);

        remindGroup = new Group(container, SWT.NONE);
        remindGroup.setText(AutomaticUpdateMessages.AutomaticUpdatesPreferencePage_RemindGroup);
        layout = new GridLayout();
        layout.numColumns = 3;
        remindGroup.setLayout(layout);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        remindGroup.setLayoutData(gd);

        remindOnceRadio = new Button(remindGroup, SWT.RADIO);
        remindOnceRadio.setText(AutomaticUpdateMessages.AutomaticUpdatesPreferencePage_RemindOnce);
        gd = new GridData();
        gd.horizontalSpan = 3;
        remindOnceRadio.setLayoutData(gd);
        remindOnceRadio.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                pageChanged();
            }
        });

        remindScheduleRadio = new Button(remindGroup, SWT.RADIO);
        remindScheduleRadio.setText(AutomaticUpdateMessages.AutomaticUpdatesPreferencePage_RemindSchedule);
        gd = new GridData();
        gd.horizontalSpan = 3;
        remindScheduleRadio.setLayoutData(gd);
        remindScheduleRadio.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                pageChanged();
            }
        });

        remindElapseCombo = new Combo(remindGroup, SWT.READ_ONLY);
        remindElapseCombo.setItems(AutomaticUpdatesPopup.ELAPSED_LOCALIZED_STRINGS);

        gd = new GridData();
        gd.widthHint = 200;
        gd.horizontalIndent = 30;
        remindElapseCombo.setLayoutData(gd);

        initialize();

        enabledCheck.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                pageChanged();
            }
        });

        Dialog.applyDialogFont(container);
        return container;
    }

    protected void createSpacer(Composite composite, int columnSpan) {
        Label label = new Label(composite, SWT.NONE);
        GridData gd = new GridData();
        gd.horizontalSpan = columnSpan;
        label.setLayoutData(gd);
    }

    private void initialize() {
        IPreferenceStore pref = AutomaticUpdatePlugin.getDefault().getPreferenceStore();
        enabledCheck.setSelection(pref.getBoolean(PreferenceConstants.PREF_AUTO_UPDATE_ENABLED));
        setSchedule(pref.getString(PreferenceConstants.PREF_AUTO_UPDATE_SCHEDULE));

        dayCombo.setText(AutomaticUpdateScheduler.DAYS[getDay(pref, false)]);
        hourCombo.setText(AutomaticUpdateScheduler.HOURS[getHour(pref, false)]);

        remindScheduleRadio.setSelection(pref.getBoolean(PreferenceConstants.PREF_REMIND_SCHEDULE));
        remindOnceRadio.setSelection(!pref.getBoolean(PreferenceConstants.PREF_REMIND_SCHEDULE));
        remindElapseCombo.setText(AutomaticUpdatesPopup
                .getElapsedTimeString(pref.getString(PreferenceConstants.PREF_REMIND_ELAPSED)));
        searchOnlyRadio.setSelection(!pref.getBoolean(PreferenceConstants.PREF_DOWNLOAD_ONLY));
        searchAndDownloadRadio.setSelection(pref.getBoolean(PreferenceConstants.PREF_DOWNLOAD_ONLY));

        pageChanged();
    }

    private void setSchedule(String value) {
        if (value.equals(PreferenceConstants.PREF_UPDATE_ON_STARTUP))
            onStartupRadio.setSelection(true);
        else
            onScheduleRadio.setSelection(true);
    }

    void pageChanged() {
        boolean master = enabledCheck.getSelection();
        updateScheduleGroup.setEnabled(master);
        onStartupRadio.setEnabled(master);
        onScheduleRadio.setEnabled(master);
        dayCombo.setEnabled(master && onScheduleRadio.getSelection());
        atLabel.setEnabled(master && onScheduleRadio.getSelection());
        hourCombo.setEnabled(master && onScheduleRadio.getSelection());
        downloadGroup.setEnabled(master);
        searchOnlyRadio.setEnabled(master);
        searchAndDownloadRadio.setEnabled(master);
        remindGroup.setEnabled(master);
        remindScheduleRadio.setEnabled(master);
        remindOnceRadio.setEnabled(master);
        remindElapseCombo.setEnabled(master && remindScheduleRadio.getSelection());
    }

    protected void performDefaults() {
        super.performDefaults();
        IPreferenceStore pref = AutomaticUpdatePlugin.getDefault().getPreferenceStore();
        enabledCheck.setSelection(pref.getDefaultBoolean(PreferenceConstants.PREF_AUTO_UPDATE_ENABLED));

        setSchedule(pref.getDefaultString(PreferenceConstants.PREF_AUTO_UPDATE_SCHEDULE));
        onScheduleRadio.setSelection(pref.getDefaultBoolean(PreferenceConstants.PREF_AUTO_UPDATE_SCHEDULE));

        dayCombo.setText(AutomaticUpdateScheduler.DAYS[getDay(pref, true)]);
        hourCombo.setText(AutomaticUpdateScheduler.HOURS[getHour(pref, true)]);

        remindOnceRadio.setSelection(!pref.getDefaultBoolean(PreferenceConstants.PREF_REMIND_SCHEDULE));
        remindScheduleRadio.setSelection(pref.getDefaultBoolean(PreferenceConstants.PREF_REMIND_SCHEDULE));
        remindElapseCombo.setText(AutomaticUpdatesPopup
                .getElapsedTimeString(pref.getDefaultString(PreferenceConstants.PREF_REMIND_ELAPSED)));

        searchOnlyRadio.setSelection(!pref.getDefaultBoolean(PreferenceConstants.PREF_DOWNLOAD_ONLY));
        searchAndDownloadRadio.setSelection(pref.getDefaultBoolean(PreferenceConstants.PREF_DOWNLOAD_ONLY));
        pageChanged();
    }

    /**
     * Method declared on IPreferencePage. Subclasses should override
     */
    public boolean performOk() {
        IPreferenceStore pref = AutomaticUpdatePlugin.getDefault().getPreferenceStore();
        pref.setValue(PreferenceConstants.PREF_AUTO_UPDATE_ENABLED, enabledCheck.getSelection());
        if (onStartupRadio.getSelection())
            pref.setValue(PreferenceConstants.PREF_AUTO_UPDATE_SCHEDULE,
                    PreferenceConstants.PREF_UPDATE_ON_STARTUP);
        else
            pref.setValue(PreferenceConstants.PREF_AUTO_UPDATE_SCHEDULE,
                    PreferenceConstants.PREF_UPDATE_ON_SCHEDULE);

        if (remindScheduleRadio.getSelection()) {
            pref.setValue(PreferenceConstants.PREF_REMIND_SCHEDULE, true);
            pref.setValue(PreferenceConstants.PREF_REMIND_ELAPSED,
                    AutomaticUpdatesPopup.ELAPSED_VALUES[remindElapseCombo.getSelectionIndex()]);
        } else {
            pref.setValue(PreferenceConstants.PREF_REMIND_SCHEDULE, false);
        }

        pref.setValue(AutomaticUpdateScheduler.P_DAY, dayCombo.getText());
        pref.setValue(AutomaticUpdateScheduler.P_HOUR, hourCombo.getText());

        pref.setValue(PreferenceConstants.PREF_DOWNLOAD_ONLY, searchAndDownloadRadio.getSelection());

        AutomaticUpdatePlugin.getDefault().savePreferences();
        AutomaticUpdatePlugin.getDefault().getScheduler().rescheduleUpdate();
        return true;
    }

    private int getDay(IPreferenceStore pref, boolean useDefault) {
        String day = useDefault ? pref.getDefaultString(AutomaticUpdateScheduler.P_DAY)
                : pref.getString(AutomaticUpdateScheduler.P_DAY);
        for (int i = 0; i < AutomaticUpdateScheduler.DAYS.length; i++)
            if (AutomaticUpdateScheduler.DAYS[i].equals(day))
                return i;
        return 0;
    }

    private int getHour(IPreferenceStore pref, boolean useDefault) {
        String hour = useDefault ? pref.getDefaultString(AutomaticUpdateScheduler.P_HOUR)
                : pref.getString(AutomaticUpdateScheduler.P_HOUR);
        for (int i = 0; i < AutomaticUpdateScheduler.HOURS.length; i++)
            if (AutomaticUpdateScheduler.HOURS[i].equals(hour))
                return i;
        return 0;
    }
}