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