package com.ejie.ad74a.dao;

import com.ejie.ad74a.model.Dispositivos;
import com.ejie.ad74a.model.Valoraciones;
import com.ejie.ad74a.util.UtilSQL;
import com.ejie.x38.dao.RowNumResultSetExtractor;
import com.ejie.x38.dto.JerarquiaDto;
import com.ejie.x38.dto.TableManager;
import com.ejie.x38.dto.TableManagerJerarquia;
import com.ejie.x38.dto.TableRequestDto;
import com.ejie.x38.dto.TableRowDto;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.dao.support.DataAccessUtils;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.ejie.ad74a.model.DispValoraciones;

/**
 * DispValoracionesDaoImpl generated by UDA, 21-mar-2023 11:41:04.
 * 
 * @author UDA
 */

@Repository
@Transactional
public class DispValoracionesDaoImpl implements DispValoracionesDao {

	public static final String[] ORDER_BY_WHITE_LIST = new String[] { "IDVALORACION09", "IDDISPOSITIVO09",
			"ACEPTADO09" };

	private JdbcTemplate jdbcTemplate;

	/*
	 * ROW_MAPPERS
	 */
	private RowMapper<DispValoraciones> rwMap = new RowMapper<DispValoraciones>() {
		public DispValoraciones mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			return new DispValoraciones(
					new Valoraciones(UtilSQL.getLong(resultSet, "IDVALORACION08"), null, null, null, null, null, null,
							null, null, null, null, null, null, null, null, null, null, null),
					new Dispositivos(UtilSQL.getLong(resultSet, "IDDISPOSITIVO35"), null, null, null, null, null),
					UtilSQL.getInt(resultSet, "ACEPTADO09"));
		}
	};

	private RowMapper<DispValoraciones> rwMapPK = new RowMapper<DispValoraciones>() {
		public DispValoraciones mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			return new DispValoraciones(new Valoraciones(UtilSQL.getLong(resultSet, "IDVALORACION08")),
					new Dispositivos(UtilSQL.getLong(resultSet, "IDDISPOSITIVO35")));
		}
	};

	/**
	 * Rowmapper para Jerarquía
	 *
	 * @param dataSource DataSource
	 * @return
	 */
	private RowMapper<JerarquiaDto<DispValoraciones>> rwMapJerarquia = new RowMapper<JerarquiaDto<DispValoraciones>>() {
		public JerarquiaDto<DispValoraciones> mapRow(ResultSet resultSet, int rowNum) throws SQLException {

			DispValoraciones dispvaloraciones = new DispValoraciones(
					new Valoraciones(UtilSQL.getLong(resultSet, "IDVALORACION08"), null, null, null, null, null, null,
							null, null, null, null, null, null, null, null, null, null, null),
					new Dispositivos(UtilSQL.getLong(resultSet, "IDDISPOSITIVO35"), null, null, null, null, null),
					UtilSQL.getInt(resultSet, "ACEPTADO09"));

			JerarquiaDto<DispValoraciones> jerarquia = new JerarquiaDto<DispValoraciones>();
			jerarquia.setModel(dispvaloraciones);
			jerarquia.setLevel(resultSet.getBigDecimal("LEVEL").intValue());
			jerarquia.setParentNodes(resultSet.getString("PARENTNODES"));
			jerarquia.setIsLeaf(Boolean.parseBoolean(resultSet.getString("ISLEAF")));
			jerarquia.setFilter(Boolean.parseBoolean(resultSet.getString("FILTER")));
			return jerarquia;
		}
	};

	/**
	 * Method use to set the datasource.
	 *
	 * @param dataSource DataSource
	 * @return
	 */
	@Resource
	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}

	/*
	 * OPERACIONES CRUD
	 */

	/**
	 * Inserts a single row in the DispValoraciones table.
	 *
	 * @param dispvaloraciones DispValoraciones
	 * @return DispValoraciones
	 */
	public DispValoraciones add(DispValoraciones dispvaloraciones) {
		String query = "INSERT INTO DISP_VALORACIONES (ID_VALORACION_09, ID_DISPOSITIVO_09, ACEPTADO_09) VALUES (?,?,?)";
		Object ValoracionesIdValoracion08Aux = null;
		if (dispvaloraciones.getValoraciones() != null
				&& dispvaloraciones.getValoraciones().getIdValoracion08() != null) {
			ValoracionesIdValoracion08Aux = dispvaloraciones.getValoraciones().getIdValoracion08();
		}
		Object DispositivosIdDispositivo35Aux = null;
		if (dispvaloraciones.getDispositivos() != null
				&& dispvaloraciones.getDispositivos().getIdDispositivo35() != null) {
			DispositivosIdDispositivo35Aux = dispvaloraciones.getDispositivos().getIdDispositivo35();
		}
		this.jdbcTemplate.update(query, ValoracionesIdValoracion08Aux, DispositivosIdDispositivo35Aux,
				dispvaloraciones.getAceptado09());
		return dispvaloraciones;
	}

	/**
	 * Updates a single row in the DispValoraciones table.
	 *
	 * @param dispvaloraciones DispValoraciones
	 * @return DispValoraciones
	 */
	public DispValoraciones update(DispValoraciones dispvaloraciones) {
		String query = "UPDATE DISP_VALORACIONES SET ACEPTADO_09=? WHERE ID_VALORACION_09=? AND ID_DISPOSITIVO_09=?";
		Object ValoracionesIdValoracion08Aux = null;
		if (dispvaloraciones.getValoraciones() != null
				&& dispvaloraciones.getValoraciones().getIdValoracion08() != null) {
			ValoracionesIdValoracion08Aux = dispvaloraciones.getValoraciones().getIdValoracion08();
		}
		Object DispositivosIdDispositivo35Aux = null;
		if (dispvaloraciones.getDispositivos() != null
				&& dispvaloraciones.getDispositivos().getIdDispositivo35() != null) {
			DispositivosIdDispositivo35Aux = dispvaloraciones.getDispositivos().getIdDispositivo35();
		}
		this.jdbcTemplate.update(query, dispvaloraciones.getAceptado09(), ValoracionesIdValoracion08Aux,
				DispositivosIdDispositivo35Aux);
		return dispvaloraciones;
	}

	/**
	 * Finds a single row in the DispValoraciones table.
	 *
	 * @param dispvaloraciones DispValoraciones
	 * @return DispValoraciones
	 */
	@Transactional(readOnly = true)
	public DispValoraciones find(DispValoraciones dispvaloraciones) {
		String query = "SELECT t1.ID_VALORACION_09 IDVALORACION09, t1.ID_DISPOSITIVO_09 IDDISPOSITIVO09, t1.ACEPTADO_09 ACEPTADO09 FROM DISP_VALORACIONES t1  WHERE t1.ID_VALORACION_09 = ?   AND t1.ID_DISPOSITIVO_09 = ?  ";

		List<DispValoraciones> dispvaloracionesList = this.jdbcTemplate.query(query, this.rwMap,
				dispvaloraciones.getValoraciones().getIdValoracion08(),
				dispvaloraciones.getDispositivos().getIdDispositivo35());
		return (DispValoraciones) DataAccessUtils.uniqueResult(dispvaloracionesList);
	}

	/**
	 * Removes a single row in the DispValoraciones table.
	 *
	 * @param dispvaloraciones DispValoraciones
	 * @return
	 */
	public void remove(DispValoraciones dispvaloraciones) {
		String query = "DELETE FROM DISP_VALORACIONES WHERE ID_VALORACION_09=? AND ID_DISPOSITIVO_09=?";
		this.jdbcTemplate.update(query, dispvaloraciones.getValoraciones().getIdValoracion08(),
				dispvaloraciones.getDispositivos().getIdDispositivo35());
	}

	/**
	 * Exporta Datos al clipBoard
	 *
	 */
	public List<DispValoraciones> getMultiple(DispValoraciones filterDispValoraciones, TableRequestDto tableRequestDto,
			Boolean startsWith) {

		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_VALORACION_09 IDVALORACION09, t1.ID_DISPOSITIVO_09 IDDISPOSITIVO09, t1.ACEPTADO_09 ACEPTADO09");
		query.append(" FROM DISP_VALORACIONES t1  ");
		// Where clause & Params
		Map<String, Object> mapaWhere = this.getWhereLikeMap(filterDispValoraciones, startsWith);
		StringBuilder where = new StringBuilder(query + " WHERE 1=1 ");
		where.append(mapaWhere.get("query"));

		@SuppressWarnings("unchecked")
		List<Object> params = (List<Object>) mapaWhere.get("params");

		StringBuilder sbMultipleSQL = TableManager.getSelectMultipleQuery(tableRequestDto, DispValoraciones.class,
				params, "ID_VALORACION_09 AND ID_DISPOSITIVO_09");
		where.append(sbMultipleSQL);

		return this.jdbcTemplate.query(where.toString(), this.rwMap, params.toArray());
	}

	/**
	 * Finds a list of rows in the DispValoraciones table.
	 *
	 * @param dispvaloraciones DispValoraciones
	 * @param tableRequestDto  TableRequestDto
	 * @return List<DispValoraciones>
	 */
	@Transactional(readOnly = true)
	public List<DispValoraciones> findAll(DispValoraciones dispvaloraciones, TableRequestDto tableRequestDto) {
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_VALORACION_09 IDVALORACION09,t1.ID_DISPOSITIVO_09 IDDISPOSITIVO09,t1.ACEPTADO_09 ACEPTADO09 ");
		query.append("FROM DISP_VALORACIONES t1 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereMap(dispvaloraciones);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhere.get("query"));
		query.append(where);

		List<?> params = (List<?>) mapaWhere.get("params");

		if (tableRequestDto != null) {
			query = TableManager.getPaginationQuery(tableRequestDto, query,
					DispValoracionesDaoImpl.ORDER_BY_WHITE_LIST);
		}

		return (List<DispValoraciones>) this.jdbcTemplate.query(query.toString(), this.rwMap, params.toArray());
	}

	/**
	 * Finds rows in the DispValoraciones table using like.
	 *
	 * @param dispvaloraciones DispValoraciones
	 * @param tableRequestDto  TableRequestDto
	 * @param startsWith       Boolean
	 * @return List<DispValoraciones>
	 */
	@Transactional(readOnly = true)
	public List<DispValoraciones> findAllLike(DispValoraciones dispvaloraciones, TableRequestDto tableRequestDto,
			Boolean startsWith) {
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_VALORACION_09 IDVALORACION09,t1.ID_DISPOSITIVO_09 IDDISPOSITIVO09,t1.ACEPTADO_09 ACEPTADO09 ");
		query.append("FROM DISP_VALORACIONES t1 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(dispvaloraciones, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhere.get("query"));
		query.append(where);

		List<?> params = (List<?>) mapaWhere.get("params");

		if (tableRequestDto != null) {
			query = TableManager.getPaginationQuery(tableRequestDto, query,
					DispValoracionesDaoImpl.ORDER_BY_WHITE_LIST);
		}

		return (List<DispValoraciones>) this.jdbcTemplate.query(query.toString(), this.rwMap, params.toArray());
	}

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Counts rows in the DispValoraciones table.
	 *
	 * @param dispvaloraciones DispValoraciones
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllCount(DispValoraciones dispvaloraciones) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) FROM DISP_VALORACIONES t1 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereMap(dispvaloraciones);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhere.get("query"));
		query.append(where);

		List<?> params = (List<?>) mapaWhere.get("params");

		return this.jdbcTemplate.queryForObject(query.toString(), params.toArray(), Long.class);
	}

	/**
	 * Counts rows in the DispValoraciones table using like.
	 *
	 * @param dispvaloraciones DispValoraciones
	 * @param startsWith       Boolean
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllLikeCount(DispValoraciones dispvaloraciones, Boolean startsWith) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) FROM DISP_VALORACIONES t1 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(dispvaloraciones, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhere.get("query"));
		query.append(where);

		List<?> params = (List<?>) mapaWhere.get("params");

		return this.jdbcTemplate.queryForObject(query.toString(), params.toArray(), Long.class);
	}

	/**
	 * Reorder the data list of DispValoraciones selected for rup_table
	 *
	 * @param dispvaloraciones DispValoraciones
	 * @param tableRequestDto  TableRequestDto
	 * @param startsWith       Boolean
	 * @return List<TableRowDto<DispValoraciones>>
	 */
	@Override
	public List<TableRowDto<DispValoraciones>> reorderSelection(DispValoraciones dispvaloraciones,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_VALORACION_09 IDVALORACION09,t1.ID_DISPOSITIVO_09 IDDISPOSITIVO09,t1.ACEPTADO_09 ACEPTADO09 ");
		// FROM
		query.append("FROM DISP_VALORACIONES t1 ");
		// FILTRADO
		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(dispvaloraciones, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhere.get("query"));
		query.append(where);

		// Parámetros de filtrado
		@SuppressWarnings("unchecked")
		List<Object> filterParamList = (List<Object>) mapaWhere.get("params");

		// SQL para la reordenación
		StringBuilder sbReorderSelectionSQL = TableManager.getReorderQuery(query, tableRequestDto,
				DispValoraciones.class, filterParamList, "IDVALORACION09,IDDISPOSITIVO09");

		return this.jdbcTemplate.query(sbReorderSelectionSQL.toString(),
				new RowNumResultSetExtractor<DispValoraciones>(this.rwMapPK, tableRequestDto),
				filterParamList.toArray());
	}

	/**
	 * Search method for rup_table
	 *
	 * @param filterParams    DispValoraciones
	 * @param searchParams    DispValoraciones
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<TableRowDto<DispValoraciones>>
	 */
	@Override
	public List<TableRowDto<DispValoraciones>> search(DispValoraciones filterParams, DispValoraciones searchParams,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_VALORACION_09 IDVALORACION09,t1.ID_DISPOSITIVO_09 IDDISPOSITIVO09,t1.ACEPTADO_09 ACEPTADO09 ");
		// FROM
		query.append("FROM DISP_VALORACIONES t1 ");
		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");

		// FILTRADO
		Map<String, ?> mapaWhereFilter = this.getWhereLikeMap(filterParams, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhereFilter.get("query"));
		query.append(where);
		// Filter params
		@SuppressWarnings("unchecked")
		List<Object> filterParamList = (List<Object>) mapaWhereFilter.get("params");

		// BUSQUEDA
		Map<String, Object> mapaWhereSearch = this.getWhereLikeMap(searchParams, startsWith);
		String searchSQL = ((StringBuilder) mapaWhereSearch.get("query")).toString();
		// Search params
		@SuppressWarnings("unchecked")
		List<Object> searchParamList = (List<Object>) mapaWhereSearch.get("params");

		// SQL
		StringBuilder sbReorderSelectionSQL = TableManager.getSearchQuery(query, tableRequestDto,
				DispValoraciones.class, filterParamList, searchSQL, searchParamList, from_alias,
				"IDVALORACION09,IDDISPOSITIVO09");

		return this.jdbcTemplate.query(sbReorderSelectionSQL.toString(),
				new RowNumResultSetExtractor<DispValoraciones>(this.rwMapPK, tableRequestDto),
				filterParamList.toArray());
	}

	/**
	 * Remove multiple method for rup_table
	 *
	 * @param tableRequestDto TableRequestDto
	 */
	@Override
	public void removeMultiple(TableRequestDto tableRequestDto) {
		StringBuilder sbRemoveMultipleSQL = TableManager.getRemoveMultipleQuery(tableRequestDto, DispValoraciones.class,
				"DISP_VALORACIONES", new String[] { "IDVALORACION09", "IDDISPOSITIVO09" });

		List<String> selectedIds = tableRequestDto.getMultiselection().getSelectedIds();
		List<String> params = new ArrayList<String>();

		for (String row : selectedIds) {
			String[] parts = row.split(tableRequestDto.getCore().getPkToken());
			for (String param : parts) {
				params.add(param);
			}
		}

		this.jdbcTemplate.update(sbRemoveMultipleSQL.toString(), params.toArray());
	}

	/**
	 * Filter in the hierarchical DispValoraciones table.
	 *
	 * @param filterDispValoraciones DispValoraciones
	 * @param tableRequestDto        TableRequestDto
	 * @return List<JerarquiaDto<DispValoraciones>>
	 */
	@Override
	public List<JerarquiaDto<DispValoraciones>> findAllLikeJerarquia(DispValoraciones filterDispValoraciones,
			TableRequestDto tableRequestDto) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_VALORACION_09 IDVALORACION09,t1.ID_DISPOSITIVO_09 IDDISPOSITIVO09,t1.ACEPTADO_09 ACEPTADO09 ");
		// FROM
		// StringBuilder from = new StringBuilder("FROM DISP_VALORACIONES t1 ");
		List<String> from = new ArrayList<String>();
		from.add("DISP_VALORACIONES");
		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");

		// JOINS TABLAS
		/*
		 * Ejemplo de como indicar joins entre las tablas de la query
		 */
		/*
		 * StringBuilder joins = new StringBuilder("");
		 * joins.append("AND T1.ID=T2.ID_T1");
		 */

		// CONDICIONES (negocio)
		/*
		 * Ejemplo de como incluir condiciones de negocio en la consulta de la jerarquía
		 */
		/*
		 * StringBuilder businessFilters = new StringBuilder(); List<Object>
		 * businessParams = new ArrayList<Object>();
		 * businessFilters.append("   AND t1.EJIE = ?  "); businessParams.add("1");
		 */

		// FILTRO
		Map<String, ?> mapaWhere = this.getWhereLikeMap(filterDispValoraciones, false);

		// JERARQUIA
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		query = TableManagerJerarquia.getQuery(tableRequestDto, query, mapaWhere, "IDVALORACION09,IDDISPOSITIVO09",
				"ID_PADRE", "NOMBRE", from, from_alias);

		/*
		 * Ejemplo de llamada en caso de indicar joins entre tablas y condiciones de
		 * negocio
		 */
//		query = TableManagerJerarquia.getQuery(tableRequestDto, query, mapaWhere, "ID", "ID_PADRE", "NOMBRE", from, from_alias, joins, businessFilters, businessParams);

		// PAGINACION
		if (tableRequestDto != null) {
			query = TableManagerJerarquia.getPaginationQuery(tableRequestDto, query,
					DispValoracionesDaoImpl.ORDER_BY_WHITE_LIST);
		}

		List<?> params = (List<?>) mapaWhere.get("params");
		return this.jdbcTemplate.query(query.toString(), this.rwMapJerarquia, params.toArray());
	}

	/**
	 * Count rows in hierarchy
	 *
	 * @param filterDispValoraciones DispValoraciones
	 * @param tableRequestDto        TableRequestDto
	 * @return Long
	 */
	@Override
	public Long findAllLikeCountJerarquia(DispValoraciones filterDispValoraciones, TableRequestDto tableRequestDto) {
		// FROM
		// StringBuilder from = new StringBuilder("FROM DISP_VALORACIONES t1 ");
		List<String> from = new ArrayList<String>();
		from.add("DISP_VALORACIONES");

		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");

		// JOINS TABLAS
		/*
		 * Ejemplo de como indicar joins entre las tablas de la query
		 */
		/*
		 * StringBuilder joins = new StringBuilder("");
		 * joins.append("AND T1.ID=T2.ID_T1");
		 */

		// CONDICIONES (negocio)
		/*
		 * Ejemplo de como incluir condiciones de negocio en la consulta de la jerarquía
		 */
		/*
		 * StringBuilder businessFilters = new StringBuilder(); List<Object>
		 * businessParams = new ArrayList<Object>();
		 * businessFilters.append("   AND t1.EJIE = ?  "); businessParams.add("1");
		 */

		// FILTRO
		Map<String, ?> mapaWhere = this.getWhereLikeMap(filterDispValoraciones, false);

		// JERARQUIA
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		StringBuilder query = TableManagerJerarquia.getQueryCount(tableRequestDto, mapaWhere,
				"IDVALORACION09,IDDISPOSITIVO09", "ID_PADRE", from, from_alias);

		/*
		 * Ejemplo de llamada en caso de indicar joins entre tablas y condiciones de
		 * negocio
		 */
//		StringBuilder query = TableManagerJerarquia.getQueryCount(tableRequestDto, mapaWhere, "ID", "ID_PADRE", from, from_alias, joins, businessFilters, businessParams);

		List<?> params = (List<?>) mapaWhere.get("params");
		return this.jdbcTemplate.queryForObject(query.toString(), params.toArray(), Long.class);
	}

	/**
	 * Find dependent hierarchical rows
	 *
	 * @param filterDispValoraciones DispValoraciones
	 * @param tableRequestDto        TableRequestDto
	 * @return List<TableRowDto<DispValoraciones>>
	 */
	@Override
	public List<TableRowDto<DispValoraciones>> findAllChild(DispValoraciones filterDispValoraciones,
			TableRequestDto tableRequestDto) {

		// FROM
		// StringBuilder from = new StringBuilder("FROM DISP_VALORACIONES t1 ");
		List<String> from = new ArrayList<String>();
		from.add("DISP_VALORACIONES");

		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");

		// JOINS TABLAS
		/*
		 * Ejemplo de como indicar joins entre las tablas de la query
		 */
		/*
		 * StringBuilder joins = new StringBuilder("");
		 * joins.append("AND T1.ID=T2.ID_T1");
		 */

		// CONDICIONES (negocio)
		/*
		 * Ejemplo de como incluir condiciones de negocio en la consulta de la jerarquía
		 */
		/*
		 * StringBuilder businessFilters = new StringBuilder(); List<Object>
		 * businessParams = new ArrayList<Object>();
		 * businessFilters.append("   AND t1.EJIE = ?  "); businessParams.add("1");
		 */

		// FILTRO
		Map<String, ?> mapaWhere = this.getWhereLikeMap(filterDispValoraciones, false);

		// MULTISELECCION
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		StringBuilder query = TableManagerJerarquia.getQueryChildren(tableRequestDto, mapaWhere,
				"IDVALORACION09,IDDISPOSITIVO09", "ID_PADRE", from, from_alias);

		/*
		 * Ejemplo de llamada en caso de indicar joins entre tablas y condiciones de
		 * negocio
		 */
//		StringBuilder query = TableManagerJerarquia.getQueryChildren(tableRequestDto, mapaWhere, "ID", "ID_PADRE", from, from_alias, joins, businessFilters, businessParams);

		List<?> params = (List<?>) mapaWhere.get("params");

		return this.jdbcTemplate.query(query.toString(),
				new RowNumResultSetExtractor<DispValoraciones>(this.rwMapPK, "IDVALORACION09,IDDISPOSITIVO09"),
				params.toArray());
	}

	/*
	 * MÉTODOS PRIVADOS
	 */

	/**
	 * Returns a map with the needed value to create the conditions to filter by the
	 * DispValoraciones entity
	 *
	 * @param dispvaloraciones DispValoraciones Bean with the criteria values to
	 *                         filter by.
	 * @return Map created with two keys key query stores the sql query syntax key
	 *         params stores the parameter values to be used in the condition
	 *         sentence.
	 */
	// CHECKSTYLE:OFF CyclomaticComplexity - Generación de código de UDA
	private Map<String, ?> getWhereMap(DispValoraciones dispvaloraciones) {

		StringBuilder where = new StringBuilder(DispValoracionesDaoImpl.STRING_BUILDER_INIT);
		List<Object> params = new ArrayList<Object>();

		if (dispvaloraciones != null && dispvaloraciones.getValoraciones().getIdValoracion08() != null) {
			where.append(" AND t1.ID_VALORACION_08 = ?");
			params.add(dispvaloraciones.getValoraciones().getIdValoracion08());
		}
		if (dispvaloraciones != null && dispvaloraciones.getDispositivos().getIdDispositivo35() != null) {
			where.append(" AND t1.ID_DISPOSITIVO_35 = ?");
			params.add(dispvaloraciones.getDispositivos().getIdDispositivo35());
		}
		if (dispvaloraciones != null && dispvaloraciones.getAceptado09() != null) {
			where.append(" AND t1.ACEPTADO_09 = ?");
			params.add(dispvaloraciones.getAceptado09());
		}

		Map<String, Object> mapWhere = new HashMap<String, Object>();
		mapWhere.put("query", where);
		mapWhere.put("params", params);

		return mapWhere;
	}
	// CHECKSTYLE:ON CyclomaticComplexity - Generación de código de UDA

	/**
	 * Returns a map with the needed value to create the conditions to filter by the
	 * DispValoraciones entity
	 *
	 * @param dispvaloraciones DispValoraciones Bean with the criteria values to
	 *                         filter by.
	 * @param startsWith       Boolean
	 * @return Map created with two keys key query stores the sql query syntax key
	 *         params stores the parameter values to be used in the condition
	 *         sentence.
	 */
	// CHECKSTYLE:OFF CyclomaticComplexity - Generación de código de UDA
	private Map<String, Object> getWhereLikeMap(DispValoraciones dispvaloraciones, Boolean startsWith) {

		StringBuilder where = new StringBuilder(DispValoracionesDaoImpl.STRING_BUILDER_INIT);
		List<Object> params = new ArrayList<Object>();

		if (dispvaloraciones != null && dispvaloraciones.getValoraciones().getIdValoracion08() != null) {
			where.append(" AND t1.ID_VALORACION_08 = ?");
			params.add(dispvaloraciones.getValoraciones().getIdValoracion08());
		}
		if (dispvaloraciones != null && dispvaloraciones.getDispositivos().getIdDispositivo35() != null) {
			where.append(" AND t1.ID_DISPOSITIVO_35 = ?");
			params.add(dispvaloraciones.getDispositivos().getIdDispositivo35());
		}
		if (dispvaloraciones != null && dispvaloraciones.getAceptado09() != null) {
			where.append(" AND t1.ACEPTADO_09 = ?");
			params.add(dispvaloraciones.getAceptado09());
		}

		Map<String, Object> mapWhere = new HashMap<String, Object>();
		mapWhere.put("query", where);
		mapWhere.put("params", params);

		return mapWhere;
	}
	// CHECKSTYLE:ON CyclomaticComplexity - Generación de código de UDA

	/**
	 * StringBuilder initilization value
	 */
	public static final int STRING_BUILDER_INIT = 4096;
}
