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

com.liferay.gradle.plugins.lang.merger.LangMergerPlugin Maven / Gradle / Ivy

There is a newer version: 1.1.0
Show newest version
/**
 * 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.lang.merger;

import com.liferay.gradle.plugins.lang.merger.tasks.MergePropertiesTask;
import com.liferay.gradle.util.GradleUtil;

import java.io.File;

import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.Callable;

import org.gradle.api.Action;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.file.SourceDirectorySet;
import org.gradle.api.logging.Logger;
import org.gradle.api.logging.Logging;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.PluginContainer;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.SourceSetOutput;

/**
 * @author Andrea Di Giorgi
 */
public class LangMergerPlugin implements Plugin {

	public static final String MERGE_LANG_TASK_NAME = "mergeLang";

	@Override
	public void apply(Project project) {
		addTaskMergeLang(project);
	}

	protected MergePropertiesTask addTaskMergeLang(Project project) {
		final MergePropertiesTask mergePropertiesTask = GradleUtil.addTask(
			project, MERGE_LANG_TASK_NAME, MergePropertiesTask.class);

		mergePropertiesTask.setDescription("Merges language property files.");

		PluginContainer pluginContainer = project.getPlugins();

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

				@Override
				public void execute(JavaPlugin javaPlugin) {
					configureTaskMergeLangForJavaPlugin(mergePropertiesTask);
				}

			});

		return mergePropertiesTask;
	}

	protected void configureTaskMergeLangForJavaPlugin(
		MergePropertiesTask mergePropertiesTask) {

		mergePropertiesTask.mustRunAfter(
			JavaPlugin.PROCESS_RESOURCES_TASK_NAME);

		final Project project = mergePropertiesTask.getProject();

		final SourceSet sourceSet = GradleUtil.getSourceSet(
			project, SourceSet.MAIN_SOURCE_SET_NAME);

		mergePropertiesTask.setDestinationDir(
			new Callable() {

				@Override
				public File call() throws Exception {
					SourceSetOutput sourceSetOutput = sourceSet.getOutput();

					return new File(
						sourceSetOutput.getResourcesDir(), "content");
				}

			});

		final Project langProject = getLangProject(project);

		if (langProject != null) {
			if (_logger.isInfoEnabled()) {
				_logger.info("Using " + langProject + " as merge source");
			}

			mergePropertiesTask.setSourceDirs(
				new Callable() {

					@Override
					public File call() throws Exception {
						File contentDir = getContentDir(sourceSet);

						return langProject.file(
							project.relativePath(contentDir));
					}

				},
				new Callable() {

					@Override
					public File call() throws Exception {
						return getContentDir(sourceSet);
					}

				});
		}
		else if (_logger.isInfoEnabled()) {
			_logger.info(
				"Unable to find a language project to use as merge source");
		}

		Task classesTask = GradleUtil.getTask(
			project, JavaPlugin.CLASSES_TASK_NAME);

		classesTask.dependsOn(mergePropertiesTask);
	}

	protected File getContentDir(SourceSet sourceSet) {
		File resourcesDir = getSrcDir(sourceSet.getResources());

		return new File(resourcesDir, "content");
	}

	protected Project getLangProject(Project project) {
		Project parentProject = project.getParent();

		if (parentProject == null) {
			return null;
		}

		String langProjectPath =
			parentProject.getPath() + ":" + parentProject.getName() + "-lang";

		if (_logger.isDebugEnabled()) {
			_logger.debug("Looking for " + langProjectPath);
		}

		Project langProject = project.findProject(langProjectPath);

		if (langProject == null) {
			int index = langProjectPath.indexOf(':', 1);

			if (index != -1) {
				langProjectPath = langProjectPath.substring(index);

				if (_logger.isDebugEnabled()) {
					_logger.debug("Looking for " + langProjectPath);
				}

				langProject = project.findProject(langProjectPath);
			}
		}

		return langProject;
	}

	protected File getSrcDir(SourceDirectorySet sourceDirectorySet) {
		Set srcDirs = sourceDirectorySet.getSrcDirs();

		Iterator iterator = srcDirs.iterator();

		return iterator.next();
	}

	private static final Logger _logger = Logging.getLogger(
		LangMergerPlugin.class);

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy