package com.ejie.ad74a.dao;

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.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.ejie.ad74a.model.Alarmas;
import com.ejie.ad74a.model.Direcciones;
import com.ejie.ad74a.model.Llamadas;
import com.ejie.ad74a.model.MaestroSubtpoLlamada;
import com.ejie.ad74a.model.MaestroTipoAlarma;
import com.ejie.ad74a.model.MaestroTipoLlamada;
import com.ejie.ad74a.model.Solicitantes;
import com.ejie.ad74a.model.comun.Municipio;
import com.ejie.ad74a.model.comun.Provincia;
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;

/**
 * AlarmasDaoImpl generated by UDA, 10-jul-2023 9:33:38.
 * 
 * @author UDA
 */

@Repository
@Transactional
public class AlarmasDaoImpl implements AlarmasDao {

	public static final String[] ORDER_BY_WHITE_LIST = new String[] { "IDALARMA24", "IDDISPOSITIVO24", "FALARMA24",
			"IDSOLICITANTE24", "FALTA24", "USUALTA24", "MAESTROTIPOALARMAIDTIPOALARMA48", "MAESTROTIPOALARMADESCES48",
			"MAESTROTIPOALARMADESCEU48", "MAESTROTIPOALARMAFALTA48", "MAESTROTIPOALARMAUSUALTA48",
			"MAESTROTIPOALARMAFMODIF48", "MAESTROTIPOALARMAUSUMODIF48", "LLAMADASIDLLAMADA29", "LLAMADASSENTIDO29",
			"LLAMADASDURACION29", "LLAMADASTIEMPORESPUESTA29", "IDTIPORESOL24", "LLAMADASIDLLAMADAPS29",
			"LLAMADASRESPUESTA29", "LLAMADASFALTA29", "LLAMADASUSUALTA29", "LLAMADASIDTIPOLLAMADA29", "DESCES55",
			"DESCEU55", "LLAMADASIDSUBTIPOLLAMADA29", "DESCES56", "DESCEU56", "IDENTIFICADOR01", "NOMBRE01",
			"APELLIDO101", "APELLIDO201", "DSCPROV", "DSOMUN" };

	private JdbcTemplate jdbcTemplate;

	public static final String SEQUENCE_ALARMA = "SEQ_ALARMAS";

	/*
	 * ROW_MAPPERS
	 */
	private RowMapper<Alarmas> rwMap = new RowMapper<Alarmas>() {
		public Alarmas mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			Alarmas alarmas = new Alarmas(UtilSQL.getLong(resultSet, "IDALARMA24"),
					UtilSQL.getLong(resultSet, "IDDISPOSITIVO24"), resultSet.getDate("FALARMA24"),
					UtilSQL.getLong(resultSet, "IDSOLICITANTE24"), UtilSQL.getInt(resultSet, "IDTIPORESOL24"),
					resultSet.getDate("FALTA24"), resultSet.getString("USUALTA24"),
					new MaestroTipoAlarma(UtilSQL.getLong(resultSet, "MaestroTipoAlarmaIDTIPOALARMA48"),
							resultSet.getString("MaestroTipoAlarmaDESCES48"),
							resultSet.getString("MaestroTipoAlarmaDESCEU48"),
							resultSet.getDate("MaestroTipoAlarmaFALTA48"),
							resultSet.getString("MaestroTipoAlarmaUSUALTA48"),
							resultSet.getDate("MaestroTipoAlarmaFMODIF48"),
							resultSet.getString("MaestroTipoAlarmaUSUMODIF48")),
					new Llamadas(UtilSQL.getLong(resultSet, "LlamadasIDLLAMADA29"),
							UtilSQL.getInt(resultSet, "LlamadasSENTIDO29"), resultSet.getLong("LlamadasDURACION29"),
							resultSet.getLong("LlamadasTIEMPORESPUESTA29"),
							UtilSQL.getLong(resultSet, "LlamadasIDLLAMADAPS29"),
							resultSet.getInt("LlamadasRESPUESTA29"), resultSet.getDate("LlamadasFALTA29"),
							resultSet.getString("LlamadasUSUALTA29"),
							new MaestroTipoLlamada(UtilSQL.getLong(resultSet, "LlamadasIDTIPOLLAMADA29"), null, null,
									null, null, null, null, null, null),
							new MaestroSubtpoLlamada(UtilSQL.getLong(resultSet, "LlamadasIDSUBTIPOLLAMADA29"), null,
									null, null, null, null, null, null, null)));

			Solicitantes solicitantes = new Solicitantes();
			solicitantes.setIdentificador01(resultSet.getString("IDENTIFICADOR01"));
			solicitantes.setNombre01(resultSet.getString("NOMBRE01"));
			solicitantes.setApellido101(resultSet.getString("APELLIDO101"));
			solicitantes.setApellido201(resultSet.getString("APELLIDO201"));
			Direcciones dir = new Direcciones();
			dir.setProvinciaNORA(new Provincia(resultSet.getString("IDPROVINCIA"), resultSet.getString("DSCPROV"),
					resultSet.getString("DSEPROV"), resultSet.getString("AUTONOMIAID")));
			dir.setMunicipioNORA(new Municipio(resultSet.getString("IDMUNICIPIO"), resultSet.getString("DSOMUN"),
					resultSet.getString("IDPROVINCIA")));

			solicitantes.setDirecciones(dir);

			alarmas.setSolicitante(solicitantes);

			alarmas.getLlamadas().getMaestroTipoLlamada().setDescEs55(resultSet.getString("DESCES55"));
			alarmas.getLlamadas().getMaestroTipoLlamada().setDescEu55(resultSet.getString("DESCEU55"));
			alarmas.getLlamadas().getMaestroSubtpoLlamada().setDescEs56(resultSet.getString("DESCES56"));
			alarmas.getLlamadas().getMaestroSubtpoLlamada().setDescEu56(resultSet.getString("DESCEU56"));
			return alarmas;
		}

	};

	private RowMapper<Alarmas> rwMapPK = new RowMapper<Alarmas>() {
		public Alarmas mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			return new Alarmas(UtilSQL.getLong(resultSet, "IDALARMA24"));
		}
	};

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

			Alarmas alarmas = new Alarmas(UtilSQL.getLong(resultSet, "IDALARMA24"),
					UtilSQL.getLong(resultSet, "IDDISPOSITIVO24"), resultSet.getDate("FALARMA24"),
					UtilSQL.getLong(resultSet, "IDSOLICITANTE24"), UtilSQL.getInt(resultSet, "IDTIPORESOL24"),
					resultSet.getDate("FALTA24"), resultSet.getString("USUALTA24"),
					new MaestroTipoAlarma(UtilSQL.getLong(resultSet, "MaestroTipoAlarmaIDTIPOALARMA48"),
							resultSet.getString("MaestroTipoAlarmaDESCES48"),
							resultSet.getString("MaestroTipoAlarmaDESCEU48"),
							resultSet.getDate("MaestroTipoAlarmaFALTA48"),
							resultSet.getString("MaestroTipoAlarmaUSUALTA48"),
							resultSet.getDate("MaestroTipoAlarmaFMODIF48"),
							resultSet.getString("MaestroTipoAlarmaUSUMODIF48")),
					new Llamadas(UtilSQL.getLong(resultSet, "LlamadasIDLLAMADA29"),
							resultSet.getInt("LlamadasSENTIDO29"), resultSet.getLong("LlamadasDURACION29"),
							resultSet.getLong("LlamadasTIEMPORESPUESTA29"),
							UtilSQL.getLong(resultSet, "LlamadasIDLLAMADAPS29"),
							resultSet.getInt("LlamadasRESPUESTA29"), resultSet.getDate("LlamadasFALTA29"),
							resultSet.getString("LlamadasUSUALTA29"),
							new MaestroTipoLlamada(UtilSQL.getLong(resultSet, "LlamadasIDTIPOLLAMADA29"), null, null,
									null, null, null, null, null, null),
							new MaestroSubtpoLlamada(UtilSQL.getLong(resultSet, "LlamadasIDSUBTIPOLLAMADA29"), null,
									null, null, null, null, null, null, null)));

			JerarquiaDto<Alarmas> jerarquia = new JerarquiaDto<Alarmas>();
			jerarquia.setModel(alarmas);
			jerarquia.setLevel(UtilSQL.getLong(resultSet, "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 Alarmas table.
	 *
	 * @param alarmas Alarmas
	 * @return Alarmas
	 */
	public Alarmas add(Alarmas alarmas) {
//		String query = "INSERT INTO ALARMAS (ID_ALARMA_24, ID_TIPO_ALARMA_24, ID_LLAMADA_24, ID_DISPOSITIVO_24, F_ALARMA_24, ID_SOLICITANTE_24, ID_TIPO_RESOL_24, F_ALTA_24, USU_ALTA_24) VALUES (?,?,?,?,?,?,?,?,?)";
//		Object getMaestroTipoAlarmaIdTipoAlarma48Aux = null;
//		if (alarmas.getMaestroTipoAlarma() != null && alarmas.getMaestroTipoAlarma().getIdTipoAlarma48() != null) {
//			getMaestroTipoAlarmaIdTipoAlarma48Aux = alarmas.getMaestroTipoAlarma().getIdTipoAlarma48();
//		}
//		Object getLlamadasIdLlamada29Aux = null;
//		if (alarmas.getLlamadas() != null && alarmas.getLlamadas().getIdLlamada29() != null) {
//			getLlamadasIdLlamada29Aux = alarmas.getLlamadas().getIdLlamada29();
//		}
//		this.jdbcTemplate.update(query, alarmas.getIdAlarma24(), getMaestroTipoAlarmaIdTipoAlarma48Aux,
//				getLlamadasIdLlamada29Aux, alarmas.getIdDispositivo24(), alarmas.getfAlarma24(),
//				alarmas.getIdSolicitante24(), alarmas.getIdTipoResol24(), alarmas.getFAlta24(), alarmas.getUsuAlta24());
//		return alarmas;

		GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();

		Object getMaestroTipoAlarmaIdTipoAlarma48Aux = null;
		if (alarmas.getMaestroTipoAlarma() != null && alarmas.getMaestroTipoAlarma().getIdTipoAlarma48() != null) {
			getMaestroTipoAlarmaIdTipoAlarma48Aux = alarmas.getMaestroTipoAlarma().getIdTipoAlarma48();
		}
		Object getLlamadasIdLlamada29Aux = null;
		if (alarmas.getLlamadas() != null && alarmas.getLlamadas().getIdLlamada29() != null) {
			getLlamadasIdLlamada29Aux = alarmas.getLlamadas().getIdLlamada29();
		}

		String query = "INSERT INTO ALARMAS (ID_ALARMA_24, ID_TIPO_ALARMA_24, ID_LLAMADA_24, ID_DISPOSITIVO_24, F_ALARMA_24, ID_SOLICITANTE_24, ID_TIPO_RESOL_24, F_ALTA_24, USU_ALTA_24) "
				+ "VALUES (" + SEQUENCE_ALARMA
				+ ".NEXTVAL,:idTipoAlarma,:idLlamada,:idDispositivo,:fAlarma,:idSolicitante,:idTipoResol,:fAlta,:usuAlta)";

		MapSqlParameterSource parameters = new MapSqlParameterSource()
				.addValue("idTipoAlarma", getMaestroTipoAlarmaIdTipoAlarma48Aux)
				.addValue("idLlamada", getLlamadasIdLlamada29Aux)
				.addValue("idDispositivo", alarmas.getIdDispositivo24()).addValue("fAlarma", alarmas.getfAlarma24())
				.addValue("idSolicitante", alarmas.getIdSolicitante24())
				.addValue("idTipoResol", alarmas.getIdTipoResol24()).addValue("fAlta", alarmas.getFAlta24())
				.addValue("usuAlta", alarmas.getUsuAlta24());

		NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
		namedParameterJdbcTemplate.update(query, parameters, generatedKeyHolder, new String[] { "ID_ALARMA_24" });
		alarmas.setIdAlarma24(generatedKeyHolder.getKey().longValue());

		return alarmas;

	}

	/**
	 * Updates a single row in the Alarmas table.
	 *
	 * @param alarmas Alarmas
	 * @return Alarmas
	 */
	public Alarmas update(Alarmas alarmas) {
		String query = "UPDATE ALARMAS SET ID_TIPO_ALARMA_24=?, ID_LLAMADA_24=?, ID_DISPOSITIVO_24=?, F_ALARMA_24=?, ID_SOLICITANTE_24=?, ID_TIPO_RESOL_24=?, F_ALTA_24=?, USU_ALTA_24=? WHERE ID_ALARMA_24=?";
		Object getMaestroTipoAlarmaIdTipoAlarma48Aux = null;
		if (alarmas.getMaestroTipoAlarma() != null && alarmas.getMaestroTipoAlarma().getIdTipoAlarma48() != null) {
			getMaestroTipoAlarmaIdTipoAlarma48Aux = alarmas.getMaestroTipoAlarma().getIdTipoAlarma48();
		}
		Object getLlamadasIdLlamada29Aux = null;
		if (alarmas.getLlamadas() != null && alarmas.getLlamadas().getIdLlamada29() != null) {
			getLlamadasIdLlamada29Aux = alarmas.getLlamadas().getIdLlamada29();
		}
		this.jdbcTemplate.update(query, getMaestroTipoAlarmaIdTipoAlarma48Aux, getLlamadasIdLlamada29Aux,
				alarmas.getIdDispositivo24(), alarmas.getfAlarma24(), alarmas.getIdSolicitante24(),
				alarmas.getIdTipoResol24(), alarmas.getFAlta24(), alarmas.getUsuAlta24(), alarmas.getIdAlarma24());
		return alarmas;
	}

	/**
	 * Finds a single row in the Alarmas table.
	 *
	 * @param alarmas Alarmas
	 * @return Alarmas
	 */
	@Transactional(readOnly = true)
	public Alarmas find(Alarmas alarmas) {
		String query = "SELECT  t1.ID_ALARMA_24 IDALARMA24,t1.ID_DISPOSITIVO_24 IDDISPOSITIVO24,t1.F_ALARMA_24 FALARMA24,t1.ID_SOLICITANTE_24 IDSOLICITANTE24, t4.IDENTIFICADOR_01 IDENTIFICADOR01, t4.NOMBRE_01 NOMBRE01,"
				+ "t4.APELLIDO1_01 APELLIDO101, t4.APELLIDO2_01 APELLIDO201, t1.F_ALTA_24 FALTA24,t1.USU_ALTA_24 USUALTA24,"
				+ "t2.ID_TIPO_ALARMA_48 MAESTROTIPOALARMAIDTIPOALARMA48,t2.DESC_ES_48 MAESTROTIPOALARMADESCES48,t2.DESC_EU_48 MAESTROTIPOALARMADESCEU48,t2.F_ALTA_48 MAESTROTIPOALARMAFALTA48,"
				+ "t2.USU_ALTA_48 MAESTROTIPOALARMAUSUALTA48,t2.F_MODIF_48 MAESTROTIPOALARMAFMODIF48,t2.USU_MODIF_48 MAESTROTIPOALARMAUSUMODIF48,t3.ID_LLAMADA_29 LLAMADASIDLLAMADA29, "
				+ "t3.SENTIDO_29 LLAMADASSENTIDO29,t3.DURACION_29 LLAMADASDURACION29,t3.TIEMPO_RESPUESTA_29 LLAMADASTIEMPORESPUESTA29,t1.ID_TIPO_RESOL_24 IDTIPORESOL24,t3.ID_LLAMADA_PS_29 LLAMADASIDLLAMADAPS29,"
				+ "t3.RESPUESTA_29 LLAMADASRESPUESTA29,t3.F_ALTA_29 LLAMADASFALTA29,t3.USU_ALTA_29 LLAMADASUSUALTA29,t3.ID_TIPO_LLAMADA_29 LLAMADASIDTIPOLLAMADA29, t5.DESC_ES_55 DESCES55, t5.DESC_EU_55 DESCEU55,"
				+ "t3.ID_SUBTIPO_LLAMADA_29 LLAMADASIDSUBTIPOLLAMADA29 , t6.DESC_ES_56 DESCES56, t6.DESC_EU_56 DESCEU56 "
				+ " FROM ALARMAS t1 ,MAESTRO_TIPO_ALARMA t2 ,LLAMADAS t3 ,SOLICITANTES t4 ,MAESTRO_TIPO_LLAMADA t5 ,MAESTRO_SUBTPO_LLAMADA t6 "
				+ "WHERE 1=1 AND t1.ID_TIPO_ALARMA_24= t2.ID_TIPO_ALARMA_48(+) AND t1.ID_LLAMADA_24= t3.ID_LLAMADA_29(+) AND t1.ID_SOLICITANTE_24 = t4.ID_SOLICITANTE_01 AND t5.ID_TIPO_LLAMADA_55=t3.ID_TIPO_LLAMADA_29(+)"
				+ " AND t3.ID_SUBTIPO_LLAMADA_29 = t6.ID_SUBTIPO_LLAMADA_56(+) ";

		List<Alarmas> alarmasList = this.jdbcTemplate.query(query, this.rwMap, alarmas.getIdAlarma24());
		return (Alarmas) DataAccessUtils.uniqueResult(alarmasList);
	}

	/**
	 * Removes a single row in the Alarmas table.
	 *
	 * @param alarmas Alarmas
	 * @return
	 */
	public void remove(Alarmas alarmas) {
		String query = "DELETE FROM ALARMAS WHERE ID_ALARMA_24=?";
		this.jdbcTemplate.update(query, alarmas.getIdAlarma24());
	}

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

		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_ALARMA_24 IDALARMA24,t1.ID_DISPOSITIVO_24 IDDISPOSITIVO24,t1.F_ALARMA_24 FALARMA24,t1.ID_SOLICITANTE_24 IDSOLICITANTE24, t4.IDENTIFICADOR_01 IDENTIFICADOR01, t4.NOMBRE_01 NOMBRE01,"
						+ "t4.APELLIDO1_01 APELLIDO101, t4.APELLIDO2_01 APELLIDO201, t1.F_ALTA_24 FALTA24,t1.USU_ALTA_24 USUALTA24,"
						+ "t2.ID_TIPO_ALARMA_48 MAESTROTIPOALARMAIDTIPOALARMA48,t2.DESC_ES_48 MAESTROTIPOALARMADESCES48,t2.DESC_EU_48 MAESTROTIPOALARMADESCEU48,t2.F_ALTA_48 MAESTROTIPOALARMAFALTA48,"
						+ "t2.USU_ALTA_48 MAESTROTIPOALARMAUSUALTA48,t2.F_MODIF_48 MAESTROTIPOALARMAFMODIF48,t2.USU_MODIF_48 MAESTROTIPOALARMAUSUMODIF48,t3.ID_LLAMADA_29 LLAMADASIDLLAMADA29, "
						+ "t3.SENTIDO_29 LLAMADASSENTIDO29,t3.DURACION_29 LLAMADASDURACION29,t3.TIEMPO_RESPUESTA_29 LLAMADASTIEMPORESPUESTA29,t1.ID_TIPO_RESOL_24 IDTIPORESOL24,t3.ID_LLAMADA_PS_29 LLAMADASIDLLAMADAPS29,"
						+ "t3.RESPUESTA_29 LLAMADASRESPUESTA29,t3.F_ALTA_29 LLAMADASFALTA29,t3.USU_ALTA_29 LLAMADASUSUALTA29,t3.ID_TIPO_LLAMADA_29 LLAMADASIDTIPOLLAMADA29, t5.DESC_ES_55 DESCES55, t5.DESC_EU_55 DESCEU55,"
						+ "t3.ID_SUBTIPO_LLAMADA_29 LLAMADASIDSUBTIPOLLAMADA29 , t6.DESC_ES_56 DESCES56, t6.DESC_EU_56 DESCEU56 ");
		query.append(
				" FROM ALARMAS t1 ,MAESTRO_TIPO_ALARMA t2 ,LLAMADAS t3 ,SOLICITANTES t4 ,MAESTRO_TIPO_LLAMADA t5 ,MAESTRO_SUBTPO_LLAMADA t6 ");
		// Where clause & Params
		Map<String, Object> mapaWhere = this.getWhereLikeMap(filterAlarmas, startsWith);
		StringBuilder where = new StringBuilder(query
				+ "WHERE 1=1 AND t1.ID_TIPO_ALARMA_24= t2.ID_TIPO_ALARMA_48(+) AND t1.ID_LLAMADA_24= t3.ID_LLAMADA_29(+) AND t1.ID_SOLICITANTE_24 = t4.ID_SOLICITANTE_01 AND t5.ID_TIPO_LLAMADA_55=t3.ID_TIPO_LLAMADA_29(+)"
				+ " AND t3.ID_SUBTIPO_LLAMADA_29 = t6.ID_SUBTIPO_LLAMADA_56(+)  ");
		where.append(mapaWhere.get("query"));

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

		StringBuilder sbMultipleSQL = TableManager.getSelectMultipleQuery(tableRequestDto, Alarmas.class, params,
				"ID_ALARMA_24");
		where.append(sbMultipleSQL);

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

	/**
	 * Finds a list of rows in the Alarmas table.
	 *
	 * @param alarmas         Alarmas
	 * @param tableRequestDto TableRequestDto
	 * @return List<Alarmas>
	 */
	@Transactional(readOnly = true)
	public List<Alarmas> findAll(Alarmas alarmas, TableRequestDto tableRequestDto) {
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_ALARMA_24 IDALARMA24,t1.ID_DISPOSITIVO_24 IDDISPOSITIVO24,t1.F_ALARMA_24 FALARMA24,t1.ID_SOLICITANTE_24 IDSOLICITANTE24, t4.IDENTIFICADOR_01 IDENTIFICADOR01, t4.NOMBRE_01 NOMBRE01,"
						+ "t4.APELLIDO1_01 APELLIDO101, t4.APELLIDO2_01 APELLIDO201, t1.F_ALTA_24 FALTA24,t1.USU_ALTA_24 USUALTA24,"
						+ "t2.ID_TIPO_ALARMA_48 MAESTROTIPOALARMAIDTIPOALARMA48,t2.DESC_ES_48 MAESTROTIPOALARMADESCES48,t2.DESC_EU_48 MAESTROTIPOALARMADESCEU48,t2.F_ALTA_48 MAESTROTIPOALARMAFALTA48,"
						+ "t2.USU_ALTA_48 MAESTROTIPOALARMAUSUALTA48,t2.F_MODIF_48 MAESTROTIPOALARMAFMODIF48,t2.USU_MODIF_48 MAESTROTIPOALARMAUSUMODIF48,t3.ID_LLAMADA_29 LLAMADASIDLLAMADA29, "
						+ "t3.SENTIDO_29 LLAMADASSENTIDO29,t3.DURACION_29 LLAMADASDURACION29,t3.TIEMPO_RESPUESTA_29 LLAMADASTIEMPORESPUESTA29,t1.ID_TIPO_RESOL_24 IDTIPORESOL24,t3.ID_LLAMADA_PS_29 LLAMADASIDLLAMADAPS29,"
						+ "t3.RESPUESTA_29 LLAMADASRESPUESTA29,t3.F_ALTA_29 LLAMADASFALTA29,t3.USU_ALTA_29 LLAMADASUSUALTA29,t3.ID_TIPO_LLAMADA_29 LLAMADASIDTIPOLLAMADA29, t5.DESC_ES_55 DESCES55, t5.DESC_EU_55 DESCEU55,"
						+ "t3.ID_SUBTIPO_LLAMADA_29 LLAMADASIDSUBTIPOLLAMADA29 , t6.DESC_ES_56 DESCES56, t6.DESC_EU_56 DESCEU56  ");
		query.append(
				" FROM ALARMAS t1 ,MAESTRO_TIPO_ALARMA t2 ,LLAMADAS t3 ,SOLICITANTES t4 ,MAESTRO_TIPO_LLAMADA t5 ,MAESTRO_SUBTPO_LLAMADA t6 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereMap(alarmas);
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND t1.ID_TIPO_ALARMA_24= t2.ID_TIPO_ALARMA_48(+) AND t1.ID_LLAMADA_24= t3.ID_LLAMADA_29(+) AND t1.ID_SOLICITANTE_24 = t4.ID_SOLICITANTE_01 AND t5.ID_TIPO_LLAMADA_55=t3.ID_TIPO_LLAMADA_29(+)"
						+ " AND t3.ID_SUBTIPO_LLAMADA_29 = t6.ID_SUBTIPO_LLAMADA_56(+)  ");
		where.append(mapaWhere.get("query"));
		query.append(where);

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

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

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

	/**
	 * Finds rows in the Alarmas table using like.
	 *
	 * @param alarmas         Alarmas
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<Alarmas>
	 */
	@Transactional(readOnly = true)
	public List<Alarmas> findAllLike(Alarmas alarmas, TableRequestDto tableRequestDto, Boolean startsWith) {
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_ALARMA_24 IDALARMA24,t1.ID_DISPOSITIVO_24 IDDISPOSITIVO24,t1.F_ALARMA_24 FALARMA24,t1.ID_SOLICITANTE_24 IDSOLICITANTE24, t4.IDENTIFICADOR_01 IDENTIFICADOR01, t4.NOMBRE_01 NOMBRE01,"
						+ "t4.APELLIDO1_01 APELLIDO101, t4.APELLIDO2_01 APELLIDO201, t1.F_ALTA_24 FALTA24,t1.USU_ALTA_24 USUALTA24,"
						+ "t2.ID_TIPO_ALARMA_48 MAESTROTIPOALARMAIDTIPOALARMA48,t2.DESC_ES_48 MAESTROTIPOALARMADESCES48,t2.DESC_EU_48 MAESTROTIPOALARMADESCEU48,t2.F_ALTA_48 MAESTROTIPOALARMAFALTA48,"
						+ "t2.USU_ALTA_48 MAESTROTIPOALARMAUSUALTA48,t2.F_MODIF_48 MAESTROTIPOALARMAFMODIF48,t2.USU_MODIF_48 MAESTROTIPOALARMAUSUMODIF48,t3.ID_LLAMADA_29 LLAMADASIDLLAMADA29, "
						+ "t3.SENTIDO_29 LLAMADASSENTIDO29,t3.DURACION_29 LLAMADASDURACION29,t3.TIEMPO_RESPUESTA_29 LLAMADASTIEMPORESPUESTA29,t1.ID_TIPO_RESOL_24 IDTIPORESOL24,t3.ID_LLAMADA_PS_29 LLAMADASIDLLAMADAPS29,"
						+ "t3.RESPUESTA_29 LLAMADASRESPUESTA29,t3.F_ALTA_29 LLAMADASFALTA29,t3.USU_ALTA_29 LLAMADASUSUALTA29,t3.ID_TIPO_LLAMADA_29 LLAMADASIDTIPOLLAMADA29, t5.DESC_ES_55 DESCES55, t5.DESC_EU_55 DESCEU55,"
						+ "t3.ID_SUBTIPO_LLAMADA_29 LLAMADASIDSUBTIPOLLAMADA29 , t6.DESC_ES_56 DESCES56, t6.DESC_EU_56 DESCEU56, t7.id_localidad_06, t9.ID IDPROVINCIA, t9.AUTONOMIA_ID AUTONOMIAID, t9.ds_c DSCPROV,t9.ds_e DSEPROV, t9.ds_o DSPROV, t8.ID IDMUNICIPIO, t8.DS_O DSOMUN ");

		query.append(" FROM alarmas t1, maestro_tipo_alarma t2, llamadas t3, solicitantes t4, maestro_tipo_llamada t5, "
				+ " maestro_subtpo_llamada t6, direcciones t7, t17_provincia t9, t17_municipio t8 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(alarmas, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1 = 1 "
				+ " AND t1.id_tipo_alarma_24 = t2.id_tipo_alarma_48 (+) "
				+ " AND t1.id_llamada_24 = t3.id_llamada_29 (+)" + " AND t1.id_solicitante_24 = t4.id_solicitante_01 "
				+ " AND t3.id_tipo_llamada_29 = t5.id_tipo_llamada_55 (+) "
				+ " AND t3.id_subtipo_llamada_29 = t6.id_subtipo_llamada_56 (+) "
				+ " AND t4.id_direccion_01 = t7.id_direccion_06 AND t8.provincia_id = t7.id_provincia_06 AND t8.id = t7.id_municipio_06 "
				+ " AND t9.id = t7.id_provincia_06 AND t9.id = t8.provincia_id ");
		where.append(mapaWhere.get("query"));
		query.append(where);

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

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

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

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Counts rows in the Alarmas table.
	 *
	 * @param alarmas Alarmas
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllCount(Alarmas alarmas) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) FROM ALARMAS t1 "
				+ "LEFT JOIN maestro_tipo_alarma t2 ON t1.id_tipo_alarma_24 = t2.id_tipo_alarma_48"
				+ "LEFT JOIN llamadas t3 ON t1.id_llamada_24 = t3.id_llamada_29 "
				+ "LEFT JOIN solicitantes t4 ON t1.id_solicitante_24 = t4.id_solicitante_01 "
				+ "LEFT JOIN maestro_tipo_llamada t5 ON t3.id_tipo_llamada_29 = t5.id_tipo_llamada_55 "
				+ "LEFT JOIN maestro_subtpo_llamada t6 ON t3.id_subtipo_llamada_29 = t6.id_subtipo_llamada_56 "
				+ "LEFT JOIN direcciones t7 ON t4.id_direccion_01 = t7.id_direccion_06 "
				+ "INNER JOIN t17_provincia t9 ON t9.id = t7.id_provincia_06 "
				+ "INNER JOIN t17_municipio t8 ON t8.provincia_id = t7.id_provincia_06 AND t8.id = t7.id_municipio_06  ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereMap(alarmas);
		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 Alarmas table using like.
	 *
	 * @param alarmas    Alarmas
	 * @param startsWith Boolean
	 * @return Long
	 */
	@Transactional(readOnly = true, timeout = 99999999)
	public Long findAllLikeCount(Alarmas alarmas, Boolean startsWith) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) "
				+ " FROM alarmas t1, maestro_tipo_alarma t2, llamadas t3, solicitantes t4, maestro_tipo_llamada t5, "
				+ " maestro_subtpo_llamada t6, direcciones t7, t17_provincia t9, t17_municipio t8 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(alarmas, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1 = 1 "
				+ " AND t1.id_tipo_alarma_24 = t2.id_tipo_alarma_48 (+) "
				+ " AND t1.id_llamada_24 = t3.id_llamada_29 (+)" + " AND t1.id_solicitante_24 = t4.id_solicitante_01 "
				+ " AND t3.id_tipo_llamada_29 = t5.id_tipo_llamada_55 (+) "
				+ " AND t3.id_subtipo_llamada_29 = t6.id_subtipo_llamada_56 (+) "
				+ " AND t4.id_direccion_01 = t7.id_direccion_06 AND t8.provincia_id = t7.id_provincia_06 AND t8.id = t7.id_municipio_06 "
				+ " AND t9.id = t7.id_provincia_06 AND t9.id = t8.provincia_id ");
		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 Alarmas selected for rup_table
	 *
	 * @param alarmas         Alarmas
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<TableRowDto<Alarmas>>
	 */
	@Override
	public List<TableRowDto<Alarmas>> reorderSelection(Alarmas alarmas, TableRequestDto tableRequestDto,
			Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_ALARMA_24 IDALARMA24,t1.ID_DISPOSITIVO_24 IDDISPOSITIVO24,t1.F_ALARMA_24 FALARMA24,t1.ID_SOLICITANTE_24 IDSOLICITANTE24, t4.IDENTIFICADOR_01 IDENTIFICADOR01, t4.NOMBRE_01 NOMBRE01,"
						+ "t4.APELLIDO1_01 APELLIDO101, t4.APELLIDO2_01 APELLIDO201, t1.F_ALTA_24 FALTA24,t1.USU_ALTA_24 USUALTA24,"
						+ "t2.ID_TIPO_ALARMA_48 MAESTROTIPOALARMAIDTIPOALARMA48,t2.DESC_ES_48 MAESTROTIPOALARMADESCES48,t2.DESC_EU_48 MAESTROTIPOALARMADESCEU48,t2.F_ALTA_48 MAESTROTIPOALARMAFALTA48,"
						+ "t2.USU_ALTA_48 MAESTROTIPOALARMAUSUALTA48,t2.F_MODIF_48 MAESTROTIPOALARMAFMODIF48,t2.USU_MODIF_48 MAESTROTIPOALARMAUSUMODIF48,t3.ID_LLAMADA_29 LLAMADASIDLLAMADA29, "
						+ "t3.SENTIDO_29 LLAMADASSENTIDO29,t3.DURACION_29 LLAMADASDURACION29,t3.TIEMPO_RESPUESTA_29 LLAMADASTIEMPORESPUESTA29,t1.ID_TIPO_RESOL_24 IDTIPORESOL24,t3.ID_LLAMADA_PS_29 LLAMADASIDLLAMADAPS29,"
						+ "t3.RESPUESTA_29 LLAMADASRESPUESTA29,t3.F_ALTA_29 LLAMADASFALTA29,t3.USU_ALTA_29 LLAMADASUSUALTA29,t3.ID_TIPO_LLAMADA_29 LLAMADASIDTIPOLLAMADA29, t5.DESC_ES_55 DESCES55, t5.DESC_EU_55 DESCEU55,"
						+ "t3.ID_SUBTIPO_LLAMADA_29 LLAMADASIDSUBTIPOLLAMADA29 , t6.DESC_ES_56 DESCES56, t6.DESC_EU_56 DESCEU56  ");
		// FROM
		query.append(
				" FROM ALARMAS t1 ,MAESTRO_TIPO_ALARMA t2 ,LLAMADAS t3 ,SOLICITANTES t4 ,MAESTRO_TIPO_LLAMADA t5 ,MAESTRO_SUBTPO_LLAMADA t6  ");
		// FILTRADO
		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(alarmas, startsWith);
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND t1.ID_TIPO_ALARMA_24= t2.ID_TIPO_ALARMA_48(+) AND t1.ID_LLAMADA_24= t3.ID_LLAMADA_29(+) AND t1.ID_SOLICITANTE_24 = t4.ID_SOLICITANTE_01 AND t5.ID_TIPO_LLAMADA_55=t3.ID_TIPO_LLAMADA_29(+)"
						+ " AND t3.ID_SUBTIPO_LLAMADA_29 = t6.ID_SUBTIPO_LLAMADA_56(+)  ");
		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, Alarmas.class,
				filterParamList, "IDALARMA24");

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

	/**
	 * Search method for rup_table
	 *
	 * @param filterParams    Alarmas
	 * @param searchParams    Alarmas
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<TableRowDto<Alarmas>>
	 */
	@Override
	public List<TableRowDto<Alarmas>> search(Alarmas filterParams, Alarmas searchParams,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_ALARMA_24 IDALARMA24,t1.ID_DISPOSITIVO_24 IDDISPOSITIVO24,t1.F_ALARMA_24 FALARMA24,t1.ID_SOLICITANTE_24 IDSOLICITANTE24, t4.IDENTIFICADOR_01 IDENTIFICADOR01, t4.NOMBRE_01 NOMBRE01,"
						+ "t4.APELLIDO1_01 APELLIDO101, t4.APELLIDO2_01 APELLIDO201, t1.F_ALTA_24 FALTA24,t1.USU_ALTA_24 USUALTA24,"
						+ "t2.ID_TIPO_ALARMA_48 MAESTROTIPOALARMAIDTIPOALARMA48,t2.DESC_ES_48 MAESTROTIPOALARMADESCES48,t2.DESC_EU_48 MAESTROTIPOALARMADESCEU48,t2.F_ALTA_48 MAESTROTIPOALARMAFALTA48,"
						+ "t2.USU_ALTA_48 MAESTROTIPOALARMAUSUALTA48,t2.F_MODIF_48 MAESTROTIPOALARMAFMODIF48,t2.USU_MODIF_48 MAESTROTIPOALARMAUSUMODIF48,t3.ID_LLAMADA_29 LLAMADASIDLLAMADA29, "
						+ "t3.SENTIDO_29 LLAMADASSENTIDO29,t3.DURACION_29 LLAMADASDURACION29,t3.TIEMPO_RESPUESTA_29 LLAMADASTIEMPORESPUESTA29,t1.ID_TIPO_RESOL_24 IDTIPORESOL24,t3.ID_LLAMADA_PS_29 LLAMADASIDLLAMADAPS29,"
						+ "t3.RESPUESTA_29 LLAMADASRESPUESTA29,t3.F_ALTA_29 LLAMADASFALTA29,t3.USU_ALTA_29 LLAMADASUSUALTA29,t3.ID_TIPO_LLAMADA_29 LLAMADASIDTIPOLLAMADA29, t5.DESC_ES_55 DESCES55, t5.DESC_EU_55 DESCEU55,"
						+ "t3.ID_SUBTIPO_LLAMADA_29 LLAMADASIDSUBTIPOLLAMADA29 , t6.DESC_ES_56 DESCES56, t6.DESC_EU_56 DESCEU56 ");
		// FROM
		query.append(
				" FROM ALARMAS t1 ,MAESTRO_TIPO_ALARMA t2 ,LLAMADAS t3 ,SOLICITANTES t4 ,MAESTRO_TIPO_LLAMADA t5 ,MAESTRO_SUBTPO_LLAMADA t6  ");
		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");
		from_alias.add(" t2 ");
		from_alias.add(" t3 ");
		from_alias.add(" t4 ");
		from_alias.add(" t5 ");
		from_alias.add(" t6 ");

		// FILTRADO
		Map<String, ?> mapaWhereFilter = this.getWhereLikeMap(filterParams, startsWith);
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND t1.ID_TIPO_ALARMA_24= t2.ID_TIPO_ALARMA_48(+) AND t1.ID_LLAMADA_24= t3.ID_LLAMADA_29(+) AND t1.ID_SOLICITANTE_24 = t4.ID_SOLICITANTE_01 AND t5.ID_TIPO_LLAMADA_55=t3.ID_TIPO_LLAMADA_29(+)"
						+ " AND t3.ID_SUBTIPO_LLAMADA_29 = t6.ID_SUBTIPO_LLAMADA_56(+)  ");
		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, Alarmas.class,
				filterParamList, searchSQL, searchParamList, from_alias, "IDALARMA24");

		return this.jdbcTemplate.query(sbReorderSelectionSQL.toString(),
				new RowNumResultSetExtractor<Alarmas>(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, Alarmas.class,
				"ALARMAS", new String[] { "IDALARMA24" });

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

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

	/**
	 * Filter in the hierarchical Alarmas table.
	 *
	 * @param filterAlarmas   Alarmas
	 * @param tableRequestDto TableRequestDto
	 * @return List<JerarquiaDto<Alarmas>>
	 */
	@Override
	public List<JerarquiaDto<Alarmas>> findAllLikeJerarquia(Alarmas filterAlarmas, TableRequestDto tableRequestDto) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_ALARMA_24 IDALARMA24,t1.ID_DISPOSITIVO_24 IDDISPOSITIVO24,t1.F_ALARMA_24 FALARMA24,t1.ID_SOLICITANTE_24 IDSOLICITANTE24,t1.F_ALTA_24 FALTA24,t1.USU_ALTA_24 USUALTA24,t2.ID_TIPO_ALARMA_48 MAESTROTIPOALARMAIDTIPOALARMA48,t2.DESC_ES_48 MAESTROTIPOALARMADESCES48,t2.DESC_EU_48 MAESTROTIPOALARMADESCEU48,t2.F_ALTA_48 MAESTROTIPOALARMAFALTA48,t2.USU_ALTA_48 MAESTROTIPOALARMAUSUALTA48,t2.F_MODIF_48 MAESTROTIPOALARMAFMODIF48,t2.USU_MODIF_48 MAESTROTIPOALARMAUSUMODIF48,t3.ID_LLAMADA_29 LLAMADASIDLLAMADA29,t3.SENTIDO_29 LLAMADASSENTIDO29,t3.DURACION_29 LLAMADASDURACION29,t3.TIEMPO_RESPUESTA_29 LLAMADASTIEMPORESPUESTA29,t1.ID_TIPO_RESOL_24 IDTIPORESOL24,t3.ID_LLAMADA_PS_29 LLAMADASIDLLAMADAPS29,t3.RESPUESTA_29 LLAMADASRESPUESTA29,t3.F_ALTA_29 LLAMADASFALTA29,t3.USU_ALTA_29 LLAMADASUSUALTA29,t3.ID_TIPO_LLAMADA_29 LLAMADASIDTIPOLLAMADA29,t3.ID_SUBTIPO_LLAMADA_29 LLAMADASIDSUBTIPOLLAMADA29 ");
		// FROM
		// StringBuilder from = new StringBuilder("FROM ALARMAS t1 ,MAESTRO_TIPO_ALARMA
		// t2 ,LLAMADAS t3 ");
		List<String> from = new ArrayList<String>();
		from.add("ALARMAS");
		from.add("MAESTRO_TIPO_ALARMA");
		from.add("LLAMADAS");
		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");
		from_alias.add(" t2 ");
		from_alias.add(" t3 ");

		// 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(filterAlarmas, false);

		// JERARQUIA
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		query = TableManagerJerarquia.getQuery(tableRequestDto, query, mapaWhere, "IDALARMA24", "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,
					AlarmasDaoImpl.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 filterAlarmas   Alarmas
	 * @param tableRequestDto TableRequestDto
	 * @return Long
	 */
	@Override
	public Long findAllLikeCountJerarquia(Alarmas filterAlarmas, TableRequestDto tableRequestDto) {
		// FROM
		// StringBuilder from = new StringBuilder("FROM ALARMAS t1 ,MAESTRO_TIPO_ALARMA
		// t2 ,LLAMADAS t3 ");
		List<String> from = new ArrayList<String>();
		from.add("ALARMAS");
		from.add("MAESTRO_TIPO_ALARMA");
		from.add("LLAMADAS");

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

		// 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(filterAlarmas, false);

		// JERARQUIA
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		StringBuilder query = TableManagerJerarquia.getQueryCount(tableRequestDto, mapaWhere, "IDALARMA24", "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 filterAlarmas   Alarmas
	 * @param tableRequestDto TableRequestDto
	 * @return List<TableRowDto<Alarmas>>
	 */
	@Override
	public List<TableRowDto<Alarmas>> findAllChild(Alarmas filterAlarmas, TableRequestDto tableRequestDto) {

		// FROM
		// StringBuilder from = new StringBuilder("FROM ALARMAS t1 ,MAESTRO_TIPO_ALARMA
		// t2 ,LLAMADAS t3 ");
		List<String> from = new ArrayList<String>();
		from.add("ALARMAS");
		from.add("MAESTRO_TIPO_ALARMA");
		from.add("LLAMADAS");

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

		// 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(filterAlarmas, false);

		// MULTISELECCION
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		StringBuilder query = TableManagerJerarquia.getQueryChildren(tableRequestDto, mapaWhere, "IDALARMA24",
				"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<Alarmas>(this.rwMapPK, "IDALARMA24"), params.toArray());
	}

	/*
	 * MÉTODOS PRIVADOS
	 */

	/**
	 * Returns a map with the needed value to create the conditions to filter by the
	 * Alarmas entity
	 *
	 * @param alarmas Alarmas 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(Alarmas alarmas) {

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

		if (alarmas != null && alarmas.getIdAlarma24() != null) {
			where.append(" AND t1.ID_ALARMA_24 = ?");
			params.add(alarmas.getIdAlarma24());
		}
		if (alarmas != null && alarmas.getMaestroTipoAlarma() != null
				&& alarmas.getMaestroTipoAlarma().getIdTipoAlarma48() != null) {
			where.append(" AND t2.ID_TIPO_ALARMA_48 = ?");
			params.add(alarmas.getMaestroTipoAlarma().getIdTipoAlarma48());
		}
		if (alarmas != null && alarmas.getMaestroTipoAlarma() != null
				&& alarmas.getMaestroTipoAlarma().getDescEs48() != null) {
			where.append(" AND t2.DESC_ES_48 = ?");
			params.add(alarmas.getMaestroTipoAlarma().getDescEs48());
		}
		if (alarmas != null && alarmas.getMaestroTipoAlarma() != null
				&& alarmas.getMaestroTipoAlarma().getDescEu48() != null) {
			where.append(" AND t2.DESC_EU_48 = ?");
			params.add(alarmas.getMaestroTipoAlarma().getDescEu48());
		}
		if (alarmas != null && alarmas.getMaestroTipoAlarma() != null
				&& alarmas.getMaestroTipoAlarma().getfAlta48() != null) {
			where.append(" AND t2.F_ALTA_48 = ?");
			params.add(alarmas.getMaestroTipoAlarma().getfAlta48());
		}
		if (alarmas != null && alarmas.getMaestroTipoAlarma() != null
				&& alarmas.getMaestroTipoAlarma().getUsuAlta48() != null) {
			where.append(" AND t2.USU_ALTA_48 = ?");
			params.add(alarmas.getMaestroTipoAlarma().getUsuAlta48());
		}
		if (alarmas != null && alarmas.getMaestroTipoAlarma() != null
				&& alarmas.getMaestroTipoAlarma().getfModif48() != null) {
			where.append(" AND t2.F_MODIF_48 = ?");
			params.add(alarmas.getMaestroTipoAlarma().getfModif48());
		}
		if (alarmas != null && alarmas.getMaestroTipoAlarma() != null
				&& alarmas.getMaestroTipoAlarma().getUsuModif48() != null) {
			where.append(" AND t2.USU_MODIF_48 = ?");
			params.add(alarmas.getMaestroTipoAlarma().getUsuModif48());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getIdLlamada29() != null) {
			where.append(" AND t3.ID_LLAMADA_29 = ?");
			params.add(alarmas.getLlamadas().getIdLlamada29());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getMaestroTipoLlamada() != null
				&& alarmas.getLlamadas().getMaestroTipoLlamada().getIdTipoLlamada55() != null) {
			where.append(" AND t3.ID_TIPO_LLAMADA_29 = ?");
			params.add(alarmas.getLlamadas().getMaestroTipoLlamada().getIdTipoLlamada55());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getMaestroTipoLlamada() != null
				&& alarmas.getLlamadas().getMaestroTipoLlamada().getDescEs55() != null) {
			where.append(" AND t5.DESC_ES_55 = ?");
			params.add(alarmas.getLlamadas().getMaestroTipoLlamada().getDescEs55());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getMaestroTipoLlamada() != null
				&& alarmas.getLlamadas().getMaestroTipoLlamada().getDescEu55() != null) {
			where.append(" AND t5.DESC_EU_55 = ?");
			params.add(alarmas.getLlamadas().getMaestroTipoLlamada().getDescEu55());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getMaestroSubtpoLlamada() != null
				&& alarmas.getLlamadas().getMaestroSubtpoLlamada().getIdSubtipoLlamada56() != null) {
			where.append(" AND t3.ID_SUBTIPO_LLAMADA_29 = ?");
			params.add(alarmas.getLlamadas().getMaestroSubtpoLlamada().getIdSubtipoLlamada56());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getMaestroSubtpoLlamada() != null
				&& alarmas.getLlamadas().getMaestroSubtpoLlamada().getDescEs56() != null) {
			where.append(" AND t6.DESC_ES_56 = ?");
			params.add(alarmas.getLlamadas().getMaestroSubtpoLlamada().getDescEs56());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getMaestroSubtpoLlamada() != null
				&& alarmas.getLlamadas().getMaestroSubtpoLlamada().getDescEu56() != null) {
			where.append(" AND t6.DESC_EU_56 = ?");
			params.add(alarmas.getLlamadas().getMaestroSubtpoLlamada().getDescEu56());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getSentido29() != null) {
			where.append(" AND t3.SENTIDO_29 = ?");
			params.add(alarmas.getLlamadas().getSentido29());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getDuracion29() != null) {
			where.append(" AND t3.DURACION_29 = ?");
			params.add(alarmas.getLlamadas().getDuracion29());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getTiempoRespuesta29() != null) {
			where.append(" AND t3.TIEMPO_RESPUESTA_29 = ?");
			params.add(alarmas.getLlamadas().getTiempoRespuesta29());
		}
		if (alarmas != null && alarmas.getIdTipoResol24() != null) {
			where.append(" AND t1.ID_TIPO_RESOL_24 = ?");
			params.add(alarmas.getIdTipoResol24());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getIdLlamadaPs29() != null) {
			where.append(" AND t3.ID_LLAMADA_PS_29 = ?");
			params.add(alarmas.getLlamadas().getIdLlamadaPs29());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getRespuesta29() != null) {
			where.append(" AND t3.RESPUESTA_29 = ?");
			params.add(alarmas.getLlamadas().getRespuesta29());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getfAlta29() != null) {
			where.append(" AND t3.F_ALTA_29 = ?");
			params.add(alarmas.getLlamadas().getfAlta29());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getUsuAlta29() != null) {
			where.append(" AND t3.USU_ALTA_29 = ?");
			params.add(alarmas.getLlamadas().getUsuAlta29());
		}
		if (alarmas != null && alarmas.getIdDispositivo24() != null) {
			where.append(" AND t1.ID_DISPOSITIVO_24 = ?");
			params.add(alarmas.getIdDispositivo24());
		}
		if (alarmas != null && alarmas.getfAlarma24() != null) {
			where.append(" AND t1.F_ALARMA_24 = ?");
			params.add(alarmas.getfAlarma24());
		}
		if (alarmas != null && alarmas.getIdSolicitante24() != null) {
			where.append(" AND t1.ID_SOLICITANTE_24 = ?");
			params.add(alarmas.getIdSolicitante24());
		}
		if (alarmas != null && alarmas.getFAlta24() != null) {
			where.append(" AND t1.F_ALTA_24 = ?");
			params.add(alarmas.getFAlta24());
		}
		if (alarmas != null && alarmas.getUsuAlta24() != null) {
			where.append(" AND t1.USU_ALTA_24 = ?");
			params.add(alarmas.getUsuAlta24());
		}
		if (alarmas != null && alarmas.getfAlarma24Desde() != null) {
			where.append(" AND TRUNC(t1.F_ALARMA_24) > ?");
			params.add(alarmas.getfAlarma24Desde());
		}
		if (alarmas != null && alarmas.getfAlarma24Hasta() != null) {
			where.append(" AND TRUNC(t1.F_ALARMA_24) < ?");
			params.add(alarmas.getfAlarma24Hasta());
		}
		if (alarmas != null && alarmas.getDirecciones() != null && alarmas.getDirecciones().getProvinciaNORA() != null
				&& alarmas.getDirecciones().getProvinciaNORA().getCodProvincia() != null) {
			where.append(" AND t7.ID_PROVINCIA_06 = ?");
			params.add(alarmas.getDirecciones().getProvinciaNORA().getCodProvincia());
		}
		if (alarmas != null && alarmas.getDirecciones() != null && alarmas.getDirecciones().getMunicipioNORA() != null
				&& alarmas.getDirecciones().getMunicipioNORA().getCodMunicipio() != null) {
			where.append(" AND t7.ID_MUNICIPIO_06 = ?");
			params.add(alarmas.getDirecciones().getMunicipioNORA().getCodMunicipio());
		}

		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
	 * Alarmas entity
	 *
	 * @param alarmas    Alarmas 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(Alarmas alarmas, Boolean startsWith) {

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

		if (alarmas != null && alarmas.getIdAlarma24() != null) {
			where.append(" AND t1.ID_ALARMA_24 = ?");
			params.add(alarmas.getIdAlarma24());
		}

		if (alarmas != null && alarmas.getSolicitante() != null
				&& alarmas.getSolicitante().getIdentificador01() != null) {
			where.append(" AND UPPER(t4.IDENTIFICADOR_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(alarmas.getSolicitante().getIdentificador01().toUpperCase() + "%");
			} else {
				params.add("%" + alarmas.getSolicitante().getIdentificador01().toUpperCase() + "%");
			}
		}
		if (alarmas != null && alarmas.getSolicitante() != null && alarmas.getSolicitante().getNombre01() != null) {
			where.append(" AND UPPER(t4.NOMBRE_01) LIKE ? ESCAPE  '\\'");
			params.add("%" + alarmas.getSolicitante().getNombre01().toUpperCase() + "%");
		}
		if (alarmas != null && alarmas.getSolicitante() != null && alarmas.getSolicitante().getApellido101() != null) {
			where.append(" AND UPPER(t4.APELLIDO1_01) LIKE ? ESCAPE  '\\'");
			params.add("%" + alarmas.getSolicitante().getApellido101().toUpperCase() + "%");
		}
		if (alarmas != null && alarmas.getSolicitante() != null && alarmas.getSolicitante().getApellido201() != null) {
			where.append(" AND UPPER(t4.APELLIDO2_01) LIKE ? ESCAPE  '\\'");
			params.add("%" + alarmas.getSolicitante().getApellido201().toUpperCase() + "%");
		}
		if (alarmas != null && alarmas.getMaestroTipoAlarma() != null
				&& alarmas.getMaestroTipoAlarma().getIdTipoAlarma48() != null) {
			where.append(" AND t2.ID_TIPO_ALARMA_48 = ?");
			params.add(alarmas.getMaestroTipoAlarma().getIdTipoAlarma48());
		}
		if (alarmas != null && alarmas.getMaestroTipoAlarma() != null
				&& alarmas.getMaestroTipoAlarma().getDescEs48() != null) {
			where.append(" AND UPPER(t2.DESC_ES_48) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(alarmas.getMaestroTipoAlarma().getDescEs48().toUpperCase() + "%");
			} else {
				params.add("%" + alarmas.getMaestroTipoAlarma().getDescEs48().toUpperCase() + "%");
			}
			where.append(" AND t2.DESC_ES_48 IS NOT NULL");
		}
		if (alarmas != null && alarmas.getMaestroTipoAlarma() != null
				&& alarmas.getMaestroTipoAlarma().getDescEu48() != null) {
			where.append(" AND UPPER(t2.DESC_EU_48) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(alarmas.getMaestroTipoAlarma().getDescEu48().toUpperCase() + "%");
			} else {
				params.add("%" + alarmas.getMaestroTipoAlarma().getDescEu48().toUpperCase() + "%");
			}
			where.append(" AND t2.DESC_EU_48 IS NOT NULL");
		}
		if (alarmas != null && alarmas.getMaestroTipoAlarma() != null
				&& alarmas.getMaestroTipoAlarma().getfAlta48() != null) {
			where.append(" AND t2.F_ALTA_48 = ?");
			params.add(alarmas.getMaestroTipoAlarma().getfAlta48());
		}
		if (alarmas != null && alarmas.getMaestroTipoAlarma() != null
				&& alarmas.getMaestroTipoAlarma().getUsuAlta48() != null) {
			where.append(" AND UPPER(t2.USU_ALTA_48) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(alarmas.getMaestroTipoAlarma().getUsuAlta48().toUpperCase() + "%");
			} else {
				params.add("%" + alarmas.getMaestroTipoAlarma().getUsuAlta48().toUpperCase() + "%");
			}
			where.append(" AND t2.USU_ALTA_48 IS NOT NULL");
		}
		if (alarmas != null && alarmas.getMaestroTipoAlarma() != null
				&& alarmas.getMaestroTipoAlarma().getfModif48() != null) {
			where.append(" AND t2.F_MODIF_48 = ?");
			params.add(alarmas.getMaestroTipoAlarma().getfModif48());
		}
		if (alarmas != null && alarmas.getMaestroTipoAlarma() != null
				&& alarmas.getMaestroTipoAlarma().getUsuModif48() != null) {
			where.append(" AND UPPER(t2.USU_MODIF_48) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(alarmas.getMaestroTipoAlarma().getUsuModif48().toUpperCase() + "%");
			} else {
				params.add("%" + alarmas.getMaestroTipoAlarma().getUsuModif48().toUpperCase() + "%");
			}
			where.append(" AND t2.USU_MODIF_48 IS NOT NULL");
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getIdLlamada29() != null) {
			where.append(" AND t3.ID_LLAMADA_29 = ?");
			params.add(alarmas.getLlamadas().getIdLlamada29());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getMaestroTipoLlamada() != null
				&& alarmas.getLlamadas().getMaestroTipoLlamada().getIdTipoLlamada55() != null) {
			where.append(" AND t3.ID_TIPO_LLAMADA_29 = ?");
			params.add(alarmas.getLlamadas().getMaestroTipoLlamada().getIdTipoLlamada55());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getMaestroTipoLlamada() != null
				&& alarmas.getLlamadas().getMaestroTipoLlamada().getDescEs55() != null) {
			where.append(" AND UPPER(t5.DESC_ES_55) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(alarmas.getLlamadas().getMaestroTipoLlamada().getDescEs55().toUpperCase() + "%");
			} else {
				params.add("%" + alarmas.getLlamadas().getMaestroTipoLlamada().getDescEs55().toUpperCase() + "%");
			}
			where.append(" AND t5.DESC_ES_55 IS NOT NULL");
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getMaestroTipoLlamada() != null
				&& alarmas.getLlamadas().getMaestroTipoLlamada().getDescEu55() != null) {
			where.append(" AND UPPER(t5.DESC_EU_55) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(alarmas.getLlamadas().getMaestroTipoLlamada().getDescEu55().toUpperCase() + "%");
			} else {
				params.add("%" + alarmas.getLlamadas().getMaestroTipoLlamada().getDescEu55().toUpperCase() + "%");
			}
			where.append(" AND t5.DESC_EU_55 IS NOT NULL");
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getMaestroSubtpoLlamada() != null
				&& alarmas.getLlamadas().getMaestroSubtpoLlamada().getIdSubtipoLlamada56() != null) {
			where.append(" AND t3.ID_SUBTIPO_LLAMADA_29 = ?");
			params.add(alarmas.getLlamadas().getMaestroSubtpoLlamada().getIdSubtipoLlamada56());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getMaestroSubtpoLlamada() != null
				&& alarmas.getLlamadas().getMaestroSubtpoLlamada().getDescEs56() != null) {
			where.append(" AND UPPER(t6.DESC_ES_56) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(alarmas.getLlamadas().getMaestroSubtpoLlamada().getDescEs56().toUpperCase() + "%");
			} else {
				params.add("%" + alarmas.getLlamadas().getMaestroSubtpoLlamada().getDescEs56().toUpperCase() + "%");
			}
			where.append(" AND t6.DESC_ES_56 IS NOT NULL");
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getMaestroSubtpoLlamada() != null
				&& alarmas.getLlamadas().getMaestroSubtpoLlamada().getDescEu56() != null) {
			where.append(" AND UPPER(t6.DESC_EU_56) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(alarmas.getLlamadas().getMaestroSubtpoLlamada().getDescEu56().toUpperCase() + "%");
			} else {
				params.add("%" + alarmas.getLlamadas().getMaestroSubtpoLlamada().getDescEu56().toUpperCase() + "%");
			}
			where.append(" AND t6.DESC_EU_56 IS NOT NULL");
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getSentido29() != null) {
			where.append(" AND t3.SENTIDO_29 = ?");
			params.add(alarmas.getLlamadas().getSentido29());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getDuracion29() != null) {
			where.append(" AND t3.DURACION_29 = ?");
			params.add(alarmas.getLlamadas().getDuracion29());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getTiempoRespuesta29() != null) {
			where.append(" AND t3.TIEMPO_RESPUESTA_29 = ?");
			params.add(alarmas.getLlamadas().getTiempoRespuesta29());
		}
		if (alarmas != null && alarmas.getIdTipoResol24() != null) {
			where.append(" AND t1.ID_TIPO_RESOL_24 = ?");
			params.add(alarmas.getIdTipoResol24());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getIdLlamadaPs29() != null) {
			where.append(" AND t3.ID_LLAMADA_PS_29 = ?");
			params.add(alarmas.getLlamadas().getIdLlamadaPs29());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getRespuesta29() != null) {
			where.append(" AND t3.RESPUESTA_29 = ?");
			params.add(alarmas.getLlamadas().getRespuesta29());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getfAlta29() != null) {
			where.append(" AND t3.F_ALTA_29 = ?");
			params.add(alarmas.getLlamadas().getfAlta29());
		}
		if (alarmas != null && alarmas.getLlamadas() != null && alarmas.getLlamadas().getUsuAlta29() != null) {
			where.append(" AND UPPER(t3.USU_ALTA_29) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(alarmas.getLlamadas().getUsuAlta29().toUpperCase() + "%");
			} else {
				params.add("%" + alarmas.getLlamadas().getUsuAlta29().toUpperCase() + "%");
			}
			where.append(" AND t3.USU_ALTA_29 IS NOT NULL");
		}
		if (alarmas != null && alarmas.getIdDispositivo24() != null) {
			where.append(" AND t1.ID_DISPOSITIVO_24 = ?");
			params.add(alarmas.getIdDispositivo24());
		}

		if (alarmas != null && alarmas.getIdSolicitante24() != null) {
			where.append(" AND t1.ID_SOLICITANTE_24 = ?");
			params.add(alarmas.getIdSolicitante24());
		}
		if (alarmas != null && alarmas.getFAlta24() != null) {
			where.append(" AND t1.F_ALTA_24 = ?");
			params.add(alarmas.getFAlta24());
		}
		if (alarmas != null && alarmas.getUsuAlta24() != null) {
			where.append(" AND UPPER(t1.USU_ALTA_24) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(alarmas.getUsuAlta24().toUpperCase() + "%");
			} else {
				params.add("%" + alarmas.getUsuAlta24().toUpperCase() + "%");
			}
			where.append(" AND t1.USU_ALTA_24 IS NOT NULL");
		}

		if (alarmas != null && alarmas.getfAlarma24Desde() != null) {
			where.append(" AND TRUNC(t1.F_ALARMA_24) >= ?");
			params.add(alarmas.getfAlarma24Desde());
		}
		if (alarmas != null && alarmas.getfAlarma24Hasta() != null) {
			where.append(" AND TRUNC(t1.f_alarma_24) <= ?");
			params.add(alarmas.getfAlarma24Hasta());
		}

		if (alarmas != null && alarmas.getDirecciones() != null && alarmas.getDirecciones().getProvinciaNORA() != null
				&& alarmas.getDirecciones().getProvinciaNORA().getCodProvincia() != null) {
			where.append(" AND t7.ID_PROVINCIA_06 = ?");
			params.add(alarmas.getDirecciones().getProvinciaNORA().getCodProvincia());
		}
		if (alarmas != null && alarmas.getDirecciones() != null && alarmas.getDirecciones().getMunicipioNORA() != null
				&& alarmas.getDirecciones().getMunicipioNORA().getCodMunicipio() != null) {
			where.append(" AND t7.ID_MUNICIPIO_06 = ?");
			params.add(alarmas.getDirecciones().getMunicipioNORA().getCodMunicipio());
		}
		Map<String, Object> mapWhere = new HashMap<>();
		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;
}
