package com.caseystella.util.common.interpret.fixed.converter; import com.caseystella.util.common.interpret.fixed.Field; import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.util.Map; /** * Created by cstella on 9/3/14. */ public class TextConverter implements IConverter { public static String ENCODING_PARAM = "encoding"; @Override public Object convert(ByteBuffer bytes, Field.Type type, Map<String, Object> config) { Charset charset = Charset.defaultCharset(); if(config != null && config.containsKey(ENCODING_PARAM)) { charset = Charset.forName((String)config.get(ENCODING_PARAM)); } String str = charset.decode(bytes).toString(); switch(type) { case INT: return Integer.parseInt(str.trim()); case FLOAT: return Float.parseFloat(str.trim()); case DOUBLE: return Double.parseDouble(str.trim()); case STRING: return str; case BYTES: return bytes.compact(); default: throw new UnsupportedOperationException("Type " + type + " unsupported for " + getClass()); } } @Override public void validate(Map<String, Object> config) { if(config != null && config.containsKey(ENCODING_PARAM)) { if(Charset.forName((String)config.get(ENCODING_PARAM)) == null) { throw new RuntimeException("Unable to find encoding: " + config.get(ENCODING_PARAM)); } } } }