net.sourceforge.eclipseccase.ui.preferences.ClearCasePreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for net.sourceforge.eclipseccase.ui.preferences.ClearCasePreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2002, 2004 eclipse-ccase.sourceforge.net.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     Matthew Conway - initial API and implementation
 *     IBM Corporation - concepts and ideas taken from Eclipse code
 *     Gunnar Wagenknecht - reworked to Eclipse 3.0 API and code clean-up
 *     Tobias Sodergren - added preferences for job priority
 *******************************************************************************/
package net.sourceforge.eclipseccase.ui.preferences;

import org.eclipse.jface.util.PropertyChangeEvent;

import org.eclipse.jface.util.IPropertyChangeListener;

import net.sourceforge.eclipseccase.ClearCasePreferences;

import org.eclipse.jface.dialogs.MessageDialog;

import net.sourceforge.eclipseccase.ClearCasePlugin;
import net.sourceforge.eclipseccase.IClearCasePreferenceConstants;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.preference.*;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

/**
 * The main preference page for the Eclipse ClearCase integration.
 */
public class ClearCasePreferencePage extends FieldEditorPreferencePageWithCategories
        implements IWorkbenchPreferencePage, IClearCasePreferenceConstants {

    private static final String GENERAL = PreferenceMessages.getString("Preferences.Category.General"); //$NON-NLS-1$

    private static final String SOURCE_MANAGEMENT = PreferenceMessages.getString("Preferences.Category.Source"); //$NON-NLS-1$

    private static final String COMMENTS = PreferenceMessages.getString("Preferences.Category.Comments"); //$NON-NLS-1$

    private static final String[] CATEGORIES = new String[] { GENERAL, SOURCE_MANAGEMENT, COMMENTS };

    static final String[][] ALWAYS_NEVER_PROMPT = new String[][] {
            { PreferenceMessages.getString("Always"), ALWAYS }, //$NON-NLS-1$
            { PreferenceMessages.getString("Never"), NEVER }, //$NON-NLS-1$
            { PreferenceMessages.getString("Prompt"), PROMPT } }; //$NON-NLS-1$

    static final String[][] ALWAYS_IF_POSSIBLE_NEVER = new String[][] {
            { PreferenceMessages.getString("Always"), ALWAYS }, //$NON-NLS-1$
            { PreferenceMessages.getString("IfPossible"), IF_POSSIBLE }, //$NON-NLS-1$
            { PreferenceMessages.getString("Never"), NEVER }, { PreferenceMessages.getString("Prompt"), PROMPT } }; //$NON-NLS-2$

    static final String[][] PRIORITIES = new String[][] {
            { PreferenceMessages.getString("HighPriority"), Integer.toString(Job.LONG) }, //$NON-NLS-1$ 
            { PreferenceMessages.getString("DefaultPriority"), Integer.toString(Job.DECORATE) } }; //$NON-NLS-1$

    private RadioGroupFieldEditor reservedCo;

    private BooleanFieldEditor nMaster;

    /**
     * Creates a new instance.
     */
    public ClearCasePreferencePage() {
        setDescription(PreferenceMessages.getString("Preferences.Description")); //$NON-NLS-1$

        // Set the preference store for the preference page.
        setPreferenceStore(new ClearCasePreferenceStore());
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
     */
    public void init(IWorkbench workbench) {
        // ignore
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.preference.FieldEditorPreferencePage#createFieldEditors
     * ()
     */
    @Override
    protected void createFieldEditors() {

        // general settings
        addField(new StringFieldEditor(CLEARCASE_PRIMARY_GROUP,
                PreferenceMessages.getString("Preferences.General.ClearCasePrimaryGroup"), //$NON-NLS-1$
                getFieldEditorParent(GENERAL)));

        addField(new BooleanFieldEditor(PREVENT_UNNEEDED_CHILDREN_REFRESH,
                PreferenceMessages.getString("Preferences.General.RefreshChildren"), //$NON-NLS-1$
                getFieldEditorParent(GENERAL)));

        //      addField(new BooleanFieldEditor(IGNORE_NEW, PreferenceMessages.getString("Preferences.General.IgnoreNew"), //$NON-NLS-1$
        // getFieldEditorParent(GENERAL)));

        addField(new BooleanFieldEditor(HIDE_REFRESH_STATE_ACTIVITY,
                PreferenceMessages.getString("Preferences.General.HideRefreshStateActivity"), //$NON-NLS-1$
                getFieldEditorParent(GENERAL)));

        //      addField(new BooleanFieldEditor(RECURSIVE, PreferenceMessages.getString("Preferences.General.Recursive"), //$NON-NLS-1$
        // getFieldEditorParent(GENERAL)));

        //      addField(new BooleanFieldEditor(PRESERVE_TIMES, PreferenceMessages.getString("Preferences.General.PreserveTimes"), //$NON-NLS-1$
        // getFieldEditorParent(GENERAL)));

        //      addField(new BooleanFieldEditor(TEST_LINKED_PARENT_IN_CLEARCASE, PreferenceMessages.getString("Preferences.General.TestLinkedParentInClearCase"), //$NON-NLS-1$
        // getFieldEditorParent(GENERAL)));

        //      addField(new RadioGroupFieldEditor(SAVE_DIRTY_EDITORS, PreferenceMessages.getString("Preferences.General.SaveDirtyEditors"), 1, //$NON-NLS-1$
        // ALWAYS_NEVER_PROMPT, getFieldEditorParent(GENERAL), true));

        addField(new BooleanFieldEditor(USE_CLEARDLG, PreferenceMessages.getString("Preferences.Source.ClearDlg"), //$NON-NLS-1$
                getFieldEditorParent(GENERAL)));

        addField(new BooleanFieldEditor(FULL_REFRESH,
                PreferenceMessages.getString("Preferences.Source.FullRefreshOnAssoc"), //$NON-NLS-1$
                getFieldEditorParent(GENERAL)));

        addField(new RadioGroupFieldEditor(JOB_QUEUE_PRIORITY,
                PreferenceMessages.getString("Preferences.General.JobQueuePriority"), 1, //$NON-NLS-1$
                PRIORITIES, getFieldEditorParent(GENERAL), true));

        // general settings
        addField(new StringFieldEditor(TIMEOUT_GRAPHICAL_TOOLS,
                PreferenceMessages.getString("Preferences.General.GraphicalTimeout"), //$NON-NLS-1$
                getFieldEditorParent(GENERAL)));

        addField(new BooleanFieldEditor(GRAPHICAL_EXTERNAL_UPDATE_VIEW,
                PreferenceMessages.getString("Preferences.General.GraphicalUpdateView"), //$NON-NLS-1$
                getFieldEditorParent(GENERAL)));

        addField(new BooleanFieldEditor(FORBID_CONFIG_SPEC_MODIFICATION,
                PreferenceMessages.getString("Preferences.General.ModifyConfigSpec"), //$NON-NLS-1$
                getFieldEditorParent(GENERAL)));

        //      addField(new BooleanFieldEditor(COMPARE_EXTERNAL, PreferenceMessages.getString("Preferences.General.CompareWithExternalTool"), //$NON-NLS-1$
        // getFieldEditorParent(GENERAL)));

        // RadioGroupFieldEditor clearcaseLayer = new
        // RadioGroupFieldEditor(CLEARCASE_API,
        // "Interface for ClearCase operations",1,
        // new String[][]{
        // {"Native - CAL (ClearCase Automation Library)", CLEARCASE_NATIVE},
        // {"Native - cleartool executable", CLEARCASE_CLEARTOOL},
        // {"Compatible - ClearDlg executable", CLEARCASE_CLEARDLG}
        // }
        // ,getFieldEditorParent(GENERAL),true);
        // addField(clearcaseLayer);

        // source management

        // addField(new BooleanFieldEditor(CHECKOUT_AUTO, PreferenceMessages
        // .getString("Preferences.Source.CheckoutAuto"), //$NON-NLS-1$
        // getFieldEditorParent(SOURCE_MANAGEMENT)));

        addField(new RadioGroupFieldEditor(CHECKOUT_AUTO,
                PreferenceMessages.getString("Preferences.Source.CheckoutAuto"), //$NON-NLS-1$
                3, ALWAYS_NEVER_PROMPT, getFieldEditorParent(SOURCE_MANAGEMENT), true));

        addField(new BooleanFieldEditor(AUTO_PARENT_CHECKIN_AFTER_MOVE,
                PreferenceMessages.getString("Preferences.Source.AutoParentCheckinAfterMove"),
                getFieldEditorParent(SOURCE_MANAGEMENT)));

        addField(new BooleanFieldEditor(CHECKIN_IDENTICAL,
                PreferenceMessages.getString("Preferences.Source.CheckinIdentical"), //$NON-NLS-1$
                getFieldEditorParent(SOURCE_MANAGEMENT)));

        addField(new BooleanFieldEditor(KEEP_CHANGES_AFTER_UNCHECKOUT,
                PreferenceMessages.getString("Preferences.Source.KeepChangesAfterUncheckout"), //$NON-NLS-1$
                getFieldEditorParent(SOURCE_MANAGEMENT)));

        addField(new BooleanFieldEditor(ADD_WITH_CHECKIN,
                PreferenceMessages.getString("Preferences.Source.AddWithCheckin"), //$NON-NLS-1$
                getFieldEditorParent(SOURCE_MANAGEMENT)));

        addField(new BooleanFieldEditor(CHECKOUT_LATEST,
                PreferenceMessages.getString("Preferences.Source.CheckoutLatest"), //$NON-NLS-1$
                getFieldEditorParent(SOURCE_MANAGEMENT)));

        //      addField(new RadioGroupFieldEditor(IClearCasePreferenceConstants.CHECKOUT_RESERVED, PreferenceMessages.getString("Preferences.Source.CheckoutReserved"), 4, //$NON-NLS-1$ 
        //            ALWAYS_IF_POSSIBLE_NEVER, getFieldEditorParent(SOURCE_MANAGEMENT), true));
        //      
        //      addField(new BooleanFieldEditor(ADD_WITH_MASTER, PreferenceMessages.getString("Preferences.Source.AddWithMaster"), //$NON-NLS-1$
        //            getFieldEditorParent(SOURCE_MANAGEMENT)));

        reservedCo = new RadioGroupFieldEditor(IClearCasePreferenceConstants.CHECKOUT_RESERVED,
                PreferenceMessages.getString("Preferences.Source.CheckoutReserved"), 4, //$NON-NLS-1$ 
                ALWAYS_IF_POSSIBLE_NEVER, getFieldEditorParent(SOURCE_MANAGEMENT), true);

        addField(reservedCo);

        // Avoid that -nmaster is set when RESERVED checkouts are used.
        //      nMaster = new BooleanFieldEditor(ADD_WITH_MASTER, PreferenceMessages.getString("Preferences.Source.AddWithMaster"), //$NON-NLS-1$
        // getFieldEditorParent(SOURCE_MANAGEMENT));

        nMaster = new BooleanFieldEditor(ADD_WITH_MASTER,
                PreferenceMessages.getString("Preferences.Source.AddWithMaster"), //$NON-NLS-1$
                getFieldEditorParent(SOURCE_MANAGEMENT)) {
            protected void valueChanged(boolean oldValue, boolean newValue) {
                setReservedCheckoutEnabledState(oldValue, newValue);
            }

        };

        addField(nMaster);

        // comment settings

        addField(new BooleanFieldEditor(SILENT_PREVENT,
                PreferenceMessages.getString("Preferences.Source.SilentPrevent"), //$NON-NLS-1$
                getFieldEditorParent(SOURCE_MANAGEMENT)));
        addField(new StringFieldEditor(PREVENT_CHECKOUT,
                PreferenceMessages.getString("Preferences.Source.PreventCheckOut"), //$NON-NLS-1$
                getFieldEditorParent(SOURCE_MANAGEMENT)));

        // comment settings

        addField(
                new BooleanFieldEditor(COMMENT_ADD, PreferenceMessages.getString("Preferences.Comments.CommentAdd"), //$NON-NLS-1$
                        getFieldEditorParent(COMMENTS)));

        addField(new BooleanFieldEditor(COMMENT_CHECKIN,
                PreferenceMessages.getString("Preferences.Comments.CommentCheckin"), //$NON-NLS-1$
                getFieldEditorParent(COMMENTS)));

        addField(new BooleanFieldEditor(COMMENT_CHECKOUT,
                PreferenceMessages.getString("Preferences.Comments.CommentCheckout"), //$NON-NLS-1$
                getFieldEditorParent(COMMENTS)));

        addField(new BooleanFieldEditor(COMMENT_CHECKOUT_NEVER_ON_AUTO,
                PreferenceMessages.getString("Preferences.Comments.CommentCheckoutNeverOnAuto"), //$NON-NLS-1$ 
                getFieldEditorParent(COMMENTS)));

        addField(new StringFieldEditor(BRANCH_PREFIX,
                PreferenceMessages.getString("Preferences.Comments.BranchPrefix"), //$NON-NLS-1$
                getFieldEditorParent(COMMENTS)));

        //      addField(new BooleanFieldEditor(COMMENT_ADD_NEVER_ON_AUTO, PreferenceMessages.getString("Preferences.Comments.CommentAddNeverOnAuto"), //$NON-NLS-1$ 
        // getFieldEditorParent(COMMENTS)));

        //      addField(new BooleanFieldEditor(COMMENT_ESCAPE, PreferenceMessages.getString("Preferences.Comments.CommentEscapeXml"), //$NON-NLS-1$
        // getFieldEditorParent(COMMENTS)));
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.preference.IPreferencePage#performOk()
     */
    @Override
    public boolean performOk() {
        if (super.performOk()) {
            ClearCasePlugin.getDefault().resetClearCase();
            return true;
        }
        return false;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * net.sourceforge.eclipseccase.ui.preferences.TabFieldEditorPreferencePage
     * #getCategories()
     */
    @Override
    protected String[] getCategories() {
        return CATEGORIES;
    }

    /*
     * (non-Javadoc)
     * 
     * @seenet.sourceforge.eclipseccase.ui.preferences.
     * FieldEditorPreferencePageWithCategories#getDescription(java.lang.String)
     */
    @Override
    protected String getDescription(String category) {
        // if (GENERAL.equals(category))
        //         return PreferenceMessages.getString("Preferences.Description.Category.General"); //$NON-NLS-1$
        // if (SOURCE_MANAGEMENT.equals(category))
        //         return PreferenceMessages.getString("Preferences.Description.Category.Source"); //$NON-NLS-1$
        // if (COMMENTS.equals(category))
        //         return PreferenceMessages.getString("Preferences.Description.Category.Comments"); //$NON-NLS-1$
        return null;
    }

    private void setReservedCheckoutEnabledState(boolean oldValue, boolean newValue) {
        if (newValue && reservedCo.getPreferenceStore().getString(IClearCasePreferenceConstants.CHECKOUT_RESERVED)
                .equals(IClearCasePreferenceConstants.ALWAYS)) {

        } else {

            getPreferenceStore().setValue(IClearCasePreferenceConstants.ADD_WITH_MASTER, newValue);
            nMaster.store();
            nMaster.load();
        }

    }

    /**
     * This is used to handle changes in reservedCo, RadioGroupFieldEditor.
     * 
     * 
     * @param event
     *            the property change event object describing which property
     *            changed and how
     */
    public void propertyChange(PropertyChangeEvent event) {
        super.propertyChange(event);
        if (event.getSource().equals(reservedCo)) {
            setNmasterEnabledState((String) event.getOldValue(), (String) event.getNewValue());

        }

    }

    private void setNmasterEnabledState(String oldValue, String newValue) {

        if (oldValue.equals(newValue)) {
            //Avoid same value. This happens each time a value is set, Bug in eclipse?
            return;
        }
        if (newValue.equals(IClearCasePreferenceConstants.ALWAYS)
                | newValue.equals(IClearCasePreferenceConstants.IF_POSSIBLE)) {

            nMaster.setEnabled(false, getFieldEditorParent(SOURCE_MANAGEMENT));
            if (getPreferenceStore().getBoolean(IClearCasePreferenceConstants.ADD_WITH_MASTER) == true) {
                //load changes value.
                reservedCo.load();
                getPreferenceStore().setValue(IClearCasePreferenceConstants.CHECKOUT_RESERVED, oldValue);
                //move back to old value.
                reservedCo.load();
                reservedCo.store();
                MessageDialog.openError(getShell(), "Error",
                        "Since master option is set. \"Reserved Checkouts\" option cannot be set to ALWAYS/IF POSSIBLE since reserved checkouts are not allowed.");
                nMaster.setEnabled(true, getFieldEditorParent(SOURCE_MANAGEMENT));
            }
        } else {
            nMaster.setEnabled(true, getFieldEditorParent(SOURCE_MANAGEMENT));
        }

    }

}