package org.handwerkszeug.riak.transport.rest.internal; import java.io.IOException; import org.codehaus.jackson.JsonParser; import org.codehaus.jackson.JsonProcessingException; import org.codehaus.jackson.JsonToken; import org.codehaus.jackson.map.DeserializationContext; import org.codehaus.jackson.map.JsonDeserializer; import org.handwerkszeug.riak.model.Erlang; import org.handwerkszeug.riak.model.Function; import org.handwerkszeug.riak.model.JavaScript; import org.handwerkszeug.riak.util.StringUtil; /** * @author taichi */ public class FunctionJsonDeserializer extends JsonDeserializer<Function> { @Override public Function deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { JsonToken jt = jp.getCurrentToken(); if (JsonToken.START_OBJECT == jt) { Function result = null; String mod = null; String fun = null; jp.nextToken(); for (; jp.getCurrentToken() != JsonToken.END_OBJECT; jp.nextToken()) { String name = jp.getCurrentName(); jp.nextToken(); String value = jp.getText(); if ("name".equals(name)) { result = JavaScript.newFunction(value); } if ("mod".equals(name)) { mod = value; } if ("fun".equals(name)) { fun = value; } if (StringUtil.isEmpty(mod) == false && StringUtil.isEmpty(fun) == false) { result = Erlang.newFunction(mod, fun); } } if (result != null) { return result; } } throw ctxt.mappingException(Function.class); } }