Java Desktop System Configuration Manager Release 1.1 開発者ガイド

第 2 章 テンプレート

Configuration Manager のテンプレートは、設定リポジトリ内のあらゆる設定オプションの場所に関する情報を提供します。また、それらが Configuration Manager の GUI で視覚的に表現される方法についても情報を提供します。テンプレートは文書型定義 (DTD) ファイルに準拠する XML ファイルです。


ヒント –

XML を使ったことがない場合は、次のリンクに簡単な解説があります。http://java.sun.com/webservices/docs/1.0/tutorial/doc/IntroXML.html


XML を使用すると、GUI の描画エンジン、オペレーティングシステム、およびプログラミング言語に依存しない定義を作成して、設定オプションを管理できます。GUI は、テンプレートで指定する要素の意味の依存関係に基づいて描画されます。Configuration Manager のテンプレート形式は一般的なものであるため、GUI のあらゆる設計要求のソリューションになるわけではありません。たとえば、画面での正確な位置決めはサポートされていません。

この章では、テンプレートの典型的な作成過程について説明します。まず、デスクトップアプリケーションの既存の設定ダイアログから始めて、そのダイアログの単純なテンプレートを作成する方法を学びます。また、そのファイルを Configuration Manager で使用可能にして、「コンテンツ区画」に表示する方法も学びます。

“Hello world!” テンプレート

Procedure“Hello world!” テンプレートの作成

始める前に

たとえば、StarSuite のプロキシ設定オプションを Configuration Manager で使用したいとします。

Options-Internet-Proxy

次のテンプレートは GUI の最初の実装を提供します。


<?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="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 プロキシ"
                    apt:dataPath="org.openoffice.Inet/Settings/ooInetFTPProxyName"
                    oor:type="xs:string"/>
          <property apt:name="FTPPort" apt:label="Ftp ポート"
                    apt:dataPath="org.openoffice.Inet/Settings/ooInetFTPProxyPort"
                    oor:type="xs:int"/>
          <property apt:name="NoProxyFor" apt:label="プロキシなし"
                    apt:dataPath="org.openoffice.Inet/Settings/ooInetNoProxy"
                    oor:type="xs:string"/>
        </section>
      </page>
    </category>
  </category>
</apt:template>

以下は、新しいテンプレートを Configuration Manager に通知するために必要な手順です。

手順
  1. Configuration Manager をインストールしたマシンに root としてログインします。

  2. /usr/share/webconsole/apoc/packagesHelloWorld/templates/StarSuite/Internet/Proxy というディレクトリを作成します。

  3. 先ほどリストにした XML テンプレートの内容で proxy.xml というファイルを作成します。ファイルを Proxy ディレクトリにコピーします。

  4. ユーザー “noaccess” に Proxy ディレクトリへの読み取り/実行アクセス権を与えます。

  5. ユーザー "noaccess" に proxy.xml ファイルへの読み取りアクセス権を与えます。

  6. /usr/sbin/smreg add -a /usr/share/webconsole/apoc を実行します。

  7. /usr/sbin/smcwebserver restart コマンドを使用して Web サーバーを再起動します。

    Configuration Manager にログインすると、「StarSuite 7」という新しいトップレベルのカテゴリが表示されます。そのカテゴリを下に参照すると、作成したテンプレートで定義した「プロキシ」ページが表示されます。

    図 2–1 プロキシページ

    プロキシページ

“Hello world!” テンプレートの説明

テンプレートの最初の 2 行は XML の初期定義です。3 行目には apt:template というテンプレートのルート要素があり、これにテンプレートファイルで作成したポリシーの定義がすべて含まれています。

次の 4 行には、テンプレートの主要構成要素が含まれています。 apt:category の要素をネストして、設定ポリシーツリーのノードを作成します。設定ポリシーツリーは、Configuration Managerの GUI にポリシーの階層を視覚的に表します (「ツリー」を参照)。apt:name 属性を指定すると、属性を使用してその要素が一意に示されます。apt:label 属性は、表示されるテキストを GUI のカテゴリとして指定します。 apt:label 属性を指定しなければ、表示されるテキストは apt:name 属性によって定義されます。したがって、apt:label 要素は必ず指定してください。この要素はローカライズにも使用されます。詳細は、「ローカライズ」を参照してください。

すべての apt:category 要素には、1 つまたは複数の apt:category 要素または apt:page 要素が含まれている必要があります。 apt:page 要素は設定ポリシーツリーでリーフを表します。先ほど示した “プロキシ” ページはリーフの一例です。Configuration Manager ではページが単一の HTML ページとして表されるので、これを少なくとも 1 つの apt:section に分割する必要があります。apt:section 要素では、その子要素のすべてが見出し付きのテーブルで表されます。複数のセクションを使用すると、1 ページで設定をグループに分けることができます。

apt:section 要素には、設定オプションを表す apt:property 要素が含まれています。「Hello, world!」テンプレートには、ProxyServerHTTPProxy HTTPPortFTPProxy FTPPortNoProxyFor の 6 つのプロパティがあり、各プロパティに apt:dataPath 属性が含まれています。これは必要な属性で、設定ツリーのデータの場所を指定します。設定ツリーは、設定リポジトリに保存されている設定オプションの階層を表します。詳細は、「ツリー」 を参照してください。

oor:type 属性は、設定リポジトリ内の設定オプションのデータ型を定義します。ProxyServer HTTPPort、および FTPPortxs:int 型で、その他のプロパティは xs:string 型です。整数型と文字列型は、デフォルトでは編集フィールドとして表示されます。

visual 要素は、Configuration Managerにプロパティの表示方法を指示するために使用します。この要素を指定しなければ、プロパティ ProxyServer は、ラジオボタンのグループではなく編集フィールドを使って描画されます。


ヒント –

Configuration Manager の GUI は、ドロップダウンリストを使用する代わりに、整数値 2 候補をラジオボタンのグループとして表す点で、元の StarSuite の GUI と異なります。2 つの値を視覚化するには、ドロップダウンリストよりもラジオボタンを使用した方が操作性が向上します。たとえば、値を変更するために必要なクリックが 1 回か 2 回かの違いがあります。


constraints 要素は enumeration サブ要素と併せて、描画するラジオボタンの数と、選択されるラジオボタンに応じてバックエンドに保存する整数値を指定するために使用します。apt:label 属性は、GUI に表示される各ラジオボタンの 文字列を指定します。

ローカライズ

テンプレートで定義した文字列は、すべてローカライズすることが重要です。ローカライズした文字列はリソースファイルから取得されます。resImportapt:template 要素のサブ要素で、1 つまたは複数のリソースファイルをテンプレートにバインドするために使用されます。次の例のように、リソースの完全修飾パスとそのベース名を指定する必要があります。

<apt:template>
<resImport
  apt:packagePath="com.sun.star.apoc.policies.resource.starsuite"/>

使用するリソースキーを定義するには、キーの名前を apt:label 属性の値として提供します。次はその例です。

<property apt:name="HTTPProxy" apt:label="SO.internet.proxy.name"
          apt:dataPath="org.openoffice.Inet/Settings/ooInetHTTPProxyName"
          oor:type="xs:string">

Configuration Manager は、テンプレートに結合されているすべてのリソースから、apt:label 属性で指定されているキーを最初に探します。キーが見つからない場合は、apt:label 属性が表示されます。キーが見つかった場合は、リソースファイルから該当する値が取り出されて表示されます。

文字列の取得元となるリソースファイルは、Java に定義されているメカニズムと同様の方法で決定されます。すなわち、resImport 要素で指定されているパッケージのパスと、Web ブラウザで指定されている言語によって、選択されるリソースファイルが決まります。たとえば、ブラウザで選択されている Web ページの言語が en_US で、resImport 要素で指定されているパッケージのパスが com.sun.star.apoc.policies.resource.starsuite とすると、Configuration Manager は以下のファイルの順に検索してリソースキーを探します。

./res/com/sun/star/apoc/policies/resource/starsuite_en_US.properties

./res/com/sun/star/apoc/policies/resource/starsuite_en.properties

./res/com/sun/star/apoc/policies/resource/starsuite.properties

Configuration Manager では、ローカルのポリシーパッケージにあるファイルが先に検索されます ( 「ポリシーパッケージ形式」を参照)。見つからない場合は、その他のすべてのパッケージが検索されます。この方法を用いると、ほかのパッケージですでにローカライズされている文字列、特にカテゴリ名を再利用できます。

リソース検索の詳細は、Java ResourceBundle の API 仕様を参照してください。


ヒント –

Sun Web Console のアプリケーションはすべて、ログイン中に言語を判別します。アプリケーションに別の言語を使用させるには、いったんログアウトする必要があります。そのあとブラウザで Web ページの言語を変更してから、もう一度ログインします。


オンラインヘルプもローカライズする必要があります。Configuration Manager は、リソースファイルと同じルールに従って HTML ファイルを選択しますが、例外として、ヘルプファイルの場合はローカルのポリシーパッケージのみが検索されます。たとえば、HTML ファイルのパスとして /StarSuite/Internet/Proxy、ブラウザで en_US を指定すると、Configuration Manager はオンラインヘルプファイル ./web/StarSuite/Internet/Proxy_en_US.html を表示します。

ポリシーパッケージ形式

テンプレートは配布コンテナに埋め込まれます。これは JavaTM プログラミング言語の「パッケージ」に似ています。パッケージには、GUI ローカライズ用のリソースファイル、オンラインヘルプ用の HTML ファイル、独自のサポートファイルなど、オプションのファイルも含めることができます。

Configuration Manager はテンプレートや必要なオプションファイルにアクセスするために、特殊な形式のディレクトリ名とファイル名を使用しています。このディレクトリ名とファイル名の構造を 「ポリシーパッケージ形式」と呼びます。

ポリシーパッケージはすべて /usr/share/webconsole/apoc/packages ディレクトリ下の一意のサブディレクトリに格納されます。たとえば「Hello, world!」の場合は、HelloWorld を選択した結果、/usr/share/webconsole/apoc/packages/HelloWorld ディレクトリになります。


ヒント –

パッケージをインストールするソフトウェアの製品名と製品バージョンを使用してください。この方法で名前を付けると、パッケージディレクトリが他と重複することがありません。たとえば、HelloWorld よりも HelloWorld3.1 の方が適切な名前です。


特定のパッケージディレクトリ (packages ディレクトリと混乱しないようにしてください) の下に、以下のサブディレクトリを作成できます。

templates 

templates サブディレクトリには、ポリシーパッケージのテンプレートがすべて含まれていなければなりません。接尾辞が .xml のファイルはテンプレートと見なされます。ファイル名は page 要素の apt:name 属性の値と相関する必要があります。テンプレートは、そのカテゴリ階層で指定したのと同じディレクトリ階層にある限り、どのように分類してもかまいません。

classes 

classes サブディレクトリには、ポリシーパッケージのクラスファイルがすべて含まれていなければなりません。接尾辞が .class のファイルは Java クラスファイルと見なされます。ファイルの名前は、そのファイルで定義されているクラスの名前と相関する必要があります。ファイルは、そのパッケージ階層で指定したのと同じディレクトリ階層になければなりません。

web 

web サブディレクトリには、ポリシーパッケージの HTML ヘルプファイルすべてと、ポリシーパッケージが参照しているイメージが含まれていなければなりません。接尾辞が .html のファイルは HTML ファイルと見なされます。HTML ファイルの名前は、HTML ファイルを使用しているテンプレートの名前と相関付けてください。HTML ファイルは、HTML ファイルを使用しているテンプレートと同じディレクトリ階層に置きます。

res 

res サブディレクトリには、ポリシーパッケージのリソースファイルがすべて含まれていなければなりません。接尾辞が .properties のファイルは Java 対応のリソースファイルと見なされます。リソースファイルの名前とパスは、それを使用するテンプレートの名前とパスに相関付けることができます。また、リソースファイルを 1 つ含んだディレクトリ階層 1 つをすべてのテンプレートに指定することもできます。

lib 

lib サブディレクトリには、ポリシーパッケージのライブラリファイルがすべて含まれていなければなりません。接尾辞が .jar のファイルはライブラリと見なされます。ライブラリは Configuration Manager のクラスローダによって自動的に読み込まれます。ライブラリの内容にアクセスするには、 jar ファイルのルートディレクトリを絶対パスのルートディレクトリとして使用します。 ライブラリファイルの典型的な用途は、クラスファイルやリソースファイルのコンテナとしての役割、および通常は classes ディレクトリと res ディレクトリ内にあるディレクトリのコンテナとしての役割です。

その他のファイルタイプは Configuration Manager にとって特別な意味はありません。ただし、クラスファイルや HTML ファイルで必要になる場合は、classes ディレクトリまたは web ディレクトリに入れることができます。

図 2–2 では、完成した HelloWorld パッケージを使用してパッケージ形式をさらに詳しく説明しています。

図 2–2 HelloWorld パッケージ

HelloWorld パッケージ

パッケージの配布は、この章で先に定義したルールに従う限り、パッケージの開発者が自由に決めることができます。ファイル一式に正しい場所へのコピー手順を添えて配布したり、Zip ファイルを提供したり、SolarisTM の場合は pkg ファイル、Linux の場合は .rpm ファイルなど、オペレーティングシステムが提供する配布メカニズムを使用することもできます。それぞれのオペレーティングシステムが提供しているソフトウェアの保守と削除の機能を強化して、エンドユーザーによりよいサポートを提供できる最後の方法をお勧めします。