/******************************************************************************* * Copyright (c) 2007-2008 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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 * * Contributor: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.hibernate.eclipse.jdt.ui.internal.jpa.common; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.IClassFile; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.ASTParser; import org.eclipse.jdt.core.dom.ITypeBinding; import org.eclipse.jdt.core.dom.MethodDeclaration; /** * Compilation unit common functions * * @author Vitali */ public class Utils { static public org.eclipse.jdt.core.dom.CompilationUnit getCompilationUnit( ICompilationUnit source, boolean bindings) { ASTParser parser = ASTParser.newParser(AST.JLS8); parser.setSource(source); parser.setResolveBindings(bindings); org.eclipse.jdt.core.dom.CompilationUnit result = (org.eclipse.jdt.core.dom.CompilationUnit) parser.createAST(null); return result; } static public ICompilationUnit findCompilationUnit(IJavaProject javaProject, String fullyQualifiedName) { IType lwType = findType(javaProject, fullyQualifiedName); if (lwType != null) { return lwType.getCompilationUnit(); } return null; } static public IType findType(IJavaProject javaProject, String fullyQualifiedName) { IType lwType = null; if (javaProject != null) { try { lwType = javaProject.findType(fullyQualifiedName,(IProgressMonitor)null); } catch (JavaModelException e) { // just ignore it! //HibernateConsolePlugin.getDefault().logErrorMessage("JavaModelException: ", e); //$NON-NLS-1$ } } return lwType; } static public ICompilationUnit findCompilationUnit(String fullyQualifiedName) { IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IProject[] projects = root.getProjects(); ICompilationUnit resCompilationUnit = null; for (int i = 0; i < projects.length; i++) { if (projects[i].exists()){/*It is not required project be opened, so use exists method*/ IJavaProject javaProject = JavaCore.create(projects[i]); resCompilationUnit = findCompilationUnit(javaProject, fullyQualifiedName); if (resCompilationUnit != null) { break; } } } return resCompilationUnit; } static public IProject findProject(String projectName) { IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IProject[] projects = root.getProjects(); IProject res = null; for (int i = 0; i < projects.length && res == null; i++) { if (projects[i].exists() && projects[i].getName().compareTo(projectName) == 0) { res = projects[i]; } } return res; } static public IJavaProject findJavaProject(String projectName) { IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IProject[] projects = root.getProjects(); IJavaProject res = null; for (int i = 0; i < projects.length && res == null; i++) { if (projects[i].exists() && projects[i].getName().compareTo(projectName) == 0) { IJavaProject javaProject = JavaCore.create(projects[i]); res = javaProject; } } return res; } static public ICompilationUnit[] findCompilationUnits(IJavaProject javaProject, IPath path) { IJavaElement javaElement = null; try { javaElement = javaProject.findElement(path.makeRelative()); } catch (JavaModelException e) { // just ignore it! //HibernateConsolePlugin.getDefault().logErrorMessage("JavaModelException: ", e); //$NON-NLS-1$ } ICompilationUnit[] res = null; if (javaElement != null) { if (javaElement instanceof ICompilationUnit) { res = new ICompilationUnit[]{ (ICompilationUnit)javaElement }; } else if (javaElement instanceof IPackageFragment) { try { res = ((IPackageFragment)javaElement).getCompilationUnits(); } catch (JavaModelException e) { // just ignore it! //HibernateConsolePlugin.getDefault().logErrorMessage("JavaModelException: ", e); //$NON-NLS-1$ } } else if (javaElement instanceof IClassFile) { } } return res; } static public String refTypeToStr(RefType rt) { if (rt == RefType.ONE2ONE) { return "1-to-1"; //$NON-NLS-1$ } else if (rt == RefType.ONE2MANY) { return "1-to-n"; //$NON-NLS-1$ } else if (rt == RefType.MANY2ONE) { return "n-to-1"; //$NON-NLS-1$ } else if (rt == RefType.MANY2MANY) { return "n-to-n"; //$NON-NLS-1$ } return "undef"; //$NON-NLS-1$ } static public RefType strToRefType(String str) { if ("1-to-1".equals(str)) { //$NON-NLS-1$ return RefType.ONE2ONE; } else if ("1-to-n".equals(str)) { //$NON-NLS-1$ return RefType.ONE2MANY; } else if ("n-to-1".equals(str)) { //$NON-NLS-1$ return RefType.MANY2ONE; } else if ("n-to-n".equals(str)) { //$NON-NLS-1$ return RefType.MANY2MANY; } return RefType.UNDEF; } static public String ownerTypeToStr(OwnerType ot) { if (ot == OwnerType.YES) { return "yes"; //$NON-NLS-1$ } else if (ot == OwnerType.NO) { return "no"; //$NON-NLS-1$ } return "undef"; //$NON-NLS-1$ } static public OwnerType strToOwnerType(String str) { str = str.toLowerCase(); if ("yes".equals(str)) { //$NON-NLS-1$ return OwnerType.YES; } else if ("no".equals(str)) { //$NON-NLS-1$ return OwnerType.NO; } return OwnerType.UNDEF; } public static boolean isImplementInterface(ITypeBinding[] interfaces, String parentInterface){ for (int i = 0; i < interfaces.length; i++) { ITypeBinding typeBinding = interfaces[i]; if (typeBinding==null) continue; if (parentInterface.equals(typeBinding.getBinaryName())) return true; if (isImplementInterface(typeBinding.getInterfaces(), parentInterface)) return true; } return false; } public static ITypeBinding[] getAllInterfaces(ITypeBinding tb){ ITypeBinding[] interfaces = tb.getInterfaces(); if (tb.isInterface()) { ITypeBinding[] allInterfaces = new ITypeBinding[interfaces.length + 1]; System.arraycopy(interfaces, 0, allInterfaces, 0, interfaces.length); allInterfaces[interfaces.length] = tb; interfaces = allInterfaces; } return interfaces; } public static String getFieldNameByGetter(MethodDeclaration node){ if (node.parameters().size() != 0) return null; String methodName = node.getName().getIdentifier(); if (methodName.startsWith("get") && methodName.length() > 3){ //$NON-NLS-1$ methodName = methodName.substring(3); return Character.toLowerCase(methodName.charAt(0)) + methodName.substring(1); } else if (methodName.startsWith("is") && methodName.length() > 2){ //$NON-NLS-1$ methodName = methodName.substring(2); return Character.toLowerCase(methodName.charAt(0)) + methodName.substring(1); } return null; } }