package de.danielsenff.dropps.tasks;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.StringTokenizer;
import java.util.concurrent.TimeUnit;
import javax.swing.JOptionPane;
import org.jdesktop.application.Application;
import org.jdesktop.application.Task;
import de.danielsenff.dropps.ConvertController;
import de.danielsenff.dropps.Dropps;
import de.danielsenff.dropps.models.ExportOptions;
import de.danielsenff.dropps.models.IConvertListener;
import de.danielsenff.dropps.models.IProgressListener;
import de.danielsenff.dropps.models.IProgressObserverable;
import de.danielsenff.dropps.models.ProgressStatus;
/**
* Performs the conversion of several image files.
* @author danielsenff
*
*/
public class ConvertFilesTask extends Task<ProgressStatus, Void> {
private final Collection<File> fileList;
private ProgressStatus status;
private ExportOptions options;
private ConvertController converter;
/**
* @param app
* @param fileList
* @param options
*/
public ConvertFilesTask(final Application app,
final Collection<File> fileList,
final ExportOptions options) {
super(app, "convertFiles");
this.fileList = fileList;
this.options = options;
}
@Override protected ProgressStatus doInBackground() {
((Dropps)getApplication()).getMainView().getFrame().setEnabled(false);
if (!fileList.isEmpty()) {
// final ConvertionController converter = new ConvertionController(fileList, options, deleteOriginal, overwriteFiles);
final IProgressListener listener = new IProgressListener() {
@Override
public void update(final ProgressStatus newStatus) {
message("startMessage", newStatus.getProcessed(), newStatus.getProcessable());
//initial progress
setProgress(newStatus.getProcessed(), 0, newStatus.getProcessable());
// attention, this changes also the message
status = newStatus;
}
@Override
public void error(final ProgressStatus errorStatus) {
//localize message
if (errorStatus.getMessage() != null) {
StringTokenizer tokenizer = new StringTokenizer(errorStatus.getMessage(), "_");
String bundleKey = tokenizer.nextToken();
String fileName = null;
if (tokenizer.hasMoreTokens()) {
fileName = tokenizer.nextToken();
}
errorStatus.setMessage(getResourceMap().getString(bundleKey, fileName));
}
status = errorStatus;
}
};
final IConvertListener convListener = new IConvertListener() {
@Override
public void convertBegin(File originalFile) {
setMessage("Conversion of " + originalFile.getName());
}
@Override
public void convertEnd(File originalFile) {
// setMessage("End Convertion of " + originalFile.getName());
}
};
final List<IProgressListener> listeners = new ArrayList<IProgressListener>();
listeners.add(listener);
final List<IConvertListener> convListeners = new ArrayList<IConvertListener>();
convListeners.add(convListener);
ConvertController converter = new ConvertController(options);
if (converter instanceof IProgressObserverable) {
for (IProgressListener iProgressListener : listeners) {
converter.addListener(iProgressListener);
}
for (IConvertListener iConvertListener : convListeners) {
converter.addListener(iConvertListener);
}
}
// setMessage("Handle files");
converter.convertFiles(fileList);
}
((Dropps)getApplication()).getMainView().getFrame().setEnabled(true);
return status;
}
/**
* @param result
*/
@Override
protected void succeeded(final ProgressStatus result) {
if (result != null) {
if (!result.isError()) {
message("finishedMessage", getExecutionDuration(TimeUnit.SECONDS), getExecutionDuration(TimeUnit.SECONDS) / 60);
} else {
showErrorDialog(result.getMessage());
}
}
super.succeeded(result);
}
@Override
protected void cancelled() {
super.cancelled();
}
private void showErrorDialog(final String message) {
JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE);
}
}