IAdaptableの用途
http://d.hatena.ne.jp/muimy/20040803#1091537308
のつづき
objectContributionのアクションで、adaptable="true" して、
<objectContribution objectClass="org.eclipse.core.resources.IContainer" id="com.muimi.puchi.objectContribution2" adaptable="true" > <action label="Explorer" class="com.muimi.puchi.OpenExplorerAction" id="com.muimi.puchi.OpenExplorerAction" menubarPath="additions" /> </objectContribution>
うけとる側で getAdapter() すると、Javaフラグメントでも IResourceになっちゃったりして便利。
public class OpenExplorerAction implements IObjectActionDelegate{ private ISelection selection; public void setActivePart(IAction action, IWorkbenchPart targetPart) { } public void run(IAction action) { IContainer container = (IContainer) ( (IAdaptable) ( (IStructuredSelection)selection).getFirstElement() ).getAdapter(IResource.class); String location = container.getLocation().toOSString(); try { Runtime.getRuntime().exec( MessageFormat.format("explorer.exe {0}", new String[]{location}) ); } catch (IOException e) { PuchiToolsPlugin.logError("error in launch. dir=" + location ,e); } } public void selectionChanged(IAction action, ISelection selection) { this.selection = selection; } }
なお、Explorer開くコードのは、EasyExplorerのパクリです。