Jitsi(SIP communicator)创建自定义UI插件

  • 概述
         在进行二次开发,特别是开源项目的二次开发中,有那么几点我觉得是非常重要的,第一是在修改之前要先搞清楚这个开源项目如何进行部署、打包和测试,这些东西一般来说比较烦,容易产生问题,而国外开源软件的文档可能不是那么全面,环境和我们也可能不同(一般是linux环境居多);第二是在修改之前,先研究一下别人的源码,看看别人是不是给你提供了一些二次开发的接口,一般都会有一些plugins之类的,可以直接拿过来用;第三也是最重要的,如果不是特别需要,尽量不要直接修改别人的代码,也不要破坏别人的类结构(比如在别人的包下面加类),这样做,以后维护起来比较方便,而且我们也可以继续更新使用官方的新版本。
        在Jitsi这个项目的基础上进行二次开发,之前已经研究过它的编译打包,下面我们要研究一下它的架构,首先这个项目是一个基于OSGI的项目,OSGI的结构,简单来说就是一个OSGI加多个Bundle(也可翻译为模块或者插件),因此我们在这个架构上进行二次开发方向比较明确,就是进行OSGI的模块开发;然后我们研究一下源码发现它对于UI开发提供了一些容器和接口,可以方便我们进行GUI开发,并且给出了一个exampleplugin的Bundle,具体大家可以自行查看源码。
  • 创建包和类,配置OSGI环境
         在JItsi项目的源码目录下(src)添加包:test.plugin.employeebook包,在这个包下新建一个类:EmployeebookPluginActivator,如下
public class EmployeebookPluginActivator implements BundleActivator{

	@Override
	public void start(BundleContext arg0) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void stop(BundleContext arg0) throws Exception {
		// TODO Auto-generated method stub
		
	}
	
}
         在同样的包下新建一个名为employeebookplugin.manifest.mf的文件,内容如下:
Bundle-Activator: test.plugin.employeebook.EmployeebookPluginActivator
Bundle-Name: EmployeeBook plugin
Bundle-Description: A plugin used to show employee book
Bundle-Vendor: 
Bundle-Version: 0.0.1
Import-Package: org.osgi.framework

          修改项目根目录下的build.xml文件,添加一个ant target如下:
	<target name="bundle-plugin-employeebook" depends="compile">
	    <jar compress="false" destfile="${bundles.dest}/plugin-employeebook.jar"
	            manifest="${src}/test/plugin/employeebook/employeebookplugin.manifest.mf">
	            <zipfileset dir="${dest}/test/plugin/employeebook"
	                prefix="test/plugin/employeebook" />
	    </jar>
	</target>
          然后运行这个target,完成后在项目根目录下的sc-bundles目录下出现plugin-employeebook.jar,然后修改lib目录下的felix.client.run.properties文件,设置felix框架自动加载这个bundle,然后运行整个项目,在选项》插件下找到这个插件,说明插件部署成功了。
  • 应用JItsi的UI加载机制
public class EmployeebookPluginActivator implements BundleActivator{
	
	@Override
	public void start(BundleContext arg0) throws Exception {
	    // TODO Auto-generated method stub
	    //在主窗口中加如一个TAB窗口,这个EmployeebookPanel 是一个JPanel 
	    EmployeebookPanel employeePanel = new EmployeebookPanel(Container.CONTAINER_MAIN_TABBED_PANE);
		
	    Hashtable<String, String> containerFilter = new Hashtable<String, String>();
		
	    containerFilter.put(
            Container.CONTAINER_ID,
            Container.CONTAINER_MAIN_TABBED_PANE.getID());
	    arg0.registerService(PluginComponent.class.getName(),employeePanel,containerFilter);
	    //以上应用了Jitsi的插件UI管理机制,其中Container下有许多常量,代表着不同的容器,
            //通过这些容器我们可以方便地把需要的组件添加到菜单栏、状态栏都位置
       }
       @Override
       public void stop(BundleContext arg0) throws Exception { 
            // TODO Auto-generated method stub
       }
}


  • 配置OSGI框架自启动我们的插件
        这一步我们按照OSGI的标准来就可以了,我们运行上面的Ant Target,发现项目sc-bundles目录下多出一个plugin-employeebook.jar文件,然后我们修改lib目录下的felix.client.run.properties文件,加入\ reference:file:sc-bundles/plugin-employeebook.jar,重启Jitsi项目,我们会发现插件被自动加载进来了。



你可能感兴趣的:(UI,exception,osgi,plugins,reference,osgi框架)