第 2 章「テンプレート」で紹介した「Hello, World!」テンプレートを作成した後、必要に応じて、設定可能なプロキシのリストを動的にします。動的なリストがあると、GOPHER、 SOCKS、SSL など、その他のプロトコルを処理するプロキシをユーザーが追加できます。このタスクを行うには、「セット」を使用します。
プロキシページでのセットの使用は、例示のみを目的としています。実装には設定ツリーの元のレイアウトが必要になるため、StarSuite でも OpenOffice.org でもこの例を処理することはできません。
図 3–1 は、決まった数の編集フィールドを使用する代わりに、プロキシの動的なリストを表しています。
「新規作成...」ボタンをクリックすると、プロキシが追加されます。 プロキシで処理する新しいプロトコルの名前を求めるダイアログが表示されます。最初に FTP と指定してから、もう一度「New」をクリックし、2 番目のプロトコルの名前として HTTP と入力します。結果は図 3–1 のようになります。この 2 つのエントリはリンクです。リンクの 1 つをクリックすると、図 3–2 のような内容の「コンテンツ区画」が読み込まれます。
前の 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="StarSuite" 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 で最初の親要素はセット要素のため、Configuration Manager は相対パス、たとえば Port プロパティを org.openoffice.Inet/Settings/ooInetProxyList/$queriedId/Port に翻訳します。このパスのもう 1 つの特徴は $queriedId 変数です。設定リポジトリ内のデータはすべて他と識別できなければならないので、動的データ構造の各要素に一意の名前を付ける必要があります。$queriedId 変数は、「追加」ボタンがクリックされたときに、その名前のユーザーを問い合わせるよう Configuration 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="StarSuite" 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 属性は、そのデフォルトを上書きして、バックエンドにデフォルト値を自動的に保存するよう Configuration Manager に指示します。この場合、デフォルト値は新しいセット要素が追加されるときにユーザーがダイアログで入力する値です。visual 要素の apt:type 属性を「hidden (非表示)」と指定すると、そのページの唯一のセクションは空のままになります。セットのページが空の場合は、ページを表示する意味がないので、Configuration Manager はリンクを提供しません。