문제

현재 Eclipse 프로젝트의 이름을 어떻게 얻습니까? 팝업 메뉴의 일부 하위 메뉴가 사용될 때 GMF보기에 있으며 프로젝트 이름이 필요합니다.

도움이 되었습니까?

해결책

이것 GMF 클래스 ResourcesPlugin 이름에 액세스 할 수있는 경우 간단한 답변이 있습니다.

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

일반적인 답변 (a 잠재적으로 구식 코드) (편집자가 열린 경우) : :

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();

다른 팁

선택 서비스를 사용하면 현재 선택한 객체를 제공하면 선택 유형을 확인하고 선택에 따라 프로젝트를 얻을 수 있습니다.

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();
    }
}

이것 좀 봐 일식 선택 서비스에 관한 기사 자세한 사항은.

위의 게시물에서 멋진 기능을 만들었고 몇 가지 업데이트를 추가했습니다. 현재 이클립스와 함께 작동합니다.

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;
}

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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top