メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年12月27日土曜日

[work][OpenOffice][SDK][java] Professional UNO読み中(8) Services

http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Services
を読む。

Service
interfaceは多重継承できる。
実装する人がいらいらするんで、Serviceはインタフェースで分類されたメソッドコールを通して利用するらしい?

Referencing Interfaces
サービスの定義中のインタフェースへのリファレンスはサービスがインタフェースを実装しなければならないことをあらわす。
[optional]フラグが付いている場合には、可能であれば実装する。

で、その例。


service TextDocument
{
...

interface com::sun::star::text::XTextDocument;
interface com::sun::star::util::XSearchable;
interface com::sun::star::util::XRefreshable;
[optional] interface com::sun::star::text::XFootnotesSupplier;
[optional] interface com::sun::star::text::XEndnotesSupplier;

...
};
 

XTextDocument、XSearchable、XRefreshableは実装しなきゃならない。
で、XFootnotesSupplierとXEndnotesSupplierは「可能であれば」実装する。


Service Constructors

新スタイルサービスではコンストラクタも記述できる。
戻り値は書かない。

でその例。

service SomeService: XSomeInterface {
create1();
create2([in] long arg1, [in] string arg2);
create3([in] any... rest);
};
 


create1、create2、create3がコンストラクタ。

raises (Exception1, ...)
 

ってな感じで書いておけば、例外も記述できる。

典型的なサービスのコンストラクタは"create"だそうで。


Including Properties

Propertyというのはオブジェクトのデータ。
一般的なインタフェース、getPropertyValue()とsetPropertyValue()を通して
提供される。

で、プロパティ定義の例

service TextContent
{
interface com::sun::star::text::XTextContent;
[optional, property] com::sun::star::text::TextContentAnchorType AnchorType;
[optional, readonly, property] sequence AnchorTypes;
[optional, property] com::sun::star::text::WrapTextMode TextWrap;
};

TextContetサービスは、1つのインタフェースと、3つのオプショナルなプロパティを持つ。

プロパティを記述するときに使えるフラグは以下のとおり。
[optional]
実装時に必ずしも実装しなくても良いプロパティ。
[readonly]

プロパティの値はcom.sun.star.beans.XPropertySetで値を変えることができない。
[bound]

プロパティ値の変更はXPropertyChangeListenerへ伝達される。
ただし、com.sun.star.beans.XPropertySetで何か登録されてれば。

[constrained]

そのプロパティ値が変更される前にイベント起こす。
そのイベントリスナーは値の変更を拒否できる。
[maybeambiguous]

場合によりプロパティ値を決められないもの?
[maybedefault]

オブジェクトそのものの代わりにスタイルシートとか環境とかに保存されるかもしれない?
[maybevoid]

プロパティタイプの範囲によっては空になりうる。データベースのnull値に似てる。
[removable]

削除可能。ダイナミックプロパティなるものに使われる。
[transient]

オブジェクトがシリアライズされてればプロパティは保存されない?



Referencing other Services

old-styleサービスは他のold-styleサービスを含めることができる。
[optional]も指定可能。

service Paragraph
{
service com::sun::star::text::TextContent;
[optional] service com::sun::star::text::TextTable;
[optional] service com::sun::star::style::ParagraphProperties;
[optional] service com::sun::star::style::CharacterProperties;
[optional] service com::sun::star::style::CharacterPropertiesAsian;
[optional] service com::sun::star::style::CharacterPropertiesComplex;

...
};
 


ふーん。


Service Implementations in Components
コンポーネントは、共有ライブラリかJavaの1つ以上のサービスのある言語バインディング実装を含むアーカイブ。
UNOランタイムに登録しなきゃならない。

ふーーん。
.

0 コメント: