All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sportradar.unifiedodds.sdk.impl.oddsentities.markets.MarketDefinitionImpl Maven / Gradle / Ivy

/*
 * Copyright (C) Sportradar AG. See LICENSE for full license governing this code
 */

package com.sportradar.unifiedodds.sdk.impl.oddsentities.markets;

import com.google.common.base.Preconditions;
import com.sportradar.unifiedodds.sdk.ExceptionHandlingStrategy;
import com.sportradar.unifiedodds.sdk.caching.markets.MarketDescriptionProvider;
import com.sportradar.unifiedodds.sdk.entities.SportEvent;
import com.sportradar.unifiedodds.sdk.entities.markets.MarketAttribute;
import com.sportradar.unifiedodds.sdk.entities.markets.MarketDescription;
import com.sportradar.unifiedodds.sdk.entities.markets.MarketMappingData;
import com.sportradar.unifiedodds.sdk.exceptions.ObjectNotFoundException;
import com.sportradar.unifiedodds.sdk.exceptions.internal.CacheItemNotFoundException;
import com.sportradar.unifiedodds.sdk.impl.UnifiedFeedConstants;
import com.sportradar.unifiedodds.sdk.oddsentities.MarketDefinition;
import com.sportradar.utils.URN;

import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * Created on 23/06/2017.
 * // TODO @eti: Javadoc
 */
class MarketDefinitionImpl implements MarketDefinition {
    private final SportEvent sportEvent;
    private final MarketDescription marketDescriptor;
    private final URN sportId;
    private final int producerId;
    private final Map specifiersMap;
    private final MarketDescriptionProvider descriptorProvider;
    private final Locale defaultLocale;
    private final ExceptionHandlingStrategy exceptionHandlingStrategy;

    MarketDefinitionImpl(SportEvent sportEvent, MarketDescription marketDescriptor, URN sportId, int producerId,
                         Map specifiersMap, MarketDescriptionProvider descriptorProvider, Locale defaultLocale,
                         ExceptionHandlingStrategy exceptionHandlingStrategy) {
        Preconditions.checkNotNull(sportEvent);
        Preconditions.checkNotNull(marketDescriptor);
        Preconditions.checkNotNull(sportId);
        Preconditions.checkNotNull(descriptorProvider);
        Preconditions.checkNotNull(defaultLocale);
        Preconditions.checkArgument(producerId > 0);
        Preconditions.checkNotNull(exceptionHandlingStrategy);

        this.sportEvent = sportEvent;
        this.marketDescriptor = marketDescriptor;
        this.sportId = sportId;
        this.producerId = producerId;
        this.specifiersMap = specifiersMap;
        this.descriptorProvider = descriptorProvider;
        this.defaultLocale = defaultLocale;
        this.exceptionHandlingStrategy = exceptionHandlingStrategy;
    }

    @Deprecated
    @Override
    public String getIncludesOutcomesOfType() {
        return marketDescriptor.getIncludesOutcomesOfType();
    }

    @Override
    public String getOutcomeType() {
        return marketDescriptor.getOutcomeType();
    }

    @Override
    public String getNameTemplate() {
        return getNameTemplate(defaultLocale);
    }

    @Override
    public String getNameTemplate(Locale locale) {
        MarketDescription translatedDescriptor = null;
        try {
            translatedDescriptor = descriptorProvider.getMarketDescription(this.marketDescriptor.getId(), specifiersMap, Collections.singletonList(locale), false);
        } catch (CacheItemNotFoundException e) {
            if (exceptionHandlingStrategy == ExceptionHandlingStrategy.Throw) {
                throw new ObjectNotFoundException("The requested translated name template could not be found", e);
            }
        }

        return translatedDescriptor == null ? null : translatedDescriptor.getName(locale);
    }

    @Override
    public List getGroups() {
        return marketDescriptor.getGroups();
    }

    @Override
    public Map getAttributes() {
        if (marketDescriptor.getAttributes() == null) {
            return null;
        }

        return marketDescriptor.getAttributes().stream()
                .collect(Collectors.toMap(MarketAttribute::getName, MarketAttribute::getDescription));
    }

    @Override
    public List getValidMappings(Locale locale) {
        Preconditions.checkNotNull(locale);

        return getValidMappings(locale, false);
    }

    @Override
    public List getValidMappings(Locale locale, boolean adjustMappingsWithMessageData) {
        Preconditions.checkNotNull(locale);

        if (producerId == 5) { // premium cricket has no available mappings
            return Collections.emptyList();
        }

        MarketDescription completeDescriptor = null;
        try {
            completeDescriptor = descriptorProvider.getMarketDescription(this.marketDescriptor.getId(), specifiersMap, Collections.singletonList(locale), false);
        } catch (CacheItemNotFoundException e) {
            if (exceptionHandlingStrategy == ExceptionHandlingStrategy.Throw) {
                throw new ObjectNotFoundException("The mappings in the provided locale could not be provided", e);
            }
        }

        if (completeDescriptor == null) {
            return null;
        }

        if (completeDescriptor.getMappings() == null) {
            return Collections.emptyList();
        }

        List collect = completeDescriptor.getMappings().stream()
                .filter(m -> m.canMap(producerId, sportEvent.getSportId(), specifiersMap))
                .collect(Collectors.toList());

        if(!adjustMappingsWithMessageData) {
            return collect;
        }

        Map attributes = getAttributes();
        return collect.stream()
                .map(m -> mapToAdjustedMappingData(m, attributes, specifiersMap))
                .collect(Collectors.toList());
    }

    private static MarketMappingData mapToAdjustedMappingData(MarketMappingData mapping, Map attributes, Map specifiersMap) {
        Preconditions.checkNotNull(mapping);

        if (attributes != null
                && attributes.containsKey(UnifiedFeedConstants.FLEX_SCORE_MARKET_ATTRIBUTE_NAME)) {
            return new FlexAdjustedMarketMappingDataImpl(mapping, specifiersMap);
        }

        return mapping;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy