この章では、さらに複雑なテンプレートの作成方法と使い方を説明します。
第 2 章「テンプレート」で紹介した「Hello, World!」テンプレートを作成した後、必要に応じて、構成可能なプロキシのリストを動的にします。動的なリストがあると、GOPHER、 SOCKS、SSL など、その他のプロトコルを処理するプロキシをユーザーが追加できます。このタスクを行うには、「セット」を使用します。
プロキシページでのセットの使用は、例示のみを目的としています。実装には構成ツリーの元のレイアウトが必要になるため、StarSuite でも OpenOffice.org でもこの例を処理することはできません。
「新規作成...」ボタンをクリックすると、プロキシが追加されます。プロキシで処理する新しいプロトコルの名前を求めるダイアログが表示されます。最初に FTP と指定してから、もう一度「新規作成...」をクリックし、2 番目のプロトコルの名前として HTTP と入力します。表示される 2つのエントリはリンクです。そのリンクの一方をクリックすると、「コンテンツ区画」にコンテンツが読み込まれます。
この機能は「Hello, world!」を変更することによって実装されます。次のように変更して実装します。HTTPProxy、HTTPPort、FTPProxy、FTPPort の 4 つのプロパティーを削除します。そのあと、次のコード例の注釈セクションに示したセット要素を追加します。
<?xml version="1.0" encoding="UTF-8"?> <DOCTYPE apt:template SYSTEM "policytemplate.dtd"> <apt:template> <category apt:name="StarOffice" apt:label="StarSuite"> <category apt:name="Internet" apt:label="インターネット"> <page apt:name="Proxy" apt:label="プロキシ"> <section apt:name="Settings" apt:label="プロキシサーバー"> <property apt:name="ProxyServer" apt:label="プロキシサーバー" apt:dataPath="org.openoffice.Inet/Settings/ooInetProxyType" oor:type="xs:int"> <visual apt:type="radioButtons"/> <constraints> <enumeration oor:value="0" apt:label="なし"/> <enumeration oor:value="2" apt:label="手動"/> </constraints> </property> <property apt:name="NoProxyFor" apt:label="プロキシなし" apt:dataPath="org.openoffice.Inet/Settings/ooInetNoProxy" oor:type="xs:string"/> </section> <!-- Beginning of set element to be added --> <set apt:name="ProxyList" apt:label="プロキシリスト" apt:dataPath="org.openoffice.Inet/Settings/ooInetProxyList"> <page apt:name="ProxyPage" apt:label="プロキシ"> <section apt:name="Proxy" apt:label="ホストおよびポート"> <property apt:name="HostName" apt:label="ホスト名" apt:dataPath="./$queriedId/HostName" oor:type="xs:string"/> <property apt:name="Port" apt:label="ポート" apt:dataPath="./$queriedId/Port" oor:type="xs:string"/> </section> </page> </set> <!-- End of added set element --> </page> </category> </category> </apt:template> |
set 要素の apt:dataPath 属性は、セットがバックエンドに保存されている場所を指しています。set 要素には page 要素が含まれ、page 要素には section 要素、section 要素には property 要素が含まれています。この階層はカテゴリ要素の下の要素の階層と相関関係があります。同じようにページとして描画されますが、セットテーブルのリンクをクリックしてトリガーする点が異なります。
カテゴリページと比較すると、セットページのプロパティー HostName と Port は apt:dataPath に特殊な表記法を使用しています。パスはドットで始まります。これは、要素の階層を上に検索して最初に見つかったパスの定義に相対するパスという意味です。apt:dataPath で最初の親要素はセット要素のため、Desktop Manager は相対パス、たとえば Port プロパティーを org.openoffice.Inet/Settings/ooInetProxyList/$queriedId/Port に翻訳します。このパスのもう 1 つの特徴は $queriedId 変数です。構成リポジトリ内のデータはすべて他と識別できなければならないので、動的データ構造の各要素に一意の名前を付ける必要があります。$queriedId 変数は、「追加」ボタンがクリックされたときに、その名前のユーザーを問い合わせるよう Desktop Manager に指示します。その結果生成されるセット要素は、変数で判別される位置に、指定した名前で格納されます。したがって、セット要素 FTP の場合は、そのポートプロパティーのパスは org.openoffice.Inet/Settings/ooInetProxyList/FTP/Port です。
別の例 : セットを使用して、NoProxyFor プロパティーを表示することもできます。ホスト名の文字列が長くなると、このプロパティーの編集フィールドの使用に問題が生じます。その場合、ユーザーはスクロールして編集フィールドの文字列全体を表示しなければなりません。セットで実装されるプロキシ名のリストによって、この余分のスクロール操作がなくなります。
NoProxyFor プロパティーの文字列の代わりにセットを使用するには、NoProxyFor 要素をそのサブ要素すべてと一緒に削除します。そのあと、次のコード例の注釈セクションに示したセット要素を追加します。
<?xml version="1.0" encoding="UTF-8"?> <DOCTYPE apt:template SYSTEM "policytemplate.dtd"> <apt:template> <category apt:name="StarOffice" apt:label="StarSuite"> <category apt:name="Internet" apt:label="インターネット"> <page apt:name="Proxy" apt:label="プロキシ"> <section apt:name="Settings" apt:label="プロキシサーバー"> <property apt:name="ProxyServer" apt:label="プロキシサーバー" apt:dataPath="org.openoffice.Inet/Settings/ooInetProxyType"" oor:type="xs:int"> <visual apt:type="radioButtons"/> <constraints> <enumeration oor:value="0" apt:label="なし"/> <enumeration oor:value="2" apt:label="手動"/> </constraints> </property> </section> <!-- Beginning of set element to be added --> <set apt:name="NoProxyFor" apt:label="プロキシなし" apt:dataPath="org.openoffice.Inet/Settings/ooInetNoProxySet"> <page apt:name="HostNamePage"> <section apt:name="HostNameSection"> <property apt:name="HostNameProp" apt:dataPath="./$queriedId/HostName" oor:type="xs:string" apt:storeDefault="true"> <visual apt:type="hidden"/> <value>$queriedId</value> </property> </section> </page> </set> <!-- End of set element to be added --> <set apt:name="ProxyList" apt:label="プロキシリスト" apt:dataPath="org.openoffice.Inet/Settings/ooInetProxyList"> <page apt:name="ProxyPage" apt:label="プロキシ"> <section apt:name="Proxy" apt:label="ホストおよびポート"> <property apt:name="HostName" apt:label="ホスト名" apt:dataPath="./$queriedId/HostName" oor:type="xs:string"/> <property apt:name="Port" apt:label="ポート" apt:dataPath="./$queriedId/Port" oor:type="xs:string"/> </section> </page> </set> </page> </category> </category> </apt:template> |
テーブルのエントリはリンクではなく、一価要素の単なるリストを表すようになります。これを行うには、apt:storeDefault 属性と visual 要素を value 要素とあわせて使用します。value 要素は構成設定のデフォルト値を定義できます。デフォルト値は、デフォルトでは構成リポジトリに保存されません。apt:storeDefault 属性は、そのデフォルトを上書きして、バックエンドにデフォルト値を自動的に保存するよう Desktop Manager に指示します。この場合、デフォルト値は新しいセット要素が追加されるときにユーザーがダイアログで入力する値です。visual 要素の apt:type 属性を「hidden (非表示)」と指定すると、そのページの唯一のセクションは空のままになります。セットのページが空の場合は、ページを表示する意味がないので、Desktop Manager はリンクを提供しません。
アクションハンドラは、イベントが発生するときにユーザー定義のアクションを実行するために使用されます。その時点で、使用可能なアクションハンドラは XML ハンドラ 1 つだけです。XML ハンドラはクライアント側のブラウザで JavaScript コードを生成します。
XML ハンドラを使用すると、まだテンプレートに含まれていない StarSuite/ OpenOffice.org 「プロキシ」ダイアログの機能を実装することもできます。「プロキシサーバー」オプションに「なし」の値を選択すると、編集フィールドが無効になります。
次のテンプレートの注釈領域は、「プロキシサーバー」オプションが「手動」か「なし」に設定されている場合に、編集フィールドを有効または無効にするために、元の「Hello, world!」テンプレートに加える必要のある変更を示しています。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE apt:template SYSTEM "policytemplate.dtd"> <apt:template> <category apt:name="StarOffice" apt:label="StarSuite" > <category apt:name="Internet" apt:label="インターネット"> <page apt:name="Proxy" apt:label="プロキシ"> <section apt:name="Settings" apt:label="設定"> <property apt:name="ProxyServer" apt:label="プロキシサーバー" apt:dataPath="org.openoffice.Inet/Settings/ooInetProxyType" oor:type="xs:int" <!-- The following line should be added to original "Hello, world!" template --> apt:xmlHandler="switchState"> <visual apt:type="radioButtons"/> <constraints> <enumeration oor:value="0" apt:label="なし"/> <enumeration oor:value="2" apt:label="手動"/> </constraints> </property> <property apt:name="HTTPProxy" apt:label="Http プロキシ" apt:dataPath="org.openoffice.Inet/Settings/ooInetHTTPProxyName" oor:type="xs:string"/> <property apt:name="HTTPPort" apt:label="Http ポート" apt:dataPath="org.openoffice.Inet/Settings/ooInetHTTPProxyPort" oor:type="xs:int"/> <property apt:name="FTPProxy" apt:label="FTP Proxy" apt:dataPath="org.openoffice.Inet/Settings/ooInetFTPProxyName" oor:type="xs:string"/> <property apt:name="FTPPort" apt:label="FTP Port" apt:dataPath="org.openoffice.Inet/Settings/ooInetFTPProxyPort" oor:type="xs:int"/> <property apt:name="NoProxyFor" apt:label="No Proxy For" apt:dataPath="org.openoffice.Inet/Settings/ooInetNoProxy" oor:type="xs:string"/> </section> <!-- Beginning of section to be added to original "Hello, world!" template --> <xmlHandler apt:name="switchState"> <event apt:type="onChange" /> <action> <choose> <when apt:test="ProxyServer.value=0"> <command>HTTPProxy.enabled=false</command> <command>HTTPPort.enabled=false</command> <command>FTPProxy.enabled=false</command> <command>FTPPort.enabled=false</command> <command>NoProxyFor.enabled=false</command> </when> <otherwise> <command>HTTPProxy.enabled=true</command> <command>HTTPPort.enabled=true</command> <command>FTPProxy.enabled=true</command> <command>FTPPort.enabled=true</command> <command>NoProxyFor.enabled=true</command> </otherwise> </choose> </action> </xmlHandler> <!-- End of section to be added --> </page> </category> </category> </apt:template> |
apt:xmlHandler 属性をプロパティー ProxyServer に追加すると、同じ名前 (ここでは「switchState」) の xmlHandler 要素がそのプロパティに関連付けられます。
アクションハンドラはイベントによってトリガされます。アクションハンドラの対象となるイベントは、イベント要素の apt:type 属性で定義します。この時点で使用できるイベントは、onChange イベントだけです。このイベントは、ユーザーがプロパティーの新しいデータを入力したときに発行されます。前の例では、ProxyServer プロパティーの値が変わったときに XML ハンドラをトリガするためにイベントが使用されています。
アクション要素には、イベント要素で指定されているイベントが発生したときに実行されるアクションが含まれています。前の例で、最初のアクションは ProxyServer プロパティーの値をチェックし、それに応じてほかの編集フィールドの状態を変更することです。これには、choose、when、および otherwise 要素を使用します。ProxyServer プロパティーを「なし」に設定した場合は、すべての編集フィールドが無効になります。ProxyServer プロパティーを「手動」に設定した場合は、編集フィールドが有効になります。
ヘルプにはオンラインヘルプとインラインヘルプの 2 種類があります。
オンラインヘルプは、ユーザーがマストヘッドの「ヘルプ」リンクをクリックしたときに別のウィンドウに表示されるコンテキスト依存の詳しいヘルプです。前回の操作を「コンテンツ区画」で行なった場合は、現在「コンテンツ区画」に表示されているテンプレートで定義されているオンラインヘルプのドキュメントが表示されます。前回の操作をそれ以外の場所で行なった場合は、一般的なオンラインヘルプが表示されます。page 要素の apt:onlineHelp 属性は、HTML ヘルプファイルをテンプレートに結合するために使用されます。この場合、たとえば次のように、ファイルの完全修飾パスとそのベース名を指定する必要があります。
<page apt:name="Proxy"> apt:label="プロキシ" <apt:onlineHelp="/StarSuite/Internet/proxy">
これは ./web/StarSuite/Internet/proxy.html を参照します。
HTML ファイルでは絶対パスと相対パスを使用できます。HTML ファイルと一緒に images というディレクトリのイメージを配置する場合は、HTML ファイルで次のいずれかの注釈を使用できます。
<img src="/StarSuite/Internet/images/image.gif">
<img src="./images/image.gif">
インラインヘルプは、カテゴリ、ページ、プロパティーの各ページに補足情報を提供する短いテキストです。インラインヘルプは category 要素では「コメント」列、page 要素ではページタイトルの下、 property 要素では構成設定の下に表示されます。ヘルプテキストは、この category、 page、property の 3 要素のいずれかの apt:inlineHelp 属性によって指定されます。次に例を示します。
<property apt:name="HTTPProxy" apt:label="Http プロキシ" apt:inlineHelp="Specify no proxy (None) or a manually defined proxy (manual)." apt:dataPath="org.openoffice.Inet/Settings/ooInetHTTPProxyName" oor:type="xs:string" </property>
ローカライズを円滑にするため、ラベルにリソースキーを与えておきます。