All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.sportradar.unifiedodds.sdk.caching.markets.MarketDescriptionProviderImpl Maven / Gradle / Ivy
/*
* Copyright (C) Sportradar AG. See LICENSE for full license governing this code
*/
package com.sportradar.unifiedodds.sdk.caching.markets;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import com.sportradar.unifiedodds.sdk.caching.ci.markets.VariantDescriptionCI;
import com.sportradar.unifiedodds.sdk.entities.markets.MarketDescription;
import com.sportradar.unifiedodds.sdk.exceptions.internal.CacheItemNotFoundException;
import com.sportradar.unifiedodds.sdk.exceptions.internal.CachingException;
import com.sportradar.unifiedodds.sdk.exceptions.internal.IllegalCacheStateException;
import com.sportradar.unifiedodds.sdk.impl.UnifiedFeedConstants;
import com.sportradar.unifiedodds.sdk.impl.markets.MarketDescriptionImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
/**
* Created on 15/06/2017.
* // TODO @eti: Javadoc
*/
public class MarketDescriptionProviderImpl implements MarketDescriptionProvider {
private final static Logger logger = LoggerFactory.getLogger(MarketDescriptionProviderImpl.class);
private final MarketDescriptionCache invariantMarketCache;
private final MarketDescriptionCache variantMarketCache;
private final VariantDescriptionCache variantDescriptionCache;
@Inject
public MarketDescriptionProviderImpl(@Named("InvariantMarketCache") InvariantMarketDescriptionCache invariantMarketCache,
@Named("VariantMarketCache") MarketDescriptionCache variantMarketCache,
VariantDescriptionCache variantDescriptionCache) {
Preconditions.checkNotNull(invariantMarketCache);
Preconditions.checkNotNull(variantMarketCache);
Preconditions.checkNotNull(variantDescriptionCache);
this.invariantMarketCache = invariantMarketCache;
this.variantMarketCache = variantMarketCache;
this.variantDescriptionCache = variantDescriptionCache;
}
@Override
public MarketDescription getMarketDescription(int marketId, Map marketSpecifiers, List locales, boolean fetchVariantDescriptions) throws CacheItemNotFoundException {
Preconditions.checkArgument(marketId > 0);
Preconditions.checkNotNull(locales);
Preconditions.checkArgument(!locales.isEmpty());
MarketDescription marketDescriptor;
try {
marketDescriptor = invariantMarketCache.getMarketDescriptor(marketId, null, locales);
} catch (CachingException e) {
throw new CacheItemNotFoundException("Market descriptor with id " + marketId + " could not be found", e);
}
String variantValue = marketSpecifiers == null
? null
: marketSpecifiers.get(UnifiedFeedConstants.VARIANT_DESCRIPTION_NAME);
// case 1: if its not a variant market, return the static market descriptor as is
if (Strings.isNullOrEmpty(variantValue)) {
return marketDescriptor;
}
if (fetchVariantDescriptions) {
// case 2: defined/known dynamic market => (pre:outcometext market) || (market is player props)
if (isMarketOutcomeText(marketDescriptor) || isMarketPlayerProps(marketDescriptor)) {
return provideDynamicVariantEndpointMarket(marketId, locales, marketDescriptor, variantValue);
}
// case 3: "normal" variant market available on the full variant market list
return provideFullVariantListEndpointMarket(marketId, locales, marketDescriptor, variantValue)
.orElseGet(() ->
// case 4: dynamic market which is not defined
provideDynamicVariantEndpointMarket(marketId, locales, marketDescriptor, variantValue)
);
}
return marketDescriptor;
}
private Optional provideFullVariantListEndpointMarket(int marketId, List locales, MarketDescription marketDescriptor, String variantValue) {
try {
VariantDescriptionCI variantDescription = variantDescriptionCache.getVariantDescription(variantValue, locales);
((MarketDescriptionImpl) marketDescriptor).mergeOutcomes(variantDescription.getOutcomes(), locales);
((MarketDescriptionImpl) marketDescriptor).setStaticMappingsData(variantDescription.getMappings());
return Optional.of(marketDescriptor);
} catch (CacheItemNotFoundException e) {
return Optional.empty();
} catch (IllegalCacheStateException e) {
logger.warn("There was an error providing the variant market descriptor -> marketId:{}, variantValue: {}, locales: {}",
marketId, variantValue, locales, e);
return Optional.empty();
}
}
private MarketDescription provideDynamicVariantEndpointMarket(int marketId, List locales, MarketDescription marketDescriptor, String variantValue) {
MarketDescription variantDescriptor;
try {
variantDescriptor = variantMarketCache.getMarketDescriptor(marketId, variantValue, locales);
} catch (CachingException e) {
logger.warn("There was an error providing the explicit variant market descriptor -> marketId:{}, variantValue: {}, locales: {}",
marketId, variantValue, locales, e);
return marketDescriptor;
}
return variantDescriptor;
}
private static boolean isMarketPlayerProps(MarketDescription marketDescriptor) {
return marketDescriptor.getGroups() != null && marketDescriptor.getGroups().contains(UnifiedFeedConstants.PLAYER_PROPS_MARKET_GROUP);
}
private static boolean isMarketOutcomeText(MarketDescription marketDescriptor) {
return marketDescriptor.getOutcomeType() != null && marketDescriptor.getOutcomeType().equals(UnifiedFeedConstants.FREETEXT_VARIANT_VALUE);
}
}