<filename>gwt-gradle-plugin/src/main/java/de/richsource/gradle/plugins/gwt/GwtCompilerPlugin.java
/**
 * Copyright (C) 2013-2014 <NAME>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package de.richsource.gradle.plugins.gwt;

import java.io.File;

import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.plugins.JavaBasePlugin;
import org.gradle.api.plugins.JavaPlugin;

public class GwtCompilerPlugin implements Plugin<Project> {
	public static final String OUT_DIR = "out";
	public static final String DRAFT_OUT_DIR = "draftOut";
	
	public static final String TASK_COMPILE_GWT = "compileGwt";
	public static final String TASK_DRAFT_COMPILE_GWT = "draftCompileGwt";
	public static final String TASK_CHECK = "checkGwt";

	@Override
	public void apply(final Project project) {
		project.getPlugins().apply(GwtBasePlugin.class);
		
		final File gwtBuildDir = new File(project.getBuildDir(), GwtBasePlugin.BUILD_DIR);
		
		final GwtCompile compileTask = project.getTasks().create(TASK_COMPILE_GWT, GwtCompile.class);
		compileTask.setWar(new File(gwtBuildDir, OUT_DIR));
		compileTask.setDescription("Runs the GWT compiler to translate Java sources to JavaScript for production ready output");
		compileTask.dependsOn(JavaPlugin.COMPILE_JAVA_TASK_NAME, JavaPlugin.PROCESS_RESOURCES_TASK_NAME);
		
		final GwtDraftCompile draftCompileTask = project.getTasks().create(TASK_DRAFT_COMPILE_GWT, GwtDraftCompile.class);
		draftCompileTask.setWar(new File(gwtBuildDir, DRAFT_OUT_DIR));
		draftCompileTask.setDescription("Runs the GWT compiler to produce draft quality output used for development");
		draftCompileTask.dependsOn(JavaPlugin.COMPILE_JAVA_TASK_NAME, JavaPlugin.PROCESS_RESOURCES_TASK_NAME);
		
		final GwtCheck gwtCheck = project.getTasks().create(TASK_CHECK, GwtCheck.class);
		gwtCheck.setDescription("Runs the GWT compiler to validate the relevant sources");
		gwtCheck.dependsOn(JavaPlugin.COMPILE_JAVA_TASK_NAME, JavaPlugin.PROCESS_RESOURCES_TASK_NAME);
		gwtCheck.setGroup(JavaBasePlugin.VERIFICATION_GROUP);
	}
}
