Jitsi(SIP communicator)カスタムUIプラグインの作成


  • 概要
  •          二次開発、特にオープンソースプロジェクトの二次開発では、いくつかの点が非常に重要だと思います.第一に、修正する前に、このオープンソースプロジェクトがどのように配置され、パッケージ化され、テストされているかを明らかにすることです.これらのものは一般的に煩わしく、問題が発生しやすいですが、海外のオープンソースソフトウェアのドキュメントはそれほど全面的ではないかもしれません.環境は私たちとは異なるかもしれません(一般的にlinux環境が多いです).第二に、修正する前に、まず他の人のソースコードを研究して、他の人があなたにいくつかの二次開発のインタフェースを提供したかどうかを見て、普通はいくつかpluginsなどがあって、直接持ってきて使うことができます;第三に、特に必要でなければ、できるだけ直接他の人のコードを修正しないで、他の人のクラス構造を破壊しないでください(例えば、他の人のバッグの下にクラスを追加します)、このようにして、後でメンテナンスするのが比較的に便利で、その上私达も引き続き公式の新しいバージョンを更新して使うことができます.
            Jitsiというプロジェクトに基づいて二次開発を行い、以前にそのコンパイルパッケージを研究したことがあります.次に、そのアーキテクチャを研究します.まず、このプロジェクトはOSGIベースのプロジェクトで、OSGIの構造は、簡単に言えばOSGIに複数のBundle(モジュールやプラグインにも翻訳できます)を追加します.そのため、私たちはこのアーキテクチャ上で二次開発の方向が明確で、OSGIのモジュール開発を行うことです.それからソースコードを研究して、UIの開発にいくつかの容器とインタフェースを提供して、GUIの開発を便利にすることができて、そしてexamplepluginのBundleを提供して、具体的にはみんなは自分でソースコードを見ることができます.
  • パッケージとクラスを作成し、OSGI環境
  • を構成する
             JItsiプロジェクトのソースディレクトリ(src)にパッケージ:test.plugin.employeebookパッケージを追加し、このパッケージの下にクラスを新規作成します:EmployeebookPluginActivatvator、次のようにします.
    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を実行し、完了したらプロジェクトルートディレクトリの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 containerFilter = new Hashtable();
    		
    	    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ファイルが1つ増えていることを発見しました.それからlibディレクトリの下のfelix.client.run.propertiesファイルを修正して、 reference:file:sc-bundles/plugin-employeebook.jar、Jitsiプロジェクトを再起動すると、プラグインが自動的にロードされていることがわかります.