/** * 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.tlddoc.builder.tasks; import com.liferay.gradle.util.FileUtil; import com.liferay.gradle.util.GradleUtil; import groovy.lang.Closure; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.gradle.api.Project; 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.InputDirectory; import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.JavaExec; import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.OutputDirectory; 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 TLDDocTask extends JavaExec implements PatternFilterable { public TLDDocTask() { setMain("com.sun.tlddoc.TLDDoc"); setMaxHeapSize("256m"); } @Override public TLDDocTask exclude( @SuppressWarnings("rawtypes") Closure excludeSpec) { _patternFilterable.exclude(excludeSpec); return this; } @Override public TLDDocTask exclude(Iterable<String> excludes) { _patternFilterable.exclude(excludes); return this; } @Override public TLDDocTask exclude(Spec<FileTreeElement> excludeSpec) { _patternFilterable.exclude(excludeSpec); return this; } @Override public TLDDocTask exclude(String... excludes) { _patternFilterable.exclude(excludes); return this; } @Override public void exec() { setArgs(_getCompleteArgs()); super.exec(); } @OutputDirectory public File getDestinationDir() { return GradleUtil.toFile(getProject(), _destinationDir); } @Override public Set<String> getExcludes() { return _patternFilterable.getExcludes(); } @Override public Set<String> getIncludes() { return _patternFilterable.getIncludes(); } @InputFiles @SkipWhenEmpty public FileTree getSource() { Project project = getProject(); FileCollection fileCollection = project.files(_source); FileTree fileTree = fileCollection.getAsFileTree(); return fileTree.matching(_patternFilterable); } @InputDirectory @Optional public File getXsltDir() { return GradleUtil.toFile(getProject(), _xsltDir); } @Override public TLDDocTask include( @SuppressWarnings("rawtypes") Closure includeSpec) { _patternFilterable.include(includeSpec); return this; } @Override public TLDDocTask include(Iterable<String> includes) { _patternFilterable.include(includes); return this; } @Override public TLDDocTask include(Spec<FileTreeElement> includeSpec) { _patternFilterable.include(includeSpec); return this; } @Override public TLDDocTask include(String... includes) { _patternFilterable.include(includes); return this; } public void setDestinationDir(Object destinationDir) { _destinationDir = destinationDir; } @Override public TLDDocTask setExcludes(Iterable<String> excludes) { _patternFilterable.setExcludes(excludes); return this; } @Override public TLDDocTask setIncludes(Iterable<String> includes) { _patternFilterable.setIncludes(includes); return this; } public void setSource(Object source) { _source.clear(); _source.add(source); } public void setXsltDir(Object xsltDir) { _xsltDir = xsltDir; } public TLDDocTask source(Object... sources) { for (Object source : sources) { _source.add(source); } return this; } private List<String> _getCompleteArgs() { List<String> args = new ArrayList<>(getArgs()); args.add("-d"); args.add(FileUtil.relativize(getDestinationDir(), getWorkingDir())); File xsltDir = getXsltDir(); if (xsltDir != null) { args.add("-xslt"); args.add(FileUtil.relativize(xsltDir, getWorkingDir())); } for (File file : getSource()) { args.add(FileUtil.relativize(file, getWorkingDir())); } return args; } private Object _destinationDir; private final PatternFilterable _patternFilterable = new PatternSet(); private final List<Object> _source = new ArrayList<>(); private Object _xsltDir; }