/*
Protocol Definition Language
Copyright (C) 2003-2006 Marcus Andersson
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package net.sf.nmedit.jpdl;
import java.util.*;
public class Packet
{
public Packet()
{
}
public void clear()
{
allVariables.clear();
packets.clear();
variables.clear();
packetLists.clear();
intLists.clear();
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public boolean contains(String packetName)
{
if (getName().equals(packetName)) {
return true;
}
else {
for (Packet packet: packets.values()) {
if (packet.contains(packetName)) {
return true;
}
}
for (List<Packet> packetList: packetLists.values()) {
for (Packet packet: packetList) {
if (packet.contains(packetName)) {
return true;
}
}
}
}
return false;
}
public void bindPacket(Packet packet, String name)
{
packets.put(name, packet);
}
public void bindVariable(int number, String name)
{
allVariables.add(name);
variables.put(name, number);
}
public void bindPacketList(List<Packet> list, String name)
{
packetLists.put(name, list);
}
public void bindVariableList(List<Integer> list, String name)
{
intLists.put(name, list);
}
public Packet getPacket(String name)
{
int pos = name.indexOf(":");
if (pos >= 0) {
return packets.get(name.substring(0, pos))
.getPacket(name.substring(pos+1));
}
return packets.get(name);
}
public int getVariable(String name)
{
int pos = name.indexOf(":");
if (pos >= 0) {
return packets.get(name.substring(0, pos))
.getVariable(name.substring(pos+1));
}
Integer variable = variables.get(name);
return variable == null ? -1 : variable;
}
public List<String> getAllVariables()
{
return allVariables;
}
public List<Packet> getPacketList(String name)
{
int pos = name.indexOf(":");
if (pos >= 0) {
return packets.get(name.substring(0, pos))
.getPacketList(name.substring(pos+1));
}
return packetLists.get(name);
}
public List<Integer> getVariableList(String name)
{
int pos = name.indexOf(":");
if (pos >= 0) {
return packets.get(name.substring(0, pos))
.getVariableList(name.substring(pos+1));
}
return intLists.get(name);
}
public Iterator<Packet> packets()
{
return packets.values().iterator();
}
private Map<String, Integer> variables = new HashMap<String, Integer>();
private List<String> allVariables = new LinkedList<String>();
private Map<String, Packet> packets = new HashMap<String, Packet>();
private Map<String, List<Packet>> packetLists = new HashMap<String, List<Packet>>();
private Map<String, List<Integer>> intLists = new HashMap<String, List<Integer>>();
private String name;
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append(getClass().getName());
sb.append("[");
sb.append("name='");
sb.append(name);
sb.append("'");
toStringParams(sb);
sb.append("]");
return sb.toString();
}
private void toStringParams(StringBuilder sb)
{
sb.append(",variables={");
int count = allVariables.size()-1;
for (String varName: allVariables)
{
sb.append(varName);
sb.append("=");
sb.append(variables.get(varName));
if (count>0)
sb.append(",");
count--;
}
sb.append("}, packets={");
count = packets.size()-1;
for (String packet: packets.keySet())
{
sb.append(packet);
if (count>0)
sb.append(",");
count--;
}
sb.append("}");
}
}