Question

Comment puis-je obtenir le nom du projet eclipse actuel? Je suis dans une vue GMF et j'ai besoin du nom du projet lorsqu'un sous-menu du menu contextuel est utilisé.

Était-ce utile?

La solution

This La classe GMF a une réponse simple si vous avez accès au nom de ResourcesPlugin:

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

La réponse générique (tirée d'un code potentiellement obsolète ) pourrait être comme (si vous avez un éditeur ouvert):

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 
}

Si aucun éditeur n'est ouvert:

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

Autres conseils

En utilisant le service de sélection, vous obtiendrez l'objet actuellement sélectionné. Vous pourrez alors vérifier le type de sélection et obtenir le projet en fonction de la sélection.

Si vous créez un ISelectionListener et que vous vous enregistrez en tant qu'écouteur sur ISelectionService, vous en serez averti chaque fois que la sélection active sera modifiée et une référence à la sélection et à la partie propriétaire lui sera attribuée.

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

Consultez cet article sur le service de sélection Eclipse pour plus de détails.

J'ai créé une fonction intéressante à partir des publications ci-dessus et ajouté quelques mises à jour. Fonctionne avec l'éclipse actuelle.

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 et VonC ont tous deux fourni de bonnes réponses, mais ils ne semblaient pas assez complets / utilisaient des classes internes. Je viens avec ce qui suit.

@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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top