package clientdata.visitors;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.mina.core.buffer.IoBuffer;
import clientdata.VisitorInterface;
import utils.CRC;
public class CrcStringTableVisitor implements VisitorInterface {
int count;
ArrayList<Integer> crcList;
ArrayList<Integer> startList;
ArrayList<String> stringList;
ConcurrentHashMap<Integer, String> crcMap;
public CrcStringTableVisitor() {
crcList = new ArrayList<Integer>();
startList = new ArrayList<Integer>();
stringList = new ArrayList<String>();
crcMap = new ConcurrentHashMap<Integer, String>();
}
@Override
public void parseData(String nodename, IoBuffer data, int depth, int size) throws Exception {
if(nodename.equals("0000DATA")) {
count = data.getInt();
} else if(nodename.equals("CRCT")) {
for(int i=0; i < count; ++i) {
crcList.add(data.getInt());
}
} else if(nodename.equals("STRT")) {
for(int i=0; i < count; ++i) {
startList.add(data.getInt());
}
} else if(nodename.equals("STNG")) {
CharsetDecoder cd = Charset.forName("US-ASCII").newDecoder();
for(int i=0; i < count; ++i) {
data.position(startList.get(i));
String str = data.getString(cd);
crcMap.put(CRC.StringtoCRC(str), str);
stringList.add(str);
cd.reset();
}
}
}
public boolean isValidCRC(int crc) {
return crcList.contains(crc);
}
public String getTemplateString(int crc) {
return crcMap.get(crc);
}
public void dispose() {
crcList.clear();
startList.clear();
stringList.clear();
}
@Override
public void notifyFolder(String nodeName, int depth) throws Exception {}
}