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のパクリです。