示例#1
0
  /**
   * Action para o cadastro de uma metadica em uma disciplina.
   *
   * @param idDisciplina O id da {@code Disciplina}.
   * @return O Result do POST, redirecionando para a página da Disciplina caso o POST tenha sido
   *     concluído com sucesso.
   */
  @Transactional
  @Security.Authenticated(Secured.class)
  public static Result cadastrarMetaDica(long idDisciplina) {
    DynamicForm filledForm = Form.form().bindFromRequest();

    Map<String, String> formMap = filledForm.data();

    String comment = formMap.get("comentario");

    Disciplina disciplina = dao.findByEntityId(Disciplina.class, idDisciplina);
    String userName = session("username");

    if (filledForm.hasErrors()) {
      return disciplinaErro(disciplina);
    } else {
      MetaDica metaDica = new MetaDica(disciplina, userName, comment);

      Map<String, String[]> map = request().body().asFormUrlEncoded();

      String[] checkedDicas = map.get("dica");
      String[] checkedMetaDicas = map.get("metadica");

      if (checkedDicas == null && checkedMetaDicas == null) {
        return disciplinaErro(disciplina);
      }

      if (checkedDicas != null) {
        List<String> listaIdDicas = Arrays.asList(checkedDicas);

        for (String id : listaIdDicas) {
          Long idDica = Long.parseLong(id);

          Dica checkedDica = dao.findByEntityId(Dica.class, idDica);

          if (checkedDica != null) {
            metaDica.addDica(checkedDica);
            checkedDica.addMetaDica(metaDica);
            dao.merge(checkedDica);
          }
        }
      }
      if (checkedMetaDicas != null) {
        List<String> listaIdMetaDicas = Arrays.asList(checkedMetaDicas);

        for (String id : listaIdMetaDicas) {
          Long idMetaDica = Long.parseLong(id);

          MetaDica checkedMetaDica = dao.findByEntityId(MetaDica.class, idMetaDica);

          if (checkedMetaDica != null) {
            metaDica.addMetaDica(checkedMetaDica);
            dao.merge(checkedMetaDica);
          }
        }
      }

      disciplina.addMetaDica(metaDica);

      dao.persist(metaDica);
      dao.merge(disciplina);
      dao.flush();

      return redirect(routes.Application.disciplina(metaDica.getDisciplina().getId()));
    }
  }