package org.zu.ardulink.protocol.parser; import org.zu.ardulink.protocol.IProtocol; import org.zu.ardulink.util.Primitive; import static org.zu.ardulink.util.Preconditions.checkNotNull; import static org.zu.ardulink.util.Preconditions.checkArgument; public class MessageParsedInfo { private String message; private MessageType messageType; private int id = IProtocol.UNDEFINED_ID; private String[] values; private Object[] parsedValues; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public MessageType getMessageType() { return messageType; } public void setMessageType(MessageType messageType) { this.messageType = messageType; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String[] getValues() { return values; } public void setValues(String[] values) throws ParseException { checkNotNull(messageType, "setValues is allowed only after setMessageType method invoke"); this.values = values; validateValues(); } public Object[] getParsedValues() { return parsedValues; } private void validateValues() throws ParseException { try { if(MessageType.PPSW == messageType) { checkArgument(values.length == 2, "Values in the message for power pin swith has to be two. Values are: %s", values.length); parsedValues = new Object[2]; parsedValues[0] = Primitive.INT.parse(values[0]); parsedValues[1] = Primitive.INT.parse(values[1]); checkArgument(((Integer)parsedValues[1] == IProtocol.HIGH || (Integer)parsedValues[1] == IProtocol.LOW), "POWER PIN accepted values are: %d or %d. Value was: %d", IProtocol.HIGH, IProtocol.LOW, parsedValues[1]); } else if(MessageType.PPIN == messageType) { checkArgument(values.length == 2, "Values in the message for power pin intensity has to be two. Values are: %s", values.length); parsedValues = new Object[2]; parsedValues[0] = Primitive.INT.parse(values[0]); parsedValues[1] = Primitive.INT.parse(values[1]); } else if(MessageType.KPRS == messageType) { // TODO!!!! } else if(MessageType.TONE == messageType) { checkArgument(values.length == 2, "Values in the message for tone has to be two. Values are: %s", values.length); parsedValues = new Object[2]; parsedValues[0] = Primitive.INT.parse(values[0]); parsedValues[1] = Primitive.INT.parse(values[1]); } else if(MessageType.NOTN == messageType) { checkArgument(values.length == 1, "Values in the message for notone has to be just one. Values are: %s", values.length); parsedValues = new Object[1]; parsedValues[0] = Primitive.INT.parse(values[0]); } else if(MessageType.SRLD == messageType) { checkArgument(values.length == 1, "Values in the message for start listen digital has to be just one. Values are: %s", values.length); parsedValues = new Object[1]; parsedValues[0] = Primitive.INT.parse(values[0]); } else if(MessageType.SPLD == messageType) { checkArgument(values.length == 1, "Values in the message for stop listen digital has to be just one. Values are: %s", values.length); parsedValues = new Object[1]; parsedValues[0] = Primitive.INT.parse(values[0]); } else if(MessageType.SRLA == messageType) { checkArgument(values.length == 1, "Values in the message for start listen analog has to be just one. Values are: %s", values.length); parsedValues = new Object[1]; parsedValues[0] = Primitive.INT.parse(values[0]); } else if(MessageType.SPLA == messageType) { checkArgument(values.length == 1, "Values in the message for stop listen analog has to be just one. Values are: %s", values.length); parsedValues = new Object[1]; parsedValues[0] = Primitive.INT.parse(values[0]); } else if(MessageType.CUST == messageType) { checkArgument(values.length == 1, "Values in the message for custom has to be just one. Values are: %s", values.length); parsedValues = new Object[1]; parsedValues[0] = values[0]; } else if(MessageType.ARED == messageType) { // TODO } else if(MessageType.DRED == messageType) { // TODO } else if(MessageType.RPLY == messageType) { // TODO } else { throw new ParseException(messageType + " is an unknown message type"); } } catch (NumberFormatException e) { throw new ParseException("Message: " + message + " has a value not numeric for a numeric value type."); } } }