From a8cf61ef331a699e943a1a34fbe68d80b49bd06c Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Thu, 27 Dec 2007 16:48:32 +0000 Subject: [PATCH] improved exception handling --- .../filebot/ui/panel/sfv/Checksum.java | 53 ++++++++++++------- .../filebot/ui/panel/sfv/ChecksumRow.java | 16 +++--- .../renderer/ChecksumTableCellRenderer.java | 2 + .../FileTransferablePolicy.java | 5 +- 4 files changed, 47 insertions(+), 29 deletions(-) diff --git a/source/net/sourceforge/filebot/ui/panel/sfv/Checksum.java b/source/net/sourceforge/filebot/ui/panel/sfv/Checksum.java index e1ca59d3..7fd7786c 100644 --- a/source/net/sourceforge/filebot/ui/panel/sfv/Checksum.java +++ b/source/net/sourceforge/filebot/ui/panel/sfv/Checksum.java @@ -20,10 +20,11 @@ public class Checksum { private Long checksum = null; private State state = State.PENDING; private ChecksumComputationTask computationTask = null; + private String errorMessage = null; public static enum State { - PENDING, INPROGRESS, READY; + PENDING, INPROGRESS, READY, ERROR; } @@ -67,6 +68,21 @@ public class Checksum { public synchronized void setChecksum(Long checksum) { this.checksum = checksum; setState(State.READY); + + computationTask = null; + } + + + public synchronized void setChecksumError(Exception exception) { + // get root cause + Throwable cause = exception; + + while (cause.getCause() != null) + cause = cause.getCause(); + + errorMessage = cause.getMessage(); + setState(State.ERROR); + computationTask = null; } @@ -83,14 +99,15 @@ public class Checksum { public Integer getProgress() { - switch (state) { - case PENDING: - return 0; - case READY: - return 100; - default: - return computationTask.getProgress(); - } + if (state == State.INPROGRESS) + return computationTask.getProgress(); + + return null; + } + + + public String getErrorMessage() { + return errorMessage; } @@ -123,6 +140,7 @@ public class Checksum { setChecksum(computationTask.get()); } } catch (Exception e) { + setChecksumError(e); e.printStackTrace(); } } @@ -141,16 +159,13 @@ public class Checksum { @Override public String toString() { - switch (state) { - case PENDING: - return state.toString(); - case INPROGRESS: - return state.toString(); - case READY: - return getChecksumString(); - default: - return null; - } + if (state == State.READY) + return getChecksumString(); + + if (state == State.ERROR) + return getErrorMessage(); + + return state.toString(); } } diff --git a/source/net/sourceforge/filebot/ui/panel/sfv/ChecksumRow.java b/source/net/sourceforge/filebot/ui/panel/sfv/ChecksumRow.java index a10d9a3a..c94e2602 100644 --- a/source/net/sourceforge/filebot/ui/panel/sfv/ChecksumRow.java +++ b/source/net/sourceforge/filebot/ui/panel/sfv/ChecksumRow.java @@ -45,13 +45,15 @@ public class ChecksumRow { public State getState() { HashSet checksums = new HashSet(); - boolean ready = true; - for (Checksum checksum : checksumMap.values()) { - if (checksum.getState() == Checksum.State.READY) + for (Checksum checksum : getChecksums()) { + if (checksum.getState() == Checksum.State.READY) { checksums.add(checksum.getChecksum()); - else - ready = false; + } else if (checksum.getState() == Checksum.State.ERROR) { + return State.ERROR; + } else { + return State.UNKNOWN; + } } if (checksums.size() > 1) { @@ -65,10 +67,6 @@ public class ChecksumRow { return State.WARNING; } - if (!ready) { - return State.UNKNOWN; - } - return State.OK; } diff --git a/source/net/sourceforge/filebot/ui/panel/sfv/renderer/ChecksumTableCellRenderer.java b/source/net/sourceforge/filebot/ui/panel/sfv/renderer/ChecksumTableCellRenderer.java index 0c8c3421..9b5d8d6d 100644 --- a/source/net/sourceforge/filebot/ui/panel/sfv/renderer/ChecksumTableCellRenderer.java +++ b/source/net/sourceforge/filebot/ui/panel/sfv/renderer/ChecksumTableCellRenderer.java @@ -27,6 +27,8 @@ public class ChecksumTableCellRenderer extends TextTableCellRenderer { setText(checksum.getChecksumString()); } else if (checksum.getState() == Checksum.State.PENDING) { setText("Pending ..."); + } else if (checksum.getState() == Checksum.State.ERROR) { + setText(checksum.getErrorMessage()); } else { return progressBarRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } diff --git a/source/net/sourceforge/filebot/ui/transferablepolicies/FileTransferablePolicy.java b/source/net/sourceforge/filebot/ui/transferablepolicies/FileTransferablePolicy.java index 62f18c22..17b6181f 100644 --- a/source/net/sourceforge/filebot/ui/transferablepolicies/FileTransferablePolicy.java +++ b/source/net/sourceforge/filebot/ui/transferablepolicies/FileTransferablePolicy.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; @@ -31,10 +32,12 @@ public abstract class FileTransferablePolicy extends TransferablePolicy { protected List getFilesFromTransferable(Transferable tr) { List files = getFilesFromFileTransferable(tr); - // if there is no file transferable, look if there is a string transferable + // if there is no file transferable, look if there is a string transferable that contains file uris if (files == null) files = getFilesFromStringTransferable(tr); + Collections.sort(files); + return files; }