Subclassing view interactors

You can subclass the IlvMakeSDMNodeInteractor and the IlvMakeSDMLinkInteractor to control when a link is created between two nodes, or to perform custom actions when links or nodes are created.

For example, to create a link only between certain types of node, you can subclass IlvMakeSDMLinkInteractor and override the acceptOrigin and acceptDestination methods, see the following code example:

Example   Subclassing the 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);

  }

}

In this example, a node whose property "okForOrigin" is false is not accepted as the origin of a link, and a node whose property "okForDestination" is false is not accepted as the destination of a link.

You can also set custom properties when a node or a link is created by overriding setNodeProperties or setLinkProperties. For example, to prompt the user for the "name" property of a node as it is created, you can subclass IlvMakeSDMNodeInteractor and override setNodePorperties as follows:

Example   Subclassing the 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);

  }

}