Mercury-IM/data/src/main/java/org/mercury_im/messenger/data/mapping/MessageMapping.java

66 lines
2.3 KiB
Java

package org.mercury_im.messenger.data.mapping;
import org.mercury_im.messenger.data.model.MessageModel;
import org.mercury_im.messenger.data.model.MessagePayloadContainerModel;
import org.mercury_im.messenger.entity.message.IMessage;
import org.mercury_im.messenger.entity.message.Message;
import org.mercury_im.messenger.entity.message.PayloadContainer;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
public class MessageMapping extends AbstractMapping<Message, MessageModel> {
private final MessagePayloadContainerMapping messagePayloadContainerMapping;
@Inject
public MessageMapping(MessagePayloadContainerMapping messagePayloadContainerMapping) {
this.messagePayloadContainerMapping = messagePayloadContainerMapping;
}
@Override
public Message newEntity(MessageModel model) {
return new IMessage();
}
@Override
public MessageModel newModel(Message entity) {
return new MessageModel();
}
@Override
public MessageModel mapToModel(Message entity, MessageModel model) {
model.setSender(entity.getSender());
model.setRecipient(entity.getRecipient());
model.setTimestamp(entity.getTimestamp());
model.setDirection(entity.getDirection());
model.getPayloads().clear();
for (PayloadContainer payload : entity.getMessagePayloads()) {
MessagePayloadContainerModel payloadModel = messagePayloadContainerMapping.toModel(payload, new MessagePayloadContainerModel());
payloadModel.setMessage(model);
model.getPayloads().add(payloadModel);
}
return model;
}
@Override
public Message mapToEntity(MessageModel model, Message entity) {
entity.setId(model.getId());
entity.setSender(model.getSender());
entity.setRecipient(model.getRecipient());
entity.setTimestamp(model.getTimestamp());
entity.setDirection(model.getDirection());
List<PayloadContainer> payloadContainers = new ArrayList<>(entity.getMessagePayloads().size());
for (MessagePayloadContainerModel containerModel : model.getPayloads()) {
payloadContainers.add(messagePayloadContainerMapping.toEntity(containerModel));
}
entity.setMessagePayloads(payloadContainers);
return entity;
}
}