¿Cómo obtengo el nombre del proyecto de eclipse actual? Estoy en una vista GMF y necesito el nombre del proyecto cuando se utiliza algún submenú del menú emergente.¿Cómo obtener el nombre del proyecto en eclipse?
Respuesta
Este GMF class tiene una respuesta directa, si tiene acceso al nombre ResourcesPlugin:
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(myBundleName);
La respuesta genérica (de una potentially outdated code) podría ser como (si usted tiene un editor abierto):
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 se abre ningún editor:
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();
Usando el servicio de selección le dará el objeto seleccionado en ese momento, luego puede verificar el tipo de selección y obtener el proyecto según la selección.
Si crea un ISelectionListener y se registra como oyente en el ISelectionService, se le notificará siempre que la selección activa cambie, y se le dará una referencia a la selección y la parte propietaria.
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();
}
}
Consulte este article on the Eclipse selection service para obtener más información.
Probablemente una respuesta más precisa que la mía. +1 – VonC
+1 pero mejor use PlatformUI.getWorkbench() en lugar de Workbench.getInstance(). –
Rich Seller y VonC han brindado buenas respuestas pero no parecían lo suficientemente completas/usaban clases internas. He venido con lo siguiente.
@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;
}
He creado una buena función de las publicaciones anteriores, además he agregado algunas actualizaciones. Funciona con el eclipse actual.
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;
}
- 1. Obtener el nombre del proyecto del proyecto WPF
- 2. cambiar el nombre del proyecto androide
- 3. cambiar el nombre del proyecto y el nombre del paquete
- 4. ¿Cómo sabe eclipse el nombre de su proyecto?
- 5. "El proyecto: swing al que hace referencia el classpath, no existe" en Eclipse cuando el nombre del proyecto es el mismo que el nombre del espacio de trabajo
- 6. android, cómo obtener el nombre del paquete?
- 7. Obtener el nombre del elemento
- 8. ¿Cómo obtener el nombre completo del tipo?
- 9. Cómo cambiar el nombre del proyecto en VS2010
- 10. ¿Debe renombrar un proyecto en Eclipse también cambiar el nombre de la carpeta del proyecto en el sistema de archivos?
- 11. Cómo obtener el nombre del país
- 12. (Django) cómo obtener el nombre del mes?
- 13. jquery cómo obtener el nombre del padre
- 14. Buscar en Eclipse a través del proyecto
- 15. ¿Por qué cuando cambio el nombre de un proyecto en Eclipse, ¿Tomcat no recoge el nuevo nombre del recurso?
- 16. ¿Cómo hacer un archivo war del proyecto gwt en eclipse?
- 17. ¿Cómo obtener el ID del proceso del nombre del proceso?
- 18. cómo cambiar el nombre del proyecto en gradle en lugar de usar el nombre de la carpeta?
- 19. ¿Cómo obtener solo el nombre del archivo en el preprocesador?
- 20. obtener el nombre de la aplicación del nombre del paquete
- 21. problema con Tomcat URL incluye el nombre del proyecto
- 22. Función del proyecto> Limpiar en Eclipse
- 23. Eclipse muestra "cruz roja" en el icono del proyecto
- 24. Compilación del proyecto Qt en Eclipse utilizando el compilador Cygwin
- 25. Configuración del proyecto con Eclipse y Mercurial
- 26. Cómo vincular proyecto en eclipse
- 27. no se puede obtener la biblioteca del sistema para el proyecto en eclipse ide
- 28. proyecto de presentación de nombre no funciona en mi Eclipse
- 29. Cómo obtener el espacio de nombre predeterminado del proyecto csproj (VS 2008)
- 30. ¿Cómo obtener el nombre del día del objeto java sql.Timestamp?
Para GMF cambiar la parte MyPlugin a:.... 'IViewPart [] = {partes yourPluginName} DiagramEditorPlugin.getInstance() getWorkbench() getActiveWorkbenchWindow() getActivePage() getViews();' Su nombre de plugin GMF se puede encontrar en su modelo .gen. – Ring