allow all configs from gradle
[yosql.git] / yosql-tooling / yosql-tooling-gradle / src / main / java / wtf / metio / yosql / tooling / gradle / YoSqlPlugin.java
blob9dcad017fa88a9976412ee85bc4b08d89af7c0f2
1 /*
2 * This file is part of yosql. It is subject to the license terms in the LICENSE file found in the top-level
3 * directory of this distribution and at http://creativecommons.org/publicdomain/zero/1.0/. No part of yosql,
4 * including this file, may be copied, modified, propagated, or distributed except according to the terms contained
5 * in the LICENSE file.
6 */
8 package wtf.metio.yosql.tooling.gradle;
10 import org.gradle.api.Plugin;
11 import org.gradle.api.Project;
12 import org.gradle.api.file.ProjectLayout;
13 import org.gradle.api.model.ObjectFactory;
14 import org.gradle.api.plugins.JavaPlugin;
15 import org.gradle.api.plugins.JavaPluginConvention;
16 import org.gradle.api.tasks.SourceSet;
17 import org.gradle.api.tasks.compile.JavaCompile;
19 /**
20 * The YoSQL Gradle plugin. It configures the {@link YoSqlExtension} and registers the {@link GenerateTask}.
22 public class YoSqlPlugin implements Plugin<Project> {
24 @Override
25 public void apply(final Project project) {
26 final var extension = createExtension(project);
27 configureConventions(extension, project.getLayout(), project.getObjects());
28 registerTask(project, extension);
29 configureSourceSets(project, extension);
32 private YoSqlExtension createExtension(final Project project) {
33 return project.getExtensions().create("yosql", YoSqlExtension.class);
36 private void configureConventions(final YoSqlExtension extension, final ProjectLayout layout, final ObjectFactory objects) {
37 extension.getFiles().configureConventions(layout);
38 extension.getJdbc().configureConventions(objects);
39 extension.getAnnotations().configureConventions();
40 extension.getApi().configureConventions();
41 extension.getJava().configureConventions();
42 extension.getRepositories().configureConventions();
43 extension.getResources().configureConventions();
46 private void registerTask(final Project project, final YoSqlExtension extension) {
47 final var generate = project.getTasks().register("generateJavaCode",
48 GenerateTask.class, task -> configureTask(extension, task));
49 project.getTasks().withType(JavaCompile.class, task -> task.doFirst("yosql",
50 action -> generate.get().generateCode()));
53 private void configureTask(final YoSqlExtension extension, final GenerateTask task) {
54 task.getAnnotations().set(extension.getAnnotations().asConfiguration());
55 task.getApi().set(extension.getApi().asConfiguration());
56 task.getFiles().set(extension.getFiles().asConfiguration());
57 task.getJdbc().set(extension.getJdbc().asConfiguration());
58 task.getJava().set(extension.getJava().asConfiguration());
59 task.getRepositories().set(extension.getRepositories().asConfiguration());
60 task.getResources().set(extension.getResources().asConfiguration());
63 private void configureSourceSets(final Project project, final YoSqlExtension extension) {
64 project.getPlugins().withType(JavaPlugin.class, plugin -> addSourceSet(project, extension));
67 private void addSourceSet(final Project project, final YoSqlExtension extension) {
68 project.getConvention()
69 .getPlugin(JavaPluginConvention.class)
70 .getSourceSets()
71 .getByName(SourceSet.MAIN_SOURCE_SET_NAME)
72 .getJava()
73 .srcDir(extension.getFiles().getOutputBaseDirectory().get());