/** * Create a comment from the given email. * * @param message * @param target * @throws MessagingException * @throws MailHandlerException * @throws IOException * @throws NoSuchAlgorithmException */ @Transactional public static Comment saveComment(IMAPMessage message, Resource target) throws MessagingException, MailHandlerException, IOException, NoSuchAlgorithmException { User author = IMAPMessageUtil.extractSender(message); if (!AccessControl.isProjectResourceCreatable(author, target.getProject(), target.getType())) { throw new PermissionDenied( cannotCreateMessage(author, target.getProject(), target.getType())); } Content parsedMessage = extractContent(message); Comment comment = makeNewComment(target, author, parsedMessage.body); comment.save(); Map<String, Attachment> relatedAttachments = saveAttachments(parsedMessage.attachments, comment.asResource()); if (new ContentType(parsedMessage.type).match(MimeType.HTML)) { // replace cid with attachments comment.contents = replaceCidWithAttachments(comment.contents, relatedAttachments); comment.update(); } new OriginalEmail(message.getMessageID(), comment.asResource()).save(); // Add the event addEvent(NotificationEvent.forNewComment(comment, author), message.getAllRecipients(), author); return comment; }
/** * 새 댓글 저장 핸들러 * * <p>{@code commentForm}에서 입력값을 꺼내 현재 사용자를 작성자로 설정하고 댓글을 저장한다. 현재 사용자 임시 저장소에 있는 첨부파일을 댓글의 첨부파일로 * 옮긴다. * * @param comment * @param commentForm * @param redirectTo * @param containerUpdater * @return * @throws IOException */ public static Result newComment( Comment comment, Form<? extends Comment> commentForm, Call redirectTo, Callback containerUpdater) throws IOException { if (commentForm.hasErrors()) { flash(Constants.WARNING, "board.comment.empty"); return redirect(redirectTo); } comment.setAuthor(UserApp.currentUser()); containerUpdater.run(); // this updates comment.issue or comment.posting; comment.save(); // Attach all of the files in the current user's temporary storage. Attachment.moveAll(UserApp.currentUser().asResource(), comment.asResource()); return redirect(redirectTo); }
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher dispatcher; Map<Integer, Integer> mapUserId = new TreeMap<>(); Map<Integer, Integer> mapMessageId = new TreeMap<>(); Map<Integer, String> mapMessageBody = new TreeMap<>(); switch (request.getServletPath()) { case "/importar": String url = request.getParameter("url"); Pacote pacote = importFromURL(url); try { // DELETA DADOS DO SERVIDOR PreparedStatement stmt = (new ActiveRecord()) .conn.prepareStatement( "DELETE FROM \"user\" WHERE server_id = " + pacote.id_servidor + ";" + "DELETE FROM \"message\" WHERE server_id = " + pacote.id_servidor + ";" + "DELETE FROM \"comment\" WHERE server_id = " + pacote.id_servidor + ";" + "DELETE FROM \"like\" WHERE server_id = " + pacote.id_servidor + ";"); stmt.execute(); // IMPORTAR // USER User user; for (UsuarioJSON usuario : pacote.usuarios) { user = new User(); user.setLogin(usuario.login + "_" + pacote.id_servidor); user.setName(usuario.nome); user.setBirth(new Date(usuario.nascimento.getTime())); user.setDescription(usuario.descricao); user.setServer_id(pacote.id_servidor); user.setPassword("senha"); user.save(true); mapUserId.put(usuario.id, user.getId()); } // MESSAGE Message message; for (PostJSON post : pacote.posts) { message = new Message(); message.setBody(post.conteudo); message.setMessage_date(new Timestamp(post.data.getTime())); message.setUser_id(mapUserId.get(post.id_usuario)); message.setOriginal_user_id(mapUserId.get(post.id_usuario)); message.setServer_id(pacote.id_servidor); message.save(true); mapMessageId.put(post.id, message.getId()); mapMessageBody.put(post.id, post.conteudo); } // MESSAGE (REPOST) for (RepostJSON post : pacote.reposts) { message = new Message(); message.setBody(mapMessageBody.get(post.id_post)); message.setMessage_date(new Timestamp(post.data.getTime())); message.setUser_id(mapUserId.get(post.id_usuario)); message.setOriginal_user_id(mapUserId.get(post.id_usuario)); message.setOriginal_message_id(mapMessageId.get(post.id_post)); message.setServer_id(pacote.id_servidor); message.save(true); mapMessageId.put(post.id, message.getId()); } // COMMENT Comment comment; for (ComentarioJSON comentario : pacote.comentarios) { comment = new Comment(); comment.setBody(comentario.conteudo); comment.setUser_id(mapUserId.get(comentario.id_usuario)); comment.setMessage_id(mapMessageId.get(comentario.id_post)); comment.setServer_id(pacote.id_servidor); comment.save(); } // LIKE Like like; for (LikeJSON likejson : pacote.likes) { like = new Like(); like.setMessage_id(mapMessageId.get(likejson.id_post)); like.setUser_id(mapUserId.get(likejson.id_usuario)); like.setValue(1); like.setServer_id(pacote.id_servidor); like.save(); } // LIKE (DISLIKE) for (DislikeJSON likejson : pacote.dislikes) { like = new Like(); like.setMessage_id(mapMessageId.get(likejson.id_post)); like.setUser_id(mapUserId.get(likejson.id_usuario)); like.setValue(-1); like.setServer_id(pacote.id_servidor); like.save(); } } catch (SQLException ex) { Logger.getLogger(WebserviceController.class.getName()).log(Level.SEVERE, null, ex); } catch (Exception ex) { Logger.getLogger(WebserviceController.class.getName()).log(Level.SEVERE, null, ex); } try (PrintWriter out = response.getWriter()) { gson.toJson(pacote, out); } // dispatcher = request.getRequestDispatcher("/views/import/index.jsp"); // dispatcher.forward(request, response); break; } }