既存のクラス
Atom
、Bond
および Molecule
をダイアグラム・コンポーネントに接続するには、カスタム SDM モデルを作成する必要があります。
既にグラフのノードとリンクを表す JavaBeans™
(Atom
クラスと Bond
クラス) があるため、最も簡単な解決策は、 IlvJavaBeanSDMModel のサブクラスを作成することです。
このサブクラスを、MoleculeModel
と呼びます。以下のコード例は、
MoleculeModel
クラスを示しています。public class MoleculeModel extends IlvJavaBeanSDMModel {
このクラスは、1 つの分子を表しており、次のように Molecule クラスのインスタンスを保管することができます。
private Molecule molecule;
コンストラクターは、分子をパラメーターとして受け取ります。また、コンストラクターは、モデルを初期化して、ノード ID を保持する Bean プロパティーと、リンク終端を保持する Bean プロパティーを認識する必要があります。
以下のコード例は、コンストラクターを示しています。
public MoleculeModel(Molecule molecule) { this.molecule = molecule; setIDProperty("id"); setFromProperty("firstAtom"); setToProperty("secondAtom"); }
setIDProperty
の呼び出しは、スーパークラス
IlvJavaBeanSDMModel に、(Atom
クラスの setId
メソッドと getId
メソッドを介して)
id
プロパティーを使用すればノードの ID を設定および取得できることを伝えます。
setFromProperty
および setToProperty
の呼び出しは、スーパークラスにリンクの 2 つの終了ノードを表すプロパティーを伝えます。
例えば、リンク (Bond
インスタンス) のソース・ノードを取得するために
モデルは Bond
インスタンスに対して getFirstAtom
を呼び出します。モデルは、グラフのすべてのノードとリンク、すなわち、分子の
Atom
オブジェクトと Bond
オブジェクトを取得する必要があります。
以下のコード例は、オブジェクトを取得する
getObjects
メソッドを示しています。
public Enumeration getObjects() { Vector v = new Vector(); Atom[] atoms = molecule.getAtoms(); for (int i = 0; i < atoms.length; i++) { v.add(atoms[i]); } Bond[] bonds = molecule.getBonds(); for (int i = 0; i < bonds.length; i++) { v.add(bonds[i]); } return v.elements(); }
モデルは、ノードとリンクを区別できる必要があります。
以下のコード例は、
Bond
オブジェクトの場合は true
を、Atom
オブジェクトの場合は false
を返す、isLinks
メソッドを示しています。public boolean isLink(Object obj) { return obj instanceof Bond; } }