From 930e6ab6d604963ae6a48c58fc1bd3735071d9ee Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Tue, 20 Nov 2018 00:07:06 +0300 Subject: getMessage refactoring --- .../java/com/juick/server/CommandsManager.java | 48 ++++++------- src/main/java/com/juick/server/EmailManager.java | 4 +- src/main/java/com/juick/server/ServerManager.java | 5 +- .../java/com/juick/server/TelegramBotManager.java | 1 - src/main/java/com/juick/server/TopManager.java | 2 +- src/main/java/com/juick/server/XMPPConnection.java | 9 +-- src/main/java/com/juick/server/api/Messages.java | 12 ++-- .../java/com/juick/server/api/Notifications.java | 25 +++---- src/main/java/com/juick/server/api/Post.java | 24 ++++--- .../com/juick/server/api/activity/Profile.java | 2 +- .../juick/server/www/controllers/MessagesWWW.java | 6 +- .../java/com/juick/service/MessagesService.java | 7 +- .../com/juick/service/MessagesServiceImpl.java | 6 +- .../juick/service/component/MessageReadEvent.java | 4 +- .../java/com/juick/server/tests/ServerTests.java | 79 +++++++++++----------- 15 files changed, 117 insertions(+), 117 deletions(-) (limited to 'src') diff --git a/src/main/java/com/juick/server/CommandsManager.java b/src/main/java/com/juick/server/CommandsManager.java index e564f18e..2eb58188 100644 --- a/src/main/java/com/juick/server/CommandsManager.java +++ b/src/main/java/com/juick/server/CommandsManager.java @@ -76,7 +76,7 @@ public class CommandsManager { @Inject private ImagesService imagesService; - public CommandResult processCommand(User user, String data, @Nonnull URI attachment) throws Exception { + public CommandResult processCommand(@Nonnull User user, String data, @Nonnull URI attachment) throws Exception { if (!user.isAnonymous()) { userService.updateLastSeen(user); } @@ -126,7 +126,7 @@ public class CommandsManager { String fname = String.format("%d.%s", mid, attachmentType); imagesService.saveImageWithPreviews(attachmentFName, fname); } - Message msg = messagesService.getMessage(mid); + Message msg = messagesService.getMessage(mid).orElseThrow(IllegalStateException::new); subscriptionService.subscribeMessage(msg, user); applicationEventPublisher.publishEvent(new MessageReadEvent(this, user, msg)); @@ -294,17 +294,17 @@ public class CommandsManager { public CommandResult commandRecommend(User user, URI attachment, String... arguments) { int mid = NumberUtils.toInt(arguments[0], 0); if (mid > 0) { - com.juick.Message msg = messagesService.getMessage(mid); - if (msg != null) { - if (msg.getUser() == user) { + Optional msg = messagesService.getMessage(mid); + if (msg.isPresent()) { + if (msg.get().getUser() == user) { return CommandResult.fromString("You can't recommend your own messages."); } MessagesService.RecommendStatus status = messagesService.recommendMessage(mid, user.getUid()); switch (status) { case Added: - applicationEventPublisher.publishEvent(new LikeEvent(this, user, msg, + applicationEventPublisher.publishEvent(new LikeEvent(this, user, msg.get(), subscriptionService.getUsersSubscribedToUserRecommendations( - user.getUid(), msg))); + user.getUid(), msg.get()))); return CommandResult.fromString("Message is added to your recommendations"); case Deleted: return CommandResult.fromString("Message deleted from your recommendations."); @@ -356,15 +356,15 @@ public class CommandsManager { } @UserCommand(pattern = "^(s|u)\\s+#(\\d+)$", help = "S #1234 - subscribe to comments" + "\nU #1234 - unsubscribe from comments", patternFlags = Pattern.CASE_INSENSITIVE) - public CommandResult commandSubscribeMessage(User user, URI attachment, String... args) { + public CommandResult commandSubscribeMessage(@Nonnull User user, URI attachment, String... args) { boolean subscribe = args[0].equalsIgnoreCase("s"); int mid = NumberUtils.toInt(args[1], 0); - Message msg = messagesService.getMessage(mid); - if (msg != null) { + Optional msg = messagesService.getMessage(mid); + if (msg.isPresent()) { if (subscribe) { - if (subscriptionService.subscribeMessage(msg, user)) { + if (subscriptionService.subscribeMessage(msg.get(), user)) { applicationEventPublisher.publishEvent( - new MessageReadEvent(this, user, msg)); + new MessageReadEvent(this, user, msg.get())); return CommandResult.fromString("Subscribed"); } } else { @@ -406,23 +406,23 @@ public class CommandsManager { return CommandResult.fromString("User not found"); } @UserCommand(pattern = "^#(\\d+)(\\+?)$", help = "#1234 - Show message (#1234+ - message with replies)") - public CommandResult commandShow(User user, URI attachment, String... arguments) { + public CommandResult commandShow(@Nonnull User user, URI attachment, String... arguments) { boolean showReplies = arguments[1].length() > 0; int mid = NumberUtils.toInt(arguments[0], 0); if (mid == 0) { return CommandResult.fromString("Error"); } - com.juick.Message msg = messagesService.getMessage(mid); - if (msg != null) { + Optional msg = messagesService.getMessage(mid); + if (msg.isPresent()) { if (showReplies) { List replies = messagesService.getReplies(user, mid); applicationEventPublisher.publishEvent( - new MessageReadEvent(this, user, msg)); - replies.add(0, msg); + new MessageReadEvent(this, user, msg.get())); + replies.add(0, msg.get()); return CommandResult.fromString(String.join("\n", replies.stream().map(PlainTextFormatter::formatPostSummary).collect(Collectors.toList()))); } - return CommandResult.fromString(PlainTextFormatter.formatPost(msg)); + return CommandResult.fromString(PlainTextFormatter.formatPost(msg.get())); } return CommandResult.fromString("Message not found"); } @@ -453,9 +453,9 @@ public class CommandsManager { @UserCommand(pattern = "^D #(\\d+)$", help = "D #1234 - Delete post", patternFlags = Pattern.CASE_INSENSITIVE) public CommandResult commandDeletePost(User user, URI attachment, String... args) { int mid = Integer.valueOf(args[0]); - Message message = messagesService.getMessage(mid); - if (message != null && messagesService.deleteMessage(user.getUid(), mid)) { - applicationEventPublisher.publishEvent(new DeleteMessageEvent(this, message)); + Optional message = messagesService.getMessage(mid); + if (message.isPresent() && messagesService.deleteMessage(user.getUid(), mid)) { + applicationEventPublisher.publishEvent(new DeleteMessageEvent(this, message.get())); return CommandResult.fromString("Message deleted"); } return CommandResult.fromString("This is not your message"); @@ -494,11 +494,11 @@ public class CommandsManager { } @UserCommand(pattern = "^(#|\\.)(\\d+)((\\.|\\-|\\/)(\\d+))?\\s([\\s\\S]+)?", help = "#1234 *tag *tag2 - edit tags\n#1234 text - reply to message") - public CommandResult EditOrReply(User user, @Nonnull URI attachment, String... args) throws Exception { + public CommandResult EditOrReply(@Nonnull User user, @Nonnull URI attachment, String... args) throws Exception { int mid = NumberUtils.toInt(args[1]); int rid = NumberUtils.toInt(args[4], 0); String txt = StringUtils.defaultString(args[5]); - Message msg = messagesService.getMessage(mid); + Message msg = messagesService.getMessage(mid).orElseThrow(IllegalStateException::new); Pair> messageTags = tagService.fromString(txt); if (messageTags.getRight().size() > 0) { if (user.getUid() != msg.getUser().getUid()) { @@ -528,7 +528,7 @@ public class CommandsManager { } applicationEventPublisher.publishEvent( new MessageReadEvent(this, user, msg)); - Message original = messagesService.getMessage(mid); + Message original = messagesService.getMessage(mid).orElseThrow(IllegalStateException::new); subscriptionService.subscribeMessage(original, user); Message reply = messagesService.getReply(mid, newrid); applicationEventPublisher.publishEvent(new MessageEvent(this, reply, subscriptionService.getUsersSubscribedToComments(original, reply))); diff --git a/src/main/java/com/juick/server/EmailManager.java b/src/main/java/com/juick/server/EmailManager.java index 1cdafac6..af4ed416 100644 --- a/src/main/java/com/juick/server/EmailManager.java +++ b/src/main/java/com/juick/server/EmailManager.java @@ -55,7 +55,7 @@ public class EmailManager implements NotificationListener { emailNotify(email, subject, msg); }); } else if (MessageUtils.isReply(msg)) { - Message originalMessage = messagesService.getMessage(msg.getMid()); + Message originalMessage = messagesService.getMessage(msg.getMid()).orElseThrow(IllegalStateException::new); String subject = String.format("New reply to %s", originalMessage.getUser().getName()); subscribedUsers.stream() .flatMap(user -> emailService.getEmails(user.getUid(), true).stream()) @@ -103,7 +103,7 @@ public class EmailManager implements NotificationListener { Message replyto = messagesService.getReply(msg.getMid(), msg.getReplyto()); headers.put("In-Reply-To", String.format("<%d.%d@juick.com>", replyto.getMid(), replyto.getRid())); } else { - Message original = messagesService.getMessage(msg.getMid()); + Message original = messagesService.getMessage(msg.getMid()).orElseThrow(IllegalStateException::new); headers.put("In-Reply-To", String.format("<%d.%d@juick.com>", original.getMid(), original.getRid())); } } diff --git a/src/main/java/com/juick/server/ServerManager.java b/src/main/java/com/juick/server/ServerManager.java index ef848526..586d5962 100644 --- a/src/main/java/com/juick/server/ServerManager.java +++ b/src/main/java/com/juick/server/ServerManager.java @@ -140,7 +140,6 @@ public class ServerManager implements NotificationListener { try { String json = jsonMapper.writeValueAsString(jmsg); - com.juick.Message op = messagesService.getMessage(jmsg.getMid()); List threadUsers = subscribedUsers .stream().map(User::getUid).collect(Collectors.toList()); @@ -187,10 +186,10 @@ public class ServerManager implements NotificationListener { onJuickPM(jmsg.getTo(), jmsg); } else if (!MessageUtils.isReply(jmsg)) { // to get full message with attachment, etc. - onJuickMessagePost(messagesService.getMessage(jmsg.getMid()), subscribedUsers); + onJuickMessagePost(messagesService.getMessage(jmsg.getMid()).orElseThrow(IllegalStateException::new), subscribedUsers); } else { // to get quote and attachment - Message op = messagesService.getMessage(jmsg.getMid()); + Message op = messagesService.getMessage(jmsg.getMid()).orElseThrow(IllegalStateException::new); com.juick.Message reply = messagesService.getReply(jmsg.getMid(), jmsg.getRid()); subscriptionService.getUsersSubscribedToComments(op, reply, true).stream() .filter(u -> userService.isReplyToBL(u, reply)) diff --git a/src/main/java/com/juick/server/TelegramBotManager.java b/src/main/java/com/juick/server/TelegramBotManager.java index 8e8d0104..82114fb5 100644 --- a/src/main/java/com/juick/server/TelegramBotManager.java +++ b/src/main/java/com/juick/server/TelegramBotManager.java @@ -349,7 +349,6 @@ public class TelegramBotManager implements NotificationListener { telegramService.getTelegramIdentifiers(Collections.singletonList(jmsg.getTo())) .forEach(c -> telegramNotify(c, formatPost(jmsg, true), jmsg)); } else if (MessageUtils.isReply(jmsg)) { - com.juick.Message op = messagesService.getMessage(jmsg.getMid()); String fmsg = String.format("[%s](%s) %s", MSG_LINK, msgUrl, formatPost(jmsg, true)); telegramService.getTelegramIdentifiers( subscribedUsers diff --git a/src/main/java/com/juick/server/TopManager.java b/src/main/java/com/juick/server/TopManager.java index e5c00242..fe3d605d 100644 --- a/src/main/java/com/juick/server/TopManager.java +++ b/src/main/java/com/juick/server/TopManager.java @@ -42,7 +42,7 @@ public class TopManager { @Scheduled(fixedRate = 3600000) public void updateTop() { messagesService.getPopularCandidates().forEach(m -> { - Message jmsg = messagesService.getMessage(m); + Message jmsg = messagesService.getMessage(m).orElseThrow(IllegalStateException::new); logger.info("added {} to popular", m); messagesService.setMessagePopular(m, 1); List tags = jmsg.getTags().stream().map(Tag::getName).map(String::toLowerCase).collect(Collectors.toList()); diff --git a/src/main/java/com/juick/server/XMPPConnection.java b/src/main/java/com/juick/server/XMPPConnection.java index 5ea105af..0adc7796 100644 --- a/src/main/java/com/juick/server/XMPPConnection.java +++ b/src/main/java/com/juick/server/XMPPConnection.java @@ -288,7 +288,7 @@ public class XMPPConnection implements StanzaListener, NotificationListener { for (User user : users) { jids.addAll(userService.getJIDsbyUID(user.getUid())); } - com.juick.Message fullMsg = messagesService.getMessage(jmsg.getMid()); + com.juick.Message fullMsg = messagesService.getMessage(jmsg.getMid()).orElseThrow(IllegalStateException::new); String txt = "@" + jmsg.getUser().getName() + ":" + MessageUtils.getTagsString(fullMsg) + "\n"; String attachmentUrl = MessageUtils.attachmentUrl(fullMsg); if (StringUtils.isNotEmpty(attachmentUrl)) { @@ -325,7 +325,7 @@ public class XMPPConnection implements StanzaListener, NotificationListener { String replyTo; com.juick.Message replyMessage = jmsg.getReplyto() > 0 ? messagesService.getReply(jmsg.getMid(), jmsg.getReplyto()) - : messagesService.getMessage(jmsg.getMid()); + : messagesService.getMessage(jmsg.getMid()).orElseThrow(IllegalStateException::new); replyTo = replyMessage.getUser().getName(); com.juick.Message fullReply = messagesService.getReply(jmsg.getMid(), jmsg.getRid()); replyQuote = StringUtils.defaultString(fullReply.getReplyQuote()); @@ -594,13 +594,14 @@ public class XMPPConnection implements StanzaListener, NotificationListener { if (jmsg != null) { if (MessageUtils.isReply(jmsg)) { // to get quote and attachment - com.juick.Message original = messagesService.getMessage(jmsg.getMid()); + com.juick.Message original = messagesService.getMessage(jmsg.getMid()).orElseThrow(IllegalStateException::new); com.juick.Message reply = messagesService.getReply(jmsg.getMid(), jmsg.getRid()); applicationEventPublisher.publishEvent(new MessageEvent(this, reply, subscriptionService.getUsersSubscribedToComments(original, reply))); } else if (!MessageUtils.isPM(jmsg)) { applicationEventPublisher.publishEvent(new MessageEvent(this, - messagesService.getMessage(jmsg.getMid()), subscriptionService.getSubscribedUsers(jmsg.getUser().getUid(), jmsg))); + messagesService.getMessage(jmsg.getMid()).orElseThrow(IllegalStateException::new), + subscriptionService.getSubscribedUsers(jmsg.getUser().getUid(), jmsg))); } } else { URI attachment = URI.create(StringUtils.EMPTY); diff --git a/src/main/java/com/juick/server/api/Messages.java b/src/main/java/com/juick/server/api/Messages.java index 4f0009dd..f7485d55 100644 --- a/src/main/java/com/juick/server/api/Messages.java +++ b/src/main/java/com/juick/server/api/Messages.java @@ -39,10 +39,7 @@ import org.springframework.web.bind.annotation.*; import javax.inject.Inject; import java.io.IOException; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @author ugnich @@ -163,8 +160,9 @@ public class Messages { public ResponseEntity> getThread( @RequestParam(defaultValue = "0") int mid) { User visitor = UserUtils.getCurrentUser(); - com.juick.Message msg = messagesService.getMessage(mid); - if (msg != null) { + Optional message = messagesService.getMessage(mid); + if (message.isPresent()) { + Message msg = message.get(); if (!messagesService.canViewThread(mid, visitor.getUid())) { return FORBIDDEN; } else { @@ -189,7 +187,7 @@ public class Messages { User visitor = UserUtils.getCurrentUser(); if (!visitor.isAnonymous()) { messagesService.setLastReadComment(visitor, mid, rid); - Message msg = messagesService.getMessage(mid); + Message msg = messagesService.getMessage(mid).orElseThrow(IllegalStateException::new); userService.updateLastSeen(visitor); applicationEventPublisher.publishEvent( new MessageReadEvent(this, visitor, msg)); diff --git a/src/main/java/com/juick/server/api/Notifications.java b/src/main/java/com/juick/server/api/Notifications.java index 62275f5a..2971a07d 100644 --- a/src/main/java/com/juick/server/api/Notifications.java +++ b/src/main/java/com/juick/server/api/Notifications.java @@ -82,26 +82,23 @@ public class Notifications { } else { if (mid > 0) { // reply - Message msg = messagesService.getMessage(mid); - if (msg != null) { - List users; - if (rid > 0) { - Message op = messagesService.getMessage(mid); - Message reply = messagesService.getReply(mid, rid); - users = subscriptionService.getUsersSubscribedToComments(op, reply); - } else { - users = subscriptionService.getSubscribedUsers(msg.getUser().getUid(), msg); - } - - return ResponseEntity.ok(users.stream().map(User::getUid) - .map(this::collectTokens).collect(Collectors.toList())); + Message msg = messagesService.getMessage(mid).orElseThrow(IllegalStateException::new); + List users; + if (rid > 0) { + Message op = messagesService.getMessage(mid).orElseThrow(IllegalStateException::new); + Message reply = messagesService.getReply(mid, rid); + users = subscriptionService.getUsersSubscribedToComments(op, reply); + } else { + users = subscriptionService.getSubscribedUsers(msg.getUser().getUid(), msg); } + + return ResponseEntity.ok(users.stream().map(User::getUid) + .map(this::collectTokens).collect(Collectors.toList())); } else { // read return ResponseEntity.ok(Collections.singletonList(collectTokens(uid))); } } - throw new HttpBadRequestException(); } @ApiIgnore diff --git a/src/main/java/com/juick/server/api/Post.java b/src/main/java/com/juick/server/api/Post.java index 2c7346b3..d49ec332 100644 --- a/src/main/java/com/juick/server/api/Post.java +++ b/src/main/java/com/juick/server/api/Post.java @@ -41,6 +41,7 @@ import javax.validation.constraints.NotNull; import java.net.URI; import java.net.URL; import java.util.List; +import java.util.Optional; /** * Created by vt on 24/11/2016. @@ -114,11 +115,13 @@ public class Post { if (mid == 0) { throw new HttpBadRequestException(); } - com.juick.Message msg = messagesService.getMessage(mid); - if (msg == null) { + Optional message = messagesService.getMessage(mid); + if (!message.isPresent()) { throw new HttpNotFoundException(); } + Message msg = message.get(); + com.juick.Message reply = null; if (rid > 0) { reply = messagesService.getReply(mid, rid); @@ -158,10 +161,11 @@ public class Post { if (visitor.isAnonymous()) { throw new HttpForbiddenException(); } - com.juick.Message msg = messagesService.getMessage(mid); - if (msg == null) { + Optional message = messagesService.getMessage(mid); + if (!message.isPresent()) { throw new HttpNotFoundException(); } + Message msg = message.get(); if (msg.getUser().getUid() == visitor.getUid()) { throw new HttpForbiddenException(); } @@ -177,10 +181,11 @@ public class Post { if (visitor.isAnonymous()) { throw new HttpForbiddenException(); } - com.juick.Message msg = messagesService.getMessage(mid); - if (msg == null) { + Optional message = messagesService.getMessage(mid); + if (!message.isPresent()) { throw new HttpNotFoundException(); } + Message msg = message.get(); if (msg.getUser().getUid() == visitor.getUid()) { throw new HttpForbiddenException(); } @@ -205,10 +210,11 @@ public class Post { if (visitor.isAnonymous()) { throw new HttpForbiddenException(); } - com.juick.Message msg = messagesService.getMessage(mid); - if (msg == null) { + Optional message = messagesService.getMessage(mid); + if (!message.isPresent()) { throw new HttpNotFoundException(); } + Message msg = message.get(); if (msg.getUser().getUid() == visitor.getUid()) { throw new HttpForbiddenException(); } @@ -228,7 +234,7 @@ public class Post { User author = rid == 0 ? messagesService.getMessageAuthor(mid) : messagesService.getReply(mid, rid).getUser(); if (visitor.equals(author)) { if (messagesService.updateMessage(mid, rid, body)) { - Message result = rid == 0 ? messagesService.getMessage(mid) : messagesService.getReply(mid, rid); + Message result = rid == 0 ? messagesService.getMessage(mid).orElseThrow(IllegalStateException::new) : messagesService.getReply(mid, rid); return CommandResult.build(result, "Message updated", StringUtils.EMPTY); } throw new HttpBadRequestException(); diff --git a/src/main/java/com/juick/server/api/activity/Profile.java b/src/main/java/com/juick/server/api/activity/Profile.java index 10390ea1..f4160eab 100644 --- a/src/main/java/com/juick/server/api/activity/Profile.java +++ b/src/main/java/com/juick/server/api/activity/Profile.java @@ -250,7 +250,7 @@ public class Profile { messagesService.getReply(mid, rid))); } return Context.build(activityPubManager.makeNote( - messagesService.getMessage(mid))); + messagesService.getMessage(mid).orElseThrow(IllegalStateException::new))); } @PostMapping(value = "/api/inbox", consumes = {Context.LD_JSON_MEDIA_TYPE, Context.ACTIVITYSTREAMS_PROFILE_MEDIA_TYPE}) diff --git a/src/main/java/com/juick/server/www/controllers/MessagesWWW.java b/src/main/java/com/juick/server/www/controllers/MessagesWWW.java index 0708e27f..77ee6e15 100644 --- a/src/main/java/com/juick/server/www/controllers/MessagesWWW.java +++ b/src/main/java/com/juick/server/www/controllers/MessagesWWW.java @@ -496,12 +496,14 @@ public class MessagesWWW { throw new HttpForbiddenException(); } - com.juick.Message msg = messagesService.getMessage(mid); + Optional message = messagesService.getMessage(mid); - if (msg == null || msg.getUser().isBanned()) { + if (!message.isPresent() || message.get().getUser().isBanned()) { throw new HttpNotFoundException(); } + Message msg = message.get(); + com.juick.User user = userService.getUserByName(uname); if (user.isAnonymous() || !msg.getUser().equals(user)) { return String.format("redirect:/%s/%d", msg.getUser().getName(), mid); diff --git a/src/main/java/com/juick/service/MessagesService.java b/src/main/java/com/juick/service/MessagesService.java index 362501b5..fb2b3d95 100644 --- a/src/main/java/com/juick/service/MessagesService.java +++ b/src/main/java/com/juick/service/MessagesService.java @@ -23,10 +23,7 @@ import com.juick.User; import com.juick.model.ResponseReply; import java.net.URI; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * Created by aalexeev on 11/13/16. @@ -63,7 +60,7 @@ public interface MessagesService { int getMessagePrivacy(int mid); - com.juick.Message getMessage(int mid); + Optional getMessage(int mid); com.juick.Message getReply(int mid, int rid); diff --git a/src/main/java/com/juick/service/MessagesServiceImpl.java b/src/main/java/com/juick/service/MessagesServiceImpl.java index efe480c0..145d42c3 100644 --- a/src/main/java/com/juick/service/MessagesServiceImpl.java +++ b/src/main/java/com/juick/service/MessagesServiceImpl.java @@ -343,7 +343,7 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ @Transactional(readOnly = true) @Override - public com.juick.Message getMessage(final int mid) { + public Optional getMessage(final int mid) { List list = getJdbcTemplate().query( "SELECT messages.message_id as mid, 0 as rid, 0 as replyto, " @@ -369,9 +369,9 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ Map> reactionStats = updateReactionsFor(Collections.singletonList(mid)); message.setReactions(reactionStats.get(message.getMid())); message.setEntities(MessageUtils.getEntities(message)); - return message; + return Optional.of(message); } - return null; + return Optional.empty(); } @Transactional(readOnly = true) diff --git a/src/main/java/com/juick/service/component/MessageReadEvent.java b/src/main/java/com/juick/service/component/MessageReadEvent.java index b070c8cb..b2af4a08 100644 --- a/src/main/java/com/juick/service/component/MessageReadEvent.java +++ b/src/main/java/com/juick/service/component/MessageReadEvent.java @@ -4,7 +4,7 @@ import com.juick.Message; import com.juick.User; import org.springframework.context.ApplicationEvent; -import java.util.List; +import javax.annotation.Nonnull; public class MessageReadEvent extends ApplicationEvent { private User user; @@ -14,7 +14,7 @@ public class MessageReadEvent extends ApplicationEvent { * * @param source the object on which the event initially occurred (never {@code null}) */ - public MessageReadEvent(Object source, User user, Message message) { + public MessageReadEvent(Object source, @Nonnull User user, Message message) { super(source); this.user = user; this.message = message; diff --git a/src/test/java/com/juick/server/tests/ServerTests.java b/src/test/java/com/juick/server/tests/ServerTests.java index 69251e10..4345d607 100644 --- a/src/test/java/com/juick/server/tests/ServerTests.java +++ b/src/test/java/com/juick/server/tests/ServerTests.java @@ -257,14 +257,14 @@ public class ServerTests { assertThat(messagesService.getMyFeed(freefd.getUid(), 0, true).get(0), equalTo(mid3)); assertThat(messagesService.getMyFeed(freefd.getUid(), mid2, true).get(0), equalTo(mid0)); assertThat(messagesService.recommendMessage(mid0, ugnich.getUid()), equalTo(MessagesService.RecommendStatus.Added)); - assertThat(messagesService.getMessage(mid0).getLikes(), equalTo(1)); + assertThat(messagesService.getMessage(mid0).orElseThrow(IllegalStateException::new).getLikes(), equalTo(1)); assertThat(messagesService.recommendMessage(mid0, ugnich.getUid()), equalTo(MessagesService.RecommendStatus.Deleted)); - assertThat(messagesService.getMessage(mid0).getLikes(), equalTo(0)); + assertThat(messagesService.getMessage(mid0).get().getLikes(), equalTo(0)); assertThat(messagesService.getAll(ugnich.getUid(), 0).get(0), equalTo(mid3)); Tag yoTag = tagService.getTag("yoyo", true); assertThat(tagService.getTag("YOYO", false), equalTo(yoTag)); int mid = messagesService.createMessage(ugnich.getUid(), "yo", null, Collections.singletonList(yoTag)); - Message msg = messagesService.getMessage(mid); + Message msg = messagesService.getMessage(mid).get(); List subscribers = subscriptionService.getSubscribedUsers(ugnich.getUid(), msg); telegramService.createTelegramUser(12345, "freefd"); @@ -304,7 +304,7 @@ public class ServerTests { User user = userService.getUserByUID(user_id).orElse(AnonymousUser.INSTANCE); assertEquals("it should be me", "mmmme", user.getName()); int mid = messagesService.createMessage(user_id, "yo", null, new ArrayList<>()); - Message msg = messagesService.getMessage(mid); + Message msg = messagesService.getMessage(mid).get(); assertEquals("yo", msg.getText()); User me = msg.getUser(); assertEquals("mmmme", me.getName()); @@ -314,7 +314,7 @@ public class ServerTests { List tagList = new ArrayList<>(); tagList.add(tag); int mid2 = messagesService.createMessage(user_id, "yo2", null, tagList); - Message msg2 = messagesService.getMessage(mid2); + Message msg2 = messagesService.getMessage(mid2).get(); assertEquals(1, msg2.getTags().size()); assertEquals("we already have ugnich", -1, userService.createUser("ugnich", "x")); int ugnich_id = userService.createUser("hugnich", "x"); @@ -334,7 +334,7 @@ public class ServerTests { assertThat(replies2.size(), equalTo(2)); assertThat(replies2.get(1), equalTo(reply2)); - Message msg3 = messagesService.getMessage(mid2); + Message msg3 = messagesService.getMessage(mid2).get(); assertEquals(2, msg3.getReplies()); assertEquals("weather", msg3.getTags().get(0).getName()); @@ -357,7 +357,7 @@ public class ServerTests { String dbTagName = jdbcTemplate.queryForObject("select name from tags where name=?", String.class, htmlTagName); assertEquals("db tags should not be escaped", dbTagName, htmlTag.getName()); int mid4 = messagesService.createMessage(user_id, "yoyoyo", null, null); - Message msg4 = messagesService.getMessage(mid4); + Message msg4 = messagesService.getMessage(mid4).get(); assertEquals("tags string should be empty", StringUtils.EMPTY, MessageUtils.getTagsString(msg4)); messagesService.deleteMessage(user_id, mid4); } @@ -373,7 +373,7 @@ public class ServerTests { messagesService.likeMessage(mid, freefdId,3); messagesService.likeMessage(mid, freefdId,1); - Message msg4 = messagesService.getMessage(mid); + Message msg4 = messagesService.getMessage(mid).get(); assertThat(msg4.getLikes(), equalTo(1)); Assert.assertEquals(2, msg4.getReactions().stream().filter(r -> r.getId() == 2) @@ -436,7 +436,7 @@ public class ServerTests { String msgText = "Привет, я - Угнич"; CommandResult result = commandsManager.processCommand(ugnich, msgText, URI.create("http://static.juick.com/settings/facebook.png")); int mid = result.getNewMessage().get().getMid(); - Message msg = messagesService.getMessage(mid); + Message msg = messagesService.getMessage(mid).get(); tagService.createTag("тест"); mockMvc.perform( get("/api/home") @@ -738,7 +738,7 @@ public class ServerTests { Message msgreply = commandsManager.processCommand(user, "#" + msg.getMid() + " yyy", HttpUtils.downloadImage(URI.create("http://static.juick.com/settings/xmpp.png").toURL(), tmpDir)).getNewMessage().get(); assertThat(msgreply.getAttachmentType(), equalTo("png")); assertEquals("text should match", "yoyo", - messagesService.getMessage(msg.getMid()).getText()); + messagesService.getMessage(msg.getMid()).get().getText()); assertEquals("tag should match", "yo", tagService.getMessageTags(msg.getMid()).get(0).getTag().getName()); CommandResult yoyoMsg = commandsManager.processCommand(user, "*yo", URI.create("http://static.juick.com/settings/facebook.png")); @@ -761,16 +761,16 @@ public class ServerTests { int rid = messagesService.createReply(mid, 0, user, "comment", null); assertEquals("number of subscribed users should match", 1, subscriptionService.getUsersSubscribedToComments( - messagesService.getMessage(mid), + messagesService.getMessage(mid).get(), messagesService.getReply(mid, rid)).size()); privacyQueriesService.blacklistUser(user, readerUser); assertEquals("number of subscribed users should match", 0, subscriptionService.getUsersSubscribedToComments( - messagesService.getMessage(mid), + messagesService.getMessage(mid).get(), messagesService.getReply(mid, rid)).size()); assertEquals("number of subscribed users should match", 1, subscriptionService.getUsersSubscribedToComments( - messagesService.getMessage(mid), + messagesService.getMessage(mid).get(), messagesService.getReply(mid, rid), true).size()); assertEquals("should be subscribed", "Subscribed to @" + user.getName(), commandsManager.processCommand(readerUser, "S @" + user.getName(), emptyUri) @@ -801,7 +801,7 @@ public class ServerTests { commandsManager.processCommand(user, "#" + mid + " *there", emptyUri).getText()); assertEquals("number of tags should match", 2, tagService.getMessageTags(mid).size()); - assertThat(messagesService.getMessage(mid).getTags().size(), is(2)); + assertThat(messagesService.getMessage(mid).get().getTags().size(), is(2)); assertEquals("should be blacklisted", "Tag added to your blacklist", commandsManager.processCommand(readerUser, "BL *there", emptyUri).getText()); assertEquals("number of subscribed users should match", 0, @@ -834,7 +834,7 @@ public class ServerTests { assertEquals("should be unsubscribed", "Unsubscribed from #" + mid, commandsManager.processCommand(readerUser, "u #" + mid, emptyUri).getText()); assertEquals("number of subscribed users should match", 0, - subscriptionService.getUsersSubscribedToComments(messagesService.getMessage(mid), + subscriptionService.getUsersSubscribedToComments(messagesService.getMessage(mid).get(), messagesService.getReply(mid, rid)).size()); assertNotEquals("should NOT be deleted", String.format("Message %s deleted", mid), commandsManager.processCommand(readerUser, "D #" + mid, emptyUri).getText()); @@ -938,7 +938,7 @@ public class ServerTests { mockMvc.perform(post("/api/react?mid=" + mid1 + "&hash=" + freefdHash+ "&reactionId=2")) .andExpect(status().isOk()); - Message msg4 = messagesService.getMessage(mid1); + Message msg4 = messagesService.getMessage(mid1).get(); assertThat(msg4.getLikes(), is(0)); assertThat(messagesService.getMessages(AnonymousUser.INSTANCE, Collections.singletonList(mid1)).get(0).getLikes(), is(0)); Assert.assertEquals(1, msg4.getReactions().stream().filter(r -> r.getId() == 2) @@ -947,15 +947,16 @@ public class ServerTests { .andExpect(status().isOk()); mockMvc.perform(post("/api/react?mid=" + mid1 + "&hash=" + freefdHash+ "&reactionId=1")) .andExpect(status().isOk()); - assertThat(messagesService.getMessage(mid1).getLikes(), is(1)); + assertThat(messagesService.getMessage(mid1).get().getLikes(), is(1)); } @Test public void lastReadTests() throws Exception { jdbcTemplate.execute("DELETE FROM bl_users"); + jdbcTemplate.execute("DELETE FROM messages"); assertThat(userService.isInBLAny(ugnich.getUid(), freefd.getUid()), is(false)); int mid = messagesService.createMessage(ugnich.getUid(), "to be watched", null, null); - subscriptionService.subscribeMessage(messagesService.getMessage(mid), ugnich); + subscriptionService.subscribeMessage(messagesService.getMessage(mid).get(), ugnich); messagesService.createReply(mid, 0, freefd, "new reply", null); BiFunction lastRead = (user, m) -> jdbcTemplate.queryForObject( "SELECT last_read_rid FROM subscr_messages WHERE suser_id=? AND message_id=?", @@ -1017,7 +1018,7 @@ public class ServerTests { assertTrue(messagesService.getMessages(AnonymousUser.INSTANCE, messagesService.getMyFeed(freefd.getUid(), 0, true)) .stream().noneMatch(m -> m.getTags().contains(banned))); tagService.updateTags(newMid, Collections.singletonList(banned)); - assertThat(messagesService.getMessage(newMid).getTags().size(), is(0)); + assertThat(messagesService.getMessage(newMid).get().getTags().size(), is(0)); privacyQueriesService.blacklistUser(freefd, userService.getUserByUID(newUid).orElse(AnonymousUser.INSTANCE)); assertTrue(messagesService.getMessages(AnonymousUser.INSTANCE, messagesService.getMyFeed(freefd.getUid(), 0, true)) .stream().noneMatch(m -> m.getMid() == newMid)); @@ -1127,17 +1128,17 @@ public class ServerTests { commandsManager.processCommand(freefd, String.format("#%d ugnich - dick too", mid), emptyUri); commandsManager.processCommand(juick, String.format("#%d/1 ban for a hour!", mid), emptyUri); commandsManager.processCommand(juick, String.format("#%d freefd is here but it is hidden from you", mid), emptyUri); - assertThat(messagesService.getMessage(mid).getReplies(), is(3)); + assertThat(messagesService.getMessage(mid).get().getReplies(), is(3)); Message reply = messagesService.getReply(mid, 3); assertThat(userService.isReplyToBL(ugnich, reply), is(false)); List replies = messagesService.getReplies(ugnich, mid); assertThat(replies.size(), is(1)); commandsManager.processCommand(freefd, String.format("#%d/3 hahaha!", mid), emptyUri); - assertThat(messagesService.getMessage(mid).getReplies(), is(4)); + assertThat(messagesService.getMessage(mid).get().getReplies(), is(4)); replies = messagesService.getReplies(ugnich, mid); assertThat(replies.size(), is(1)); commandsManager.processCommand(juick, String.format("#%d/4 mmm?!", mid), emptyUri); - assertThat(messagesService.getMessage(mid).getReplies(), is(5)); + assertThat(messagesService.getMessage(mid).get().getReplies(), is(5)); replies = messagesService.getReplies(ugnich, mid); reply = messagesService.getReply(mid, 5); assertThat(userService.isReplyToBL(ugnich, reply), is(true)); @@ -1269,23 +1270,23 @@ public class ServerTests { messagesService.recommendMessage(posterMid, recommenderId); BiFunction> subscribers = (recommId, msg) -> subscriptionService.getUsersSubscribedToUserRecommendations(recommId, msg); - List recommendSubscribers = subscribers.apply(recommenderId, messagesService.getMessage(posterMid)); + List recommendSubscribers = subscribers.apply(recommenderId, messagesService.getMessage(posterMid).get()); assertThat(recommendSubscribers.size(), is(1)); assertThat(recommendSubscribers.get(0).getUid(), is(readerId)); privacyQueriesService.blacklistUser(reader, poster); - assertThat(subscribers.apply(recommenderId, messagesService.getMessage(posterMid)).size(), is(0)); + assertThat(subscribers.apply(recommenderId, messagesService.getMessage(posterMid).get()).size(), is(0)); privacyQueriesService.blacklistUser(reader, poster); - assertThat(subscribers.apply(recommenderId, messagesService.getMessage(posterMid)).size(), is(1)); + assertThat(subscribers.apply(recommenderId, messagesService.getMessage(posterMid).get()).size(), is(1)); tagService.blacklistTag(reader, sampleTag); - assertThat(subscribers.apply(recommenderId, messagesService.getMessage(posterMid)).size(), is(0)); + assertThat(subscribers.apply(recommenderId, messagesService.getMessage(posterMid).get()).size(), is(0)); tagService.blacklistTag(reader, sampleTag); - assertThat(subscribers.apply(recommenderId, messagesService.getMessage(posterMid)).size(), is(1)); + assertThat(subscribers.apply(recommenderId, messagesService.getMessage(posterMid).get()).size(), is(1)); messagesService.recommendMessage(posterMid, lateRecommenderId); - List lateRecommendSubscribers = subscribers.apply(recommenderId, messagesService.getMessage(posterMid)); + List lateRecommendSubscribers = subscribers.apply(recommenderId, messagesService.getMessage(posterMid).get()); assertThat(lateRecommendSubscribers.size(), is(0)); int readerMid = messagesService.createMessage(readerId, "PEOPLE", null, null); messagesService.recommendMessage(readerMid, recommenderId); - assertThat(subscribers.apply(recommenderId, messagesService.getMessage(readerMid)).size(), is(0)); + assertThat(subscribers.apply(recommenderId, messagesService.getMessage(readerMid).get()).size(), is(0)); } @Test public void mentionsInComments() { @@ -1295,7 +1296,7 @@ public class ServerTests { int mentionerId = userService.createUser("mmm", "secret"); User mentioner = userService.getUserByUID(mentionerId).get(); int mid = messagesService.createMessage(posterId, "who is dick?", null, null); - Message msg = messagesService.getMessage(mid); + Message msg = messagesService.getMessage(mid).get(); int rid = messagesService.createReply(mid, 0, commenter, "@mmm is dick", null); Message reply = messagesService.getReply(mid, rid); @@ -1395,10 +1396,10 @@ public class ServerTests { assertThat(messagesService.recommendMessage(mid, ermineId), is(MessagesService.RecommendStatus.Added)); assertThat(messagesService.recommendMessage(mid, fmapId), is(MessagesService.RecommendStatus.Added)); assertThat(messagesService.recommendMessage(mid, pogoId), is(MessagesService.RecommendStatus.Added)); - assertThat(messagesService.getMessage(mid).getLikes(), is(3)); + assertThat(messagesService.getMessage(mid).get().getLikes(), is(3)); assertThat(CollectionUtils.isEqualCollection(messagesService.getMessageRecommendations(mid), Arrays.asList("fmap", "ermine", "pogo")), is(true)); privacyQueriesService.blacklistUser(userService.getUserByName("monstreek"), userService.getUserByName("pogo")); - assertThat(messagesService.getMessage(mid).getLikes(), is(3)); + assertThat(messagesService.getMessage(mid).get().getLikes(), is(3)); assertThat(CollectionUtils.isEqualCollection(messagesService.getMessageRecommendations(mid), Arrays.asList("fmap", "ermine")), is(true)); } @Test @@ -1526,7 +1527,7 @@ public class ServerTests { assertThat(fetchMeta(String.format("http://localhost:8080/ugnich/%d", mid), "twitter:card") .getAttribute("content"), equalTo("summary")); int mid2 = messagesService.createMessage(ugnich.getUid(), "with image", "png", null); - Message message = messagesService.getMessage(mid2); + Message message = messagesService.getMessage(mid2).get(); assertThat(fetchMeta(String.format("http://localhost:8080/ugnich/%d", mid2), "twitter:card") .getAttribute("content"), equalTo("summary_large_image")); assertThat(fetchMeta(String.format("http://localhost:8080/ugnich/%d", mid2), "og:description") @@ -1576,10 +1577,10 @@ public class ServerTests { String discussionsUrl = "http://localhost:8080/"; HtmlPage discussions = webClient.getPage(discussionsUrl); assertThat(discussions.querySelectorAll("article").size(), is(0)); - subscriptionService.subscribeMessage(messagesService.getMessage(mid), freefd); + subscriptionService.subscribeMessage(messagesService.getMessage(mid).get(), freefd); discussions = (HtmlPage) discussions.refresh(); assertThat(discussions.querySelectorAll("article").size(), is(1)); - subscriptionService.subscribeMessage(messagesService.getMessage(midNew), freefd); + subscriptionService.subscribeMessage(messagesService.getMessage(midNew).get(), freefd); discussions = (HtmlPage) discussions.refresh(); assertThat(discussions.querySelectorAll("article").size(), is(2)); assertThat(discussions.querySelectorAll("article").get(0).getAttributes().getNamedItem("data-mid").getNodeValue(), is(String.valueOf(midNew))); @@ -1587,13 +1588,13 @@ public class ServerTests { discussions = (HtmlPage) discussions.refresh(); assertThat(discussions.querySelectorAll("article").size(), is(2)); assertThat(discussions.querySelectorAll("article").get(0).getAttributes().getNamedItem("data-mid").getNodeValue(), is(String.valueOf(mid))); - Message msg = messagesService.getMessage(mid); + Message msg = messagesService.getMessage(mid).get(); HtmlPage discussionsOld = webClient.getPage(discussionsUrl + "?to=" + msg.getUpdated().toEpochMilli()); assertThat(discussionsOld.querySelectorAll("article").size(), is(1)); assertThat(discussionsOld.querySelectorAll("article").get(0).getAttributes().getNamedItem("data-mid").getNodeValue(), is(String.valueOf(midNew))); List newMids = IntStream.rangeClosed(1, 19).map(i -> messagesService.createMessage(ugnich.getUid(), String.valueOf(i), null, null)).boxed().collect(Collectors.toList()); for (Integer m : newMids) { - subscriptionService.subscribeMessage(messagesService.getMessage(m), freefd); + subscriptionService.subscribeMessage(messagesService.getMessage(m).get(), freefd); } discussions = (HtmlPage) discussions.refresh(); assertThat(discussions.querySelectorAll("article").size(), is(20)); @@ -1603,7 +1604,7 @@ public class ServerTests { discussions = (HtmlPage) discussions.refresh(); assertThat(discussions.querySelectorAll("article") .get(0).getAttributes().getNamedItem("data-mid").getNodeValue(), is(String.valueOf(midNew))); - Message old = messagesService.getMessage(newMids.get(0)); + Message old = messagesService.getMessage(newMids.get(0)).get(); discussionsOld = webClient.getPage(discussionsUrl + "?to=" + old.getUpdated().toEpochMilli()); assertThat(discussionsOld.querySelectorAll("article").size(), is(1)); assertThat(discussionsOld.querySelectorAll("article") @@ -1653,7 +1654,7 @@ public class ServerTests { loginCookie.getName(), loginCookie.getValue())); int mid = messagesService.createMessage(ugnich.getUid(), "new test", null, null); - subscriptionService.subscribeMessage(messagesService.getMessage(mid), freefd); + subscriptionService.subscribeMessage(messagesService.getMessage(mid).get(), freefd); int rid = messagesService.createReply(mid, 0, ugnich, "new reply", null); HtmlPage discussionsPage = webClient.getPage("http://localhost:8080/?show=discuss"); assertThat(discussionsPage.querySelectorAll("#global a .badge").size(), is(1)); -- cgit v1.2.3