2011-12-06 21 views
2

我正在開發一個基本上是創建一個新項目的插件,項目包含多個文件夾,並且該文件夾包含我們自己定製的編輯器。現在我不想讓用戶從任何地方重命名項目。我可以看到文件菜單中的重命名選項,項目瀏覽器的上下文菜單,包資源管理器的上下文菜單,導航器的上下文菜單。是否可以全局禁用/自定義重命名選項。我曾嘗試使用全局動作處理程序進行重命名操作,每當重命名操作發生時,基本上都會執行我自己的作業。但是因爲我想在插件激活器啓動時阻止/禁用重命名選項,所以我可以在激活器類上獲得活動視圖站點,這似乎不能幫助我,因爲活動視圖可能不是有時候上面提到的觀點。因此,我嘗試通過ltk的renameparticipant擴展名使用'重命名參與者',並且編寫了自己的類來擴展RenameParticipant,但即使我在plug-in.xml文件中給出了正確的類名,該類也永遠不會被啓動。如何在eclipse插件中從無處不在(即從文件菜單和上下文菜單)禁用重命名選項?

因爲我們的產品是插電式

任何人都可以請告訴我,我應該如何繼續進行?我希望有人已經走上了這條道路,阻止全球重命名選項。

+0

這一點,你能解釋一下重命名有什麼問題會導致刪除?也許這些問題可以通過其他方式克服。因爲,坦率地說,試圖阻止用戶重命名(物理存在的)文件夾註定會失敗。 –

+0

感謝您的回覆。我的插件項目主要用於將xml文件傳輸到服務器系統(而不是數據庫)。用戶輸入已經構建爲xml,並且在發生特定事件時,我將使用FTP/SFTP協議將xml文件發送到服務器系統。目前的問題是,如果用戶在項目的xml文件發送到服務器之後重命名項目,那麼服務器包含一個帶有舊項目名稱的xml文件,我找不到eclipse意味着我的插件提供讀取也從服務器系統項目相關的xml文件。 – Bharath

+0

...我試圖重新發送使用IResourceChangeListener重命名的xml文件,這導致我的不確定性。如果協議失敗/服務器連接不可用,則重命名事件不能將文件傳輸到服務器。 IResourceChange事件不允許我們在啓動後阻止重命名。因此,如果服務器連接不可用,我無法阻止重命名操作。那麼只有我打算從任何地方禁用項目的復活能力。 – Bharath

回答

3

您可以指定自己的處理程序,以全球重命名(ID = 「org.eclipse.ui.edit.rename」)和Java重命名元素(ID =「org.eclipse.jdt.ui.edit.text .java.rename.element「)命令使用Handlers擴展點。但是,在Package Explorer中禁用上下文菜單項(Refactor> Rename ...)是不可能的,因爲它是硬編碼的。

+0

非常感謝您的回覆。我現在可以自定義重命名選項。但這隻適用於'文件'菜單中的'重命名'選項。自定義renameHandler不能使用'Project Explorer'和'Navigator'視圖的cotext菜單。這個處理程序不足以獲取上下文菜單上的鉤子嗎?有沒有其他方法來阻止上下文菜單中的重命名選項。請建議我。我相信我會考慮替代方式而不是阻止重命名。因爲我需要儘快完成這個工作,所以我正在尋找一種簡單的方法......再次感謝您的幫助 – Bharath

+0

@Bharath我本來並沒有注意到您已經嘗試設置處理程序。更新了我的答案。 –

+0

<分機號 point =「org。eclipse.ui.handlers 「> <處理類=」 com.example.plugin.RenameHandler」 commandId = 「org.eclipse.jdt.ui.edit.text.java.rename.element」> Bharath

2

我從上下文菜單中使用該類

public class MoveActionProvider extends RefactorActionProvider { 

    //@Override 
    public void fillContextMenu(IMenuManager menu) {} 

} 

,並宣佈到plugin.xml中

<extension point="org.eclipse.ui.navigator.navigatorContent"> 
      <actionProvider 
        class="com.totvs.tds.ordinechaos.providers.action.MoveActionProvider" 
        id="com.totvs.tds.ordinechaos.providers.action.MoveActionExtension" 
        overrides="org.eclipse.ui.navigator.resources.actions.RefactorActions" 
        priority="highest"> 
       <enablement> 
       <!-- A hack to allways be enabled --> 
        <not> 
         <systemTest 
           property="MyApp" 
           value="WONT-EVER-BE-SET"> 
         </systemTest> 
        </not> 
       </enablement> 
      </actionProvider> 
     </extension> 
+0

我喜歡黑客:P. – Ren

相關問題