/*************************************************************************************
* Copyright (c) 2010-2011 Red Hat, 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:
* JBoss by Red Hat - Initial implementation.
************************************************************************************/
package org.jboss.tools.runtime.core;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import org.eclipse.core.runtime.IProgressMonitor;
import org.jboss.tools.foundation.core.plugin.BaseCorePlugin;
import org.jboss.tools.foundation.core.plugin.log.IPluginLog;
import org.jboss.tools.foundation.core.plugin.log.StatusFactory;
import org.jboss.tools.runtime.core.internal.RuntimeCorePreferences;
import org.jboss.tools.runtime.core.internal.RuntimeExtensionManager;
import org.jboss.tools.runtime.core.model.DownloadRuntime;
import org.jboss.tools.runtime.core.model.IDownloadRuntimes;
import org.jboss.tools.runtime.core.model.IRuntimeDetector;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*
* @author snjeza
*/
public class RuntimeCoreActivator extends BaseCorePlugin {
// The plug-in ID
public static final String PLUGIN_ID = "org.jboss.tools.runtime.core"; //$NON-NLS-1$
// The shared instance
private static RuntimeCoreActivator plugin;
private BundleContext context;
private IDownloadRuntimes downloader = null;
/**
* The constructor
*/
public RuntimeCoreActivator() {
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
this.context = context;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static RuntimeCoreActivator getDefault() {
return plugin;
}
public BundleContext getBundleContext() {
return context;
}
public IDownloadRuntimes getDownloader() {
return downloader;
}
public void setDownloader(IDownloadRuntimes downloader) {
this.downloader = downloader;
}
// TODO figure out a better place for this
private static final String ESB_DETECTOR_ID = "org.jboss.tools.runtime.handlers.EsbHandler"; //$NON-NLS-1$
public IRuntimeDetector getEsbDetector() {
return findRuntimeDetector(ESB_DETECTOR_ID);
}
public IRuntimeDetector findRuntimeDetector(String id) {
return RuntimeExtensionManager.getDefault().findRuntimeDetector(id);
}
/* Please use getRuntimeDetectors */
@Deprecated
public Set<IRuntimeDetector> getDeclaredRuntimeDetectors() {
return getRuntimeDetectors();
}
/**
* This method is dangerous to use. Do NOT modify the returning Set,
* as it is in fact the actual data model!
* @return
*/
public synchronized Set<IRuntimeDetector> getRuntimeDetectors() {
return RuntimeExtensionManager.getDefault().getRuntimeDetectors();
}
public void saveEnabledDetectors() {
RuntimeCorePreferences.getDefault().saveDetectorEnablement();
}
public void saveEnabledDetectors(Set<IRuntimeDetector> allDetectors) {
RuntimeCorePreferences.getDefault().saveDetectorEnablement(allDetectors);
}
/**
* Get a map of download runtime ID to the actual downloadruntime object
* This task may be long-running. It is advised to use the
* signature with the progress monitor instead.
*
* This method may be long-running depending on the state of the cache.
* It may load plugins or access remote resources.
* Please use the signature with the progress monitor instead
*
* @deprecated
* @return
*/
public Map<String, DownloadRuntime> getDownloadRuntimes() {
return RuntimeExtensionManager.getDefault().getDownloadRuntimes();
}
/**
* Get a map of download runtime ID to the actual downloadruntime object
* Warning: This method may involve plugin loading or long-running file or wire IO tasks.
* This should not be called from the UI without the ability to respond to progress or initiate a cancelation
* @return
*/
public Map<String, DownloadRuntime> getDownloadRuntimes(IProgressMonitor monitor) {
return RuntimeExtensionManager.getDefault().getDownloadRuntimes(monitor);
}
/**
* Get an array of download runtime objects
*
* Warning: This method may involve plugin loading or long-running file or wire IO tasks.
* This should not be called from the UI without the ability to respond to progress or initiate a cancelation
*
* @return
*/
public DownloadRuntime[] getDownloadRuntimeArray(IProgressMonitor monitor) {
Map<String, DownloadRuntime> map = RuntimeExtensionManager.getDefault().getDownloadRuntimes(monitor);
if( map == null )
return new DownloadRuntime[0];
Collection<DownloadRuntime> arr = map.values();
return (DownloadRuntime[]) arr.toArray(new DownloadRuntime[arr.size()]);
}
/**
* This method will check for a download runtime by checking it's
* id, or, if none is found, by checking for a PROPERTY_ALTERNATE_ID
* property key which matches the id.
*
* This method may be long-running depending on the state of the cache.
* It may load plugins or access remote resources.
* Please use the signature with the progress monitor instead
*
* @deprecated
* @param id A found DownloadRuntime or null
* @return
*/
public DownloadRuntime findDownloadRuntime(String id) {
return RuntimeExtensionManager.getDefault().findDownloadRuntime(id);
}
/**
* This method will check for a download runtime by checking it's
* id, or, if none is found, by checking for a PROPERTY_ALTERNATE_ID
* property key which matches the id.
*
* @param id A found DownloadRuntime or null
* @param IProgressMonitor monitor
* @return
*/
public DownloadRuntime findDownloadRuntime(String id, IProgressMonitor monitor) {
return RuntimeExtensionManager.getDefault().findDownloadRuntime(id, monitor);
}
/**
* Get the IPluginLog for this plugin. This method
* helps to make logging easier, for example:
*
* FoundationCorePlugin.pluginLog().logError(etc)
*
* @return IPluginLog object
*/
public static IPluginLog pluginLog() {
return getDefault().pluginLogInternal();
}
/**
* Get a status factory for this plugin
* @return status factory
*/
public static StatusFactory statusFactory() {
return getDefault().statusFactoryInternal();
}
}