/**
*
*/
package com.aionemu.packetsamurai.gui.logrepo;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import com.aionemu.packetsamurai.PacketSamurai;
import com.aionemu.packetsamurai.gui.Main;
import com.aionemu.packetsamurai.logrepo.LogFile;
import javolution.util.FastMap;
/**
* @author Ulysses R. Ribeiro
*
*/
@SuppressWarnings("serial")
public class TransferPanel extends JPanel
{
private static final String[] COLUMN_NAMES =
{
"File",
"Progress",
};
private TranferTableModel _transferTableModel = new TranferTableModel();
private JTable _transferTable = new JTable(_transferTableModel);
private boolean _isDownloads;
public TransferPanel(String name, boolean isDownloads)
{
_isDownloads = isDownloads;
_transferTable.setDefaultRenderer(Object.class, _transferTableModel);
this.setLayout(new GridBagLayout());
GridBagConstraints cons = new GridBagConstraints();
this.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(name),
BorderFactory.createEmptyBorder(5,5,5,5)));
cons.fill = GridBagConstraints.BOTH;
cons.weightx = 1.0;
cons.weighty = 1.0;
this.add(new JScrollPane(_transferTable), cons);
}
public JTable getTranferTable()
{
return _transferTable;
}
public void updateTransferProgressText(LogFile logFile, String newText)
{
_transferTableModel.getJProgressBar(logFile.getName()).setString(newText);
SwingUtilities.invokeLater
(
new Runnable(){
public void run()
{
TransferPanel.this.getTranferTable().updateUI();
}
}
);
}
public void updateTransferProgress(LogFile logFile, int progress)
{
JProgressBar jpb = _transferTableModel.getJProgressBar(logFile.getName());
jpb.setValue(progress);
jpb.setString(progress+"%");
SwingUtilities.invokeLater
(
new Runnable(){
public void run()
{
TransferPanel.this.getTranferTable().updateUI();
}
}
);
}
public void transferFinished(LogFile logFile, boolean success)
{
_transferTableModel.removeRow(logFile.getName());
if (success)
{
LogFilesTab logFilesTab = ((Main)PacketSamurai.getUserInterface()).getLogRepoTab().getLogFilesTab();
if (_isDownloads)
{
logFilesTab.removeLogFile(logFile);
logFile.setLocal(true);
logFilesTab.addLogFile(logFile);
}
}
SwingUtilities.invokeLater
(
new Runnable(){
public void run()
{
TransferPanel.this.getTranferTable().updateUI();
}
}
);
}
public void addRow(JLabel filename, JProgressBar progress)
{
((DefaultTableModel)_transferTable.getModel()).addRow(new Object[]{filename, progress});
}
class TranferTableModel extends DefaultTableModel implements TableCellRenderer
{
private Map<String, Integer> _tranfers = new FastMap<String, Integer>();
protected int getRowByFileName(String filename)
{
return _tranfers.get(filename);
}
public JProgressBar getJProgressBar(String filename)
{
JProgressBar jpg = (JProgressBar) this.getValueAt(this.getRowByFileName(filename), 1);
return jpg;
}
@Override
public void addRow(Object[] rowData)
{
super.addRow(rowData);
_tranfers.put(((JLabel) rowData[0]).getText(), this.getRowCount()-1);
}
public void removeRow(String filename)
{
int row = _transferTableModel.getRowByFileName(filename);
_tranfers.remove(filename);
super.removeRow(row);
}
@Override
public String getColumnName(int col)
{
return COLUMN_NAMES[col];
}
@Override
public int getColumnCount()
{
return COLUMN_NAMES.length;
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
if (value instanceof JComponent)
{
JComponent c = (JComponent) value;
/*if (isSelected)
{
c.setForeground(table.getSelectionForeground());
c.setBackground(table.getSelectionBackground());
}*/
return c;
}
return null;
}
}
}