Come posso ottenere il nome del progetto eclissi corrente? Sono in una visualizzazione GMF e ho bisogno del nome del progetto quando viene utilizzato un sottomenu del menu popup.Come ottenere il nome del progetto in eclissi?
risposta
Questo GMF class ha una risposta semplice, se si ha accesso al nome ResourcesPlugin:
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(myBundleName);
La risposta generica (da un potentially outdated code) potrebbe essere come (se si dispone di un editore aperto):
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
}
Se nessun editor è aperto:
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();
L'utilizzo del servizio di selezione ti darà l'oggetto attualmente selezionato, puoi quindi controllare il tipo di selezione e ottenere il progetto in base alla selezione.
Se si crea un ISelectionListener e si registra come listener su ISelectionService, verrà notificato ogni volta che la selezione attiva cambia e viene fornito un riferimento alla selezione e alla parte proprietaria.
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();
}
}
Vedere questo article on the Eclipse selection service per ulteriori dettagli.
Probabilmente una risposta più accurata della mia. +1 – VonC
+1 ma meglio usare PlatformUI.getWorkbench() invece di Workbench.getInstance(). –
Rich Seller e VonC hanno entrambi fornito buone risposte ma non sembravano abbastanza complete/utilizzate classi interne. Sono venuto con il seguente.
@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;
}
Ho creato una bella funzione dai post precedenti, più aggiunti alcuni aggiornamenti. Funziona con l'eclissi corrente.
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. Ottenere il nome del progetto del progetto WPF
- 2. Progetto nome non mostra nella mia eclissi
- 3. Come creare un file war del progetto gwt in eclissi?
- 4. come eliminare il progetto inesistente da eclissi
- 5. Importa il progetto PhoneGap in eclissi
- 6. apre il progetto java esistente in eclissi
- 7. Come ottenere il percorso assoluto dei file di progetto in eclissi usando il plugin
- 8. Come visualizzare la cartella bin del progetto Android in eclissi?
- 9. Come generare un eseguibile del progetto java in eclissi
- 10. Come ottenere il percorso del progetto dal progetto di test?
- 11. android, come ottenere il nome del pacchetto?
- 12. Perché non riesco a importare il progetto esistente in eclissi?
- 13. Come rinominare il nome del progetto in VS2010
- 14. Come ottenere il nome del paese
- 15. Nessuna opzione di progetto java in eclissi
- 16. (Django) come ottenere il nome del mese?
- 17. Come ottenere il nome del tag precedente?
- 18. Come ottenere il nome completo del tipo?
- 19. Come impostare il nome del processo eseguibile del progetto?
- 20. Come offuscare il mio progetto Android in eclissi IDE?
- 21. aumenta il timeout del server in eclissi
- 22. Individuazione del numero di errori in un progetto eclissi
- 23. come ottenere il nome file del chiamante, il nome del metodo in python
- 24. cambiando il progetto e il nome del target in XCode
- 25. Come posso ottenere il percorso del progetto in Scala?
- 26. Importazione progetto Android AOSP in eclissi
- 27. Avviso eclissi: Progetto sfaccettato sconosciuto
- 28. Come posso ottenere il nome del pacchetto in Android?
- 29. Come ottenere il nome file del modulo __main__ in Python?
- 30. Come ottenere correttamente il nome del thread in Java?
Per GMF cambiare la parte myplugin a:.... 'IViewPart [] parti = {} yourPluginName DiagramEditorPlugin.getInstance() getWorkbench() getActiveWorkbenchWindow() getActivePage() getViews();' Il tuo nome del plugin GMF può essere trovato nel tuo .genmodel. – Ring