tips/eclipse/plugin開発/GEF/DeleteAction 実行の流れ
GEF : DeleteAction 実行の流れ †
(書きかけ)
GEF の用意している DeleteAction は、 (標準的な EditPart, EditPolicy の構成をそのまま用いた場合) 次のような流れで処理を委譲し、実行します。
DeleteAction -> EditPart -> EditPolicy -> Command
DeleteAction#run() †
内部で自分自身の createDeleteCommand(List) を呼び出し、 得られた Command をスーパークラスの WorkbenchPartAction#execute(Command) を呼び出すことで実行します。 (この中ではさらに Command#execute() が呼ばれます)
引数の List には、SelectionAction#getSelectedObjects() で取得した オブジェクトのリスト(=アクション実行時に選択されていた EditPart のリスト) を渡しています。
なお、Action が実行可能かどうかを確認するために DeleteAction#calculateEnabled() が呼ばれますが、 この場合 run() と同様に createDeleteCommand(List) を呼び、 得られた Command に対して execute() ではなく canExecute() を呼びます。 (したがって、利用者側は Command の canExecute() メソッドを必要に応じて オーバーライドすればよいようになっています)
DeleteAction#createDeleteCommand(List) †
引数に渡された EditPart の getCommand(Request) で Command を取得します。
AbstractEditPart#getCommand(Request) †
インストールされている EditPolicy の getCommand(Request) メソッドに 処理をそのまま委譲します。
ComponentEditPolicy#getCommand(Request) †
DeleteAction の処理は、多くの場合 ComponentEditPolicy を継承した EditPolicy を独自に作成して処理させることになると思います。
ComponentEditPolicy#getCommand(Request) は、 Request の種類(Request#getType())が RequestConstants.REQ_DELETE だった場合、 自分自身の getDeleteCommand(GroupRequest)、 さらにその中で createDeleteCommand(GroupRequest) を呼び出して Command を取得します。 実際には利用者がこれらのメソッドを実装して、処理させたい Command を生成することになります。