11package org .prebid .server .bidder .nexx360 ;
22
33import com .fasterxml .jackson .core .type .TypeReference ;
4+ import com .fasterxml .jackson .databind .JsonNode ;
5+ import com .fasterxml .jackson .databind .node .ObjectNode ;
46import com .iab .openrtb .request .BidRequest ;
57import com .iab .openrtb .request .Imp ;
68import com .iab .openrtb .response .Bid ;
3234import java .util .Collections ;
3335import java .util .List ;
3436import java .util .Objects ;
37+ import java .util .Optional ;
3538import java .util .stream .Collectors ;
3639
3740public class Nexx360Bidder implements Bidder <BidRequest > {
@@ -61,16 +64,12 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request
6164 final List <Imp > imps = request .getImp ();
6265 for (int i = 0 ; i < imps .size (); i ++) {
6366 final Imp imp = imps .get (i );
64- final ExtImpNexx360 extImp = parseBidderExt (imp );
65- final Imp modifiedImp = imp .toBuilder ()
66- .ext (mapper .mapper ().createObjectNode ().set (BIDDER_NAME , mapper .mapper ().valueToTree (extImp )))
67- .build ();
68- modifiedImps .add (modifiedImp );
69-
7067 if (i == 0 ) {
68+ final ExtImpNexx360 extImp = parseImpExt (imp );
7169 tagId = extImp .getTagId ();
7270 placement = extImp .getPlacement ();
7371 }
72+ modifiedImps .add (modifyImp (imp ));
7473 }
7574 } catch (PreBidException e ) {
7675 return Result .withError (BidderError .badInput (e .getMessage ()));
@@ -81,14 +80,23 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request
8180 return Result .withValue (BidderUtil .defaultRequest (modifiedRequest , url , mapper ));
8281 }
8382
84- private ExtImpNexx360 parseBidderExt (Imp imp ) {
83+ private ExtImpNexx360 parseImpExt (Imp imp ) {
8584 try {
8685 return mapper .mapper ().convertValue (imp .getExt (), TYPE_REFERENCE ).getBidder ();
8786 } catch (IllegalArgumentException e ) {
8887 throw new PreBidException (e .getMessage ());
8988 }
9089 }
9190
91+ private Imp modifyImp (Imp imp ) {
92+ return Optional .ofNullable (imp .getExt ())
93+ .map (prebid -> prebid .get ("bidder" ))
94+ .filter (JsonNode ::isObject )
95+ .map (bidder -> (ObjectNode ) mapper .mapper ().createObjectNode ().set (BIDDER_NAME , bidder ))
96+ .map (ext -> imp .toBuilder ().ext (ext ).build ())
97+ .orElseThrow (() -> new PreBidException ("imp.ext.prebid.bidder can't be parsed" ));
98+ }
99+
92100 private BidRequest makeRequest (BidRequest request , List <Imp > imps ) {
93101 final ExtRequest extRequest = ExtRequest .empty ();
94102 extRequest .addProperty (BIDDER_NAME , mapper .mapper ().valueToTree (
0 commit comments