package net.padaf.preflight; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import javax.activation.FileDataSource; import net.padaf.preflight.ValidationResult.ValidationError; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; public class Benchmark { /** * @param args */ public static void main(String[] args) throws Exception { if ( args.length < 3 ) { System.err.println("Usage : Benchmark loop resultFile <file1 ... filen|dir>"); System.exit(255); } Integer loop = Integer.parseInt(args[0]); FileWriter resFile = new FileWriter(new File(args[1])); List<File> lfd = new ArrayList<File>(); for (int i = 2; i < args.length ; ++i) { File fi = new File(args[i]); if (fi.isDirectory()) { Collection<File> cf = FileUtils.listFiles(fi, null, true); // Get All files contained by the dir lfd.addAll(cf); } else { lfd.add(fi); } } SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.Z"); PdfAValidator validator = new PdfAValidatorFactory().createValidatorInstance(PdfAValidatorFactory.PDF_A_1_b); long startGTime = System.currentTimeMillis(); int size = lfd.size(); for (int i = 0 ; i < loop ; i++) { File file = lfd.get(i%size); long startLTime = System.currentTimeMillis(); ValidationResult result = validator.validate(new FileDataSource(file)); if (!result.isValid()) { resFile.write(file.getAbsolutePath() + " isn't PDF/A\n"); for (ValidationError error : result.getErrorsList()) { resFile.write(error.getErrorCode() + " : " + error.getDetails() +"\n"); } } result.closePdf(); long endLTime = System.currentTimeMillis(); resFile.write(file.getName() + " (ms) : " + (endLTime - startLTime) + "\n"); resFile.flush(); } long endGTime = System.currentTimeMillis(); resFile.write("Start : " + sdf.format(new Date(startGTime)) +"\n"); resFile.write("End : " + sdf.format(new Date(endGTime)) +"\n"); resFile.write("Duration (ms) : " + (endGTime - startGTime) +"\n"); resFile.write("Average (ms) : " + (int)((endGTime - startGTime)/loop) +"\n"); System.out.println("Start : " + sdf.format(new Date(startGTime))); System.out.println("End : " + sdf.format(new Date(endGTime))); System.out.println("Duration (ms) : " + (endGTime - startGTime)); System.out.println("Average (ms) : " + (int)((endGTime - startGTime)/loop)); resFile.flush(); IOUtils.closeQuietly(resFile); } }