/*
   * This method will be called on form submission, handling POST request for
   * updating employee in database. It also validates the user input
   */
  @RequestMapping(
      value = {"/edit-{ssn}-employee"},
      method = RequestMethod.POST)
  public String updateEmployee(
      @Valid Employee employee, BindingResult result, ModelMap model, @PathVariable String ssn) {

    if (result.hasErrors()) {
      return "registration";
    }

    if (!service.isEmployeeSsnUnique(employee.getId(), employee.getSsn())) {
      FieldError ssnError =
          new FieldError(
              "employee",
              "ssn",
              messageSource.getMessage(
                  "non.unique.ssn", new String[] {employee.getSsn()}, Locale.getDefault()));
      result.addError(ssnError);
      return "registration";
    }

    service.updateEmployee(employee);

    model.addAttribute("success", "Employee " + employee.getName() + " updated successfully");
    return "success";
  }
 /*
  * This method will delete an employee by it's SSN value.
  */
 @RequestMapping(
     value = {"/delete-{ssn}-employee"},
     method = RequestMethod.GET)
 public String deleteEmployee(@PathVariable String ssn) {
   service.deleteEmployeeBySsn(ssn);
   return "redirect:/list";
 }
 /*
  * This method will provide the medium to update an existing employee.
  */
 @RequestMapping(
     value = {"/edit-{ssn}-employee"},
     method = RequestMethod.GET)
 public String editEmployee(@PathVariable String ssn, ModelMap model) {
   Employee employee = service.findEmployeeBySsn(ssn);
   model.addAttribute("employee", employee);
   model.addAttribute("edit", true);
   return "registration";
 }
  /*
   * This method will list all existing employees.
   */
  @RequestMapping(
      value = {"/", "/list"},
      method = RequestMethod.GET)
  public String listEmployees(ModelMap model) {

    List<Employee> employees = service.findAllEmployees();
    model.addAttribute("employees", employees);
    return "allemployees";
  }