/**
* 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.deployment.helper;
import com.liferay.gradle.util.FileUtil;
import com.liferay.gradle.util.GradleUtil;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.gradle.api.Project;
import org.gradle.api.file.FileCollection;
import org.gradle.api.file.FileTree;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.JavaExec;
import org.gradle.api.tasks.Optional;
import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.SkipWhenEmpty;
import org.gradle.util.GUtil;
/**
* @author Andrea Di Giorgi
*/
public class BuildDeploymentHelperTask extends JavaExec {
public BuildDeploymentHelperTask() {
setMain("com.liferay.deployment.helper.DeploymentHelper");
}
public BuildDeploymentHelperTask deploymentFiles(
Iterable<?> deploymentFiles) {
GUtil.addToCollection(_deploymentFiles, deploymentFiles);
return this;
}
public BuildDeploymentHelperTask deploymentFiles(
Object... deploymentFiles) {
return deploymentFiles(Arrays.asList(deploymentFiles));
}
@Override
public void exec() {
setArgs(getCompleteArgs());
super.exec();
}
public FileCollection getDeploymentFiles() {
Project project = getProject();
return project.files(_deploymentFiles);
}
@InputFiles
@SkipWhenEmpty
public FileCollection getDeploymentInputFiles() {
Project project = getProject();
List<Object> inputFiles = new ArrayList<>();
for (File deploymentFile : getDeploymentFiles()) {
if (deploymentFile.isDirectory()) {
FileTree fileTree = getJarsFileTree(deploymentFile);
inputFiles.add(fileTree);
}
else {
inputFiles.add(deploymentFile);
}
}
return project.files(inputFiles);
}
@Input
@Optional
public File getDeploymentPath() {
return GradleUtil.toFile(getProject(), _deploymentPath);
}
@OutputFile
public File getOutputFile() {
return GradleUtil.toFile(getProject(), _outputFile);
}
public void setDeploymentFiles(Iterable<?> deploymentFiles) {
_deploymentFiles.clear();
deploymentFiles(deploymentFiles);
}
public void setDeploymentFiles(Object... deploymentFiles) {
setDeploymentFiles(Arrays.asList(deploymentFiles));
}
public void setDeploymentPath(Object deploymentPath) {
_deploymentPath = deploymentPath;
}
public void setOutputFile(Object outputFile) {
_outputFile = outputFile;
}
protected List<String> getCompleteArgs() {
List<String> completeArgs = new ArrayList<>();
GUtil.addToCollection(completeArgs, getArgs());
completeArgs.add("--fileNames=" + getDeploymentFileNames());
completeArgs.add(
"--outputFile=" + FileUtil.getAbsolutePath(getOutputFile()));
File deploymentPath = getDeploymentPath();
if (deploymentPath != null) {
completeArgs.add(
"--path=" + FileUtil.getAbsolutePath(deploymentPath));
}
return completeArgs;
}
protected String getDeploymentFileNames() {
StringBuilder sb = new StringBuilder();
for (File file : getDeploymentFiles()) {
sb.append(FileUtil.getAbsolutePath(file));
sb.append(',');
}
sb.setLength(sb.length() - 1);
return sb.toString();
}
protected FileTree getJarsFileTree(File dir) {
Project project = getProject();
Map<String, Object> args = new HashMap<>();
args.put("dir", dir);
args.put("include", "**/*.jar");
return project.fileTree(args);
}
private final List<Object> _deploymentFiles = new ArrayList<>();
private Object _deploymentPath;
private Object _outputFile;
}