Differences between revisions 8 and 9
Revision 8 as of 2008-05-31 00:08:53
Size: 3135
Editor: KeiichiroOno
Comment:
Revision 9 as of 2008-05-31 00:13:14
Size: 3389
Editor: KeiichiroOno
Comment:
Deletions are marked like this. Additions are marked like this.
Line 60: Line 60:
All commands should implement the following interface:
Line 68: Line 70:
 * Question: What's the best parameter set for ''execute()'' method? Array of String/Object?
Line 70: Line 74:
    //
Line 87: Line 91:
And Command Manager will be a class to holds a OSGi Service Tracker:

{{{!#java

}}}

(This page is under construction)

Command Layer Definition

Command layer contains mechanism to make Cytoscape functions easily accessible from application layer. This layer should be separated from application layer and can be used in any mode: Desktop application, server version, and command line version.

Requirments

  • Command layer should be separated from application or UI.
  • Commands should be accessible from scripting (dynamic) languages.
  • Should be manageable by Undo manager (in application layer).
  • Extensible. Plugin writers and developers use Cytoscape as library can add their own commands.

Multiple Language Support

  • Commands should be easily accessible from dynamic (scripting) languages, including Python, Ruby, and JavaScript.

Functions Encapsulated as Command

In general, most of the classes in cytoscape.actions will be converted into Commands. In addition, some of the methods under the class cytoscape.Cytoscape will be encapsulated as command. Such as:

  • createNetwork()
  • createNewSession()
  • getNetwork()

Design

  • attachment:commandLayer1.png
  • Each command will be represented as an OSGi service.
  • Command executes the function through the OSGi service registory.
  • For easy access to commands, an utility class CommandService will be used.

   1 // Java
   2 CommandService.getCommand("command_name").execute();
   3 
   4 // Ruby
   5 CommandService.getCommand("command_name").execute
   6 

We can use similar design to Felix ShellService:

   1 package org.apache.felix.shell;
   2 
   3 public interface ShellService
   4 {
   5     public String[] getCommands();
   6     public String getCommandUsage(String name);
   7     public String getCommandDescription(String name);
   8     public ServiceReference getCommandReference(String name);
   9     public void executeCommand(
  10         String commandLine, PrintStream out, PrintStream err)
  11         throws Exception;
  12 }
  13 

Implementation

All commands should implement the following interface:

   1 public interface Command
   2 {
   3     public String getName();
   4     public void execute(Object[] args);
   5 }
   6 
  • Question: What's the best parameter set for execute() method? Array of String/Object?

   1 public class ImportGraphFileCommand extends Command {
   2     // 
   3 }
   4 

Exporting OSGi Service by Spring-DM

If we use one command = one OSGi service style design, we can use Spring Dynamic Module for managing service import/export.

<bean name="importGraphFileCommandService"
                class="org.cytoscape.command.impl.ImportGraphFileCommandService" />

<osgi:service auto-export="interfaces" ref="importGraphFileCommandService" />

And Command Manager will be a class to holds a OSGi Service Tracker:

{{{!#java

}}}

OSGi Service

Dynamic Language Support on JVM

Outdated_Cytoscape_3.0/CommandDiscussions (last edited 2011-02-24 15:33:09 by PietMolenaar)

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