// Path: code/api/src/main/java/ar/edu/itba/tpf/chatterbot/model/Role.java
// @Entity
// public class Role extends VersionablePersistentEntity implements Serializable {
// 
//     private static final long serialVersionUID = 1L;
// 
//     private String roleName = null;
//     private String roleDescription = null;
// 
//     @ManyToMany(fetch = FetchType.EAGER, mappedBy = "roles")
//     private Collection<User> users = null;
// 
//     /**
//      * Crea un nuevo <Role> asignando valores default a todos sus campos.
//      */
//     @SuppressWarnings("unused")
//     private Role() {
//     }
// 
//     /**
//      * Crea un nuevo <code>Role</code> asignando únicamente el nombre y la descripción del mismo.
//      * 
//      * @param roleName Nombre de rol.
//      * @param roleDescription Descripción del rol.
//      */
//     public Role(String roleName, String roleDescription) {
//         this.roleName = roleName;
//         this.roleDescription = roleDescription;
//         this.users = new ArrayList<User>();
//     }
// 
//     /**
//      * @return Nombre del rol.
//      */
//     public String getRoleName() {
//         return roleName;
//     }
// 
//     /**
//      * @param roleName Nombre del rol.
//      * @return this.
//      */
//     public Role setRoleName(String roleName) {
//         this.roleName = roleName;
//         return this;
//     }
// 
//     /**
//      * @return Descripción del rol.
//      */
//     public String getRoleDescription() {
//         return roleDescription;
//     }
// 
//     /**
//      * @param roleDescription Descripción del rol.
//      * @return this.
//      */
//     public Role setRoleDescription(String roleDescription) {
//         this.roleDescription = roleDescription;
//         return this;
//     }
// 
//     /**
//      * @return <code>Collection<User></code> que tienen este rol asignado.
//      */
//     public Collection<User> getUsers() {
//         return users;
//     }
// 
// //    /**
// //     * @param users <code>Collection<User></code> que tienen este rol asignado.
// //     * @return this.
// //     */
// //    @SuppressWarnings("unchecked")
// //    public Role setUsers(Collection<? extends User> users) {
// //        this.users = (Collection<User>) users;
// //        return this;
// //    }
// 
//     
//     public Role addUser(User user){
//         this.users.add(user);
//         return this;
//     }
//     
//     @Override
//     public String toString() {
//         return this.roleDescription;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
// 
//         if (obj instanceof Role) {
//             Role otherRole = (Role) obj;
//             return otherRole.getRoleName().equals(this.roleName);
//         }
// 
//         return super.equals(obj);
//     }
// 
//     @Override
//     public int hashCode() {
//         return this.roleName.hashCode();
//     }
// }
// 
// Path: code/api/src/main/java/ar/edu/itba/tpf/chatterbot/service/UserService.java
// public interface UserService {
// 
//     /**
//      * Almacena un usuario.
//      * 
//      * @param user Usuario que se desea almacenar.
//      */
//     public void persistUser(User user);
//     
//     /**
//      * Almacena un rol.
//      * 
//      * @param role Rol que se desea almacenar.
//      */
//     public void persistRole(Role role);
// 
//     /**
//      * Elimina un usuario.
//      * 
//      * @param user Usuario que se desea eliminar.
//      */
//     public void removeUser(User user);
// 
//     /**
//      * Busca un usuario dado su nombre de usuario.
//      * 
//      * @param username Nombre de usuario del usuario que se desea buscar.
//      * @return Usuario con el nombre de usuario especificado o null en caso de no encontrarlo.
//      */
//     public User getUserByUsername(String username);
// 
//     /**
//      * Obtiene una colección con todos los roles que pueden tener los usuarios.
//      * 
//      * @return Colección de roles que pueden terner asignados los usuarios.
//      */
//     public Collection<Role> getAvailableRoles();
// 
//     /**
//      * Obtiene una colección con todos los usuarios registrados.
//      * 
//      * @return Colección con todos los usuarios registrados.
//      */
//     public Collection<User> getUsers();
// 
//     /**
//      * Obtiene todos los roles que tienen como descripción la indicada.
//      * 
//      * @param roleDescription Descripción de los roles que se quieren obtener.
//      * @return Colección con roles cuya descripción es la especificada.
//      */
//     public Role getRoleByRoleDescription(String roleDescription);
// }


import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import ar.edu.itba.tpf.chatterbot.model.Role;
import ar.edu.itba.tpf.chatterbot.service.UserService;
package ar.edu.itba.tpf.chatterbot.converter;



public class RoleConverter implements Converter {
	
	private UserService userService = null;
	
	public void setUserService(UserService userService) {
		this.userService = userService;
	}

	public Object getAsObject(FacesContext context, UIComponent component, String value) {
// Path: code/api/src/main/java/ar/edu/itba/tpf/chatterbot/model/Role.java
// @Entity
// public class Role extends VersionablePersistentEntity implements Serializable {
// 
//     private static final long serialVersionUID = 1L;
// 
//     private String roleName = null;
//     private String roleDescription = null;
// 
//     @ManyToMany(fetch = FetchType.EAGER, mappedBy = "roles")
//     private Collection<User> users = null;
// 
//     /**
//      * Crea un nuevo <Role> asignando valores default a todos sus campos.
//      */
//     @SuppressWarnings("unused")
//     private Role() {
//     }
// 
//     /**
//      * Crea un nuevo <code>Role</code> asignando únicamente el nombre y la descripción del mismo.
//      * 
//      * @param roleName Nombre de rol.
//      * @param roleDescription Descripción del rol.
//      */
//     public Role(String roleName, String roleDescription) {
//         this.roleName = roleName;
//         this.roleDescription = roleDescription;
//         this.users = new ArrayList<User>();
//     }
// 
//     /**
//      * @return Nombre del rol.
//      */
//     public String getRoleName() {
//         return roleName;
//     }
// 
//     /**
//      * @param roleName Nombre del rol.
//      * @return this.
//      */
//     public Role setRoleName(String roleName) {
//         this.roleName = roleName;
//         return this;
//     }
// 
//     /**
//      * @return Descripción del rol.
//      */
//     public String getRoleDescription() {
//         return roleDescription;
//     }
// 
//     /**
//      * @param roleDescription Descripción del rol.
//      * @return this.
//      */
//     public Role setRoleDescription(String roleDescription) {
//         this.roleDescription = roleDescription;
//         return this;
//     }
// 
//     /**
//      * @return <code>Collection<User></code> que tienen este rol asignado.
//      */
//     public Collection<User> getUsers() {
//         return users;
//     }
// 
// //    /**
// //     * @param users <code>Collection<User></code> que tienen este rol asignado.
// //     * @return this.
// //     */
// //    @SuppressWarnings("unchecked")
// //    public Role setUsers(Collection<? extends User> users) {
// //        this.users = (Collection<User>) users;
// //        return this;
// //    }
// 
//     
//     public Role addUser(User user){
//         this.users.add(user);
//         return this;
//     }
//     
//     @Override
//     public String toString() {
//         return this.roleDescription;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
// 
//         if (obj instanceof Role) {
//             Role otherRole = (Role) obj;
//             return otherRole.getRoleName().equals(this.roleName);
//         }
// 
//         return super.equals(obj);
//     }
// 
//     @Override
//     public int hashCode() {
//         return this.roleName.hashCode();
//     }
// }
// 
// Path: code/api/src/main/java/ar/edu/itba/tpf/chatterbot/service/UserService.java
// public interface UserService {
// 
//     /**
//      * Almacena un usuario.
//      * 
//      * @param user Usuario que se desea almacenar.
//      */
//     public void persistUser(User user);
//     
//     /**
//      * Almacena un rol.
//      * 
//      * @param role Rol que se desea almacenar.
//      */
//     public void persistRole(Role role);
// 
//     /**
//      * Elimina un usuario.
//      * 
//      * @param user Usuario que se desea eliminar.
//      */
//     public void removeUser(User user);
// 
//     /**
//      * Busca un usuario dado su nombre de usuario.
//      * 
//      * @param username Nombre de usuario del usuario que se desea buscar.
//      * @return Usuario con el nombre de usuario especificado o null en caso de no encontrarlo.
//      */
//     public User getUserByUsername(String username);
// 
//     /**
//      * Obtiene una colección con todos los roles que pueden tener los usuarios.
//      * 
//      * @return Colección de roles que pueden terner asignados los usuarios.
//      */
//     public Collection<Role> getAvailableRoles();
// 
//     /**
//      * Obtiene una colección con todos los usuarios registrados.
//      * 
//      * @return Colección con todos los usuarios registrados.
//      */
//     public Collection<User> getUsers();
// 
//     /**
//      * Obtiene todos los roles que tienen como descripción la indicada.
//      * 
//      * @param roleDescription Descripción de los roles que se quieren obtener.
//      * @return Colección con roles cuya descripción es la especificada.
//      */
//     public Role getRoleByRoleDescription(String roleDescription);
// }


// Path: code/web/src/main/java/ar/edu/itba/tpf/chatterbot/converter/RoleConverter.java
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import ar.edu.itba.tpf.chatterbot.model.Role;
import ar.edu.itba.tpf.chatterbot.service.UserService;

package ar.edu.itba.tpf.chatterbot.converter;



public class RoleConverter implements Converter {
	
	private UserService userService = null;
	
	public void setUserService(UserService userService) {
		this.userService = userService;
	}

	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		Role role = userService.getRoleByRoleDescription(value);