ConvertTask.java
package org.docascode.ant;
import org.apache.commons.io.FilenameUtils;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Mapper;
import org.apache.tools.ant.util.FileNameMapper;
import org.apache.tools.ant.util.IdentityMapper;
import org.docascode.api.ConvertCommand;
import org.docascode.api.DocAsCode;
import org.docascode.api.core.errors.DocAsCodeException;
import org.docascode.api.event.Event;
import org.docascode.api.listener.EventListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class ConvertTask extends Task implements EventListener {
private String destDir = ".";
public void setDestDir(String destDir){
this.destDir = destDir;
}
private FileSet fileSet = new FileSet();
public void addFileSet(final FileSet fileset){
this.fileSet = fileset;
this.fileSet.setExcludes("*.pdf");
}
public Mapper createMapper() {
if (elementMapper != null) {
throw new BuildException("Cannot define more than one mapper",
getLocation());
}
elementMapper = new Mapper(getProject());
return elementMapper;
}
private Mapper elementMapper;
public void add(FileNameMapper mapper){
createMapper().add(mapper);
}
private FileNameMapper getMapper() {
FileNameMapper mapper;
if (elementMapper != null) {
mapper = elementMapper.getImplementation();
} else {
mapper = new IdentityMapper();
}
return mapper;
}
@Override
public void execute() {
final DirectoryScanner scanner =
fileSet.getDirectoryScanner(getProject());
String[] includedFileNames = scanner.getIncludedFiles();
for (String filename : includedFileNames) {
final File fromFile =
new File(fileSet.getDir(getProject()), filename);
List<String> toFileNames = new ArrayList<>();
if ( getMapper().mapFileName(filename) != null) {
for (String toFileName : getMapper().mapFileName(filename)) {
toFileNames.add(
String.format(
"%s.pdf",
FilenameUtils.removeExtension(toFileName)));
}
}
for (String toFileName : toFileNames){
File toFile = new File(
getProject().getBaseDir(),
String.format("%s/%s",
destDir,
toFileName));
try {
((ConvertCommand) DocAsCode.convert().addListener(this))
.from(fromFile)
.to(toFile)
.call();
} catch (DocAsCodeException e) {
throw new BuildException(e);
}
}
}
}
@Override
public void fireEvent(Event event) {
log(event.getMessage());
}
}