package com.in28minutes.springboot.web.controller; import java.text.SimpleDateFormat; import java.util.Date; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import com.in28minutes.springboot.web.model.Todo; import com.in28minutes.springboot.web.service.TodoRepository; @Controller public class TodoController { @Autowired TodoRepository repository; @InitBinder public void initBinder(WebDataBinder binder) { // Date - dd/MM/yyyy SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); binder.registerCustomEditor(Date.class, new CustomDateEditor( dateFormat, false)); } @RequestMapping(value = "/list-todos", method = RequestMethod.GET) public String showTodos(ModelMap model) { String name = getLoggedInUserName(model); model.put("todos", repository.findByUser(name)); //model.put("todos", service.retrieveTodos(name)); return "list-todos"; } private String getLoggedInUserName(ModelMap model) { Object principal = SecurityContextHolder.getContext() .getAuthentication().getPrincipal(); if (principal instanceof UserDetails) { return ((UserDetails) principal).getUsername(); } return principal.toString(); } @RequestMapping(value = "/add-todo", method = RequestMethod.GET) public String showAddTodoPage(ModelMap model) { model.addAttribute("todo", new Todo(0, getLoggedInUserName(model), "Default Desc", new Date(), false)); return "todo"; } @RequestMapping(value = "/delete-todo", method = RequestMethod.GET) public String deleteTodo(@RequestParam int id) { //if(id==1) //throw new RuntimeException("Something went wrong"); repository.deleteById(id); //service.deleteTodo(id); return "redirect:/list-todos"; } @RequestMapping(value = "/update-todo", method = RequestMethod.GET) public String showUpdateTodoPage(@RequestParam int id, ModelMap model) { Todo todo = repository.findById(id).get(); //Todo todo = service.retrieveTodo(id); model.put("todo", todo); return "todo"; } @RequestMapping(value = "/update-todo", method = RequestMethod.POST) public String updateTodo(ModelMap model, @Valid Todo todo, BindingResult result) { if (result.hasErrors()) { return "todo"; } todo.setUser(getLoggedInUserName(model)); repository.save(todo); //service.updateTodo(todo); return "redirect:/list-todos"; } @RequestMapping(value = "/add-todo", method = RequestMethod.POST) public String addTodo(ModelMap model, @Valid Todo todo, BindingResult result) { if (result.hasErrors()) { return "todo"; } todo.setUser(getLoggedInUserName(model)); repository.save(todo); /*service.addTodo(getLoggedInUserName(model), todo.getDesc(), todo.getTargetDate(), false);*/ return "redirect:/list-todos"; } }