Esempio n. 1
0
  /**
   * 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;
  }
Esempio n. 2
0
  /**
   * 새 댓글 저장 핸들러
   *
   * <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;
    }
  }