org.eclipse.equinox.internal.p2.ui.sdk.SDKPolicy.java Source code

Java tutorial

Introduction

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

Source

/*******************************************************************************
 * Copyright (c) 2009, 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
 *******************************************************************************/
package org.eclipse.equinox.internal.p2.ui.sdk;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.equinox.internal.p2.ui.sdk.prefs.PreferenceConstants;
import org.eclipse.equinox.p2.engine.IProvisioningPlan;
import org.eclipse.equinox.p2.engine.query.UserVisibleRootQuery;
import org.eclipse.equinox.p2.operations.ProfileChangeOperation;
import org.eclipse.equinox.p2.query.QueryUtil;
import org.eclipse.equinox.p2.ui.Policy;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.statushandlers.StatusManager;

/**
 * SDKPolicy defines the Eclipse SDK UI policies for the
 * p2 UI.  The policy is declared as an OSGi service in
 * the policy_component.xml file.
 * 
 * @since 3.6
 */
public class SDKPolicy extends Policy {

    public SDKPolicy() {
        // initialize for our values
        setVisibleAvailableIUQuery(QueryUtil.createIUGroupQuery());
        // If this ever changes, we must change AutomaticUpdateSchedule.getProfileQuery()
        setVisibleInstalledIUQuery(new UserVisibleRootQuery());
        setRepositoryPreferencePageId("org.eclipse.equinox.internal.p2.ui.sdk.SitesPreferencePage"); //$NON-NLS-1$
        setRepositoryPreferencePageName(ProvSDKMessages.SDKPolicy_PrefPageName);
        ProvSDKUIActivator.getDefault().updateWithPreferences(this);
    }

    public IStatus getNoProfileChosenStatus() {
        return ProvSDKUIActivator.getNoSelfProfileStatus();
    }

    public boolean continueWorkingOperation(ProfileChangeOperation operation, Shell shell) {
        // don't continue if superclass has already identified problem scenarios
        boolean ok = super.continueWorkingWithOperation(operation, shell);
        if (!ok)
            return false;

        IProvisioningPlan plan = operation.getProvisioningPlan();
        if (plan == null)
            return false;

        // Check the preference to see whether to continue.
        IPreferenceStore prefs = ProvSDKUIActivator.getDefault().getPreferenceStore();
        String openPlan = prefs.getString(PreferenceConstants.PREF_OPEN_WIZARD_ON_ERROR_PLAN);
        if (MessageDialogWithToggle.ALWAYS.equals(openPlan)) {
            return true;
        }
        if (MessageDialogWithToggle.NEVER.equals(openPlan)) {
            StatusManager.getManager().handle(plan.getStatus(), StatusManager.SHOW | StatusManager.LOG);
            return false;
        }
        MessageDialogWithToggle dialog = MessageDialogWithToggle.openYesNoCancelQuestion(shell,
                ProvSDKMessages.ProvSDKUIActivator_Question, ProvSDKMessages.ProvSDKUIActivator_OpenWizardAnyway,
                null, false, prefs, PreferenceConstants.PREF_OPEN_WIZARD_ON_ERROR_PLAN);

        // Any answer but yes will stop the performance of the plan, but NO is interpreted to mean, show me the error.
        if (dialog.getReturnCode() == IDialogConstants.NO_ID)
            StatusManager.getManager().handle(plan.getStatus(), StatusManager.SHOW | StatusManager.LOG);
        return dialog.getReturnCode() == IDialogConstants.YES_ID;
    }
}