package org.signalml.app.worker.monitor.messages.parsing;
import static org.signalml.app.util.i18n.SvarogI18n._R;
import org.apache.log4j.Logger;
import org.codehaus.jackson.map.ObjectMapper;
import org.signalml.app.worker.monitor.exceptions.OpenbciCommunicationException;
import org.signalml.app.worker.monitor.messages.Message;
import org.signalml.app.worker.monitor.messages.MessageType;
import org.signalml.app.worker.monitor.messages.RequestErrorResponse;
public class MessageParser {
protected static final Logger logger = Logger.getLogger(MessageParser.class);
public static Message parseMessageFromJSON(String json, MessageType messageType) throws OpenbciCommunicationException {
ObjectMapper mapper = new ObjectMapper();
try {
Message readMessage = (Message) mapper.readValue(json.getBytes(), messageType.getMessageClass());
return readMessage;
} catch (Exception e) {
logger.error("", e);
throw new OpenbciCommunicationException(_R("An error occurred while parsing the JSON message ({0})", e.getStackTrace()[0]));
}
}
public static void checkIfResponseIsOK(String response, MessageType awaitedMessageType) throws OpenbciCommunicationException {
MessageType type = MessageType.parseMessageTypeFromResponse(response);
if (type == awaitedMessageType) {
//it's ok - do nothing
}
else if (type == MessageType.REQUEST_ERROR_RESPONSE) {
RequestErrorResponse msg = (RequestErrorResponse) MessageParser.parseMessageFromJSON(response, type);
throw new OpenbciCommunicationException(_R("Got request error from server (code: {0})", msg.getErrorCode()));
}
else {
throw new OpenbciCommunicationException(_R("Got unexpected response from the server: {0}", response));
}
}
}