Author: jflesch
Date: 2006-07-14 18:39:42 +0000 (Fri, 14 Jul 2006)
New Revision: 9604

Modified:
   trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
   trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java
   trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java
   trunk/apps/Thaw/src/thaw/fcp/FCPMessage.java
   trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java
   trunk/apps/Thaw/src/thaw/i18n/thaw.properties
   trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java
   trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
Log:
Fix jdk 1.4 compatibility and FCPClientGet locking

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java      2006-07-14 18:31:21 UTC 
(rev 9603)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java      2006-07-14 18:39:42 UTC 
(rev 9604)
@@ -11,6 +11,7 @@

 /**
  * notify() only when progress has really changes.
+ * TODO: Put the fetchLock on FCPConnection. Not here.
  */
 public class FCPClientGet extends Observable implements Observer, 
FCPTransferQuery {
        private final static int MAX_RETRIES = -1;
@@ -32,12 +33,14 @@
        private String identifier;

        private int progress; /* in pourcent */
+       private boolean progressReliable = false;
        private long fileSize;

        private boolean running = false;
        private boolean successful = false;

        private static boolean fetchLock = false;
+       private boolean fetchLockOwner = false;


        /**
@@ -47,13 +50,15 @@
                this.queueManager = queueManager;
                setParameters(parameters);

+               progressReliable = false;
+
                /* If isPersistent(), then start() won't be called, so must 
relisten the
                   queryManager by ourself */
                if(isPersistent() && identifier != null && 
!identifier.equals("")) {
                        
this.queueManager.getQueryManager().deleteObserver(this);
                        this.queueManager.getQueryManager().addObserver(this);
                }
-               
+
        }


@@ -68,6 +73,8 @@

                this(key, priority, persistence, globalQueue, destinationDir);

+               progressReliable = false;
+
                this.queueManager = queueManager;

                this.progress = progress;
@@ -76,6 +83,7 @@

                successful = true;
                running = true;
+               
        }


@@ -92,6 +100,9 @@
                if(globalQueue && persistence >= 2)
                        globalQueue = false; /* else protocol error */

+               progressReliable = false;
+
+
                this.key = key;
                this.priority = priority;
                this.persistence = persistence;
@@ -220,18 +231,24 @@
                                Logger.debug(this, "Unknow URI ? was probably a 
stop order so no problem ...");
                                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;
                        successful = false;
-                       
+
+                       if(message.getValue("Fatal") != null &&
+                          message.getValue("Fatal").equals("false")) {
+                               status = status + " (non-fatal)";
+                       }
+
                        queueManager.getQueryManager().deleteObserver(this);

                        setChanged();
@@ -248,12 +265,6 @@
                                return;
                        }

-                       if(message.getValue("Fatal").equals("False")) {
-                               Logger.debug(this, "Non-fatal GetFailed");
-                               status = "Non-fatal GetFailed 
("+message.getValue("CodeDescription")+")";
-                               return;
-                       }
-
                        //removeRequest();

                        int code = ((new 
Integer(message.getValue("Code"))).intValue());
@@ -263,6 +274,12 @@
                            progress = 100;
                            running = false;
                            successful = false;
+                           
+                           if(message.getValue("Fatal") != null &&
+                              message.getValue("Fatal").equals("false")) {
+                                   status = status + " (non-fatal)";
+                           }
+
                            queueManager.getQueryManager().deleteObserver(this);
                        } else {
                            status = "Retrying";
@@ -290,6 +307,11 @@

                                status = "Fetching";

+                               if(message.getValue("FinalizedTotal") != null &&
+                                  
message.getValue("FinalizedTotal").equals("true")) {
+                                       progressReliable = true;
+                               }
+
                                setChanged();
                                notifyObservers();
                        }
@@ -320,6 +342,7 @@
                        }

                        fetchLock = false;
+                       fetchLockOwner = false;

                        
//queueManager.getQueryManager().getConnection().unlockWriting();

@@ -367,7 +390,7 @@

                                }

-                               if(!fetchLock)
+                               if(!fetchLock || fetchLockOwner)
                                        break;
                        }

@@ -375,7 +398,7 @@
                                Logger.warning(this, "UnlockWaiter.run() : Wtf 
?");
                        }

-                       clientGet.saveFileTo(this.dir);
+                       clientGet.continueSaveFileTo(this.dir);
                        return;
                }
        }
@@ -401,22 +424,28 @@
                }


-               if(fetchLock) {
+               Logger.info(this, "Waiting socket avaibility ...");
+               status = "Waiting socket avaibility ...";

-                       Logger.info(this, "Another file is being downloaded ... 
waiting ...");
+               setChanged();
+               notifyObservers();

-                       Thread fork = new Thread(new UnlockWaiter(this, dir));

-                       fork.start();
+               Thread fork = new Thread(new UnlockWaiter(this, dir));
+               fork.start();

-                       return true;
-               }
-               
+               return true;
+       }
+
+       public synchronized boolean continueSaveFileTo(String dir) {
+               destinationDir = dir;
+
                if(destinationDir == null) {
-                               Logger.warning(this, "saveFileTo() : Wtf ?");
+                       Logger.warning(this, "saveFileTo() : Wtf ?");
                }

                fetchLock = true;
+               fetchLockOwner = true;

                FCPMessage getRequestStatus = new FCPMessage();

@@ -584,6 +613,10 @@
                return progress;
        }

+       public boolean isProgressionReliable() {
+               return progressReliable;
+       }
+
        public String getFileKey() {
                return key;
        }

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java      2006-07-14 18:31:21 UTC 
(rev 9603)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java      2006-07-14 18:39:42 UTC 
(rev 9604)
@@ -453,47 +453,32 @@
                        }

                        if(msg.getMessageName().equals("PutFailed")) {
-                               /*
-                               if(msg.getValue("Fatal") != null
-                                  && msg.getValue("Fatal").equals("false")) {
-                                       status = "Warning 
("+msg.getValue("CodeDescription+")+")";
-                                       
-                                       setChanged();
-                                       notifyObservers();

-                                       return;
-                               }
-                               */
-
                                successful = false;
                                running = false;
                                finished = true;

                                status = "Failed 
("+msg.getValue("CodeDescription")+")";

+                               if(msg.getValue("Fatal") != null &&
+                                  msg.getValue("Fatal").equals("false"))
+                                       status = status + " (non-fatal)";
+
                                setChanged();
                                notifyObservers();
                                return;
                        }

                        if(msg.getMessageName().equals("ProtocolError")) {
-                               /*
-                               if(msg.getValue("Fatal") != null
-                                  && msg.getValue("Fatal").equals("false")) {
-                                       status = "Protocol warning 
("+msg.getValue("CodeDescription+")+")";

-                                       setChanged();
-                                       notifyObservers();
-
-                                       return;
-                               }
-                               */
-
                                successful = false;
                                running = false;
                                finished = true;

                                status = "Protocol error 
("+msg.getValue("CodeDescription")+")";
+                               if(msg.getValue("Fatal") != null && 
+                                  msg.getValue("Fatal").equals("false"))
+                                       status = status + " (non-fatal)";

                                setChanged();
                                notifyObservers();
@@ -526,8 +511,15 @@
                        if(msg.getMessageName().equals("FinishedCompression")) {
                                status = "Inserting";

-                               int rate = (int)( ((new 
Long(msg.getValue("OrigSize"))).longValue() * 100) / (new 
Long(msg.getValue("OrigSize"))).longValue() );
+                               if(msg.getValue("OrigSize") == null
+                                  || msg.getValue("CompressedSize") == null) {
+                                       setChanged();
+                                       notifyObservers();
+                                       return;
+                               }

+                               int rate = (int)( ((new 
Long(msg.getValue("OrigSize"))).longValue() * 100) / (new 
Long(msg.getValue("CompressedSize"))).longValue() );
+
                                Logger.info(this, "Compression: "+ (new 
Integer(rate)).intValue());

                                setChanged();
@@ -618,6 +610,10 @@
                return progress;
        }

+       public boolean isProgressionReliable() {
+               return true;
+       }
+
        /**
         * @return public key
         */

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java     2006-07-14 18:31:21 UTC 
(rev 9603)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java     2006-07-14 18:39:42 UTC 
(rev 9604)
@@ -99,6 +99,8 @@
                        return false;
                }

+               Logger.info(this, "Connection to "+nodeAddress+":"+(new 
Integer(port)).toString()+"...");
+
                if(socket != null && !socket.isClosed())
                        disconnect();

@@ -132,6 +134,8 @@

                reader = new BufferedInputStream(in);

+               Logger.info(this, "Connected");
+
                setChanged();
                notifyObservers();


Modified: trunk/apps/Thaw/src/thaw/fcp/FCPMessage.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPMessage.java        2006-07-14 18:31:21 UTC 
(rev 9603)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPMessage.java        2006-07-14 18:39:42 UTC 
(rev 9604)
@@ -50,7 +50,7 @@
                for(i++; i < lines.length ; i++) {
                        /* Empty lines are ignored. */
                        /* Line not containing '=' (like "Data" or 
"EndMessage") are ignored */
-                       if(lines[i].equals("") || !lines[i].contains("="))
+                       if(lines[i].equals("") || !(lines[i].indexOf("=") >= 0))
                                continue;

                        String[] affectation = lines[i].split("=");
@@ -76,7 +76,7 @@
                        Logger.notice(this, "Setting name to empty ? weird");
                }

-               if(name.contains("\n")) {
+               if(name.indexOf("\n")>=0) {
                        Logger.notice(this, "Name shouldn't contain '\n'");
                }


Modified: trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java  2006-07-14 18:31:21 UTC 
(rev 9603)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java  2006-07-14 18:39:42 UTC 
(rev 9604)
@@ -53,6 +53,9 @@
         */
        public int getProgression();

+       public boolean isProgressionReliable();
+
+
        /**
         * Informal.
         * Gives *public* final key only.
@@ -114,6 +117,5 @@
         */
        public String getIdentifier();

-
        public String getFilename();
 }

Modified: trunk/apps/Thaw/src/thaw/i18n/thaw.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw.properties       2006-07-14 18:31:21 UTC 
(rev 9603)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw.properties       2006-07-14 18:39:42 UTC 
(rev 9604)
@@ -50,6 +50,9 @@
 thaw.common.downloadLocally=Download locally

 thaw.common.unspecified=Unspecified
+thaw.common.unknown=Unknown
+thaw.common.estimation=estimation
+thaw.common.failed=FAILED

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

Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java      
2006-07-14 18:31:21 UTC (rev 9603)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java      
2006-07-14 18:39:42 UTC (rev 9604)
@@ -128,15 +128,23 @@
        public void refresh() {
                if(query != null) {
                        progress.setValue(query.getProgression());
-                       if(!query.isFinished() || query.isSuccessful())
-                               progress.setString((new 
Integer(query.getProgression())).toString() + "%");
-                       else
-                               progress.setString("FAILED");
+

+
+                       if(!query.isFinished() || query.isSuccessful()) {
+                               String progression = (new 
Integer(query.getProgression())).toString() + "%";
+
+                               if(!query.isProgressionReliable())
+                                       progression = progression + " 
("+I18n.getMessage("thaw.common.estimation")+")";
+
+                               progress.setString(progression);
+                       } else
+                               
progress.setString(I18n.getMessage("thaw.common.failed"));
+                       
                        if(query.getFileKey() != null)
                                key.setText(query.getFileKey());
                        else
-                               key.setText("Unknown");
+                               
key.setText(I18n.getMessage("thaw.common.unknown"));

                        size.setText((new 
Long(query.getFileSize())).toString()+" B");

@@ -150,7 +158,7 @@
                        if(query.getThawPriority() != -1)
                                priority.setText((new 
Integer(query.getThawPriority())).toString());
                        else
-                               priority.setText("Unknown");
+                               
priority.setText(I18n.getMessage("thaw.common.unknown"));

                } else {
                        progress.setValue(0);
@@ -173,7 +181,10 @@

                        file.setText(query.getFilename());

-                       path.setText(query.getPath());
+                       if(query.getPath() != null)
+                               path.setText(query.getPath());
+                       else
+                               
path.setText(I18n.getMessage("thaw.common.unspecified"));

                        if(query.isGlobal())
                                
globalQueue.setText(I18n.getMessage("thaw.common.yes"));

Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java       
2006-07-14 18:31:21 UTC (rev 9603)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java       
2006-07-14 18:39:42 UTC (rev 9604)
@@ -201,13 +201,18 @@
        /**
         * @param queries Vector of FCPTransferQuery only
         */
-       public void addToTable(Vector queries) {
-               for(Iterator queryIt = queries.iterator();
-                   queryIt.hasNext();) {
-                       
-                       FCPTransferQuery query = 
(FCPTransferQuery)queryIt.next();
+       public synchronized void addToTable(Vector queries) {
+               try {
+                       for(Iterator queryIt = queries.iterator();
+                           queryIt.hasNext();) {
+                               
+                               FCPTransferQuery query = 
(FCPTransferQuery)queryIt.next();
+                               
+                               addToTable(query);
+                       }

-                       addToTable(query);
+               } catch(java.util.ConcurrentModificationException e) {
+                       Logger.notice(this, "Collision.");
                }
        }



Reply via email to