Skip to content

Instantly share code, notes, and snippets.

@andysteel
Last active October 4, 2022 23:03
Show Gist options
  • Save andysteel/d52f8b01bf2445b665bf603473f35d42 to your computer and use it in GitHub Desktop.
Save andysteel/d52f8b01bf2445b665bf603473f35d42 to your computer and use it in GitHub Desktop.
Exemplo consulta paginada
package testando;
import java.time.LocalDate;
import java.util.Objects;
import javax.ws.rs.QueryParam;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
public class ConsultaEditalDTO extends ConsultaPaginadaDTO {
@QueryParam("anoEdital")
private Integer anoEdital;
@QueryParam("codSituacao")
private Short codSituacao;
@JsonDeserialize(using = LocalDateDeserialize.class)
@JsonSerialize(using = LocalDateSerialize.class)
@QueryParam("dataGeracao")
private LocalDate dataGeracao;
@QueryParam("orderAnoEdital")
private String orderAnoEdital;
@QueryParam("orderDataGeracao")
private String orderDataGeracao;
@QueryParam("orderCodSituacao")
private String orderCodSituacao;
public Integer getAnoEdital() {
return anoEdital;
}
public void setAnoEdital(Integer anoEdital) {
this.anoEdital = anoEdital;
}
public Short getCodSituacao() {
return codSituacao;
}
public void setCodSituacao(Short codSituacao) {
this.codSituacao = codSituacao;
}
public LocalDate getDataGeracao() {
return dataGeracao;
}
public void setDataGeracao(LocalDate dataGeracao) {
this.dataGeracao = dataGeracao;
}
public String getOrderAnoEdital() {
return orderAnoEdital;
}
public void setOrderAnoEdital(String orderAnoEdital) {
this.orderAnoEdital = orderAnoEdital;
}
public String getOrderDataGeracao() {
return orderDataGeracao;
}
public void setOrderDataGeracao(String orderDataGeracao) {
this.orderDataGeracao = orderDataGeracao;
}
public String getOrderCodSituacao() {
return orderCodSituacao;
}
public void setOrderCodSituacao(String orderCodSituacao) {
this.orderCodSituacao = orderCodSituacao;
}
@Override
public String toString() {
return String.format(
"ConsultaEditalDTO [anoEdital=%s, codSituacao=%s, dataGeracao=%s, orderAnoEdital=%s, orderCodSituacao=%s, orderDataGeracao=%s]",
anoEdital, codSituacao, dataGeracao, orderAnoEdital, orderCodSituacao, orderDataGeracao);
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result
+ Objects.hash(anoEdital, codSituacao, dataGeracao, orderAnoEdital, orderCodSituacao, orderDataGeracao);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
ConsultaEditalDTO other = (ConsultaEditalDTO) obj;
return Objects.equals(anoEdital, other.anoEdital) && Objects.equals(codSituacao, other.codSituacao)
&& Objects.equals(dataGeracao, other.dataGeracao)
&& Objects.equals(orderAnoEdital, other.orderAnoEdital)
&& Objects.equals(orderCodSituacao, other.orderCodSituacao)
&& Objects.equals(orderDataGeracao, other.orderDataGeracao);
}
}
package testando;
import java.io.Serializable;
import java.time.LocalDateTime;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
public class EditalDTO implements Serializable {
private Integer anoEdital;
private Integer codSituacao;
@JsonDeserialize(using = LocalDateTimeDeserialize.class)
@JsonSerialize(using = LocalDateTimeSerialize.class)
private LocalDateTime dataGeracao;
private Integer numeroEdital;
public EditalDTO(EditalED edital) {
if(edital.getAnoEdital() != null) {
this.anoEdital = edital.getAnoEdital();
}
if(edital.getCodGddSituacEdital() != null) {
this.codSituacao = edital.getCodGddSituacEdital().intValue();
}
if(edital.getDthGeracao() != null) {
this.dataGeracao = edital.getDthGeracao();
}
if(edital.getNroIntEdital() != null) {
this.numeroEdital = edital.getNroIntEdital();
}
}
public Integer getAnoEdital() {
return anoEdital;
}
public Integer getCodSituacao() {
return codSituacao;
}
public LocalDateTime getDataGeracao() {
return dataGeracao;
}
public Integer getNumeroEdital() {
return numeroEdital;
}
}
package com.procergs.gpn.rnbd.testando;
import java.util.ArrayList;
import java.util.List;
import com.procergs.arqjava4.persistence.Ordem;
public class EditalEdBuilder {
private EditalED editalED = new EditalED();
public EditalEdBuilder construirComFiltro(final ConsultaEditalDTO dto) {
if(dto != null) {
if(dto.getAnoEdital() != null) {
this.editalED.setAnoEdital(dto.getAnoEdital());
}
if(dto.getCodSituacao() != null) {
this.editalED.setCodGddSituacEdital(dto.getCodSituacao());
}
if(dto.getDataGeracao() != null) {
this.editalED.setDthGeracao(dto.getDataGeracao().atStartOfDay());
}
this.editalED.getPropLista().setInicio(dto.getPosicaoDaPagina());
this.editalED.getPropLista().setTamanho(dto.getTamanhoDaPagina());
}
return this;
}
public EditalEdBuilder construirComOrdenacao(final ConsultaEditalDTO dto) {
if(dto != null) {
List<Ordem> ordems = new ArrayList<>();
MontaOrdenacaoBuilderFinal.paraFiltroDeConsulta(dto)
.testaValorOrdenacao(consultaEdital -> consultaEdital.getOrderAnoEdital() != null)
.incluiOrdenacao(dto.getOrderAnoEdital(), "anoEdital", ordems)
.testaValorOrdenacao(consultaEdital -> consultaEdital.getOrderCodSituacao() != null)
.incluiOrdenacao(dto.getOrderCodSituacao(), "codGddSituacEdital", ordems)
.testaValorOrdenacao(consultaEdital -> consultaEdital.getOrderDataGeracao() != null)
.incluiOrdenacao(dto.getOrderDataGeracao(), "dthGeracao", ordems);
this.editalED.getPropLista().setOrdem(ordems);
}
return this;
}
public EditalED build() {
return this.editalED;
}
}
package remote;
import java.net.URI;
import java.net.URISyntaxException;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.executable.ValidateOnExecution;
import javax.ws.rs.BeanParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import com.procergs.arqjava4.exception.RNException;
import com.procergs.arqjava4.security.Permissao;
import com.procergs.gpn.infra.AppInterceptor;
import com.procergs.gpn.infra.BasicRest;
import com.procergs.gpn.rnbd.testando.ConsultaEditalDTO;
import com.procergs.gpn.rnbd.testando.EditalDTO;
import com.procergs.gpn.rnbd.testando.NovoRecurso;
import com.procergs.gpn.rnbd.testando.ResponseConsultaPaginadaDTO;
import com.procergs.gpn.rnbd.testando.TestandoRN;
import io.swagger.v3.oas.annotations.tags.Tag;
@Tag(name = "testando")
@Path("testando")
@ValidateOnExecution
@AppInterceptor
public class TestaEndpointRest extends BasicRest {
@Inject
private TestandoRN testandoRN;
@Context
private HttpServletRequest request;
@Permissao(desabilitada = true)
@GET
public Response consultaTabelaEdital(@BeanParam ConsultaEditalDTO dto) {
ResponseConsultaPaginadaDTO<EditalDTO> response = testandoRN.consultarEditais(dto);
if(response != null && response.getTotal() == 0) {
return Response.status(Status.NOT_FOUND).build();
}
return Response.ok(response).build();
}
@Permissao(desabilitada = true)
@POST
@Path("post")
public Response criaNovoRecurso(@Valid NovoRecurso novoRecurso) throws URISyntaxException {
// throw new RNException("testando essa situação");
System.out.println(request.getRequestURI());
return Response.created(new URI(request.getRequestURI())).build();
}
@Permissao(desabilitada = true)
@GET
@Path("nada/{parametro}")
public Response consultaNada(@PathParam("parametro") @Min(value = 3) Long parametro) {
return Response.ok(parametro).build();
}
}
package testando;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import com.procergs.gpn.infra.AppBD;
public class TestandoBD extends AppBD<EditalED, Integer> {
public List<EditalED> consultaPaginada(final EditalED editalED) {
DetachedCriteria dc = montaConsultaPaginada(editalED);
return findByCriteria(dc, editalED.getPropLista().getTamanho() * editalED.getPropLista().getInicio(), editalED.getPropLista().getTamanho());
}
public int contaConsultaPaginada(final EditalED editalED) {
DetachedCriteria dc = montaConsultaPaginada(editalED);
Criteria criteria = dc.getExecutableCriteria(getSession());
return ((Number)criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();
}
private DetachedCriteria montaConsultaPaginada(final EditalED editalED) {
DetachedCriteria dc = DetachedCriteria.forClass(EditalED.class);
MontaCriterioBuilder
.paraFiltroDeConsulta(editalED)
.testaValorCriterio(edital -> edital.getAnoEdital() != null)
.incluiCriterio(dc, Restrictions.eq("anoEdital", editalED.getAnoEdital()))
.testaValorCriterio(edital -> edital.getCodGddSituacEdital() != null)
.incluiCriterio(dc, Restrictions.eq("codGddSituacEdital", editalED.getCodGddSituacEdital()))
.criterioComTratamento()
.incluiCriterioComTratamento(() -> {
if(editalED.getDthGeracao() != null) {
dc.add(Restrictions.sqlRestriction("TRUNC(DTH_GERACAO)=?", Date.from(editalED.getDthGeracao().atZone(ZoneId.systemDefault()).toInstant()), org.hibernate.type.StandardBasicTypes.DATE));
}
return editalED;
});
adicionaOrdem(editalED, dc);
return dc;
}
}
package testando;
import java.util.List;
import java.util.stream.Collectors;
import javax.inject.Inject;
public class TestandoRN {
@Inject
TestandoBD testandoBD;
public ResponseConsultaPaginadaDTO<EditalDTO> consultarEditais(ConsultaEditalDTO dto) {
final EditalED editalED = new EditalEdBuilder().construirComFiltro(dto).construirComOrdenacao(dto).build();
int totalDeEditaisFiltrados = testandoBD.contaConsultaPaginada(editalED);
List<EditalED> paginaDeEditaisFiltrados = testandoBD.consultaPaginada(editalED);
List<EditalDTO> editaisDTO = paginaDeEditaisFiltrados.stream().map(EditalDTO::new).collect(Collectors.toList());
Integer quantidadeDePaginas = (int) Math.ceil((double)totalDeEditaisFiltrados / dto.getTamanhoDaPagina());
return new ResponseConsultaPaginadaDTO<>(totalDeEditaisFiltrados, quantidadeDePaginas , dto.getPosicaoDaPagina(), editaisDTO, dto.getTamanhoDaPagina());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment