001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.gui.io; 003 004 /** 005 * This is an abstract task for uploading or saving a data layer. 006 * 007 */ 008 public abstract class AbstractIOTask implements Runnable { 009 010 /** indicates whether the task has been canceled */ 011 private boolean canceled; 012 /** indicates whether the task has been failed */ 013 private boolean failed; 014 /** the last exception caught */ 015 private Exception lastException; 016 017 public AbstractIOTask() { 018 canceled = false; 019 failed = false; 020 lastException = null; 021 } 022 023 /** 024 * Replies true if the task has been canceled 025 * 026 * @return true if the task has been canceled 027 */ 028 public boolean isCanceled() { 029 return canceled; 030 } 031 032 /** 033 * Set whether this task has been canceled 034 * 035 * @param canceled true, if the task has been canceled; false otherwise 036 */ 037 protected void setCanceled(boolean canceled) { 038 this.canceled = canceled; 039 } 040 041 /** 042 * Replies true if the task has been failed 043 * 044 * @return true if the task has been failed 045 */ 046 public boolean isFailed() { 047 return failed || lastException != null; 048 } 049 050 /** 051 * Sets whether the task has been failed 052 * 053 * @param failed whether the task has been failed 054 */ 055 protected void setFailed(boolean failed) { 056 this.failed = failed; 057 } 058 059 /** 060 * Replies the last exception caught 061 * 062 * @return the last exception caught; null, if no exception was caught 063 */ 064 public Exception getLastException() { 065 return lastException; 066 } 067 068 /** 069 * Sets the last exception caught 070 * 071 * @param lastException the last exception 072 */ 073 protected void setLastException(Exception lastException) { 074 this.lastException = lastException; 075 } 076 077 /** 078 * Replies true if this task was successful, i.e. if it wasn't 079 * canceled and didn't fail 080 * 081 * @return true if this task was successful 082 */ 083 public boolean isSuccessful() { 084 return !isCanceled() && !isFailed(); 085 } 086 087 /** 088 * Runs the task 089 */ 090 public abstract void run(); 091 092 /** 093 * Cancel the task 094 */ 095 public abstract void cancel(); 096 }