package net.gepafin.tendermanagement.util; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.json.JsonReadFeature; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.type.TypeFactory; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import io.micrometer.common.util.StringUtils; import org.apache.commons.collections4.MapUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.List; import java.util.Map; import java.util.function.Consumer; import java.util.function.Supplier; import java.util.stream.Collectors; public class Utils { public static final Logger log = LoggerFactory.getLogger(Utils.class); private static final ObjectMapper mapper = new ObjectMapper() .registerModule(new JavaTimeModule()) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); public static U convertObject(T source, Class destinationClass) { try { return mapper.convertValue(source, destinationClass); } catch (Exception e) { log.error("Error converting object: " + e.getMessage(), e); } return null; } public static List convertSourceListToDestinationList(List sourceList, Class destinationClass) { try { return sourceList.stream() .map(source -> mapper.convertValue(source, destinationClass)) .collect(Collectors.toList()); } catch (Exception e) { log.error("Error converting list: " + e.getMessage(), e); } return null; } public static List convertSourceToList(T source, Class destinationClass) { try { // Convert single source object to a single-element list of destination type return List.of(mapper.convertValue(source, destinationClass)); } catch (Exception e) { log.error("Error converting single object to list: " + e.getMessage(), e); } return null; } public static String extractFileName(String filePath) { if (filePath == null || filePath.isEmpty()) { return null; } int lastSlashIndex = filePath.lastIndexOf('/'); if (lastSlashIndex >= 0 && lastSlashIndex < filePath.length() - 1) { return filePath.substring(lastSlashIndex + 1); } else { return filePath; } } public static String decodeBase64String(String decodedString) { if (StringUtils.isBlank(decodedString)) { return decodedString; } byte[] decode = Base64.getDecoder().decode(decodedString.getBytes(StandardCharsets.UTF_8)); return new String(decode, StandardCharsets.UTF_8); } public static void setIfNotNull(Consumer setter, T value) { if (value != null) { setter.accept(value); } } public static void setIfUpdated(Supplier getter, Consumer setter, T newValue) { T currentValue = getter.get(); if (newValue != null && !newValue.equals(currentValue)) { setter.accept(newValue); } } public static String convertListToJsonString(List list) { try { return mapper.writeValueAsString(list); } catch (JsonProcessingException e) { e.printStackTrace(); // Handle exception or throw a custom exception return null; } } public static List convertJsonStringToList(String jsonString, Class clazz) { try { TypeReference> typeRef = new TypeReference>() { @Override public Type getType() { return TypeFactory.defaultInstance().constructCollectionType(List.class, clazz); } }; return mapper.readValue(jsonString, typeRef); } catch (Exception e) { e.printStackTrace(); // Handle the exception appropriately (e.g., throw a custom exception) return null; } } public static String convertMapIntoJsonString(Map map) { try { ObjectMapper mapper = new ObjectMapper(); if (MapUtils.isNotEmpty(map)) { return mapper.writeValueAsString(map); } } catch (JsonProcessingException e) { log.error(e.getMessage()); } return null; } public static Map convertIntoJson(String jsonString) { if (jsonString != null && !jsonString.isEmpty()) { try { ObjectMapper mapper = new ObjectMapper(); mapper.configure(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS.mappedFeature(), true); return mapper.readValue(jsonString, Map.class); } catch (Exception e) { log.error(e.getMessage()); } } return null; } public static U convertSourceObjectToDestinationObject(T source, Class destinationClass) { try { mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); mapper.registerModule(new JavaTimeModule()); return mapper.convertValue(source, destinationClass); } catch (Exception e) { log.error("Error converting object: " + e.getMessage(), e); } return null; } }