/**
* 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.service.builder;
import com.liferay.gradle.util.FileUtil;
import com.liferay.gradle.util.GradleUtil;
import com.liferay.gradle.util.Validator;
import com.liferay.portal.tools.service.builder.ServiceBuilderArgs;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.gradle.api.Project;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.JavaExec;
import org.gradle.api.tasks.Optional;
import org.gradle.util.CollectionUtils;
import org.gradle.util.GUtil;
/**
* @author Andrea Di Giorgi
*/
public class BuildServiceTask extends JavaExec {
public BuildServiceTask() {
modelHintsConfigs((Object[])ServiceBuilderArgs.MODEL_HINTS_CONFIGS);
readOnlyPrefixes((Object[])ServiceBuilderArgs.READ_ONLY_PREFIXES);
resourceActionsConfigs(
(Object[])ServiceBuilderArgs.RESOURCE_ACTION_CONFIGS);
setMain("com.liferay.portal.tools.service.builder.ServiceBuilder");
springNamespaces("beans");
systemProperty("file.encoding", StandardCharsets.UTF_8.name());
}
@Override
public void exec() {
setArgs(getCompleteArgs());
super.exec();
}
@Input
public File getApiDir() {
return GradleUtil.toFile(getProject(), _apiDir);
}
@Input
public String getBeanLocatorUtil() {
return GradleUtil.toString(_beanLocatorUtil);
}
@Input
public long getBuildNumber() {
return _buildNumber;
}
@Input
public File getHbmFile() {
return GradleUtil.toFile(getProject(), _hbmFile);
}
@Input
public File getImplDir() {
return GradleUtil.toFile(getProject(), _implDir);
}
@InputFile
public File getInputFile() {
return GradleUtil.toFile(getProject(), _inputFile);
}
@Input
public List<String> getModelHintsConfigs() {
return GradleUtil.toStringList(_modelHintsConfigs);
}
@Input
public File getModelHintsFile() {
return GradleUtil.toFile(getProject(), _modelHintsFile);
}
@Input
public String getPluginName() {
return GradleUtil.toString(_pluginName);
}
@Input
public String getPropsUtil() {
return GradleUtil.toString(_propsUtil);
}
@Input
public List<String> getReadOnlyPrefixes() {
return GradleUtil.toStringList(_readOnlyPrefixes);
}
@Input
public List<String> getResourceActionsConfigs() {
return GradleUtil.toStringList(_resourceActionsConfigs);
}
@Input
public File getResourcesDir() {
return GradleUtil.toFile(getProject(), _resourcesDir);
}
@Input
public File getSpringFile() {
return GradleUtil.toFile(getProject(), _springFile);
}
@Input
public List<String> getSpringNamespaces() {
return GradleUtil.toStringList(_springNamespaces);
}
@Input
public File getSqlDir() {
return GradleUtil.toFile(getProject(), _sqlDir);
}
@Input
public String getSqlFileName() {
return GradleUtil.toString(_sqlFileName);
}
@Input
public String getSqlIndexesFileName() {
return GradleUtil.toString(_sqlIndexesFileName);
}
@Input
public String getSqlSequencesFileName() {
return GradleUtil.toString(_sqlSequencesFileName);
}
@Input
@Optional
public String getTargetEntityName() {
return GradleUtil.toString(_targetEntityName);
}
@Input
@Optional
public File getTestDir() {
return GradleUtil.toFile(getProject(), _testDir);
}
@Input
public boolean isAutoImportDefaultReferences() {
return _autoImportDefaultReferences;
}
@Input
public boolean isAutoNamespaceTables() {
return _autoNamespaceTables;
}
@Input
public boolean isBuildNumberIncrement() {
return _buildNumberIncrement;
}
@Input
public boolean isOsgiModule() {
return _osgiModule;
}
public BuildServiceTask modelHintsConfigs(
Iterable<Object> modelHintsConfigs) {
GUtil.addToCollection(_modelHintsConfigs, modelHintsConfigs);
return this;
}
public BuildServiceTask modelHintsConfigs(Object... modelHintsConfigs) {
return modelHintsConfigs(Arrays.asList(modelHintsConfigs));
}
public BuildServiceTask readOnlyPrefixes(
Iterable<Object> readOnlyPrefixes) {
GUtil.addToCollection(_readOnlyPrefixes, readOnlyPrefixes);
return this;
}
public BuildServiceTask readOnlyPrefixes(Object... readOnlyPrefixes) {
return readOnlyPrefixes(Arrays.asList(readOnlyPrefixes));
}
public BuildServiceTask resourceActionsConfigs(
Iterable<Object> resourceActionsConfigs) {
GUtil.addToCollection(_resourceActionsConfigs, resourceActionsConfigs);
return this;
}
public BuildServiceTask resourceActionsConfigs(
Object... resourceActionsConfigs) {
return resourceActionsConfigs(Arrays.asList(resourceActionsConfigs));
}
public void setApiDir(Object apiDir) {
_apiDir = apiDir;
}
public void setAutoImportDefaultReferences(
boolean autoImportDefaultReferences) {
_autoImportDefaultReferences = autoImportDefaultReferences;
}
public void setAutoNamespaceTables(boolean autoNamespaceTables) {
_autoNamespaceTables = autoNamespaceTables;
}
public void setBeanLocatorUtil(Object beanLocatorUtil) {
_beanLocatorUtil = beanLocatorUtil;
}
public void setBuildNumber(long buildNumber) {
_buildNumber = buildNumber;
}
public void setBuildNumberIncrement(boolean buildNumberIncrement) {
_buildNumberIncrement = buildNumberIncrement;
}
public void setHbmFile(Object hbmFile) {
_hbmFile = hbmFile;
}
public void setImplDir(Object implDir) {
_implDir = implDir;
}
public void setInputFile(Object inputFile) {
_inputFile = inputFile;
}
public void setModelHintsConfigs(Iterable<Object> modelHintsConfigs) {
_modelHintsConfigs.clear();
modelHintsConfigs(modelHintsConfigs);
}
public void setModelHintsConfigs(Object... modelHintsConfigs) {
setModelHintsConfigs(Arrays.asList(modelHintsConfigs));
}
public void setModelHintsFile(Object modelHintsFile) {
_modelHintsFile = modelHintsFile;
}
public void setOsgiModule(boolean osgiModule) {
_osgiModule = osgiModule;
}
public void setPluginName(Object pluginName) {
_pluginName = pluginName;
}
public void setPropsUtil(Object propsUtil) {
_propsUtil = propsUtil;
}
public void setReadOnlyPrefixes(Iterable<Object> readOnlyPrefixes) {
_readOnlyPrefixes.clear();
readOnlyPrefixes(readOnlyPrefixes);
}
public void setReadOnlyPrefixes(Object... readOnlyPrefixes) {
setReadOnlyPrefixes(Arrays.asList(readOnlyPrefixes));
}
public void setResourceActionsConfigs(
Iterable<Object> resourceActionsConfigs) {
_resourceActionsConfigs.clear();
resourceActionsConfigs(resourceActionsConfigs);
}
public void setResourceActionsConfigs(Object... resourceActionsConfigs) {
setResourceActionsConfigs(Arrays.asList(resourceActionsConfigs));
}
public void setResourcesDir(Object resourcesDir) {
_resourcesDir = resourcesDir;
}
public void setSpringFile(Object springFile) {
_springFile = springFile;
}
public void setSpringNamespaces(Iterable<Object> springNamespaces) {
_springNamespaces.clear();
springNamespaces(springNamespaces);
}
public void setSpringNamespaces(Object... springNamespaces) {
setSpringNamespaces(Arrays.asList(springNamespaces));
}
public void setSqlDir(Object sqlDir) {
_sqlDir = sqlDir;
}
public void setSqlFileName(Object sqlFileName) {
_sqlFileName = sqlFileName;
}
public void setSqlIndexesFileName(Object sqlIndexesFileName) {
_sqlIndexesFileName = sqlIndexesFileName;
}
public void setSqlSequencesFileName(Object sqlSequencesFileName) {
_sqlSequencesFileName = sqlSequencesFileName;
}
public void setTargetEntityName(Object targetEntityName) {
_targetEntityName = targetEntityName;
}
public void setTestDir(Object testDir) {
_testDir = testDir;
}
public BuildServiceTask springNamespaces(
Iterable<Object> springNamespaces) {
GUtil.addToCollection(_springNamespaces, springNamespaces);
return this;
}
public BuildServiceTask springNamespaces(Object... springNamespaces) {
return springNamespaces(Arrays.asList(springNamespaces));
}
protected List<String> getCompleteArgs() {
List<String> args = new ArrayList<>(getArgs());
args.add("service.api.dir=" + _relativize(getApiDir()));
args.add(
"service.auto.import.default.references=" +
isAutoImportDefaultReferences());
args.add("service.auto.namespace.tables=" + isAutoNamespaceTables());
args.add("service.bean.locator.util=" + getBeanLocatorUtil());
args.add("service.build.number.increment=" + isBuildNumberIncrement());
args.add("service.build.number=" + getBuildNumber());
args.add("service.hbm.file=" + _relativize(getHbmFile()));
args.add("service.impl.dir=" + _relativize(getImplDir()));
args.add("service.input.file=" + _relativize(getInputFile()));
args.add(
"service.model.hints.configs=" +
CollectionUtils.join(",", getCompleteModelHintsConfigs()));
args.add(
"service.model.hints.file=" + _relativize(getModelHintsFile()));
args.add("service.osgi.module=" + isOsgiModule());
args.add("service.plugin.name=" + getPluginName());
args.add("service.props.util=" + getPropsUtil());
args.add(
"service.read.only.prefixes=" +
CollectionUtils.join(",", getReadOnlyPrefixes()));
args.add(
"service.resource.actions.configs=" +
CollectionUtils.join(",", getResourceActionsConfigs()));
args.add("service.resources.dir=" + _relativize(getResourcesDir()));
args.add("service.spring.file=" + _relativize(getSpringFile()));
args.add(
"service.spring.namespaces=" +
CollectionUtils.join(",", getSpringNamespaces()));
args.add("service.sql.dir=" + _relativize(getSqlDir()));
args.add("service.sql.file=" + getSqlFileName());
args.add("service.sql.indexes.file=" + getSqlIndexesFileName());
args.add("service.sql.sequences.file=" + getSqlSequencesFileName());
String targetEntityName = getTargetEntityName();
if (Validator.isNull(targetEntityName)) {
targetEntityName = "${service.target.entity.name}";
}
args.add("service.target.entity.name=" + targetEntityName);
File testDir = getTestDir();
if (testDir != null) {
args.add("service.test.dir=" + _relativize(testDir));
}
return args;
}
protected List<String> getCompleteModelHintsConfigs() {
List<String> modelHintsConfigs = getModelHintsConfigs();
File modelHintsFile = getModelHintsFile();
Project project = getProject();
boolean found = false;
for (String config : modelHintsConfigs) {
if (config.startsWith("classpath*:")) {
continue;
}
File configFile = project.file(config);
if (configFile.equals(modelHintsFile)) {
found = true;
break;
}
}
if (!found) {
modelHintsConfigs.add(_relativize(modelHintsFile));
}
return modelHintsConfigs;
}
private String _relativize(File file) {
String relativePath = FileUtil.relativize(file, getWorkingDir());
return relativePath.replace('\\', '/');
}
private Object _apiDir;
private boolean _autoImportDefaultReferences = true;
private boolean _autoNamespaceTables = true;
private Object _beanLocatorUtil =
"com.liferay.util.bean.PortletBeanLocatorUtil";
private long _buildNumber = 1;
private boolean _buildNumberIncrement = true;
private Object _hbmFile;
private Object _implDir;
private Object _inputFile;
private final Set<Object> _modelHintsConfigs = new LinkedHashSet<>();
private Object _modelHintsFile;
private boolean _osgiModule;
private Object _pluginName;
private Object _propsUtil;
private final Set<Object> _readOnlyPrefixes = new HashSet<>();
private final Set<Object> _resourceActionsConfigs = new LinkedHashSet<>();
private Object _resourcesDir;
private Object _springFile;
private final Set<Object> _springNamespaces = new LinkedHashSet<>();
private Object _sqlDir;
private Object _sqlFileName = "tables.sql";
private Object _sqlIndexesFileName = "indexes.sql";
private Object _sqlSequencesFileName = "sequences.sql";
private Object _targetEntityName;
private Object _testDir;
}