拡張機能がビュー・クラスを実装する場合、そのビューのイベントを処理するコントローラ・クラスも実装する必要があります。 コントローラを実装するには、Controller
インタフェースを使用します。
コントローラ・クラスを実装するには、次の定義が必要です。
ここに示したコード例は、ContextInfo
サンプル・プロジェクトのものです。 この例と他の拡張機能の例は、OTNのExtensions SDKのページで入手できます。
単項または零項コンストラクタを定義します。
public PropFileEditorController( PropFileEditor editor ) { super(); this.editor = editor; ContextMenu menu = editor.getContextMenu(); if ( menu != null ) { menu.addContextMenuListener( this ); } initializeActions(); }
一般にビューは自身のコントローラを作成します。ビュー・クラスで複数のインスタンスが可能な場合、コントローラのコンストラクタには引数としてコール側のビュー・インスタンスが必要です。
public ContextInfoController() { }
コンポーネント・パレットなど、一部の拡張機能はインスタンスを1つ持ちます。これはJDeveloperのセッションで使用される場合も、使用されない場合もあります。このような場合、ビューの作成はユーザーが要求するまで遅らせることができます。ビューは、この目的のためにインストールされたメニュー項目またはツールバー・アイコンを介して、コントローラにより作成されます。このコンストラクタは、追加インスタンスの作成が試みられた場合に、例外をスローします。
handleEvent
メソッドは、基本的に、選択したコマンドに対応するアクションを処理し、残りをスーパーバイザに委任する分岐文です。このメソッドを定義し、拡張機能に定義されたコマンド、および拡張機能がオーバーライドする必要のあるその他のコマンドを処理します。
public boolean handleEvent(IdeAction action, Context context) { int cmdId = action.getCommandId(); // Handle actions containing this command: if (cmdId == CONTEXT_INFO_CMD_ID) { CommandProcessor cmdProc = CommandProcessor.getInstance(); String commandName = action.getCommand(); Command command = cmdProc.createCommand(commandName, context); // Use command processor to execute command. try { cmdProc.invoke(command); } catch (Exception e) { System.err.println(e.toString()); } finally { return true; } } // Let the IDE try to find another Controller to handle this action. return false; }
イベントは、そのデータを操作するメソッドをコールすることにより、直接処理できます。あるいは、コマンド・オブジェクトを作成し、コマンド・プロセッサを介して起動することにより、イベントを間接的に処理することもできます。次のような場合には、後者が適しています。
Ide.SAVE_CMD
は「保存」アクションのデフォルトのコマンド・クラスで、Document
インタフェースを実装するすべてのデータ・クラスにも定義されます。
update
メソッドは、基本的に、選択したアクションを使用可能および使用不可にし、残りをスーパーバイザに委任する分岐文です。拡張機能に定義されたアクション、および拡張機能でオーバーライドする必要のあるその他のアクションに対し、このメソッドを定義します。
public boolean update(IdeAction action, Context context) { int cmdId = action.getCommandId(); // Set the enabled status for relevant actions. if ( cmdId == CONTEXT_INFO_CMD_ID ) { action.setEnabled(enableContextInfo(context)); return true; } // Let the IDE try to find another Controller to update this action. return false; }
拡張機能に必要なコマンドを、コマンドIDを指定することにより定義します。 staticメソッドIde.findOrCreateCmdID
は、一意のコマンドIDを割り当てます。
public static final int CONTEXT_INFO_CMD_ID = Ide.findOrCreateCmdID("ContextInfoController.CONTEXT_INFO_CMD_ID");
エディタの開発
コマンドの開発
ユーザー・インタフェース・イベントについて
コマンドの実装
アクションの定義
oracle.ide.Ide
oracle.ide.Addin.Controller
oracle.ide.model.Document
Copyright © 1997, 2004, Oracle. All rights reserved.