<repo_name>MaQuiNa1995/WebServiceSimple<file_sep>/src/main/java/es/maquina/webservice/repository/GenericRepositoryImpl.java
package es.maquina.webservice.repository;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;

/**
 * Clase usada para la implementacion de metodos comunes por todos los daos
 * empleando los objetos genericos
 * 
 * @param <M> El tipo genérico
 */
public abstract class GenericRepositoryImpl<M> implements GenericRepository<M> {

    /**
     * El entity manager que será usado por los hijos para poder crear llamadas a
     * base de datos mas complejas que las que hay definidas en esta clase
     */
    @PersistenceContext(name = "MaQuiNaPersistenceUnit")
    protected EntityManager entityManager;

    @Transactional
    @Override
    public M persist(M objetoPersistir) {
	entityManager.persist(objetoPersistir);
	return objetoPersistir;
    }

    @Transactional
    @Override
    public M merge(M objetoUpdatear) {
	entityManager.merge(objetoUpdatear);
	return objetoUpdatear;
    }

}
<file_sep>/src/main/java/es/maquina/webservice/controller/RegistroController.java
package es.maquina.webservice.controller;

import java.util.List;

import es.maquina.webservice.dominio.Respuesta;
import es.maquina.webservice.persistencia.dominio.Registro;

/**
 * Clase encargada de la exposición de 2 endpoints
 * 
 * <li><a href="http://localhost:8080/saludar?nombre=TuNombre">/saludar</a></li>
 * <li><a href="http:localhost:8080/verRegistrados">/verRegistrados</a></li>
 *
 * @author MaQuiNa1995
 */
public interface RegistroController {

    /**
     * Creación de un Endpoint que te saluda si le pasas un parámetro
     *
     * @param String nombre que contiene el nombre de un usuario para saludarle
     * @return String que contiene la cadena de saludo
     */
    Respuesta saludarUsuario(String nombre);

    /**
     * Creación de un Endpoint que devuelve la lista de usuarios registrados
     *
     * @return Mapa que contiene todos los usuarios registrados
     */
    List<Registro> verRegistro();

}<file_sep>/README.md
# WebServiceSimple

para acceder a este web service:

	Sin Parámetros: http://localhost:8080/verRegistrados
	
	Con Parámetros: http://localhost:8080/saludar?nombre=TuNombre
	
		TuNombre = Pon tu nombre (Puedes poner espacios)
<file_sep>/src/main/resources/application.properties
logging.file=Log\\WebService.log<file_sep>/src/main/java/es/maquina/webservice/repository/GenericRepository.java
package es.maquina.webservice.repository;

/**
 * Implementacion generica de capa Repository
 * 
 * @param <M> hace referencia al objeto generico que se va a usar en la clase
 */
public interface GenericRepository<M> {

    /**
     * Método usado para persistir un objeto pasado como parámetro
     * 
     * @param objetoPersistir el objeto a persistir
     * @return la entidad persistida en base de datos
     */
    M persist(M objetoPersistir);

    /**
     * Método usado para mergear un objeto pasado como parámetro
     * 
     * @param objetoUpdatear el objeto a modificar
     * @return the M
     */
    M merge(M objetoUpdatear);

    /**
     * Se obtiene la clase del Repository que se ha usado en el generico
     * 
     * @return clase que usa el repository para la persistencia
     */
    public abstract Class<M> getClassDeM();

}
<file_sep>/src/main/java/es/maquina/webservice/repository/RegistroRepositoryImpl.java
package es.maquina.webservice.repository;

import java.util.List;

import javax.persistence.TypedQuery;

import org.springframework.stereotype.Repository;

import es.maquina.webservice.persistencia.dominio.Registro;

/**
 * Implementacion de la interacción con la tabla {@link #NOMBRE_TABLA}
 * 
 * @author MaQuiNa1995
 *
 */
@Repository("registroRepository")
public class RegistroRepositoryImpl extends GenericRepositoryImpl<Registro> implements RegistroRepository {

    /**
     * Nombre de base de datos a la que acccede este repository
     */
    public static final String NOMBRE_TABLA = "REGISTRO";

    /**
     * Nombre de consulta para encontrar todas las entidades de la tabla
     */
    public static final String FIND_ALL_QUERY = "Registro.findAll";

    /**
     * Nombre de consulta para encontrar todas las entidades de la tabla que tengan
     * X nombre
     */
    public static final String EXISTE_USUARIO = "Registro.findByNombrehola";

    @Override
    public List<Registro> findAll() {

	TypedQuery<Registro> listadoRegistrados = entityManager.createNamedQuery(FIND_ALL_QUERY, Registro.class);

	return listadoRegistrados.getResultList();
    }

    @Override
    public String findByUsuario(String nombreUsuario) {
	TypedQuery<String> listadoRegistrados = entityManager.createNamedQuery(EXISTE_USUARIO, String.class);
	listadoRegistrados.setParameter("nombreUsuario", nombreUsuario);

	String nombre = "";

	List<String> lista = listadoRegistrados.getResultList();

	if (lista.isEmpty() == Boolean.FALSE) {
	    nombre = lista.get(0);
	}

	return nombre;
    }

    @Override
    public Class<Registro> getClassDeM() {
	return Registro.class;
    }

}
