Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ private BidderBid applyBidAdjustments(BidderBid bidderBid,

final Price priceWithAdjustmentsApplied = applyBidAdjustmentRules(
priceWithFactorsApplied,
bidderBid.getSeat(),
bidder,
bidRequest,
mediaType,
Expand Down Expand Up @@ -209,6 +210,7 @@ private static BigDecimal adjustPrice(BigDecimal priceAdjustmentFactor, BigDecim
}

private Price applyBidAdjustmentRules(Price bidPrice,
String seat,
String bidder,
BidRequest bidRequest,
ImpMediaType mediaType,
Expand All @@ -218,6 +220,7 @@ private Price applyBidAdjustmentRules(Price bidPrice,
bidPrice,
bidRequest,
mediaType,
seat,
bidder,
dealId);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,12 @@ public BidAdjustmentsResolver(CurrencyConversionService currencyService,
public Price resolve(Price initialPrice,
BidRequest bidRequest,
ImpMediaType targetMediaType,
String targetSeat,
String targetBidder,
String targetDealId) {

final List<BidAdjustmentsRule> rules = bidAdjustmentsRulesResolver.resolve(
bidRequest, targetMediaType, targetBidder, targetDealId);
bidRequest, targetMediaType, targetSeat, targetBidder, targetDealId);

return adjustPrice(initialPrice, rules, bidRequest);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,18 @@ public BidAdjustmentsRulesResolver(JacksonMapper mapper) {
this.mapper = Objects.requireNonNull(mapper).mapper();
}

public List<BidAdjustmentsRule> resolve(BidRequest bidRequest, ImpMediaType targetMediaType, String targetBidder) {
return resolve(bidRequest, targetMediaType, null, targetBidder, null);
}

public List<BidAdjustmentsRule> resolve(BidRequest bidRequest,
ImpMediaType targetMediaType,
String targetSeat,
String targetBidder,
String targetDealId) {

final BidAdjustmentsRules bidAdjustments = BidAdjustmentsRules.of(extractBidAdjustments(bidRequest));
return findRules(bidAdjustments, targetMediaType, targetBidder, targetDealId);
return findRules(bidAdjustments, targetMediaType, targetSeat, targetBidder, targetDealId);
}

private BidAdjustments extractBidAdjustments(BidRequest bidRequest) {
Expand All @@ -57,22 +62,32 @@ private BidAdjustments extractBidAdjustments(BidRequest bidRequest) {

private List<BidAdjustmentsRule> findRules(BidAdjustmentsRules bidAdjustments,
ImpMediaType targetMediaType,
String targetSeat,
String targetBidder,
String targetDealId) {

final Map<String, List<BidAdjustmentsRule>> rules = bidAdjustments.getRules();
final PrebidConfigSource source = SimpleSource.of(WILDCARD, DELIMITER, rules.keySet());
final PrebidConfigParameters parameters = createParameters(targetMediaType, targetBidder, targetDealId);
final PrebidConfigParameters parameters = createParameters(
targetMediaType, targetSeat, targetBidder, targetDealId);

final String rule = matchingStrategy.match(source, parameters);
return rule == null ? Collections.emptyList() : rules.get(rule);
}

private PrebidConfigParameters createParameters(ImpMediaType mediaType, String bidder, String dealId) {
private PrebidConfigParameters createParameters(ImpMediaType mediaType,
String seat,
String bidder,
String dealId) {

final List<PrebidConfigParameter> conditionsMatchers = List.of(
SimpleDirectParameter.of(mediaType.toString()),
SimpleDirectParameter.of(bidder),
StringUtils.isNotBlank(dealId) ? SimpleDirectParameter.of(dealId) : PrebidConfigParameter.wildcard());
StringUtils.isBlank(seat)
? SimpleDirectParameter.of(bidder)
: SimpleDirectParameter.of(List.of(seat, bidder)),
StringUtils.isBlank(dealId)
? PrebidConfigParameter.wildcard()
: SimpleDirectParameter.of(dealId));

return SimpleParameters.of(conditionsMatchers);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,7 @@ public Price resolve(Price initialBidFloorPrice,
String targetBidder) {

final List<BidAdjustmentsRule> rules = bidAdjustmentsRulesResolver.resolve(
bidRequest, targetMediaType, targetBidder, null);

bidRequest, targetMediaType, targetBidder);
return reversePrice(initialBidFloorPrice, rules, bidRequest);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

import lombok.Value;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.collections4.map.CaseInsensitiveMap;
import org.prebid.server.bidadjustments.BidAdjustmentRulesValidator;
import org.prebid.server.bidadjustments.BidAdjustmentsRulesResolver;

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

Expand All @@ -23,7 +23,7 @@ public static BidAdjustmentsRules of(BidAdjustments bidAdjustments) {
return BidAdjustmentsRules.of(Collections.emptyMap());
}

final Map<String, List<BidAdjustmentsRule>> rules = new HashMap<>();
final Map<String, List<BidAdjustmentsRule>> rules = new CaseInsensitiveMap<>();

final Map<String, Map<String, Map<String, List<BidAdjustmentsRule>>>> mediatypes =
bidAdjustments.getRules();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

/**
* Priority order for four column rule sets:
Expand Down Expand Up @@ -174,7 +174,7 @@ private static List<Integer> generateWildcardsIndices(Iterable<PrebidConfigParam
}

private static Set<String> toSet(Iterable<String> iterable) {
return iterable instanceof Set<String> set ? set : fill(new HashSet<>(), iterable);
return fill(new TreeSet<>(String.CASE_INSENSITIVE_ORDER), iterable);
}

private static <E, C extends Collection<E>> C fill(C destination, Iterable<E> source) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package org.prebid.server.functional.model.request.auction

import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.PropertyNamingStrategies
import com.fasterxml.jackson.databind.annotation.JsonNaming
import groovy.transform.ToString

@JsonNaming(PropertyNamingStrategies.LowerCaseStrategy)
@ToString(includeNames = true, ignoreNulls = true)
class BidAdjustmentRule {

Expand All @@ -14,4 +11,9 @@ class BidAdjustmentRule {
Map<String, List<AdjustmentRule>> generic
Map<String, List<AdjustmentRule>> openx
Map<String, List<AdjustmentRule>> alias
@JsonProperty("ALIAS")
Map<String, List<AdjustmentRule>> aliasUpperCase
@JsonProperty("AlIaS")
Map<String, List<AdjustmentRule>> aliasCamelCase
Map<String, List<AdjustmentRule>> amx
}
Loading