diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/seguridad/ItemMenuLimparCacheLocalidadesAPI.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/seguridad/ItemMenuLimparCacheLocalidadesAPI.java index 21ee1f097..b4189be87 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/seguridad/ItemMenuLimparCacheLocalidadesAPI.java +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/seguridad/ItemMenuLimparCacheLocalidadesAPI.java @@ -14,6 +14,7 @@ import org.apache.http.impl.auth.BasicScheme; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.log4j.Logger; import org.springframework.context.ApplicationContext; +import org.zkoss.util.resource.Labels; import org.zkoss.zk.ui.util.Clients; import org.zkoss.zul.Messagebox; @@ -31,9 +32,9 @@ import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext; public class ItemMenuLimparCacheLocalidadesAPI extends DefaultItemMenuSistema { private static Logger log = Logger.getLogger(ItemMenuLimparCacheLocalidadesAPI.class); - private static final String secret = "#KO&Fm4_k.sU9M8`6Mx'F\\\"H:*Qxu]6F4r,)JmZ2Jwafd)I.2[RET'1:)VQ6mG9,"; - private static final int minutesExpireToken = 10; - + private static final String secret = "#KO&Fm4_k.sU9M8`6Mx'F\\\"H:*Qxu]6F4r,)JmZ2Jwafd)I.2[RET'1:)VQ6mG9,"; + private static final int minutesExpireToken = 10; + public ItemMenuLimparCacheLocalidadesAPI() { super("indexController.mniLimparCacheLocalidadesAPI.label"); } @@ -45,73 +46,65 @@ public class ItemMenuLimparCacheLocalidadesAPI extends DefaultItemMenuSistema { @Override public void ejecutar() { - - String[] urls = getURLSAPI(); - - if( urls == null || urls.length == 0 ) { - Clients.alert(org.zkoss.util.resource.Labels.getLabel("limparCacheLocalidadesAPI.message.naoconfigurado"), - org.zkoss.util.resource.Labels.getLabel("limparCacheLocalidadesAPI.title"), Messagebox.INFORMATION); - return; - } - - for (String url : urls) { - - if (StringUtils.isBlank(url) || url.contains("|")) { - Clients.alert(org.zkoss.util.resource.Labels.getLabel("limparCacheLocalidadesAPI.message.naoconfigurado"), - org.zkoss.util.resource.Labels.getLabel("limparCacheLocalidadesAPI.title"), Messagebox.INFORMATION); - return; - } - - String tenant = StringUtils.substringBetween(url, "[", "]"); - if (tenant != null) { - url = url.replaceAll("\\[.*?\\]", ""); + + try { + + int resp = Messagebox.show( + Labels.getLabel("limparCacheLocalidadesAPI.message.pergunta"), + Labels.getLabel("limparCacheLocalidadesAPI.title"), Messagebox.YES | Messagebox.NO, Messagebox.QUESTION); + + if (resp == Messagebox.YES) { + + String[] urls = getURLSAPI(); + + if (urls == null || urls.length == 0) { + Clients.alert(org.zkoss.util.resource.Labels.getLabel("limparCacheLocalidadesAPI.message.naoconfigurado"), + org.zkoss.util.resource.Labels.getLabel("limparCacheLocalidadesAPI.title"), Messagebox.INFORMATION); + return; + } + + for (String url : urls) { + + if (StringUtils.isBlank(url) || url.contains("|")) { + Clients.alert(org.zkoss.util.resource.Labels.getLabel("limparCacheLocalidadesAPI.message.naoconfigurado"), + org.zkoss.util.resource.Labels.getLabel("limparCacheLocalidadesAPI.title"), Messagebox.INFORMATION); + return; + } + + String tenant = StringUtils.substringBetween(url, "[", "]"); + if (tenant != null) { + url = url.replaceAll("\\[.*?\\]", ""); + } + String urlOriginal = url; + url = montarUrlRequest(url); + + ThreadCache cache = new ThreadCache(url, tenant, urlOriginal); + Thread thread = new Thread(cache); + thread.start(); + thread.join(); + + Clients.alert(cache.getRetorno(), org.zkoss.util.resource.Labels.getLabel("limparCacheLocalidadesAPI.title"), Messagebox.INFORMATION); + } + } - url = montarUrlRequest(url); - httpRequestApi(url, tenant); + + } catch (Exception e) { + Clients.alert(e.getMessage(), + org.zkoss.util.resource.Labels.getLabel("limparCacheLocalidadesAPI.title"), Messagebox.ERROR); + log.error(e.getMessage(), e); } - - String message = "Solicitação de limpeza de cache executada com sucesso, o mesmo já está sendo processado pela API."; - Clients.alert(message, org.zkoss.util.resource.Labels.getLabel("limparCacheLocalidadesAPI.title"), Messagebox.INFORMATION); + } private String montarUrlRequest(String url) { - + url = url.toLowerCase(); - + if (!url.endsWith("/")) { url += "/"; } - - return url.concat("adm/limparCache"); - } - private void httpRequestApi(final String url, final String tenant) { - new Thread(new Runnable() { - @Override - public void run() { - - HttpClient client = new DefaultHttpClient(); - HttpGet request = new HttpGet(url); - UsernamePasswordCredentials creds = null; - - try { - creds = new UsernamePasswordCredentials("internal", getToken()); - request.addHeader(new BasicScheme().authenticate(creds, request)); - - if (tenant != null) { - request.addHeader("x-tenant-id", tenant); - } - - HttpResponse response = client.execute(request); - if(response != null && response.getStatusLine() != null) { - log.info(String.format(":: Response Status Code %d ::", response.getStatusLine().getStatusCode())); - } - } catch (Exception e) { - log.error("Ocorreu um erro ao executar a requisição de limpar cache de localidade da API"); - } - - } - }).start(); + return url.concat("adm/limparCache"); } private String[] getURLSAPI() { @@ -119,7 +112,7 @@ public class ItemMenuLimparCacheLocalidadesAPI extends DefaultItemMenuSistema { ConstanteService constanteService = (ConstanteService) appContext.getBean("constanteService"); String constante = constanteService.buscarURLAPI(); - return constante==null ? null : constante.split("\\|"); + return constante == null ? null : constante.split("\\|"); } private String getToken() throws JOSEException { @@ -141,4 +134,85 @@ public class ItemMenuLimparCacheLocalidadesAPI extends DefaultItemMenuSistema { return jwsObject.serialize(); } + + public class ThreadCache implements Runnable { + + private final String url; + private final String tenant; + private String retorno; + private String urlOriginal; + + public String getUrl() { + return url; + } + + public String getTenant() { + return tenant; + } + + public String getRetorno() { + return retorno; + } + + public void setRetorno(String retorno) { + this.retorno = retorno; + } + + public String getUrlOriginal() { + return urlOriginal; + } + + public void setUrlOriginal(String urlOriginal) { + this.urlOriginal = urlOriginal; + } + + public ThreadCache(String url, String tenant, String urlOriginal) { + this.url = url; + this.tenant = tenant; + this.urlOriginal = urlOriginal; + } + + public void run() { + HttpClient client = new DefaultHttpClient(); + HttpGet request = new HttpGet(url); + UsernamePasswordCredentials creds = null; + + try { + creds = new UsernamePasswordCredentials("internal", getToken()); + request.addHeader(new BasicScheme().authenticate(creds, request)); + + if (tenant != null) { + request.addHeader("x-tenant-id", tenant); + } + + HttpResponse response = client.execute(request); + if (response != null && response.getStatusLine() != null) { + log.info(String.format(":: Response Status Code %d ::", response.getStatusLine().getStatusCode())); + } + + Integer codigoRetorno = (response != null && response.getStatusLine() != null) ? response.getStatusLine().getStatusCode() : null; + + retorno = montarMensagemRetorno(tenant, urlOriginal, codigoRetorno, null); + + } catch (Exception e) { + retorno = montarMensagemRetorno(tenant, urlOriginal, null, e.getMessage()); + log.error("Ocorreu um erro ao executar a requisição de limpar cache de localidade da API", e); + } + } + + } + + private String montarMensagemRetorno(String tenant, String url, Integer codigoRetorno, String mensagemErro) { + + StringBuilder mensagemRetorno = new StringBuilder(); + mensagemRetorno.append("ULR -> ").append(url).append("\n"); + mensagemRetorno.append("tenant -> ").append(tenant).append("\n"); + if (mensagemErro == null) { + mensagemRetorno.append("Resposta -> ").append((codigoRetorno != null && codigoRetorno.equals(200)) ? "Solicitação de limpeza de cache executada com sucesso, código " + codigoRetorno : "Erro ao enviar solicitação, código " + codigoRetorno); + } else { + mensagemRetorno.append("Resposta -> ").append(mensagemErro); + } + + return mensagemRetorno.toString(); + } } diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index 1e9c5c198..df6e281a5 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -9083,6 +9083,7 @@ filtroTaxaEmbarqueW2i.labelAviso.value= Atenção. Certifique-se que todos os da indexController.mniLimparCacheLocalidadesAPI.label = Recarregar Cache de Localidades (API) limparCacheLocalidadesAPI.title = Localidades (API) limparCacheLocalidadesAPI.message.naoconfigurado=A constante de configuração da URL da API não foi encontrada. +limparCacheLocalidadesAPI.message.pergunta=Deseja Recarregar Cache de Localidades (API) ? (API de Localidade ficará indisponível durante a execução) #Relatório de Aproveitamento Financeiro relatorioAproveitamentoFinanceiroController.window.title = Relatório de Aproveitamento Financeiro diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 0c318459c..14ed923ba 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -9819,6 +9819,7 @@ filtroTaxaEmbarqueW2i.labelAviso.value= Atenção. Certifique-se que todos os da indexController.mniLimparCacheLocalidadesAPI.label = Recarregar Cache de Localidades (API) limparCacheLocalidadesAPI.title = Localidades (API) limparCacheLocalidadesAPI.message.naoconfigurado=A constante de configuração da URL da API não foi encontrada. +limparCacheLocalidadesAPI.message.pergunta=Deseja recarregar Cache de Localidades (API) ? (API de Localidade ficará indisponível durante a execução) #Relatório de Aproveitamento Financeiro relatorioAproveitamentoFinanceiroController.window.title = Relatório de Aproveitamento Financeiro