Fix message mapping

This commit is contained in:
Paul Schaub 2019-12-08 22:49:42 +01:00
parent a0b496be65
commit 366d9b9df8
Signed by: vanitasvitae
GPG Key ID: 62BEE9264BF17311
7 changed files with 81 additions and 21 deletions

View File

@ -3,6 +3,7 @@ package org.mercury_im.messenger.data.di;
import org.mercury_im.messenger.data.repository.dao.AccountDao;
import org.mercury_im.messenger.data.repository.dao.DirectChatDao;
import org.mercury_im.messenger.data.repository.dao.GroupChatDao;
import org.mercury_im.messenger.data.repository.dao.MessageDao;
import javax.inject.Singleton;
@ -22,13 +23,19 @@ public class DaoModule {
@Provides
@Singleton
public static DirectChatDao provideDirectChatDao(ReactiveEntityStore<Persistable> data) {
static DirectChatDao provideDirectChatDao(ReactiveEntityStore<Persistable> data) {
return new DirectChatDao(data);
}
@Provides
@Singleton
public static GroupChatDao provideGroupChatDao(ReactiveEntityStore<Persistable> data) {
static GroupChatDao provideGroupChatDao(ReactiveEntityStore<Persistable> data) {
return new GroupChatDao(data);
}
@Provides
@Singleton
static MessageDao provideMessageDao(ReactiveEntityStore<Persistable> data) {
return new MessageDao(data);
}
}

View File

@ -81,11 +81,9 @@ public class RepositoryModule {
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler uiScheduler,
MessageMapping messageMapping,
DirectChatMapping directChatMapping,
GroupChatMapping groupChatMapping,
DirectChatRepository directChatRepository,
GroupChatRepository groupChatRepository) {
return new XmppMessageRepository(data, ioScheduler, uiScheduler, messageMapping,
directChatMapping, groupChatMapping, directChatRepository, groupChatRepository);
GroupChatMapping groupChatMapping) {
return new XmppMessageRepository(data, ioScheduler, uiScheduler,
messageMapping, directChatMapping, groupChatMapping);
}
@Provides

View File

@ -6,6 +6,9 @@ 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> {
@ -45,6 +48,16 @@ public class MessageMapping extends AbstractMapping<Message, MessageModel> {
@Override
public Message mapToEntity(MessageModel model, Message entity) {
return null;
entity.setId(model.getId());
entity.setSender(model.getSender());
entity.setRecipient(model.getRecipient());
entity.setTimestamp(model.getTimestamp());
List<PayloadContainer> payloadContainers = new ArrayList<>(entity.getMessagePayloads().size());
for (MessagePayloadContainerModel containerModel : model.getPayloads()) {
payloadContainers.add(messagePayloadContainerMapping.toEntity(containerModel));
}
entity.setMessagePayloads(payloadContainers);
return entity;
}
}

View File

@ -30,12 +30,15 @@ public abstract class AbstractMessageModel implements Persistable {
@OneToMany
Set<MessagePayloadContainerModel> payloads;
@Column(nullable = false)
@Column
String legacyId;
@Column
String originId;
@Column
String stanzaId;
@Column
String stanzaIdBy;
}

View File

@ -39,8 +39,6 @@ public class XmppMessageRepository
private final MessageMapping messageMapping;
private final DirectChatMapping directChatMapping;
private final GroupChatMapping groupChatMapping;
private final DirectChatRepository directChatRepository;
private final GroupChatRepository groupChatRepository;
private final DirectChatDao directChatDao;
private final GroupChatDao groupChatDao;
@ -50,19 +48,15 @@ public class XmppMessageRepository
@Inject
public XmppMessageRepository(ReactiveEntityStore<Persistable> data,
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler subscriberScheduler,
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler,
MessageMapping messageMapping,
DirectChatMapping directChatMapping,
GroupChatMapping groupChatMapping,
DirectChatRepository directChatRepository,
GroupChatRepository groupChatRepository) {
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler subscriberScheduler,
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler,
MessageMapping messageMapping,
DirectChatMapping directChatMapping,
GroupChatMapping groupChatMapping) {
super(data, subscriberScheduler, observerScheduler);
this.messageMapping = messageMapping;
this.directChatMapping = directChatMapping;
this.groupChatMapping = groupChatMapping;
this.directChatRepository = directChatRepository;
this.groupChatRepository = groupChatRepository;
this.directChatDao = new DirectChatDao(data);
this.groupChatDao = new GroupChatDao(data);
this.dao = new MessageDao(data);
@ -180,6 +174,15 @@ public class XmppMessageRepository
@Override
public Single<Message> upsertMessage(DirectChat chat, Message message) {
return null;
/*
return data().select(DirectMessagesRelation.class)
.where(DirectMessagesRelation.CHAT_ID.eq(chat.getId()))
.and(DirectMessagesRelation.MESSAGE_ID.eq(message.getId()))
.get().maybe()
.switchIfEmpty(Single.just(message)
.map(messageMapping::toModel)
.flatMap(messageModel -> )
*/
}
@Override
@ -199,7 +202,9 @@ public class XmppMessageRepository
@Override
public Completable deleteMessage(Message message) {
return null;
return data().delete(MessageModel.class)
.where(MessageModel.ID.eq(message.getId()))
.get().single().ignoreElement();
}
private DirectMessagesRelation toRelation(DirectChatModel chat, MessageModel message) {

View File

@ -6,6 +6,7 @@ import org.mercury_im.messenger.data.model.GroupChatModel;
import org.mercury_im.messenger.data.model.GroupMessagesRelation;
import org.mercury_im.messenger.data.model.MessageModel;
import io.reactivex.Single;
import io.requery.Persistable;
import io.requery.reactivex.ReactiveEntityStore;
import io.requery.reactivex.ReactiveResult;
@ -21,6 +22,10 @@ public class MessageDao extends RequeryDao {
this.groupChatDao = new GroupChatDao(data);
}
public Single<MessageModel> insert(MessageModel message) {
return data().insert(message);
}
public ReactiveResult<MessageModel> get(long messageId) {
return data().select(MessageModel.class)
.where(MessageModel.ID.eq(messageId))

View File

@ -10,6 +10,17 @@ import org.mercury_im.messenger.entity.chat.DirectChat;
import org.mercury_im.messenger.entity.chat.IDirectChat;
import org.mercury_im.messenger.entity.contact.IPeer;
import org.mercury_im.messenger.entity.contact.Peer;
import org.mercury_im.messenger.entity.message.IMessage;
import org.mercury_im.messenger.entity.message.IPayloadContainer;
import org.mercury_im.messenger.entity.message.Message;
import org.mercury_im.messenger.entity.message.PayloadContainer;
import org.mercury_im.messenger.entity.message.content.TextPayload;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
@ -32,6 +43,9 @@ public class AccountRepositoryTest {
@Inject
XmppPeerRepository contactRepository;
@Inject
XmppMessageRepository messageRepository;
@Inject
public AccountRepositoryTest() {
RepositoryTestComponent testComponent = DaggerRepositoryTestComponent.builder()
@ -62,6 +76,21 @@ public class AccountRepositoryTest {
.blockingGet();
assertEquals(1, chatModel.getId());
Message message = new IMessage();
message.setSender("test@test.test");
message.setRecipient("peer@peer.peer");
message.setTimestamp(new Date());
PayloadContainer container = new IPayloadContainer();
TextPayload body = new TextPayload();
body.setBody("Hallo");
container.setMessageContents(Collections.singletonList(body));
List<PayloadContainer> payloadContainers = new ArrayList<>();
payloadContainers.add(container);
message.setMessagePayloads(payloadContainers);
Message _message = messageRepository.insertMessage(directChat, message)
.blockingGet();
dataStore.close();
}
}