@Override public Message toInternalMessage(Sms sms) throws IllegalArgumentException, UnknownProtocolException, UnknownStatusException, UnknownTypeException { Message message = new Message(-1); // set id later // determine type of message Type type = Type.toType(Objects.requireNonNull(sms.getType())); // internationalize contact / address Contact c = getNormalizedContact(sms.getContactName(), sms.getAddress()); message.setContact(c); message.setType(type); message.setBody(sms.getBody()); message.setDate(getDateOrNull(sms.getDate())); // if message type is not SENT, do not set the date sent! // this would result in duplicate messages on the phone later. message.setDateSent((type != Type.Sent) ? null : getDateOrNull(sms.getDateSent())); message.setProtocol(Protocol.toProtocol(Objects.requireNonNull(sms.getProtocol()))); message.setRead(Integer.valueOf(sms.getRead())); message.setServiceCenter(sms.getServiceCenter()); message.setStatus(Status.toStatus(Objects.requireNonNull(sms.getStatus()))); message.setSubject(sms.getSubject()); // keep original values message.setOriginalAddress(sms.getAddress()); message.setOriginalContactName(sms.getContactName()); return message; }