/** * 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())); } }