Author: jflesch
Date: 2006-07-09 02:58:22 +0000 (Sun, 09 Jul 2006)
New Revision: 9518
Modified:
trunk/apps/Thaw/build.xml
trunk/apps/Thaw/src/thaw/core/Core.java
trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java
trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java
trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java
trunk/apps/Thaw/src/thaw/plugins/QueueWatcher.java
trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java
trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java
Log:
Fixing some little things + Adding some colors to have more readability (Todo:
find better colors)
Modified: trunk/apps/Thaw/build.xml
===================================================================
--- trunk/apps/Thaw/build.xml 2006-07-08 20:39:16 UTC (rev 9517)
+++ trunk/apps/Thaw/build.xml 2006-07-09 02:58:22 UTC (rev 9518)
@@ -11,7 +11,29 @@
<property name="javac.debug" value="false" />
+
+ <target name="compile-gcj">
+ <mkdir dir="${bin.dir}" />
+ <javac compiler="gcj" srcdir="${src.dir}" destdir="${bin.dir}"
debug="true" optimize="true">
+
+ <compilerarg value="-Xlint" />
+
+ <classpath>
+ <pathelement location="${hsqldb.location}"/>
+ </classpath>
+
+ </javac>
+
+ <copy todir="${bin.dir}">
+ <fileset dir="${src.dir}">
+ <include name="**/*.properties" />
+ </fileset>
+ </copy>
+
+ </target>
+
+
<target name="compile">
<mkdir dir="${bin.dir}" />
Modified: trunk/apps/Thaw/src/thaw/core/Core.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/Core.java 2006-07-08 20:39:16 UTC (rev
9517)
+++ trunk/apps/Thaw/src/thaw/core/Core.java 2006-07-09 02:58:22 UTC (rev
9518)
@@ -233,7 +233,8 @@
*/
public void exit() {
Logger.info(this, "Stopping scheduler ...");
- queueManager.stopScheduler();
+ if(queueManager != null)
+ queueManager.stopScheduler();
Logger.info(this, "Stopping plugins ...");
pluginManager.stopPlugins();
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2006-07-08 20:39:16 UTC
(rev 9517)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2006-07-09 02:58:22 UTC
(rev 9518)
@@ -11,7 +11,7 @@
* notify() only when progress has really changes.
*/
public class FCPClientGet extends Observable implements Observer, FCPQuery {
- private final static String MAX_RETRIES = "3";
+ private final static int MAX_RETRIES = 3;
private final static int PACKET_SIZE = 1024;
private final static int BLOCK_SIZE = 32768;
@@ -32,6 +32,9 @@
private int progress; /* in pourcent */
private long fileSize;
+ private boolean running = false;
+ private boolean successful = false;
+
/**
* @param persistence 0 = Forever ; 1 = Until node reboot ; 2 = Until
the app disconnect
*/
@@ -51,12 +54,11 @@
this.progress = 0;
this.fileSize = 0;
- String cutcut[] = key.split("/");
-
- filename = cutcut[cutcut.length-1];
-
- if(filename.equals("") || filename.indexOf('.') < 0) {
+ if(key.indexOf('/') == key.length()-1) {
filename = "index.html";
+ } else {
+ String cutcut[] = key.split("/");
+ filename = cutcut[cutcut.length-1];
}
Logger.debug(this, "Getting "+key);
@@ -66,6 +68,8 @@
}
public boolean start(FCPQueueManager queueManager) {
+ running = true;
+
this.queueManager = queueManager;
status = "Requesting";
@@ -80,7 +84,7 @@
queryMessage.setValue("URI", getFileKey());
queryMessage.setValue("Identifier", id);
queryMessage.setValue("Verbosity", "1");
- queryMessage.setValue("MaxRetries", MAX_RETRIES);
+ queryMessage.setValue("MaxRetries", "0");
queryMessage.setValue("PriorityClass", (new
Integer(priority)).toString());
if(persistence == 0)
@@ -109,16 +113,10 @@
FCPMessage message = (FCPMessage)arg;
if(message.getValue("Identifier") == null
- || !message.getValue("Identifier").equals(id)) {
- if(message.getValue("Identifier") != null)
- Logger.verbose(this, "Not for us :
"+message.getValue("Identifier"));
- else
- Logger.verbose(this, "Not for us");
+ || !message.getValue("Identifier").equals(id))
return;
- } else {
- Logger.verbose(this, "For us for us !");
- }
+
if(message.getMessageName().equals("DataFound")) {
Logger.debug(this, "DataFound!");
@@ -163,6 +161,7 @@
status = "Protocol Error";
progress = 100;
+ running = false;
queueManager.getQueryManager().deleteObserver(this);
@@ -175,10 +174,16 @@
if(message.getMessageName().equals("GetFailed")) {
Logger.debug(this, "GetFailed !");
- status = "Failed";
- progress = 100;
+ attempt++;
- queueManager.getQueryManager().deleteObserver(this);
+ if(attempt >= MAX_RETRIES) {
+ status = "Failed";
+ progress = 100;
+ running = false;
+ queueManager.getQueryManager().deleteObserver(this);
+ } else {
+ status = "Retrying";
+ }
setChanged();
notifyObservers();
@@ -215,10 +220,14 @@
fileSize = (new
Long(message.getValue("DataLength"))).longValue();
- status = "Available";
+ status = "Writing";
- fetchDirectly(fileSize);
-
+ if(fetchDirectly(fileSize)) {
+ successful = true;
+ status = "Available";
+ }
+
+ running = false;
progress = 100;
queueManager.getQueryManager().deleteObserver(this);
@@ -230,13 +239,13 @@
/* Should not bother us */
return;
}
-
+
Logger.warning(this, "Unknow message :
"+message.getMessageName() + " !");
-
+
}
- public void fetchDirectly(long size) {
+ public boolean fetchDirectly(long size) {
FCPConnection connection;
File newFile = new File(getPath());
FileOutputStream fileWriter;
@@ -250,7 +259,7 @@
} catch(java.io.IOException e) {
Logger.error(this, "Unable to write file on disk ...
perms ? : "+e.toString());
status = "Write error";
- return;
+ return false;
}
/* size == bytes remaining on socket */
@@ -277,13 +286,13 @@
} catch(java.io.IOException e) {
Logger.error(this, "Unable to write file on
disk ... out of space ? : "+e.toString());
status = "Write error";
- return;
+ return false;
}
size = size - amount;
}
-
+
try {
fileWriter.close();
} catch(java.io.IOException e) {
@@ -292,6 +301,7 @@
Logger.info(this, "File written");
+ return true;
}
@@ -340,4 +350,12 @@
public int getAttempt() {
return attempt;
}
+
+ public boolean isSuccessful() {
+ return successful;
+ }
+
+ public boolean isRunning() {
+ return running;
+ }
}
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java 2006-07-08 20:39:16 UTC
(rev 9517)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java 2006-07-09 02:58:22 UTC
(rev 9518)
@@ -23,6 +23,7 @@
private int nmbCompressionCodecs = -1;
private boolean receiveAnswer = false;
+ private boolean successful = false;
private FCPQueryManager queryManager = null;
@@ -111,6 +112,7 @@
if(o == queryManager) {
if(answer.getMessageName().equals("NodeHello")) {
+ successful = true;
Logger.info(this, "Received a nodeHello");
nodeFCPVersion = answer.getValue("FCPVersion");
@@ -166,10 +168,14 @@
return 0;
}
- public boolean isFinished() {
+ public boolean isRunning() {
return false;
}
+ public boolean isFinished() {
+ return true;
+ }
+
public String getPath() {
return null;
}
@@ -178,5 +184,9 @@
return -1;
}
+ public boolean isSuccessful() {
+ return successful;
+ }
+
}
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java 2006-07-08 20:39:16 UTC
(rev 9517)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java 2006-07-09 02:58:22 UTC
(rev 9518)
@@ -66,7 +66,10 @@
public void disconnect() {
try {
+ if(isConnected())
socket.close();
+ else
+ Logger.notice(this, "Disconnect(): Already disconnected
!");
} catch(java.io.IOException e) {
Logger.warning(this, "Unable to close cleanly the
connection : "+e.toString());
}
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java 2006-07-08 20:39:16 UTC (rev
9517)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java 2006-07-09 02:58:22 UTC (rev
9518)
@@ -72,5 +72,13 @@
*/
public int getAttempt();
+ public boolean isRunning();
+
public boolean isFinished();
+
+ /**
+ * If unknow, return false.
+ * Query is considered as a failure is isFinished() && !isSuccesful()
+ */
+ public boolean isSuccessful();
}
Modified: trunk/apps/Thaw/src/thaw/plugins/QueueWatcher.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/QueueWatcher.java 2006-07-08 20:39:16 UTC
(rev 9517)
+++ trunk/apps/Thaw/src/thaw/plugins/QueueWatcher.java 2006-07-09 02:58:22 UTC
(rev 9518)
@@ -66,7 +66,13 @@
core.getMainWindow().addTab(I18n.getMessage("thaw.common.status"), mainPanel);
- core.getQueueManager().addObserver(this);
+ if(core.getQueueManager() != null)
+ core.getQueueManager().addObserver(this);
+ else {
+ Logger.warning(this, "Unable to connect to QueueManager. Is
the connection established ?");
+ return false;
+ }
+
return true;
}
@@ -105,15 +111,20 @@
FCPQueueManager manager = (FCPQueueManager)o;
- queuePanels[0].resetTable();
- queuePanels[1].resetTable();
+ try {
+ queuePanels[0].resetTable();
+ queuePanels[1].resetTable();
+
+ addToPanels(manager.getRunningQueue());
+
+ Vector[] pendings = manager.getPendingQueues();
+
+ for(int i = 0;i < pendings.length ; i++)
+ addToPanels(pendings[i]);
- addToPanels(manager.getRunningQueue());
-
- Vector[] pendings = manager.getPendingQueues();
-
- for(int i = 0;i < pendings.length ; i++)
- addToPanels(pendings[i]);
+ } catch(java.util.ConcurrentModificationException e) {
+ Logger.notice(this, "Collision while updating queue
panels");
+ }
}
Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java
2006-07-08 20:39:16 UTC (rev 9517)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java
2006-07-09 02:58:22 UTC (rev 9518)
@@ -112,7 +112,10 @@
public void refresh() {
if(query != null) {
progress.setValue(query.getProgression());
- progress.setString((new
Integer(query.getProgression())).toString() + "%");
+ if(!query.isFinished() || query.isSuccessful())
+ progress.setString((new
Integer(query.getProgression())).toString() + "%");
+ else
+ progress.setString("FAILED");
} else {
progress.setValue(0);
progress.setString("");
Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
2006-07-08 20:39:16 UTC (rev 9517)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
2006-07-09 02:58:22 UTC (rev 9518)
@@ -5,9 +5,15 @@
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.event.TableModelEvent;
+import javax.swing.JProgressBar;
import java.awt.BorderLayout;
+import java.awt.Component;
import java.util.Vector;
+import javax.swing.table.DefaultTableCellRenderer;
+import java.awt.Color;
+import java.awt.Component;
+
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
@@ -52,10 +58,59 @@
panel.add(label, BorderLayout.NORTH);
panel.add(new JScrollPane(table), BorderLayout.CENTER);
+ table.setDefaultRenderer( table.getColumnClass(0), new
ProgressRenderer(table, tableModel) );
+
tableModel.addTableModelListener(table);
table.addMouseListener(this);
}
+
+ private class ProgressRenderer extends DefaultTableCellRenderer {
+ private final static long serialVersionUID = 20060709;
+
+ private final Color SUCCESS = Color.GREEN;
+ private final Color FAILURE = Color.RED;
+ private final Color RUNNING = Color.ORANGE;
+ private final Color PENDING = Color.WHITE;
+
+ QueueTableModel model = null;
+ JTable tabl = null;
+
+ public ProgressRenderer(JTable table, QueueTableModel model) {
+ this.model = model;
+ this.tabl = table;
+ }
+
+ public Component getTableCellRendererComponent(JTable table,
Object value,
+ boolean
isSelected, boolean hasFocus,
+ int row, int
column) {
+
+ Component cell =
super.getTableCellRendererComponent(table, value,
+
isSelected, hasFocus,
+
row, column);
+
+ if(!isSelected) {
+
+ FCPQuery query = model.getQuery(row);
+
+ if(!query.isRunning() && !query.isFinished())
+ cell.setBackground(PENDING);
+ if(query.isFinished() && query.isSuccessful())
+ cell.setBackground(SUCCESS);
+ if(query.isFinished() && !query.isSuccessful())
+ cell.setBackground(FAILURE);
+ if(query.isRunning() && !query.isFinished())
+ cell.setBackground(RUNNING);
+ }
+
+
+ return cell;
+ }
+
+ }
+
+
+
public void resetTable() {
tableModel.resetTable();
}
Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java
2006-07-08 20:39:16 UTC (rev 9517)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java
2006-07-09 02:58:22 UTC (rev 9518)
@@ -7,6 +7,7 @@
import javax.swing.event.TableModelListener;
import javax.swing.event.TableModelEvent;
+import javax.swing.JProgressBar;
import thaw.core.*;
import thaw.i18n.I18n;
@@ -17,7 +18,7 @@
private Vector columnNames = new Vector();
- private Vector queries = null;
+ private Vector queries = null;
public QueueTableModel(boolean isForInsertions) {
super();
@@ -30,6 +31,8 @@
resetTable();
}
+
+
public int getRowCount() {
if(queries != null)
@@ -66,7 +69,7 @@
}
if(column == 3) {
- return (new Integer(query.getProgression())).toString()
+ "%";
+ return ((new
Integer(query.getProgression())).toString() + " %");
}
return null;
@@ -91,7 +94,14 @@
}
public void addQuery(FCPQuery query) {
+ JProgressBar bar;
+
((Observable)query).addObserver(this);
+
+ bar = new JProgressBar(0, 100);
+ bar.setStringPainted(true);
+ bar.setString((new
Integer(query.getProgression())).toString()+"%");
+ bar.setValue(query.getProgression());
queries.add(query);