/******************************************************************************* * Copyright (c) 2012 Pivotal Software, Inc. * 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: * Pivotal Software, Inc. - initial API and implementation *******************************************************************************/ package org.grails.ide.eclipse.core.internal; import java.io.File; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectNature; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.grails.ide.eclipse.core.GrailsCoreActivator; /** * @author Christian Dupuis * @author Nieraj Singh * @author Andrew Eisenberg * @author Kris De Volder * @since 2.2.0 */ public class GrailsNature implements IProjectNature { public static final String NATURE_ID = GrailsCoreActivator.PLUGIN_ID+".nature"; public static final String OLD_NATURE_ID = GrailsCoreActivator.OLD_PLUGIN_ID + ".nature"; private IProject project; public void configure() throws CoreException { } public void deconfigure() throws CoreException { } public IProject getProject() { return this.project; } public void setProject(IProject project) { this.project = project; } /** * Determine whether a given project 'looks like' a Grails project based * on its contents, without relying on eclipse metadata. */ public static boolean looksLikeGrailsProject(IProject project) { if (project!=null && project.isAccessible()) { return project.getFolder("grails-app").exists() && project.getFile("application.properties").exists(); } return false; } /** * This expresses the same logic as looksLikeGrailsProject(IProject) but for * a situation where we have java.io.File rather than an Eclipse project. * (typically, this is because we are examining the project before it * has been imported so it doesn't yet exist in the workspace. */ public static boolean looksLikeGrailsProject(File project) { if (project!=null && project.isDirectory()) { return new File(project, "grails-app").isDirectory() && new File(project, "application.properties").isFile(); } return false; } public static boolean isGrailsProject(IProject project) { try { return project != null && project.isAccessible() && project.hasNature(GrailsNature.NATURE_ID); } catch (CoreException e) { GrailsCoreActivator.log(e); } return false; } public static boolean isGrailsPluginProject(IProject project) { if (!isGrailsProject(project)) { return false; } String pluginName = createPluginName(project.getName()); return project.getFile(pluginName).exists(); } public static boolean isGrailsAppProject(IProject project) { return isGrailsProject(project) && !isGrailsPluginProject(project); } /** * @param name * @return */ public static String createPluginName(String name) { if (name == null || name.length() == 0) { throw new IllegalArgumentException("Invalid grails project name"); } StringBuilder sb = new StringBuilder(); char[] nameArr = name.toCharArray(); sb.append(Character.toUpperCase(nameArr[0])); boolean prevWasDash = false; for (int i = 1; i < nameArr.length; i++) { if (nameArr[i] == '-') { prevWasDash = true; } else { if (prevWasDash) { sb.append(Character.toUpperCase(nameArr[i])); } else { sb.append(nameArr[i]); } prevWasDash = false; } } sb.append("GrailsPlugin.groovy"); return sb.toString(); } public static IPath createPathToPluginXml(IProject project) { return project.getLocation().append(createPluginName(project.getName())); } public static boolean hasOldGrailsNature(IProject project) { try { return project != null && project.isAccessible() && project.hasNature(GrailsNature.OLD_NATURE_ID); } catch (CoreException e) { GrailsCoreActivator.log(e); } return false; } }