
com.csfacturacion.csreporter.impl.ConsultaImpl Maven / Gradle / Ivy
/*
* Copyright 2016 NueveBit, todos los derechos reservados.
*/
package com.csfacturacion.csreporter.impl;
import com.csfacturacion.csreporter.impl.http.UserAgent;
import com.csfacturacion.csreporter.CFDIMeta;
import com.csfacturacion.csreporter.Consulta;
import com.csfacturacion.csreporter.ResultadosInsuficientesException;
import com.csfacturacion.csreporter.XMLNoEncontradoException;
import com.csfacturacion.csreporter.impl.http.Response;
import com.csfacturacion.csreporter.impl.util.RequestFactory;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* Implementación de una {@link Consulta} que utiliza Apache HTTPClient.
*
* @author emerino
*/
public class ConsultaImpl implements Consulta {
private static final String csHost = "www.csfacturacion.com";
private final UserAgent userAgent;
private final UUID folio;
private Integer paginas;
private Long totalResultados;
private RequestFactory requestFactory;
private Status status;
protected ConsultaImpl(UUID folio,
RequestFactory requestFactory,
UserAgent userAgent) {
this.folio = folio;
this.userAgent = userAgent;
this.requestFactory = requestFactory;
}
/**
*
*/
@Override
public Status getStatus() {
Status statusNuevo = status;
if (statusNuevo == null) {
JsonObject progreso = userAgent.open(
requestFactory.newStatusRequest(folio))
.getAsJson()
.getAsJsonObject();
statusNuevo = Status.valueOf(progreso.get("estado").getAsString());
if (statusNuevo.isCompletado()) {
status = statusNuevo;
}
}
return statusNuevo;
}
@Override
public boolean isTerminada() {
return getStatus().isCompletado();
}
@Override
public boolean isFallo() {
return getStatus().isFallo();
}
@Override
public boolean isRepetir() {
return getStatus() == Status.REPETIR;
}
@Override
public UUID getFolio() {
return folio;
}
@Override
public long getTotalResultados() {
if (totalResultados == null) {
validarTerminada();
JsonObject resumen = userAgent.open(
requestFactory.newResumenRequest(folio))
.getAsJson()
.getAsJsonObject();
totalResultados = Long.valueOf(resumen.get("total").toString());
}
return totalResultados;
}
@Override
public int getPaginas() {
if (paginas == null) {
validarTerminada();
JsonObject resumen = userAgent.open(
requestFactory.newResumenRequest(folio))
.getAsJson()
.getAsJsonObject();
paginas = Integer.valueOf(resumen.get("paginas").toString());
}
return paginas;
}
@Override
public List getResultados(int pagina)
throws ResultadosInsuficientesException {
return getResultados(pagina, CFDIMeta.class);
}
@Override
public List getResultados(
int pagina, Class clazz) {
validarTerminada();
validarResultadosSuficientes(pagina);
List resultados = newResultadosList(userAgent.open(
requestFactory.newResultadosRequest(folio, pagina)),
clazz);
return resultados;
}
protected List newResultadosList(
Response response,
Class clazz) {
JsonArray array = response.getAsJson().getAsJsonArray();
List lst = new ArrayList();
for (final JsonElement json : array) {
T entity = userAgent.getGson().fromJson(json, clazz);
lst.add(entity);
}
return lst;
}
@Override
public boolean hasResultados() {
return getPaginas() > 0;
}
protected void validarResultadosSuficientes(int pagina) {
if (!hasResultados() || pagina > getPaginas()) {
throw new ResultadosInsuficientesException("No existen suficientes "
+ "resultados para mostrar, total páginas: " + getPaginas());
}
}
protected UserAgent getUserAgent() {
return userAgent;
}
protected RequestFactory getRequestFactory() {
return requestFactory;
}
@Override
public CFDIMeta getCFDI(UUID folio) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public String getCFDIXML(CFDIMeta cfdi) throws XMLNoEncontradoException {
return getCFDIXML(cfdi.getFolio());
}
@Override
public String getCFDIXML(UUID folioCFDI) throws XMLNoEncontradoException {
validarTerminada();
Response response = getUserAgent().open(
getRequestFactory().newDescargaRequest(folio, folioCFDI));
if (response.getCode() != 200) {
throw new XMLNoEncontradoException("No se encontró el XML para el "
+ "folio: " + folioCFDI);
}
return response.getRawResponse();
}
protected void validarTerminada() {
if (!isTerminada()) {
throw new IllegalStateException("La consulta no ha terminado.");
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy