package dgm.driver.handler;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.base.Charsets;
import dgm.degraphmalizr.degraphmalize.DegraphmalizeRequest;
import dgm.degraphmalizr.degraphmalize.DegraphmalizeResult;
import dgm.degraphmalizr.recompute.NoAction;
import dgm.degraphmalizr.recompute.RecomputeRequest;
import dgm.degraphmalizr.recompute.RecomputeResult;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
import org.jboss.netty.handler.codec.http.HttpVersion;
import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
/**
*
*/
public class DegraphmalizeResultEncoder extends OneToOneEncoder
{
private final ObjectMapper objectMapper = new ObjectMapper();
private final Class[] acceptedMessages = new Class[]{DegraphmalizeRequest.class, DegraphmalizeResult.class, RecomputeRequest.class, RecomputeResult.class, NoAction.class};
@Override
protected final Object encode(ChannelHandlerContext ctx, Channel channel, Object o)
{
final Class oc = o.getClass();
for (Class c : acceptedMessages)
if (c.isAssignableFrom(oc))
{
// final JsonNode n = objectMapper.valueToTree(o);
// final HttpResponse r = new DefaultHttpResponse(HttpVersion.HTTP_1_0, HttpResponseStatus.OK);
// r.setContent(ChannelBuffers.copiedBuffer(n.toString(), Charsets.UTF_8));
// return r;
final ObjectNode n = objectMapper.createObjectNode();
n.put("type", c.getSimpleName());
final HttpResponse r = new DefaultHttpResponse(HttpVersion.HTTP_1_0, HttpResponseStatus.OK);
r.setContent(ChannelBuffers.copiedBuffer(n.toString(), Charsets.UTF_8));
return r;
}
// otherwise pass it on
return o;
}
}