// Path: src/main/java/br/fatea/simplebank/model/domains/SystemUser.java
// @Entity
// @Table(name = "TBL_SYSTEM_USER")
// public class SystemUser {
// 	
// 	@Id
// 	@GeneratedValue(strategy = GenerationType.AUTO)
// 	@Column(name = "SUS_ID")
// 	private Long id;
// 	
// 	@NotNull
// 	@NotEmpty
// 	@Column(name = "SUS_USERNAME", unique=true)
// 	private String username;
// 	
// 	@NotNull
// 	@NotEmpty
// 	@Column(name = "SUS_PASSWORD")
// 	private String password;
// 	
// 	@Version
// 	@Column(name = "SUS_VERSION")
// 	private Integer version;
// 	
// 	@ManyToMany(fetch = FetchType.EAGER)
// 	@JoinTable(name = "TBL_SYSTEM_USER_ROLES", joinColumns = @JoinColumn(name = "SYSTEM_USER", referencedColumnName = "SUS_ID"), inverseJoinColumns = @JoinColumn(name = "SYSTEM_ROLE", referencedColumnName = "SRO_ID"))
// 	private Set<SystemRole> roles;
// 
// 	@Embedded
// 	private IntegrationConfig integrationConfig;
// 	
// 	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 Integer getVersion() {
// 		return version;
// 	}
// 
// 	public void setVersion(Integer version) {
// 		this.version = version;
// 	}
// 
// 	public Set<SystemRole> getRoles() {
// 		return roles;
// 	}
// 
// 	public void setRoles(Set<SystemRole> roles) {
// 		this.roles = roles;
// 	}
// 
// 	public IntegrationConfig getIntegrationConfig() {
// 		return integrationConfig;
// 	}
// 
// 	public void setIntegrationConfig(IntegrationConfig integrationConfig) {
// 		this.integrationConfig = integrationConfig;
// 	}
// 
// 	public void encodePassword(BCryptPasswordEncoder encoder) {
// 		if(this.password!=null)
// 			this.password = encoder.encode(password);
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		final int prime = 31;
// 		int result = 1;
// 		result = prime * result
// 				+ ((username == null) ? 0 : username.hashCode());
// 		return result;
// 	}
// 
// 	@Override
// 	public boolean equals(Object obj) {
// 		if (this == obj)
// 			return true;
// 		if (obj == null)
// 			return false;
// 		if (getClass() != obj.getClass())
// 			return false;
// 		SystemUser other = (SystemUser) obj;
// 		if (username == null) {
// 			if (other.username != null)
// 				return false;
// 		} else if (!username.equals(other.username))
// 			return false;
// 		return true;
// 	}
// 	
// }
// 
// Path: src/main/java/br/fatea/simplebank/model/repositories/SystemUserRepository.java
// @Repository
// public interface SystemUserRepository extends CrudRepository<SystemUser, Long> {
// 
// 	SystemUser findOneByUsername(String username);
// 	
// }
// 
// Path: src/main/java/br/fatea/simplebank/model/services/SystemUserService.java
// @Service
// @Transactional
// public class SystemUserService {
// 	
// 	@Autowired private BCryptPasswordEncoder encoder;
// 	@Autowired private SystemUserRepository systemUserRepository;
// 	
// 	public void save(SystemUser systemUser){
// 		systemUser.encodePassword(encoder);
// 		if ( systemUser.getId()==null ) {
// 			systemUserRepository.save(systemUser);
// 			
// 		} else {
// 			SystemUser persistedUser = systemUserRepository.findOne(systemUser.getId());
// 			persistedUser.setUsername(systemUser.getUsername());
// 			persistedUser.setPassword(systemUser.getPassword());
// 			
// 		}
// 	}
// 
// }


import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import br.fatea.simplebank.model.domains.SystemUser;
import br.fatea.simplebank.model.repositories.SystemUserRepository;
import br.fatea.simplebank.model.services.SystemUserService;
package br.fatea.simplebank.controllers;




@Controller
@RequestMapping("/users")
public class SystemUserController {

	@Autowired private SystemUserService systemUserService;
	@Autowired private SystemUserRepository systemUserRepository;
	
	@RequestMapping(method=RequestMethod.GET)
	public String list(Model model){
		model.addAttribute("users", systemUserRepository.findAll());
		model.addAttribute("systemUser", new SystemUser());
		return "list_user";
	}

	@RequestMapping(value="/refresh", method=RequestMethod.GET)
// Path: src/main/java/br/fatea/simplebank/model/domains/SystemUser.java
// @Entity
// @Table(name = "TBL_SYSTEM_USER")
// public class SystemUser {
// 	
// 	@Id
// 	@GeneratedValue(strategy = GenerationType.AUTO)
// 	@Column(name = "SUS_ID")
// 	private Long id;
// 	
// 	@NotNull
// 	@NotEmpty
// 	@Column(name = "SUS_USERNAME", unique=true)
// 	private String username;
// 	
// 	@NotNull
// 	@NotEmpty
// 	@Column(name = "SUS_PASSWORD")
// 	private String password;
// 	
// 	@Version
// 	@Column(name = "SUS_VERSION")
// 	private Integer version;
// 	
// 	@ManyToMany(fetch = FetchType.EAGER)
// 	@JoinTable(name = "TBL_SYSTEM_USER_ROLES", joinColumns = @JoinColumn(name = "SYSTEM_USER", referencedColumnName = "SUS_ID"), inverseJoinColumns = @JoinColumn(name = "SYSTEM_ROLE", referencedColumnName = "SRO_ID"))
// 	private Set<SystemRole> roles;
// 
// 	@Embedded
// 	private IntegrationConfig integrationConfig;
// 	
// 	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 Integer getVersion() {
// 		return version;
// 	}
// 
// 	public void setVersion(Integer version) {
// 		this.version = version;
// 	}
// 
// 	public Set<SystemRole> getRoles() {
// 		return roles;
// 	}
// 
// 	public void setRoles(Set<SystemRole> roles) {
// 		this.roles = roles;
// 	}
// 
// 	public IntegrationConfig getIntegrationConfig() {
// 		return integrationConfig;
// 	}
// 
// 	public void setIntegrationConfig(IntegrationConfig integrationConfig) {
// 		this.integrationConfig = integrationConfig;
// 	}
// 
// 	public void encodePassword(BCryptPasswordEncoder encoder) {
// 		if(this.password!=null)
// 			this.password = encoder.encode(password);
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		final int prime = 31;
// 		int result = 1;
// 		result = prime * result
// 				+ ((username == null) ? 0 : username.hashCode());
// 		return result;
// 	}
// 
// 	@Override
// 	public boolean equals(Object obj) {
// 		if (this == obj)
// 			return true;
// 		if (obj == null)
// 			return false;
// 		if (getClass() != obj.getClass())
// 			return false;
// 		SystemUser other = (SystemUser) obj;
// 		if (username == null) {
// 			if (other.username != null)
// 				return false;
// 		} else if (!username.equals(other.username))
// 			return false;
// 		return true;
// 	}
// 	
// }
// 
// Path: src/main/java/br/fatea/simplebank/model/repositories/SystemUserRepository.java
// @Repository
// public interface SystemUserRepository extends CrudRepository<SystemUser, Long> {
// 
// 	SystemUser findOneByUsername(String username);
// 	
// }
// 
// Path: src/main/java/br/fatea/simplebank/model/services/SystemUserService.java
// @Service
// @Transactional
// public class SystemUserService {
// 	
// 	@Autowired private BCryptPasswordEncoder encoder;
// 	@Autowired private SystemUserRepository systemUserRepository;
// 	
// 	public void save(SystemUser systemUser){
// 		systemUser.encodePassword(encoder);
// 		if ( systemUser.getId()==null ) {
// 			systemUserRepository.save(systemUser);
// 			
// 		} else {
// 			SystemUser persistedUser = systemUserRepository.findOne(systemUser.getId());
// 			persistedUser.setUsername(systemUser.getUsername());
// 			persistedUser.setPassword(systemUser.getPassword());
// 			
// 		}
// 	}
// 
// }


// Path: src/main/java/br/fatea/simplebank/controllers/SystemUserController.java
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import br.fatea.simplebank.model.domains.SystemUser;
import br.fatea.simplebank.model.repositories.SystemUserRepository;
import br.fatea.simplebank.model.services.SystemUserService;

package br.fatea.simplebank.controllers;




@Controller
@RequestMapping("/users")
public class SystemUserController {

	@Autowired private SystemUserService systemUserService;
	@Autowired private SystemUserRepository systemUserRepository;
	
	@RequestMapping(method=RequestMethod.GET)
	public String list(Model model){
		model.addAttribute("users", systemUserRepository.findAll());
		model.addAttribute("systemUser", new SystemUser());
		return "list_user";
	}

	@RequestMapping(value="/refresh", method=RequestMethod.GET)
	public String refresh(Model model){