List of usage examples for io.vertx.core.json JsonArray add
public JsonArray add(Object value)
From source file:org.entcore.conversation.service.impl.ConversationRepositoryEvents.java
License:Open Source License
@Override public void deleteGroups(JsonArray groups) { SqlStatementsBuilder builder = new SqlStatementsBuilder(); String setTO = "UPDATE conversation.messages " + "SET " + "\"to\" = \"to\" - ?, " + "\"toName\" = COALESCE(\"toName\", '[]')::jsonb || (?)::jsonb, " + "\"displayNames\" = \"displayNames\" - (? || '$ $' || ? || '$ ') - (? || '$ $' || ? || '$' || ?) " + "WHERE \"to\" @> (?)::jsonb"; String setCC = "UPDATE conversation.messages " + "SET " + "\"cc\" = \"cc\" - ?, " + "\"ccName\" = COALESCE(\"ccName\", '[]')::jsonb || (?)::jsonb, " + "\"displayNames\" = \"displayNames\" - (? || '$ $' || ? || '$ ') - (? || '$ $' || ? || '$' || ?) " + "WHERE \"cc\" @> (?)::jsonb"; for (Object o : groups) { if (!(o instanceof JsonObject)) continue; JsonObject group = (JsonObject) o; JsonArray params = new fr.wseduc.webutils.collections.JsonArray(); params.add(group.getString("group", "")); params.add(new fr.wseduc.webutils.collections.JsonArray().add(group.getString("groupName", "")) .toString());/*from ww w . j a v a 2s . c om*/ params.add(group.getString("group", "")); params.add(group.getString("groupName", "")); params.add(group.getString("group", "")); params.add(group.getString("groupName", "")); params.add(group.getString("groupName", "")); params.add(new fr.wseduc.webutils.collections.JsonArray().add(group.getString("group", "")).toString()); builder.prepared(setTO, params); builder.prepared(setCC, params); } sql.transaction(builder.build(), new Handler<Message<JsonObject>>() { public void handle(Message<JsonObject> event) { if (!"ok".equals(event.body().getString("status"))) { log.error("Error updating delete groups in conversation : " + event.body().encode()); } } }); }
From source file:org.entcore.conversation.service.impl.ConversationRepositoryEvents.java
License:Open Source License
@Override public void deleteUsers(JsonArray users) { JsonArray userIds = new fr.wseduc.webutils.collections.JsonArray(); for (Object o : users) { if (!(o instanceof JsonObject)) continue; userIds.add(((JsonObject) o).getString("id")); }//from w ww . ja va2 s . co m SqlStatementsBuilder builder = new SqlStatementsBuilder(); String unusedAttachments = "WITH unusedAtts AS (" + "SELECT DISTINCT attachment_id AS id FROM conversation.usermessagesattachments uma " + "GROUP BY attachment_id " + "HAVING every(user_id IN " + Sql.listPrepared(userIds.getList()) + ") " + ") SELECT " + "CASE WHEN COUNT(id) = 0 THEN '[]' ELSE json_agg(distinct id) END AS attachmentIds " + "FROM unusedAtts u"; builder.prepared(unusedAttachments, userIds); String deleteFolder = "DELETE FROM conversation.folders f " + "WHERE f.user_id IN " + Sql.listPrepared(userIds.getList()); builder.prepared(deleteFolder, userIds); String deleteUserMessages = "DELETE FROM conversation.usermessages um " + "WHERE um.user_id IN " + Sql.listPrepared(userIds.getList()); builder.prepared(deleteUserMessages, userIds); String setFrom = "UPDATE conversation.messages " + "SET " + "\"from\" = '', " + "\"fromName\" = ?, " + "\"displayNames\" = \"displayNames\" - (? || '$' || ? || '$ $ ') " + "WHERE \"from\" = ?"; String setTO = "UPDATE conversation.messages " + "SET " + "\"to\" = \"to\" - ?, " + "\"toName\" = COALESCE(\"toName\", '[]')::jsonb || (?)::jsonb, " + "\"displayNames\" = \"displayNames\" - (? || '$' || ? || '$ $ ') " + "WHERE \"to\" @> (?)::jsonb"; String setCC = "UPDATE conversation.messages " + "SET " + "\"cc\" = \"cc\" - ?, " + "\"ccName\" = COALESCE(\"ccName\", '[]')::jsonb || (?)::jsonb, " + "\"displayNames\" = \"displayNames\" - (? || '$' || ? || '$ $ ') " + "WHERE \"cc\" @> (?)::jsonb"; for (Object o : users) { if (!(o instanceof JsonObject)) continue; JsonObject user = (JsonObject) o; JsonArray paramsToCc = new fr.wseduc.webutils.collections.JsonArray(); JsonArray paramsFrom = new fr.wseduc.webutils.collections.JsonArray(); paramsToCc.add(user.getString("id", "")); paramsToCc.add(new fr.wseduc.webutils.collections.JsonArray().add(user.getString("displayName", "")) .toString()); paramsToCc.add(user.getString("id", "")); paramsToCc.add(user.getString("displayName", "")); paramsToCc.add(new fr.wseduc.webutils.collections.JsonArray().add(user.getString("id", "")).toString()); paramsFrom.add(user.getString("displayName", "")); paramsFrom.add(user.getString("id", "")); paramsFrom.add(user.getString("displayName", "")); paramsFrom.add(user.getString("id", "")); builder.prepared(setTO, paramsToCc); builder.prepared(setCC, paramsToCc); builder.prepared(setFrom, paramsFrom); } sql.transaction(builder.build(), new DeliveryOptions().setSendTimeout(timeout), SqlResult.validResultsHandler(new Handler<Either<String, JsonArray>>() { public void handle(Either<String, JsonArray> event) { if (event.isLeft()) { log.error("Error deleting conversation data : " + event.left().getValue()); return; } JsonArray results = event.right().getValue(); JsonArray attachmentIds = results.getJsonArray(0).size() > 0 ? new fr.wseduc.webutils.collections.JsonArray( results.getJsonArray(0).getJsonObject(0).getString("attachmentIds", "[]")) : new fr.wseduc.webutils.collections.JsonArray(); for (Object attachmentObj : attachmentIds) { final String attachmentId = (String) attachmentObj; storage.removeFile(attachmentId, new Handler<JsonObject>() { @Override public void handle(JsonObject event) { if (!"ok".equals(event.getString("status"))) { log.error("[" + ConversationRepositoryEvents.class.getSimpleName() + "] Error while tying to delete attachment file (_id: {" + attachmentId + "})"); } } }); } } }, "attachmentIds")); }
From source file:org.entcore.conversation.service.impl.DeleteOrphan.java
License:Open Source License
@Override public void handle(Long event) { final Sql sql = Sql.getInstance(); final SqlStatementsBuilder builder = new SqlStatementsBuilder(); builder.raw(DELETE_ORPHAN_MESSAGE);/* w w w . j a va2s . c o m*/ builder.raw(SELECT_ORPHAN_ATTACHMENT); sql.transaction(builder.build(), new DeliveryOptions().setSendTimeout(TIMEOUT), SqlResult.validResultHandler(1, new Handler<Either<String, JsonArray>>() { @Override public void handle(Either<String, JsonArray> res) { if (res.isRight()) { log.info("Successful delete orphan conversation messages."); final JsonArray attachments = res.right().getValue(); if (attachments != null && attachments.size() > 0) { log.info("Orphan attachments : " + attachments.encode()); JsonArray ids = new fr.wseduc.webutils.collections.JsonArray(); for (Object attObj : attachments) { if (!(attObj instanceof JsonObject)) continue; JsonObject unusedAttachment = (JsonObject) attObj; final String attachmentId = unusedAttachment.getString("orphanid"); ids.add(attachmentId); storage.removeFile(attachmentId, new Handler<JsonObject>() { public void handle(JsonObject event) { if (!"ok".equals(event.getString("status"))) { log.error("Error while tying to delete attachment file (_id: {" + attachmentId + "})"); } } }); } final String deletOrphanAttachments = "delete from conversation.attachments where id IN " + Sql.listPrepared(ids.getList()); sql.prepared(deletOrphanAttachments, ids, new DeliveryOptions().setSendTimeout(TIMEOUT), new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> event) { if (!"ok".equals(event.body().getString("status"))) { log.error("Error deleting orphan attachments : " + event.body().getString("message", "")); } else { log.info("Successful delete orphan conversation attachments."); } } }); } } else { log.error("Orphan conversation error : " + res.left().getValue()); } } })); }
From source file:org.entcore.conversation.service.impl.SqlConversationService.java
License:Open Source License
private void update(String messageId, JsonObject message, UserInfos user, Handler<Either<String, JsonObject>> result) { message.put("date", System.currentTimeMillis()); JsonObject m = Utils.validAndGet(message, UPDATE_DRAFT_FIELDS, UPDATE_DRAFT_REQUIRED_FIELDS); if (validationError(user, m, result, messageId)) return;//w w w.j a v a 2 s. c o m StringBuilder sb = new StringBuilder(); JsonArray values = new fr.wseduc.webutils.collections.JsonArray(); for (String attr : message.fieldNames()) { if ("to".equals(attr) || "cc".equals(attr) || "displayNames".equals(attr)) { sb.append("\"" + attr + "\"").append(" = CAST(? AS JSONB),"); } else { sb.append("\"" + attr + "\"").append(" = ?,"); } values.add(message.getValue(attr)); } if (sb.length() > 0) sb.deleteCharAt(sb.length() - 1); String query = "UPDATE " + messageTable + " SET " + sb.toString() + " " + "WHERE id = ? AND state = ?"; values.add(messageId).add("DRAFT"); sql.prepared(query, values, SqlResult.validUniqueResultHandler(result)); }
From source file:org.entcore.conversation.service.impl.SqlConversationService.java
License:Open Source License
@Override public void list(String folder, String restrain, Boolean unread, UserInfos user, int page, final String searchText, Handler<Either<String, JsonArray>> results) { int skip = page * LIST_LIMIT; JsonArray values = new fr.wseduc.webutils.collections.JsonArray(); String messageConditionUnread = addMessageConditionUnread(folder, values, unread, user); String messagesFields = "m.id, m.subject, m.from, m.state, m.\"fromName\", m.to, m.\"toName\", m.cc, m.\"ccName\", m.\"displayNames\", m.date "; values.add("SENT").add(user.getUserId()); String additionalWhere = addCompleteFolderCondition(values, restrain, unread, folder, user); if (searchText != null) { additionalWhere += " AND m.text_searchable @@ to_tsquery(m.language::regconfig, unaccent(?)) "; values.add(StringUtils.join(checkAndComposeWordFromSearchText(searchText), " & ")); }//w w w . j a v a2s. c om String query = "SELECT " + messagesFields + ", um.unread as unread, " + "CASE when COUNT(distinct r) = 0 THEN false ELSE true END AS response, COUNT(*) OVER() as count, " + "CASE when COUNT(distinct uma) = 0 THEN false ELSE true END AS \"hasAttachment\" " + "FROM " + userMessageTable + " um LEFT JOIN " + userMessageAttachmentTable + " uma ON um.user_id = uma.user_id AND um.message_id = uma.message_id JOIN " + messageTable + " m ON (um.message_id = m.id" + messageConditionUnread + ") LEFT JOIN " + messageTable + " r ON um.message_id = r.parent_id AND r.from = um.user_id AND r.state= ? " + "WHERE um.user_id = ? " + additionalWhere + " " + "GROUP BY m.id, unread " + "ORDER BY m.date DESC LIMIT " + LIST_LIMIT + " OFFSET " + skip; sql.prepared(query, values, SqlResult.validResultHandler(results, "attachments", "to", "toName", "cc", "ccName", "displayNames")); }
From source file:org.entcore.conversation.service.impl.SqlConversationService.java
License:Open Source License
@Override public void listThreads(UserInfos user, int page, Handler<Either<String, JsonArray>> results) { int nbThread = 10; int skip = page * nbThread; int maxMessageInThread = 5; String messagesFields = "m.id, m.parent_id, m.subject, m.body, m.from, m.\"fromName\", m.to, m.\"toName\", m.cc, m.\"ccName\", m.\"displayNames\", m.date, m.thread_id "; JsonArray values = new fr.wseduc.webutils.collections.JsonArray(); values.add(user.getUserId()); values.add(user.getUserId());// w ww.j a va 2 s .c o m String query = " WITH threads AS ( " + " SELECT thread_id from (SELECT DISTINCT ON (m.thread_id) m.thread_id, m.date FROM " + userMessageTable + " um " + " JOIN " + messageTable + " m ON um.message_id = m.id " + " WHERE um.user_id = ? AND m.state = 'SENT' AND um.trashed = false ORDER BY m.thread_id, m.date DESC) a " + " ORDER BY date DESC LIMIT " + nbThread + " OFFSET " + skip + ") " + "SELECT * FROM ( " + "SELECT DISTINCT " + messagesFields + ", um.unread as unread, row_number() OVER (PARTITION BY m.thread_id ORDER BY m.date DESC) as rownum " + "FROM threads, " + userMessageTable + " um JOIN " + messageTable + " m ON um.message_id = m.id " + " WHERE um.user_id = ? and " + " m.thread_id = threads.thread_id AND m.state = 'SENT' AND um.trashed = false " + ") b where rownum <= " + maxMessageInThread + " ORDER BY thread_id, date DESC"; sql.prepared(query, values, SqlResult.validResultHandler(results, "to", "toName", "cc", "ccName", "displayNames")); }
From source file:org.entcore.conversation.service.impl.SqlConversationService.java
License:Open Source License
@Override public void listThreadMessages(String threadId, int page, UserInfos user, Handler<Either<String, JsonArray>> results) { int skip = page * LIST_LIMIT; String messagesFields = "m.id, m.parent_id, m.subject, m.body, m.from, m.\"fromName\", m.to, m.\"toName\", m.cc, m.\"ccName\", m.\"displayNames\", m.date, m.thread_id "; JsonArray values = new fr.wseduc.webutils.collections.JsonArray(); values.add(user.getUserId()); values.add(threadId);/* ww w . jav a2 s .co m*/ String query = "SELECT " + messagesFields + ", um.unread as unread FROM " + userMessageTable + " as um " + " JOIN " + messageTable + " as m ON um.message_id = m.id " + " WHERE um.user_id = ? AND m.thread_id = ? " + " AND m.state = 'SENT' AND um.trashed = false " + " ORDER BY m.date DESC LIMIT " + LIST_LIMIT + " OFFSET " + skip; sql.prepared(query, values, SqlResult.validResultHandler(results, "to", "toName", "cc", "ccName", "displayNames")); }
From source file:org.entcore.conversation.service.impl.SqlConversationService.java
License:Open Source License
@Override public void listThreadMessagesNavigation(String messageId, boolean previous, UserInfos user, Handler<Either<String, JsonArray>> results) { int maxMessageInThread = 15; String messagesFields = "m.id, m.parent_id, m.subject, m.body, m.from, m.\"fromName\", m.to, m.\"toName\", m.cc, m.\"ccName\", m.\"displayNames\", m.date, m.thread_id "; String condition, limit;/*from w w w .ja v a 2 s. co m*/ JsonArray values = new fr.wseduc.webutils.collections.JsonArray(); if (previous) { condition = " m.date < element.date "; limit = " LIMIT " + maxMessageInThread + " OFFSET 0"; } else { condition = " m.date > element.date "; limit = ""; } values.add(messageId); values.add(user.getUserId()); String query = "WITH element AS ( " + " SELECT thread_id, date FROM " + messageTable + " WHERE id = ? ) " + "SELECT " + messagesFields + ", um.unread as unread FROM element, " + userMessageTable + " as um " + " JOIN " + messageTable + " as m ON um.message_id = m.id " + " WHERE um.user_id = ? AND m.thread_id = element.thread_id " + " AND " + condition + " AND m.state = 'SENT' AND um.trashed = false " + " ORDER BY m.date DESC" + limit; sql.prepared(query, values, SqlResult.validResultHandler(results, "to", "toName", "cc", "ccName", "displayNames")); }
From source file:org.entcore.conversation.service.impl.SqlConversationService.java
License:Open Source License
@Override public void trash(List<String> messagesId, UserInfos user, Handler<Either<String, JsonObject>> result) { if (validationParamsError(user, result)) return;/*from www .j a v a 2 s.c o m*/ JsonArray values = new fr.wseduc.webutils.collections.JsonArray(); StringBuilder query = new StringBuilder("UPDATE " + userMessageTable + " " + "SET trashed = true " + "WHERE trashed = false AND user_id = ? AND message_id IN ("); values.add(user.getUserId()); for (String id : messagesId) { query.append("?,"); values.add(id); } if (messagesId.size() > 0) query.deleteCharAt(query.length() - 1); query.append(")"); sql.prepared(query.toString(), values, SqlResult.validUniqueResultHandler(result)); }
From source file:org.entcore.conversation.service.impl.SqlConversationService.java
License:Open Source License
@Override public void restore(List<String> messagesId, UserInfos user, Handler<Either<String, JsonObject>> result) { if (validationParamsError(user, result)) return;//w ww . ja va 2 s. co m JsonArray values = new fr.wseduc.webutils.collections.JsonArray(); StringBuilder query = new StringBuilder("UPDATE " + userMessageTable + " " + "SET trashed = false " + "WHERE trashed = true AND user_id = ? AND message_id IN "); values.add(user.getUserId()); query.append(generateInVars(messagesId, values)); sql.prepared(query.toString(), values, SqlResult.validUniqueResultHandler(result)); }