2009-09-25 2 views

ответ

0

Зачем вам это нужно? Разве вы не можете сделать так, чтобы ваши пользователи не имели права на использование svn-прав?

+0

Это не мой прецедент. У меня есть свои собственные действия VCS, которые отличаются от Subversive (специфический Commit и т. Д.). Я не хочу, чтобы пользователь мог запускать действия Subversive. –

0

Два способа: либо изменить файлы plugin.xml внутри плагинов из подрывной деятельности, чтобы удалить вклады (что означает, что вы должны сохранить собственную версию плагинов), либо вы можете удалить определенные вклады с платформы.

Обычно удаление происходит в классе, который расширяет интерфейс IApplication, прежде чем запускать реальную платформу.

Это, в основном, взлом, но он позволит вам делать то, что вы хотите, не касаясь плагинов subversion. Я не знаю названия вкладов (Вы должны искать их в исходном коде от плагинов), но код выглядит следующим образом:

IExtensionRegistry extensionRegistry = InternalPlatform.getDefault().getRegistry(); 

List uiExtensionsToRemove = Arrays.toList(new String[] {"org.eclipse.ui.views.ProgressView" }); // Removing the progress view in this example 


String[] tmpNamespaces = extensionRegistry.getNamespaces(); 
    for (int i = 0; i < tmpNamespaces.length; i++) { 
     String tmpNamespace = tmpNamespaces[i]; 
      try { 
       IExtension[] tmpExtensions = extensionRegistry.getExtensions(tmpNamespace); 
       for (int j = 0; j < tmpExtensions.length; j++) { 
        IExtension tmpExtension = tmpExtensions[j]; 
        ExtensionHandle tmpEHandle = (ExtensionHandle)tmpExtension; 
        String tmpEPUID = tmpEHandle.getExtensionPointUniqueIdentifier(); 

        if ("org.eclipse.search.searchPages".equals(tmpEPUID) || "org.eclipse.ui.preferencePages".equals(tmpEPUID) || "org.eclipse.ui.popupMenus".equals(tmpEPUID) || "org.eclipse.ui.actionSets".equals(tmpEPUID) 
          || "org.eclipse.ui.views".equals(tmpEPUID) || "org.eclipse.ui.perspectives".equals(tmpEPUID)) { 
         // only remove part of ui extensions 
         if (tmpEHandle.getNamespace().startsWith("org.eclipse.ui")) { 
          String idOfFirstExtension = tmpEHandle.getConfigurationElements()[0].getAttribute("id"); 
          if (!uiExtensionsToRemove.contains(idOfFirstExtension)) { 
           continue; 
          } 
         } 
         removeExtension(tmpEHandle); 
       } 
      } catch (InvalidRegistryObjectException iroe) { 

      } 
      //System.out.println("Namespace: " + tmpNamespace); 
     } 

private void removeExtension(ExtensionHandle extensionHandle) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException { 
    if (removeExtensionMethod == null) { 
     removeExtensionMethod = extensionRegistry.getClass().getDeclaredMethod("removeExtension", new Class[] { int.class }); 
     removeExtensionMethod.setAccessible(true); 
    } 
    // well, this is some magic: 
    int tmpExtId = extensionHandle.hashCode(); 
    removeExtensionMethod.invoke(extensionRegistry, new Object[] { new Integer(tmpExtId) }); 
} 
+0

Благодарим вас за хак, но рамки Subversive/Team/Platform немного сложнее ... (не простые вклады в plugin.xml). И даже если я хочу взломать всплывающее меню с вашим кодом, я не знаю, когда мне это нужно! Жизненный цикл внесенных действий (очень) сложный. Нужна дополнительная помощь, спасибо. –

+0

См. Http://help.eclipse.org/ganymede/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/team/ui/synchronize/package-summary.html и: http : //help.eclipse.org/ganymede/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/team/ui/synchronize/SynchronizePageActionGroup.html –

0

Вы должны, конечно, проверить Activities.

+0

К сожалению, разработчики Subversive plugin didn 't использую «команду» для этих действий, и они не отключены по видам деятельности (которые я использовал для удаления подменю «Team» в главном окне. Теперь ... Мне пришлось сначала исправлять (сложный) код ... –

+0

OMGWTF ... Извините за вас ... – thSoft