Sun Desktop Manager 1.0 開発者ガイド

第 2 章 テンプレート

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

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

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

「Hello world!」テンプレート

Procedure「Hello world!」テンプレートの作成

始める前に

たとえば、StarSuite のプロキシ構成設定を Desktop Manager で使用したいとします。

Options-Internet-Proxy

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


<?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="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>

新しいテンプレートを Desktop Manager に通知するには、次の手順が必要です。

手順
  1. Desktop 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 サーバーを再起動します。

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

「Hello world!」テンプレートの検証

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

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

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

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

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

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


ヒント –

Desktop 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">

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

文字列の取得元となるリソースファイルは、Java に定義されているメカニズムと同様の方法で決定されます。すなわち、resImport 要素で指定されているパッケージのパスと、Web ブラウザで指定されている言語によって、選択されるリソースファイルが決まります。たとえば、ブラウザで選択されている Web ページの言語が en_US で、resImport 要素で指定されているパッケージのパスが com.sun.star.apoc.policies.resource.starsuite とすると、Desktop 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

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

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


ヒント –

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


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

プロファイルパッケージ形式

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

Desktop 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 のファイルはライブラリと見なされます。ライブラリは Desktop Manager のクラスローダによって自動的に読み込まれます。ライブラリの内容にアクセスするには、 jar ファイルのルートディレクトリを絶対パスのルートディレクトリとして使用します。ライブラリファイルの典型的な用途は、クラスファイルやリソースファイルのコンテナとしての役割、および通常は classes ディレクトリと res ディレクトリ内にあるディレクトリのコンテナとしての役割です。

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

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

図 2–1 HelloWorld パッケージ

HelloWorld パッケージ

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