package com.uaihebert.uaimockserver.log.gui; import com.uaihebert.uaimockserver.context.UaiWebSocketContext; import com.uaihebert.uaimockserver.dto.factory.UaiWebSocketLogDTOFactory; import com.uaihebert.uaimockserver.dto.factory.UaiWebSocketLogResponseDTOFactory; import com.uaihebert.uaimockserver.dto.model.UaiWebSocketLogDTO; import com.uaihebert.uaimockserver.dto.model.UaiWebSocketLogResponseDTO; import com.uaihebert.uaimockserver.model.UaiResponse; import io.undertow.server.HttpServerExchange; public final class UaiWebSocketLogManager { private static final String ERROR_MESSAGE_BODY = "{\"errorMessage\": \"We have a problem with your request. Did you sent everything that was required? \n " + "The error message is: [%s]\"}"; private static final ThreadLocal<UaiWebSocketLogDTO> THREAD_LOCAL = new ThreadLocal<UaiWebSocketLogDTO>(); private UaiWebSocketLogManager() { } public static void start(final HttpServerExchange exchange) { final UaiWebSocketLogDTO uaiWebSocketLogDTO = UaiWebSocketLogDTOFactory.create(exchange); THREAD_LOCAL.set(uaiWebSocketLogDTO); } public static void addLogText(final String text) { getCurrentLog().addTextLog(text); } public static void log() { final UaiWebSocketLogDTO uaiWebSocketLogDTO = getCurrentLog(); THREAD_LOCAL.remove(); UaiWebSocketContext.sendLog(uaiWebSocketLogDTO); } private static UaiWebSocketLogDTO getCurrentLog() { final UaiWebSocketLogDTO uaiWebSocketLogDTO = THREAD_LOCAL.get(); if (uaiWebSocketLogDTO == null) { // the tests and the GUI requests will not have the scope return new UaiWebSocketLogDTO(); } return uaiWebSocketLogDTO; } public static void logResponse(final UaiResponse uaiResponse) { final UaiWebSocketLogResponseDTO logResponseDTO = UaiWebSocketLogResponseDTOFactory.create(uaiResponse); getCurrentLog().setLogResponse(logResponseDTO); } public static void exceptionDetected(final String message) { getCurrentLog().setFinishedWithError(); final UaiWebSocketLogResponseDTO logResponseDTO = new UaiWebSocketLogResponseDTO(); logResponseDTO.setStatusCode(500); logResponseDTO.setBody(String.format(ERROR_MESSAGE_BODY, message)); getCurrentLog().setLogResponse(logResponseDTO); } }