package fi.iki.mkuokkanen.seda.queue.translator;
import com.lmax.disruptor.EventTranslatorOneArg;
import fi.iki.mkuokkanen.seda.api.json.JsonReader;
import fi.iki.mkuokkanen.seda.queue.event.Message;
import fi.iki.mkuokkanen.seda.queue.event.MessageType;
import org.json.simple.parser.ParseException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Translates any incoming Json message to Disruptor data structure.
*
* @author mkuokkanen
*/
public class JsonToMessageTranslator implements EventTranslatorOneArg<Message, String> {
private static Logger logger = LoggerFactory.getLogger(JsonToMessageTranslator.class);
private static long counter = 0;
@Override
public void translateTo(Message event, long sequence, String jsonString) {
JsonReader json = null;
try {
json = new JsonReader(jsonString);
} catch (ParseException e) {
logger.error("Error while parsing incoming json, what should I do?");
}
String op = json.getOperationType();
switch (op) {
case "push":
event.type.set(MessageType.IN_PUSH);
event.asPush.key.set(json.getValForKey("key"));
event.asPush.value.set(json.getValForKey("val"));
break;
case "delete":
event.type.set(MessageType.IN_DELETE);
event.asDelete.key.set(json.getValForKey("key"));
break;
case "broadcast":
event.type.set(MessageType.IN_BROADCAST);
event.asBroadcast.isUnion(); // placeholder call, not really needed
break;
default:
break;
}
event.id.set(counter);
counter++;
}
}