package thaw.plugins.queueWatcher; import java.awt.Dimension; import java.awt.GridLayout; import java.util.Observable; import java.util.Observer; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JTextField; import thaw.core.I18n; import thaw.core.Logger; import thaw.fcp.FCPTransferQuery; /** * Right panel of queueWatcher plugin. Show details about a transfer. */ public class DetailPanel implements Observer { private JPanel subPanel; private JPanel panel; private final JTextField file = new JTextField(); private final JTextField size = new JTextField(); private final JProgressBar progress = new JProgressBar(0, 100); private final JProgressBar withTheNodeProgress = new JProgressBar(0, 100); private final JTextField status = new JTextField(); private final JTextField key = new JTextField(); private final JTextField path = new JTextField(); private final JTextField priority = new JTextField(); private final JTextField identifier = new JTextField(); private final JTextField globalQueue = new JTextField(); private FCPTransferQuery query = null; private final static Dimension dim = new Dimension(thaw.plugins.QueueWatcher.DIVIDER_LOCATION-10, 400); private final static String unknownStr = I18n.getMessage("thaw.common.unknown"); private final static String failedStr = I18n.getMessage("thaw.common.failed"); private final static String estimationStr = I18n.getMessage("thaw.common.estimation"); public final static String[] prioritiesStr = new String[QueuePanel.MIN_PRIORITY+1]; static { for (int i = 0 ; i < prioritiesStr.length ; i++) prioritiesStr[i] = I18n.getMessage("thaw.plugin.priority.p"+Integer.toString(i)); }; public DetailPanel() { panel = new JPanel(); subPanel = new JPanel(); final String[] fieldNames = { I18n.getMessage("thaw.common.file"), I18n.getMessage("thaw.common.size"), I18n.getMessage("thaw.common.progress"), I18n.getMessage("thaw.common.withTheNodeProgress"), I18n.getMessage("thaw.common.status"), I18n.getMessage("thaw.common.key"), I18n.getMessage("thaw.common.localPath"), I18n.getMessage("thaw.common.priority"), I18n.getMessage("thaw.common.identifier"), I18n.getMessage("thaw.common.globalQueue") }; subPanel.setLayout(new GridLayout(fieldNames.length*2, 1)); for(int i=0; i < (fieldNames.length * 2) ; i++) { if(i%2 == 0) { final JLabel newLabel = new JLabel(fieldNames[i/2]); subPanel.add(newLabel); } else { JComponent field = null; switch((i/2)) { case(0): field = file; file.setEditable(false); break; case(1): field = size; size.setEditable(false); break; case(2): field = progress; progress.setString(""); progress.setStringPainted(true); break; case(3): field = withTheNodeProgress; withTheNodeProgress.setString(""); withTheNodeProgress.setStringPainted(true); break; case(4): field = status; status.setEditable(false); break; case(5): field = key; key.setEditable(false);break; case(6): field = path; path.setEditable(false); break; case(7): field = priority; priority.setEditable(false); break; case(8): field = identifier; identifier.setEditable(false); break; case(9): field = globalQueue; globalQueue.setEditable(false); break; default: Logger.error(this, "Gouli goula ? ... is going to crash :p"); break; } subPanel.add(field); } } /* for (i < fieldNames.length) */ subPanel.setPreferredSize(DetailPanel.dim); panel.add(subPanel); } public JPanel getPanel() { return panel; } public void setQuery(final FCPTransferQuery query) { if(this.query != null) ((Observable)this.query).deleteObserver(this); this.query = query; if(this.query != null) ((Observable)this.query).addObserver(this); refreshAll(); } public void update(final Observable o, final Object arg) { refresh(); } public void refresh() { if(query != null) { withTheNodeProgress.setValue(query.getTransferWithTheNodeProgression()); withTheNodeProgress.setString(Integer.toString(query.getTransferWithTheNodeProgression()) + "%"); progress.setValue(query.getProgression()); if(!query.isFinished() || query.isSuccessful()) { String progression = Integer.toString(query.getProgression()) + "%"; if(!query.isProgressionReliable()) progression = progression + " ("+estimationStr+")"; progress.setString(progression); } else progress.setString(failedStr); if(query.getFileKey() != null) key.setText(query.getFileKey()); else key.setText(unknownStr); if(query.getFileSize() == 0) size.setText(unknownStr); else size.setText((new Long(query.getFileSize())).toString()+" B"); status.setText(query.getStatus()); if(query.getIdentifier() != null) identifier.setText(query.getIdentifier()); else identifier.setText("N/A"); if(query.getThawPriority() != -1) priority.setText(prioritiesStr[query.getThawPriority()]); else priority.setText(unknownStr); } else { withTheNodeProgress.setValue(0); withTheNodeProgress.setString(""); progress.setValue(0); progress.setString(""); status.setText(""); identifier.setText(""); size.setText(""); priority.setText(""); key.setText(""); } } public void refreshAll() { refresh(); if(query != null) { file.setText(query.getFilename()); 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")); else globalQueue.setText(I18n.getMessage("thaw.common.no")); } else { file.setText(""); key.setText(""); path.setText(""); globalQueue.setText(""); } } }