Content is user-generated and unverified.
// Constants class for better maintainability public class TransportConstants { public static final double AIR_FREIGHT_FULL = 100.0; public static final double AIR_FREIGHT_NONE = 0.0; // Country codes public static final String GERMANY = "DE"; public static final String HUNGARY = "HU"; public static final String GREAT_BRITAIN = "GB"; public static final String UNITED_STATES = "US"; public static final String MEXICO = "MX"; public static final String SOUTH_AFRICA = "ZA"; public static final String CHINA = "CN"; // Plant codes public static final String OXFORD_PLANT = "OXF"; // Transport modes grouped by type public static final List<String> AIR_TRANSPORT_MODES = List.of("AIR_BCC", "AIR_DIRECT"); public static final List<String> SEA_TRANSPORT_MODES = List.of("SEA_BCC", "SEA_DIRECT"); public static final List<String> STANDARD_MODES = List.of("BN", "GV", "JIX", "ALV"); public static final List<String> UK_FERRY_MODES = List.of("FN", "GV", "JIX", "ALV"); public static final List<String> NAFTA_MODES = List.of("NAFTA_TRUCK", "NAFTA_FTL"); public static final List<String> SOUTH_AFRICA_MODES = List.of("JIX_ZA", "GB_ZA"); public static final List<String> CHINA_MODES = List.of("LTL_CN", "JIT_CN", "JIS53_CN", "FTL_CN", "JIS50_CN"); } // Improved validation method private static void validateSupplierAirFreightAndTransportMode(PlantDTO plantDTO, SupplierDetailsDTO supplier) { if (supplier.getAirFreight() == null) { return; // Early return if no air freight specified } List<String> allowedTransportModes = determineAllowedTransportModes(plantDTO, supplier); if (!allowedTransportModes.contains(supplier.getTransportMode())) { throw new ValidationException( ExceptionResponse.of(ExceptionCodeEnum.SUPPLIER_AIR_FREIGHT_COUNTRY_TRANSPORT_MODE_MISMATCH) ); } } private static List<String> determineAllowedTransportModes(PlantDTO plantDTO, SupplierDetailsDTO supplier) { double airFreight = supplier.getAirFreight(); if (airFreight == TransportConstants.AIR_FREIGHT_FULL) { return TransportConstants.AIR_TRANSPORT_MODES; } if (airFreight == TransportConstants.AIR_FREIGHT_NONE) { return getAllowedModesForZeroAirFreight(plantDTO, supplier); } if (airFreight > 0.0 && airFreight < TransportConstants.AIR_FREIGHT_FULL) { return TransportConstants.SEA_TRANSPORT_MODES; } return Collections.emptyList(); } private static List<String> getAllowedModesForZeroAirFreight(PlantDTO plantDTO, SupplierDetailsDTO supplier) { String country = plantDTO.getCountry(); return switch (country.toUpperCase()) { case TransportConstants.GERMANY, TransportConstants.HUNGARY -> combineTransportModes(TransportConstants.STANDARD_MODES, TransportConstants.SEA_TRANSPORT_MODES); case TransportConstants.GREAT_BRITAIN -> isOxfordPlant(plantDTO) ? combineTransportModes(TransportConstants.STANDARD_MODES, TransportConstants.SEA_TRANSPORT_MODES) : combineTransportModes(TransportConstants.UK_FERRY_MODES, TransportConstants.SEA_TRANSPORT_MODES); case TransportConstants.UNITED_STATES, TransportConstants.MEXICO -> getNaftaTransportModes(plantDTO, supplier); case TransportConstants.SOUTH_AFRICA -> combineMultipleTransportModes( TransportConstants.SOUTH_AFRICA_MODES, TransportConstants.SEA_TRANSPORT_MODES, TransportConstants.STANDARD_MODES, TransportConstants.NAFTA_MODES ); case TransportConstants.CHINA -> combineMultipleTransportModes( TransportConstants.SEA_TRANSPORT_MODES, TransportConstants.CHINA_MODES, TransportConstants.STANDARD_MODES, TransportConstants.NAFTA_MODES ); default -> Collections.emptyList(); }; } private static boolean isOxfordPlant(PlantDTO plantDTO) { return TransportConstants.OXFORD_PLANT.equalsIgnoreCase(plantDTO.getRnowPlantCode()); } private static List<String> getNaftaTransportModes(PlantDTO plantDTO, SupplierDetailsDTO supplier) { List<String> baseModes = combineMultipleTransportModes( TransportConstants.NAFTA_MODES, TransportConstants.STANDARD_MODES, TransportConstants.SEA_TRANSPORT_MODES ); // Add JIX if supplier and plant are in the same country if (supplier.getCountry().equals(plantDTO.getCountry())) { return combineTransportModes(List.of("JIX"), baseModes); } return baseModes; } // Helper methods for combining transport modes private static List<String> combineTransportModes(List<String> modes1, List<String> modes2) { List<String> combined = new ArrayList<>(modes1); combined.addAll(modes2); return combined; } @SafeVarargs private static List<String> combineMultipleTransportModes(List<String>... modeLists) { return Arrays.stream(modeLists) .flatMap(List::stream) .collect(Collectors.toList()); } // Alternative approach using a configuration-based strategy (more advanced) public class TransportModeConfigurationStrategy { private static final Map<String, Function<PlantDTO, List<String>>> COUNTRY_STRATEGIES = Map.of( TransportConstants.GERMANY, plant -> combineTransportModes(TransportConstants.STANDARD_MODES, TransportConstants.SEA_TRANSPORT_MODES), TransportConstants.HUNGARY, plant -> combineTransportModes(TransportConstants.STANDARD_MODES, TransportConstants.SEA_TRANSPORT_MODES), TransportConstants.GREAT_BRITAIN, TransportModeConfigurationStrategy::getUkTransportModes, TransportConstants.SOUTH_AFRICA, plant -> combineMultipleTransportModes( TransportConstants.SOUTH_AFRICA_MODES, TransportConstants.SEA_TRANSPORT_MODES, TransportConstants.STANDARD_MODES, TransportConstants.NAFTA_MODES ) // Add other countries as needed ); public static List<String> getTransportModesForCountry(PlantDTO plantDTO) { return COUNTRY_STRATEGIES .getOrDefault(plantDTO.getCountry().toUpperCase(), plant -> Collections.emptyList()) .apply(plantDTO); } private static List<String> getUkTransportModes(PlantDTO plantDTO) { return isOxfordPlant(plantDTO) ? combineTransportModes(TransportConstants.STANDARD_MODES, TransportConstants.SEA_TRANSPORT_MODES) : combineTransportModes(TransportConstants.UK_FERRY_MODES, TransportConstants.SEA_TRANSPORT_MODES); } }
Content is user-generated and unverified.
    Improved Supplier Validation Code | Claude