}
private void doBatch(final JBatchData data)
{
data.m_targetFolder = JPathHelper.addSeparator(data.m_targetFolder);
final JWaitDialog waitDialog = new JWaitDialog(this, Main.getString("wait_scan_caption"), null);
final ArrayList<File> fileArray = new ArrayList<File>();
waitDialog.setIndeterminate(true);
Thread thread = new Thread(new Runnable()
{
public void run()
{
doBatchCollect(data.m_srcFolder, data, fileArray);
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
waitDialog.stop();
}
});
}
});
thread.start();
waitDialog.start();
final JWaitDialog waitDialog_convert = new JWaitDialog(this, Main.getString("wait_convert_caption"), Main.getString("cancel"));
waitDialog_convert.setRange(0, fileArray.size());
thread = new Thread(new Runnable()
{
public void run()
{
int count = 0;
String template = Main.getString("wait_convert");
for (File file : fileArray)
{
if (waitDialog_convert.wasCancelled())
break;
String path = file.getPath();
String newFile = data.m_targetFolder + path.substring(data.m_srcFolder.length()+1, path.length());
newFile = newFile.substring(0, newFile.length() - JPathHelper.getFileExtension(newFile).length());
newFile += data.getTargetExtension();
String fileName = JPathHelper.getBaseFileName(newFile);
String dirName = JPathHelper.addSeparator(JPathHelper.getFolder(newFile));
String extName = JPathHelper.getFileExtension(newFile);
newFile = dirName + data.m_targetTemplate.replaceAll("%1", fileName) + "." + extName;
File targetFile = new File(newFile);
File srcFile = new File(path);
if (!srcFile.equals(targetFile))
{
boolean flag = false;
File targetDir = new File(JPathHelper.getFolder(targetFile));
if (targetDir.exists() ? true : targetDir.mkdirs())
{
try
{
JIfdData ifd = new JIfdData(srcFile);
BufferedImage bi = ImageIO.read(srcFile);
switch (data.m_targetFormat)
{
case JBatchData.JPG_FORMAT:
m_imgView.saveJPG(targetFile, bi, ifd, data.m_scaleFactor, data.m_quality, data.m_bOptimizedHuffmanTable);
break;
case JBatchData.PNG_FORMAT:
m_imgView.savePNG(targetFile, bi, ifd, data.m_scaleFactor);
break;
case JBatchData.BMP_FORMAT:
m_imgView.saveBMP(targetFile, bi, ifd, data.m_scaleFactor);
break;
}
}
catch(IOException ex)
{}
}
else if (Main.m_settings.isDebug())
System.err.println("Unable to ceate directory: " + targetDir);
}
else if (Main.m_settings.isDebug())
System.err.println("Source and target are identical: " + targetFile);
final int _count = count++;
final String str = String.format(template, fileName + "." + extName);
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
waitDialog_convert.notify(new ProgNotify(ProgNotify.RUN, _count, str));
}
});
}
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
waitDialog_convert.stop();
}
});
}
});
thread.start();
waitDialog_convert.start();
}