前の関連記事:LibreOffice5(15)Javaの例をデバッグ情報を追加してビルドする
com.sun.star.task.XJobExecutorインターフェイスを使った他の例を探しているとOOobbs3/60 - ...?
を見つけました。「ツール - カスタマイズ - イベントにマクロを登録せずに実行したい」を実現するものです。早速試してみたのですがあれこれがんばっても動かないのでまずデベロッパーガイドのJavaの例をやります。
デベロッパーガイドのJavaの例: Jobs Addon Exampleのインストールと実行
Writing UNO components examplesにあるJobs Addon ExampleのAsyncJobというのがデベロッパーガイドのJavaの例になります。
イベント駆動とメニュー作成についての例になります。
linuxBean14.04(83)LibreOfiice5.0.2のインストールでビルドしたログDevelopersGuide_Components_Addons_JobsAddon.logを読んでみるとbinフォルダにあるAsyncJob.oxtが完成品とわかりました。
ということでこの拡張機能AsyncJob.oxtを~/libreoffice5.0_sdk/LINUXexample.out/binからLibreOfficeの拡張機能マネージャーに登録しました。
LibreOfficeを再起動します。
AsyncJob.oxtを登録して1回めの起動時にこのようなメッセージボックスがでてきます。
これは呼び出されたXAsyncJobインターフェイスのexecuteAsync()メソッドの引数で受け取った情報を表示しています。
JobContigにも実は1つアイテムがあるのですがJobs.xcuの設定の問題で0アイテムになっています。
これはLibreOffice5(17)イベント駆動する拡張機能のJavaの例:AsyncJob.oxt その2で修正します。
さらにメニューのツール、にアドオンという項目が追加されています。
AsyncJob(ALIAS)を実行した場合。
(最後のDynamicDataのアイテムはメッセージボックスの行が足りなくて切れています。)
AsyncJob(EVENT)を実行した場合。
AsyncJob(SERVICE)を実行した場合。
AsyncJobはjobが引数を受け取って環境を取得してjobを実行する例なのでそれぞれのメッセージボックスは取得した情報を表示していることになります。
AsyncJob.oxtにはJobs.xcuとAddons.xcuが同梱されていて、それぞれjobの設定、メニューの設定の例になります。
Jobs - Apache OpenOffice Wiki、4.7.2 ジョブがjobの解説になります。
Integrating Components into OpenOffice.org - Apache OpenOffice Wiki、4.7 OpenOffice.org にコンポーネントを統合にjobとはなにかの概説があります。
うーん、なかなか理解が難しいですが、プロトコールハンドラーがメニューからディスパッチフレームワークを使って受け取ったコマンドURLからコマンドを発するところまで担当し、ジョブがそのコマンドの実際の実装を割り当てて作動させるということでしょうか。
ディスパッチフレームワークについてはLibreOffice(33)デベロッパーガイド5:ディスパッチフレームワークでちょっとやりました。
このあたりのことは日本語のガイドの方を読んでも私にはかなり理解が難しいですので、実例を動かしてみるしかありません。
NetBeans8.0.2でAsyncJob.javaのプロジェクトを作成する
linuxBean14.04(25)NetBeans8とLibreOffice5のインストールのNetBeans8.0.2を使ってリモートデバッグしてAsyncJob.oxtが何をしているのかAsyncJob.javaにそって1行ずつ確認します。
まずLibreOffice(62)Javaの例をNetBeansでブレークポイントを設定するの通りAsyncJob.javaをNetBeansのプロジェクトに読み込みます。
ファイル→新規プロジェクト。
「既存のソースを使用するJavaプロジェクト」を選択して「次>」をクリック。
プロジェクト名はJobsAddonにしました。
ソースパッケージフォルダは/opt/libreoffice5.0/sdk/examples/DevelopersGuide/Components/Addons/JobsAddonを選択します。
含めるファイルには**javaを入力して「終了」します。
LibreOffice5.0用のライブラリを作成します。
NetBeansのメニューのツール→ライブラリ。
「新規ライブラリ」ボタンをクリックしてLibreOffice5.0というライブラリを作成しクラスパスに上図の5つのjarファイルを追加します。
さらにJavadocタブで/opt/libreoffice5.0/sdk/docs/java/refフォルダを追加します。
これによってcom.sun.star.comp.helper、com.sun.star.lib.uno.helper、com.sun.star.lib.unoloader、com.sun.star.lib.util、com.sun.star.unoのパッケージについてのJavadocがNetBeansで表示されるようになります。
プロジェクトエクスプローラーでJobsAddonのプロジェクトのライブラリを右クリックして「ライブラリの追加」で先ほど作成したLibreOffice5.0ライブラリを追加します。
これでプロジェクトの作成完了です。
NetBeans8.0.2でLibreOffice5.0の拡張機能をリモートデバッグする
今度はデバッガをアタッチします。
LibreOfficeはlinuxBean14.04(25)NetBeans8とLibreOffice5のインストールのようにJava起動パラメーターを設定しておきます。
まずLibreOfficeでJavaのマクロ(WriterのHelloWorldで可)を実行してJREは起動しておきます。
int c = lArgs.length; for (int i=0; i<c; ++i) { if (lArgs[i].Name.equals("Config"))NetBeansのエディタでAsycJob.javaの106行目の行頭クリックしてブレークポイントを設定しました。
メニューのデバッグ→デバッガのアタッチ。
出力のデバッガコンソールで拒否されました、とでてこなければうまくアタッチできています。
LibreOfficeのメニューからツール→アドオン→AsyncJob(ALIAS)。
するとNetBeansに切り替わってブレークポイントを設定したところで止まります。
「変数」タブで変数の値が確認できます。
変数の型も確認できます。
デバッグのツールバーのステップオーバーボタンをクリックしていくと次の行が実行されます。
メソッドの中に入りたいときはメソッドを呼び出している行でステップインボタンをクリックします。
参考にしたサイト
OOobbs3/60 - ...?
イベントからマクロを駆動するPythonの拡張機能の例。
Writing UNO components examples
今回このJobs Addon ExampleのAsyncJobという例をやりました。
LibreOffice: Main Page
LibreOfficeのAPIリファレンス。
UNO コンポーネントを書く
日本語デベロッパーガイドのjobの解説。
0 件のコメント:
コメントを投稿