package com.hackerdude.apps.sqlide;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.Action;
import com.hackerdude.apps.sqlide.pluginapi.BrowserExtensionPluginIF;
import com.hackerdude.apps.sqlide.pluginapi.IDENodeContextPluginIF;
import com.hackerdude.apps.sqlide.pluginapi.IDENonVisualPluginIF;
import com.hackerdude.apps.sqlide.pluginapi.IDEPluginIF;
import com.hackerdude.apps.sqlide.pluginapi.IDEVisualPluginIF;
import com.hackerdude.apps.sqlide.pluginapi.NodeIDEBase;
/**
* This class encapsulates the currently running plugins.
*/
public class RunningPlugins {
ArrayList pluginInstances;
ArrayList nonVisualPlugins;
ArrayList visualPlugins;
ArrayList nodeContextPlugins;
ArrayList browserExtensionPlugins;
public RunningPlugins() {
pluginInstances = new ArrayList();
visualPlugins = new ArrayList();
nodeContextPlugins = new ArrayList();
nonVisualPlugins = new ArrayList();
browserExtensionPlugins = new ArrayList();
}
public synchronized void refreshPlugins() {
Iterator iPanels = pluginInstances.iterator();
while ( iPanels.hasNext() ) {
IDEPluginIF current = (IDEPluginIF)iPanels.next();
/** @todo Reimplement */
// current.refreshPanel();
}
}
/**
* Adds a new plugin to the list of running plugins, and start the plugin.
*/
public void startPlugin(IDEPluginIF plugin) {
plugin.initPlugin();
pluginInstances.add(plugin);
if ( plugin instanceof IDENonVisualPluginIF) nonVisualPlugins.add(plugin);
if ( plugin instanceof IDEVisualPluginIF) visualPlugins.add(plugin);
if ( plugin instanceof IDENodeContextPluginIF ) nodeContextPlugins.add(plugin);
if ( plugin instanceof BrowserExtensionPluginIF ) browserExtensionPlugins.add(plugin);
}
/**
* Removes a plugin from the list of running plugins, and stop the plugin
*/
public void endPlugin(IDEPluginIF plugin) {
plugin.freePlugin();
pluginInstances.remove(plugin);
if ( plugin instanceof IDENonVisualPluginIF) nonVisualPlugins.remove(plugin);
if ( plugin instanceof IDEVisualPluginIF) visualPlugins.remove(plugin);
if ( plugin instanceof IDENodeContextPluginIF ) nodeContextPlugins.remove(plugin);
if ( plugin instanceof BrowserExtensionPluginIF ) browserExtensionPlugins.remove(plugin);
}
public synchronized void terminatePlugins() {
Iterator iPanels = pluginInstances.iterator();
while ( iPanels.hasNext() ) {
IDEPluginIF current = (IDEPluginIF)iPanels.next();
current.freePlugin();
}
pluginInstances.clear();
nonVisualPlugins.clear();
nodeContextPlugins.clear();
}
/**
* This function receives, for all the running NodeContextPlugins,
* the possible actions for the specified node. The SQLIDE main class
* calls this method to get the possible actions from all plugins and
* put them in a context menu.
*/
public synchronized Action[] getActionsFor(NodeIDEBase[] selectedNodes) {
ArrayList allActions = new ArrayList();
Iterator iContextPlugins = nodeContextPlugins.iterator();
while (iContextPlugins.hasNext() ) {
IDENodeContextPluginIF currentContextPlugin = (IDENodeContextPluginIF)iContextPlugins.next();
Action[] actions = currentContextPlugin.getActionsFor(selectedNodes);
if ( actions != null ) {
for ( int i=0; i<actions.length; i++ ) allActions.add(actions[i]);
}
}
Action[] result = new Action[allActions.size()];
result = (Action[])allActions.toArray(result);
return result;
}
/**
* This method asks all the running browser extension plugins
* to add themselves to the specified
*/
public void requestAddSubNodes(NodeIDEBase parentNode) {
Iterator iPanels = browserExtensionPlugins.iterator();
while ( iPanels.hasNext() ) {
BrowserExtensionPluginIF current = (BrowserExtensionPluginIF)iPanels.next();
current.requestAddSubNodes(parentNode);
}
}
/**
* This function returns all the running node context plugins.
* @return The running node context plugins.
*/
public IDENodeContextPluginIF[] getNodeContextPlugins() {
IDENodeContextPluginIF[] nodePlugins = new IDENodeContextPluginIF[nodeContextPlugins.size()];
nodePlugins = (IDENodeContextPluginIF[]) nodeContextPlugins.toArray(nodePlugins);
return nodePlugins;
}
public BrowserExtensionPluginIF[] getBrowserExtensionPlugins() {
BrowserExtensionPluginIF[] plugins = new BrowserExtensionPluginIF[browserExtensionPlugins.size()];
plugins = (BrowserExtensionPluginIF[]) browserExtensionPlugins.toArray(plugins);
return plugins;
}
public IDEPluginIF[] getPluginInstances() {
IDEPluginIF[] plugins = new IDEPluginIF[pluginInstances.size()];
plugins = (IDEPluginIF[]) pluginInstances.toArray(plugins);
return plugins;
}
}