Differences between revisions 2 and 3
Revision 2 as of 2007-10-04 19:28:33
Size: 1262
Editor: malbec
Comment:
Revision 3 as of 2007-10-04 19:49:35
Size: 2052
Editor: malbec
Comment:
Deletions are marked like this. Additions are marked like this.
Line 23: Line 23:
 * Dialog  * Dialog
Line 31: Line 32:
// in the plugin
Line 35: Line 37:
dict.put("service.pid","whatever"); dict.put("service.pid","myuipanel.persistent.id");
Line 38: Line 40:
Line 44: Line 45:
 
{{{
// The factory is the service. The factory will return individual action objects
// that can store internal state. If we didn't have a factory, then the individual
// actions wouldn't be able to store their state because they'd persist as services.
interface CytoscapeActionFactory {
  CytoscapeAction createAction(context of some sort);
}

interface CytoscapeAction {
   void run();
}

// meta data defining where/how to use the action
Hashtable dict = new HashTable();
dict.put("preferred.menu","whereever/submenu");
dict.put("action.panel","myuipanel.persistent.id"); // so that it can get the exact panel
dict.put("

bundleContext.registerService(CytoscapeActionFactory.class.getName(), new MyCyActionFactory(), dict);
}}}

Cytoscape APIs

Cytoscape Provided Services

Plugin Implemented Services

The APIs for these services are defined as interfaces in Cytoscape. The interfaces are as follows:

UI Services

Interactive - provide an option to bring up before or after action has run Action to create panel Action to be triggered by the panel

  • Control Tab
  • Results Tab
  • Dialog

// the service interface
interface UIPanel {
  JPanel getJPanel();
}

// in the plugin
// meta data defining where/how to use the panel
Hashtable dict = new HashTable();
dict.put("panel.location","control");
dict.put("panel.name","hello world");
dict.put("service.pid","myuipanel.persistent.id");

bundleContext.registerService(UIPanel.class.getName(), new MyUIPanel(), dict);

Single Action

  • Menu Item
  • Button On Toolbar

// The factory is the service.  The factory will return individual action objects
// that can store internal state.  If we didn't have a factory, then the individual
// actions wouldn't be able to store their state because they'd persist as services.
interface CytoscapeActionFactory {
  CytoscapeAction createAction(context of some sort);
}

interface CytoscapeAction {
   void run();
}

// meta data defining where/how to use the action
Hashtable dict = new HashTable();
dict.put("preferred.menu","whereever/submenu");
dict.put("action.panel","myuipanel.persistent.id"); // so that it can get the exact panel
dict.put("

bundleContext.registerService(CytoscapeActionFactory.class.getName(), new MyCyActionFactory(), dict);

Or

  • Specify tunables.
  • Provide suggestions on where to put it (Tab, menu item).

Action Services

  • An action gets current context (network, view, etc.). Then the action does "something". The action should be independent of the UI. Make the actions chainable.

OSGI_Refactoring_Possibilities (last edited 2009-02-12 01:03:49 by localhost)

Funding for Cytoscape is provided by a federal grant from the U.S. National Institute of General Medical Sciences (NIGMS) of the Na tional Institutes of Health (NIH) under award number GM070743-01. Corporate funding is provided through a contract from Unilever PLC.

MoinMoin Appliance - Powered by TurnKey Linux