/*******************************************************************************
* Copyright (c) 2012 VMWare, 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:
* VMWare, Inc. - initial API and implementation
*******************************************************************************/
package org.grails.ide.eclipse.runonserver;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.wst.common.project.facet.core.IDelegate;
import org.eclipse.wst.common.project.facet.core.IFacetedProject;
import org.eclipse.wst.common.project.facet.core.IProjectFacet;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
import org.grails.ide.eclipse.core.GrailsCoreActivator;
import org.grails.ide.eclipse.core.internal.GrailsNature;
/**
* @author Kris De Volder
* @author Christian Dupuis
* @since 2.5.1
*/
public class GrailsAppFacet {
public static final String ID = "grails.app";
public static final IProjectFacet FACET = ProjectFacetsManager.getProjectFacet(ID);
public static boolean hasFacet(IProject _project) {
try {
IFacetedProject project = ProjectFacetsManager.create(_project);
return project.hasProjectFacet(FACET);
} catch (CoreException e) {
GrailsCoreActivator.log(e);
return false;
}
}
public static void addFacetIfNeeded(IProject project) throws CoreException {
if (!hasFacet(project)) {
addFacet(project);
}
}
public static void addFacet(IProject _project) throws CoreException {
Assert.isLegal(!hasFacet(_project));
IFacetedProject project = ProjectFacetsManager.create(_project);
project.installProjectFacet(FACET.getDefaultVersion(), null, null);
}
public static class InstallDelegate implements IDelegate {
public void execute(IProject project, IProjectFacetVersion fv,
Object config, IProgressMonitor monitor) throws CoreException {
//There really isn't much to do here. We just check if this project is a GrailsApp.
if (!GrailsNature.isGrailsAppProject(project)) {
throw new CoreException(new Status(IStatus.ERROR, RunOnServerPlugin.PLUGIN_ID, "Grails App Facet can only be installed on Grails App projects"));
}
}
}
}