blob: 792fb63c3475f4e21e4b41a5fe2f7fc2aa6cc51b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2009 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 java.io.IOException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.equinox.internal.p2.ui.sdk.prefs.PreferenceConstants;
import org.eclipse.equinox.internal.p2.ui.sdk.prefs.PreferenceInitializer;
import org.eclipse.equinox.p2.core.IAgentLocation;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.eclipse.equinox.p2.engine.IProfileRegistry;
import org.eclipse.equinox.p2.engine.ProfileScope;
import org.eclipse.equinox.p2.ui.Policy;
import org.eclipse.equinox.p2.ui.ProvisioningUI;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.eclipse.ui.statushandlers.StatusManager;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
/**
* Activator class for the p2 UI.
*/
public class ProvSDKUIActivator extends AbstractUIPlugin {
private static ProvSDKUIActivator plugin;
private static BundleContext context;
private ScopedPreferenceStore preferenceStore;
private IPropertyChangeListener preferenceListener;
public static final String PLUGIN_ID = "org.eclipse.equinox.p2.ui.sdk"; //$NON-NLS-1$
public static BundleContext getContext() {
return context;
}
/**
* Returns the singleton plugin instance
*
* @return the instance
*/
public static ProvSDKUIActivator getDefault() {
return plugin;
}
/**
* Returns an image descriptor for the image file at the given plug-in
* relative path
*
* @param path
* the path
* @return the image descriptor
*/
public static ImageDescriptor getImageDescriptor(String path) {
return imageDescriptorFromPlugin(PLUGIN_ID, path);
}
public ProvSDKUIActivator() {
// constructor
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext bundleContext) throws Exception {
super.start(bundleContext);
plugin = this;
ProvSDKUIActivator.context = bundleContext;
PreferenceInitializer.migratePreferences();
getPreferenceStore().addPropertyChangeListener(getPreferenceListener());
}
private IPropertyChangeListener getPreferenceListener() {
if (preferenceListener == null) {
preferenceListener = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
updateWithPreferences(getPolicy());
}
};
}
return preferenceListener;
}
public ProvisioningUI getProvisioningUI() {
return ProvisioningUI.getDefaultUI();
}
private Policy getPolicy() {
return getProvisioningUI().getPolicy();
}
public IProvisioningAgent getProvisioningAgent() {
return getProvisioningUI().getSession().getProvisioningAgent();
}
public void stop(BundleContext bundleContext) throws Exception {
plugin = null;
getPreferenceStore().removePropertyChangeListener(preferenceListener);
super.stop(bundleContext);
}
static IStatus getNoSelfProfileStatus() {
return new Status(IStatus.WARNING, PLUGIN_ID, ProvSDKMessages.ProvSDKUIActivator_NoSelfProfile);
}
void updateWithPreferences(Policy policy) {
policy.setShowLatestVersionsOnly(getPreferenceStore().getBoolean(PreferenceConstants.PREF_SHOW_LATEST_VERSION));
}
/*
* Overridden to use a profile scoped preference store.
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#getPreferenceStore()
*/
public IPreferenceStore getPreferenceStore() {
// Create the preference store lazily.
if (preferenceStore == null) {
final IAgentLocation agentLocation = getAgentLocation();
if (agentLocation == null)
return super.getPreferenceStore();
preferenceStore = new ScopedPreferenceStore(new ProfileScope(agentLocation, IProfileRegistry.SELF), PLUGIN_ID);
}
return preferenceStore;
}
private IAgentLocation getAgentLocation() {
ServiceReference ref = getContext().getServiceReference(IAgentLocation.SERVICE_NAME);
if (ref == null)
return null;
IAgentLocation location = (IAgentLocation) getContext().getService(ref);
getContext().ungetService(ref);
return location;
}
public void savePreferences() {
if (preferenceStore != null)
try {
preferenceStore.save();
} catch (IOException e) {
StatusManager.getManager().handle(new Status(IStatus.ERROR, PLUGIN_ID, 0, ProvSDKMessages.ProvSDKUIActivator_ErrorSavingPrefs, e), StatusManager.LOG | StatusManager.SHOW);
}
}
}