/**
* 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.js.module.config.generator;
import com.liferay.gradle.plugins.node.tasks.ExecuteNodeScriptTask;
import com.liferay.gradle.util.FileUtil;
import com.liferay.gradle.util.GradleUtil;
import com.liferay.gradle.util.Validator;
import groovy.lang.Closure;
import java.io.File;
import java.util.List;
import java.util.Set;
import org.gradle.api.Action;
import org.gradle.api.Project;
import org.gradle.api.file.CopySpec;
import org.gradle.api.file.FileCollection;
import org.gradle.api.file.FileTree;
import org.gradle.api.file.FileTreeElement;
import org.gradle.api.specs.Spec;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.Optional;
import org.gradle.api.tasks.SkipWhenEmpty;
import org.gradle.api.tasks.util.PatternFilterable;
import org.gradle.api.tasks.util.PatternSet;
/**
* @author Andrea Di Giorgi
*/
public class ConfigJSModulesTask
extends ExecuteNodeScriptTask implements PatternFilterable {
public ConfigJSModulesTask() {
include("**/*.es.js*", "**/*.soy.js*");
}
@Override
public ConfigJSModulesTask exclude(
@SuppressWarnings("rawtypes") Closure excludeSpec) {
_patternFilterable.exclude(excludeSpec);
return this;
}
@Override
public ConfigJSModulesTask exclude(Iterable<String> excludes) {
_patternFilterable.exclude(excludes);
return this;
}
@Override
public ConfigJSModulesTask exclude(Spec<FileTreeElement> excludeSpec) {
_patternFilterable.exclude(excludeSpec);
return this;
}
@Override
public ConfigJSModulesTask exclude(String... excludes) {
_patternFilterable.exclude(excludes);
return this;
}
@Override
public void executeNode() throws Exception {
Project project = getProject();
final File outputDir = getOutputDir();
project.delete(getOutputFile(), outputDir);
project.copy(
new Action<CopySpec>() {
@Override
public void execute(CopySpec copySpec) {
copySpec.from(getSourceFiles());
copySpec.into(outputDir);
}
});
super.executeNode();
project.copy(
new Action<CopySpec>() {
@Override
public void execute(CopySpec copySpec) {
copySpec.from(outputDir);
copySpec.into(getSourceDir());
}
});
}
@Input
@Optional
public String getConfigVariable() {
return GradleUtil.toString(_configVariable);
}
@Input
@Optional
public String getCustomDefine() {
return GradleUtil.toString(_customDefine);
}
@Override
public Set<String> getExcludes() {
return _patternFilterable.getExcludes();
}
@Override
public Set<String> getIncludes() {
return _patternFilterable.getIncludes();
}
@InputFile
@Optional
public File getModuleConfigFile() {
return GradleUtil.toFile(getProject(), _moduleConfigFile);
}
@Input
@Optional
public String getModuleExtension() {
return GradleUtil.toString(_moduleExtension);
}
@Input
@Optional
public String getModuleFormat() {
return GradleUtil.toString(_moduleFormat);
}
public File getOutputDir() {
return new File(getTemporaryDir(), "files");
}
public File getOutputFile() {
return GradleUtil.toFile(getProject(), _outputFile);
}
public File getSourceDir() {
return GradleUtil.toFile(getProject(), _sourceDir);
}
@InputFiles
@SkipWhenEmpty
public FileCollection getSourceFiles() {
Project project = getProject();
if (_sourceDir == null) {
return project.files();
}
FileTree fileTree = project.fileTree(_sourceDir);
return fileTree.matching(_patternFilterable);
}
@Override
public ConfigJSModulesTask include(
@SuppressWarnings("rawtypes") Closure includeSpec) {
_patternFilterable.include(includeSpec);
return this;
}
@Override
public ConfigJSModulesTask include(Iterable<String> includes) {
_patternFilterable.include(includes);
return this;
}
@Override
public ConfigJSModulesTask include(Spec<FileTreeElement> includeSpec) {
_patternFilterable.include(includeSpec);
return this;
}
@Override
public ConfigJSModulesTask include(String... includes) {
_patternFilterable.include(includes);
return this;
}
@Input
public boolean isIgnorePath() {
return _ignorePath;
}
@Input
public boolean isKeepFileExtension() {
return _keepFileExtension;
}
@Input
public boolean isLowerCase() {
return _lowerCase;
}
public void setConfigVariable(Object configVariable) {
_configVariable = configVariable;
}
public void setCustomDefine(Object customDefine) {
_customDefine = customDefine;
}
@Override
public ConfigJSModulesTask setExcludes(Iterable<String> excludes) {
_patternFilterable.setExcludes(excludes);
return this;
}
public void setIgnorePath(boolean ignorePath) {
_ignorePath = ignorePath;
}
@Override
public ConfigJSModulesTask setIncludes(Iterable<String> includes) {
_patternFilterable.setIncludes(includes);
return this;
}
public void setKeepFileExtension(boolean keepFileExtension) {
_keepFileExtension = keepFileExtension;
}
public void setLowerCase(boolean lowerCase) {
_lowerCase = lowerCase;
}
public void setModuleConfigFile(Object moduleConfigFile) {
_moduleConfigFile = moduleConfigFile;
}
public void setModuleExtension(Object moduleExtension) {
_moduleExtension = moduleExtension;
}
public void setModuleFormat(Object moduleFormat) {
_moduleFormat = moduleFormat;
}
public void setOutputFile(Object outputFile) {
_outputFile = outputFile;
}
public void setSourceDir(Object sourceDir) {
_sourceDir = sourceDir;
}
@Override
protected List<String> getCompleteArgs() {
List<String> completeArgs = super.getCompleteArgs();
String configVariable = getConfigVariable();
if (configVariable != null) {
completeArgs.add("--config");
completeArgs.add(configVariable);
}
String moduleExtension = getModuleExtension();
if (moduleExtension != null) {
completeArgs.add("--extension");
completeArgs.add(moduleExtension);
}
String moduleFormat = getModuleFormat();
if (moduleFormat != null) {
completeArgs.add("--format");
completeArgs.add(moduleFormat);
}
boolean ignorePath = isIgnorePath();
if (ignorePath) {
completeArgs.add("--ignorePath");
completeArgs.add(String.valueOf(ignorePath));
}
boolean keepFileExtension = isKeepFileExtension();
if (keepFileExtension) {
completeArgs.add("--keepExtension");
completeArgs.add(String.valueOf(keepFileExtension));
}
boolean lowerCase = isLowerCase();
if (lowerCase) {
completeArgs.add("--lowerCase");
completeArgs.add(String.valueOf(lowerCase));
}
completeArgs.add("--moduleConfig");
completeArgs.add(FileUtil.getAbsolutePath(getModuleConfigFile()));
String customDefine = getCustomDefine();
if (Validator.isNotNull(customDefine)) {
completeArgs.add("--namespace");
completeArgs.add(customDefine);
}
completeArgs.add("--output");
completeArgs.add(FileUtil.getAbsolutePath(getOutputFile()));
File outputDir = getOutputDir();
completeArgs.add("--moduleRoot");
completeArgs.add(FileUtil.getAbsolutePath(outputDir));
completeArgs.add(FileUtil.getAbsolutePath(outputDir.getParentFile()));
return completeArgs;
}
private Object _configVariable;
private Object _customDefine = "Liferay.Loader";
private boolean _ignorePath;
private boolean _keepFileExtension;
private boolean _lowerCase;
private Object _moduleConfigFile;
private Object _moduleExtension;
private Object _moduleFormat;
private Object _outputFile;
private final PatternFilterable _patternFilterable = new PatternSet();
private Object _sourceDir;
}