第 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 はリンクを提供しません。