ビュー・インタラクターのサブクラス化

IlvMakeSDMNodeInteractor および IlvMakeSDMLinkInteractor をサブクラス化して、どんな場合に 2 つのノード間にリンクが作成されるかを制御したり、リンクやノードが作成されたときにカスタム・アクションを実行したりすることができます。
例えば、ある種のノード間にのみリンクを作成するには、IlvMakeSDMLinkInteractor をサブクラス化し、acceptOrigin および acceptDestination メソッドをオーバーライドすることができます (次のコード例を参照)。
IlvMakeSDMLinkInteractor のサブクラス化
public class ValidatingLinkInteractor extends IlvMakeSDMLinkInteractor
{

  protected boolean acceptOrigin(IlvPoint p, IlvGraphic fromNode) {
    Object o = getEngine().getObject(fromNode);
    if("false".equals(getEngine().getModel().getObjectProperty(o, "okForOrigin")))
      return false;
      return super.acceptOrigin(p, fromNode);
  }

  protected boolean acceptDestination(IlvPoint p, IlvGraphic toNode) {
    Object o = getEngine().getObject(toNode);
    if("false".equals(getEngine().getModel().getObjectProperty(o, "okForDestination")))
      return false;
      return super.acceptDestination(p, toNode);
  }
}
この例では、プロパティー "okForOrigin" が false であるノードはリンクの起点として受け入れられず、プロパティー "okForDestination" が false であるノードはリンクの宛先として受け入れられません。
また、setNodeProperties または setLinkProperties をオーバーライドすることによって、ノードまたはリンクが作成されたときにカスタム・プロパティーを設定することができます。 例えば、あるノードの作成時にそのノードの "name" プロパティーを入力するようユーザーに促すには、次のように、IlvMakeSDMNodeInteractor をサブクラス化し、setNodePorperties をオーバーライドすることができます。
IlvMakeSDMNodeInteractor のサブクラス化
public class PromptingNodeInteractor extends IlvMakeSDMNodeInteractor
{
  protected void setNodeProperties(IlvSDMModel model, Object node) {
    String label = JOptionPane.showInputDialog(getManagerView(), "Name:");
    if(label != null)
    model.setObjectProperty(node, "name", label);
  }
}