Molecule モデル

既存のクラス AtomBond および 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;
  }
}