From ab0daea1f7f614af9a620bb80ad20c67d6b81e67 Mon Sep 17 00:00:00 2001 From: yukihane Date: Tue, 30 Aug 2011 14:26:26 +0900 Subject: [PATCH] =?utf8?q?=E3=82=BF=E3=82=B9=E3=82=AF=E3=83=9E=E3=83=8D?= =?utf8?q?=E3=83=BC=E3=82=B8=E3=83=A3=E3=81=AB=E3=82=AD=E3=83=A3=E3=83=B3?= =?utf8?q?=E3=82=BB=E3=83=AB=E5=87=A6=E7=90=86=E3=82=92=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../src/yukihane/inqubus/manager/TaskManage.java | 43 ++++++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/frontend/src/yukihane/inqubus/manager/TaskManage.java b/frontend/src/yukihane/inqubus/manager/TaskManage.java index 311c622..47b037e 100644 --- a/frontend/src/yukihane/inqubus/manager/TaskManage.java +++ b/frontend/src/yukihane/inqubus/manager/TaskManage.java @@ -70,6 +70,19 @@ public class TaskManage { return false; } + public synchronized boolean cancel(int rowId) { + final ManageTarget down = downloadTargets.get(rowId); + if (down != null) { + return down.getFuture().cancel(true); + } + final ManageTarget conv = convertTargets.get(rowId); + if (conv != null) { + return conv.getFuture().cancel(true); + } + + return false; + } + private class DownloadListener extends TaskManageInnerListener { private DownloadListener(int rowId) { @@ -80,7 +93,7 @@ public class TaskManage { public void done(DownloadResult result) { super.done(result); synchronized (TaskManage.this) { - final ManageTarget mt = downloadTargets.remove(Integer.valueOf(getRowId())); + final ManageTarget mt = removeRequest(getRowId()); final RequestProcess request = mt.getRequest(); if (request.getConvertProfile().isConvert()) { final DownloadProfile dp = request.getDownloadProfile(); @@ -102,6 +115,11 @@ public class TaskManage { protected TaskKind getKind() { return TaskKind.DOWNLOAD; } + + @Override + protected ManageTarget removeRequest(int rowId) { + return downloadTargets.remove(rowId); + } } private class ConvertListener extends TaskManageInnerListener { @@ -119,9 +137,14 @@ public class TaskManage { public void done(ConvertResult result) { super.done(result); synchronized (TaskManage.this) { - convertTargets.remove(getRowId()); + removeRequest(getRowId()); } } + + @Override + protected ManageTarget removeRequest(int rowId) { + return convertTargets.remove(rowId); + } } abstract class TaskManageInnerListener implements WorkerListener { @@ -160,11 +183,18 @@ public class TaskManage { } @Override - public void cancelled() { + public final void cancelled() { logger.log(Level.FINE, "cancelled: {0}", toString()); + synchronized (TaskManage.this) { + removeRequest(rowId); + } notify(TaskStatus.CANCELLED); } + /** + * この処理をオーバライドしてキューからリクエストを削除する必要があります. + * @param result 処理結果. + */ @Override public void done(T result) { logger.log(Level.FINE, "done: {0}", result); @@ -172,10 +202,15 @@ public class TaskManage { } @Override - public void error(Throwable th) { + public final void error(Throwable th) { logger.log(Level.SEVERE, "error", th); + synchronized (TaskManage.this) { + removeRequest(rowId); + } notify(TaskStatus.ERROR, 0.0, th.getMessage()); } + + protected abstract ManageTarget removeRequest(int rowId); } class ManageTarget { -- 2.11.0