/******************************************************************************* * 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; } }