diff --git a/src/main/java/br/ufpr/c3sl/estacaojuventude/Programa.java b/src/main/java/br/ufpr/c3sl/estacaojuventude/Programa.java index 2f88d3a57f136d8c6f5c7f3b4d9bed0c74fe156a..b692d0006efa7fc070f07fa84a7181e9c88bc46a 100644 --- a/src/main/java/br/ufpr/c3sl/estacaojuventude/Programa.java +++ b/src/main/java/br/ufpr/c3sl/estacaojuventude/Programa.java @@ -133,32 +133,19 @@ public class Programa { * */ public static List<Programa> findWithParameters(String nomeOficial, String nomeMunicipio, Set<Tematica> tematicas) { - String querySelectFrom = "SELECT distinct p.* FROM programa p, ocorrencia_municipal o"; - String queryWhere = " WHERE p.status = 'Efetivo' AND o.status = 'Efetivo'"; + String querySelect = "SELECT distinct p.*"; + String queryFrom = " FROM programa p"; + String queryWhere = " WHERE p.status = 'Efetivo'"; String query = ""; - if (tematicas.isEmpty()) { - if (nomeOficial != null && nomeMunicipio == null){ - queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')"; - } - else if (nomeOficial == null && nomeMunicipio != null){ - querySelectFrom += ", municipio m"; - queryWhere += " AND o.municipio = m.id"; - queryWhere += " AND p.id = o.programa_vinculado AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')"; - } - else if (nomeOficial != null && nomeMunicipio != null) { - querySelectFrom += ", municipio m"; - queryWhere += " AND o.municipio = m.id"; - queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')"; - queryWhere += " AND p.id = o.programa_vinculado AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')"; - } - } - else { //(!tematicas.isEmpty()) - querySelectFrom += " ,programa_tematicas pt, tematica t"; + if (!tematicas.isEmpty()) { + queryFrom += " ,programa_tematicas pt, tematica t"; queryWhere += " AND p.id = pt.programa AND t.id = pt.tematicas"; - String strTemas = "("; + Integer i = 0; Integer tam = tematicas.size(); + + String strTemas = "("; for (Iterator<Tematica> t = tematicas.iterator(); t.hasNext();) { strTemas += "t.nome = '"+t.next().getNome()+"'"; i++; @@ -166,29 +153,23 @@ public class Programa { strTemas += " OR "; } strTemas += ")"; - if (nomeOficial == null && nomeMunicipio == null){ - queryWhere += " AND "+strTemas; - } - else if (nomeOficial != null && nomeMunicipio == null) { - queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')"; - queryWhere += " AND "+strTemas; - } - else if (nomeOficial == null && nomeMunicipio != null) { - querySelectFrom += ", municipio m"; - queryWhere += " AND o.municipio = m.id"; - queryWhere += " AND p.id = o.programa_vinculado AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')"; - queryWhere += " AND "+strTemas; - } - else if (nomeOficial != null && nomeMunicipio != null) { - querySelectFrom += ", municipio m"; - queryWhere += " AND o.municipio = m.id"; - queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')"; - queryWhere += " AND p.id = o.programa_vinculado AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')"; - queryWhere += " AND "+strTemas; - } + queryWhere += " AND "+strTemas; } - query = querySelectFrom + queryWhere; - return entityManager().createNativeQuery(query, Programa.class).getResultList(); + + if (nomeOficial != null){ + queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')"; + } + + if (nomeMunicipio != null){ + queryFrom += ", ocorrencia_municipal o, ocorrencia_municipal_municipios om, municipio m"; + queryWhere += " AND o.status = 'Efetivo'"; + queryWhere += " AND p.id = o.programa_vinculado AND o.id = om.ocorrencia_municipal AND om.municipios = m.id"; + queryWhere += " AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')"; + } + + query = querySelect + queryFrom + queryWhere; + + return entityManager().createNativeQuery(query, Programa.class).getResultList(); } }