Untitled

 avatar
unknown
java
2 years ago
3.6 kB
7
Indexable
public class HomeQuoteValidatorUtil {

    private static final Comparator<QuoteRequestConfiguration> REQUESTED_CONFIGURATION_COMPARATOR =
            Comparator.comparing(c -> c.getContentsCover().getValue());

    private static final Comparator<QuoteData> QUOTE_COMPARATOR =
            Comparator.comparing(HomeQuoteValidatorUtil::getContentsCover)
                      .thenComparing(HomeQuoteValidatorUtil::getExcess);

    private final AFSProductInformationSerializationHelper productInfoSerializationHelper;

    private final Map<String, List<String>> overrideMap;

    @Inject
    public HomeQuoteValidatorUtil(
            final AFSProductInformationSerializationHelper afsProductInformationSerializationHelper,
            @Named(QUOTE_VALIDATOR_OVERRIDE_MAP_PROVIDER)
            final Map<String, Map<String, List<String>>> homeOverrideMap) {
        this.productInfoSerializationHelper = afsProductInformationSerializationHelper;
        this.overrideMap = homeOverrideMap.get(InsuranceCategory.IdEnum.HOME.getValue());
    }

    public AppConstants.ValidatorState validate(
            final String quoteData,
            final List<QuoteRequestConfiguration> requestedConfigurations) {

        InsurerQuote insurerQuote = productInfoSerializationHelper
                .deSerialize(quoteData, InsurerQuotes.class)
                .get(0);

        List<QuoteData> quotes = insurerQuote.getQuoteData();

        if (requestedConfigurations.size() != quotes.size()) {
            return AppConstants.ValidatorState.Failure;
        }

        final String insurerId = insurerQuote.getInsurerId();

        requestedConfigurations.sort(REQUESTED_CONFIGURATION_COMPARATOR);
        quotes.sort(QUOTE_COMPARATOR);

        for (int i = 0; i < quotes.size(); i++) {
            final QuoteData quote = quotes.get(i);
            final QuoteRequestConfiguration requestedConfiguration = requestedConfigurations.get(i);

            if (!isExcessEqual(requestedConfiguration, quote.getQuoteConfigurationDimensions())) {
                final List<String> insurerOverride = overrideMap
                        .get(ProductConfigurationDimensionName.EXCESS.toString());
                if (insurerOverride != null && insurerOverride.contains(insurerId)) {
                    return AppConstants.ValidatorState.Skipped;
                }
                return AppConstants.ValidatorState.Failure;
            }

            if (!isContentsCoverEqual(requestedConfiguration, quote.getQuoteConfigurationDimensions())) {
                final List<String> insurerOverride = overrideMap
                        .get(ProductConfigurationDimensionName.CONTENTSCOVER.toString());
                if (insurerOverride != null && insurerOverride.contains(insurerId)) {
                    return AppConstants.ValidatorState.Skipped;
                }
                return AppConstants.ValidatorState.Failure;
            }
        }

        return AppConstants.ValidatorState.Success;
    }

    private static BigDecimal getAmount(final QuoteData quote, final ProductConfigurationDimensionName dimensionName) {
        return quote.getQuoteConfigurationDimensions()
                    .stream()
                    .filter(d -> d.getDimensionName() == dimensionName)
                    .map(d -> ((PlainTextNumber) d.getDimension().getAmount().getValue()).getData())
                    .findFirst()
                    .orElse(BigDecimal.ZERO);
    }

    private static BigDecimal getContentsCover(final QuoteData quote) {
        return getAmount(quote, Product
Editor is loading...