データ・モデル戦略の決定

まず、既存のビジネス・データの特性および要件に応じて、model パッケージのどのクラスが適切であるかを決定する必要があります。
データ・モデルの実装には、5 つのレベルがあり、それぞれが特定の状態に適しています。
  1. 既存データを使用しません。
    可能性のある状況が 3 つあります。
    • 表示する既存データがなく、ダイアグラムを最初から作成する場合。
    • 既存データはあるが、それを表示する前に複写したい場合で、メモリー内でどのようにデータが表されるかは問題ではない場合。
    • データを XML ファイルにエクスポート済みで、その XML データを読み込みたい場合。
    このような場合は、デフォルトの SDM モデルIlvDefaultSDMModel の実装を使用します。
    デフォルト・モデルのノードおよびリンクは、クラス IlvDefaultSDMNode および IlvDefaultSDMLink のインスタンスです。これらのオブジェクトには任意のユーザー定義プロパティーのセットがあるので、デフォルト・モデルはあらゆる種類のオブジェクトを表すことができます。
  2. データベース内の既存データを表示します。
    データがデータベースに保管されていて、それを表示したいが、ダイアグラム・コンポーネント内では直接変更したくない場合。
    model パッケージには、この場合の特定の SDM モデル、 IlvJDBCSDMModel が用意されています。このモデルは、JDBC™ API を使用してデータベースにアクセスします。 必要なのは、データベース URL、ノードとリンクを含む表の名前、その他いくつかのパラメーターを使用してモデルを構成することだけです。
  3. 既存の JavaBeans™
    JavaBeans 標準に準拠するクラスに既存のデータを保管している場合。 すなわち、それぞれの Bean プロパティー について、accessor メソッド (get および set) がある場合です。
    この場合、クラス IlvJavaBeanSDMModel を使用します。 このモデルは JavaBeans をグラフ のノードおよびリンクとして使用するので、複写も追加のメモリー消費もありません。 ノードとリンクのプロパティーは、JavaBeans API を使用して読み込みと書き込みが行われます。 必要なのは、グラフを作成する JavaBeans のセットを指定することだけです。 例については、「JavaBeans の例」を参照してください。
  4. JavaBeans ではない既存の Java™ クラス、または Java クラスのない既存データの場合。
    例えば、データを表す Swing JTree モデルの実装が既にあり、ツリー のコンテンツを、データの複写なしに表示したいとします。
    次のいずれかのケースが当てはまります。
    • JavaBeans ではない Java クラスで表される既存データがある場合。
    • まだ Java クラスによってメモリー内に表されていないデータを表示したい場合。
    このような場合には、2 つの方法が考えられます。
    • クラス IlvAbstractSDMModel を使用して、 ご使用のオブジェクトをラップし、 IlvSDMNode および IlvSDMLink インターフェースを実装する新しいオブジェクトに入れます。これには、間接的方法のために余分なオブジェクト割り振りが必要になりますが、ノードとリンク用の事前定義インターフェースを利用することができます。 例については、「JavaBeans 以外の例: 抽象モデルのバリアント」を参照してください。
    • 基本モデル IlvBasicSDMModel をサブクラス化し、オブジェクトをリストして各オブジェクトのプロパティーを取得するメソッドを実装します。 これは、追加作業を必要としますが、拡張可能性があります。すべてのオブジェクトが既に存在する場合は望ましい方法です。 例については、「JavaBeans 以外の例: 基本モデルのバリアント」を参照してください。
以下の表に、このセクションで説明した戦略を要約します。
データ・モデル戦略の要約
データ特性
推奨クラス
新規または XML 由来
データベース (表示のみ)
JavaBeans
Java クラスまたはその他の既存オブジェクト (例、Swing など)
グラフィック・オブジェクトがインタラクティブに移動される場合は、SDM がオブジェクトの新しい位置を x,y プロパティーとしてモデルに保管しようと試みます。 しかし、モデルが x,y プロパティーの設定を拒否する場合があります。例えば、読み取り専用モデルの場合などです。 そうしたケースを処理するために、SDM ライブラリーには、新しいプロパティーをあたかも実際のモデルに保管されているかのように管理できるメタデータ・システムがあります。
メタデータを使用可能にするには、ilog.views.sdm.IlvSDMEngine.setMetadataEnabled(true) を呼び出します。 メタデータは、XML ファイルにのみ保存されます。他のパーシスタント・メカニズムで、メタデータを保存する必要がある場合には、そのメカニズムによって行われる必要があります。
デフォルトのモデルは、メタデータを必要としません。
SDM モデルのクラス関係を示すダイアグラム。
IlvBasicSDMModel は、interface (インターフェース) のステレオタイプを持つ IlvSDMModel を実装します。
これはまた、IlvAbstractSDMModel とそのサブクラス IlvTableSDMModel ならびに IlvDefaultSDMModel の基本クラスであるほかに、IlvJavaBeanSDMModel、IlvMultipleSDMModel とそのサブクラス IlvJDBCSDMModel、および IlvFilterSDMModel とそのサブクラス IlvRDFSDMModel の基本クラスでもあります。
IlvFilterSDMModel には、IlvSDMModel まで戻る片方向の矢印があります。
この関連は、model (モデル) ラベルによってダイアグラムに指定されます。
SDM モデルのクラス関係
4 つのクラスと 4 つのインターフェースの間の SDM モデルの抽象クラス関係のダイアグラム。
IlvAbstractSDMModel は、IlvSDMModel を実装する IlvBasicSDMModel クラスの基本クラスです。
これは IlvMutableSDMNode と IlvMutableSDMLink に依存し、その依存関係は、access (アクセス) のステレオタイプを持ちます。
また、IlvMutableSDMNode および IlvMutableSDMLink を実装する IlvDefaultSDMNode および IlvDefaultSDMLink クラスに依存します。
これらの依存関係は、instantiate (インスタンス化) のステレオタイプを持ちます。
IlvDefaultSDMLink は IlvDefaultSDMNode と IlvMutableSDMLink を拡張し、IlvMutableSDMLink は IlvMutableSDMNode と IlvSDMLink を拡張します。
IlvSDMNode は、IlvMutableSDMNode の基本インターフェースです。
これは、IlvAbstractSDMModel の集約である子を 0 個以上持つことがあります。
IlvSDMLink は IlvSDMNode を拡張しますが、IlvSDMNode を指す片方向の関連 (to および from) も持っています。
SDM モデルの抽象クラス関係