Author: jflesch
Date: 2006-07-12 20:35:09 +0000 (Wed, 12 Jul 2006)
New Revision: 9585

Added:
   trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java
   trunk/apps/Thaw/src/thaw/fcp/FCPQueueLoader.java
Modified:
   trunk/apps/Thaw/src/thaw/core/Config.java
   trunk/apps/Thaw/src/thaw/core/Core.java
   trunk/apps/Thaw/src/thaw/core/QueueKeeper.java
   trunk/apps/Thaw/src/thaw/core/WarningWindow.java
   trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
   trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java
   trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java
   trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java
   trunk/apps/Thaw/src/thaw/i18n/thaw.properties
   trunk/apps/Thaw/src/thaw/plugins/InsertPlugin.java
   trunk/apps/Thaw/src/thaw/plugins/fetchPlugin/FetchPanel.java
   trunk/apps/Thaw/src/thaw/plugins/insertPlugin/InsertPanel.java
   trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java
   trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
Log:
Thaw is now stateless. Queue for pending queries is now, by default, deactivated

Modified: trunk/apps/Thaw/src/thaw/core/Config.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/Config.java   2006-07-12 20:07:34 UTC (rev 
9584)
+++ trunk/apps/Thaw/src/thaw/core/Config.java   2006-07-12 20:35:09 UTC (rev 
9585)
@@ -295,8 +295,8 @@
        public void setDefaultValues() {
                setValue("nodeAddress", "127.0.0.1");   
                setValue("nodePort", "9481");
-               setValue("maxSimultaneousDownloads", "10");
-               setValue("maxSimultaneousInsertions", "2");
+               setValue("maxSimultaneousDownloads", "-1");
+               setValue("maxSimultaneousInsertions", "-1");
                setValue("thawId", "thaw_"+(new Integer((new 
Random()).nextInt(1000))).toString());
        }


Modified: trunk/apps/Thaw/src/thaw/core/Core.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/Core.java     2006-07-12 20:07:34 UTC (rev 
9584)
+++ trunk/apps/Thaw/src/thaw/core/Core.java     2006-07-12 20:35:09 UTC (rev 
9585)
@@ -89,9 +89,6 @@
                if(!initPluginManager())
                        return false;

-               if(!restorePreviousState())
-                       return false;
-
                mainWindow.setStatus(I18n.getMessage("thaw.statusBar.ready"));

                mainWindow.setVisible(true);
@@ -175,6 +172,14 @@

                                        queueManager.startScheduler();

+                                       queueManager.restartNonPersistent();
+                                       
+                                       FCPWatchGlobal watchGlobal = new 
FCPWatchGlobal(true);
+                                       watchGlobal.start(queueManager);
+                                       
+                                       FCPQueueLoader queueLoader = new 
FCPQueueLoader();
+                                       queueLoader.start(queueManager, 
config.getValue("thawId"));
+                                       
                                }

                        }
@@ -195,20 +200,6 @@
        }


-       public boolean restorePreviousState() {
-               if(connection.isConnected()) {
-                       queueManager.restartNonPersistent();
-
-                       FCPWatchGlobal watchGlobal = new FCPWatchGlobal(true);
-                       watchGlobal.start(queueManager);
-
-                       FCPListPersistentRequests listPersistent = new 
FCPListPersistentRequests();
-                       listPersistent.start(queueManager);
-               }
-
-               return true;
-       }
-       
        public FCPConnection getConnectionManager() {
                return connection;
        }

Modified: trunk/apps/Thaw/src/thaw/core/QueueKeeper.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/QueueKeeper.java      2006-07-12 20:07:34 UTC 
(rev 9584)
+++ trunk/apps/Thaw/src/thaw/core/QueueKeeper.java      2006-07-12 20:35:09 UTC 
(rev 9585)
@@ -62,8 +62,7 @@
                   || queryEl.getAttribute("type").equals("1")) {
                        newQuery = new FCPClientGet(queueManager, params);
                } else {
-                       Logger.error(new QueueKeeper(), "Insert resuming TODO");
-                       /* TODO */ /* FCPClientPut */
+                       newQuery = new FCPClientPut(queueManager, params);
                }

                if(runningQueue)
@@ -153,6 +152,9 @@


        private static Element saveQuery(FCPTransferQuery query, Document 
xmlDoc) {
+               if(query.isPersistent())
+                       return null;
+
                HashMap params = query.getParameters();

                Element queryEl = xmlDoc.createElement("query");
@@ -222,18 +224,6 @@



-               Element runningQueueEl = xmlDoc.createElement("runningQueue");
-
-               for(Iterator runIt = runningQueue.iterator() ;
-                   runIt.hasNext(); ) {
-                       FCPTransferQuery query = (FCPTransferQuery)runIt.next();
-
-                       runningQueueEl.appendChild(saveQuery(query, xmlDoc));
-
-               }
-
-               rootEl.appendChild(runningQueueEl);
-
                Element pendingQueueEl = xmlDoc.createElement("pendingQueue");

                for(int i = 0 ; i <= MIN_PRIORITY ; i++) {

Modified: trunk/apps/Thaw/src/thaw/core/WarningWindow.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/WarningWindow.java    2006-07-12 20:07:34 UTC 
(rev 9584)
+++ trunk/apps/Thaw/src/thaw/core/WarningWindow.java    2006-07-12 20:35:09 UTC 
(rev 9585)
@@ -15,7 +15,7 @@
        public WarningWindow(Core core,
                             String warning)
        {
-               if(core.getMainWindow() != null) {
+               if(core != null && core.getMainWindow() != null) {
                        
JOptionPane.showMessageDialog(core.getMainWindow().getMainFrame(),
                                                      warning,
                                                      "Warning",

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java      2006-07-12 20:07:34 UTC 
(rev 9584)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java      2006-07-12 20:35:09 UTC 
(rev 9585)
@@ -13,7 +13,7 @@
  * notify() only when progress has really changes.
  */
 public class FCPClientGet extends Observable implements Observer, 
FCPTransferQuery {
-       private final static int MAX_RETRIES = 5;
+       private final static int MAX_RETRIES = -1;
        private final static int PACKET_SIZE = 1024;
        private final static int BLOCK_SIZE = 32768;

@@ -37,7 +37,9 @@
        private boolean running = false;
        private boolean successful = false;

+       private static boolean fetchLock = false;

+
        /**
         * See setParameters().
         */
@@ -56,13 +58,37 @@


        /**
+        * Used to resume query from persistent queue of the node.
+        * Think of adding this FCPClientGet as a queryManager observer.
+        */
+       public FCPClientGet(String id, String key, int priority,
+                           int persistence, boolean globalQueue,
+                           String destinationDir, String status, int progress,
+                           FCPQueueManager queueManager) {
+
+               this(key, priority, persistence, globalQueue, destinationDir);
+
+               this.queueManager = queueManager;
+
+               this.progress = progress;
+               this.status = status;
+               this.identifier = id;
+
+               successful = true;
+               running = true;
+       }
+
+
+       /**
         * Only for initial queries : To resume queries, use 
FCPClientGet(FCPQueueManager, Hashmap).
+        * @param destinationDir if null, won't be automatically saved
         * @param persistence 0 = Forever ; 1 = Until node reboot ; 2 = Until 
the app disconnect
         */
        public FCPClientGet(String key, int priority,
                            int persistence, boolean globalQueue,
-                           String destinationDir) {
+                           String destinationDir) {    

+       
                if(globalQueue && persistence >= 2)
                        globalQueue = false; /* else protocol error */

@@ -83,7 +109,7 @@
                        filename = cutcut[cutcut.length-1];
                }

-               Logger.debug(this, "Getting "+key);
+               Logger.debug(this, "Query for getting "+key+" created");

                status = "Waiting";

@@ -111,6 +137,9 @@
                queryMessage.setValue("MaxRetries", "0");
                queryMessage.setValue("PriorityClass", (new 
Integer(priority)).toString());

+               if(destinationDir != null)
+                       queryMessage.setValue("ClientToken", destinationDir);
+
                if(persistence == 0)
                        queryMessage.setValue("Persistence", "forever");
                if(persistence == 1)
@@ -144,29 +173,30 @@
                if(message.getMessageName().equals("DataFound")) {
                        Logger.debug(this, "DataFound!");

-                       status = "Fetching";
-                       fileSize = (new 
Long(message.getValue("DataLength"))).longValue();
-
-                       
-                       if(isPersistent() && !isFinished()) {
-                               FCPMessage getRequestStatus = new FCPMessage();
+                       if(!isFinished()) {
+                               status = "Fetching";
+                               fileSize = (new 
Long(message.getValue("DataLength"))).longValue();

-                               
getRequestStatus.setMessageName("GetRequestStatus");
-                               getRequestStatus.setValue("Identifier", 
identifier);
-                               if(globalQueue)
-                                       getRequestStatus.setValue("Global", 
"true");
-                               else
-                                       getRequestStatus.setValue("Global", 
"false");
-                               getRequestStatus.setValue("OnlyData", "true");
+                               progress = 100;
+                               successful = true;

-                               
queueManager.getQueryManager().writeMessage(getRequestStatus);
+                               if(isPersistent()) {
+                                       if(destinationDir != null) {

+                                               if(!fileExists(destinationDir))
+                                                       
saveFileTo(destinationDir);
+                                               else
+                                                       Logger.info(this, "File 
already existing. Not rewrited");
+                                               
+                                       } else {
+                                               Logger.info(this, "Don't know 
where to put file, so file not asked to the node");
+                                       }
+                               }
+                               
+                               setChanged();
+                               notifyObservers();
                        }
-                       

-                       setChanged();
-                       notifyObservers();
-
                        return;
                }

@@ -190,6 +220,12 @@
                                return;
                        }

+                       if(message.getValue("Fatal").equals("False")) {
+                               Logger.debug(this, "Non-fatal protocol error");
+                               status = "Protocol warning 
("+message.getValue("CodeDescription")+")";
+                               return;
+                       }
+
                        status = "Protocol Error 
("+message.getValue("CodeDescription")+")";
                        progress = 100;
                        running = false;
@@ -211,14 +247,13 @@
                                return;
                        }

-                       if(isPersistent())
-                               removePersistent();
+                       //removeRequest();

                        int code = ((new 
Integer(message.getValue("Code"))).intValue());

                        attempt++;

-                       if(attempt >= MAX_RETRIES || code == 25) {
+                       if(MAX_RETRIES == -1 || attempt >= MAX_RETRIES || code 
== 25) {
                            status = "Failed 
("+message.getValue("CodeDescription")+")";
                            progress = 100;
                            running = false;
@@ -248,7 +283,7 @@

                                status = "Fetching";

-                               progress = (int)((succeeded * 98) / required);
+                               progress = (int)((succeeded * 99) / required);

                                setChanged();
                                notifyObservers();
@@ -260,8 +295,6 @@
                if(message.getMessageName().equals("AllData")) {
                        Logger.debug(this, "AllData ! : " + identifier);

-                       progress = 99;
-
                        status = "Loading";

                        fileSize = message.getAmountOfDataWaiting();
@@ -271,13 +304,15 @@
                        
//queueManager.getQueryManager().getConnection().lockWriting();


-                       if(fetchDirectly(fileSize, true)) {
+                       if(fetchDirectly(getPath(), fileSize, true)) {
                                successful = true;
                                status = "Available";
                        } else {
                                Logger.warning(this, "Unable to fetch correctly 
the file. This may create problems on socket");
                        }

+                       fetchLock = false;
+
                        
//queueManager.getQueryManager().getConnection().unlockWriting();

                        running = false;
@@ -285,9 +320,6 @@

                        queueManager.getQueryManager().deleteObserver(this);

-                       if(isPersistent())
-                               removePersistent();
-
                        setChanged();
                        notifyObservers();

@@ -307,10 +339,106 @@
        }


-       public boolean fetchDirectly(long size, boolean reallyWrite) {
+       private class UnlockWaiter implements Runnable {
+               FCPClientGet clientGet;
+               String dir;
+
+               public UnlockWaiter(FCPClientGet clientGet, String dir) {
+                       this.clientGet = clientGet;
+                       this.dir = dir;
+               }
+
+               public void run() {
+                       if(dir == null) {
+                               Logger.warning(this, "UnlockWaiter.run() : Wtf 
?");
+                       }
+
+                       while(true) {
+                               try {
+                                       Thread.sleep(200);
+                               } catch(java.lang.InterruptedException e) {
+
+                               }
+
+                               if(!fetchLock)
+                                       break;
+                       }
+                       
+                       if(dir == null) {
+                               Logger.warning(this, "UnlockWaiter.run() : Wtf 
?");
+                       }
+
+                       saveFileTo(this.dir);
+                       return;
+               }
+       }
+
+       public synchronized boolean saveFileTo(String dir) {
+
+               if(dir == null) {
+                       Logger.warning(this, "saveFileTo() : Can't save to 
null.");
+                       return false;
+               }
+
+               destinationDir = dir;
+
+
+               if(!isFinished() || !isSuccessful()) {
+                       Logger.warning(this, "Unable to fetch a file not 
finished");
+                       return false;
+               }
+
+               if(!isPersistent()) {
+                       Logger.warning(this, "Not persistent, so unable to 
ask");
+                       return false;
+               }
+
+
+               if(fetchLock) {
+
+                       Logger.info(this, "Another file is being downloaded ... 
waiting ...");
+
+                       Thread fork = new Thread(new UnlockWaiter(this, dir));
+
+                       fork.start();
+
+                       return true;
+               }
+               
+               if(destinationDir == null) {
+                               Logger.warning(this, "saveFileTo() : Wtf ?");
+               }
+
+               fetchLock = true;
+
+               FCPMessage getRequestStatus = new FCPMessage();
+               
+               getRequestStatus.setMessageName("GetRequestStatus");
+               getRequestStatus.setValue("Identifier", identifier);
+               if(globalQueue)
+                       getRequestStatus.setValue("Global", "true");
+               else
+                       getRequestStatus.setValue("Global", "false");
+               getRequestStatus.setValue("OnlyData", "true");
+               
+               queueManager.getQueryManager().writeMessage(getRequestStatus);
+
+               return true;
+       }
+
+
+       private boolean fileExists(String dir) {
+               destinationDir = dir;
+               File newFile = new File(getPath());
+               return newFile.exists();
+       }
+
+
+
+       private boolean fetchDirectly(String file, long size, boolean 
reallyWrite) {
                FCPConnection connection;

-               File newFile = new File(getPath());
+               File newFile = new File(file);
                FileOutputStream fileWriter = null;


@@ -377,9 +505,14 @@
        }


-       private void removePersistent() {
+       public boolean removeRequest() {
                FCPMessage stopMessage = new FCPMessage();

+               if(!isPersistent()) {
+                       Logger.info(this, "Can't remove non persistent 
request.");
+                       return false;
+               }
+
                stopMessage.setMessageName("RemovePersistentRequest");

                if(globalQueue)
@@ -388,32 +521,26 @@
                        stopMessage.setValue("Global", "false");

                stopMessage.setValue("Identifier", identifier);
-                       
+               
                queueManager.getQueryManager().writeMessage(stopMessage);
+
+               running = false;
+
+               return true;
        }

        public boolean pause(FCPQueueManager queryManager) {
+               /* TODO ? : Reduce the priority 
+                  instead of stopping */
+
                Logger.info(this, "Pausing fetching of the key : 
"+getFileKey());
-               
-               if(!isRunning() || isFinished()) {
-                       Logger.info(this, "Can't stop (pause). Not running.");

-               } else {
-                       
-                       if(isPersistent()) {
-                               removePersistent();
-                       } else {
-                               Logger.warning(this, "Can't stop a 
non-persistent query, will continue in background ...");
-                       }
-               }
+               removeRequest();

                progress = 0;
                successful = false;
-               running = false;
                status = "Delayed";

-               
-
                setChanged();
                notifyObservers();

@@ -424,21 +551,8 @@
        public boolean stop(FCPQueueManager queryManager) {
                Logger.info(this, "Stop fetching of the key : "+getFileKey());

-               if(!isRunning() || isFinished()) {
-                       Logger.info(this, "Can't stop. Not running -> 
considered as failed");
-
-               } else {
-                       
-                       if(isPersistent()) {
-                               removePersistent();
-                       } else {
-                               Logger.warning(this, "Can't stop a 
non-persistent query, will continue in background ...");
-                       }
-               }
-
                progress = 100;
                successful = false;
-               running = false;
                status = "Stopped";

                setChanged();
@@ -479,7 +593,12 @@
        }

        public String getPath() {
-               return destinationDir + File.separator + filename;
+               if(destinationDir != null)
+                       return destinationDir + File.separator + filename;
+               
+               Logger.warning(this, "getPath() : destinationDir == null");
+
+               return null;
        }


@@ -511,13 +630,13 @@
        public HashMap getParameters() {
                HashMap result = new HashMap();

-               result.put("key", key);
-               result.put("filename", filename);
-               result.put("priority", ((new Integer(priority)).toString()));
-               result.put("persistence", ((new 
Integer(persistence)).toString()));
-               result.put("globalQueue", ((new 
Boolean(globalQueue)).toString()));
-               result.put("destinationDir", destinationDir);
-               result.put("attempt", ((new Integer(attempt)).toString()));
+               result.put("URI", key);
+               result.put("Filename", filename);
+               result.put("Priority", ((new Integer(priority)).toString()));
+               result.put("Persistence", ((new 
Integer(persistence)).toString()));
+               result.put("Global", ((new Boolean(globalQueue)).toString()));
+               result.put("ClientToken", destinationDir);
+               result.put("Attempt", ((new Integer(attempt)).toString()));

                if(status.indexOf("(?)") > 0) {
                        String[] cut = status.split(" ");
@@ -526,36 +645,36 @@
                        result.put("status", status);
                }

-               result.put("identifier", identifier);
-               result.put("progress", ((new Integer(progress)).toString()));
-               result.put("fileSize", ((new Long(fileSize)).toString()));
-               result.put("running", ((new Boolean(running)).toString()));
-               result.put("successful", ((new 
Boolean(successful)).toString()));
+               result.put("Identifier", identifier);
+               result.put("Progress", ((new Integer(progress)).toString()));
+               result.put("FileSize", ((new Long(fileSize)).toString()));
+               result.put("Running", ((new Boolean(running)).toString()));
+               result.put("Successful", ((new 
Boolean(successful)).toString()));

                return result;
        }

        public boolean setParameters(HashMap parameters) {

-               key            = (String)parameters.get("key");
+               key            = (String)parameters.get("URI");

                Logger.debug(this, "Resuming key : "+key);

-               filename       = (String)parameters.get("filename");
-               priority       = ((new 
Integer((String)parameters.get("priority"))).intValue());
-               persistence    = ((new 
Integer((String)parameters.get("persistence"))).intValue());
-               globalQueue    = ((new 
Boolean((String)parameters.get("globalQueue"))).booleanValue());
-               destinationDir = (String)parameters.get("destinationDir");
-               attempt        = ((new 
Integer((String)parameters.get("attempt"))).intValue());
-               status         = (String)parameters.get("status");
-               identifier     = (String)parameters.get("identifier");
+               filename       = (String)parameters.get("Filename");
+               priority       = ((new 
Integer((String)parameters.get("Priority"))).intValue());
+               persistence    = ((new 
Integer((String)parameters.get("Persistence"))).intValue());
+               globalQueue    = ((new 
Boolean((String)parameters.get("Global"))).booleanValue());
+               destinationDir = (String)parameters.get("ClientToken");
+               attempt        = ((new 
Integer((String)parameters.get("Attempt"))).intValue());
+               status         = (String)parameters.get("Status");
+               identifier     = (String)parameters.get("Identifier");

                Logger.info(this, "Resuming id : "+identifier);

-               progress       = ((new 
Integer((String)parameters.get("progress"))).intValue());
-               fileSize       = ((new 
Long((String)parameters.get("fileSize"))).longValue());
-               running        = ((new 
Boolean((String)parameters.get("running"))).booleanValue());
-               successful     = ((new 
Boolean((String)parameters.get("successful"))).booleanValue());
+               progress       = ((new 
Integer((String)parameters.get("Progress"))).intValue());
+               fileSize       = ((new 
Long((String)parameters.get("FileSize"))).longValue());
+               running        = ((new 
Boolean((String)parameters.get("Running"))).booleanValue());
+               successful     = ((new 
Boolean((String)parameters.get("Successful"))).booleanValue());

                if(persistence == 2 && !isFinished()) {
                        progress = 0;

Added: trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java      2006-07-12 20:07:34 UTC 
(rev 9584)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java      2006-07-12 20:35:09 UTC 
(rev 9585)
@@ -0,0 +1,114 @@
+package thaw.fcp;
+
+import java.util.HashMap;
+
+/**
+ * TODO
+ */
+public class FCPClientPut implements FCPTransferQuery {
+
+       /**
+        * To resume query from file. (see core.QueueKeeper)
+        */
+       public FCPClientPut(FCPQueueManager queueManager, HashMap parameters) {
+
+       }
+
+
+       public boolean start(FCPQueueManager queueManager) {
+               return false;
+       }
+
+       public boolean stop(FCPQueueManager queueManager) {
+               return false;
+       }
+
+       public int getQueryType() {
+               return 2;
+       }
+
+       public boolean pause(FCPQueueManager queueManager) {
+               return false;
+       }
+
+
+       public boolean removeRequest() {
+               return false;
+       }
+
+       public int getThawPriority() {
+               return -1;
+       }
+       
+       public String getStatus() {
+               return "Tulip";
+       }
+
+       public int getProgression() {
+               return 0;
+       }
+
+       public String getFileKey() {
+               return "Tulip";
+       }
+
+       public long getFileSize() {
+               return 0;
+       }
+
+       public String getPath() {
+               return "Tulip";
+       }
+
+       public int getAttempt() {
+               return 0;
+       }
+
+       public void setAttempt(int x) {
+               return;
+       }
+
+       public int getMaxAttempt() {
+               return 0;
+       }
+
+       public boolean isRunning() {
+               return false;
+       }
+
+       public boolean isFinished() {
+               return false;
+       }
+
+       public boolean isSuccessful() {
+               return false;
+       }
+
+       public HashMap getParameters() {
+               return null;
+       }
+
+       public boolean setParameters(HashMap parameters) {
+               return false;
+       }
+
+
+       public boolean isPersistent() {
+               return true;
+       }
+
+       public boolean isGlobal() {
+               return true;
+       }
+
+       public String getIdentifier() {
+               return "Tulip";
+       }
+
+       /**
+        * Copy simply the file ... a little bit useless ...
+        */
+       public boolean saveFileTo(String dir) {
+               return false;
+       }
+}

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java  2006-07-12 20:07:34 UTC (rev 
9584)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java  2006-07-12 20:35:09 UTC (rev 
9585)
@@ -13,7 +13,7 @@
        public boolean start(FCPQueueManager queueManager);

        /**
-        * Definitive stop.
+        * Definitive stop. Transfer is considered as failed.
         * @param queueManger QueueManager gives access to QueryManager.
         */
        public boolean stop(FCPQueueManager queueManager);

Added: trunk/apps/Thaw/src/thaw/fcp/FCPQueueLoader.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPQueueLoader.java    2006-07-12 20:07:34 UTC 
(rev 9584)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPQueueLoader.java    2006-07-12 20:35:09 UTC 
(rev 9585)
@@ -0,0 +1,91 @@
+package thaw.fcp;
+
+import java.util.Observer;
+import java.util.Observable;
+
+import thaw.core.Logger;
+
+/**
+ * Reload the queue from the queue node.
+ * Send himself the ListPersistentRequests.
+ */
+public class FCPQueueLoader implements Observer {
+       FCPQueueManager queueManager;
+       String thawId;
+
+       public FCPQueueLoader() {
+               
+       }
+
+       public boolean start(FCPQueueManager queueManager, String thawId) {
+               this.queueManager = queueManager;
+               this.thawId = thawId;
+               
+               queueManager.getQueryManager().addObserver(this);
+               
+
+               FCPListPersistentRequests listPersistent = new 
FCPListPersistentRequests();
+               return listPersistent.start(queueManager);
+       }
+
+
+       public boolean stop(FCPQueueManager queueManager) {
+               /* Ignored */
+               return false;
+       }
+
+       public int getQueryType() {
+               return 0;
+       }
+
+
+       public void update(Observable o, Object param) {
+               FCPMessage msg = (FCPMessage)param;
+
+               if(msg.getMessageName().equals("PersistentGet")) {
+                       Logger.info(this, "Resuming from PersistentGet");
+                       
+                       int persistence = 0;
+
+                       if(msg.getValue("PersistenceType").equals("reboot"))
+                               persistence = 1;
+                       if(msg.getValue("PersistenceType").equals("connection"))
+                               persistence = 2;
+
+                       boolean global = true;
+
+                       if(msg.getValue("Global").equals("false"))
+                               global = false;
+
+                       String destinationDir = null;
+
+                       if(msg.getValue("Identifier").startsWith(thawId))
+                               destinationDir = msg.getValue("ClientToken");
+
+
+
+                       FCPClientGet clientGet = new 
FCPClientGet(msg.getValue("Identifier"),
+                                                                 
msg.getValue("URI"), // key
+                                                                 -1, 
persistence, global,
+                                                                 
destinationDir, "Fetching", 0,
+                                                                 queueManager);
+                                                                 
+                                                                 
+                       if(queueManager.addQueryToTheRunningQueue(clientGet, 
false))
+                               
queueManager.getQueryManager().addObserver(clientGet);
+                       else
+                               Logger.info(this, "Already in the running 
queue");
+
+               }
+
+               if(msg.getMessageName().equals("PersistentPut")) {
+                       Logger.warning(this, "Non implemented yet !");
+                       return;
+               }
+
+               if(msg.getMessageName().equals("EndListPersistentRequests")) {
+                       Logger.info(this, "End Of ListPersistentRequests. Self 
removing");
+                       queueManager.getQueryManager().deleteObserver(this);
+               }
+       }
+}

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java   2006-07-12 20:07:34 UTC 
(rev 9584)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java   2006-07-12 20:35:09 UTC 
(rev 9585)
@@ -84,15 +84,17 @@
                return runningQueries;
        }

-       public void addQueryToThePendingQueue(FCPTransferQuery query) {
+       /**
+        * @return false if already added.
+        */
+       public boolean addQueryToThePendingQueue(FCPTransferQuery query) {
                if(query.getThawPriority() < 0) {
-                       addQueryToTheRunningQueue(query);
-                       return;
+                       return addQueryToTheRunningQueue(query);
                }

                if(isAlreadyPresent(query)) {
                        Logger.notice(this, "Key was already in one of the 
queues");
-                       return;
+                       return false;
                }

                Logger.debug(this, "Adding query to the pending queue ...");
@@ -103,19 +105,26 @@
                notifyObservers(query);

                Logger.debug(this, "Adding done");
+               return true;
        }

        /**
         * will call start() function of the query.
+        * @return false if already added
         */
-       public void addQueryToTheRunningQueue(FCPTransferQuery query) {
-               addQueryToTheRunningQueue(query, true);
+       public boolean addQueryToTheRunningQueue(FCPTransferQuery query) {
+               return addQueryToTheRunningQueue(query, true);
        }

-       public void addQueryToTheRunningQueue(FCPTransferQuery query, boolean 
callStart) {
+       public boolean addQueryToTheRunningQueue(FCPTransferQuery query, 
boolean callStart) {
                Logger.debug(this, "Adding query to the running queue ...");

-               if(!callStart) {
+               if(isAlreadyPresent(query)) {
+                       Logger.notice(this, "Key was already in one of the 
queues");
+                       return false;
+               }
+
+               if(!callStart && query.getIdentifier().startsWith(thawId)) {
                        /* It's a resumed query => We to adapt the next Id 
                         * to avoid collisions.
                         */
@@ -138,6 +147,8 @@
                        query.start(this);

                Logger.debug(this, "Adding done");
+
+               return true;
        }


@@ -245,22 +256,22 @@
                        /* We move queries from the pendingQueue to the 
runningQueue until we got our quota */
                        for(int priority = 0;
                            priority <= PRIORITY_MIN
-                                   && (runningInsertions < maxInsertions
-                                       || runningDownloads < maxDownloads) ;
+                                   && ( (maxInsertions <= -1 || 
runningInsertions < maxInsertions)
+                                       || (maxDownloads <= -1 || 
runningDownloads < maxDownloads) ) ;
                            priority++) {

                                try {
                                        for(Iterator it = 
pendingQueries[priority].iterator();
                                            it.hasNext()
-                                                   && (runningInsertions < 
maxInsertions
-                                                       || runningDownloads < 
maxDownloads); ) {
+                                                   && ( (maxInsertions <= -1 
|| runningInsertions < maxInsertions)
+                                                       || (maxDownloads <= -1 
|| runningDownloads < maxDownloads) ); ) {

                                                FCPTransferQuery query = 
(FCPTransferQuery)it.next();

                                                if( (query.getQueryType() == 1
-                                                    && runningDownloads < 
maxDownloads)
+                                                    && (maxDownloads <= -1 || 
runningDownloads < maxDownloads) )
                                                    || (query.getQueryType() == 
2
-                                                       && runningInsertions < 
maxInsertions) ) {
+                                                       && (maxInsertions <= -1 
|| runningInsertions < maxInsertions)) ) {

                                                        Logger.debug(this, 
"Scheduler : Moving a query from pendingQueue to the runningQueue");
                                                        
pendingQueries[priority].remove(query);

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java  2006-07-12 20:07:34 UTC 
(rev 9584)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java  2006-07-12 20:35:09 UTC 
(rev 9585)
@@ -9,13 +9,18 @@
 public interface FCPTransferQuery extends FCPQuery {

        /**
-        * Similar to stop(), but the query knows that it will be started again 
later.
+        * Stop the transfer, but don't consider it as failed.
         * @param queueManager QueueManager gives access to QueryManager;
         */
        public boolean pause(FCPQueueManager queueManager);


        /**
+        * Only if persistent. Remove it from the queue.
+        */
+       public boolean removeRequest();
+
+       /**
         * Used by the QueueManager only.
         * Currently these priority are the same
         * as FCP priority, but it can change in the
@@ -33,7 +38,14 @@
         */
        public String getStatus();

+
        /**
+        * For persistent request only.
+        * @param dir Directory
+        */
+       public boolean saveFileTo(String dir);
+
+       /**
         * Informal.
         * In pourcents.
         */
@@ -41,6 +53,7 @@

        /**
         * Informal.
+        * Gives *public* final key only.
         * @return can be null
         */
        public String getFileKey();

Modified: trunk/apps/Thaw/src/thaw/i18n/thaw.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw.properties       2006-07-12 20:07:34 UTC 
(rev 9584)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw.properties       2006-07-12 20:35:09 UTC 
(rev 9585)
@@ -47,7 +47,9 @@
 thaw.common.delay=Delay
 thaw.common.copyKeysToClipboard=Copy keys to clipboard
 thaw.common.forceRestart=Force (re)start
+thaw.common.downloadLocally=Download locally

+
 ## Errors
 thaw.error.idAlreadyUsed=Unable to connect. Our Id is already used by another 
client connected to the node.

@@ -69,8 +71,8 @@
 thaw.config.nodeAddress=Node address
 thaw.config.nodePort=Node port (FCP)

-thaw.config.maxSimultaneousDownloads=Maximum simultaneous downloads
-thaw.config.maxSimultaneousInsertions=Maximum simultaneous insertions
+thaw.config.maxSimultaneousDownloads=Maximum simultaneous downloads (-1 = 
unlimited)
+thaw.config.maxSimultaneousInsertions=Maximum simultaneous insertions (-1 = 
unlimited)

 thaw.config.thawId=Thaw ID

@@ -88,6 +90,8 @@
 thaw.plugin.insert.publicKey=Public key
 thaw.plugin.insert.privateKey=Private key
 thaw.plugin.insert.insertAction=Insert
+thaw.plugin.insert.specifyNameAndRev=Please specify a name and a revision
+thaw.plugin.insert.specifyFile=Please specify a file

 thaw.plugin.priority.p0=Emergency (*not* for normal use)
 thaw.plugin.priority.p1=Very high

Modified: trunk/apps/Thaw/src/thaw/plugins/InsertPlugin.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/InsertPlugin.java  2006-07-12 20:07:34 UTC 
(rev 9584)
+++ trunk/apps/Thaw/src/thaw/plugins/InsertPlugin.java  2006-07-12 20:35:09 UTC 
(rev 9585)
@@ -10,10 +10,12 @@
 import javax.swing.ButtonGroup;
 import javax.swing.JRadioButton;
 import javax.swing.JTextField;
+import java.io.File;

 import thaw.core.*;
 import thaw.i18n.I18n;
 import thaw.plugins.insertPlugin.*;
+import thaw.fcp.*;

 public class InsertPlugin implements thaw.core.Plugin {
        private Core core;
@@ -30,7 +32,7 @@

                Logger.info(this, "Starting plugin \"InsertPlugin\" ...");

-               insertPanel = new InsertPanel();
+               insertPanel = new InsertPanel(this);

                
core.getMainWindow().addTab(I18n.getMessage("thaw.common.insertion"), 
insertPanel.getPanel());

@@ -50,4 +52,26 @@
        public String getNameForUser() {
                return I18n.getMessage("thaw.common.insertion");
        }
+
+
+       /**
+        * Note: public key is found from private one.
+        * @param keyType : 0 = CHK ; 1 = KSK ; 2 = SSK
+        * @param rev  : ignored if key == CHK
+        * @param name : ignored if key == CHK
+        * @param privateKey : ignored if key == CHK/KSK ; can be null if it 
has to be generated
+        * @param persistence 0 = Forever ; 1 = Until node reboot ; 2 = Until 
the app disconnect
+        */
+       public FCPClientPut insertFile(File file, int keyType,
+                                      int rev, String name,
+                                      String privateKey,
+                                      int priority, boolean global,
+                                      int persistence) {
+
+               /* TODO */
+               return null;
+       }
+                                      
+                                      
+                                      
 }

Modified: trunk/apps/Thaw/src/thaw/plugins/fetchPlugin/FetchPanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/fetchPlugin/FetchPanel.java        
2006-07-12 20:07:34 UTC (rev 9584)
+++ trunk/apps/Thaw/src/thaw/plugins/fetchPlugin/FetchPanel.java        
2006-07-12 20:35:09 UTC (rev 9585)
@@ -42,10 +42,12 @@
        private String[] priorities = null;
        private JComboBox prioritySelecter = null;

+       /*
        private JPanel persistencePanel = null;
        private JLabel persistenceLabel = null;
        private String[] persistences = null;
        private JComboBox persistenceSelecter = null;
+       */

        private JLabel destinationLabel = null;
        private JPanel dstChoosePanel = null; /* 3 x 1 */
@@ -117,7 +119,8 @@
                priorityPanel.add(priorityLabel);
                priorityPanel.add(prioritySelecter);

-               /* PERSISTENCE */
+               /* PERSISTENCE */ /* set always to "forever" */
+               /*
                persistencePanel = new JPanel();
                persistencePanel.setLayout(new GridLayout(2, 1, 5, 5));

@@ -131,6 +134,7 @@

                persistencePanel.add(persistenceLabel);
                persistencePanel.add(persistenceSelecter);
+               */

                /* QUEUE */
                queuePanel = new JPanel();
@@ -163,7 +167,7 @@
                dstChoosePanel.add(destinationButton);

                belowPanel.add(priorityPanel);
-               belowPanel.add(persistencePanel);
+               //belowPanel.add(persistencePanel);
                belowPanel.add(queuePanel);
                belowPanel.add(dstChoosePanel);

@@ -184,20 +188,22 @@
        public void actionPerformed(java.awt.event.ActionEvent e) {
                if(e.getSource() == validationButton) {
                        int priority = 6;
-                       int persistence = 0;
+                       //int persistence = 0;
                        boolean globalQueue = true;

+                       /*
                        
if(((String)persistenceSelecter.getSelectedItem()).equals(I18n.getMessage("thaw.common.persistenceForever")))
                                persistence = 0;
                        
if(((String)persistenceSelecter.getSelectedItem()).equals(I18n.getMessage("thaw.common.persistenceReboot")))
                                persistence = 1;
                        
if(((String)persistenceSelecter.getSelectedItem()).equals(I18n.getMessage("thaw.common.persistenceConnection")))
                                persistence = 2;
+                       */

                        
if(((String)queueSelecter.getSelectedItem()).equals(I18n.getMessage("thaw.common.false")))
                                globalQueue = false;

-
+                       
                        for(int i = 0; i < priorities.length ; i++) {
                                
if(((String)prioritySelecter.getSelectedItem()).equals(I18n.getMessage("thaw.plugin.priority.p"+i)))
                                        priority = i;
@@ -208,10 +214,16 @@
                                return;
                        }

+                       /*
                        fetchPlugin.fetchFiles(fileList.getText().split("\n"),
                                               priority, persistence, 
globalQueue,
                                               destinationField.getText());
+                       */

+                       fetchPlugin.fetchFiles(fileList.getText().split("\n"),
+                                              priority, 0, globalQueue,
+                                              destinationField.getText());
+
                        fileList.setText("");
                }


Modified: trunk/apps/Thaw/src/thaw/plugins/insertPlugin/InsertPanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/insertPlugin/InsertPanel.java      
2006-07-12 20:07:34 UTC (rev 9584)
+++ trunk/apps/Thaw/src/thaw/plugins/insertPlugin/InsertPanel.java      
2006-07-12 20:35:09 UTC (rev 9585)
@@ -20,9 +20,12 @@

 import thaw.core.*;
 import thaw.i18n.I18n;
+import thaw.plugins.InsertPlugin;
+import thaw.fcp.*;

+public class InsertPanel implements ActionListener, ItemListener {
+       private final static int MIN_PRIORITY = 6;

-public class InsertPanel implements ActionListener, ItemListener {
        private JPanel globalPanel = null;

        private JPanel mainPanel;
@@ -57,15 +60,22 @@
        private JLabel globalLabel;
        private JComboBox globalSelecter;

+       /*
        private String[] persistences;
        private JLabel persistenceLabel;
        private JComboBox persistenceSelecter;
+       */

        private JButton letsGoButton;


-       public InsertPanel() {
+       private InsertPlugin insertPlugin;
+       private int keyType;
+       private FCPClientPut lastInsert = null;

+       public InsertPanel(InsertPlugin insertPlugin) {
+               this.insertPlugin = insertPlugin;
+
                globalPanel = new JPanel();

                mainPanel = new JPanel();
@@ -101,6 +111,7 @@
                keyRadioButtons = new JRadioButton[3];
                keyRadioButtons[0] = new 
JRadioButton(I18n.getMessage("thaw.plugin.insert.CHK"));
                keyRadioButtons[0].setSelected(true);
+               keyType = 0;
                keyRadioButtons[1] = new 
JRadioButton(I18n.getMessage("thaw.plugin.insert.KSK"));
                keyRadioButtons[2] = new 
JRadioButton(I18n.getMessage("thaw.plugin.insert.SSK"));
                keyRadioGroup = new ButtonGroup();
@@ -113,22 +124,24 @@
                subPanel.add(subSubPanel);


+               subSubPanel = new JPanel();
+               subSubPanel.setLayout(new GridLayout(4, 1));
+
+
                // PERSISTENCE & GLOBAL
-
+               /*
                persistences = new String[] {
                        I18n.getMessage("thaw.common.persistenceConnection"),
                        I18n.getMessage("thaw.common.persistenceReboot"),
                        I18n.getMessage("thaw.common.persistenceForever"),
                };

-               subSubPanel = new JPanel();
-               subSubPanel.setLayout(new GridLayout(4, 1));
                persistenceLabel = new 
JLabel(I18n.getMessage("thaw.common.persistence"));
                subSubPanel.add(persistenceLabel);
                persistenceSelecter = new JComboBox(persistences);
                
persistenceSelecter.setSelectedItem(I18n.getMessage("thaw.common.persistenceReboot"));
                subSubPanel.add(persistenceSelecter);
-               
+               */

                globalStr = new String[] {
                        I18n.getMessage("thaw.common.true"),
@@ -218,6 +231,8 @@
                letsGoButton = new 
JButton(I18n.getMessage("thaw.plugin.insert.insertAction"));
                letsGoButton.setPreferredSize(new Dimension(200, 40));

+               letsGoButton.addActionListener(this);
+
                mainPanel.add(letsGoButton, BorderLayout.SOUTH);

                mainPanel.setSize(400, 400);
@@ -234,6 +249,70 @@


        public void actionPerformed(ActionEvent e) {
+               if(e.getSource() == letsGoButton) {
+                       int rev = -1;
+                       String name = null;
+                       String privateKey = null;
+                       int priority = 6;
+                       boolean global = true;
+                       //int persistence = 0;
+
+                       if(selectedFiles.getText() == null
+                          || selectedFiles.getText().equals("")) {
+                               new WarningWindow(null, 
I18n.getMessage("thaw.plugin.insert.specifyFile"));
+                               return;
+                       }
+
+                       if(keyType == 1 || keyType == 2) {
+                               if(nameField.getText() == null
+                                  || nameField.getText().equals("")
+                                  || revField.getText() == null
+                                  || revField.getText().equals("")) {
+                                       new WarningWindow(null, 
I18n.getMessage("thaw.plugin.insert.specifyNameAndRev"));
+                                       return;
+                               }
+
+                               rev = ((new 
Integer(revField.getText())).intValue());
+                               name = nameField.getText();
+                       }
+
+                       if(keyType == 2) {
+                               if(privateKeyField.getText() != null
+                                  && !privateKeyField.getText().equals(""))
+                                       privateKey = privateKeyField.getText();
+                       }
+
+                       for(int i = 0 ; i <= MIN_PRIORITY ; i++) {
+                               
if(I18n.getMessage("thaw.plugin.priority.p"+(new 
Integer(i)).toString()).equals((String)prioritySelecter.getSelectedItem())) {
+                                       priority = i;
+                               }
+                       }
+
+                       
if(((String)globalSelecter.getSelectedItem()).equals(I18n.getMessage("thaw.common.true")))
+                               global = true;
+                       
if(((String)globalSelecter.getSelectedItem()).equals(I18n.getMessage("thaw.common.true")))
+                               global = false;
+
+                       /*
+                       
if(((String)persistenceSelecter.getSelectedItem()).equals(I18n.getMessage("thaw.common.persistenceForever")))
+                               persistence = 0;
+                       
if(((String)persistenceSelecter.getSelectedItem()).equals(I18n.getMessage("thaw.common.persistenceReboot")))
+                               persistence = 1;
+                       
if(((String)persistenceSelecter.getSelectedItem()).equals(I18n.getMessage("thaw.common.persistenceConnection")))
+                               persistence = 2;
+                       
+                       lastInsert = insertPlugin.insertFile(new 
File(selectedFiles.getText()),
+                                                            keyType, rev, 
name, privateKey, priority,
+                                                            global, 
persistence);
+                       */
+
+                       lastInsert = insertPlugin.insertFile(new 
File(selectedFiles.getText()),
+                                                            keyType, rev, 
name, privateKey, priority,
+                                                            global, 0);
+
+                       /* TODO : Listen lastInsert to fetch display the 
private / public key */
+               }
+
                if(e.getSource() == browseButton) {
                        FileChooser fileChooser = new FileChooser();
                        File files;
@@ -241,16 +320,28 @@
                        
fileChooser.setTitle(I18n.getMessage("thaw.common.selectFile"));
                        fileChooser.setDirectoryOnly(false);
                        fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
-                       if( (files = fileChooser.askOneFile()) == null) { /* 
TODO: One file -> Many files */
+                       if( (files = fileChooser.askOneFile()) == null) { /* 
TODO ? : One file -> Many files */
                                Logger.info(this, "Nothing selected");
                                return;
                        }

                        selectedFiles.setText(files.getPath());
+
+                       if(keyType != 0)
+                               nameField.setText(getFileNameFromPath());
                }
        }


+       public String getFileNameFromPath() {
+               if(selectedFiles.getText() == null)
+                       return "";
+               
+               String[] cutcut = selectedFiles.getText().split(File.separator);
+
+               return cutcut[cutcut.length - 1];
+       }
+
        public void itemStateChanged(ItemEvent e) {
                if(e.getItem() == keyRadioButtons[0]
                   && e.getStateChange() == ItemEvent.SELECTED) { /* CHK */
@@ -258,6 +349,11 @@
                        publicKeyField.setEditable(false);
                        revField.setEditable(false);
                        nameField.setEditable(false);
+                       revField.setText("");
+                       nameField.setText("");
+                       privateKeyField.setText("");
+                       publicKeyField.setText("");
+                       keyType = 0;
                        return;
                }

@@ -267,6 +363,11 @@
                        publicKeyField.setEditable(false);
                        revField.setEditable(true);
                        nameField.setEditable(true);
+                       revField.setText("0");
+                       nameField.setText(getFileNameFromPath());
+                       privateKeyField.setText("");
+                       publicKeyField.setText("");
+                       keyType = 1;
                        return;
                }

@@ -276,6 +377,11 @@
                        publicKeyField.setEditable(true);
                        revField.setEditable(true);
                        nameField.setEditable(true);
+                       revField.setText("0");
+                       nameField.setText(getFileNameFromPath());
+                       privateKeyField.setText("");
+                       publicKeyField.setText("");
+                       keyType = 2;
                        return;
                }
        }

Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java      
2006-07-12 20:07:34 UTC (rev 9584)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java      
2006-07-12 20:35:09 UTC (rev 9585)
@@ -38,7 +38,6 @@
        private JTextField attempt    = new JTextField();
        private JTextField identifier = new JTextField();
        private JTextField globalQueue= new JTextField();
-       private JTextField persistence= new JTextField();

        private FCPTransferQuery query = null;

@@ -61,8 +60,7 @@
                                        I18n.getMessage("thaw.common.priority"),
                                        I18n.getMessage("thaw.common.try")+" #",
                                        
I18n.getMessage("thaw.common.identifier"),
-                                       
I18n.getMessage("thaw.common.globalQueue"),
-                                       
I18n.getMessage("thaw.common.persistant")
+                                       
I18n.getMessage("thaw.common.globalQueue")
                };

                subPanel.setLayout(new GridLayout(fieldNames.length*2, 1));
@@ -90,7 +88,6 @@
                                case(7): field = attempt; 
attempt.setEditable(false); break;
                                case(8): field = identifier; 
identifier.setEditable(false); break;
                                case(9): field = globalQueue; 
globalQueue.setEditable(false); break;
-                               case(10): field = persistence; 
persistence.setEditable(false); break;
                                default: Logger.error(this, "Gouli goula ? ... 
is going to crash :p"); break;
                                }

@@ -135,6 +132,9 @@
                                progress.setString((new 
Integer(query.getProgression())).toString() + "%");
                        else
                                progress.setString("FAILED");
+                       
+                       size.setText((new 
Long(query.getFileSize())).toString()+" B");
+
                        status.setText(query.getStatus());
                        if(query.getIdentifier() != null)
                                identifier.setText(query.getIdentifier());
@@ -142,6 +142,10 @@
                                identifier.setText("N/A");
                        attempt.setText((new 
Integer(query.getAttempt())).toString());

+                       if(query.getThawPriority() != -1)
+                               priority.setText((new 
Integer(query.getThawPriority())).toString());
+                       else
+                               priority.setText("Unknown");

                } else {
                        progress.setValue(0);
@@ -149,6 +153,8 @@
                        status.setText("");
                        identifier.setText("");
                        attempt.setText("");
+                       size.setText("");
+                       priority.setText("");

                }
        }
@@ -161,15 +167,9 @@
                        String[] plop = query.getFileKey().split("/");

                        file.setText(plop[plop.length-1]);
-                       size.setText((new 
Long(query.getFileSize())).toString()+" B");

                        key.setText(query.getFileKey());
                        path.setText(query.getPath());
-                       priority.setText((new 
Integer(query.getThawPriority())).toString());
-                       if(query.isPersistent())
-                               
persistence.setText(I18n.getMessage("thaw.common.yes"));
-                       else
-                               
persistence.setText(I18n.getMessage("thaw.common.no"));

                        if(query.isGlobal())
                                
globalQueue.setText(I18n.getMessage("thaw.common.yes"));
@@ -177,12 +177,9 @@
                                
globalQueue.setText(I18n.getMessage("thaw.common.no"));
                } else {
                        file.setText("");
-                       size.setText("");
                        key.setText("");
                        path.setText("");
-                       priority.setText("");
                        globalQueue.setText("");
-                       persistence.setText("");
                }

        }

Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java       
2006-07-12 20:07:34 UTC (rev 9584)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java       
2006-07-12 20:35:09 UTC (rev 9585)
@@ -6,6 +6,7 @@
 import javax.swing.JScrollPane;
 import javax.swing.event.TableModelEvent;
 import javax.swing.JProgressBar;
+import javax.swing.JFileChooser;
 import java.awt.BorderLayout;
 import java.awt.Component;
 import java.util.Vector;
@@ -30,6 +31,8 @@
 import java.awt.datatransfer.ClipboardOwner;
 import java.awt.datatransfer.StringSelection;

+import java.io.File;
+
 import thaw.core.*;
 import thaw.i18n.I18n;

@@ -52,6 +55,7 @@
        private JMenuItem removeItem;
        private JMenuItem cancelItem;
        private JMenuItem delayItem;
+       private JMenuItem downloadItem;
        private JMenuItem forceRestartItem;
        private JMenuItem copyKeysItem;

@@ -95,12 +99,16 @@
                removeItem = new 
JMenuItem(I18n.getMessage("thaw.common.removeFromTheList"));
                cancelItem = new 
JMenuItem(I18n.getMessage("thaw.common.cancel"));
                delayItem = new JMenuItem(I18n.getMessage("thaw.common.delay"));
+               downloadItem = new 
JMenuItem(I18n.getMessage("thaw.common.downloadLocally"));
                forceRestartItem = new 
JMenuItem(I18n.getMessage("thaw.common.forceRestart"));
                copyKeysItem = new 
JMenuItem(I18n.getMessage("thaw.common.copyKeysToClipboard"));

                rightClickMenu.add(removeItem);
                rightClickMenu.add(cancelItem);
-               rightClickMenu.add(delayItem);
+               if((new 
Integer(core.getConfig().getValue("maxSimultaneousDownloads"))).intValue() >= 0
+                  || (new 
Integer(core.getConfig().getValue("maxSimultaneousInsertions"))).intValue() >= 
0)
+                       rightClickMenu.add(delayItem);
+               rightClickMenu.add(downloadItem);
                rightClickMenu.add(forceRestartItem);
                rightClickMenu.add(copyKeysItem);

@@ -109,6 +117,7 @@
                copyKeysItem.addActionListener(this);
                forceRestartItem.addActionListener(this);
                delayItem.addActionListener(this);
+               downloadItem.addActionListener(this);

                table.addMouseListener(this);
                table.addKeyListener(this);
@@ -177,8 +186,11 @@

        public void addToTable(FCPTransferQuery query) {
                if( (insertionQueue && query.getQueryType() == 2)
-                   || (!insertionQueue && query.getQueryType() == 1))
+                   || (!insertionQueue && query.getQueryType() == 1)) {
+                       Logger.verbose(this, "Adding a query to the display");
+
                        tableModel.addQuery(query);
+               }
        }

        /**
@@ -215,7 +227,17 @@
        public void actionPerformed(ActionEvent e) {
                Toolkit tk = Toolkit.getDefaultToolkit();
                String keys = "";
+               File dir = null;

+               if(e.getSource() == downloadItem) {
+                       FileChooser fileChooser = new FileChooser();
+                       
fileChooser.setTitle(I18n.getMessage("thaw.common.downloadLocally"));
+                       fileChooser.setDirectoryOnly(true);
+                       fileChooser.setDialogType(JFileChooser.SAVE_DIALOG);
+                       dir = fileChooser.askOneFile();
+               }
+
+
                for(int i = 0 ; i < selectedRows.length;i++) {
                                FCPTransferQuery query = 
(FCPTransferQuery)queries.get(selectedRows[i]);

@@ -225,6 +247,9 @@
                                if(e.getSource() == removeItem) {
                                        if(query.isRunning() && 
!query.isFinished())
                                                
query.stop(core.getQueueManager());
+                                       if(query.isFinished())
+                                               query.removeRequest();
+
                                        core.getQueueManager().remove(query);

                                        tableModel.removeQuery(query);
@@ -232,7 +257,8 @@

                                if(e.getSource() == cancelItem) {
                                        query.stop(core.getQueueManager());
-                                       core.getQueueManager().remove(query);
+                                       /*core.getQueueManager().remove(query);
+                                        */
                                }

                                if(e.getSource() == delayItem) {
@@ -254,6 +280,11 @@
                                        keys = keys + query.getFileKey() + "\n";
                                }

+                               if(e.getSource() == downloadItem
+                                  && dir != null) {
+                                       query.saveFileTo(dir.getPath());
+                               }
+
                } /* for i in selectedRows */




Reply via email to