package com.caseystella.util.common.interpret.fixed;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import java.io.IOException;
import java.io.Reader;
import java.nio.ByteBuffer;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* Created by cstella on 9/3/14.
*/
public class Config {
private static ObjectMapper mapper = new ObjectMapper();
Field[] fields;
public Field[] getFields() {
return fields;
}
public void setFields(Field[] fields) {
this.fields = fields;
}
public static Config load(Reader input) throws IOException {
return mapper.readValue(input, new TypeReference<Config>(){});
}
public int computeWidth()
{
int width = 0;
for(Field f : getFields())
{
width += f.getWidth();
}
return width;
}
public void validate()
{
for(Field f : getFields())
{
f.validate();
}
}
public Map<String, Object> process(byte[] value)
{
LinkedHashMap<String, Object> ret = new LinkedHashMap<String, Object>();
for(Field f : getFields())
{
ByteBuffer b = ByteBuffer.wrap(value, f.getOffset(), f.getWidth());
ret.put(f.getName(), f.getConverter().convert(b, f.getType(), f.getConfig()));
}
return ret;
}
}