package com.jds.jn.parser.datatree;
import javax.swing.*;
import com.jds.jn.network.packets.DecryptedPacket;
import com.jds.jn.parser.formattree.*;
import com.jds.jn.parser.parttypes.PartType;
import com.jds.jn.parser.valuereader.ValueReader;
import com.jds.nio.buffer.NioBuffer;
/**
* This class represent a ValuePart (c, h, d...) used to parse data from a raw packet, thus it may contain the data parsed from the packet.
*
* @author Gilles Duboscq
*/
public abstract class ValuePart extends DataTreeNode
{
protected int _startPosition;
protected int _endPosition;
private boolean _isSelected;
public ValuePart(DataTreeNodeContainer parent, Part part)
{
super(parent, part);
if (part instanceof ForPart || part instanceof SwitchPart || part instanceof MacroPart)
{
throw new IllegalArgumentException("The model of a value part must be a basic part not a for/switch or any other container");
}
}
public PartType getType()
{
return getModelPart().getType();
}
public abstract String getValueAsString();
public abstract void parse(NioBuffer buf, DecryptedPacket d);
public String getHexValueAsString()
{
return "";
}
public String readValue()
{
ValueReader r = this.getModelPart().getReader();
if (r != null)
return r.read(this);
return getValueAsString();
}
public JComponent readValueToComponent()
{
ValueReader r = getModelPart().getReader();
if (r != null)
return r.readToComponent(this);
return new JLabel("");
}
public String getNormalColor()
{
return "b";
}
public String getColor()
{
if(_isSelected)
return "selected";
else
return getNormalColor();
}
public void updateColor(DecryptedPacket a)
{
for(int index = _startPosition; index < _endPosition; index ++)
a.setColor(index,getColor());
}
public boolean isSelected()
{
return _isSelected;
}
public void setSelected(boolean selected)
{
_isSelected = selected;
}
@Override
public String toString()
{
return getModelPart().getName();
}
}