#topicpath ---- //ここにコンテンツを記述します。 #contents ** ワークベンチ以下の関連 プラグイン開発で、いろいろなUIにアクセスしたいわけですが、それぞれのUIがどのような関連になっているのかをまとめてみました。 #ref(workbench_decomposed.gif) ***WorkBench window ワークベンチ(ワークベンチ・ウィンドウ)とは、大ざっぱに言うと、「プラットフォームの始動時に開くウィンドウ」のことです。 -クラス名:IWorkbenchWindow -取得方法: IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); IWorkbench を取得するために AbstractUIPlugin#getWorkbench()てのもありますが This method exists as a convenience for plugin implementors. The workbench can also be accessed by invoking PlatformUI.getWorkbench(). なので同じなんですね。ソースを見ても public IWorkbench getWorkbench() { <-AbstractUIPlugin#getWorkbench() return PlatformUI.getWorkbench(); } でした。 ちなみに IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow[] windows = workbench.getWorkbenchWindows(); で IWorkbenchWindow の配列が取得できますが、この配列はEclipseで ウィンドウ >> 新規ウィンドウ で開いているウィンドウたちです。 ***Page ワークベンチ・ウィンドウの内部には、パーツを含む 1 つのページがあります。ページは、パーツをグループ化するためのインプリメンテーション・メカニズムです。 -クラス名:IWorkbenchPage で、ページって何だろうなって思って、 IWorkbench workbench = PlatformUI.getWorkbench(); workbench.getActiveWorkbenchWindow().getActivePage().close(); ってやったら、すべてのパースペクティブが閉じてしまいました。 #ref(close.png) 単純にパースペクティブと1対1でもないんでしょうか((どうも WorkbenchWindow -> IWorkbenchPage -> IViewPart となっているようだ))。 また、 workbench.getActiveWorkbenchWindow().getActivePage().getLabel()); としたら、ワークスペース - J2EEってのが表示されました。やっぱ、パースペクティブだよなぁ。 *** アクティブなエディタへの参照の取得 // ワークベンチの取得 IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); //アクティブなエディタの取得 IEditorPart editor = window.getActivePage().getActiveEditor(); AbstractTextEditor aEditor = (AbstractTextEditor) editor; *** エディタ内のドキュメントを取得 IDocument document = aEditor.getDocumentProvider().getDocument(editor.getEditorInput()); ***プラグインのディレクトリを取得する Log4jの初期化のためにlog4j.xmlを読み込むなど、プラグインディレクトリのパスを取得する場面は結構ありますが、その方法です。 String pluginDirectory = Platform .resolve(getDefault().getDescriptor().getInstallURL()).getPath(); で取得できます。 ちなみにLog4jの初期化などはAbstractUIPluginのサブクラス(勝手に作られるヤツ)で public void startup() throws CoreException { super.startup(); String pluginDirectory = null; try { pluginDirectory = Platform .resolve(getDefault().getDescriptor().getInstallURL()) .getPath(); } catch (IOException e) { e.printStackTrace(); } DOMConfigurator.configure(new File(pluginDirectory, "lib/log4j.xml").toString()); } などとstartup()をOverrideすればよいでしょうか。 ***外部のライブラリを使用する プラグインディレクトリにlibディレクトリなどを作成しておいて、plugin.xmlで <runtime> <library name="hoge.jar"/> <library name="lib/fuga.jar"/> <-外部ライブラリ </runtime> とすればOKです。 *** プロジェクトへの参照を取得する いわゆるEclipseのプロジェクトへの参照を取得する方法です。 IWorkspaceRoot myWorkspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); IProject project = myWorkspaceRoot.getProject([プロジェクト名の文字列]); ***ポップアップメニューの拡張 <extension point="org.eclipse.ui.popupMenus"> <objectContribution objectClass="org.eclipse.core.resources.IResource" <- ファイルとか、フォルダだったら表示 objectClass="org.eclipse.jdt.core.ICompilationUnit" <- いわゆるソースファイルだったら objectClass="org.eclipse.core.resources.IFile" <- ファイルだったら表示 objectClass="org.eclipse.core.resources.IFolder" <- フォルダだったら表示 id="nu.mine.kino.IResource"> <action label="スクリプト生成(&R)" class="nu.mine.kino.HogeAction" menubarPath="additions" <- すでにあるメニューに追加 enablesFor="1" <- 選択したファイルが1つだけの時有効 id="nu.mine.kino.HogeAction"> </action> </objectContribution> </extension> ***デバッグするためのダイアログを出したい IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); Shell shell = window.getShell(); MessageDialog.openInformation(shell, "タイトル","メッセージ"); が定番でしょう。windowオブジェクトはメソッドを記述するクラスによってはフィールドから得られたりしますが。。 ***ウィンドウに配置されているViewを取得する。 IWorkbenchPage page = workbench.getActiveWorkbenchWindow().getActivePage(); IViewReference[] references = page.getViewReferences(); for (int i = 0; i < references.length; i++) { IViewPart view = references[i].getView(false); <- Viewへの参照が取得できました MessageDialog.openInformation(window.getShell(), "ViewのtoString()", view.toString()); } ***プラグインのパッケージング手順 -build.propertiesに、パッケージしたいものを記述する(bin.includesにlib/hoge.jarとかicons/*とか) -plugin.xmlの右クリック >> Antビルドファイルの作成 でbuild.xml作成 -javac要素はソースコードのエンコーディングが考慮されてないので、追加(encoding="EUC-JP"など)。 -ant zip.pluginでZIPが作成される。 -完了。 トラブル(↓メモ書き状態) -plugin.xmlの右クリック>>Antビルドファイルの作成 は、コンパイルのエンコーディングが考慮されない(encoding="EUC-JP"などを追加する必要あり) -build.propertiesに、パッケージしたいものを記述する(bin.includesに書く) ***[[パッケージ化するとインスタンスを生成できない。:http://groups.yahoo.co.jp/group/eclipse-ml/message/1019?expand=1]] 私も同じトラブルに遭遇しました。 プラグインをパッケージングすると、何故かエラーになってしまうというもの。ビューを開こうとすると インスタンスを生成できませんでした。 と言われてしまうんだけど、エラーを調べようにもどこにエラーが表示されているのかも分からないので困っていました。 そこでネットを探していたところ、同じような内容の投稿が。とりあえずこれを見て、プラグインのログは -ウィンドウ→ビューの表示→その他→PDEランタイム→エラー・ログ で「エラーログビュー」を開く。 -エラーログビューで、該当エラーをダブルクリックし「エラーのプロパティー」を開く。 -「状況詳細」を選択します(状況詳細はない場合もあります)。→ここにStackTraceなどが表示されます。 というところまで分かりました。感謝!! そのエラーログを見ると、xml関連のライブラリがないと。どうもプラグインをパッケージした場合と、ランタイムワークベンチで稼動しているVMのバージョンの違いが原因でした。((WebSphereStudioはJ2SE1.3だったためだ〜)) plugin.xmlに、 <library name="lib/xercesImpl.jar"/> <library name="lib/xml-apis.jar"/> を追加して、ようやく動きました。疲れた...。。。 ---- この記事は #vote(おもしろかった[5],そうでもない[0]) #comment #topicpath SIZE(10){現在のアクセス:&counter;}