2012-07-25 95 views
1

我正在用rap 1.4編寫RCP/RAP-App作爲說唱部分的目標平臺。在rcp中,我通過plugin.xml中的menuContribution配置了一個保存按鈕,save命令中有一個相應的SaveHandler。 現在我喜歡使用這個按鈕作爲我的說唱應用程序的下載按鈕。如何使用工具欄按鈕作爲下載鏈接

回答

2

我明白了。
我編寫了一個DownloadServiceHandler,並在save-command的處理程序中創建了一個不可見的瀏覽器,並帶有download-URL。
所有的工作步步:
的保存按鈕工具欄中的被配置在plugin.xml:

<extension 
     point="org.eclipse.ui.commands"> 
     <command 
      id="pgui.rcp.command.save" 
      name="Save"> 
     </command> 
    </extension> 
    <extension 
     point="org.eclipse.ui.menus"> 
     <menuContribution 
      allPopups="false" 
      locationURI="toolbar:org.eclipse.ui.main.toolbar"> 
     <toolbar 
       id="pgui.rcp.toolbar1"> 
      <command 
        commandId="pgui.rcp.command.save" 
        icon="icons/filesave_16.png" 
        id="pgui.rcp.button.save" 
        style="push" 
      </command> 
     </toolbar> 
     </menuContribution> 
    </extension> 
    <extension 
     point="org.eclipse.ui.handlers"> 
     <handler 
      class="pgui.handler.SaveHandler" 
      commandId="pgui.rcp.command.save"> 
     </handler> 
    </extension> 

我創建一個DownloadServiceHandler:

public class DownloadServiceHandler implements IServiceHandler 
{ 
    public void service() throws IOException, ServletException 
    { 
    final String fileName = RWT.getRequest().getParameter("filename"); 
    final byte[] download = getYourFileContent().getBytes(); 
    // Send the file in the response 
    final HttpServletResponse response = RWT.getResponse(); 
    response.setContentType("application/octet-stream"); 
    response.setContentLength(download.length); 
    final String contentDisposition = "attachment; filename=\"" + fileName + "\""; 
    response.setHeader("Content-Disposition", contentDisposition); 
    response.getOutputStream().write(download); 
    } 
} 

在該方法的postWindowCreate ApplicationWorkbenchWindowAdvisor我註冊了DownloadServiceHandler:

private void registerDownloadHandler() 
    { 
    final IServiceManager manager = RWT.getServiceManager(); 
    final IServiceHandler handler = new DownloadServiceHandler(); 
    manager.registerServiceHandler("downloadServiceHandler", handler); 
    } 

在SaveHandler的執行方法中,我創建了一個不可見的瀏覽器,並使用文件名和註冊的DownloadServiceHandler設置了url。

final Browser browser = new Browser(shell, SWT.NONE); 
    browser.setSize(0, 0); 
    browser.setUrl(createDownloadUrl(fileName)); 
     . 
     . 
    private String createDownloadUrl(final String fileName) 
    { 
    final StringBuilder url = new StringBuilder(); 
    url.append(RWT.getRequest().getContextPath()); 
    url.append(RWT.getRequest().getServletPath()); 
    url.append("?"); 
    url.append(IServiceHandler.REQUEST_PARAM); 
    url.append("=downloadServiceHandler"); 
    url.append("&filename="); 
    url.append(fileName); 
    return RWT.getResponse().encodeURL(url.toString()); 
    }