22
33import com .fasterxml .jackson .core .type .TypeReference ;
44import com .fasterxml .jackson .databind .node .ObjectNode ;
5- import com .iab .openrtb .request .App ;
65import com .iab .openrtb .request .Banner ;
76import com .iab .openrtb .request .BidRequest ;
8- import com .iab .openrtb .request .Device ;
97import com .iab .openrtb .request .Format ;
108import com .iab .openrtb .request .Imp ;
119import com .iab .openrtb .request .Native ;
3735import org .prebid .server .json .JacksonMapper ;
3836import org .prebid .server .proto .openrtb .ext .ExtPrebid ;
3937import org .prebid .server .proto .openrtb .ext .request .ExtRegs ;
38+ import org .prebid .server .proto .openrtb .ext .request .ExtRegsDsa ;
4039import org .prebid .server .proto .openrtb .ext .request .mediasquare .ExtImpMediasquare ;
4140import org .prebid .server .proto .openrtb .ext .response .BidType ;
4241import org .prebid .server .proto .openrtb .ext .response .ExtBidPrebid ;
@@ -112,7 +111,9 @@ private ExtImpMediasquare parseImpExt(Imp imp) {
112111
113112 private static MediasquareCode makeCode (BidRequest bidRequest , Imp imp , ExtImpMediasquare extImp ) {
114113 final MediasquareMediaTypes mediaTypes = makeMediaTypes (imp );
115- final Map <String , MediasquareFloor > floors = makeFloors (imp );
114+ final Map <String , MediasquareFloor > floors = mediaTypes == null
115+ ? null
116+ : makeFloors (MediasquareFloor .of (imp .getBidfloor (), imp .getBidfloorcur ()), mediaTypes );
116117
117118 return MediasquareCode .builder ()
118119 .adUnit (imp .getTagid ())
@@ -149,24 +150,21 @@ private static MediasquareBanner makeBanner(Banner banner) {
149150 final List <List <Integer >> sizes = new ArrayList <>();
150151 if (CollectionUtils .isNotEmpty (banner .getFormat ())) {
151152 for (Format format : banner .getFormat ()) {
152- if (format != null ) {
153- sizes .add (List .of (format .getW (), format .getH ()));
154- }
153+ sizes .add (List .of (format .getW (), format .getH ()));
155154 }
156- } else if ( banner . getW () != null && banner . getH () != null ) {
155+ } else {
157156 sizes .add (List .of (banner .getW (), banner .getH ()));
158157 }
159158
160- return sizes . isEmpty () ? null : MediasquareBanner .of (sizes );
159+ return MediasquareBanner .of (sizes );
161160 }
162161
163- private static Map <String , MediasquareFloor > makeFloors (Imp imp ) {
162+ private static Map <String , MediasquareFloor > makeFloors (MediasquareFloor floor , MediasquareMediaTypes mediaTypes ) {
164163 final Map <String , MediasquareFloor > floors = new HashMap <>();
165- final MediasquareFloor floor = MediasquareFloor .of (imp .getBidfloor (), imp .getBidfloorcur ());
166164
167- final Video video = imp .getVideo ();
168- final Banner banner = imp .getBanner ();
169- final Native xNative = imp . getXNative ();
165+ final Video video = mediaTypes .getVideo ();
166+ final MediasquareBanner banner = mediaTypes .getBanner ();
167+ final String xNative = mediaTypes . getNativeRequest ();
170168
171169 if (video != null ) {
172170 if (video .getW () != null && video .getH () != null ) {
@@ -177,14 +175,8 @@ private static Map<String, MediasquareFloor> makeFloors(Imp imp) {
177175 }
178176
179177 if (banner != null ) {
180- if (CollectionUtils .isNotEmpty (banner .getFormat ())) {
181- for (Format format : banner .getFormat ()) {
182- if (format != null ) {
183- floors .put (SIZE_FORMAT .formatted (format .getW (), format .getH ()), floor );
184- }
185- }
186- } else if (banner .getW () != null && banner .getH () != null ) {
187- floors .put (SIZE_FORMAT .formatted (banner .getW (), banner .getH ()), floor );
178+ for (List <Integer > format : banner .getSizes ()) {
179+ floors .put (SIZE_FORMAT .formatted (format .get (0 ), format .get (1 )), floor );
188180 }
189181 }
190182
@@ -201,28 +193,27 @@ private static boolean isCodeValid(MediasquareCode code) {
201193 mediaTypes .getBanner (), mediaTypes .getVideo (), mediaTypes .getNativeRequest ());
202194 }
203195
196+ private static ExtRegsDsa getDsa (Regs regs ) {
197+ return Optional .ofNullable (regs )
198+ .map (Regs ::getExt )
199+ .map (ExtRegs ::getDsa )
200+ .orElse (null );
201+ }
202+
204203 private MediasquareRequest makeRequest (BidRequest bidRequest , List <MediasquareCode > codes ) {
205204 final User user = bidRequest .getUser ();
206205 final Regs regs = bidRequest .getRegs ();
207206
208207 return MediasquareRequest .builder ()
209208 .codes (codes )
210- .dsa (makeDsa (regs ))
209+ .dsa (getDsa (regs ))
211210 .gdpr (makeGdpr (user , regs ))
212211 .type ("pbs" )
213- .support (makeSupport (bidRequest ))
212+ .support (MediasquareSupport . of (bidRequest . getDevice (), bidRequest . getApp () ))
214213 .test (Objects .equals (bidRequest .getTest (), 1 ))
215214 .build ();
216215 }
217216
218- private ObjectNode makeDsa (Regs regs ) {
219- return Optional .ofNullable (regs )
220- .map (Regs ::getExt )
221- .map (ExtRegs ::getDsa )
222- .map (dsa -> (ObjectNode ) mapper .mapper ().valueToTree (dsa ))
223- .orElse (null );
224- }
225-
226217 private static MediasquareGdpr makeGdpr (User user , Regs regs ) {
227218 final boolean gdprApplies = Optional .ofNullable (regs )
228219 .map (Regs ::getGdpr )
@@ -232,14 +223,6 @@ private static MediasquareGdpr makeGdpr(User user, Regs regs) {
232223 return MediasquareGdpr .of (gdprApplies , consent );
233224 }
234225
235- private MediasquareSupport makeSupport (BidRequest bidRequest ) {
236- final Device device = bidRequest .getDevice ();
237- final App app = bidRequest .getApp ();
238- return MediasquareSupport .of (
239- device != null ? mapper .mapper ().valueToTree (device ) : null ,
240- app != null ? mapper .mapper ().valueToTree (app ) : null );
241- }
242-
243226 @ Override
244227 public Result <List <BidderBid >> makeBids (BidderCall <MediasquareRequest > httpCall , BidRequest bidRequest ) {
245228 try {
@@ -259,11 +242,16 @@ private List<BidderBid> extractBids(MediasquareResponse response) {
259242
260243 return response .getResponses ().stream ()
261244 .filter (Objects ::nonNull )
262- .map (bid -> BidderBid . of ( makeBid ( bid ), getBidType ( bid ), bid . getCurrency ()) )
245+ .map (this :: makeBidderBid )
263246 .collect (Collectors .toList ());
264247 }
265248
266- private Bid makeBid (MediasquareBid bid ) {
249+ private BidderBid makeBidderBid (MediasquareBid bid ) {
250+ final BidType bidType = getBidType (bid );
251+ return BidderBid .of (makeBid (bid , bidType ), bidType , bid .getCurrency ());
252+ }
253+
254+ private Bid makeBid (MediasquareBid bid , BidType bidType ) {
267255 return Bid .builder ()
268256 .id (bid .getId ())
269257 .impid (bid .getBidId ())
@@ -273,22 +261,12 @@ private Bid makeBid(MediasquareBid bid) {
273261 .w (bid .getWidth ())
274262 .h (bid .getHeight ())
275263 .crid (bid .getCreativeId ())
276- .mtype (getMtype ( bid ) )
264+ .mtype (bidType . ordinal () + 1 )
277265 .burl (bid .getBurl ())
278266 .ext (getBidExt (bid ))
279267 .build ();
280268 }
281269
282- private static Integer getMtype (MediasquareBid bid ) {
283- if (bid .getVideo () != null ) {
284- return 2 ;
285- }
286- if (bid .getNativeResponse () != null ) {
287- return 4 ;
288- }
289- return 1 ;
290- }
291-
292270 private ObjectNode getBidExt (MediasquareBid bid ) {
293271 final ExtBidPrebidMeta meta = ExtBidPrebidMeta .builder ()
294272 .advertiserDomains (bid .getAdomain () != null ? bid .getAdomain () : null )
0 commit comments