RFC Name : Auto Plugin Install |
Editor(s): ... |
<<TableOfContents: execution failed [Argument "maxdepth" must be an integer value, not "[2]"] (see also the log)>>
About this document
This is an official Request for Comment (RFC) for Auto Plugin Install.
For details on RFCs in general, check out the Wikipedia Entry: Request for Comments (RFCs)
Status
How to Comment
To view/add comments, click on any of 'Comment' links below. By adding your ideas to the Wiki directly, we can more easily organize everyone's ideas, and keep clear records. Be sure to include today's date and your name for each comment. Here is an example to get things started: /Comment.
Try to keep your comments as concrete and constructive as possible. For example, if you find a part of the RFC makes no sense, please say so, but don't stop there. Take the extra step and propose alternatives.
Proposal
Cytoscape plugins are mainly developed by third parties to add extra functionality to Cytoscape. Many plugin authors are willing to share the plugins they developed. Cytoscape maintains a long list of plugins at Cytoscape website at (http://cytoscape.org/plugins2.php) and the list is growing over time.
Right now, if a user wants to install a plugin, he/she can only do it manually. (1) Look at the Cytoscape website or the plugin website he/she knows. (2) Download the plugin, (3) Install the plugin into the Cytoscape. To manage the plugins (add/delete/update), user needs to keep track of each plugins manually and must know where the Cytoscape plugins are placed (in a designated directory).
The goal of this project is to provide a “Plugin manager” at Cytoscape to automate the the plugin installation process, so the users will have GUIs to manage their plugins (add/delete/update). The GUIs will integrate Cytoscape, plugin website, and installation process together and user even don’t need to know what the designated Cytoscape plugin directory is. We also note that “Firefox” and “Eclipse” already have such practice to add their add-ons.
This project should include three components: (1) plugin database (2) plugin web site (3) plugin manager
Use Cases
Load a plugin “BiNGO” into Cytoscape with Plugin_Manager.
1. Launch Cytoscape, click menu “Plugins”, click submenu “Import/update plugins”.
2. A dialog with title “Plugin manager” shows up. All the plugins installed are listed in the JTable. There are three buttons at the right side of JTable, “Get plugins”, “Uninstall” and “Find Updates”.
3. Click the button “Get plugins”. A new dialog with title “Plugin List” pops up, which list all the plugins available (Retrieved dynamically from “CyPluginDB”). In the dialog, there is a JTree, which list five categories of Cytoscape plugins (“Functional Enrichment plugins”, “Analysis plugins”, “Network and Attribute I/O Plugins”, “Network Inference Plugins”). Click the tree node “Functional Enrichment plugins” expands the node, which list all the plugins belong to this category.
4. Click “BiNGO”, a new dialog with title “Add BiNGO Plugin” show up, which gives detail description of the plugin. A plugin may have several versions for download. Each radio button represents plugin versions that are compatible with the current Cytoscape version. There are three buttons at the end of the page, “Install”, “Use once”, “Cancel”. – If multiple versions are compatible might the user expect a description for each one so they can tell which one they want? If not offering the most recent version by default may make more sense.
5. Selected the version of plugin, click “Install” button will initiate the installation process. (License agreement dialog and progress bar) If “Use once” is clicked, the plugin will be load into memory only, not persist in disk.
6. After Installation is completed, an info dialog will inform the user that the plugin is installed.
Data flow diagram
Note: The web site may be built with PHP and MySQL. Cytoscape will have different versions. Plugins will also have different versions. Different versions may not compatible each other. Therefore a dynamic web site with database as back-end is desirable to retrieve plugins, which are compatible with current Cyoscape version.
Plugin database
Host: chianti.ucsd.edu Database name: CyPluginDB
* Current Design:
Plugin webpages
Host: cytoscape.org
1. Main page, which lists all the plugins. Same as usual, but data source will be from CyPluginDB. If the DB is updated, this page will be updated automatically.
- pluginList.php
2. Pages for each plugin
getPlugin.php parameters: PluginName
Plugin data management
1. Plugin author submit plugin to Cytoscape pluginSubmit.php (Web form)
Title: Submit Plugin to Cytoscape (File_upload) Authors: xxx Plugin_Name: textField Plugin_version: textField Release Date: May 2, 2005 Institution: textField Jar File: textField Verified to work in Cytoscape version: 2.3, 2.4 (checkboxes) Plugin URL: XXXXXXX.com
Submit button, cancel button
2. Load plugin to CyPluginDB after validation pluginLoading.py (web form, password required to upload, DB admin only) (ToDo: ScreenShot)
Plugin Manager
1. Manager makes http fetch request to given url (default to cytoscape.org), expect back an xml document with information about all available plugins:
<project> <!-- global info regarding the project these plugins come from --> <name> Cytoscape Plugins </name> <description> Test </description> <url> http://cytoscape.org </url> <pluginlist> <plugin> <uniqueID>Some text that is the same from one version to the next</uniqueID> <name> foobar </name> <description> blah </description> <pluginVersion> 1.0 </pluginVersion> <cytoscapeVersion> 2.5 </cytoscapeVersion> <!-- jar or zip supported --> <filetype> jar </filetype> <category> Enrichment </category> <!-- license is NOT required, if used license can be embedded in the xml or downloaded from a url --> <license> <!-- this tag is ONLY used if you want the license to be agreed to with every update, otherwise it will be shown when first installed only --> <license_required /> <url>http://url/to/download/license.txt </url> <!-- OR --> <text> This is my license text that a user must accept in order to install </text> </license> <url> http://url/to/download/jar-or-zip-file.xxx </url> <authorlist> <author> <name> </name> <institution> </institution> </author> </authorlist> </plugin> </pluginlist> </project>
User gets dialog box with plugins available at the specific site they want for cytoscape version in use. This makes it easy for anyone else to set up a document for plugin downloads at their own site in case they don't submit to us. Sites are handled via the Bookmarks and users can add/delete their own. Must be in the form of "http://myPluginUrl/pluginXmlFileName.xml".
PluginManageDialog.png PluginUpdateDialog.png
PluginMgr (public methods)
- String getDefaultUrl()
- List inquire(Url)
boolean install(PluginInfoObj)
boolean delete(PluginInfoObj)
- List listCurrentlyInstalled()
register(CytocapePlugin)
Registering a Plugin
CytocapePlugin has a new method "getPluginInfoObj()". All plugins are encouraged to use this to make registering with the manager simpler. The following example mirrors the information that we would expect to get from the xml document that describes plugins available for download. To implement the method:
import cytoscape.plugin.PluginInfo; import cytoscape.plugin.PluginInfo.Category; public class MyPlugin extends CytoscapePlugin { public MyPlugin() { // do all my work } public PluginInfo getPluginInfoObject() { PluginInfo Info = new PluginInfo(); Info.setName("MyPlugin"); Info.setDescription("Just something to show the user"); // this is free text but several categories (including "Core") are set up based on website categories Info.setCategory("SomeText") OR Info.setCategory(Category.CORE) // used to check for updated versions Info.setPluginVersion("0.5"); // this is the site you could download this plugin from. This is used for finding updates // if the plugin lacks this no updates can/will ever be downloaded through the auto-updater Info.setProjectUrl("http://where-I-find-this-plugin/plugins.xml"); } }
Any of the methods above that are not set are set to some default values when new PluginInfo() is called. CytoscapeInit uses the PluginManager to register all plugins. A plugin installed through our new system will have this information already set through the xml describing it. Any plugin installed through another process is encouraged to use the PluginInfo object to give as much information as possible about the plugin.
Implementation Plan
- Plugin database
“CyPluginDB” (PluginList,Plugins,PluginAuthors)
- Web pages
- (1) pluginList.php (2) getPlugin.php (3) submitPlugin.php (4) loadingPlugin.php
- Java class
(1) PluginManagerDialog.java (2) PluginUrlDialog.java (3) PluginUpdateDialog.java
(4) PluginManager.java - handles download, install, delete, inquiring
(5) PluginTracker.java - tracks currently installed plugins and dependencies
(6) PluginInfo.java - contains basic information necessary (name, desc, url etc) for install/update
Deferred Items
Open Issues
Installations that are not jar/zip (such as Agilent Literature Search) are still required to download/install themselves currently.
Backward Compatibility
Plugins that do not implement the getPluginInfoObject() method and are not installed through the xml above will still be listed in "installed plugins" but will have less information and will be unable to update.
Expected growth and plan for growth
References
Comments
DavidStates 2007-03-25 07:59:46
Resource competition - button bindings
An issue we are encountering when we have multiple plugins loaded is confusion on the GUI for which plugin is responding to which events. There are a finite number of click events and many potential uses for them. As a first pass, it would be useful for plugins to describe what events they will handle as part of the registration process.
AllanKuchinsky 2007-04-02 06:02:55
David,
Yes, by all means this should be addressed. This is part of a more general issue concerning event should be managed and responded to by multiple components of Cytoscape, be they plugins or core elements. Mike Smoot and I are going to take on the task of rationalizing the event handling regimen in Cytoscape, with an eye towards the kinds of registration process you are talking about. It will be very helpful to get comments/suggestions from you and your team.
Plugin dependencies
What if a plugin depends on another plugin ? At the very least I think such dependencies should be checked.
Then an automatic search and install system for the missing dependencies would be useful, as Eclipse does. This would require to add a dependency section to the xml plugin description file, listing the required plugins, their minimal versions and a URL where to fetch them. Karl