package com.eactive.httpmockserver.api.mapper; import com.eactive.httpmockserver.api.dto.MockHeaderDTO; import com.eactive.httpmockserver.api.dto.MockResponseDTO; import com.eactive.httpmockserver.api.dto.MockRouteDTO; import com.eactive.httpmockserver.api.entity.MockResponse; import com.eactive.httpmockserver.api.entity.MockRoute; import com.eactive.httpmockserver.common.mapper.CommonMapper; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Named; import org.mapstruct.ReportingPolicy; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Mapper(componentModel = "spring", uses = {CommonMapper.class}, unmappedTargetPolicy = ReportingPolicy.IGNORE) @Component public abstract class MockRouteMapper { public abstract MockRoute map(MockRouteDTO dto); public abstract MockRouteDTO map(MockRoute entity); @Mapping(target = "headers", source = "headers", qualifiedByName = "mapHeadersToMap") @Mapping(target ="defaultResponse", source = "defaultResponse", qualifiedByName = "mapEntityDefaultResponse") public abstract MockResponse map(MockResponseDTO dto); @Mapping(target = "headers", source = "headers", qualifiedByName = "mapHeadersToList") @Mapping(target ="defaultResponse", source = "defaultResponse", qualifiedByName = "mapDTODefaultResponse") public abstract MockResponseDTO map(MockResponse entity); @Named("mapDTODefaultResponse") public String map(boolean value) { return value ? "true" : "false"; } @Named("mapEntityDefaultResponse") public boolean map(String value) { if (value == null) return false; return value.equals("true"); } @Named("mapHeadersToList") public List mapHeadersToList(Map headers) { List list = new ArrayList<>(); if (headers != null) { headers.forEach((key, value) -> { MockHeaderDTO header = new MockHeaderDTO(); header.setKey(key); header.setValue(value); list.add(header); }); } return list; } @Named("mapHeadersToMap") public Map mapHeadersToMap(List headers) { Map map = new HashMap<>(); if (headers != null) { headers.forEach(header -> { map.put(header.getKey(), header.getValue()); }); } return map; } }