ADD - rest of files (helpers, utils, models, etc)
This commit is contained in:
parent
c36f2dccb5
commit
c8b9ee92cd
@ -0,0 +1,66 @@
|
||||
package com.banesco.domain.model;
|
||||
|
||||
public class FieldValidateResult {
|
||||
|
||||
private String backendCode;
|
||||
private String field;
|
||||
|
||||
public FieldValidateResult() {
|
||||
}
|
||||
|
||||
public FieldValidateResult(String backendCode, String field) {
|
||||
this.backendCode = backendCode;
|
||||
this.field = field;
|
||||
}
|
||||
|
||||
private FieldValidateResult(Builder builder) {
|
||||
this.backendCode = builder.backendCode;
|
||||
this.field = builder.field;
|
||||
}
|
||||
|
||||
public String getBackendCode() {
|
||||
return backendCode;
|
||||
}
|
||||
|
||||
public String getField() {
|
||||
return field;
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
|
||||
private String backendCode;
|
||||
private String field;
|
||||
|
||||
public Builder() {
|
||||
}
|
||||
|
||||
public Builder backendCode(String backendCode) {
|
||||
this.backendCode = backendCode;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder field(String field) {
|
||||
this.field = field;
|
||||
return this;
|
||||
}
|
||||
|
||||
public FieldValidateResult build() {
|
||||
// Validaciones de ser necesario
|
||||
// if (attr == null || attr.isEmpty()) {
|
||||
// throw new IllegalStateException("El atributo1 no puede estar vacío");
|
||||
// }
|
||||
return new FieldValidateResult(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "FieldValidateResult [backendCode=" + backendCode + ", field=" + field + "]";
|
||||
}
|
||||
|
||||
}
|
||||
223
src/main/java/com/banesco/domain/model/RequestBase.java
Normal file
223
src/main/java/com/banesco/domain/model/RequestBase.java
Normal file
@ -0,0 +1,223 @@
|
||||
package com.banesco.domain.model;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class RequestBase {
|
||||
|
||||
@JsonProperty("MsgRqHdr")
|
||||
public MsgRqHdr msgRqHdr;
|
||||
|
||||
public static class NetworkTrnInfo {
|
||||
|
||||
@JsonProperty("TransactionConsecutive")
|
||||
public String transactionConsecutive;
|
||||
@JsonProperty("RegisterNumber")
|
||||
public String registerNumber;
|
||||
@JsonProperty("OperationType")
|
||||
public String operationType;
|
||||
@JsonProperty("TransactionType")
|
||||
public String transactionType;
|
||||
@JsonProperty("TransactionCode")
|
||||
public String transactionCode;
|
||||
@JsonProperty("TransactionDate")
|
||||
public String transactionDate;
|
||||
@JsonProperty("TransactionTime")
|
||||
public String transactionTime;
|
||||
@JsonProperty("BankId")
|
||||
public String bankId;
|
||||
@JsonProperty("AgencyCode")
|
||||
public String agencyCode;
|
||||
@JsonProperty("ChannelId")
|
||||
public String channelId;
|
||||
|
||||
public String getTransactionConsecutive() {
|
||||
return transactionConsecutive;
|
||||
}
|
||||
|
||||
public void setTransactionConsecutive(String transactionConsecutive) {
|
||||
this.transactionConsecutive = transactionConsecutive;
|
||||
}
|
||||
|
||||
public String getRegisterNumber() {
|
||||
return registerNumber;
|
||||
}
|
||||
|
||||
public void setRegisterNumber(String registerNumber) {
|
||||
this.registerNumber = registerNumber;
|
||||
}
|
||||
|
||||
public String getOperationType() {
|
||||
return operationType;
|
||||
}
|
||||
|
||||
public void setOperationType(String operationType) {
|
||||
this.operationType = operationType;
|
||||
}
|
||||
|
||||
public String getTransactionType() {
|
||||
return transactionType;
|
||||
}
|
||||
|
||||
public void setTransactionType(String transactionType) {
|
||||
this.transactionType = transactionType;
|
||||
}
|
||||
|
||||
public String getTransactionCode() {
|
||||
return transactionCode;
|
||||
}
|
||||
|
||||
public void setTransactionCode(String transactionCode) {
|
||||
this.transactionCode = transactionCode;
|
||||
}
|
||||
|
||||
public String getTransactionDate() {
|
||||
return transactionDate;
|
||||
}
|
||||
|
||||
public void setTransactionDate(String transactionDate) {
|
||||
this.transactionDate = transactionDate;
|
||||
}
|
||||
|
||||
public String getTransactionTime() {
|
||||
return transactionTime;
|
||||
}
|
||||
|
||||
public void setTransactionTime(String transactionTime) {
|
||||
this.transactionTime = transactionTime;
|
||||
}
|
||||
|
||||
public String getBankId() {
|
||||
return bankId;
|
||||
}
|
||||
|
||||
public void setBankId(String bankId) {
|
||||
this.bankId = bankId;
|
||||
}
|
||||
|
||||
public String getAgencyCode() {
|
||||
return agencyCode;
|
||||
}
|
||||
|
||||
public void setAgencyCode(String agencyCode) {
|
||||
this.agencyCode = agencyCode;
|
||||
}
|
||||
|
||||
public String getChannelId() {
|
||||
return channelId;
|
||||
}
|
||||
|
||||
public void setChannelId(String channelId) {
|
||||
this.channelId = channelId;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class ApplicantData {
|
||||
|
||||
@JsonProperty("Application")
|
||||
public String application;
|
||||
}
|
||||
|
||||
public static class VBProtocol {
|
||||
|
||||
@JsonProperty("VBProtocolInd")
|
||||
public String vBProtocolInd;
|
||||
@JsonProperty("TransactionInd")
|
||||
public String transactionInd;
|
||||
}
|
||||
|
||||
public static class MsgRqHdr {
|
||||
|
||||
@JsonProperty("MessageDate")
|
||||
public String messageDate;
|
||||
@JsonProperty("MessageTime")
|
||||
public String messageTime;
|
||||
@JsonProperty("RequestId")
|
||||
public String requestId;
|
||||
@JsonProperty("SourceChannelCode")
|
||||
public String sourceChannelCode;
|
||||
@JsonProperty("SupervisorCode")
|
||||
public String supervisorCode;
|
||||
@JsonProperty("OperatorCode")
|
||||
public String operatorCode;
|
||||
@JsonProperty("NetworkTrnInfo")
|
||||
public NetworkTrnInfo networkTrnInfo;
|
||||
@JsonProperty("ApplicantData")
|
||||
public ApplicantData applicantData;
|
||||
@JsonProperty("VBProtocol")
|
||||
public VBProtocol vBProtocol;
|
||||
|
||||
public String getMessageDate() {
|
||||
return messageDate;
|
||||
}
|
||||
|
||||
public void setMessageDate(String messageDate) {
|
||||
this.messageDate = messageDate;
|
||||
}
|
||||
|
||||
public String getMessageTime() {
|
||||
return messageTime;
|
||||
}
|
||||
|
||||
public void setMessageTime(String messageTime) {
|
||||
this.messageTime = messageTime;
|
||||
}
|
||||
|
||||
public String getRequestId() {
|
||||
return requestId;
|
||||
}
|
||||
|
||||
public void setRequestId(String requestId) {
|
||||
this.requestId = requestId;
|
||||
}
|
||||
|
||||
public String getSourceChannelCode() {
|
||||
return sourceChannelCode;
|
||||
}
|
||||
|
||||
public void setSourceChannelCode(String sourceChannelCode) {
|
||||
this.sourceChannelCode = sourceChannelCode;
|
||||
}
|
||||
|
||||
public String getSupervisorCode() {
|
||||
return supervisorCode;
|
||||
}
|
||||
|
||||
public void setSupervisorCode(String supervisorCode) {
|
||||
this.supervisorCode = supervisorCode;
|
||||
}
|
||||
|
||||
public String getOperatorCode() {
|
||||
return operatorCode;
|
||||
}
|
||||
|
||||
public void setOperatorCode(String operatorCode) {
|
||||
this.operatorCode = operatorCode;
|
||||
}
|
||||
|
||||
public NetworkTrnInfo getNetworkTrnInfo() {
|
||||
return networkTrnInfo;
|
||||
}
|
||||
|
||||
public void setNetworkTrnInfo(NetworkTrnInfo networkTrnInfo) {
|
||||
this.networkTrnInfo = networkTrnInfo;
|
||||
}
|
||||
|
||||
public ApplicantData getApplicantData() {
|
||||
return applicantData;
|
||||
}
|
||||
|
||||
public void setApplicantData(ApplicantData applicantData) {
|
||||
this.applicantData = applicantData;
|
||||
}
|
||||
|
||||
public VBProtocol getvBProtocol() {
|
||||
return vBProtocol;
|
||||
}
|
||||
|
||||
public void setvBProtocol(VBProtocol vBProtocol) {
|
||||
this.vBProtocol = vBProtocol;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
298
src/main/java/com/banesco/domain/model/ResponseBase.java
Normal file
298
src/main/java/com/banesco/domain/model/ResponseBase.java
Normal file
@ -0,0 +1,298 @@
|
||||
package com.banesco.domain.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class ResponseBase {
|
||||
|
||||
@JsonProperty("MsgRsHdr")
|
||||
public ArrayList<MsgRsHdr> msgRsHdr;
|
||||
|
||||
@JsonProperty("Status")
|
||||
public ArrayList<Status> status;
|
||||
|
||||
public ResponseBase() {
|
||||
}
|
||||
|
||||
public ResponseBase(ArrayList<MsgRsHdr> msgRsHdr, ArrayList<Status> status) {
|
||||
this.msgRsHdr = msgRsHdr;
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public ResponseBase(Builder builder) {
|
||||
this.msgRsHdr = builder.msgRsHdr;
|
||||
this.status = builder.status;
|
||||
}
|
||||
|
||||
public ArrayList<MsgRsHdr> getMsgRsHdr() {
|
||||
return msgRsHdr;
|
||||
}
|
||||
|
||||
public void setMsgRsHdr(ArrayList<MsgRsHdr> msgRsHdr) {
|
||||
this.msgRsHdr = msgRsHdr;
|
||||
}
|
||||
|
||||
public ArrayList<Status> getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(ArrayList<Status> status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
|
||||
private ArrayList<MsgRsHdr> msgRsHdr;
|
||||
private ArrayList<Status> status;
|
||||
|
||||
public Builder msgRsHdr(ArrayList<MsgRsHdr> msgRsHdr) {
|
||||
this.msgRsHdr = msgRsHdr;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder status(ArrayList<Status> status) {
|
||||
this.status = status;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ResponseBase build() {
|
||||
return new ResponseBase(msgRsHdr, status);
|
||||
}
|
||||
}
|
||||
|
||||
public static class MsgRsHdr {
|
||||
|
||||
@JsonProperty("FinalStatusRequest")
|
||||
public String finalStatusRequest;
|
||||
@JsonProperty("CountDataOut")
|
||||
public String countDataOut;
|
||||
@JsonProperty("TransactionCode")
|
||||
public String transactionCode;
|
||||
@JsonProperty("SupervisorCode")
|
||||
public String supervisorCode;
|
||||
@JsonProperty("OperationType")
|
||||
public String operationType;
|
||||
@JsonProperty("TransactionConsecutive")
|
||||
public String transactionConsecutive;
|
||||
@JsonProperty("DetailReg")
|
||||
public String detailReg;
|
||||
@JsonProperty("RegisterNumber")
|
||||
public ArrayList<String> registerNumber;
|
||||
@JsonProperty("TransactionType")
|
||||
public String transactionType;
|
||||
@JsonProperty("RequestId")
|
||||
public String requestId;
|
||||
@JsonProperty("AppName")
|
||||
public String appName;
|
||||
|
||||
public MsgRsHdr() {
|
||||
}
|
||||
|
||||
public String getFinalStatusRequest() {
|
||||
return finalStatusRequest;
|
||||
}
|
||||
|
||||
public void setFinalStatusRequest(String finalStatusRequest) {
|
||||
this.finalStatusRequest = finalStatusRequest;
|
||||
}
|
||||
|
||||
public String getCountDataOut() {
|
||||
return countDataOut;
|
||||
}
|
||||
|
||||
public void setCountDataOut(String countDataOut) {
|
||||
this.countDataOut = countDataOut;
|
||||
}
|
||||
|
||||
public String getTransactionCode() {
|
||||
return transactionCode;
|
||||
}
|
||||
|
||||
public void setTransactionCode(String transactionCode) {
|
||||
this.transactionCode = transactionCode;
|
||||
}
|
||||
|
||||
public String getSupervisorCode() {
|
||||
return supervisorCode;
|
||||
}
|
||||
|
||||
public void setSupervisorCode(String supervisorCode) {
|
||||
this.supervisorCode = supervisorCode;
|
||||
}
|
||||
|
||||
public String getOperationType() {
|
||||
return operationType;
|
||||
}
|
||||
|
||||
public void setOperationType(String operationType) {
|
||||
this.operationType = operationType;
|
||||
}
|
||||
|
||||
public String getTransactionConsecutive() {
|
||||
return transactionConsecutive;
|
||||
}
|
||||
|
||||
public void setTransactionConsecutive(String transactionConsecutive) {
|
||||
this.transactionConsecutive = transactionConsecutive;
|
||||
}
|
||||
|
||||
public String getDetailReg() {
|
||||
return detailReg;
|
||||
}
|
||||
|
||||
public void setDetailReg(String detailReg) {
|
||||
this.detailReg = detailReg;
|
||||
}
|
||||
|
||||
public ArrayList<String> getRegisterNumber() {
|
||||
return registerNumber;
|
||||
}
|
||||
|
||||
public void setRegisterNumber(ArrayList<String> registerNumber) {
|
||||
this.registerNumber = registerNumber;
|
||||
}
|
||||
|
||||
public String getTransactionType() {
|
||||
return transactionType;
|
||||
}
|
||||
|
||||
public void setTransactionType(String transactionType) {
|
||||
this.transactionType = transactionType;
|
||||
}
|
||||
|
||||
public String getRequestId() {
|
||||
return requestId;
|
||||
}
|
||||
|
||||
public void setRequestId(String requestId) {
|
||||
this.requestId = requestId;
|
||||
}
|
||||
|
||||
public String getAppName() {
|
||||
return appName;
|
||||
}
|
||||
|
||||
public void setAppName(String appName) {
|
||||
this.appName = appName;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "MsgRsHdr [finalStatusRequest=" + finalStatusRequest + ", countDataOut=" + countDataOut
|
||||
+ ", transactionCode=" + transactionCode + ", supervisorCode=" + supervisorCode + ", operationType="
|
||||
+ operationType + ", transactionConsecutive=" + transactionConsecutive + ", detailReg=" + detailReg
|
||||
+ ", registerNumber=" + registerNumber + ", transactionType=" + transactionType + ", requestId="
|
||||
+ requestId + ", appName=" + appName + "]";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class AdditionalStatus {
|
||||
|
||||
@JsonProperty("StatusCode")
|
||||
public String statusCode;
|
||||
@JsonProperty("StatusDesc")
|
||||
public String statusDesc;
|
||||
@JsonProperty("Severity")
|
||||
public String severity;
|
||||
|
||||
public String getStatusCode() {
|
||||
return statusCode;
|
||||
}
|
||||
|
||||
public void setStatusCode(String statusCode) {
|
||||
this.statusCode = statusCode;
|
||||
}
|
||||
|
||||
public String getStatusDesc() {
|
||||
return statusDesc;
|
||||
}
|
||||
|
||||
public void setStatusDesc(String statusDesc) {
|
||||
this.statusDesc = statusDesc;
|
||||
}
|
||||
|
||||
public String getSeverity() {
|
||||
return severity;
|
||||
}
|
||||
|
||||
public void setSeverity(String severity) {
|
||||
this.severity = severity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "AdditionalStatus [statusCode=" + statusCode + ", statusDesc=" + statusDesc + ", severity="
|
||||
+ severity + "]";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class Status {
|
||||
|
||||
@JsonProperty("StatusCode")
|
||||
public String statusCode;
|
||||
@JsonProperty("StatusDesc")
|
||||
public String statusDesc;
|
||||
@JsonProperty("ApplicationName")
|
||||
public String applicationName;
|
||||
@JsonProperty("LineNumber")
|
||||
public int lineNumber;
|
||||
@JsonProperty("AdditionalStatus")
|
||||
public ArrayList<AdditionalStatus> additionalStatus;
|
||||
|
||||
public String getStatusCode() {
|
||||
|
||||
return statusCode;
|
||||
}
|
||||
|
||||
public void setStatusCode(String statusCode) {
|
||||
this.statusCode = statusCode;
|
||||
}
|
||||
|
||||
public String getStatusDesc() {
|
||||
return statusDesc;
|
||||
}
|
||||
|
||||
public void setStatusDesc(String statusDesc) {
|
||||
this.statusDesc = statusDesc;
|
||||
}
|
||||
|
||||
public String getApplicationName() {
|
||||
return applicationName;
|
||||
}
|
||||
|
||||
public void setApplicationName(String applicationName) {
|
||||
this.applicationName = applicationName;
|
||||
}
|
||||
|
||||
public int getLineNumber() {
|
||||
return lineNumber;
|
||||
}
|
||||
|
||||
public void setLineNumber(int lineNumber) {
|
||||
this.lineNumber = lineNumber;
|
||||
}
|
||||
|
||||
public ArrayList<AdditionalStatus> getAdditionalStatus() {
|
||||
return additionalStatus;
|
||||
}
|
||||
|
||||
public void setAdditionalStatus(ArrayList<AdditionalStatus> additionalStatus) {
|
||||
this.additionalStatus = additionalStatus;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Status [statusCode=" + statusCode + ", statusDesc=" + statusDesc + ", applicationName="
|
||||
+ applicationName + ", lineNumber=" + lineNumber + ", additionalStatus=" + additionalStatus + "]";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ResponseBase [msgRsHdr=" + msgRsHdr + ", status=" + status + "]";
|
||||
}
|
||||
|
||||
}
|
||||
@ -2,13 +2,21 @@ package com.banesco.infraestructure.config;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Clase de configuración para APIs. Almacena la información necesaria para
|
||||
* conectarse a un servicio API externo, incluyendo URL, path, configuración de
|
||||
* timeout y parámetros adicionales. Diseñada para ser utilizada como objeto de
|
||||
* configuración en clientes de API y servicios de integración.
|
||||
*/
|
||||
public class ApiConfig {
|
||||
|
||||
private String url;
|
||||
private String path;
|
||||
private Timeout timeout;
|
||||
private Map<String, String> config;
|
||||
|
||||
public ApiConfig() {}
|
||||
public ApiConfig() {
|
||||
}
|
||||
|
||||
public ApiConfig(String url, String path, Timeout timeout, Map<String, String> config) {
|
||||
this.url = url;
|
||||
@ -49,6 +57,12 @@ public class ApiConfig {
|
||||
this.config = config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clase interna que representa la configuración de tiempos de espera
|
||||
* (timeout) para conexiones a APIs. Define los tiempos máximos de espera
|
||||
* para establecer la conexión y para recibir una respuesta, especificados
|
||||
* en milisegundos.
|
||||
*/
|
||||
public static class Timeout {
|
||||
|
||||
private int connect = 15000;
|
||||
|
||||
@ -0,0 +1,91 @@
|
||||
package com.banesco.infraestructure.config;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.banesco.domain.model.RequestBase;
|
||||
import com.banesco.infraestructure.helpers.RequestHelper;
|
||||
import com.banesco.infraestructure.repository.SoapHeadersRepository;
|
||||
|
||||
public class RestClient {
|
||||
private static final Logger logger = Logger.getLogger(RestClient.class.getName());
|
||||
|
||||
private final String headerUrl;
|
||||
private final String idGeneratorUrl;
|
||||
private final String instanceIdPath;
|
||||
private final String requestIdPath;
|
||||
private String instanceId;
|
||||
private final RequestHelper requestHelper;
|
||||
|
||||
// Constructor que recibe las URLs y la instancia de RequestHelper
|
||||
public RestClient(String headerUrl, String idGeneratorUrl, String instanceIdPath, String requestIdPath, RequestHelper requestHelper) {
|
||||
this.headerUrl = headerUrl;
|
||||
this.idGeneratorUrl = idGeneratorUrl;
|
||||
this.instanceIdPath = instanceIdPath;
|
||||
this.requestIdPath = requestIdPath;
|
||||
this.requestHelper = requestHelper;
|
||||
this.init();
|
||||
}
|
||||
|
||||
// Inicializa el Instance ID si no se está ejecutando localmente.
|
||||
private void init() {
|
||||
if (!idGeneratorUrl.contains("localhost")) {
|
||||
System.out.println("Request to getInstanceId");
|
||||
this.instanceId = getInstanceId(); // Obtiene Instance ID
|
||||
System.out.println("Response to getInstanceId: " + this.instanceId);
|
||||
}
|
||||
}
|
||||
|
||||
public RequestBase.MsgRqHdr getHeader(String headerName) {
|
||||
// Siempre usa SoapHeadersRepository independientemente de si es local o no
|
||||
return SoapHeadersRepository.getHeader(headerName);
|
||||
}
|
||||
|
||||
public String getRequestId() {
|
||||
if (idGeneratorUrl.contains("localhost")) {
|
||||
return requestHelper.getRequestId(instanceId); // Lógica local
|
||||
} else {
|
||||
try {
|
||||
String result = getHttpResponse(idGeneratorUrl + requestIdPath + instanceId); // Reutiliza función HTTP.
|
||||
System.out.println("Response to getRequestId: " + result);
|
||||
return result;
|
||||
} catch (IOException e) {
|
||||
System.err.println("Error getting request ID: " + e.getMessage());
|
||||
return null; // Manejo de error.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String getInstanceId() {
|
||||
if (idGeneratorUrl.contains("localhost")) {
|
||||
return requestHelper.getInstanceId(); // Usa el método de RequestHelper
|
||||
} else {
|
||||
try {
|
||||
return getHttpResponse(idGeneratorUrl + instanceIdPath); // Reutiliza función HTTP.
|
||||
} catch (IOException e) {
|
||||
System.err.println("Error getting instance ID: " + e.getMessage());
|
||||
return null; // Manejo de error.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Función reutilizable para realizar llamadas HTTP GET.
|
||||
private String getHttpResponse(String urlStr) throws IOException {
|
||||
URL url = new URL(urlStr);
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestMethod("GET");
|
||||
|
||||
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
|
||||
StringBuilder response = new StringBuilder();
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
response.append(line);
|
||||
}
|
||||
return response.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package com.banesco.infraestructure.helpers;
|
||||
|
||||
|
||||
/**
|
||||
* Clase utilitaria para operaciones relacionadas con cuentas bancarias.
|
||||
* Proporciona métodos para manipular y formatear información de cuentas.
|
||||
*/
|
||||
public class AccountHelper {
|
||||
|
||||
/**
|
||||
* Enmascara un número de cuenta, mostrando solo los primeros 4
|
||||
* y últimos 4 Los dígitos intermedios son reemplazados por asteriscos para proteger la
|
||||
* información sensible del cliente.
|
||||
*
|
||||
* @param clearAccountId El número de cuenta completo sin enmascarar
|
||||
* @return El número de cuenta enmascarado en formato "XXXX************YYYY"
|
||||
*/
|
||||
public static String getMaskedAccountId(String clearAccountId) {
|
||||
return clearAccountId.substring(0, 4) + "************" + clearAccountId.substring(clearAccountId.length() - 4);
|
||||
|
||||
}
|
||||
}
|
||||
@ -3,10 +3,17 @@ package com.banesco.infraestructure.helpers;
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.DateTimeException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Date;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Clase utilitaria para operaciones relacionadas con fechas y horas.
|
||||
* Proporciona métodos para validar, comparar y calcular períodos entre fechas.
|
||||
*/
|
||||
public class DateHelper {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(DateHelper.class.getName());
|
||||
@ -14,13 +21,15 @@ public class DateHelper {
|
||||
|
||||
/**
|
||||
* Verifica si la hora actual está dentro del rango de horas proporcionado.
|
||||
* Si las horas de inicio y fin son iguales, devuelve false.
|
||||
* Si las horas de inicio y fin son iguales, devuelve false. Maneja
|
||||
* correctamente los rangos que cruzan la medianoche.
|
||||
*
|
||||
* @param inputHourOne Hora de inicio (formato HH:mm).
|
||||
* @param inputHourTwo Hora de fin (formato HH:mm).
|
||||
* @return true si la hora actual está dentro del rango, false de lo
|
||||
* contrario.
|
||||
* @throws ParseException Si ocurre un error al analizar las horas.
|
||||
* @param inputHourOne Hora de inicio en formato HH:mm
|
||||
* @param inputHourTwo Hora de fin en formato HH:mm
|
||||
* @return true si la hora actual está dentro del rango, false en caso
|
||||
* contrario
|
||||
* @throws ParseException Si ocurre un error al analizar las horas
|
||||
* proporcionadas
|
||||
*/
|
||||
public static boolean isTimeInRange(String inputHourOne, String inputHourTwo) throws ParseException {
|
||||
if (inputHourOne.equals(inputHourTwo)) {
|
||||
@ -52,4 +61,33 @@ public class DateHelper {
|
||||
|
||||
return isInRange;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calcula el número de días entre dos fechas.
|
||||
*
|
||||
* @param startDate Fecha de inicio en formato ISO (yyyy-MM-dd)
|
||||
* @param endDate Fecha de fin en formato ISO (yyyy-MM-dd)
|
||||
* @return El número de días entre las fechas o -1 si ocurre un error al
|
||||
* procesar las fechas
|
||||
*/
|
||||
public long daysBetweenTwoDates(String startDate, String endDate) {
|
||||
try {
|
||||
return ChronoUnit.DAYS.between(LocalDate.parse(startDate), LocalDate.parse(endDate));
|
||||
} catch (DateTimeException dte) {
|
||||
return -1L;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifica si la fecha de inicio es anterior o igual a la fecha de fin.
|
||||
*
|
||||
* @param startDate Fecha de inicio en formato ISO (yyyy-MM-dd)
|
||||
* @param endDate Fecha de fin en formato ISO (yyyy-MM-dd)
|
||||
* @return true si startDate es anterior o igual a endDate, false en caso
|
||||
* contrario
|
||||
*/
|
||||
public boolean isStartDateBeforeEndDate(String startDate, String endDate) {
|
||||
return LocalDate.parse(startDate).isBefore(LocalDate.parse(endDate))
|
||||
|| LocalDate.parse(startDate).isEqual(LocalDate.parse(endDate));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,12 @@
|
||||
package com.banesco.infraestructure.helpers;
|
||||
|
||||
/**
|
||||
* Clase utilitaria para la generación de mensajes de registro (logging).
|
||||
* Facilita la creación de cadenas formateadas para registrar información de
|
||||
* solicitudes y respuestas, tanto públicas como privadas, así como mensajes de
|
||||
* error. Utiliza un formato estandarizado para mejorar la legibilidad y
|
||||
* facilitar el análisis de los registros del sistema.
|
||||
*/
|
||||
public class LoggerHelper {
|
||||
|
||||
/**
|
||||
|
||||
@ -7,9 +7,20 @@ import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.banesco.domain.model.Device;
|
||||
|
||||
/**
|
||||
* Clase utilitaria para operaciones relacionadas con solicitudes HTTP y
|
||||
* generación de identificadores. Proporciona métodos para generar IDs únicos,
|
||||
* obtener información del cliente y gestionar información del dispositivo.
|
||||
*/
|
||||
public class RequestHelper {
|
||||
|
||||
private final boolean readDeviceFromRequest;
|
||||
|
||||
/**
|
||||
* Nombres de cabeceras HTTP que pueden contener la dirección IP del
|
||||
* cliente. Se revisan en orden para encontrar la IP real considerando
|
||||
* proxies y balanceadores.
|
||||
*/
|
||||
private static final String[] IP_HEADER_NAMES = {
|
||||
"X-Forwarded-For",
|
||||
"Proxy-Client-IP",
|
||||
@ -25,8 +36,9 @@ public class RequestHelper {
|
||||
};
|
||||
|
||||
/**
|
||||
* Constructor de RequestHelper. Lee la propiedad de configuracion
|
||||
* 'api.server-request.read-device' de las propiedades del sistema
|
||||
* Constructor de RequestHelper. Inicializa la configuración para la lectura
|
||||
* de información del dispositivo. Lee la propiedad de configuración
|
||||
* 'api.server-request.read-device' del sistema.
|
||||
*/
|
||||
public RequestHelper() {
|
||||
// Lee la propiedad del sistema. Si no existe, asume false por defecto.
|
||||
@ -35,39 +47,92 @@ public class RequestHelper {
|
||||
}
|
||||
|
||||
/**
|
||||
* Genera un ID de instancia único.
|
||||
* Genera un ID de instancia único con un prefijo específico. Útil para
|
||||
* identificar instancias del servidor o aplicación.
|
||||
*
|
||||
* @return Un ID de instancia con el prefijo "INST".
|
||||
* @return Un ID de instancia con el prefijo "INST" seguido de 10 caracteres
|
||||
* alfanuméricos aleatorios
|
||||
*/
|
||||
public String getInstanceId() {
|
||||
return "INST" + RandomStringUtils.randomAlphanumeric(10);
|
||||
}
|
||||
|
||||
/**
|
||||
* Genera un ID de solicitud único basado en el ID de instancia.
|
||||
* Genera un ID de solicitud único basado en el ID de instancia. Combina el
|
||||
* ID de instancia con caracteres aleatorios para crear un identificador
|
||||
* único.
|
||||
*
|
||||
* @param instanceId El ID de la instancia.
|
||||
* @return Un ID de solicitud con el prefijo "REQ".
|
||||
* @param instanceId El ID de la instancia a incluir en el ID de solicitud
|
||||
* @return Un ID de solicitud en formato [instanceId]REQ[20 caracteres
|
||||
* aleatorios]
|
||||
*/
|
||||
public String getRequestId(String instanceId) {
|
||||
return instanceId + "REQ" + RandomStringUtils.randomAlphanumeric(20);
|
||||
}
|
||||
|
||||
/**
|
||||
* Genera un ID de solicitud único.
|
||||
* Genera un ID de solicitud único sin necesidad de proporcionar un ID de
|
||||
* instancia. Crea un nuevo ID de instancia y lo utiliza para generar el ID
|
||||
* de solicitud.
|
||||
*
|
||||
* @return Un ID de solicitud con el prefijo "REQ".
|
||||
* @return Un ID de solicitud completo con instancia generada
|
||||
* automáticamente
|
||||
*/
|
||||
public String getRequestId() {
|
||||
return getInstanceId() + "REQ" + RandomStringUtils.randomAlphanumeric(20);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtiene la dirección IP remota del cliente a partir de la solicitud HTTP.
|
||||
* Genera un identificador de sesión (SID) aleatorio.
|
||||
*
|
||||
* @param request La solicitud HTTP.
|
||||
* @return Un string de 20 caracteres alfanuméricos aleatorios
|
||||
*/
|
||||
public String getSid() {
|
||||
return RandomStringUtils.randomAlphanumeric(20);
|
||||
}
|
||||
|
||||
/**
|
||||
* Genera un ID de transacción numérico de 11 dígitos.
|
||||
*
|
||||
* @return Un string de 11 caracteres numéricos aleatorios
|
||||
*/
|
||||
public String getTransactionId() {
|
||||
return RandomStringUtils.randomNumeric(11);
|
||||
}
|
||||
|
||||
/**
|
||||
* Genera un ID de transacción numérico con el número de dígitos
|
||||
* especificado.
|
||||
*
|
||||
* @param numDigitos El número de dígitos que debe tener el ID generado
|
||||
* @return Un string de caracteres numéricos aleatorios con la longitud
|
||||
* especificada
|
||||
*/
|
||||
public String getTransactionId(Integer numDigitos) {
|
||||
return RandomStringUtils.randomNumeric(numDigitos);
|
||||
}
|
||||
|
||||
/**
|
||||
* Genera una referencia Banesco alfanumérica con el número de dígitos
|
||||
* especificado.
|
||||
*
|
||||
* @param numDigitos El número de dígitos que debe tener la referencia
|
||||
* generada
|
||||
* @return Un string de caracteres alfanuméricos aleatorios con la longitud
|
||||
* especificada
|
||||
*/
|
||||
public String getRefBanesco(Integer numDigitos) {
|
||||
return RandomStringUtils.randomAlphanumeric(numDigitos);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtiene la dirección IP remota del cliente a partir de la solicitud HTTP.
|
||||
* Revisa varias cabeceras HTTP que podrían contener la IP real del cliente
|
||||
* considerando proxies y balanceadores de carga.
|
||||
*
|
||||
* @param request La solicitud HTTP
|
||||
* @return La dirección IP remota del cliente, o "0.0.0.0" si la solicitud
|
||||
* es nula.
|
||||
* es nula
|
||||
*/
|
||||
public String getRemoteIP(HttpServletRequest request) {
|
||||
if (request == null) {
|
||||
@ -86,11 +151,14 @@ public class RequestHelper {
|
||||
|
||||
/**
|
||||
* Llena la información del dispositivo remoto del cliente en el objeto
|
||||
* Device.
|
||||
* Device. Si se configura readDeviceFromRequest como true, siempre se
|
||||
* obtendrá la información del dispositivo desde la solicitud HTTP,
|
||||
* independientemente de si ya existe.
|
||||
*
|
||||
* @param servletRequest La solicitud HTTP.
|
||||
* @param device El objeto Device a llenar.
|
||||
* @return El objeto Device llenado con la información del cliente.
|
||||
* @param servletRequest La solicitud HTTP
|
||||
* @param device El objeto Device existente a actualizar o null para crear
|
||||
* uno nuevo
|
||||
* @return El objeto Device con la información del cliente actualizada
|
||||
*/
|
||||
public Device fillRemoteDevice(HttpServletRequest servletRequest, Device device) {
|
||||
Device.Builder deviceBuilder = (device == null) ? Device.builder() : Device.builder()
|
||||
|
||||
@ -2,6 +2,12 @@ package com.banesco.infraestructure.helpers;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* Clase utilitaria para operaciones con cadenas de texto (strings). Proporciona
|
||||
* métodos para validar, manipular y formatear cadenas de texto. Incluye
|
||||
* funcionalidades como verificación de tipos numéricos, validación de cadenas
|
||||
* no vacías y funciones de formato como relleno de caracteres.
|
||||
*/
|
||||
public class StringHelper {
|
||||
|
||||
/**
|
||||
|
||||
@ -0,0 +1,53 @@
|
||||
package com.banesco.infraestructure.repository;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.sql.Timestamp;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Objects;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.banesco.domain.model.RequestBase;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
public class SoapHeadersRepository {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(MessageRepository.class.getName());
|
||||
|
||||
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
|
||||
public static final DateTimeFormatter DATE_TIME_YYYY_MM_dd = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
public static final DateTimeFormatter DATE_TIME_HH_mm_ss = DateTimeFormatter.ofPattern("HH:mm:ss");
|
||||
|
||||
public static RequestBase.MsgRqHdr getHeader(String headerName) {
|
||||
RequestBase.MsgRqHdr msgRqHdr = null;
|
||||
|
||||
try {
|
||||
InputStream in = Thread.currentThread().getContextClassLoader()
|
||||
.getResourceAsStream("headers/" + headerName + ".json");
|
||||
msgRqHdr = OBJECT_MAPPER.readValue(Objects.requireNonNull(in), RequestBase.MsgRqHdr.class);
|
||||
} catch (IOException e) {
|
||||
logger.log(Level.WARNING, String.format("ERROR: Path /headers/%s", headerName));
|
||||
// o lanzar una excepcion.
|
||||
return null;
|
||||
}
|
||||
|
||||
if (msgRqHdr != null) {
|
||||
Timestamp dateHour = Timestamp.valueOf(LocalDateTime.now(ZoneId.of("America/Caracas")));
|
||||
|
||||
String date = new SimpleDateFormat("yyyy-MM-dd").format(dateHour);
|
||||
String hour = new SimpleDateFormat("HH:mm:ss").format(dateHour);
|
||||
|
||||
msgRqHdr.setMessageTime(hour);
|
||||
msgRqHdr.getNetworkTrnInfo().setTransactionDate(date);
|
||||
msgRqHdr.getNetworkTrnInfo().setTransactionTime(hour);
|
||||
|
||||
return msgRqHdr;
|
||||
} else {
|
||||
return msgRqHdr;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5,7 +5,15 @@ import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Clase para validación de fechas con configuración flexible. Permite validar
|
||||
* fechas en diferentes formatos, comprobar rangos de años y verificar la
|
||||
* correcta formación de componentes de fecha (año, mes, día). Implementa el
|
||||
* patrón Builder para facilitar la configuración personalizada de los
|
||||
* parámetros de validación.
|
||||
*/
|
||||
public class DateValidator {
|
||||
|
||||
private final DateTimeFormatter dateFormatter;
|
||||
private final Pattern datePattern;
|
||||
private final int minYear;
|
||||
@ -19,6 +27,7 @@ public class DateValidator {
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
|
||||
private DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
|
||||
private String dateFormatRegex = "(\\d{4})/(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])";
|
||||
private int minYear = 1900;
|
||||
|
||||
@ -2,6 +2,12 @@ package com.banesco.infraestructure.utils;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Clase para validar números telefónicos según patrones específicos. Utiliza
|
||||
* expresiones regulares para verificar que los números telefónicos cumplan con
|
||||
* el formato esperado, permitiendo diferentes configuraciones según los
|
||||
* requisitos regionales o de formato de la aplicación.
|
||||
*/
|
||||
public class PhoneNumberValidator {
|
||||
|
||||
private final Pattern pattern;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user