package org.freehep.application.studio.pluginmanager; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Properties; import javax.swing.JDialog; import org.freehep.application.PropertyUtilities; import org.freehep.application.studio.Plugin; import org.freehep.application.studio.PluginInfo; import org.freehep.application.studio.Studio; import org.freehep.util.commanddispatcher.CommandProcessor; import org.freehep.xml.menus.XMLMenuBuilder; import org.freehep.xml.util.ClassPathEntityResolver; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; /** * A Plugin which provides a Plugin Manager. * @author tonyj * @version $Id: PluginManager.java 8584 2006-08-10 23:06:37Z duns $ */ public class PluginManager extends Plugin implements Runnable { private boolean checkForPluginsAtStart; private String pluginURL; private List availablePlugins; protected void init() throws org.xml.sax.SAXException, java.io.IOException { final Studio app = getApplication(); Properties user = app.getUserProperties(); pluginURL = user.getProperty("pluginURL"); checkForPluginsAtStart = PropertyUtilities.getBoolean(user,"checkForPluginsAtStart",false); XMLMenuBuilder builder = app.getXMLMenuBuilder(); java.net.URL xml = PluginManager.class.getResource("PluginManager.menus"); builder.build(xml); app.getCommandTargetManager().add(new Commands()); if (checkForPluginsAtStart && pluginURL != null) { Thread t = new Thread(this); t.setDaemon(true); t.setPriority(t.NORM_PRIORITY-1); t.start(); } } List getAvailablePlugins() { return availablePlugins; } public void run() { try { // For the moment at least we will use JDOM here SAXBuilder builder = new SAXBuilder(true); builder.setEntityResolver(new ClassPathEntityResolver("plugin.dtd",Studio.class)); java.net.URL url = new java.net.URL(pluginURL); java.io.InputStream in = url.openStream(); try { availablePlugins = new ArrayList(); Document doc = builder.build(in); Element root = doc.getRootElement(); for (Iterator iter = root.getChildren().iterator(); iter.hasNext(); ) { Element node = (Element) iter.next(); PluginInfo plugin = new PluginInfo(node); availablePlugins.add(plugin); } System.out.println("Done"); } finally { in.close(); } } catch (Throwable t) { t.printStackTrace(); } } public class Commands extends CommandProcessor { public void onPluginManager() { JDialog dlg = new PluginManagerDialog(getApplication(),PluginManager.this); dlg.pack(); dlg.setModal(true); dlg.setLocationRelativeTo(getApplication()); dlg.setTitle("Plugin Manager"); dlg.setVisible(true); } } }