/**
* 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.cache.task;
import com.liferay.gradle.plugins.cache.util.StringUtil;
import com.liferay.gradle.util.GradleUtil;
import groovy.lang.Closure;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.gradle.api.Project;
import org.gradle.api.Task;
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.util.PatternFilterable;
import org.gradle.api.tasks.util.PatternSet;
import org.gradle.util.GUtil;
/**
* @author Andrea Di Giorgi
*/
public class TaskCache implements PatternFilterable {
public TaskCache(String name, Project project) {
_baseDir = project.getProjectDir();
_cacheDir = project.file(".cache/" + name);
_disabled = GradleUtil.getProperty(
project, name + "CacheDisabled", false);
_name = name;
_project = project;
}
@Override
public TaskCache exclude(
@SuppressWarnings("rawtypes") Closure excludeSpec) {
_patternFilterable.exclude(excludeSpec);
return this;
}
@Override
public TaskCache exclude(Iterable<String> excludes) {
_patternFilterable.exclude(excludes);
return this;
}
@Override
public TaskCache exclude(Spec<FileTreeElement> excludeSpec) {
_patternFilterable.exclude(excludeSpec);
return this;
}
@Override
public TaskCache exclude(String... excludes) {
_patternFilterable.exclude(excludes);
return this;
}
public File getBaseDir() {
return GradleUtil.toFile(_project, _baseDir);
}
public File getCacheDir() {
return GradleUtil.toFile(_project, _cacheDir);
}
@Override
public Set<String> getExcludes() {
return _patternFilterable.getExcludes();
}
public FileTree getFiles() {
FileTree fileTree = _project.fileTree(getBaseDir());
return fileTree.matching(_patternFilterable);
}
@Override
public Set<String> getIncludes() {
return _patternFilterable.getIncludes();
}
public String getName() {
return _name;
}
public Project getProject() {
return _project;
}
public String getRefreshDigestTaskName() {
return "refresh" + StringUtil.capitalize(getName()) + "Digest";
}
public String getRestoreCacheTaskName() {
return "restore" + StringUtil.capitalize(getName()) + "Cache";
}
public String getSaveCacheTaskName() {
return "save" + StringUtil.capitalize(getName()) + "Cache";
}
public Set<Object> getSkippedTaskDependencies() {
return _skippedTaskDependencies;
}
public Task getTask() {
return GradleUtil.getTask(_project, _name);
}
public FileCollection getTestFiles() {
return _project.files(_testFiles);
}
@Override
public TaskCache include(
@SuppressWarnings("rawtypes") Closure includeSpec) {
_patternFilterable.include(includeSpec);
return this;
}
@Override
public TaskCache include(Iterable<String> includes) {
_patternFilterable.include(includes);
return this;
}
@Override
public TaskCache include(Spec<FileTreeElement> includeSpec) {
_patternFilterable.include(includeSpec);
return this;
}
@Override
public TaskCache include(String... includes) {
_patternFilterable.include(includes);
return this;
}
public boolean isDisabled() {
return _disabled;
}
public boolean isExcludeIgnoredTestFiles() {
return _excludeIgnoredTestFiles;
}
public void setBaseDir(Object baseDir) {
_baseDir = baseDir;
}
public void setCacheDir(Object cacheDir) {
_cacheDir = cacheDir;
}
public void setDisabled(boolean disabled) {
_disabled = disabled;
}
public void setExcludeIgnoredTestFiles(boolean excludeIgnoredTestFiles) {
_excludeIgnoredTestFiles = excludeIgnoredTestFiles;
}
@Override
public TaskCache setExcludes(Iterable<String> excludes) {
_patternFilterable.setExcludes(excludes);
return this;
}
@Override
public TaskCache setIncludes(Iterable<String> includes) {
_patternFilterable.setIncludes(includes);
return this;
}
public void setSkippedTaskDependencies(
Iterable<Object> skippedTaskDependencies) {
_skippedTaskDependencies.clear();
skipTaskDependency(skippedTaskDependencies);
}
public void setSkippedTaskDependencies(Object... skippedTaskDependencies) {
setSkippedTaskDependencies(Arrays.asList(skippedTaskDependencies));
}
public void setTestFiles(Iterable<Object> testFiles) {
_testFiles.clear();
testFile(testFiles);
}
public void setTestFiles(Object... testFiles) {
setTestFiles(Arrays.asList(testFiles));
}
public TaskCache skipTaskDependency(
Iterable<Object> skippedTaskDependencies) {
GUtil.addToCollection(
_skippedTaskDependencies, skippedTaskDependencies);
return this;
}
public TaskCache skipTaskDependency(Object... skippedTaskDependencies) {
return skipTaskDependency(Arrays.asList(skippedTaskDependencies));
}
public TaskCache testFile(Iterable<Object> testFiles) {
GUtil.addToCollection(_testFiles, testFiles);
return this;
}
public TaskCache testFile(Object... testFiles) {
return testFile(Arrays.asList(testFiles));
}
@Override
public String toString() {
return "task cache '" + _name + "'";
}
private Object _baseDir;
private Object _cacheDir;
private boolean _disabled;
private boolean _excludeIgnoredTestFiles = true;
private final String _name;
private final PatternFilterable _patternFilterable = new PatternSet();
private final Project _project;
private final Set<Object> _skippedTaskDependencies = new LinkedHashSet<>();
private final List<Object> _testFiles = new ArrayList<>();
}