aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/juick/server/TagQueries.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/juick/server/TagQueries.java')
-rw-r--r--src/main/java/com/juick/server/TagQueries.java65
1 files changed, 48 insertions, 17 deletions
diff --git a/src/main/java/com/juick/server/TagQueries.java b/src/main/java/com/juick/server/TagQueries.java
index 0094fc22..2258a8ea 100644
--- a/src/main/java/com/juick/server/TagQueries.java
+++ b/src/main/java/com/juick/server/TagQueries.java
@@ -20,18 +20,17 @@ package com.juick.server;
import com.juick.Tag;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.support.GeneratedKeyHolder;
+import org.springframework.jdbc.support.KeyHolder;
-import java.sql.Connection;
import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import org.springframework.jdbc.support.GeneratedKeyHolder;
-import org.springframework.jdbc.support.KeyHolder;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
/**
*
@@ -39,17 +38,19 @@ import org.springframework.jdbc.support.KeyHolder;
*/
public class TagQueries {
- private static final Logger LOGGER = Logger.getLogger(TagQueries.class.getName());
-
public static com.juick.Tag getTag(JdbcTemplate sql, int tid) {
- return sql.queryForObject("SELECT synonym_id,name FROM tags WHERE tag_id=?",
- new Object[]{tid}, (rs, num) -> {
- Tag ret = new Tag();
- ret.TID = tid;
- ret.SynonymID = rs.getInt(1);
- ret.Name = rs.getString(2);
- return ret;
- });
+ try {
+ return sql.queryForObject("SELECT synonym_id,name FROM tags WHERE tag_id=?",
+ new Object[]{tid}, (rs, num) -> {
+ Tag ret = new Tag();
+ ret.TID = tid;
+ ret.SynonymID = rs.getInt(1);
+ ret.Name = rs.getString(2);
+ return ret;
+ });
+ } catch (EmptyResultDataAccessException e) {
+ return null;
+ }
}
public static com.juick.Tag getTag(JdbcTemplate sql, String tag, boolean autoCreate) {
@@ -132,4 +133,34 @@ public class TagQueries {
public static List<String> getPopularTags(JdbcTemplate sql) {
return sql.queryForList("SELECT name FROM tags WHERE top=1 ORDER BY name ASC", String.class);
}
+ public static List<Tag> updateTags(JdbcTemplate sql, int mid, List<Tag> newTags) {
+ List<Tag> currentTags = MessagesQueries.getMessageTags(sql, mid);
+ newTags.stream().filter(currentTags::contains)
+ .forEach(t -> sql.update("DELETE FROM messages_tags WHERE message_id=? AND tag_id=?", mid, t.TID));
+ newTags.stream().filter(t -> !currentTags.contains(t))
+ .forEach(t -> sql.update("INSERT INTO messages_tags(message_id,tag_id) VALUES (?,?)", mid, t.TID));
+ return MessagesQueries.getMessageTags(sql, mid);
+ }
+
+ public static List<Tag> fromString(JdbcTemplate sql, String txt, boolean tagsOnly) {
+ String patternString = tagsOnly ? "^(?:(?:\\*[^ \\r\\n\\t]+)|\\s)+$" : "^\\*([^ \\r\\n\\t]+)\\s+([\\s\\S]+)";
+ Pattern tagsPattern = Pattern.compile(patternString);
+ if (tagsPattern.matcher(txt).matches()) {
+ Pattern tagPattern = Pattern.compile("\\*([^ \\r\\n\\t]+)");
+ Matcher tagMatcher = tagPattern.matcher(txt);
+ List<Tag> tags = new ArrayList<>();
+ // TODO: process readonly, private, friends, public
+ while (tagMatcher.find()) {
+ for (int i = 1; i <= tagMatcher.groupCount(); i++) {
+ tags.add(getTag(sql, tagMatcher.group(i), true));
+ }
+ }
+ return tags;
+ }
+ return Collections.emptyList();
+ }
+ public static String toString(List<Tag> tags) {
+ return tags.stream().map(t -> " *" + t.Name)
+ .collect(Collectors.joining());
+ }
}