/*
* Prop2Po.java
*
*/
package edu.xtec.ant;
import org.apache.tools.ant.*;
import org.apache.tools.ant.types.*;
import org.apache.tools.ant.util.FileUtils;
import java.io.File;
import java.util.Vector;
import org.apache.tools.ant.util.JavaEnvUtils;
import org.apache.tools.ant.taskdefs.ExecTask;
import java.util.Enumeration;
import java.io.IOException;
/**
* @author fbusquet
*/
public class Prop2Po extends Task {
// Original source code
/**
* The name of the properties file.
*/
protected File inputFile;
/**
* The .properties template file.
*/
protected File templateFile;
protected File outputFile;
protected File backupFile;
protected File destDir;
protected File backupDir;
protected boolean verbose;
protected boolean makePot;
protected boolean preserveTimestamps;
/**
* the filesets of the .properties to convert
*/
protected Vector filesets = new Vector();
protected FileUtils fileUtils = FileUtils.newFileUtils();
/**
* set the preserveTimestamps value
*/
public void setPreserveTimestamps(boolean preserveTimestamps) {
this.preserveTimestamps = preserveTimestamps;
}
/**
* the .properties file to convert; required
*/
public void setInputFile(final File inputFile) {
this.inputFile = inputFile;
}
/**
* template location; required
*/
public void setTemplateFile(final File templateFile) {
this.templateFile = templateFile;
}
/**
* name of exported PO file; optional
*/
public void setOutputFile(final File outputFile) {
this.outputFile = outputFile;
}
/**
* name of the backup file; optional
*/
public void setBackupFile(final File backupFile) {
this.backupFile = backupFile;
}
/**
* Sets the destination directory.
* @param destDir the destination directory
*/
public void setDestDir(File destDir) {
this.destDir = destDir;
}
/**
* Sets the backup directory.
* @param backupDir the backup directory
*/
public void setBackupDir(File backupDir) {
this.backupDir = backupDir;
}
/**
* export a POT template
* ; optional: default false
*/
public void setMakePot(final boolean makePot) {
this.makePot = makePot;
}
/**
* Adds a set of files to convert
*/
public void addFileset(final FileSet set) {
filesets.addElement(set);
}
// Completely rewrited
/**
* Convert the files
*/
public void execute() throws BuildException {
if (null == inputFile && null == filesets) {
throw new BuildException("a properties file must be set through inputFile attribute "
+ "or nested filesets");
}
if (null != inputFile) {
doOneFile(inputFile, outputFile, backupFile);
return;
} else {
//Assume null != filesets
// deal with the filesets
for (int i = 0; i < filesets.size(); i++) {
FileSet fs = (FileSet) filesets.elementAt(i);
DirectoryScanner ds = fs.getDirectoryScanner(getProject());
String[] inputFiles = ds.getIncludedFiles();
for (int j = 0; j < inputFiles.length; j++) {
doOneFile(new File(fs.getDir(getProject()), inputFiles[j]), null, null);
}
}
}
}
/**
* convert one file
*/
private void doOneFile(File inputFile, File outputFile, File backupFile)
throws BuildException {
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
throw new BuildException("The Prop2Po task is only available on "
+ "JDK versions 1.2 or greater");
}
if(outputFile==null){
if(destDir==null){
destDir=inputFile.getParentFile();
}
String justFName=inputFile.getName();
int lastDot=justFName.lastIndexOf('.');
if(lastDot>0)
justFName=justFName.substring(0, lastDot);
String ext=makePot ? ".pot" : ".po";
outputFile=new File(destDir, justFName+ext);
}
if(backupFile==null && backupDir!=null){
backupFile=new File(backupDir, outputFile.getName());
if(backupFile.equals(outputFile))
backupFile=null;
}
if (isUpToDate(inputFile, outputFile)) {
return;
}
final ExecTask cmd = (ExecTask) getProject().createTask("exec");
cmd.setExecutable("prop2po");
if (makePot) {
cmd.createArg().setValue("-P");
}
if (null != templateFile) {
cmd.createArg().setValue("--template="+templateFile.toString());
}
if (null != inputFile) {
cmd.createArg().setValue(inputFile.toString());
}
if (null != outputFile) {
cmd.createArg().setValue(outputFile.toString());
}
log("Converting properties: " + inputFile.getAbsolutePath());
cmd.setFailonerror(true);
cmd.setTaskName(getTaskName());
cmd.execute();
if(preserveTimestamps){
outputFile.setLastModified(inputFile.lastModified());
}
if(backupFile!=null) {
log("Creating backup of "+outputFile.getName()+" in "+backupFile.getParent().toString());
try{
fileUtils.copyFile(outputFile, backupFile, null, true, true);
} catch(Exception ex){
throw new BuildException(ex);
}
}
}
protected boolean isUpToDate(File inputFile, File outputFile) {
if (null == inputFile) {
return false;
}
if (null != outputFile) {
if (!inputFile.exists()) {
return false;
}
if (!outputFile.exists()) {
return false;
}
if (inputFile.equals(outputFile)) {
return false;
}
if (outputFile.lastModified() >= inputFile.lastModified()) {
return true;
}
}
return false;
}
}