package com.uaihebert.uaimockserver.dto.factory;
import com.uaihebert.uaimockserver.dto.model.UaiWebSocketLogDTO;
import com.uaihebert.uaimockserver.dto.model.UaiLogPairValueDTO;
import com.uaihebert.uaimockserver.dto.model.UaiWebSocketLogRequestDTO;
import io.undertow.server.HttpServerExchange;
import io.undertow.util.HeaderValues;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Deque;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public final class UaiWebSocketLogDTOFactory {
private UaiWebSocketLogDTOFactory() {
}
public static UaiWebSocketLogDTO create(final HttpServerExchange exchange) {
UaiWebSocketLogDTO uaiWebSocketLogDTO = new UaiWebSocketLogDTO();
final UaiWebSocketLogRequestDTO logRequestDTO = createLogRequest(exchange);
uaiWebSocketLogDTO.setLogRequest(logRequestDTO);
return uaiWebSocketLogDTO;
}
private static UaiWebSocketLogRequestDTO createLogRequest(final HttpServerExchange exchange) {
final UaiWebSocketLogRequestDTO logRequestDTO = new UaiWebSocketLogRequestDTO();
logRequestDTO.setMethod(exchange.getRequestMethod().toString());
logRequestDTO.setArrivedAt(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
logRequestDTO.setWhoInvokedAddress(exchange.getSourceAddress().getAddress().toString());
logRequestDTO.setPath(exchange.getRequestPath());
if (exchange.getRequestHeaders().get("Content-Type") != null) {
logRequestDTO.setContentType(exchange.getRequestHeaders().get("Content-Type").getFirst());
}
createHeaderList(exchange, logRequestDTO);
createQueryParamList(exchange, logRequestDTO);
return logRequestDTO;
}
private static void createQueryParamList(final HttpServerExchange exchange, final UaiWebSocketLogRequestDTO logRequestDTO) {
for (Map.Entry<String, Deque<String>> queryParamValue : exchange.getQueryParameters().entrySet()) {
final String queryParamName = queryParamValue.getKey();
final Deque<String> stringDeque = queryParamValue.getValue();
final List<String> valueList = new ArrayList<String>();
final Iterator<String> dequeIterator = stringDeque.iterator();
while(dequeIterator.hasNext()) {
final String value = dequeIterator.next();
valueList.add(value);
}
final UaiLogPairValueDTO pairValueDTO = new UaiLogPairValueDTO(queryParamName, valueList);
logRequestDTO.getQueryParamValueList().add(pairValueDTO);
}
}
private static void createHeaderList(final HttpServerExchange exchange, final UaiWebSocketLogRequestDTO logRequestDTO) {
for (HeaderValues headerValues : exchange.getRequestHeaders()) {
final String headerName = headerValues.getHeaderName().toString();
final String[] valueAsArray = headerValues.toArray();
final UaiLogPairValueDTO pairValueDTO = new UaiLogPairValueDTO(headerName, Arrays.asList(valueAsArray));
logRequestDTO.getHeaderValueList().add(pairValueDTO);
}
}
}