Cytoscape 3 Simple App 开发(转载)

    历经磨难,Cytoscape终于迎来了3.0的发布。API完全不兼容了,各种插件必须要升级才能在3.0中运行。

    追随乔大爷的脚步,Cytoscape 3.0的插件(plug-in)改名叫应用(app),还开了一个App Store。看看Cytoscape的红火,各行各业都是打造产业链和共赢的生态环境才能获得大的成功,互联网如此,移动设备如此,生命科学也是如此。不仅仅是API的变动,开发方式也发生了巨大的改变。为了一定程度上的兼容性,Cytoscape 3.0中的应用分为两种:

  • 简单应用(simple App):基本等同于以前2.X版本中的插件,开发方式基本一致;
  • 套装应用(Bundle App):基于OGSi的应用,可以为其他应用提供API、不会出现库的版本冲突等。

    先说说简单应用的开发,给个最简单的例子,例子来自Creating a Simple Cytoscape 3 App,稍作修改和说明。

这个简单应用有两个类:

  • HideSingletonNodesApp:应用的入口,必须继承AbstractCySwingApp。

这个类的代码如下,保存到HideSingletonNodesApp.java文件:

import org.cytoscape.app.swing.AbstractCySwingApp;
import org.cytoscape.app.swing.CySwingAppAdapter;

public class HideSingletonNodesApp extends AbstractCySwingApp 
{
    public HideSingletonNodesApp(CySwingAppAdapter adapter)
    {
        super(adapter);
        adapter.getCySwingApplication()
                    .addAction(new MenuAction(adapter));
    }
}

 

  • MenuAction类:在Cytoscape的Select菜单中加入菜单项,实现隐藏孤立点(跟其他所有点都不相连的点)功能:

这个类的代码如下,保存到MenuAction.java文件:

 

import java.awt.event.ActionEvent;

import org.cytoscape.app.CyAppAdapter;
import org.cytoscape.application.CyApplicationManager;
import org.cytoscape.application.swing.AbstractCyAction;
import org.cytoscape.model.CyEdge;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode;
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.presentation.property.BasicVisualLexicon;


public class MenuAction extends AbstractCyAction {
    private final CyAppAdapter adapter;

    public MenuAction(CyAppAdapter adapter) {
        super("Hide unconnected nodes",
            adapter.getCyApplicationManager(),
            "network",
            adapter.getCyNetworkViewManager());
        this.adapter = adapter;
        setPreferredMenu("Select");
    }

    public void actionPerformed(ActionEvent e) {
        final CyApplicationManager manager = adapter.getCyApplicationManager();
        final CyNetworkView networkView = manager.getCurrentNetworkView();
        final CyNetwork network = networkView.getModel();

        for (CyNode node : network.getNodeList()) {
            if (network.getNeighborList(node, CyEdge.Type.ANY).isEmpty())
                networkView.getNodeView(node).setVisualProperty(
                    BasicVisualLexicon.NODE_VISIBLE, false);
        }

        networkView.updateView();
    }
}
 

 

 
 

这个简单应用的代码就是这样。接下来还需要一个文件描述应用的基本情况,供Cytoscape在加载应用时读取。这个文件是app-manifest:

1
2
3
4
5
Cytoscape - App - Version :   0.1
Cytoscape - App - Name :   HideSingletonNodesApp
Cytoscape - App :   HideSingletonNodesApp
Cytoscape - App - Works - With :   3.0
Cytoscape - API - Compatibility :   3.0

第一行是应用的版本号,第二行是应用名称,第三行是应用入口类,接下来是应用运行的Cytoscape版本。Cytoscape网站上给出的教程中的文件到此就结束了。但这样得到的应用加载时会保存,提示缺少第5行这样的信息,即应用所兼容的API版本。

把上述三个文件放到同一个目录下,下载Cytoscape3-api.jar放到同一目录下,编译打包:

1
2
javac  - cp  Cytoscape3 - api . jar  *. java
jar cfm  HideSingletonNodesApp . jar app - manifest  *. class

在当前目录下得到的HideSingletonNodesApp.jar。到Cytoscape中,Apps -> App Manager -> Install from File .. ,安装这个Jar文件。安装后可以在Currently Installed中看到应用的基本信息,在Select菜单的最下面可以看到Hide unconnected nodes菜单项。

就现在Cytoscape的应用情况来看,大部分的应用按照Simple App的形式开发就足够了。但诸如MCODE之类准官方的应用都迁移到了套装应用的模式上,这是未来的趋势。但相互之间API的依赖,会不会陷入Linux库依赖一样的情况?毕竟,Cytoscape不是给计算机玩家用的,很多用户是生物医学的人,简单易用直观是才是王道。

迫于用户反馈,我们的插件也得升级了。ClusterViz发布三年,没发文章,倒是被人用在了一些大项目中,还发了NG之类的好文章;发了文章的一些东西反倒是没人用。这跟Journal of Statistical Software能成为影响因子最高的统计学期刊或许是一个道理:show me the codes!

 

注:原文地址:http://gossipcoder.com/?p=1376

参考链接:http://opentutorials.cgl.ucsf.edu/index.php/Tutorial:Creating_a_Simple_Cytoscape_3_App

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值