/**
* Copyright (c) 2005-2012 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package com.aptana.interactive_console;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.model.IProcess;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
import com.aptana.interactive_console.console.ui.ScriptConsoleUIConstants;
import com.aptana.shared_core.log.Log;
/**
* The main plugin class to be used in the desktop.
*/
public class InteractiveConsolePlugin extends AbstractUIPlugin {
//The shared instance.
private static InteractiveConsolePlugin plugin;
//Resource bundle.
private ResourceBundle resourceBundle;
/**
* The constructor.
*/
public InteractiveConsolePlugin() {
super();
plugin = this;
try {
resourceBundle = ResourceBundle
.getBundle("com.aptana.interactive_console.InteractiveConsolePluginResources");
} catch (MissingResourceException x) {
resourceBundle = null;
}
}
/**
* This method is called upon plug-in activation
*/
public void start(BundleContext context) throws Exception {
super.start(context);
}
/**
* This method is called when the plug-in is stopped
*/
public void stop(BundleContext context) throws Exception {
super.stop(context);
for (ILaunch l : new ArrayList<ILaunch>(consoleLaunches)) {
try {
this.removeConsoleLaunch(l);
} catch (Exception e) {
Log.log(e);
}
}
}
/**
* Returns the shared instance.
*/
public static InteractiveConsolePlugin getDefault() {
return plugin;
}
/**
* Returns the string from the plugin's resource bundle,
* or 'key' if not found.
*/
public static String getResourceString(String key) {
ResourceBundle bundle = InteractiveConsolePlugin.getDefault().getResourceBundle();
try {
return (bundle != null) ? bundle.getString(key) : key;
} catch (MissingResourceException e) {
return key;
}
}
/**
* Returns the plugin's resource bundle,
*/
public ResourceBundle getResourceBundle() {
return resourceBundle;
}
//Images for the console
private static final String[][] IMAGES = new String[][] { { "icons/save.gif", //$NON-NLS-1$
ScriptConsoleUIConstants.SAVE_SESSION_ICON }, { "icons/terminate.gif", //$NON-NLS-1$
ScriptConsoleUIConstants.TERMINATE_ICON } };
@Override
protected void initializeImageRegistry(ImageRegistry registry) {
for (int i = 0; i < IMAGES.length; ++i) {
URL url = getDefault().getBundle().getEntry(IMAGES[i][0]);
registry.put(IMAGES[i][1], ImageDescriptor.createFromURL(url));
}
}
public ImageDescriptor getImageDescriptor(String key) {
return getImageRegistry().getDescriptor(key);
}
/**
* Holds the console launches that should be terminated.
*/
private List<ILaunch> consoleLaunches = new ArrayList<ILaunch>();
/**
* Adds launch to the list of launches managed by pydev. Added launches will be shutdown
* if they are not removed before the plugin shutdown.
*
* @param launch launch to be added
*/
public void addConsoleLaunch(ILaunch launch) {
consoleLaunches.add(launch);
}
/**
* Removes a launch from a pydev console and stops the related process.
*
* @param launch the launch to be removed
*/
public void removeConsoleLaunch(ILaunch launch) {
if (consoleLaunches.remove(launch)) {
IProcess[] processes = launch.getProcesses();
if (processes != null) {
for (IProcess p : processes) {
try {
p.terminate();
} catch (Exception e) {
Log.log(e);
}
}
}
}
}
}