From 6cb9ce53628c861660329cfa824b694aae8a1b61 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Thu, 26 Dec 2019 08:46:55 +0100 Subject: [PATCH] Fix faulty use of .map(ResultDelegate::firstOrNull) --- .../data/mapping/AbstractMapping.java | 20 +++++++++++++++++++ .../messenger/data/mapping/Mapping.java | 6 ++++++ .../repository/XmppAccountRepository.java | 6 ++---- .../repository/XmppDirectChatRepository.java | 6 ++---- .../repository/XmppGroupChatRepository.java | 6 ++---- .../data/repository/XmppPeerRepository.java | 3 +-- .../mercury_im/messenger/util/Optional.java | 4 ++++ .../xmpp/MercuryConnectionManager.java | 4 ++++ 8 files changed, 41 insertions(+), 14 deletions(-) create mode 100644 domain/src/main/java/org/mercury_im/messenger/xmpp/MercuryConnectionManager.java diff --git a/data/src/main/java/org/mercury_im/messenger/data/mapping/AbstractMapping.java b/data/src/main/java/org/mercury_im/messenger/data/mapping/AbstractMapping.java index c615d1f..b64142d 100644 --- a/data/src/main/java/org/mercury_im/messenger/data/mapping/AbstractMapping.java +++ b/data/src/main/java/org/mercury_im/messenger/data/mapping/AbstractMapping.java @@ -1,5 +1,7 @@ package org.mercury_im.messenger.data.mapping; +import org.mercury_im.messenger.util.Optional; + import lombok.NonNull; public abstract class AbstractMapping implements Mapping { @@ -12,6 +14,15 @@ public abstract class AbstractMapping implements Mapping { return toModel(entity, newModel(entity)); } + @Override + public Optional toModel(Optional entity) { + if (entity.isPresent()) { + return new Optional<>(toModel(entity.getItem())); + } else { + return new Optional<>(); + } + } + @Override public E toEntity(M model) { if (model == null) { @@ -20,6 +31,15 @@ public abstract class AbstractMapping implements Mapping { return toEntity(model, newEntity(model)); } + @Override + public Optional toEntity(Optional model) { + if (model.isPresent()) { + return new Optional<>(toEntity(model.getItem())); + } else { + return new Optional<>(); + } + } + @Override public M toModel(E entity, M model) { if (entity == null) { diff --git a/data/src/main/java/org/mercury_im/messenger/data/mapping/Mapping.java b/data/src/main/java/org/mercury_im/messenger/data/mapping/Mapping.java index 8b7a10e..922facc 100644 --- a/data/src/main/java/org/mercury_im/messenger/data/mapping/Mapping.java +++ b/data/src/main/java/org/mercury_im/messenger/data/mapping/Mapping.java @@ -1,5 +1,7 @@ package org.mercury_im.messenger.data.mapping; +import org.mercury_im.messenger.util.Optional; + /** * Interface that defines a mapping between entities and database models. * @@ -16,6 +18,8 @@ public interface Mapping { */ M toModel(E entity); + Optional toModel(Optional entity); + /** * Copy data from the model to a new entity. * @param model database model @@ -23,6 +27,8 @@ public interface Mapping { */ E toEntity(M model); + Optional toEntity(Optional model); + /** * Map an entity to a model. * diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppAccountRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppAccountRepository.java index 8ef730c..f683023 100644 --- a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppAccountRepository.java +++ b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppAccountRepository.java @@ -55,9 +55,8 @@ public class XmppAccountRepository @Override public Observable> observeAccount(UUID accountId) { return dao.get(accountId).observableResult() - .map(ResultDelegate::firstOrNull) + .map(result -> new Optional<>(result.firstOrNull())) .map(accountMapping::toEntity) - .map(Optional::new) .subscribeOn(subscriberScheduler()) .observeOn(observerScheduler()); } @@ -73,9 +72,8 @@ public class XmppAccountRepository @Override public Observable> observeAccountByAddress(String address) { return dao.get(address).observableResult() - .map(ResultDelegate::firstOrNull) + .map(result -> new Optional<>(result.firstOrNull())) .map(accountMapping::toEntity) - .map(Optional::new) .subscribeOn(subscriberScheduler()) .observeOn(observerScheduler()); } diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppDirectChatRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppDirectChatRepository.java index cfa197b..08462a4 100644 --- a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppDirectChatRepository.java +++ b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppDirectChatRepository.java @@ -60,9 +60,8 @@ public class XmppDirectChatRepository @Override public Observable> observeDirectChat(UUID chatId) { return dao.get(chatId).observableResult() - .map(ResultDelegate::firstOrNull) + .map(result -> new Optional<>(result.firstOrNull())) .map(directChatMapping::toEntity) - .map(Optional::new) .subscribeOn(subscriberScheduler()) .observeOn(observerScheduler()); } @@ -92,9 +91,8 @@ public class XmppDirectChatRepository @Override public Observable> observeDirectChatByPeer(Peer peer) { return dao.getByPeer(peer.getId()).observableResult() - .map(ReactiveResult::firstOrNull) + .map(result -> new Optional<>(result.firstOrNull())) .map(directChatMapping::toEntity) - .map(Optional::new) .subscribeOn(subscriberScheduler()) .observeOn(observerScheduler()); } diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppGroupChatRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppGroupChatRepository.java index b0d5cf3..d43c316 100644 --- a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppGroupChatRepository.java +++ b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppGroupChatRepository.java @@ -57,9 +57,8 @@ public class XmppGroupChatRepository @Override public Observable> observeGroupChat(UUID chatId) { return dao.get(chatId).observableResult() - .map(ResultDelegate::firstOrNull) + .map(result -> new Optional<>(result.firstOrNull())) .map(groupChatMapping::toEntity) - .map(Optional::new) .subscribeOn(subscriberScheduler()) .observeOn(observerScheduler()); } @@ -89,9 +88,8 @@ public class XmppGroupChatRepository @Override public Observable> observeGroupChatByRoomAddress(UUID accountId, String roomAddress) { return dao.get(accountId, roomAddress).observableResult() - .map(ResultDelegate::firstOrNull) + .map(result -> new Optional<>(result.firstOrNull())) .map(groupChatMapping::toEntity) - .map(Optional::new) .subscribeOn(subscriberScheduler()) .observeOn(observerScheduler()); } diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppPeerRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppPeerRepository.java index 835a26a..b4194d4 100644 --- a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppPeerRepository.java +++ b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppPeerRepository.java @@ -80,9 +80,8 @@ public class XmppPeerRepository .where(PeerModel.ACCOUNT_ID.eq(accountId)) .and(PeerModel.ADDRESS.eq(address)) .get().observableResult() - .map(ResultDelegate::firstOrNull) + .map(result -> new Optional<>(result.firstOrNull())) .map(peerMapping::toEntity) - .map(Optional::new) .subscribeOn(subscriberScheduler()) .observeOn(observerScheduler()); } diff --git a/domain/src/main/java/org/mercury_im/messenger/util/Optional.java b/domain/src/main/java/org/mercury_im/messenger/util/Optional.java index ced8945..4fae342 100644 --- a/domain/src/main/java/org/mercury_im/messenger/util/Optional.java +++ b/domain/src/main/java/org/mercury_im/messenger/util/Optional.java @@ -9,6 +9,10 @@ public class Optional { private final T item; + public Optional() { + this(null); + } + public Optional(T item) { this.item = item; } diff --git a/domain/src/main/java/org/mercury_im/messenger/xmpp/MercuryConnectionManager.java b/domain/src/main/java/org/mercury_im/messenger/xmpp/MercuryConnectionManager.java new file mode 100644 index 0000000..d32d006 --- /dev/null +++ b/domain/src/main/java/org/mercury_im/messenger/xmpp/MercuryConnectionManager.java @@ -0,0 +1,4 @@ +package org.mercury_im.messenger.xmpp; + +public class MercuryConnectionManager { +}