2009-07-30 31 views

回答

25

GMF class有一個直截了當的回答,如果你有機會到ResourcesPlugin名稱:

IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(myBundleName); 

通用答案(從potentially outdated code)也能像(如果你有一個編輯器中打開):

IEditorPart editorPart = 
getSite().getWorkbenchWindow().getActivePage().getActiveEditor(); 

if(editorPart != null) 
{ 
    IFileEditorInput input = (IFileEditorInput)editorPart.getEditorInput() ; 
    IFile file = input.getFile(); 
    IProject activeProject = file.getProject(); 
    String activeProjectName = activeProject.getName(); 
    //... use activeProjectName 
} 

如果沒有打開編輯器:

IViewPart [] parts = 
     MyPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().getViews(); 
    IProject activeProject = null; 

    for(int i=0;i<parts.length;i++) 
    { 
     if(parts[i] instanceof ResourceNavigator) 
     { 
      ResourceNavigator navigator = (ResourceNavigator)parts[i]; 
      StructuredSelection sel = 
       (StructuredSelection)navigator.getTreeViewer().getSelection(); 
      IResource resource = (IResource)sel.getFirstElement(); 
      activeProject = resource.getProject(); 
      break; 
     } 
    } 
    String activeProjectName = activeProject .getName(); 
+0

對於GMF改變爲myplugin部分:。。 `IViewPart []份= {yourPluginName} DiagramEditorPlugin.getInstance()getWorkbench()getActiveWorkbenchWindow()getActivePage()getViews();` 您的GMF插件名稱可以在您的.genmodel中找到。 – Ring 2013-02-25 09:13:31

7

使用選擇服務將爲您提供當前選定的對象,然後可以檢查選擇類型並根據選擇獲取項目。

如果創建ISelectionListener並將其註冊爲ISelectionService上的偵聽器,則只要活動選擇更改,就會通知您,並且會給出對選擇部分和擁有部分的引用。

ISelectionListener listener = new ISelectionListener() { 
    public void selectionChanged(IWorkbenchPart sourcePart, ISelection selection) { 
     setSourcePart(sourcePart); 
     setSelection(selection); 
    } 
}; 

... 
//register the listener 
selectionService.addSelectionListener(listener); 

... 
//either get the selection service and get the selection, or use the stored version from the listener 
ISelectionService selectionService = 
    Workbench.getInstance().getActiveWorkbenchWindow().getSelectionService(); 

ISelection selection = selectionService.getSelection(); 

if(selection instanceof IStructuredSelection) { 
    Object element = ((IStructuredSelection)selection).getFirstElement(); 

    IProject project; 
    if (element instanceof IResource) { 
     project= ((IResource)element).getProject(); 
    } else if (element instanceof PackageFragmentRootContainer) { 
     IJavaProject jProject = 
      ((PackageFragmentRootContainer)element).getJavaProject(); 
     project = jProject.getProject(); 
    } else if (element instanceof IJavaElement) { 
     IJavaProject jProject= ((IJavaElement)element).getJavaProject(); 
     project = jProject.getProject(); 
    } 
} else if (selection instanceof ITextSelection) { 
    if(sourcePart instanceof JavaEditor) { 
     IJavaElement element = SelectionConverter.resolveEnclosingElement(sourcePart, selection); 
     project = element.getJavaProject().getProject(); 
    } 
} 

查看此article on the Eclipse selection service瞭解更多詳情。

+0

大概比我的答案要準確得多。 +1 – VonC 2009-07-30 12:28:01

2

Rich Seller和VonC都提供了很好的答案,但他們似乎不夠完整/使用內部類。我已經提出了以下內容。

@Override 
public void createPartControl(Composite parent) 
{ 
    .... 

    // Register to be notified about selections 
    getSite().getWorkbenchWindow().getSelectionService() 
     .addPostSelectionListener(this); 

    // Detect the current selection 
    detectCurrentSelection(); 
} 

@Override 
public void selectionChanged(IWorkbenchPart part, ISelection selection) 
{ 
    IProject project = convertSelection(part, selection); 
    setProject(project); 
} 

private void detectCurrentSelection() 
{ 
    IProject project = null; 

    IWorkbenchWindow window = getSite().getWorkbenchWindow(); 
    IWorkbenchPage activePage = window.getActivePage(); 

    if (activePage != null) 
    { 
    IEditorPart part = activePage.getActiveEditor(); 

    if (part != null) 
    { 
     project = convertSelection(part); 
    } 
    else 
    { 
     IViewReference[] viewReferences = activePage.getViewReferences(); 

     for (IViewReference viewRef : viewReferences) 
     { 
     IViewPart view = viewRef.getView(false); 
     ISelection selection = null; 

     if (view instanceof IPackagesViewPart) 
     { 
      IPackagesViewPart viewPart = (IPackagesViewPart) view; 
      TreeViewer treeViewer = viewPart.getTreeViewer(); 
      selection = treeViewer.getSelection(); 
     } 
     else if (view instanceof CommonNavigator) 
     { 
      CommonNavigator navigator = (CommonNavigator) view; 
      CommonViewer commonViewer = navigator.getCommonViewer(); 
      selection = commonViewer.getSelection(); 
     } 

     if (selection instanceof IStructuredSelection) 
     { 
      IStructuredSelection structuredSelection = (IStructuredSelection) selection; 

      project = convertSelection(structuredSelection); 

      if (project != null) 
      break; 
     } 
     } 
    } 
    } 

    setProject(project); 
} 

private IProject convertSelection(IWorkbenchPart part, ISelection selection) 
{ 
    IProject project = null; 
    if (selection instanceof IStructuredSelection) 
    { 
    IStructuredSelection structuredSelection = (IStructuredSelection) selection; 
    project = convertSelection(structuredSelection); 
    } 
    else if (selection instanceof ITextSelection) 
    { 
    if (part instanceof IEditorPart) 
    { 
     IEditorPart editorPart = (IEditorPart) part; 
     IResource resource = (IResource)editorPart.getEditorInput().getAdapter(IResource.class); 
     if (resource != null) 
     { 
     project = resource.getProject(); 
     } 
    } 
    } 

    return project; 
} 

private IProject convertSelection(IEditorPart part) 
{ 
    IProject project = null; 
    IResource resource = (IResource)part.getEditorInput().getAdapter(IResource.class); 
    if (resource != null) 
    { 
    project = resource.getProject(); 
    } 
    return project; 
} 

private IProject convertSelection(IStructuredSelection structuredSelection) 
{ 
    IProject project = null; 
    Object element = structuredSelection.getFirstElement(); 

    if (element instanceof IResource) 
    { 
    project = ((IResource) element).getProject(); 
    } 
    else if (element instanceof IJavaElement) 
    { 
    IJavaElement javaElement = (IJavaElement) element; 
    project = javaElement.getJavaProject().getProject(); 
    } 
    else if (element instanceof IAdaptable) 
    { 
    IAdaptable adaptable = (IAdaptable) element; 
    IWorkbenchAdapter adapter = (IWorkbenchAdapter) adaptable.getAdapter(IWorkbenchAdapter.class); 
    if (adapter != null) 
    { 
     Object parent = adapter.getParent(adaptable); 
     if (parent instanceof IJavaProject) 
     { 
     IJavaProject javaProject = (IJavaProject) parent; 
     project = javaProject.getProject(); 
     } 
    } 
    } 

    return project; 
} 
5

我從上面的帖子創建了一個很好的功能,並添加了一些更新。適用於當前的日食。

public static IProject getCurrentSelectedProject() { 
    IProject project = null; 
    ISelectionService selectionService = 
     PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService(); 

    ISelection selection = selectionService.getSelection(); 

    if(selection instanceof IStructuredSelection) { 
     Object element = ((IStructuredSelection)selection).getFirstElement(); 

     if (element instanceof IResource) { 
      project= ((IResource)element).getProject(); 
     } else if (element instanceof PackageFragmentRoot) { 
      IJavaProject jProject = 
       ((PackageFragmentRoot)element).getJavaProject(); 
      project = jProject.getProject(); 
     } else if (element instanceof IJavaElement) { 
      IJavaProject jProject= ((IJavaElement)element).getJavaProject(); 
      project = jProject.getProject(); 
     } 
    } 
    return project; 
}