/**
*
*/
package com.aionemu.packetsamurai.gui;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.table.AbstractTableModel;
import com.aionemu.packetsamurai.gui.PacketTableRenderer.TooltipTable;
import com.aionemu.packetsamurai.gui.images.IconsTable;
import com.aionemu.packetsamurai.protocol.protocoltree.PacketFamilly.packetDirection;
import com.aionemu.packetsamurai.session.DataPacket;
import javolution.util.FastTable;
/**
* @author Ulysses R. Ribeiro
*
*/
@SuppressWarnings("serial")
class PacketTableModel extends AbstractTableModel implements TooltipTable
{
private static final String[] columnNames =
{
"S/C",
"Opcode",
"Time",
"Length",
"Name"
};
private FastTable<Object[]> _currentTable;
public PacketTableModel()
{
}
public void reinit(int size)
{
_currentTable = new FastTable<Object[]>(size);
}
public int getColumnCount()
{
return columnNames.length;
}
public int getRowCount()
{
return (_currentTable == null ? 0 : _currentTable.size());
}
public String getColumnName(int col)
{
return columnNames[col];
}
public Object getValueAt(int row, int col)
{
Object[] tableRow = _currentTable.get(row);
if (tableRow != null)
return tableRow[col];
return "";
}
public boolean isCellEditable(int row, int col)
{
return false;
}
public void addRow(DataPacket packet, long startTime)
{
ImageIcon icon = null;
if(packet.getDirection() == packetDirection.clientPacket)
{
if(packet.hasError())
{
icon = IconsTable.ICON_FROM_CLIENT_ERROR;
}
else if(packet.hasWarning())
{
icon = IconsTable.ICON_FROM_CLIENT_WARNING;
}
else
{
icon = IconsTable.ICON_FROM_CLIENT;
}
}
else
{
if (packet.hasError())
{
icon = IconsTable.ICON_FROM_SERVER_ERROR;
}
else if (packet.hasWarning())
{
icon = IconsTable.ICON_FROM_SERVER_WARNING;
}
else
{
icon = IconsTable.ICON_FROM_SERVER;
}
}
String opcode = null;
if(packet.getPacketFormat() != null)
{
opcode = packet.getPacketFormat().getOpcodeStr();
}
else
{
opcode = "-";
}
String time = "+"+(packet.getTimeStamp()-startTime)+" ms";
String toolTip = null;
if (packet.hasError() || packet.hasWarning())
{
String color = (packet.hasError() ? "red" : "gray");
toolTip = "<br><font color=\""+color+"\">"+packet.getErrorMessage()+"</font></html>";
}
Object[] temp = { new JLabel(icon), opcode, time, String.valueOf(packet.getSize()), packet.getName(), toolTip, false};
_currentTable.add(temp);
}
public String getToolTip(int row, int col)
{
String toolTip = "<html>Packet: "+row;
Object msg = _currentTable.get(row)[5];
if (msg != null)
{
toolTip += msg;
}
return toolTip;
}
public void setIsMarked(int row, boolean val)
{
_currentTable.get(row)[6] = val;
}
public boolean getIsMarked(int row)
{
return (Boolean) _currentTable.get(row)[6];
}
}