/*******************************************************************************
* Copyright (c) 2008-2015 Sonatype, Inc. 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:
* Sonatype, Inc. - initial API and implementation
* Fred Bricon (Red Hat, Inc.) - auto update project configuration
*******************************************************************************/
package org.eclipse.m2e.core.ui.internal;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.eclipse.m2e.core.MavenPlugin;
import org.eclipse.m2e.core.internal.IMavenConstants;
import org.eclipse.m2e.core.internal.index.filter.FilteredIndex;
import org.eclipse.m2e.core.internal.lifecyclemapping.discovery.IMavenDiscovery;
import org.eclipse.m2e.core.ui.internal.console.MavenConsoleImpl;
import org.eclipse.m2e.core.ui.internal.project.MavenUpdateConfigurationChangeListener;
import org.eclipse.m2e.core.ui.internal.search.util.IndexSearchEngine;
import org.eclipse.m2e.core.ui.internal.search.util.SearchEngine;
import org.eclipse.m2e.core.ui.internal.wizards.IMavenDiscoveryUI;
@SuppressWarnings("restriction")
public class M2EUIPluginActivator extends AbstractUIPlugin {
public static final String PLUGIN_ID = "org.eclipse.m2e.core.ui"; //$NON-NLS-1$
private static M2EUIPluginActivator instance;
/**
* Storage for preferences.
*/
private ScopedPreferenceStore preferenceStore;
public M2EUIPluginActivator() {
M2EUIPluginActivator.instance = this;
}
@Override
public IPreferenceStore getPreferenceStore() {
// Create the preference store lazily.
if(preferenceStore == null) {
// InstanceScope.INSTANCE added in 3.7
preferenceStore = new ScopedPreferenceStore(new InstanceScope(), IMavenConstants.PLUGIN_ID);
}
return preferenceStore;
}
private MavenConsoleImpl console;
private MavenUpdateConfigurationChangeListener mavenUpdateConfigurationChangeListener;
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
IWorkspace workspace = ResourcesPlugin.getWorkspace();
mavenUpdateConfigurationChangeListener = new MavenUpdateConfigurationChangeListener();
workspace.addResourceChangeListener(mavenUpdateConfigurationChangeListener, IResourceChangeEvent.POST_CHANGE);
}
@Override
public void stop(BundleContext context) throws Exception {
super.stop(context);
IWorkspace workspace = ResourcesPlugin.getWorkspace();
workspace.removeResourceChangeListener(this.mavenUpdateConfigurationChangeListener);
this.mavenUpdateConfigurationChangeListener = null;
}
public static M2EUIPluginActivator getDefault() {
return instance;
}
/**
* Returns an Image for the file at the given relative path.
*/
public static Image getImage(String path) {
ImageRegistry registry = getDefault().getImageRegistry();
Image image = registry.get(path);
if(image == null) {
registry.put(path, imageDescriptorFromPlugin(IMavenConstants.PLUGIN_ID, path));
image = registry.get(path);
}
return image;
}
public static ImageDescriptor getImageDescriptor(String path) {
return imageDescriptorFromPlugin(IMavenConstants.PLUGIN_ID, path);
}
public synchronized MavenConsoleImpl getMavenConsole() {
if(console == null) {
console = new MavenConsoleImpl(MavenImages.M2);
}
return console;
}
public boolean hasMavenConsoleImpl() {
return console != null;
}
public SearchEngine getSearchEngine(IProject project) throws CoreException {
return new IndexSearchEngine(new FilteredIndex(project, MavenPlugin.getIndexManager().getIndex(project)));
}
@SuppressWarnings({"rawtypes", "unchecked"})
public synchronized IMavenDiscovery getMavenDiscovery() {
// TODO this leaks service references
BundleContext context = getBundle().getBundleContext();
ServiceReference serviceReference = context.getServiceReference(IMavenDiscovery.class.getName());
if(serviceReference != null) {
return (IMavenDiscovery) context.getService(serviceReference);
}
return null;
}
/**
* @param discovery
*/
public void ungetMavenDiscovery(IMavenDiscovery discovery) {
// TODO Auto-generated method ungetMavenDiscovery
}
/**
* @return
*/
public IMavenDiscoveryUI getImportWizardPageFactory() {
// TODO this leaks service references
BundleContext context = getBundle().getBundleContext();
ServiceReference serviceReference = context.getServiceReference(IMavenDiscoveryUI.class.getName());
if(serviceReference != null) {
return (IMavenDiscoveryUI) context.getService(serviceReference);
}
return null;
}
}