The Molecule model

To connect the existing classes Atom , Bond and Molecule to the diagram component, you need to write a custom SDM model. Since there are already JavaBeans™ that represent the nodes and links of the graph (the Atom and Bond classes), the easiest solution is to write a subclass of IlvJavaBeanSDMModel. This subclass is called MoleculeModel .
The following code example shows the MoleculeModel class.
public class MoleculeModel extends IlvJavaBeanSDMModel
{
This class represents a molecule, so you can store an instance of the Molecule class as follows:
 private Molecule molecule;
The constructor takes the molecule as a parameter. The constructor must also initialize the model to know which bean property holds the node identifier and which bean properties hold the link ends.
The following code example shows the constructor.
  public MoleculeModel(Molecule molecule)
  {
    this.molecule = molecule;
    setIDProperty("id");
    setFromProperty("firstAtom");
    setToProperty("secondAtom");
  }
The call to setIDProperty tells the superclass IlvJavaBeanSDMModel that it can use the id property (through the setId and getId methods of the Atom class) to set and retrieve the identifier of a node.
The calls to setFromProperty and setToProperty tell the superclass which properties represent the two end nodes of a link. For example, to retrieve the source node of a link (a Bond instance), the model will call getFirstAtom on the Bond instance.
The model needs to retrieve all the nodes and links of the graph, that is the Atom and Bond objects of the molecule.
The following code example shows the getObjects method, which retrieves the objects.
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();
  }
The model must be able to differentiate between nodes and links.
The following code example shows the isLinks method, which returns true for Bond objects and false for Atom objects.
public boolean isLink(Object obj)
  {
    return obj instanceof Bond;
  }
}