| /******************************************************************************* |
| * Copyright (c) 2002, 2005 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.jst.j2ee.internal.plugin; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.util.EcoreUtil; |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jdt.core.IJavaModel; |
| import org.eclipse.jdt.core.IJavaProject; |
| import org.eclipse.jdt.core.IPackageFragment; |
| import org.eclipse.jdt.core.IType; |
| import org.eclipse.jdt.core.JavaModelException; |
| import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility; |
| import org.eclipse.jem.internal.adapters.jdom.JavaClassJDOMAdaptor; |
| import org.eclipse.jem.internal.java.adapters.ReadAdaptor; |
| import org.eclipse.jem.java.JavaClass; |
| import org.eclipse.jem.java.JavaPackage; |
| import org.eclipse.jem.util.emf.workbench.ProjectUtilities; |
| import org.eclipse.jem.workbench.utility.JemProjectUtilities; |
| import org.eclipse.ui.IEditorInput; |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.PartInitException; |
| import org.eclipse.ui.part.FileEditorInput; |
| import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper; |
| |
| /** |
| * A number of routines for working with JavaElements in editors |
| * |
| * Use 'isOpenInEditor' to test if an element is already open in a editor Use 'openInEditor' to |
| * force opening an element in a editor With 'getWorkingCopy' you get the working copy (element in |
| * the editor) of an element |
| */ |
| public class J2EEEditorUtility { |
| // //$NON-NLS-1$ |
| public static final String EJB_JAVA_EDITOR_ID = "org.eclipse.jst.j2ee.internal.internal.ejb.ui.misc.EJBJavaEditor"; //$NON-NLS-1$ |
| |
| public static ICompilationUnit getCompilationUnit(JavaClass javaClass) { |
| IProject project = ProjectUtilities.getProject(javaClass); |
| if (project == null) |
| return null; |
| return getCompilationUnit(javaClass, project); |
| } |
| |
| public static ICompilationUnit getCompilationUnit(JavaClass javaClass, IProject project) { |
| if (javaClass == null) |
| return null; |
| IJavaProject javaProj = getJavaProject(project); |
| if (javaProj == null) |
| return null; |
| return getCompilationUnit(javaClass, javaProj); |
| } |
| |
| public static ICompilationUnit getCompilationUnit(JavaClass javaClass, IJavaProject javaProject) { |
| if (javaClass == null) |
| return null; |
| IType type = getType(javaClass); |
| if (type != null) |
| return type.getCompilationUnit(); |
| return null; |
| } |
| |
| public static IType getType(JavaClass javaClass) { |
| if (javaClass != null) { |
| JavaClassJDOMAdaptor adaptor = (JavaClassJDOMAdaptor) EcoreUtil.getRegisteredAdapter(javaClass, ReadAdaptor.TYPE_KEY); |
| if (adaptor != null) |
| return adaptor.getSourceType(); |
| } |
| return null; |
| } |
| |
| public static IEditorInput getEditorInput(Object input) { |
| if (input instanceof EObject) |
| return new FileEditorInput(WorkbenchResourceHelper.getFile((EObject) input)); |
| if (input instanceof IFile) |
| return new FileEditorInput((IFile) input); |
| return null; |
| } |
| |
| public static IFile getFile(JavaClass javaClass) { |
| ICompilationUnit comp = getCompilationUnit(javaClass); |
| if (comp == null) |
| return null; |
| IEditorInput input = null; |
| input = EditorUtility.getEditorInput(comp); |
| if (input != null) { |
| return (IFile) input.getAdapter(IFile.class); |
| } |
| return null; |
| } |
| |
| public static IJavaProject getJavaProject(IProject aProject) { |
| if (aProject == null) |
| return null; |
| IJavaModel javaModel = JemProjectUtilities.getJavaModel(); |
| return javaModel.getJavaProject(aProject.getName()); |
| } |
| |
| /** |
| * Return the IPackageFragment for the JavaPackage for |
| * |
| * @javaClass. |
| */ |
| public static IPackageFragment getPackageFragment(JavaClass javaClass, IJavaProject javaProject) { |
| if (javaProject != null) { |
| try { |
| JavaPackage javaPackage = (JavaPackage) javaClass.eContainer(); |
| String packageName = javaPackage.getName(); |
| IPackageFragment[] pkgFrags = javaProject.getPackageFragments(); |
| for (int i = 0; i < pkgFrags.length; i++) { |
| if ((pkgFrags[i].getElementName().equals(packageName))) |
| return pkgFrags[i]; |
| } |
| } catch (JavaModelException e) { |
| //Ignore |
| } |
| } |
| return null; |
| } |
| |
| /** |
| * Opens a Java editor for the given element if the element is a Java compilation unit or a Java |
| * class file. |
| * |
| * @return the IEditorPart or null if wrong element type or opening failed |
| */ |
| public static IEditorPart openInEditor(JavaClass javaClass, IProject aProject) throws JavaModelException, PartInitException { |
| return openInEditor(javaClass, getJavaProject(aProject)); |
| } |
| |
| /** |
| * Opens a Java editor for the given element if the element is a Java compilation unit or a Java |
| * class file. |
| * |
| * @return the IEditorPart or null if wrong element type or opening failed |
| */ |
| public static IEditorPart openInEditor(JavaClass javaClass, IJavaProject javaProject) throws JavaModelException, PartInitException { |
| if (javaClass == null || javaProject == null) |
| return null; |
| IType type = getType(javaClass); |
| if (type == null) |
| return openInEditor(getCompilationUnit(javaClass, javaProject)); |
| return EditorUtility.openInEditor(type); |
| } |
| |
| |
| /** |
| * Opens a Java editor for the given element if the element is a Java compilation unit or a Java |
| * class file. |
| * |
| * @return the IEditorPart or null if wrong element type or opening failed |
| */ |
| public static IEditorPart openInEditor(JavaClass javaClass, IJavaProject javaProject, String editorId) throws JavaModelException, PartInitException { |
| return openInEditor(getCompilationUnit(javaClass, javaProject), editorId); |
| } |
| |
| /** |
| * Opens a Java editor for the given element if the element is a Java compilation unit or a Java |
| * class file. |
| * |
| * @return the IEditorPart or null if wrong element type or opening failed |
| */ |
| public static IEditorPart openInEditor(ICompilationUnit aCompilationUnit) throws JavaModelException, PartInitException { |
| return EditorUtility.openInEditor(aCompilationUnit); |
| } |
| |
| /** |
| * Opens a Java editor for the given element if the element is a Java compilation unit or a Java |
| * class file. |
| * |
| * @return the IEditorPart or null if wrong element type or opening failed |
| */ |
| public static IEditorPart openInEditor(ICompilationUnit aCompilationUnit, String editorId) throws JavaModelException, PartInitException { |
| return openInEditor(EditorUtility.getEditorInput(aCompilationUnit), editorId); |
| } |
| |
| private static IEditorPart openInEditor(IEditorInput input, String editorID) throws PartInitException { |
| if (input != null) { |
| IWorkbenchPage p = J2EEUIPlugin.getActiveWorkbenchWindow().getActivePage(); |
| if (p != null) |
| return p.openEditor(input, editorID, true); |
| } |
| return null; |
| } |
| } |