Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import com.iab.openrtb.response.BidResponse;
import com.iab.openrtb.response.SeatBid;
import io.vertx.core.MultiMap;
import io.vertx.core.http.HttpMethod;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
Expand All @@ -22,6 +21,8 @@
import org.prebid.server.bidder.model.BidderError;
import org.prebid.server.bidder.model.HttpRequest;
import org.prebid.server.bidder.model.Result;
import org.prebid.server.bidder.nextmillennium.proto.NextMillenniumExt;
import org.prebid.server.bidder.nextmillennium.proto.NextMillenniumExtBidder;
import org.prebid.server.exception.PreBidException;
import org.prebid.server.json.DecodeException;
import org.prebid.server.json.JacksonMapper;
Expand All @@ -31,8 +32,8 @@
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidServer;
import org.prebid.server.proto.openrtb.ext.request.ExtStoredRequest;
import org.prebid.server.proto.openrtb.ext.request.nextmillennium.ExtImpNextMillennium;
import org.prebid.server.proto.openrtb.ext.request.nextmillennium.ExtRequestNextMillennium;
import org.prebid.server.proto.openrtb.ext.response.BidType;
import org.prebid.server.util.BidderUtil;
import org.prebid.server.util.HttpUtil;
import org.prebid.server.util.ObjectUtil;
import org.prebid.server.version.PrebidVersionProvider;
Expand All @@ -41,6 +42,7 @@
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

public class NextMillenniumBidder implements Bidder<BidRequest> {

Expand All @@ -59,6 +61,7 @@ public NextMillenniumBidder(String endpointUrl,
JacksonMapper mapper,
List<String> nmmFlags,
PrebidVersionProvider versionProvider) {

this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
this.mapper = Objects.requireNonNull(mapper);
this.nmmFlags = nmmFlags;
Expand All @@ -78,7 +81,12 @@ public final Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest b
errors.add(BidderError.badInput(e.getMessage()));
continue;
}
httpRequests.add(makeHttpRequest(updateBidRequest(bidRequest, extImpNextMillennium)));
final BidRequest updatedRequest = updateBidRequest(bidRequest, extImpNextMillennium);
httpRequests.add(BidderUtil.defaultRequest(
updatedRequest,
headers(),
endpointUrl,
mapper));
}

return errors.isEmpty() ? Result.withValues(httpRequests) : Result.withErrors(errors);
Expand All @@ -92,7 +100,7 @@ private ExtImpNextMillennium convertExt(ObjectNode impExt) {
}
}

private BidRequest updateBidRequest(BidRequest bidRequest, ExtImpNextMillennium ext) {
private BidRequest updateBidRequest1(BidRequest bidRequest, ExtImpNextMillennium ext) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove

final ExtStoredRequest storedRequest = ExtStoredRequest.of(resolveStoredRequestId(bidRequest, ext));
final ExtRequest requestExt = bidRequest.getExt();
final ExtRequestPrebid existingPrebid = requestExt != null ? requestExt.getPrebid() : null;
Expand All @@ -106,13 +114,15 @@ private BidRequest updateBidRequest(BidRequest bidRequest, ExtImpNextMillennium
final ExtRequest extRequest = ExtRequest.of(createdExtRequestPrebid);

final ObjectNode nextMillenniumNode = mapper.mapper().valueToTree(
ExtRequestNextMillennium.of(nmmFlags, NM_ADAPTER_VERSION, versionProvider.getNameVersionRecord()));
NextMillenniumExtBidder.of(nmmFlags, NM_ADAPTER_VERSION, versionProvider.getNameVersionRecord()));

extRequest.addProperty("nextMillennium", nextMillenniumNode);

final Imp firstImp = bidRequest.getImp().getFirst();
final ObjectNode updatedImpExt = mapper.mapper().createObjectNode();
updatedImpExt.set("nextMillennium", nextMillenniumNode.get("nmmFlags"));
final ObjectNode impNextMillNode = nextMillenniumNode.deepCopy();
impNextMillNode.retain("nmmFlags");
updatedImpExt.set("nextMillennium", impNextMillNode);

final ObjectNode prebidNode = mapper.mapper().createObjectNode();
prebidNode.set("storedrequest", mapper.mapper().valueToTree(storedRequest));
Expand All @@ -131,6 +141,19 @@ private BidRequest updateBidRequest(BidRequest bidRequest, ExtImpNextMillennium
.build();
}

private BidRequest updateBidRequest(BidRequest bidRequest, ExtImpNextMillennium extImp) {
final String soredRequestId = resolveStoredRequestId(bidRequest, extImp);
final ExtRequestPrebidServer extRequestPrebidServer = Optional.ofNullable(bidRequest.getExt())
.map(ExtRequest::getPrebid)
.map(ExtRequestPrebid::getServer)
.orElse(null);

return bidRequest.toBuilder()
.imp(modifyFirstImp(bidRequest.getImp(), soredRequestId))
.ext(createExtRequest(soredRequestId, extRequestPrebidServer))
.build();
}

private static String resolveStoredRequestId(BidRequest bidRequest, ExtImpNextMillennium extImpNextMillennium) {
final String groupId = extImpNextMillennium.getGroupId();
if (StringUtils.isEmpty(groupId)) {
Expand Down Expand Up @@ -168,14 +191,38 @@ private static String formatSize(Integer w, Integer h) {
: null;
}

private HttpRequest<BidRequest> makeHttpRequest(BidRequest bidRequest) {
return HttpRequest.<BidRequest>builder()
.method(HttpMethod.POST)
.uri(endpointUrl)
.headers(headers())
.payload(bidRequest)
.body(mapper.encodeToBytes(bidRequest))
private List<Imp> modifyFirstImp(List<Imp> imps, String storedRequestId) {
final ExtRequestPrebid extRequestPrebid = ExtRequestPrebid.builder()
.storedrequest(ExtStoredRequest.of(storedRequestId))
.build();

final NextMillenniumExt nextMillenniumExt = NextMillenniumExt.of(
NextMillenniumExtBidder.of(nmmFlags, null, null));

final ExtRequest extRequest = ExtRequest.of(extRequestPrebid);
mapper.fillExtension(extRequest, nextMillenniumExt);

final ObjectNode impExt = mapper.mapper().valueToTree(extRequest);

final List<Imp> modifiedImps = new ArrayList<>(imps);
modifiedImps.set(0, imps.getFirst().toBuilder().ext(impExt).build());

return modifiedImps;
}

private ExtRequest createExtRequest(String storedRequestId, ExtRequestPrebidServer extRequestPrebidServer) {
final ExtRequestPrebid extRequestPrebid = ExtRequestPrebid.builder()
.storedrequest(ExtStoredRequest.of(storedRequestId))
.server(extRequestPrebidServer)
.build();

final NextMillenniumExt nextMillenniumExt = NextMillenniumExt.of(
NextMillenniumExtBidder.of(nmmFlags, NM_ADAPTER_VERSION, versionProvider.getNameVersionRecord()));

final ExtRequest extRequest = ExtRequest.of(extRequestPrebid);
mapper.fillExtension(extRequest, nextMillenniumExt);

return extRequest;
}

private static MultiMap headers() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.prebid.server.bidder.nextmillennium.proto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Value;

@Value(staticConstructor = "of")
public class NextMillenniumExt {

@JsonProperty("nextMillennium")
NextMillenniumExtBidder nextMillennium;
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package org.prebid.server.proto.openrtb.ext.request.nextmillennium;
package org.prebid.server.bidder.nextmillennium.proto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Value;

import java.util.List;

@Value(staticConstructor = "of")
public class ExtRequestNextMillennium {
public class NextMillenniumExtBidder {

@JsonProperty("nmmFlags")
List<String> nmmFlags;
Expand Down
Loading
Loading