package dgm.streaming.codec;
import org.codehaus.jackson.map.ObjectMapper;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
import dgm.streaming.command.GraphCommand;
import dgm.streaming.command.GraphNode;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
public class GraphCommandToJsonEncoder extends OneToOneEncoder {
@Override
protected final Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws IOException
{
if (!(msg instanceof GraphCommand)) {
return msg;
} else {
GraphCommand graphCommand = (GraphCommand) msg;
return encodeGraphCommand(graphCommand);
}
}
private String encodeGraphCommand(final GraphCommand graphCommand) throws IOException
{
Map<String, Object> json = new HashMap<String, Object>();
Map<String, Object> nodes = new HashMap<String, Object>();
for (GraphNode graphNode : graphCommand.getNodes()) {
nodes.put(graphNode.getName(), graphNode.getProperties());
}
json.put(graphCommand.getCommandType().toString(), nodes);
ObjectMapper objectMapper = new ObjectMapper();
StringWriter writer = new StringWriter();
objectMapper.writeValue(writer, json);
return writer.toString();
}
}