Skip to content

Commit 6ede77e

Browse files
authored
Rid RevContent bidder of OpenrtbBidder. (prebid#1625)
1 parent 8112fcf commit 6ede77e

File tree

1 file changed

+68
-11
lines changed

1 file changed

+68
-11
lines changed

src/main/java/org/prebid/server/bidder/revcontent/RevcontentBidder.java

Lines changed: 68 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,93 @@
22

33
import com.iab.openrtb.request.App;
44
import com.iab.openrtb.request.BidRequest;
5-
import com.iab.openrtb.request.Imp;
65
import com.iab.openrtb.request.Site;
76
import com.iab.openrtb.response.Bid;
7+
import com.iab.openrtb.response.BidResponse;
8+
import com.iab.openrtb.response.SeatBid;
9+
import io.vertx.core.http.HttpMethod;
10+
import org.apache.commons.collections4.CollectionUtils;
811
import org.apache.commons.lang3.StringUtils;
9-
import org.prebid.server.bidder.OpenrtbBidder;
12+
import org.prebid.server.bidder.Bidder;
13+
import org.prebid.server.bidder.model.BidderBid;
14+
import org.prebid.server.bidder.model.BidderError;
15+
import org.prebid.server.bidder.model.HttpCall;
16+
import org.prebid.server.bidder.model.HttpRequest;
17+
import org.prebid.server.bidder.model.Result;
1018
import org.prebid.server.exception.PreBidException;
19+
import org.prebid.server.json.DecodeException;
1120
import org.prebid.server.json.JacksonMapper;
1221
import org.prebid.server.proto.openrtb.ext.response.BidType;
22+
import org.prebid.server.util.HttpUtil;
23+
import org.prebid.server.util.ObjectUtil;
1324

25+
import java.util.Collection;
26+
import java.util.Collections;
1427
import java.util.List;
28+
import java.util.Objects;
29+
import java.util.stream.Collectors;
1530

16-
public class RevcontentBidder extends OpenrtbBidder<Void> {
31+
public class RevcontentBidder implements Bidder<BidRequest> {
32+
33+
private final String endpointUrl;
34+
private final JacksonMapper mapper;
1735

1836
public RevcontentBidder(String endpointUrl, JacksonMapper mapper) {
19-
super(endpointUrl, RequestCreationStrategy.SINGLE_REQUEST, Void.class, mapper);
37+
this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
38+
this.mapper = Objects.requireNonNull(mapper);
2039
}
2140

2241
@Override
23-
protected void validateRequest(BidRequest bidRequest) throws PreBidException {
24-
final App app = bidRequest.getApp();
25-
final Site site = bidRequest.getSite();
26-
final boolean hasAppName = app != null && StringUtils.isNotBlank(app.getName());
27-
final boolean hasSiteDomain = site != null && StringUtils.isNotBlank(site.getDomain());
28-
if (!hasAppName && !hasSiteDomain) {
42+
public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest bidRequest) {
43+
try {
44+
validateRequest(bidRequest);
45+
} catch (PreBidException e) {
46+
return Result.withError(BidderError.badInput(e.getMessage()));
47+
}
48+
49+
return Result.withValue(HttpRequest.<BidRequest>builder()
50+
.method(HttpMethod.POST)
51+
.headers(HttpUtil.headers())
52+
.uri(endpointUrl)
53+
.body(mapper.encodeToBytes(bidRequest))
54+
.payload(bidRequest)
55+
.build());
56+
}
57+
58+
private static void validateRequest(BidRequest bidRequest) throws PreBidException {
59+
if (StringUtils.isBlank(ObjectUtil.getIfNotNull(bidRequest.getApp(), App::getName))
60+
&& StringUtils.isBlank(ObjectUtil.getIfNotNull(bidRequest.getSite(), Site::getDomain))) {
2961
throw new PreBidException("Impression is missing app name or site domain, and must contain one.");
3062
}
3163
}
3264

3365
@Override
34-
protected BidType getBidType(Bid bid, List<Imp> imps) {
66+
public Result<List<BidderBid>> makeBids(HttpCall<BidRequest> httpCall, BidRequest bidRequest) {
67+
try {
68+
final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class);
69+
return Result.withValues(extractBids(bidResponse));
70+
} catch (DecodeException e) {
71+
return Result.withError(BidderError.badServerResponse(e.getMessage()));
72+
}
73+
}
74+
75+
private static List<BidderBid> extractBids(BidResponse bidResponse) {
76+
if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) {
77+
return Collections.emptyList();
78+
}
79+
80+
final String currency = bidResponse.getCur();
81+
return bidResponse.getSeatbid().stream()
82+
.filter(Objects::nonNull)
83+
.map(SeatBid::getBid)
84+
.filter(Objects::nonNull)
85+
.flatMap(Collection::stream)
86+
.filter(Objects::nonNull)
87+
.map(bid -> BidderBid.of(bid, resolveBidType(bid), currency))
88+
.collect(Collectors.toList());
89+
}
90+
91+
private static BidType resolveBidType(Bid bid) {
3592
// native: {"ver":"1.1","assets":...
3693
// banner: <div id='rtb-widget...
3794
final String bidAdm = bid.getAdm();

0 commit comments

Comments
 (0)