All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.liferay.gradle.plugins.internal.ServiceBuilderDefaultsPlugin Maven / Gradle / Ivy

/**
 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
 */

package com.liferay.gradle.plugins.internal;

import com.liferay.gradle.plugins.BaseDefaultsPlugin;
import com.liferay.gradle.plugins.LiferayBasePlugin;
import com.liferay.gradle.plugins.LiferayOSGiPlugin;
import com.liferay.gradle.plugins.db.support.DBSupportPlugin;
import com.liferay.gradle.plugins.db.support.task.CleanServiceBuilderTask;
import com.liferay.gradle.plugins.internal.util.GradleUtil;
import com.liferay.gradle.plugins.service.builder.BuildServiceTask;
import com.liferay.gradle.plugins.service.builder.ServiceBuilderPlugin;
import com.liferay.gradle.plugins.task.BuildDBTask;
import com.liferay.gradle.plugins.util.PortalTools;
import com.liferay.gradle.util.Validator;

import groovy.lang.Closure;

import java.io.File;

import java.util.concurrent.Callable;

import org.gradle.api.Action;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.file.CopySpec;
import org.gradle.api.file.DuplicatesStrategy;
import org.gradle.api.plugins.BasePlugin;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.PluginContainer;
import org.gradle.api.tasks.Copy;
import org.gradle.api.tasks.TaskContainer;
import org.gradle.api.tasks.TaskProvider;

/**
 * @author Andrea Di Giorgi
 */
public class ServiceBuilderDefaultsPlugin
	extends BaseDefaultsPlugin {

	public static final String BUILD_DB_TASK_NAME = "buildDB";

	public static final Plugin INSTANCE =
		new ServiceBuilderDefaultsPlugin();

	@Override
	protected void applyPluginDefaults(
		final Project project, ServiceBuilderPlugin serviceBuilderPlugin) {

		// Plugins

		GradleUtil.applyPlugin(project, DBSupportPlugin.class);

		// Dependencies

		PortalTools.addPortalToolDependencies(
			project, ServiceBuilderPlugin.CONFIGURATION_NAME, PortalTools.GROUP,
			_PORTAL_TOOL_NAME);

		// Tasks

		TaskProvider buildDBTaskProvider =
			GradleUtil.addTaskProvider(
				project, BUILD_DB_TASK_NAME, BuildDBTask.class);

		TaskProvider buildServiceTaskProvider =
			GradleUtil.getTaskProvider(
				project, ServiceBuilderPlugin.BUILD_SERVICE_TASK_NAME,
				BuildServiceTask.class);
		TaskProvider cleanServiceBuilderTaskProvider =
			GradleUtil.getTaskProvider(
				project, DBSupportPlugin.CLEAN_SERVICE_BUILDER_TASK_NAME,
				CleanServiceBuilderTask.class);
		TaskProvider processResourcesTaskProvider =
			GradleUtil.getTaskProvider(
				project, JavaPlugin.PROCESS_RESOURCES_TASK_NAME, Copy.class);

		_configureTaskBuildDBProvider(
			buildDBTaskProvider, buildServiceTaskProvider);
		_configureTaskCleanServiceBuilderProvider(
			buildServiceTaskProvider, cleanServiceBuilderTaskProvider);
		_configureTaskProcessResourcesProvider(
			buildServiceTaskProvider, processResourcesTaskProvider);

		// Containers

		TaskContainer taskContainer = project.getTasks();

		taskContainer.withType(
			BuildServiceTask.class,
			new Action() {

				@Override
				public void execute(BuildServiceTask buildServiceTask) {
					_configureTaskBuildService(buildServiceTask);
				}

			});

		PluginContainer pluginContainer = project.getPlugins();

		pluginContainer.withType(
			LiferayBasePlugin.class,
			new Action() {

				@Override
				public void execute(LiferayBasePlugin liferayBasePlugin) {
					TaskContainer taskContainer = project.getTasks();

					taskContainer.withType(
						BuildDBTask.class,
						new Action() {

							@Override
							public void execute(BuildDBTask buildDBTask) {
								_configureTaskBuildDBForLiferayBasePlugin(
									project, buildDBTask);
							}

						});
				}

			});

		pluginContainer.withType(
			LiferayOSGiPlugin.class,
			new Action() {

				@Override
				public void execute(LiferayOSGiPlugin liferayOSGiPlugin) {
					TaskContainer taskContainer = project.getTasks();

					taskContainer.withType(
						BuildServiceTask.class,
						new Action() {

							@Override
							public void execute(
								BuildServiceTask buildServiceTask) {

								_configureTaskBuildServiceForLiferayOSGiPlugin(
									buildServiceTask);
							}

						});
				}

			});
	}

	@Override
	protected Class getPluginClass() {
		return ServiceBuilderPlugin.class;
	}

	private ServiceBuilderDefaultsPlugin() {
	}

	private void _configureTaskBuildDBForLiferayBasePlugin(
		Project project, BuildDBTask buildDBTask) {

		// Configurations

		ConfigurationContainer configurationContainer =
			project.getConfigurations();

		Configuration portalConfiguration = configurationContainer.getByName(
			LiferayBasePlugin.PORTAL_CONFIGURATION_NAME);

		// Tasks

		buildDBTask.setClasspath(portalConfiguration);
	}

	private void _configureTaskBuildDBProvider(
		TaskProvider buildDBTaskProvider,
		final TaskProvider buildServiceTaskProvider) {

		buildDBTaskProvider.configure(
			new Action() {

				@Override
				public void execute(BuildDBTask buildDBTask) {
					buildDBTask.setDatabaseName("lportal");
					buildDBTask.setDatabaseTypes(
						"hypersonic", "mysql", "postgresql");
					buildDBTask.setDescription(
						"Builds database SQL scripts from the generic SQL " +
							"scripts.");
					buildDBTask.setGroup(BasePlugin.BUILD_GROUP);

					buildDBTask.setSqlDir(
						new Callable() {

							@Override
							public File call() throws Exception {
								BuildServiceTask buildServiceTask =
									buildServiceTaskProvider.get();

								return buildServiceTask.getSqlDir();
							}

						});
				}

			});
	}

	private void _configureTaskBuildService(BuildServiceTask buildServiceTask) {
		String incubationFeatures = GradleUtil.getProperty(
			buildServiceTask.getProject(),
			"service.builder.incubation.features", (String)null);

		if (Validator.isNotNull(incubationFeatures)) {
			buildServiceTask.setIncubationFeatures(
				incubationFeatures.split(","));
		}
	}

	private void _configureTaskBuildServiceForLiferayOSGiPlugin(
		BuildServiceTask buildServiceTask) {

		buildServiceTask.setOsgiModule(true);
	}

	private void _configureTaskCleanServiceBuilderProvider(
		final TaskProvider buildServiceTaskProvider,
		TaskProvider cleanServiceBuilderTaskProvider) {

		cleanServiceBuilderTaskProvider.configure(
			new Action() {

				@Override
				public void execute(
					CleanServiceBuilderTask cleanServiceBuilderTask) {

					cleanServiceBuilderTask.setServiceXmlFile(
						new Callable() {

							@Override
							public File call() throws Exception {
								BuildServiceTask buildServiceTask =
									buildServiceTaskProvider.get();

								return buildServiceTask.getInputFile();
							}

						});
				}

			});
	}

	@SuppressWarnings("serial")
	private void _configureTaskProcessResourcesProvider(
		final TaskProvider buildServiceTaskProvider,
		TaskProvider processResourcesTaskProvider) {

		processResourcesTaskProvider.configure(
			new Action() {

				@Override
				public void execute(Copy processResourcesCopy) {
					processResourcesCopy.setDuplicatesStrategy(
						DuplicatesStrategy.INCLUDE);

					processResourcesCopy.into(
						"META-INF",
						new Closure(processResourcesCopy) {

							@SuppressWarnings("unused")
							public void doCall(CopySpec copySpec) {
								BuildServiceTask buildServiceTask =
									buildServiceTaskProvider.get();

								File inputFile =
									buildServiceTask.getInputFile();

								File dir = inputFile.getParentFile();

								String dirName = dir.getName();

								if (!dirName.equals("META-INF")) {
									copySpec.from(inputFile);
								}
							}

						});
				}

			});
	}

	private static final String _PORTAL_TOOL_NAME =
		"com.liferay.portal.tools.service.builder";

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy