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:
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:
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); } }