// Path: src/main/java/org/myazure/weixin/domain/MaUser.java
// @Entity
// @Table(name = "myazure_weixin_user")
// public class MaUser extends BaseEntity {
// 
//     @Id
//     @GeneratedValue(strategy = GenerationType.AUTO)
//     @Column(name = "user_id")
//     private long id;
// 
//     @Column(name = "username", nullable = false, unique = true)
//     private String userName;
// 
//     @Column(name = "password", nullable = false)
//     private String password;
// 
//     @Column(name = "role", nullable = false)
//     @Enumerated(EnumType.STRING)
//     private MaRole role;
// 
//     @Column(name = "active", columnDefinition = "BIT", length = 1)
//     private boolean active = false;
//     
//     public MaUser() {
// 
//     }
// 
//     public MaUser(String userName, String password, MaRole role) {
//         this.userName = userName;
//         this.password = password;
//         this.role = role;
//     }
// 
//     public long getId() {
//         return id;
//     }
// 
//     public void setId(long id) {
//         this.id = id;
//     }
// 
//     public String getUserName() {
//         return userName;
//     }
// 
//     public void setUserName(String userName) {
//         this.userName = userName;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public MaRole getRole() {
//         return role;
//     }
// 
//     public void setRole(MaRole role) {
//         this.role = role;
//     }
// 
// 	public boolean isActive() {
// 		return active;
// 	}
// 
// 	public void setActive(boolean active) {
// 		this.active = active;
// 	}
// }
// 
// Path: src/main/java/org/myazure/weixin/domain/entity/MaUserEntity.java
// public class MaUserEntity {
// 
// 	@NotEmpty
//     private Long id;
// 	
//     @NotEmpty
//     private String userName = "";
// 
//     private String password = "";
// 
//     private String passwordRepeated = "";
// 
//     @NotNull
//     private MaRole role = MaRole.USER;
// 
//     public String getUserName() {
//         return userName;
//     }
// 
//     public void setUserName(String userName) {
//         this.userName = userName;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public String getPasswordRepeated() {
//         return passwordRepeated;
//     }
// 
//     public void setPasswordRepeated(String passwordRepeated) {
//         this.passwordRepeated = passwordRepeated;
//     }
// 
//     public MaRole getRole() {
//         return role;
//     }
// 
//     public void setRole(MaRole role) {
//         this.role = role;
//     }
// 
// 	public Long getId() {
// 		return id;
// 	}
// 
// 	public void setId(Long id) {
// 		this.id = id;
// 	}
// }
// 
// Path: src/main/java/org/myazure/weixin/domain/validator/MaUserFormValidator.java
// @Component
// public class MaUserFormValidator implements Validator {
// 
//     private final MaUserService userService;
// 
//     @Autowired
//     public MaUserFormValidator(MaUserService userService) {
//         this.userService = userService;
//     }
// 
//     @Override
//     public boolean supports(Class<?> clazz) {
//         return clazz.equals(MaUserEntity.class);
//     }
// 
//     @Override
//     public void validate(Object target, Errors errors) {
//         MaUserEntity form = (MaUserEntity) target;
//         validatePasswords(errors, form);
//         validateName(errors, form);
//     }
// 
//     private void validatePasswords(Errors errors, MaUserEntity form) {
//         if (!form.getPassword().equals(form.getPasswordRepeated())) {
//             errors.rejectValue("password", "password", "Passwords do not match");
//         }
//     }
// 
//     private void validateName(Errors errors, MaUserEntity form) {
//         if (userService.getMaUserByName(form.getUserName()) != null) {
//             errors.rejectValue("userName", "userName", "User with this name already exists");
//         }
//     }
// }
// 
// Path: src/main/java/org/myazure/weixin/service/MaUserService.java
// public interface MaUserService {
// 
//     MaUser getMaUserById(long id);
// 
//     MaUser getMaUserByName(String name);
// 
//     Collection<MaUser> getAllMaUsers();
// 
//     MaUser create(MaUserEntity form);
// }


import java.util.List;
import java.util.NoSuchElementException;
import javax.validation.Valid;
import org.myazure.weixin.domain.MaUser;
import org.myazure.weixin.domain.entity.MaUserEntity;
import org.myazure.weixin.domain.validator.MaUserFormValidator;
import org.myazure.weixin.service.MaUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
package org.myazure.weixin.controller;



/**
 * 
 * @author WangZhen
 *
 */
@Controller
public class UserController {

    private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class);
// Path: src/main/java/org/myazure/weixin/domain/MaUser.java
// @Entity
// @Table(name = "myazure_weixin_user")
// public class MaUser extends BaseEntity {
// 
//     @Id
//     @GeneratedValue(strategy = GenerationType.AUTO)
//     @Column(name = "user_id")
//     private long id;
// 
//     @Column(name = "username", nullable = false, unique = true)
//     private String userName;
// 
//     @Column(name = "password", nullable = false)
//     private String password;
// 
//     @Column(name = "role", nullable = false)
//     @Enumerated(EnumType.STRING)
//     private MaRole role;
// 
//     @Column(name = "active", columnDefinition = "BIT", length = 1)
//     private boolean active = false;
//     
//     public MaUser() {
// 
//     }
// 
//     public MaUser(String userName, String password, MaRole role) {
//         this.userName = userName;
//         this.password = password;
//         this.role = role;
//     }
// 
//     public long getId() {
//         return id;
//     }
// 
//     public void setId(long id) {
//         this.id = id;
//     }
// 
//     public String getUserName() {
//         return userName;
//     }
// 
//     public void setUserName(String userName) {
//         this.userName = userName;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public MaRole getRole() {
//         return role;
//     }
// 
//     public void setRole(MaRole role) {
//         this.role = role;
//     }
// 
// 	public boolean isActive() {
// 		return active;
// 	}
// 
// 	public void setActive(boolean active) {
// 		this.active = active;
// 	}
// }
// 
// Path: src/main/java/org/myazure/weixin/domain/entity/MaUserEntity.java
// public class MaUserEntity {
// 
// 	@NotEmpty
//     private Long id;
// 	
//     @NotEmpty
//     private String userName = "";
// 
//     private String password = "";
// 
//     private String passwordRepeated = "";
// 
//     @NotNull
//     private MaRole role = MaRole.USER;
// 
//     public String getUserName() {
//         return userName;
//     }
// 
//     public void setUserName(String userName) {
//         this.userName = userName;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public String getPasswordRepeated() {
//         return passwordRepeated;
//     }
// 
//     public void setPasswordRepeated(String passwordRepeated) {
//         this.passwordRepeated = passwordRepeated;
//     }
// 
//     public MaRole getRole() {
//         return role;
//     }
// 
//     public void setRole(MaRole role) {
//         this.role = role;
//     }
// 
// 	public Long getId() {
// 		return id;
// 	}
// 
// 	public void setId(Long id) {
// 		this.id = id;
// 	}
// }
// 
// Path: src/main/java/org/myazure/weixin/domain/validator/MaUserFormValidator.java
// @Component
// public class MaUserFormValidator implements Validator {
// 
//     private final MaUserService userService;
// 
//     @Autowired
//     public MaUserFormValidator(MaUserService userService) {
//         this.userService = userService;
//     }
// 
//     @Override
//     public boolean supports(Class<?> clazz) {
//         return clazz.equals(MaUserEntity.class);
//     }
// 
//     @Override
//     public void validate(Object target, Errors errors) {
//         MaUserEntity form = (MaUserEntity) target;
//         validatePasswords(errors, form);
//         validateName(errors, form);
//     }
// 
//     private void validatePasswords(Errors errors, MaUserEntity form) {
//         if (!form.getPassword().equals(form.getPasswordRepeated())) {
//             errors.rejectValue("password", "password", "Passwords do not match");
//         }
//     }
// 
//     private void validateName(Errors errors, MaUserEntity form) {
//         if (userService.getMaUserByName(form.getUserName()) != null) {
//             errors.rejectValue("userName", "userName", "User with this name already exists");
//         }
//     }
// }
// 
// Path: src/main/java/org/myazure/weixin/service/MaUserService.java
// public interface MaUserService {
// 
//     MaUser getMaUserById(long id);
// 
//     MaUser getMaUserByName(String name);
// 
//     Collection<MaUser> getAllMaUsers();
// 
//     MaUser create(MaUserEntity form);
// }


// Path: src/main/java/org/myazure/weixin/controller/UserController.java
import java.util.List;
import java.util.NoSuchElementException;
import javax.validation.Valid;
import org.myazure.weixin.domain.MaUser;
import org.myazure.weixin.domain.entity.MaUserEntity;
import org.myazure.weixin.domain.validator.MaUserFormValidator;
import org.myazure.weixin.service.MaUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

package org.myazure.weixin.controller;



/**
 * 
 * @author WangZhen
 *
 */
@Controller
public class UserController {

    private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class);
    private final MaUserService userService;