// Path: src/main/java/com/monkeyk/sos/service/dto/UserFormDto.java
// public class UserFormDto extends UserDto {
//     private static final long serialVersionUID = 7959857016962260738L;
// 
// 
//     private String password;
// 
//     public UserFormDto() {
//     }
// 
// 
//     public Privilege[] getAllPrivileges() {
//         return new Privilege[]{Privilege.MOBILE, Privilege.UNITY};
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public User newUser() {
//         final User user = new User()
//                 .username(getUsername())
//                 .phone(getPhone())
//                 .email(getEmail())
//                 .password(PasswordHandler.encode(getPassword()));
//         user.privileges().addAll(getPrivileges());
//         return user;
//     }
// }
// 
// Path: src/main/java/com/monkeyk/sos/service/dto/UserOverviewDto.java
// public class UserOverviewDto implements Serializable {
//     private static final long serialVersionUID = 2023379587030489248L;
// 
// 
//     private String username;
// 
// 
//     private List<UserDto> userDtos = new ArrayList<>();
// 
// 
//     public UserOverviewDto() {
//     }
// 
//     public int getSize() {
//         return userDtos.size();
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public void setUsername(String username) {
//         this.username = username;
//     }
// 
//     public List<UserDto> getUserDtos() {
//         return userDtos;
//     }
// 
//     public void setUserDtos(List<UserDto> userDtos) {
//         this.userDtos = userDtos;
//     }
// }
// 
// Path: src/main/java/com/monkeyk/sos/service/UserService.java
// public interface UserService extends UserDetailsService {
// 
//     UserJsonDto loadCurrentUserJsonDto();
// 
//     UserOverviewDto loadUserOverviewDto(UserOverviewDto overviewDto);
// 
//     boolean isExistedUsername(String username);
// 
//     String saveUser(UserFormDto formDto);
// }


import com.monkeyk.sos.service.dto.UserFormDto;
import com.monkeyk.sos.service.dto.UserOverviewDto;
import com.monkeyk.sos.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
package com.monkeyk.sos.web.controller;


/**
 * @author Shengzhao Li
 */
@Controller
@RequestMapping("/user/")
public class UserController {


    @Autowired
    private UserService userService;

    @Autowired
    private UserFormDtoValidator validator;

    /**
     * @return View page
     */
    @RequestMapping("overview")
    public String overview(UserOverviewDto overviewDto, Model model) {
        overviewDto = userService.loadUserOverviewDto(overviewDto);
        model.addAttribute("overviewDto", overviewDto);
        return "user_overview";
    }


    @RequestMapping(value = "form/plus", method = RequestMethod.GET)
    public String showForm(Model model) {
// Path: src/main/java/com/monkeyk/sos/service/dto/UserFormDto.java
// public class UserFormDto extends UserDto {
//     private static final long serialVersionUID = 7959857016962260738L;
// 
// 
//     private String password;
// 
//     public UserFormDto() {
//     }
// 
// 
//     public Privilege[] getAllPrivileges() {
//         return new Privilege[]{Privilege.MOBILE, Privilege.UNITY};
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public User newUser() {
//         final User user = new User()
//                 .username(getUsername())
//                 .phone(getPhone())
//                 .email(getEmail())
//                 .password(PasswordHandler.encode(getPassword()));
//         user.privileges().addAll(getPrivileges());
//         return user;
//     }
// }
// 
// Path: src/main/java/com/monkeyk/sos/service/dto/UserOverviewDto.java
// public class UserOverviewDto implements Serializable {
//     private static final long serialVersionUID = 2023379587030489248L;
// 
// 
//     private String username;
// 
// 
//     private List<UserDto> userDtos = new ArrayList<>();
// 
// 
//     public UserOverviewDto() {
//     }
// 
//     public int getSize() {
//         return userDtos.size();
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public void setUsername(String username) {
//         this.username = username;
//     }
// 
//     public List<UserDto> getUserDtos() {
//         return userDtos;
//     }
// 
//     public void setUserDtos(List<UserDto> userDtos) {
//         this.userDtos = userDtos;
//     }
// }
// 
// Path: src/main/java/com/monkeyk/sos/service/UserService.java
// public interface UserService extends UserDetailsService {
// 
//     UserJsonDto loadCurrentUserJsonDto();
// 
//     UserOverviewDto loadUserOverviewDto(UserOverviewDto overviewDto);
// 
//     boolean isExistedUsername(String username);
// 
//     String saveUser(UserFormDto formDto);
// }


// Path: src/main/java/com/monkeyk/sos/web/controller/UserController.java
import com.monkeyk.sos.service.dto.UserFormDto;
import com.monkeyk.sos.service.dto.UserOverviewDto;
import com.monkeyk.sos.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

package com.monkeyk.sos.web.controller;


/**
 * @author Shengzhao Li
 */
@Controller
@RequestMapping("/user/")
public class UserController {


    @Autowired
    private UserService userService;

    @Autowired
    private UserFormDtoValidator validator;

    /**
     * @return View page
     */
    @RequestMapping("overview")
    public String overview(UserOverviewDto overviewDto, Model model) {
        overviewDto = userService.loadUserOverviewDto(overviewDto);
        model.addAttribute("overviewDto", overviewDto);
        return "user_overview";
    }


    @RequestMapping(value = "form/plus", method = RequestMethod.GET)
    public String showForm(Model model) {
        model.addAttribute("formDto", new UserFormDto());