/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.gradle.plugins.tlddoc.builder; import com.liferay.gradle.plugins.tlddoc.builder.tasks.TLDDocTask; import com.liferay.gradle.util.GradleUtil; import groovy.lang.Closure; import java.io.File; import java.util.Set; import java.util.concurrent.Callable; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; import org.gradle.api.file.FileCollection; import org.gradle.api.invocation.Gradle; import org.gradle.api.plugins.BasePlugin; import org.gradle.api.plugins.JavaBasePlugin; import org.gradle.api.plugins.PluginContainer; import org.gradle.api.tasks.Copy; import org.gradle.api.tasks.TaskInputs; import org.gradle.api.tasks.bundling.Jar; /** * @author Andrea Di Giorgi */ public class AppTLDDocBuilderPlugin implements Plugin<Project> { public static final String APP_TLDDOC_TASK_NAME = "appTLDDoc"; public static final String COPY_APP_TLDDOC_RESOURCES_TASK_NAME = "copyAppTLDDocResources"; public static final String JAR_APP_TLDDOC_TASK_NAME = "jarAppTLDDoc"; public static final String PLUGIN_NAME = "appTLDDocBuilder"; @Override public void apply(Project project) { GradleUtil.applyPlugin(project, BasePlugin.class); final AppTLDDocBuilderExtension appTLDDocBuilderExtension = GradleUtil.addExtension( project, PLUGIN_NAME, AppTLDDocBuilderExtension.class); Configuration tlddocConfiguration = TLDDocBuilderPlugin.addConfigurationTLDDoc(project); final Copy copyAppTLDDocResourcesTask = _addTaskCopyAppTLDDocResources( project); final TLDDocTask appTLDDocTask = _addTaskAppTLDDoc( copyAppTLDDocResourcesTask, tlddocConfiguration); _addTaskJarAppTLDDoc(appTLDDocTask); Gradle gradle = project.getGradle(); gradle.afterProject( new Closure<Void>(project) { @SuppressWarnings("unused") public void doCall(Project subproject) { Set<Project> subprojects = appTLDDocBuilderExtension.getSubprojects(); PluginContainer pluginContainer = subproject.getPlugins(); if (subprojects.contains(subproject) && pluginContainer.hasPlugin(TLDDocBuilderPlugin.class)) { _configureTaskAppTLDDoc(appTLDDocTask, subproject); _configureTaskCopyAppTLDDocResources( copyAppTLDDocResourcesTask, subproject); } } }); } private TLDDocTask _addTaskAppTLDDoc( Copy copyAppTLDDocResourcesTask, FileCollection classpath) { final Project project = copyAppTLDDocResourcesTask.getProject(); TLDDocTask tlddocTask = GradleUtil.addTask( project, APP_TLDDOC_TASK_NAME, TLDDocTask.class); tlddocTask.dependsOn(copyAppTLDDocResourcesTask); tlddocTask.setClasspath(classpath); tlddocTask.setDescription( "Generates tag library documentation for the app."); tlddocTask.setDestinationDir( new Callable<File>() { @Override public File call() throws Exception { return new File(project.getBuildDir(), "docs/tlddoc"); } }); tlddocTask.setGroup(JavaBasePlugin.DOCUMENTATION_GROUP); return tlddocTask; } private Copy _addTaskCopyAppTLDDocResources(final Project project) { Copy copy = GradleUtil.addTask( project, COPY_APP_TLDDOC_RESOURCES_TASK_NAME, Copy.class); copy.into( new Callable<File>() { @Override public File call() throws Exception { TLDDocTask appTLDDocTask = (TLDDocTask)GradleUtil.getTask( project, APP_TLDDOC_TASK_NAME); return appTLDDocTask.getDestinationDir(); } }); copy.setDescription("Copies tag library documentation resources."); return copy; } private Jar _addTaskJarAppTLDDoc(TLDDocTask tlddocTask) { Jar jar = GradleUtil.addTask( tlddocTask.getProject(), JAR_APP_TLDDOC_TASK_NAME, Jar.class); jar.from(tlddocTask); jar.setClassifier("taglibdoc"); jar.setDescription( "Assembles a jar archive containing the tag library " + "documentation files for this app."); jar.setGroup(BasePlugin.BUILD_GROUP); return jar; } private void _configureTaskAppTLDDoc( TLDDocTask appTLDDocTask, Project subproject) { Task task = GradleUtil.getTask( subproject, TLDDocBuilderPlugin.VALIDATE_TLD_TASK_NAME); appTLDDocTask.dependsOn(task); TLDDocTask tlddocTask = (TLDDocTask)GradleUtil.getTask( subproject, TLDDocBuilderPlugin.TLDDOC_TASK_NAME); appTLDDocTask.source(tlddocTask.getSource()); } private void _configureTaskCopyAppTLDDocResources( Copy copyAppTLDDocResourcesTask, Project subproject) { Copy copy = (Copy)GradleUtil.getTask( subproject, TLDDocBuilderPlugin.COPY_TLDDOC_RESOURCES_TASK_NAME); TaskInputs taskInputs = copy.getInputs(); copyAppTLDDocResourcesTask.from(taskInputs.getFiles()); } }