Author: jflesch
Date: 2007-09-22 21:10:05 +0000 (Sat, 22 Sep 2007)
New Revision: 15280
Added:
trunk/apps/Thaw/src/thaw/core/ThawRunnable.java
Modified:
trunk/apps/Thaw/src/thaw/core/ConfigWindow.java
trunk/apps/Thaw/src/thaw/core/Core.java
trunk/apps/Thaw/src/thaw/core/LibraryPlugin.java
trunk/apps/Thaw/src/thaw/core/Plugin.java
trunk/apps/Thaw/src/thaw/core/ThawThread.java
trunk/apps/Thaw/src/thaw/fcp/FCPBufferedStream.java
trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java
trunk/apps/Thaw/src/thaw/fcp/FCPQueryManager.java
trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java
trunk/apps/Thaw/src/thaw/fcp/SHA256Computer.java
trunk/apps/Thaw/src/thaw/gui/Table.java
trunk/apps/Thaw/src/thaw/plugins/FetchPlugin.java
trunk/apps/Thaw/src/thaw/plugins/Hsqldb.java
trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java
trunk/apps/Thaw/src/thaw/plugins/IndexExporter.java
trunk/apps/Thaw/src/thaw/plugins/IndexWebGrapher.java
trunk/apps/Thaw/src/thaw/plugins/InsertPlugin.java
trunk/apps/Thaw/src/thaw/plugins/LogConsole.java
trunk/apps/Thaw/src/thaw/plugins/MDns.java
trunk/apps/Thaw/src/thaw/plugins/MiniFrost.java
trunk/apps/Thaw/src/thaw/plugins/PeerMonitor.java
trunk/apps/Thaw/src/thaw/plugins/QueueWatcher.java
trunk/apps/Thaw/src/thaw/plugins/Restarter.java
trunk/apps/Thaw/src/thaw/plugins/Signatures.java
trunk/apps/Thaw/src/thaw/plugins/SqlConsole.java
trunk/apps/Thaw/src/thaw/plugins/StatusBar.java
trunk/apps/Thaw/src/thaw/plugins/ThemeSelector.java
trunk/apps/Thaw/src/thaw/plugins/TransferLogs.java
trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java
trunk/apps/Thaw/src/thaw/plugins/index/AutoRefresh.java
trunk/apps/Thaw/src/thaw/plugins/index/FileManagementHelper.java
trunk/apps/Thaw/src/thaw/plugins/index/FileTable.java
trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java
trunk/apps/Thaw/src/thaw/plugins/index/LinkManagementHelper.java
trunk/apps/Thaw/src/thaw/plugins/index/UnknownIndexList.java
trunk/apps/Thaw/src/thaw/plugins/indexWebGrapher/GraphBuilder.java
trunk/apps/Thaw/src/thaw/plugins/mDns/MDNSDiscoveryPanel.java
trunk/apps/Thaw/src/thaw/plugins/miniFrost/AutoRefresh.java
trunk/apps/Thaw/src/thaw/plugins/miniFrost/BoardManagementHelper.java
trunk/apps/Thaw/src/thaw/plugins/miniFrost/DraftPanel.java
trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessagePanel.java
trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoard.java
trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKFileAttachment.java
trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
trunk/apps/Thaw/src/thaw/plugins/signatures/SigConfigTab.java
Log:
Wait for all the threads to be stopped before calling System.exit(0)
Modified: trunk/apps/Thaw/src/thaw/core/ConfigWindow.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/ConfigWindow.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/core/ConfigWindow.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -226,11 +226,13 @@
/**
* We reload the change in another thread to avoid UI freeze
*/
- public class Reloader implements Runnable {
+ public class Reloader implements ThawRunnable {
private boolean resetConnection;
+ private boolean running;
public Reloader(boolean resetConnection) {
this.resetConnection = resetConnection;
+ this.running = true;
}
public void run() {
@@ -238,7 +240,7 @@
if (resetConnection) {
dialog = new
JDialog(core.getMainWindow().getMainFrame(),
- "
"+I18n.getMessage("thaw.common.pleaseWait"));
+ "
"+I18n.getMessage("thaw.common.pleaseWait"));
dialog.getContentPane().setLayout(new
GridLayout(1, 1));
dialog.getContentPane().add(new
JLabel(I18n.getMessage("thaw.common.pleaseWait"),
@@ -270,10 +272,11 @@
if (resetConnection) {
core.getConfig().cancelChanges();
- core.getPluginManager().stopPlugins();
+ if (running)
+ core.getPluginManager().stopPlugins();
/* should reinit the whole connection correctly
*/
- if (resetConnection && !core.initConnection()) {
+ if (running && resetConnection &&
!core.initConnection()) {
if (dialog == null)
new
thaw.gui.WarningWindow(core.getMainWindow().getMainFrame(),
I18n.getMessage("thaw.warning.unableToConnectTo")+
@@ -289,17 +292,24 @@
needConnectionReset = false;
/* put back the config tab */
- addTabs();
+ if (running)
+ addTabs();
- core.getPluginManager().loadAndRunPlugins();
+ if (running)
+
core.getPluginManager().loadAndRunPlugins();
} else { /* !resetConnection */
- core.getConfig().applyChanges();
+ if (running)
+ core.getConfig().applyChanges();
}
if (resetConnection)
dialog.setVisible(false);
}
+
+ public void stop() {
+ running = false;
+ }
}
/* not for later : the cancelbutton just call this */
Modified: trunk/apps/Thaw/src/thaw/core/Core.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/Core.java 2007-09-22 20:07:17 UTC (rev
15279)
+++ trunk/apps/Thaw/src/thaw/core/Core.java 2007-09-22 21:10:05 UTC (rev
15280)
@@ -163,6 +163,9 @@
config.setDefaultValues();
+ if (config.getValue("logLevel") != null)
+
Logger.setLogLevel(Integer.parseInt(config.getValue("logLevel")));
+
if (config.getValue("tmpDir") != null)
System.setProperty("java.io.tmpdir",
config.getValue("tmpDir"));
@@ -177,11 +180,13 @@
/**
* My node takes too much time to answer. So now the connection process
is partially threaded.
*/
- protected class ConnectionProcess implements Runnable {
+ protected class ConnectionProcess implements ThawRunnable {
private Core c;
+ private boolean running;
public ConnectionProcess(Core c) {
this.c = c;
+ this.running = true;
}
public void run() {
@@ -189,6 +194,10 @@
connectionProcess = null;
}
+ public void stop() {
+ running = false;
+ }
+
public boolean process() {
boolean ret = true;
@@ -204,22 +213,35 @@
Logger.debug(this, "FCP version :
"+clientHello.getNodeFCPVersion());
Logger.debug(this, "Node version :
"+clientHello.getNodeVersion());
- queueManager.startScheduler();
+ if (ret)
+ queueManager.startScheduler();
- queueManager.restartNonPersistent();
+ if (!running) ret = false;
- final FCPWatchGlobal watchGlobal = new
FCPWatchGlobal(true);
- watchGlobal.start(queueManager);
+ if (ret)
+ queueManager.restartNonPersistent();
- final FCPQueueLoader queueLoader = new
FCPQueueLoader(config.getValue("thawId"));
- queueLoader.start(queueManager);
+ if (!running) ret = false;
+ if (ret) {
+ final FCPWatchGlobal watchGlobal = new
FCPWatchGlobal(true);
+ watchGlobal.start(queueManager);
+ }
+
+ if (!running) ret = false;
+
+ if (ret) {
+ final FCPQueueLoader queueLoader = new
FCPQueueLoader(config.getValue("thawId"));
+ queueLoader.start(queueManager);
+ }
+
+ if (!running) ret = false;
}
if(ret && connection.isConnected())
connection.addObserver(c);
- if(getMainWindow() != null) {
+ if(getMainWindow() != null && running) {
if (ret)
getMainWindow().setStatus(IconBox.minConnectAction,
I18n.getMessage("thaw.statusBar.ready"));
@@ -552,8 +574,13 @@
Logger.error(this, "Config was not saved correctly !");
}
- Logger.info(this, "Exiting");
- System.exit(0);
+ ThawThread.setAllowFullStop(true);
+
+ Logger.info(this, "Threads remaining:");
+ ThawThread.listThreads();
+
+ Logger.info(this, "Stopping all the remaining threads ...");
+ ThawThread.stopAll();
}
@@ -575,7 +602,7 @@
}
- protected class ReconnectionManager implements Runnable {
+ protected class ReconnectionManager implements ThawRunnable {
private boolean running = true;
public ReconnectionManager() {
Modified: trunk/apps/Thaw/src/thaw/core/LibraryPlugin.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/LibraryPlugin.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/core/LibraryPlugin.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -16,7 +16,7 @@
private Vector registered = null;
public abstract boolean run(Core core);
- public abstract boolean stop();
+ public abstract void stop();
public void registerChild(final Plugin child) {
Modified: trunk/apps/Thaw/src/thaw/core/Plugin.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/Plugin.java 2007-09-22 20:07:17 UTC (rev
15279)
+++ trunk/apps/Thaw/src/thaw/core/Plugin.java 2007-09-22 21:10:05 UTC (rev
15280)
@@ -16,9 +16,8 @@
/**
* Called when the plugin is stopped (often at the end of the program).
- * @return false means that plugin has troubles and should not be
unload.
*/
- public boolean stop();
+ public void stop();
/**
Added: trunk/apps/Thaw/src/thaw/core/ThawRunnable.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/ThawRunnable.java
(rev 0)
+++ trunk/apps/Thaw/src/thaw/core/ThawRunnable.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -0,0 +1,10 @@
+package thaw.core;
+
+public interface ThawRunnable extends Runnable {
+
+ /**
+ * Called only when the user wants to halt Thaw
+ */
+ public void stop();
+
+}
Modified: trunk/apps/Thaw/src/thaw/core/ThawThread.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/ThawThread.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/core/ThawThread.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -1,14 +1,102 @@
package thaw.core;
+import java.util.Vector;
+import java.util.Iterator;
+
+
public class ThawThread extends Thread {
private static ThreadGroup threadGroup = new ThreadGroup("Thaw");
+ private static Vector threads = new Vector();
+ private static boolean allowFullStop = false;
- public ThawThread(Runnable target, String name) {
+ private Object parent;
+ private ThawRunnable target;
+ private String name;
+
+
+ public ThawThread(ThawRunnable target, String name) {
this(target, name, null);
}
- public ThawThread(Runnable target, String name, Object parent) {
- super(threadGroup, target, name);
+ public ThawThread(ThawRunnable target, String name, Object parent) {
+ super(threadGroup, name);
+
+ this.target = target;
+ this.name = name;
+ this.parent = parent;
}
+ public void run() {
+ Logger.info(this, "Starting thread '"+name+"' ...");
+
+ synchronized(threads) {
+ threads.add(this);
+ }
+
+ target.run();
+
+ synchronized(threads) {
+ threads.remove(this);
+ }
+
+ Logger.info(this, "Thread '"+name+"' finished");
+
+ if (threads.size() == 0) {
+ Logger.notice(this, "All threads are stopped");
+
+ if (allowFullStop) {
+ Logger.notice(this, "Halting Thaw");
+ System.exit(0);
+ }
+ }
+ }
+
+ public ThawRunnable getTarget() {
+ return target;
+ }
+
+ public Object getParent() {
+ return parent;
+ }
+
+
+ public static void setAllowFullStop(boolean a) {
+ allowFullStop = a;
+
+ synchronized(threads) {
+ if (allowFullStop) {
+ if (threads.size() == 0) {
+ Logger.notice(null, "All threads are
stopped => Halting Thaw");
+ System.exit(0);
+ }
+ }
+ }
+ }
+
+
+ public static void listThreads() {
+ synchronized(threads) {
+ Logger.info(null,
+
Integer.toString(threadGroup.activeCount())+" threads "+
+ "("+Integer.toString(threads.size())+"
known)");
+
+ for (Iterator it = threads.iterator();
+ it.hasNext();) {
+ ThawThread th = (ThawThread)it.next();
+ Logger.info(null,
+ "'"+th.getName()+"' "+
+ "(parent:
'"+th.getParent().getClass().getName()+"')");
+ }
+ }
+ }
+
+ public static void stopAll() {
+ synchronized(threads) {
+ for (Iterator it = threads.iterator();
+ it.hasNext();) {
+ ThawThread th = (ThawThread)it.next();
+ th.getTarget().stop();
+ }
+ }
+ }
}
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPBufferedStream.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPBufferedStream.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPBufferedStream.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -2,14 +2,14 @@
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
-
/**
* Only used by FCPConnection. Except special situation, you shouldn't have to
use it directly.
* Currently only used for output. (shouldn't be really usefull for input).
* Some data are sent each 'INTERVAL' (in ms).
*/
-public class FCPBufferedStream implements Runnable {
+public class FCPBufferedStream implements ThawRunnable {
private FCPConnection connection;
private int maxUploadSpeed;
@@ -126,6 +126,11 @@
}
}
+ public void stop() {
+ running = false;
+ }
+
+
/**
* Start the thread sending data from the buffer to the OutputStream
(socket).
*/
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -9,6 +9,7 @@
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
public class FCPClientGet extends Observable
@@ -622,7 +623,7 @@
}
- private class UnlockWaiter implements Runnable {
+ private class UnlockWaiter implements ThawRunnable {
FCPClientGet clientGet;
FCPConnection c;
String dir;
@@ -633,8 +634,25 @@
this.c = c;
}
+ private Thread th;
+ private boolean waiting = false;
+
public void run() {
+ synchronized(this) {
+ waiting = true;
+ }
+
c.addToWriterQueue();
+
+ synchronized(this) {
+ waiting = false;
+
+ if (th.interrupted()) {
+ c.removeFromWriterQueue();
+ return;
+ }
+ }
+
isLockOwner = true;
Logger.debug(this, "I take the lock !");
@@ -646,6 +664,21 @@
clientGet.continueSaveFileTo(dir);
return;
}
+
+
+ public void setThread(Thread th) {
+ synchronized(this) {
+ this.th = th;
+ }
+ }
+
+ /* race-conditions may happen but "shits happen" */
+ public void stop() {
+ synchronized(this) {
+ if (waiting)
+ th.interrupt();
+ }
+ }
}
public boolean saveFileTo(final String dir) {
@@ -692,10 +725,13 @@
setChanged();
this.notifyObservers();
+ UnlockWaiter uw = new UnlockWaiter(this,
duplicatedQueryManager.getConnection(), dir);
- final Thread fork = new ThawThread(new UnlockWaiter(this,
duplicatedQueryManager.getConnection(), dir),
+ final Thread fork = new ThawThread(uw,
"Unlock waiter",
this);
+ uw.setThread(fork);
+
fork.start();
return true;
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -10,6 +10,7 @@
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
/**
@@ -271,7 +272,7 @@
- private class UnlockWaiter implements Runnable {
+ private class UnlockWaiter implements ThawRunnable {
FCPClientPut clientPut;
FCPConnection c;
@@ -280,14 +281,44 @@
this.c = c;
}
+ private Thread th;
+ private boolean waiting = false;
+
public void run() {
+ synchronized(this) {
+ waiting = true;
+ }
+
c.addToWriterQueue();
+ synchronized(this) {
+ waiting = false;
+
+ if (th.interrupted()) {
+ c.removeFromWriterQueue();
+ return;
+ }
+ }
+
lockOwner = true;
clientPut.continueInsert();
return;
}
+
+ public void setThread(Thread th) {
+ synchronized(this) {
+ this.th = th;
+ }
+ }
+
+ /* race-conditions may happen but "shits happen" */
+ public void stop() {
+ synchronized(this) {
+ if (waiting)
+ th.interrupt();
+ }
+ }
}
@@ -301,10 +332,12 @@
Logger.info(this, "Waiting for socket availability ...");
- final Thread fork = new ThawThread(new UnlockWaiter(this,
connection),
+ UnlockWaiter uw = new UnlockWaiter(this, connection);
+
+ final Thread fork = new ThawThread(uw,
"Unlock waiter",
this);
-
+ uw.setThread(fork);
fork.start();
return true;
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQueryManager.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPQueryManager.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPQueryManager.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -4,21 +4,24 @@
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
+
/**
* Manage all fcp messages (see corresponding object of each kind of query).
* Call observers each type a new message is received. The given object is
* the message.
*/
-public class FCPQueryManager extends Observable implements Runnable {
+public class FCPQueryManager extends Observable implements ThawRunnable {
private Thread me;
private FCPConnection connection;
+ private boolean running;
-
public FCPQueryManager(final FCPConnection connection) {
me = null;
setConnection(connection);
+ running = true;
}
/**
@@ -93,7 +96,7 @@
}
- public class Notifier implements Runnable {
+ public class Notifier implements ThawRunnable {
FCPMessage msg;
public Notifier(FCPMessage msg) {
@@ -111,16 +114,20 @@
e.printStackTrace();
}
}
+
+ public void stop() {
+ /* can't stop */
+ }
}
- public class WatchDog implements Runnable {
+ public class WatchDog implements ThawRunnable {
public final static int TIMEOUT = 10000;
- Runnable runnable;
+ ThawRunnable runnable;
- public WatchDog(Runnable runnable) {
+ public WatchDog(ThawRunnable runnable) {
this.runnable = runnable;
}
@@ -146,6 +153,10 @@
}
}
+ public void stop() {
+ /* will stop by itself when the child thread will stop
*/
+ }
+
}
/**
@@ -158,7 +169,7 @@
* Will listen in loop for new incoming messages.
*/
public void run() {
- while(true) {
+ while(running) {
FCPMessage latestMessage;
/* note : if multithreaded, stop reading when a thread
is writing,
@@ -197,13 +208,19 @@
}
} else {
Logger.info(this, "Stopping listening");
- return;
+ running = false;
}
}
}
+ public void stop() {
+ Logger.info(this, "stop() : Stopping listening");
+ running = false;
+ }
+
+
/**
* Create the thread listening for incoming message.
*/
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -8,13 +8,14 @@
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
/**
* Manage a running and a pending queue of FCPTransferQuery.
* Please notice that runningQueue contains too finished queries.
* Notify when: a query is added and when a query change to one queue to
another.
*/
-public class FCPQueueManager extends java.util.Observable implements Runnable,
java.util.Observer {
+public class FCPQueueManager extends java.util.Observable implements
ThawRunnable, java.util.Observer {
private final static int PRIORITY_MIN = 6; /* So 0 to 6 */
@@ -455,34 +456,39 @@
try {
Thread.sleep(5000);
} catch(final java.lang.InterruptedException e) {
- // I'm stupid. I'm stupid. I'm stupid. (r9654)
+ /* \_o< */
}
- while(true) {
+ while(!stopThread) {
try {
Thread.sleep(500);
} catch(final java.lang.InterruptedException e) {
/* We don't care */
}
- if(stopThread)
- return;
+ if(!stopThread) {
- try {
+ try {
- if(queryManager.getConnection().isConnected()
- && !queryManager.getConnection().isWriting()
- && queueCompleted)
- schedule();
+
if(queryManager.getConnection().isConnected()
+ &&
!queryManager.getConnection().isWriting()
+ && queueCompleted)
+ schedule();
- } catch(final Exception e) {
- Logger.error(this, "EXCEPTION FROM ORDONNANCOR
: "+e.toString()+ " ; "+e.getMessage());
- e.printStackTrace();
+ } catch(final Exception e) {
+ Logger.error(this, "EXCEPTION FROM FCP
SCHEDULER : "+e.toString()+ " ; "+e.getMessage());
+ e.printStackTrace();
+ }
+
}
}
}
+ public void stop() {
+ stopThread = true;
+ }
+
public void startScheduler() {
scheduler = new ThawThread(this, "FCP queue scheduler", this);
stopThread = false;
Modified: trunk/apps/Thaw/src/thaw/fcp/SHA256Computer.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/SHA256Computer.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/fcp/SHA256Computer.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -12,13 +12,14 @@
import freenet.support.Base64;
import thaw.core.Logger;
+import thaw.core.ThawRunnable;
/**
* Automatically used by FCPClientPut.
* You shouldn't have to bother about it
*/
-public class SHA256Computer extends Observable implements Runnable {
+public class SHA256Computer extends Observable implements ThawRunnable {
private MessageDigest md;
private String hash;
@@ -30,26 +31,29 @@
public final static int BLOCK_SIZE = 32768; /* 32 Ko */
+ public boolean running = true;
+
public SHA256Computer(String header, String fileToHash) {
this.file = fileToHash;
this.headers = header;
+ this.running = true;
}
public void run() {
File realFile = new File(file);
long realFileSize = realFile.length();
-
+
try {
FileInputStream in = new FileInputStream(realFile);
BufferedInputStream bis = new BufferedInputStream(in);
md = SHA256.getMessageDigest();
md.reset();
md.update(headers.getBytes("UTF-8"));
-
+
byte[] buf = new byte[4096];
int readBytes = bis.read(buf);
- while(readBytes > -1) {
+ while(readBytes > -1 && running) {
md.update(buf, 0, readBytes);
readBytes = bis.read(buf);
progress = (short) Math.round(readBytes * 100 /
realFileSize);
@@ -60,6 +64,12 @@
bis.close();
in.close();
+ if (!running) {
+ setChanged();
+ notifyObservers();
+ return;
+ }
+
synchronized (hashLock) {
hash = Base64.encode(md.digest());
}
@@ -76,7 +86,11 @@
notifyObservers();
}
+ public void stop() {
+ running = false;
+ }
+
/**
* In %
*/
@@ -85,7 +99,7 @@
return 100;
else if(progress > 99)
return 99;
- else
+ else
return progress;
}
@@ -94,10 +108,10 @@
*/
public String getHash() {
synchronized (hashLock) {
- return hash;
+ return hash;
}
}
-
+
public boolean isFinished() {
return isFinished;
}
Modified: trunk/apps/Thaw/src/thaw/gui/Table.java
===================================================================
--- trunk/apps/Thaw/src/thaw/gui/Table.java 2007-09-22 20:07:17 UTC (rev
15279)
+++ trunk/apps/Thaw/src/thaw/gui/Table.java 2007-09-22 21:10:05 UTC (rev
15280)
@@ -26,6 +26,7 @@
import thaw.core.Config;
import thaw.core.I18n;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.fcp.FreenetURIHelper;
import thaw.fcp.FCPTransferQuery;
@@ -38,7 +39,7 @@
* Just add to usual JTable the capacity to store the columns sizes
* in the thaw configuration
*/
-public class Table extends JTable implements TableColumnModelListener,
Runnable {
+public class Table extends JTable implements TableColumnModelListener,
ThawRunnable {
public final static Color COLOR_ONE = Color.WHITE;
public final static Color COLOR_TWO = new Color(240, 240, 240);
@@ -344,7 +345,11 @@
}
+ public void stop() {
+ /* can't stop */
+ }
+
public void reallySaveColumnSize() {
TableColumnModel m = super.getColumnModel();
Modified: trunk/apps/Thaw/src/thaw/plugins/FetchPlugin.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/FetchPlugin.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/FetchPlugin.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -79,13 +79,12 @@
}
- public boolean stop() {
+ public void stop() {
Logger.info(this, "Stopping plugin \"FetchPlugin\" ...");
if (queueWatcher != null)
queueWatcher.removeButtonFromTheToolbar(buttonInToolBar);
- return true;
}
public String getNameForUser() {
Modified: trunk/apps/Thaw/src/thaw/plugins/Hsqldb.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/Hsqldb.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/Hsqldb.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -77,8 +77,8 @@
}
- public boolean stop() {
- return true;
+ public void stop() {
+ /* \_o< */
}
public void realStop() {
Modified: trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -144,14 +144,16 @@
return browserPanel;
}
- public boolean stop() {
+ public void stop() {
if (autoRefresh != null)
autoRefresh.stop();
- browserPanel.getCommentTab().hideTab();
- browserPanel.getBlackList().hidePanel();
+ if (browserPanel != null) {
+ browserPanel.getCommentTab().hideTab();
+ browserPanel.getBlackList().hidePanel();
- browserPanel.stopAllThreads();
+ browserPanel.stopAllThreads();
+ }
core.getMainWindow().getTabbedPane().removeChangeListener(this);
@@ -160,13 +162,13 @@
browserPanel.saveState();
}
- hsqldb.unregisterChild(this);
- signatures.unregisterChild(this);
+ if (hsqldb != null)
+ hsqldb.unregisterChild(this);
+ if (signatures != null)
+ signatures.unregisterChild(this);
if (configPanel != null)
configPanel.removeTab();
-
- return true;
}
public String getNameForUser() {
Modified: trunk/apps/Thaw/src/thaw/plugins/IndexExporter.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/IndexExporter.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/IndexExporter.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -14,6 +14,7 @@
import thaw.core.Logger;
import thaw.core.Plugin;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.plugins.index.DatabaseManager;
public class IndexExporter implements Plugin, ActionListener {
@@ -72,10 +73,8 @@
}
- public boolean stop() {
+ public void stop() {
core.getMainWindow().removeFromFileMenu(menu);
-
- return true;
}
public String getNameForUser() {
@@ -126,7 +125,7 @@
}
- private class Worker implements Runnable {
+ private class Worker implements ThawRunnable {
private boolean impor;
private boolean content;
private java.io.File file;
@@ -150,5 +149,8 @@
}
}
+ public void stop() {
+ /* \_o< */
+ }
}
}
Modified: trunk/apps/Thaw/src/thaw/plugins/IndexWebGrapher.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/IndexWebGrapher.java 2007-09-22
20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/IndexWebGrapher.java 2007-09-22
21:10:05 UTC (rev 15280)
@@ -19,6 +19,7 @@
import thaw.core.I18n;
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.plugins.indexWebGrapher.*;
@@ -130,11 +131,9 @@
}
- public boolean stop() {
+ public void stop() {
core.getMainWindow().removeTab(tabPanel);
db.unregisterChild(this);
-
- return true;
}
public String getNameForUser() {
Modified: trunk/apps/Thaw/src/thaw/plugins/InsertPlugin.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/InsertPlugin.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/InsertPlugin.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -90,13 +90,11 @@
}
- public boolean stop() {
+ public void stop() {
Logger.info(this, "Stopping plugin \"InsertPlugin\" ...");
if (queueWatcher != null)
queueWatcher.removeButtonFromTheToolbar(buttonInToolBar);
-
- return true;
}
Modified: trunk/apps/Thaw/src/thaw/plugins/LogConsole.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/LogConsole.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/LogConsole.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -14,20 +14,23 @@
import javax.swing.JComboBox;
import thaw.core.Core;
+import thaw.core.Config;
import thaw.gui.FileChooser;
import thaw.core.I18n;
import thaw.core.LogListener;
import thaw.core.Logger;
import thaw.core.Plugin;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
/**
* Quick and dirty console showing Thaw logs, and allowing to save them.
*/
-public class LogConsole implements Plugin, LogListener, ActionListener,
Runnable {
+public class LogConsole implements Plugin, LogListener, ActionListener,
ThawRunnable {
public final static int MAX_LINE = 512;
private Core core;
+ private Config config;
private String[] buffer;
private int readOffset;
@@ -60,6 +63,8 @@
public boolean run(final Core core) {
this.core = core;
+ this.config = core.getConfig();
+
threadRunning = true;
hasChanged = false;
@@ -105,15 +110,12 @@
}
-
- public boolean stop() {
+ public void stop() {
threadRunning = false;
Logger.removeLogListener(this);
core.getMainWindow().removeTab(consolePanel);
-
- return true;
}
@@ -125,8 +127,10 @@
public void actionPerformed(final ActionEvent e) {
if (e.getSource() == logLevel) {
- if (Logger.getLogLevel() !=
logLevel.getSelectedIndex()) /* to avoid loops */
+ if (Logger.getLogLevel() !=
logLevel.getSelectedIndex()) {/* to avoid loops */
Logger.setLogLevel(logLevel.getSelectedIndex());
+ config.setValue("logLevel",
Integer.toString(logLevel.getSelectedIndex()));
+ }
} else if(e.getSource() == saveToFile) {
final FileChooser fileChooser = new FileChooser();
Modified: trunk/apps/Thaw/src/thaw/plugins/MDns.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/MDns.java 2007-09-22 20:07:17 UTC (rev
15279)
+++ trunk/apps/Thaw/src/thaw/plugins/MDns.java 2007-09-22 21:10:05 UTC (rev
15280)
@@ -53,13 +53,11 @@
return core.getConfig();
}
- public boolean stop() {
+ public void stop() {
discovery.stop();
core.getConfigWindow().getNodeConfigPanel().getAutodetectButton().removeActionListener(this);
core.getConfigWindow().getNodeConfigPanel().getAutodetectButton().setEnabled(false);
-
- return false;
}
Modified: trunk/apps/Thaw/src/thaw/plugins/MiniFrost.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/MiniFrost.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/MiniFrost.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -144,7 +144,7 @@
return true;
}
- public boolean stop() {
+ public void stop() {
if (autoRefresh != null)
autoRefresh.stop();
@@ -158,8 +158,6 @@
if (hsqldb != null)
hsqldb.unregisterChild(this);
-
- return true;
}
public BoardFactory[] getFactories() {
Modified: trunk/apps/Thaw/src/thaw/plugins/PeerMonitor.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/PeerMonitor.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/PeerMonitor.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -15,8 +15,8 @@
import thaw.core.Core;
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
-
import thaw.plugins.peerMonitor.*;
import thaw.fcp.*;
@@ -42,7 +42,7 @@
}
- protected class DisplayRefresher implements Observer, Runnable{
+ protected class DisplayRefresher implements Observer, ThawRunnable{
private FCPGetNode getNode = null;
private FCPListPeers listPeers = null;
@@ -99,6 +99,10 @@
peerPanel.setPeerList(lP.getPeers());
}
}
+
+ public void stop() {
+ running = false;
+ }
}
@@ -137,7 +141,7 @@
}
- public boolean stop() {
+ public void stop() {
hideTab();
if (!folded)
core.getMainWindow().removeComponent(peerPanel.getPeerListPanel());
@@ -147,7 +151,6 @@
core.getConfig().setValue("peerMonitorFolded",
Boolean.toString(folded));
running = false;
- return false;
}
Modified: trunk/apps/Thaw/src/thaw/plugins/QueueWatcher.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/QueueWatcher.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/QueueWatcher.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -139,7 +139,7 @@
}
- public boolean stop() {
+ public void stop() {
Logger.info(this, "Stopping plugin \"QueueWatcher\" ...");
int splitLocation;
@@ -156,8 +156,6 @@
core.getMainWindow().removeTab(panelAdded);
purgeButtonList();
-
- return true;
}
Modified: trunk/apps/Thaw/src/thaw/plugins/Restarter.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/Restarter.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/Restarter.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -17,6 +17,7 @@
import thaw.core.Logger;
import thaw.core.Plugin;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.fcp.FCPTransferQuery;
/**
@@ -24,7 +25,7 @@
* A not too bad example to show how to make plugins.
* @deprecated When this plugin was created, MaxRetries was stupidly set to 0
instead of -1 => now this plugin is useless.
*/
-public class Restarter implements Observer, Runnable, Plugin {
+public class Restarter implements Observer, ThawRunnable, Plugin {
private int interval = 180; /* in s */
private boolean restartFatals = false;
@@ -88,12 +89,10 @@
}
- public boolean stop() {
+ public void stop() {
core.getConfigWindow().removeTab(configPanel);
core.getConfigWindow().deleteObserver(this);
running = false;
-
- return true;
}
Modified: trunk/apps/Thaw/src/thaw/plugins/Signatures.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/Signatures.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/Signatures.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -111,7 +111,7 @@
}
- public boolean stop() {
+ public void stop() {
configTab.destroy();
core.getConfigWindow().removeTab(configTab.getPanel());
@@ -119,8 +119,6 @@
if (used == 0)
db.unregisterChild(this);
-
- return true;
}
Modified: trunk/apps/Thaw/src/thaw/plugins/SqlConsole.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/SqlConsole.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/SqlConsole.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -71,12 +71,11 @@
}
- public boolean stop() {
+ public void stop() {
core.getMainWindow().removeTab(panel);
- hsqldb.unregisterChild(this);
-
- return true;
+ if (hsqldb != null)
+ hsqldb.unregisterChild(this);
}
public String getNameForUser() {
Modified: trunk/apps/Thaw/src/thaw/plugins/StatusBar.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/StatusBar.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/StatusBar.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -13,11 +13,12 @@
import thaw.core.Plugin;
import thaw.core.LogListener;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.gui.IconBox;
import thaw.fcp.FCPTransferQuery;
-public class StatusBar implements Runnable, Plugin, LogListener {
+public class StatusBar implements ThawRunnable, Plugin, LogListener {
public final static int INTERVAL = 3000; /* in ms */
public final static String SEPARATOR = " ";
@@ -171,12 +172,10 @@
}
- public boolean stop() {
+ public void stop() {
running = false;
core.getMainWindow().setStatus(IconBox.blueBunny, "Thaw
"+Main.VERSION);
-
- return true;
}
Modified: trunk/apps/Thaw/src/thaw/plugins/ThemeSelector.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/ThemeSelector.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/ThemeSelector.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -21,6 +21,7 @@
import thaw.core.Logger;
import thaw.core.Core;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
public class ThemeSelector implements thaw.core.Plugin, Observer,
ListSelectionListener {
@@ -90,11 +91,9 @@
}
- public boolean stop() {
+ public void stop() {
core.getConfigWindow().deleteObserver(this);
core.getConfigWindow().removeTab(panel);
-
- return false;
}
public String getNameForUser() {
@@ -145,7 +144,7 @@
}
- private class ThemeSetter implements Runnable {
+ private class ThemeSetter implements ThawRunnable {
private String theme;
public ThemeSetter(String t) {
@@ -155,6 +154,8 @@
public void run() {
core.setTheme(theme);
}
+
+ public void stop() { /* \_o< */ }
}
Modified: trunk/apps/Thaw/src/thaw/plugins/TransferLogs.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/TransferLogs.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/TransferLogs.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -41,6 +41,7 @@
import thaw.core.I18n;
import thaw.core.Plugin;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.fcp.FCPQueueManager;
import thaw.fcp.FCPTransferQuery;
@@ -145,7 +146,7 @@
}
- public boolean stop() {
+ public void stop() {
core.getMainWindow().removeTab(tab);
core.getQueueManager().deleteObserver(this);
@@ -154,8 +155,6 @@
/* Others observers will just keep data sync ? */
db.unregisterChild(this);
-
- return false;
}
@@ -291,7 +290,7 @@
}
- private class KeyImporter implements Runnable {
+ private class KeyImporter implements ThawRunnable {
public KeyImporter() { }
public void run() {
@@ -356,10 +355,12 @@
table.refresh();
}
+
+ public void stop() { /* \_o< */ }
}
- private class KeyExporter implements Runnable {
+ private class KeyExporter implements ThawRunnable {
public KeyExporter() { }
public void run() {
@@ -397,6 +398,8 @@
}
}
+
+ public void stop() { /* \_o< */ }
}
Modified: trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java 2007-09-22 20:07:17 UTC
(rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java 2007-09-22 21:10:05 UTC
(rev 15280)
@@ -29,6 +29,7 @@
import thaw.core.Logger;
import thaw.core.I18n;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.fcp.FCPTransferQuery;
@@ -88,9 +89,9 @@
}
- public boolean stop() {
+ public void stop() {
if (icon == null)
- return false;
+ return;
Logger.removeLogListener(this);
@@ -105,8 +106,6 @@
}
Logger.addLogListener(this);
-
- return true;
}
@@ -358,7 +357,7 @@
}
- private class ProgressBarRefresher implements Runnable {
+ private class ProgressBarRefresher implements ThawRunnable {
private Vector bars;
private boolean stop;
Modified: trunk/apps/Thaw/src/thaw/plugins/index/AutoRefresh.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/AutoRefresh.java 2007-09-22
20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/index/AutoRefresh.java 2007-09-22
21:10:05 UTC (rev 15280)
@@ -7,10 +7,11 @@
import thaw.core.Config;
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.fcp.FCPQueueManager;
import thaw.plugins.Hsqldb;
-public class AutoRefresh implements Runnable, java.util.Observer {
+public class AutoRefresh implements ThawRunnable, java.util.Observer {
public final static boolean DEFAULT_ACTIVATED = true;
public final static int DEFAULT_INTERVAL = 150;
Modified: trunk/apps/Thaw/src/thaw/plugins/index/FileManagementHelper.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/FileManagementHelper.java
2007-09-22 20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/index/FileManagementHelper.java
2007-09-22 21:10:05 UTC (rev 15280)
@@ -16,6 +16,7 @@
import thaw.core.I18n;
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.fcp.FCPQueueManager;
import thaw.fcp.FCPTransferQuery;
@@ -35,7 +36,7 @@
- public static abstract class BasicFileAction implements FileAction,
Runnable {
+ public static abstract class BasicFileAction implements FileAction,
ThawRunnable {
private AbstractButton src;
public BasicFileAction(AbstractButton src) {
@@ -53,6 +54,10 @@
apply();
}
+ public void stop() {
+ /* \_o< */
+ }
+
public abstract void setTarget(Vector files);
public abstract void apply();
}
Modified: trunk/apps/Thaw/src/thaw/plugins/index/FileTable.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/FileTable.java 2007-09-22
20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/index/FileTable.java 2007-09-22
21:10:05 UTC (rev 15280)
@@ -29,6 +29,7 @@
import thaw.core.Config;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.fcp.FreenetURIHelper;
import thaw.core.I18n;
import thaw.gui.IconBox;
@@ -421,7 +422,7 @@
}
- private class TransferRefresher implements Runnable {
+ private class TransferRefresher implements ThawRunnable {
private boolean running;
public TransferRefresher() {
Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java
2007-09-22 20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java
2007-09-22 21:10:05 UTC (rev 15280)
@@ -49,6 +49,7 @@
import thaw.core.Config;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.gui.FileChooser;
import thaw.core.MainWindow;
import thaw.fcp.FreenetURIHelper;
@@ -85,7 +86,7 @@
public static abstract class BasicIndexAction
- implements IndexAction, Runnable {
+ implements IndexAction, ThawRunnable {
private FCPQueueManager queueManager;
private AbstractButton actionSource;
@@ -146,6 +147,10 @@
apply();
}
+ public void stop() {
+ /* \_o< */
+ }
+
public abstract void apply();
}
@@ -286,7 +291,7 @@
- public static class IndexModifier extends BasicIndexAction implements
Runnable {
+ public static class IndexModifier extends BasicIndexAction implements
ThawRunnable {
public IndexModifier(final FCPQueueManager queueManager, final
IndexBrowserPanel indexBrowser, final AbstractButton actionSource) {
super(queueManager, indexBrowser, actionSource);
@@ -320,7 +325,7 @@
}
- public static class IndexReuser extends BasicIndexAction implements
Runnable {
+ public static class IndexReuser extends BasicIndexAction implements
ThawRunnable {
public IndexReuser(final FCPQueueManager queueManager, final
IndexBrowserPanel indexBrowser, final AbstractButton actionSource) {
super(queueManager, indexBrowser, actionSource);
}
@@ -574,7 +579,7 @@
}
- public static class IndexHasChangedFlagReseter extends BasicIndexAction
implements Runnable {
+ public static class IndexHasChangedFlagReseter extends BasicIndexAction
implements ThawRunnable {
public IndexHasChangedFlagReseter(IndexBrowserPanel
indexBrowser, final AbstractButton actionSource) {
super(null, indexBrowser, actionSource);
}
@@ -591,7 +596,7 @@
}
- public static class IndexDownloader extends BasicIndexAction implements
Runnable, Observer {
+ public static class IndexDownloader extends BasicIndexAction implements
ThawRunnable, Observer {
private boolean autoSort = false;
public IndexDownloader(FCPQueueManager queueManager,
@@ -787,7 +792,7 @@
- public static class IndexSorter extends BasicIndexAction implements
Runnable {
+ public static class IndexSorter extends BasicIndexAction implements
ThawRunnable {
public IndexSorter(IndexBrowserPanel indexBrowser,
final AbstractButton actionSource) {
@@ -815,7 +820,7 @@
}
- public static class IndexUploader extends BasicIndexAction implements
Runnable, Observer {
+ public static class IndexUploader extends BasicIndexAction implements
ThawRunnable, Observer {
public IndexUploader(FCPQueueManager queueManager,
IndexBrowserPanel indexBrowser,
final AbstractButton actionSource) {
@@ -1297,7 +1302,7 @@
- public static class KeyAdder extends BasicIndexAction implements
Runnable, MouseListener {
+ public static class KeyAdder extends BasicIndexAction implements
ThawRunnable, MouseListener {
private JButton cancelButton = null;
private JButton okButton = null;
private JTextArea textArea = null;
@@ -1483,7 +1488,7 @@
- public static class LinkAdder extends BasicIndexAction implements
Runnable {
+ public static class LinkAdder extends BasicIndexAction implements
ThawRunnable {
public LinkAdder(IndexBrowserPanel indexBrowser, final
AbstractButton actionSource) {
super(null, indexBrowser, actionSource);
}
@@ -1538,7 +1543,7 @@
- public static class IndexFolderReorderer extends BasicIndexAction
implements Runnable {
+ public static class IndexFolderReorderer extends BasicIndexAction
implements ThawRunnable {
public IndexFolderReorderer(IndexBrowserPanel indexBrowser,
final AbstractButton actionSource) {
super(null, indexBrowser, actionSource);
}
@@ -1562,7 +1567,7 @@
- public static class IndexCommentAdder extends BasicIndexAction
implements Runnable, ActionListener {
+ public static class IndexCommentAdder extends BasicIndexAction
implements ThawRunnable, ActionListener {
private JDialog dialog;
private JComboBox author;
@@ -1691,7 +1696,7 @@
}
- public static class IndexCommentViewer extends BasicIndexAction
implements Runnable {
+ public static class IndexCommentViewer extends BasicIndexAction
implements ThawRunnable {
public IndexCommentViewer(IndexBrowserPanel indexBrowser, final
AbstractButton actionSource) {
super(null, indexBrowser, actionSource);
@@ -1715,7 +1720,7 @@
}
- public static class IndexDetailsViewer extends BasicIndexAction
implements Runnable, ActionListener {
+ public static class IndexDetailsViewer extends BasicIndexAction
implements ThawRunnable, ActionListener {
private DateFormat dateFormat;
public IndexDetailsViewer(IndexBrowserPanel indexBrowser, final
AbstractButton actionSource) {
Modified: trunk/apps/Thaw/src/thaw/plugins/index/LinkManagementHelper.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/LinkManagementHelper.java
2007-09-22 20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/index/LinkManagementHelper.java
2007-09-22 21:10:05 UTC (rev 15280)
@@ -12,6 +12,7 @@
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.plugins.Hsqldb;
import thaw.fcp.FCPQueueManager;
@@ -27,7 +28,7 @@
}
- public static abstract class BasicLinkAction implements LinkAction,
Runnable {
+ public static abstract class BasicLinkAction implements LinkAction,
ThawRunnable {
private AbstractButton src;
public BasicLinkAction(AbstractButton src) {
@@ -45,6 +46,10 @@
apply();
}
+ public void stop() {
+ /* \_o< */
+ }
+
public abstract void setTarget(Vector files);
public abstract void apply();
}
Modified: trunk/apps/Thaw/src/thaw/plugins/index/UnknownIndexList.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/UnknownIndexList.java
2007-09-22 20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/index/UnknownIndexList.java
2007-09-22 21:10:05 UTC (rev 15280)
@@ -28,6 +28,7 @@
import thaw.core.I18n;
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.gui.IconBox;
import thaw.fcp.FCPQueueManager;
import thaw.fcp.FreenetURIHelper;
@@ -163,7 +164,7 @@
return true;
}
- private class LinkAdder implements Runnable {
+ private class LinkAdder implements ThawRunnable {
private LinkList index;
private boolean running;
Modified: trunk/apps/Thaw/src/thaw/plugins/indexWebGrapher/GraphBuilder.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/indexWebGrapher/GraphBuilder.java
2007-09-22 20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/indexWebGrapher/GraphBuilder.java
2007-09-22 21:10:05 UTC (rev 15280)
@@ -12,9 +12,10 @@
import thaw.fcp.FreenetURIHelper;
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
-public class GraphBuilder implements Runnable {
+public class GraphBuilder implements ThawRunnable {
private IndexWebGrapher plugin;
private GraphPanel graphPanel;
@@ -35,7 +36,7 @@
this.stop = false;
}
- private class Refresher implements Runnable {
+ private class Refresher implements ThawRunnable {
public Refresher() {
}
@@ -59,6 +60,9 @@
} while (loop && !stop && !finish);
}
+ public void stop() {
+ /* \_o< */
+ }
}
Modified: trunk/apps/Thaw/src/thaw/plugins/mDns/MDNSDiscoveryPanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/mDns/MDNSDiscoveryPanel.java
2007-09-22 20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/mDns/MDNSDiscoveryPanel.java
2007-09-22 21:10:05 UTC (rev 15280)
@@ -26,6 +26,7 @@
import thaw.core.Logger;
import thaw.core.I18n;
+import thaw.core.ThawRunnable;
import thaw.plugins.MDns;
@@ -45,7 +46,9 @@
* TODO: implement the "Manual" mode
* TODO: maybe we should have a small progressbar shown in a new popup to
introduce a "delay" at startup
*/
-public class MDNSDiscoveryPanel extends JDialog implements ActionListener,
Runnable {
+public class MDNSDiscoveryPanel extends JDialog
+ implements ActionListener, ThawRunnable {
+
public interface MDNSDiscoveryPanelCallback {
/**
* Called upon exit from MDNSDiscoveryPanelCallback
@@ -220,4 +223,7 @@
}
+ public void stop() {
+ cancelledByUser = true;
+ }
}
Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/AutoRefresh.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/miniFrost/AutoRefresh.java 2007-09-22
20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/AutoRefresh.java 2007-09-22
21:10:05 UTC (rev 15280)
@@ -9,8 +9,9 @@
import thaw.core.Logger;
import thaw.core.Config;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
-public class AutoRefresh implements Runnable {
+public class AutoRefresh implements ThawRunnable {
public static final int DEFAULT_MAX_BOARDS_REFRESHING = 7;
public static final int DEFAULT_INTERVAL = 10; /* s */
Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/BoardManagementHelper.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/miniFrost/BoardManagementHelper.java
2007-09-22 20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/BoardManagementHelper.java
2007-09-22 21:10:05 UTC (rev 15280)
@@ -23,6 +23,7 @@
import thaw.core.I18n;
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.plugins.miniFrost.interfaces.Board;
import thaw.plugins.miniFrost.interfaces.BoardFactory;
import thaw.plugins.miniFrost.interfaces.Message;
@@ -35,7 +36,7 @@
public void setTarget(Board board);
}
- public static abstract class BasicBoardAction implements BoardAction,
Runnable {
+ public static abstract class BasicBoardAction implements BoardAction,
ThawRunnable {
public BasicBoardAction() {
@@ -45,6 +46,10 @@
apply();
}
+ public void stop() {
+ /* \_o< */
+ }
+
public void actionPerformed(ActionEvent e) {
Thread th = new ThawThread(this, "Action replier",
this);
th.start();
Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/DraftPanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/miniFrost/DraftPanel.java 2007-09-22
20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/DraftPanel.java 2007-09-22
21:10:05 UTC (rev 15280)
@@ -35,6 +35,7 @@
import thaw.core.I18n;
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.gui.IconBox;
import thaw.gui.FileChooser;
@@ -307,7 +308,7 @@
private JMenuItem addFile = null;
- private class BoardAdder implements Runnable {
+ private class BoardAdder implements ThawRunnable {
public BoardAdder() {
}
@@ -330,9 +331,11 @@
refreshAttachmentList();
}
+
+ public void stop() { /* \_o< */ }
}
- private class FileAdder implements Runnable {
+ private class FileAdder implements ThawRunnable {
public FileAdder() {
}
@@ -366,6 +369,8 @@
refreshAttachmentList();
}
+
+ public void stop() { /* \_o< */ }
}
Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessagePanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessagePanel.java
2007-09-22 20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessagePanel.java
2007-09-22 21:10:05 UTC (rev 15280)
@@ -40,6 +40,7 @@
import thaw.plugins.IndexBrowser;
import thaw.plugins.index.IndexManagementHelper;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
public class MessagePanel
implements ActionListener {
@@ -365,7 +366,7 @@
}
- private class ScrollBarSetter implements Runnable {
+ private class ScrollBarSetter implements ThawRunnable {
public ScrollBarSetter() { }
public void run() {
@@ -391,6 +392,10 @@
scrollPane.getVerticalScrollBar().setValue(max);
}
+
+ public void stop() {
+ /* \_o< */
+ }
}
Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoard.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoard.java
2007-09-22 20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoard.java
2007-09-22 21:10:05 UTC (rev 15280)
@@ -13,6 +13,7 @@
import thaw.core.Logger;
import thaw.core.I18n;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.plugins.Hsqldb;
import thaw.plugins.signatures.Identity;
@@ -24,7 +25,7 @@
public class KSKBoard
extends Observable
- implements Board, Runnable, Observer {
+ implements Board, ThawRunnable, Observer {
public final static int MAX_DOWNLOADS_AT_THE_SAME_TIME = 5;
public final static int MAX_FAILURES_IN_A_ROW = 5;
@@ -782,7 +783,14 @@
}
+ public void stop() {
+ /* startNewMessageDownload() won't start any new message
download
+ * if this variable is set to false
+ */
+ refreshing = false;
+ }
+
public boolean isRefreshing() {
return refreshing;
}
Modified:
trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKFileAttachment.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKFileAttachment.java
2007-09-22 20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKFileAttachment.java
2007-09-22 21:10:05 UTC (rev 15280)
@@ -8,6 +8,7 @@
import thaw.core.I18n;
import thaw.core.Config;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.plugins.Hsqldb;
import thaw.core.Logger;
import thaw.gui.FileChooser;
@@ -15,7 +16,7 @@
public class KSKFileAttachment
- extends KSKAttachment implements Runnable, java.util.Observer {
+ extends KSKAttachment implements ThawRunnable, java.util.Observer {
private String filename;
private long size;
@@ -269,7 +270,10 @@
}
}
+ public void stop() {
+ }
+
public void insert(Hsqldb db, int messageId) {
if (filename == null
|| size == 0
Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
2007-09-22 20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
2007-09-22 21:10:05 UTC (rev 15280)
@@ -36,6 +36,7 @@
import thaw.core.Core;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.gui.FileChooser;
import thaw.core.I18n;
import thaw.gui.IconBox;
@@ -325,7 +326,7 @@
}
- public class ActionReplier implements Runnable {
+ public class ActionReplier implements ThawRunnable {
private int action;
private int new_priority;
private Vector queries;
@@ -445,6 +446,10 @@
}
+
+ public void stop() {
+ /* \_o< */
+ }
}
Modified: trunk/apps/Thaw/src/thaw/plugins/signatures/SigConfigTab.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/signatures/SigConfigTab.java
2007-09-22 20:07:17 UTC (rev 15279)
+++ trunk/apps/Thaw/src/thaw/plugins/signatures/SigConfigTab.java
2007-09-22 21:10:05 UTC (rev 15280)
@@ -35,6 +35,7 @@
import thaw.core.Config;
import thaw.core.Logger;
import thaw.core.ThawThread;
+import thaw.core.ThawRunnable;
import thaw.gui.IconBox;
import thaw.gui.FileChooser;
@@ -238,7 +239,7 @@
}
- private class IdentityAdder implements Runnable {
+ private class IdentityAdder implements ThawRunnable {
public void run() {
@@ -255,10 +256,14 @@
updateList();
}
}
+
+ public void stop() {
+ /* \_o< */
+ }
}
- private class IdentityImporter implements Runnable {
+ private class IdentityImporter implements ThawRunnable {
public IdentityImporter() { }
public void run() {
@@ -274,10 +279,14 @@
updateList();
}
}
+
+ public void stop() {
+ /* \_o< */
+ }
}
- private class IdentityExporter implements Runnable {
+ private class IdentityExporter implements ThawRunnable {
private Identity i;
public IdentityExporter(Identity i) {
@@ -297,10 +306,14 @@
updateList();
}
}
+
+ public void stop() {
+ /* \_o< */
+ }
}
- private class IdentityDeleter implements Runnable {
+ private class IdentityDeleter implements ThawRunnable {
private Identity i;
public IdentityDeleter(Identity i) {
@@ -320,6 +333,10 @@
i.delete();
updateList();
}
+
+ public void stop() {
+ /* \_o< */
+ }
}