aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/juick
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/juick')
-rw-r--r--src/main/java/com/juick/CommandsManager.java10
-rw-r--r--src/main/java/com/juick/TwitterManager.java4
-rw-r--r--src/main/java/com/juick/service/MessagesService.java4
-rw-r--r--src/main/java/com/juick/service/MessagesServiceImpl.java15
-rw-r--r--src/main/java/com/juick/service/TagService.java5
-rw-r--r--src/main/java/com/juick/service/TagServiceImpl.java15
-rw-r--r--src/main/java/com/juick/util/TagUtils.java7
7 files changed, 43 insertions, 17 deletions
diff --git a/src/main/java/com/juick/CommandsManager.java b/src/main/java/com/juick/CommandsManager.java
index 6ad19beec..0c16fbbd1 100644
--- a/src/main/java/com/juick/CommandsManager.java
+++ b/src/main/java/com/juick/CommandsManager.java
@@ -25,6 +25,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
+import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -50,6 +51,7 @@ import com.juick.service.component.PingEvent;
import com.juick.service.component.SystemEvent;
import com.juick.util.HttpUtils;
import com.juick.util.MessageUtils;
+import com.juick.util.TagUtils;
import com.juick.util.annotation.UserCommand;
import com.juick.util.formatters.PlainTextFormatter;
import com.juick.www.WebApp;
@@ -122,7 +124,7 @@ public class CommandsManager {
return commandResult;
}
}
- Pair<String, List<Tag>> tags = tagService.fromString(input);
+ Pair<String, Set<Tag>> tags = tagService.fromString(input);
if (tags.getRight().size() > 5) {
return CommandResult.fromString("Sorry, 5 tags maximum.");
}
@@ -539,9 +541,11 @@ public class CommandsManager {
return CommandResult.fromString("Reply not found");
}
}
- Pair<String, List<Tag>> messageTags = tagService.fromString(txt);
+ Pair<String, Set<Tag>> messageTags = tagService.fromString(txt);
if (user.getUid() == msg.get().getUser().getUid() && rid == 0 && messageTags.getRight().size() > 0) {
- if (!CollectionUtils.isEqualCollection(tagService.updateTags(mid, messageTags.getRight()), msg.get().getTags())) {
+ var updatedTags = tagService.updateTags(mid, messageTags.getRight());
+ if (!CollectionUtils.isEqualCollection(updatedTags, msg.get().getTags())) {
+ messagesService.setReadOnly(msg.get().getMid(), TagUtils.hasTag(updatedTags, "readonly"));
return CommandResult.fromString("Tags are updated");
} else {
return CommandResult.fromString("Tags are NOT updated (5 tags maximum?)");
diff --git a/src/main/java/com/juick/TwitterManager.java b/src/main/java/com/juick/TwitterManager.java
index 348647086..8af672a31 100644
--- a/src/main/java/com/juick/TwitterManager.java
+++ b/src/main/java/com/juick/TwitterManager.java
@@ -21,6 +21,8 @@ import com.juick.www.api.SystemActivity;
import com.juick.service.UserService;
import com.juick.service.component.*;
import com.juick.util.MessageUtils;
+import com.juick.util.TagUtils;
+
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -76,7 +78,7 @@ public class TwitterManager implements NotificationListener {
return;
}
if (StringUtils.isNotEmpty(userService.getTwitterName(msg.getUser().getUid()))) {
- if (msg.getTags().stream().noneMatch(t -> t.getName().equals("notwitter"))) {
+ if (TagUtils.hasNoTag(msg.getTags(), "notwitter")) {
twitterPost(msg);
}
}
diff --git a/src/main/java/com/juick/service/MessagesService.java b/src/main/java/com/juick/service/MessagesService.java
index 188a81c02..d102031d2 100644
--- a/src/main/java/com/juick/service/MessagesService.java
+++ b/src/main/java/com/juick/service/MessagesService.java
@@ -31,7 +31,7 @@ import java.util.*;
* Created by aalexeev on 11/13/16.
*/
public interface MessagesService {
- int createMessage(int uid, String txt, String attachment, List<Tag> tags);
+ int createMessage(int uid, String txt, String attachment, Set<Tag> tags);
int createReply(int mid, int rid, User user, String txt, String attachment);
enum RecommendStatus {
@@ -55,6 +55,8 @@ public interface MessagesService {
boolean isReadOnly(int mid);
+ void setReadOnly(int mid, boolean readonly);
+
boolean isSubscribed(int uid, int mid);
int getMessagePrivacy(int mid);
diff --git a/src/main/java/com/juick/service/MessagesServiceImpl.java b/src/main/java/com/juick/service/MessagesServiceImpl.java
index ddf7234e1..b135f3c20 100644
--- a/src/main/java/com/juick/service/MessagesServiceImpl.java
+++ b/src/main/java/com/juick/service/MessagesServiceImpl.java
@@ -21,6 +21,8 @@ import com.juick.model.*;
import com.juick.model.User;
import com.juick.www.WebApp;
import com.juick.util.MessageUtils;
+import com.juick.util.TagUtils;
+
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -131,9 +133,9 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ
*/
@Transactional
@Override
- public int createMessage(final int uid, final String txt, final String attachment, final List<Tag> tags) {
+ public int createMessage(final int uid, final String txt, final String attachment, @Nonnull final Set<Tag> tags) {
SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(getJdbcTemplate()).withTableName("messages")
- .usingColumns("user_id", "attach", "ts").usingGeneratedKeyColumns("message_id");
+ .usingColumns("user_id", "attach", "ts", "readonly").usingGeneratedKeyColumns("message_id");
Map<String, Object> insertMap = new HashMap<>();
insertMap.put("user_id", uid);
Instant now = Instant.now();
@@ -141,15 +143,17 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ
if (StringUtils.isNotEmpty(attachment)) {
insertMap.put("attach", attachment);
}
+ insertMap.put("readonly", TagUtils.hasTag(tags, "readonly"));
int mid = simpleJdbcInsert.executeAndReturnKey(insertMap).intValue();
if (mid > 0) {
if (CollectionUtils.isNotEmpty(tags)) {
+ var newTags = new ArrayList<>(tags);
getJdbcTemplate().batchUpdate("INSERT INTO messages_tags(message_id, tag_id) VALUES (?, ?)",
new BatchPreparedStatementSetter() {
@Override
public void setValues(@Nonnull PreparedStatement ps, int i) throws SQLException {
ps.setInt(1, mid);
- ps.setInt(2, tags.get(i).TID);
+ ps.setInt(2, newTags.get(i).TID);
}
@Override
@@ -343,6 +347,11 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ
return !list.isEmpty() && list.get(0) == 1;
}
+ @Override
+ public void setReadOnly(final int mid, final boolean readonly) {
+ getJdbcTemplate().update("UPDATE messages SET readonly=?", readonly);
+ }
+
@Transactional(readOnly = true)
@Override
public boolean isSubscribed(final int uid, final int mid) {
diff --git a/src/main/java/com/juick/service/TagService.java b/src/main/java/com/juick/service/TagService.java
index 82aa91516..96e5975b0 100644
--- a/src/main/java/com/juick/service/TagService.java
+++ b/src/main/java/com/juick/service/TagService.java
@@ -24,6 +24,7 @@ import org.apache.commons.lang3.tuple.Pair;
import java.util.Collection;
import java.util.List;
+import java.util.Set;
import java.util.stream.Stream;
/**
@@ -48,9 +49,9 @@ public interface TagService {
List<TagStats> getTagStats();
- List<Tag> updateTags(int mid, Collection<Tag> newTags);
+ Set<Tag> updateTags(int mid, Collection<Tag> newTags);
- Pair<String, List<Tag>> fromString(String txt);
+ Pair<String, Set<Tag>> fromString(String txt);
List<TagStats> getMessageTags(int mid);
diff --git a/src/main/java/com/juick/service/TagServiceImpl.java b/src/main/java/com/juick/service/TagServiceImpl.java
index 0bd6bb0cf..a5f3241ae 100644
--- a/src/main/java/com/juick/service/TagServiceImpl.java
+++ b/src/main/java/com/juick/service/TagServiceImpl.java
@@ -40,6 +40,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
+import java.util.Set;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -180,9 +181,9 @@ public class TagServiceImpl extends BaseJdbcService implements TagService {
@Transactional
@Override
- public List<Tag> updateTags(final int mid, final Collection<Tag> newTags) {
- List<Tag> currentTags = getMessageTags(mid).stream()
- .map(TagStats::getTag).collect(Collectors.toList());
+ public Set<Tag> updateTags(final int mid, final Collection<Tag> newTags) {
+ Set<Tag> currentTags = getMessageTags(mid).stream()
+ .map(TagStats::getTag).collect(Collectors.toSet());
if (CollectionUtils.isEmpty(newTags))
return currentTags;
@@ -214,18 +215,18 @@ public class TagServiceImpl extends BaseJdbcService implements TagService {
});
return getMessageTags(mid).stream()
- .map(TagStats::getTag).collect(Collectors.toList());
+ .map(TagStats::getTag).collect(Collectors.toSet());
}
@Override
- public Pair<String, List<Tag>> fromString(final String txt) {
+ public Pair<String, Set<Tag>> fromString(final String txt) {
String firstLine = txt.split("\\n", 2)[0];
Supplier<Stream<String>> tagsStream = () -> Arrays.stream(firstLine.split("\\ "))
.takeWhile(t -> t.matches("\\*[^\\s]+|#[^\\s]*[^\\d][^\\s]*"));
int tagsLength = tagsStream.get().collect(Collectors.joining(" ")).length();
String body = txt.substring(tagsLength);
- List<Tag> tags = tagsStream.get().map(t -> getTag(t.substring(1), true))
- .distinct().collect(Collectors.toList());
+ Set<Tag> tags = tagsStream.get().map(t -> getTag(t.substring(1), true))
+ .distinct().collect(Collectors.toSet());
return Pair.of(body, tags);
}
diff --git a/src/main/java/com/juick/util/TagUtils.java b/src/main/java/com/juick/util/TagUtils.java
index 2ec03e489..5069ae6f5 100644
--- a/src/main/java/com/juick/util/TagUtils.java
+++ b/src/main/java/com/juick/util/TagUtils.java
@@ -22,6 +22,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
+import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -39,4 +40,10 @@ public class TagUtils {
return tags.stream().map(t -> "*" + t.getName())
.collect(Collectors.joining(" "));
}
+ public static boolean hasTag(final Set<Tag> tags, String name) {
+ return tags.stream().anyMatch(tag -> tag.getName().equals(name));
+ }
+ public static boolean hasNoTag(final Set<Tag> tags, String name) {
+ return tags.stream().noneMatch(tag -> tag.getName().equals(name));
+ }
}