private void hookContextMenu() { MenuManager menuMgr = new MenuManager("#PopupMenu"); menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener( new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { ResultModelTreeView.this.fillContextMenu(manager); } }); Menu menu = menuMgr.createContextMenu(viewer.getControl()); viewer.getControl().setMenu(menu); getSite().registerContextMenu(menuMgr, viewer); }
@SuppressWarnings("unchecked") public IEditorPart openEditor(IStructuredSelection selection) { Object o = selection.getFirstElement(); EObject obj = null; if (o instanceof EObject) { obj = (EObject) o; } if (o instanceof EObjectGroup) { EObjectGroup group = (EObjectGroup) o; if (!group.getEObjects().isEmpty()) { obj = group.getEObjects().getFirst(); } } if (obj != null) { // URI uri = obj.eResource().getURI(); // String fileString = URI.decode(uri.path()); // fileString = fileString.replaceFirst("/resource", ""); // IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(fileString)); // IWorkbench workbench = PlatformUI.getWorkbench(); IFile file = ((LinkedList<ResultModel>) viewer.getInput()).get(0).getIFile(); IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); IWorkbenchPage page = workbenchWindow.getActivePage(); try { if (file.exists()) { return IDE.openEditor(page, file); } } catch (PartInitException exception) { return null; } } return null; }
@Override public void createPartControl(Composite parent) { this.parent = parent; this.viewer = new ResultModelTreeViewer(parent); // TODO: add link between viewer and EMFModelSmells viewer.setContentProvider(new ResultModelTreeViewerContentProvider()); viewer.setLabelProvider(new ResultModelTreeViewerLabelProvider()); viewer.addSelectionChangedListener( new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { if (event.getSelection().isEmpty()) { return; } // if (event.getSelection() instanceof StructuredSelection) { // StructuredSelection ss = (StructuredSelection) event.getSelection(); // System.out.println("StructuredSelection: " + ss); // Object selection = ss.getFirstElement(); // System.out.println("Selection: " + selection); // ArrayList<EObject> eObjectList = new ArrayList<EObject>(); // System.out.println("eObjectList: " + eObjectList); // if (selection instanceof EObject) { // String path = ((EObject) // selection).eResource().getURI().toPlatformString(false); // System.out.println("Path: " + path); // eObjectList.add((EObject) selection); // } // if (selection instanceof EObjectGroup) { // eObjectList.addAll(((EObjectGroup) selection).getEObjects()); // } // System.out.println("eObjectList: " + eObjectList); // Object[] objects = eObjectList.toArray(); // RuntimeManager.selectModelObjects(objects); // } IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); IEditorPart editorPart = workbenchWindow.getActivePage().getActiveEditor(); if (event.getSelection() instanceof IStructuredSelection) { // editorPart = openEditor((IStructuredSelection)event.getSelection()); StructuredSelection ss = (StructuredSelection) event.getSelection(); Object selection = ss.getFirstElement(); // if (selection instanceof EObject || selection instanceof EObjectGroup) { doAdditionalHighlightings(selection); // } } if (editorPart != null && editorPart instanceof IViewerProvider) { setSelectionInModel( (IViewerProvider) editorPart, (IStructuredSelection) event.getSelection()); // ((IViewerProvider)editorPart).getViewer().setSelection(event.getSelection(), // true); } } private void setSelectionInModel( IViewerProvider provider, IStructuredSelection selection) { ArrayList<EObject> eObjectList = new ArrayList<EObject>(); for (Object selectedObject : selection.toList()) { if (selectedObject instanceof EObjectGroup) { for (EObject currentEObject : ((EObjectGroup) selectedObject).getEObjects()) { EObject modelInstanceObject = getModelObjectInstance(provider, currentEObject); eObjectList.add(modelInstanceObject); } ((EObjectGroup) selectedObject).setEObjects(eObjectList); } else if (selectedObject instanceof EObject) { eObjectList.add(getModelObjectInstance(provider, (EObject) selectedObject)); } } provider.getViewer().setSelection(new StructuredSelection(eObjectList)); // Object o = selection.getFirstElement(); // if(o instanceof EObject){ // Object input = provider.getViewer().getInput(); // provider.getViewer().setSelection(selection); // }else if(o instanceof EObjectGroup){ // StructuredSelection s = new StructuredSelection(((EObjectGroup)o).getEObjects()); // provider.getViewer().setSelection(s); // } } private EObject getModelObjectInstance(IViewerProvider provider, EObject eObject) { Viewer viewer = provider.getViewer(); TreeViewer treeViewer = (TreeViewer) viewer; Tree tree = treeViewer.getTree(); TreeItem treeItem = tree.getItem(0); Resource o = (Resource) treeItem.getData(); ResourceSet set = o.getResourceSet(); EObject ob = set.getEObject(EcoreUtil.getURI(eObject), true); // String uri = o.getURIFragment(eObject); return ob; // return o.getEObject(uri); // EObject equalObject = o.getEObject(eObject.eResource().getURIFragment(eObject)); // return equalObject; // if(provider instanceof IEditingDomainProvider){ // IEditingDomainProvider prov = (IEditingDomainProvider)provider; // TreeIterator iterator = // prov.getEditingDomain().treeIterator(viewer.getCurrentRoot()); // while(iterator.hasNext()){ // Object itObj = iterator.next(); // if(itObj.equals(eObject)){ // return (EObject) itObj; // } // } // } // return eObject; } // @SuppressWarnings("unchecked") // private IEditorPart openEditor(IStructuredSelection selection){ // Object o = selection.getFirstElement(); // EObject obj = null; // if(o instanceof EObject){ // obj = (EObject)o; // }else if(o instanceof EObjectGroup){ // EObjectGroup group = (EObjectGroup)o; // if(!group.getEObjects().isEmpty()){ // obj = group.getEObjects().getFirst(); // } // } // if(obj != null){ //// URI uri = obj.eResource().getURI(); //// String fileString = URI.decode(uri.path()); //// fileString = fileString.replaceFirst("/resource", ""); //// IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(new // Path(fileString)); //// IWorkbench workbench = PlatformUI.getWorkbench(); // IFile file = ((LinkedList<ResultModel>)viewer.getInput()).get(0).getIFile(); // IWorkbenchWindow workbenchWindow= // PlatformUI.getWorkbench().getActiveWorkbenchWindow(); // IWorkbenchPage page = workbenchWindow.getActivePage(); // try { // if(file.exists()){ // return IDE.openEditor(page, file); // } // }catch (PartInitException exception) { // return null; // } // } // return null; // } // }); RuntimeManager.setResultModelTreeViewer(viewer); LinkedList<ResultModel> result = RuntimeManager.getResultModels(); if (result != null) { viewer.setInput(result); } makeActions(); hookContextMenu(); contributeToActionBars(); }
@Override public void setFocus() { viewer.getControl().setFocus(); }