mirror of
https://codeberg.org/Mercury-IM/Mercury-IM
synced 2024-06-18 09:34:52 +02:00
Map message payload/content
This commit is contained in:
parent
a07f12d63b
commit
7a216fed9d
|
@ -1,7 +1,12 @@
|
|||
package org.mercury_im.messenger.data.di;
|
||||
|
||||
import org.mercury_im.messenger.data.mapping.AccountMapping;
|
||||
import org.mercury_im.messenger.data.mapping.ContactMapping;
|
||||
import org.mercury_im.messenger.data.mapping.DirectChatMapping;
|
||||
import org.mercury_im.messenger.data.mapping.GroupChatMapping;
|
||||
import org.mercury_im.messenger.data.mapping.MessageContentMapping;
|
||||
import org.mercury_im.messenger.data.mapping.MessageMapping;
|
||||
import org.mercury_im.messenger.data.mapping.MessagePayloadMapping;
|
||||
import org.mercury_im.messenger.data.mapping.PeerMapping;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
@ -14,19 +19,49 @@ public class MappingModule {
|
|||
|
||||
@Provides
|
||||
@Singleton
|
||||
public static AccountMapping accountMapping() {
|
||||
static AccountMapping provideAccountMapping() {
|
||||
return new AccountMapping();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public static PeerMapping peerMapping() {
|
||||
return new PeerMapping(accountMapping());
|
||||
static PeerMapping providePeerMapping() {
|
||||
return new PeerMapping(provideAccountMapping());
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public static DirectChatMapping directChatMapping() {
|
||||
return new DirectChatMapping(peerMapping());
|
||||
static ContactMapping provideContactMapping() {
|
||||
return new ContactMapping(provideAccountMapping());
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static DirectChatMapping provideDirectChatMapping() {
|
||||
return new DirectChatMapping(providePeerMapping());
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static GroupChatMapping provideGroupChatMapping() {
|
||||
return new GroupChatMapping(provideAccountMapping());
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static MessageMapping provideMessageMapping() {
|
||||
return new MessageMapping(provideMessagePayloadMapping());
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static MessagePayloadMapping provideMessagePayloadMapping() {
|
||||
return new MessagePayloadMapping(provideMessageContentMapping());
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static MessageContentMapping provideMessageContentMapping() {
|
||||
return new MessageContentMapping();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
package org.mercury_im.messenger.data.enums;
|
||||
|
||||
public enum MessageContentType {
|
||||
/**
|
||||
* Content is a message body.
|
||||
*/
|
||||
body
|
||||
}
|
|
@ -3,8 +3,17 @@ package org.mercury_im.messenger.data.mapping;
|
|||
import org.mercury_im.messenger.data.model.ContactModel;
|
||||
import org.mercury_im.messenger.entity.contact.Contact;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class ContactMapping implements Mapping<Contact, ContactModel> {
|
||||
|
||||
private final AccountMapping accountMapping;
|
||||
|
||||
@Inject
|
||||
public ContactMapping(AccountMapping accountMapping) {
|
||||
this.accountMapping = accountMapping;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ContactModel entityToModel(Contact entity, ContactModel model) {
|
||||
if (entity == null) {
|
||||
|
@ -13,7 +22,6 @@ public class ContactMapping implements Mapping<Contact, ContactModel> {
|
|||
if (model == null) {
|
||||
model = new ContactModel();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
package org.mercury_im.messenger.data.mapping;
|
||||
|
||||
import org.mercury_im.messenger.data.enums.MessageContentType;
|
||||
import org.mercury_im.messenger.data.model.MessageContentModel;
|
||||
import org.mercury_im.messenger.entity.message.content.MessageContent;
|
||||
import org.mercury_im.messenger.entity.message.content.TextMessageContent;
|
||||
|
||||
import static org.mercury_im.messenger.data.enums.MessageContentType.body;
|
||||
|
||||
public class MessageContentMapping implements Mapping<MessageContent, MessageContentModel> {
|
||||
|
||||
@Override
|
||||
public MessageContentModel entityToModel(MessageContent entity, MessageContentModel model) {
|
||||
if (entity == null) {
|
||||
return null;
|
||||
}
|
||||
if (model == null) {
|
||||
model = new MessageContentModel();
|
||||
}
|
||||
|
||||
if (entity instanceof TextMessageContent) {
|
||||
model.setType(body);
|
||||
model.setBody(((TextMessageContent) entity).getBody());
|
||||
}
|
||||
// else if (...)
|
||||
return model;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MessageContent modelToEntity(MessageContentModel model, MessageContent entity) {
|
||||
if (model == null) {
|
||||
model = new MessageContentModel();
|
||||
}
|
||||
switch (model.getType()) {
|
||||
case body:
|
||||
if (entity == null) {
|
||||
TextMessageContent body = new TextMessageContent();
|
||||
body.setId(model.getId());
|
||||
body.setBody(model.getBody());
|
||||
entity = body;
|
||||
}
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
package org.mercury_im.messenger.data.mapping;
|
||||
|
||||
import org.mercury_im.messenger.data.model.MessageModel;
|
||||
import org.mercury_im.messenger.data.model.MessagePayloadModel;
|
||||
import org.mercury_im.messenger.entity.message.IMessage;
|
||||
import org.mercury_im.messenger.entity.message.Message;
|
||||
import org.mercury_im.messenger.entity.message.MessagePayload;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class MessageMapping implements Mapping<Message, MessageModel> {
|
||||
|
||||
private final MessagePayloadMapping messagePayloadMapping;
|
||||
|
||||
@Inject
|
||||
public MessageMapping(MessagePayloadMapping messagePayloadMapping) {
|
||||
this.messagePayloadMapping = messagePayloadMapping;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MessageModel entityToModel(Message entity, MessageModel model) {
|
||||
if (entity == null) {
|
||||
return null;
|
||||
}
|
||||
if (model == null) {
|
||||
model = new MessageModel();
|
||||
}
|
||||
model.setSender(entity.getSender());
|
||||
model.setRecipient(entity.getRecipient());
|
||||
model.setTimestamp(entity.getTimestamp());
|
||||
|
||||
model.getPayloads().clear();
|
||||
for (MessagePayload payload : entity.getMessagePayloads()) {
|
||||
MessagePayloadModel payloadModel = messagePayloadMapping.entityToModel(payload, new MessagePayloadModel());
|
||||
payloadModel.setMessage(model);
|
||||
model.getPayloads().add(payloadModel);
|
||||
}
|
||||
|
||||
return model;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Message modelToEntity(MessageModel model, Message entity) {
|
||||
if (model == null) {
|
||||
return null;
|
||||
}
|
||||
if (entity == null) {
|
||||
entity = new IMessage();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
package org.mercury_im.messenger.data.mapping;
|
||||
|
||||
import org.mercury_im.messenger.data.model.MessageContentModel;
|
||||
import org.mercury_im.messenger.data.model.MessagePayloadModel;
|
||||
import org.mercury_im.messenger.entity.message.IMessagePayload;
|
||||
import org.mercury_im.messenger.entity.message.MessagePayload;
|
||||
import org.mercury_im.messenger.entity.message.content.MessageContent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class MessagePayloadMapping implements Mapping<MessagePayload, MessagePayloadModel> {
|
||||
|
||||
private final MessageContentMapping messageContentMapping;
|
||||
|
||||
@Inject
|
||||
public MessagePayloadMapping(MessageContentMapping messageContentMapping) {
|
||||
this.messageContentMapping = messageContentMapping;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MessagePayloadModel entityToModel(MessagePayload entity, MessagePayloadModel model) {
|
||||
if (entity == null) {
|
||||
return null;
|
||||
}
|
||||
if (model == null) {
|
||||
model = new MessagePayloadModel();
|
||||
}
|
||||
|
||||
model.getContents().clear();
|
||||
for (MessageContent contentEntity : entity.getMessageContents()) {
|
||||
MessageContentModel contentModel = messageContentMapping.entityToModel(contentEntity, new MessageContentModel());
|
||||
contentModel.setPayload(model);
|
||||
model.getContents().add(contentModel);
|
||||
}
|
||||
|
||||
return model;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MessagePayload modelToEntity(MessagePayloadModel model, MessagePayload entity) {
|
||||
if (model == null) {
|
||||
return null;
|
||||
}
|
||||
if (entity == null) {
|
||||
entity = new IMessagePayload();
|
||||
}
|
||||
|
||||
entity.setId(model.getId());
|
||||
|
||||
List<MessageContent> contents = new ArrayList<>(model.getContents().size());
|
||||
for (MessageContentModel contentModel : model.getContents()) {
|
||||
MessageContent contentEntity = messageContentMapping.modelToEntity(contentModel, null);
|
||||
contents.add(contentEntity);
|
||||
}
|
||||
entity.setMessageContents(contents);
|
||||
|
||||
return entity;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package org.mercury_im.messenger.data.model;
|
||||
|
||||
import org.mercury_im.messenger.data.enums.MessageContentType;
|
||||
|
||||
import io.requery.Column;
|
||||
import io.requery.Entity;
|
||||
import io.requery.Generated;
|
||||
import io.requery.Key;
|
||||
import io.requery.ManyToOne;
|
||||
import io.requery.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "message_contents")
|
||||
public abstract class AbstractMessageContentModel {
|
||||
|
||||
@Key @Generated
|
||||
long id;
|
||||
|
||||
@ManyToOne
|
||||
MessagePayloadModel payload;
|
||||
|
||||
@Column
|
||||
String body;
|
||||
|
||||
@Column(nullable = false)
|
||||
MessageContentType type;
|
||||
}
|
|
@ -1,11 +1,13 @@
|
|||
package org.mercury_im.messenger.data.model;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Set;
|
||||
|
||||
import io.requery.Column;
|
||||
import io.requery.Entity;
|
||||
import io.requery.Generated;
|
||||
import io.requery.Key;
|
||||
import io.requery.OneToMany;
|
||||
import io.requery.Persistable;
|
||||
import io.requery.Table;
|
||||
|
||||
|
@ -16,20 +18,17 @@ public abstract class AbstractMessageModel implements Persistable {
|
|||
@Key @Generated
|
||||
long id;
|
||||
|
||||
String body;
|
||||
|
||||
@Column(name = "\"timestamp\"", nullable = false)
|
||||
Date timestamp;
|
||||
|
||||
@Column(nullable = false)
|
||||
String sender;
|
||||
|
||||
@Column(nullable = false)
|
||||
String recipient;
|
||||
|
||||
boolean incoming;
|
||||
@Column(name = "\"timestamp\"", nullable = false)
|
||||
Date timestamp;
|
||||
|
||||
String thread;
|
||||
@OneToMany
|
||||
Set<MessagePayloadModel> payloads;
|
||||
|
||||
@Column(nullable = false)
|
||||
String legacyId;
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
package org.mercury_im.messenger.data.model;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import io.requery.Entity;
|
||||
import io.requery.Generated;
|
||||
import io.requery.Key;
|
||||
import io.requery.ManyToOne;
|
||||
import io.requery.OneToMany;
|
||||
import io.requery.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "message_payloads")
|
||||
public abstract class AbstractMessagePayloadModel {
|
||||
|
||||
@Key @Generated
|
||||
long id;
|
||||
|
||||
@ManyToOne
|
||||
MessageModel message;
|
||||
|
||||
@OneToMany
|
||||
Set<MessageContentModel> contents;
|
||||
}
|
|
@ -6,8 +6,19 @@ import java.util.List;
|
|||
|
||||
public class IMessagePayload implements MessagePayload {
|
||||
|
||||
protected long id;
|
||||
protected List<MessageContent> contents;
|
||||
|
||||
@Override
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setId(long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MessageContent> getMessageContents() {
|
||||
return contents;
|
||||
|
|
|
@ -13,6 +13,10 @@ import java.util.List;
|
|||
*/
|
||||
public interface MessagePayload {
|
||||
|
||||
long getId();
|
||||
|
||||
void setId(long id);
|
||||
|
||||
List<MessageContent> getMessageContents();
|
||||
|
||||
void setMessageContents(List<MessageContent> messageContents);
|
||||
|
|
|
@ -2,6 +2,10 @@ package org.mercury_im.messenger.entity.message.content;
|
|||
|
||||
public interface MessageContent {
|
||||
|
||||
long getId();
|
||||
|
||||
void setId(long id);
|
||||
|
||||
interface Body extends MessageContent {
|
||||
|
||||
String getBody();
|
||||
|
|
|
@ -2,8 +2,19 @@ package org.mercury_im.messenger.entity.message.content;
|
|||
|
||||
public class TextMessageContent implements MessageContent.Body {
|
||||
|
||||
private long id;
|
||||
private String body;
|
||||
|
||||
@Override
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setId(long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getBody() {
|
||||
return body;
|
||||
|
|
Loading…
Reference in a new issue