From 42ebcf4d013595b6cc63ba04f36c361318bc0866 Mon Sep 17 00:00:00 2001 From: nickluck8 Date: Thu, 3 Jun 2021 13:15:39 +0300 Subject: [PATCH 1/4] add processing of imp.ext.data to mediagrid --- .../prebid/server/bidder/grid/GridBidder.java | 25 +++++++++++++++++++ .../server/bidder/grid/model/ExtImp.java | 21 ++++++++++++++++ .../server/bidder/grid/model/ExtImpData.java | 16 ++++++++++++ .../bidder/grid/model/ExtImpDataAdServer.java | 15 +++++++++++ .../grid/test-auction-grid-request.json | 12 +++++++++ .../grid/test-grid-bid-request-1.json | 9 ++++++- 6 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/prebid/server/bidder/grid/model/ExtImp.java create mode 100644 src/main/java/org/prebid/server/bidder/grid/model/ExtImpData.java create mode 100644 src/main/java/org/prebid/server/bidder/grid/model/ExtImpDataAdServer.java diff --git a/src/main/java/org/prebid/server/bidder/grid/GridBidder.java b/src/main/java/org/prebid/server/bidder/grid/GridBidder.java index e17048049d7..2846ed58787 100644 --- a/src/main/java/org/prebid/server/bidder/grid/GridBidder.java +++ b/src/main/java/org/prebid/server/bidder/grid/GridBidder.java @@ -1,8 +1,11 @@ package org.prebid.server.bidder.grid; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; +import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.OpenrtbBidder; +import org.prebid.server.bidder.grid.model.ExtImp; import org.prebid.server.bidder.grid.model.ExtImpGrid; import org.prebid.server.exception.PreBidException; import org.prebid.server.json.JacksonMapper; @@ -21,6 +24,28 @@ protected Imp modifyImp(Imp imp, ExtImpGrid impExt) { if (impExt.getUid() == null || impExt.getUid() == 0) { throw new PreBidException("uid is empty"); } + ExtImp extImp = mapper.mapper().convertValue( + imp.getExt(), + ExtImp.class + ); + + if (extImp != null + && extImp.getExtImpData() != null + && extImp.getExtImpData().getAdServer() != null + && StringUtils.isNotEmpty(extImp.getExtImpData().getAdServer().getAdSlot())) { + + ExtImp modifiedExtImp = ExtImp.of(extImp.getPrebid(), + extImp.getBidder(), + extImp.getExtImpData(), + extImp.getExtImpData().getAdServer().getAdSlot()); + + ObjectNode modifiedExt = mapper.mapper().valueToTree( + modifiedExtImp + ); + + return imp.toBuilder().ext(modifiedExt).build(); + } + return imp; } diff --git a/src/main/java/org/prebid/server/bidder/grid/model/ExtImp.java b/src/main/java/org/prebid/server/bidder/grid/model/ExtImp.java new file mode 100644 index 00000000000..d897ee2ba10 --- /dev/null +++ b/src/main/java/org/prebid/server/bidder/grid/model/ExtImp.java @@ -0,0 +1,21 @@ +package org.prebid.server.bidder.grid.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.JsonNode; +import lombok.AllArgsConstructor; +import lombok.Value; +import org.prebid.server.proto.openrtb.ext.request.ExtImpPrebid; + +@AllArgsConstructor(staticName = "of") +@Value +public class ExtImp { + + ExtImpPrebid prebid; + + JsonNode bidder; + + @JsonProperty("data") + ExtImpData extImpData; + + String gpid; +} diff --git a/src/main/java/org/prebid/server/bidder/grid/model/ExtImpData.java b/src/main/java/org/prebid/server/bidder/grid/model/ExtImpData.java new file mode 100644 index 00000000000..59f0613d148 --- /dev/null +++ b/src/main/java/org/prebid/server/bidder/grid/model/ExtImpData.java @@ -0,0 +1,16 @@ +package org.prebid.server.bidder.grid.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Value; + +@AllArgsConstructor(staticName = "of") +@Value +public class ExtImpData { + + @JsonProperty("pbadslot") + String pbAdSlot; + + @JsonProperty("adserver") + ExtImpDataAdServer adServer; +} diff --git a/src/main/java/org/prebid/server/bidder/grid/model/ExtImpDataAdServer.java b/src/main/java/org/prebid/server/bidder/grid/model/ExtImpDataAdServer.java new file mode 100644 index 00000000000..f28cb18500c --- /dev/null +++ b/src/main/java/org/prebid/server/bidder/grid/model/ExtImpDataAdServer.java @@ -0,0 +1,15 @@ +package org.prebid.server.bidder.grid.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Value; + +@AllArgsConstructor(staticName = "of") +@Value +public class ExtImpDataAdServer { + + String name; + + @JsonProperty("adslot") + String adSlot; +} diff --git a/src/test/resources/org/prebid/server/it/openrtb2/grid/test-auction-grid-request.json b/src/test/resources/org/prebid/server/it/openrtb2/grid/test-auction-grid-request.json index 6ea2e260623..c048df664df 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/grid/test-auction-grid-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/grid/test-auction-grid-request.json @@ -14,6 +14,12 @@ "ext": { "grid": { "uid": 1 + }, + "data": { + "adserver": { + "name": "some_name", + "adslot": "some_slot" + } } } } @@ -39,6 +45,12 @@ "tid": "tid" }, "ext": { + "data": { + "adserver": { + "name": "some_name", + "adslot": "some_slot" + } + }, "prebid": { "targeting": { "pricegranularity": { diff --git a/src/test/resources/org/prebid/server/it/openrtb2/grid/test-grid-bid-request-1.json b/src/test/resources/org/prebid/server/it/openrtb2/grid/test-grid-bid-request-1.json index c0c1a403cad..816d7a24b98 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/grid/test-grid-bid-request-1.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/grid/test-grid-bid-request-1.json @@ -14,7 +14,14 @@ "ext": { "bidder": { "uid": 1 - } + }, + "data": { + "adserver": { + "name": "some_name", + "adslot": "some_slot" + } + }, + "gpid" : "some_slot" } } ], From 3bb82864263186d6dbb558055d95c42824e39ccd Mon Sep 17 00:00:00 2001 From: nickluck8 Date: Thu, 3 Jun 2021 14:35:49 +0300 Subject: [PATCH 2/4] add processing of imp.ext.data to mediagrid --- .../prebid/server/bidder/grid/GridBidder.java | 36 ++++++++++--------- .../model/{ExtImp.java => GridExtImp.java} | 8 ++--- .../{ExtImpData.java => GridExtImpData.java} | 4 +-- ...erver.java => GridExtImpDataAdServer.java} | 2 +- .../server/bidder/grid/GridBidderTest.java | 22 ++++++++++++ .../grid/test-auction-grid-request.json | 6 ---- 6 files changed, 49 insertions(+), 29 deletions(-) rename src/main/java/org/prebid/server/bidder/grid/model/{ExtImp.java => GridExtImp.java} (73%) rename src/main/java/org/prebid/server/bidder/grid/model/{ExtImpData.java => GridExtImpData.java} (81%) rename src/main/java/org/prebid/server/bidder/grid/model/{ExtImpDataAdServer.java => GridExtImpDataAdServer.java} (87%) diff --git a/src/main/java/org/prebid/server/bidder/grid/GridBidder.java b/src/main/java/org/prebid/server/bidder/grid/GridBidder.java index 2846ed58787..14aaff4c6ad 100644 --- a/src/main/java/org/prebid/server/bidder/grid/GridBidder.java +++ b/src/main/java/org/prebid/server/bidder/grid/GridBidder.java @@ -1,12 +1,11 @@ package org.prebid.server.bidder.grid; -import com.fasterxml.jackson.databind.node.ObjectNode; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.OpenrtbBidder; -import org.prebid.server.bidder.grid.model.ExtImp; import org.prebid.server.bidder.grid.model.ExtImpGrid; +import org.prebid.server.bidder.grid.model.GridExtImp; import org.prebid.server.exception.PreBidException; import org.prebid.server.json.JacksonMapper; import org.prebid.server.proto.openrtb.ext.response.BidType; @@ -24,26 +23,20 @@ protected Imp modifyImp(Imp imp, ExtImpGrid impExt) { if (impExt.getUid() == null || impExt.getUid() == 0) { throw new PreBidException("uid is empty"); } - ExtImp extImp = mapper.mapper().convertValue( + final GridExtImp gridExtImp = mapper.mapper().convertValue( imp.getExt(), - ExtImp.class + GridExtImp.class ); - if (extImp != null - && extImp.getExtImpData() != null - && extImp.getExtImpData().getAdServer() != null - && StringUtils.isNotEmpty(extImp.getExtImpData().getAdServer().getAdSlot())) { + String adSlot = getAdSlot(gridExtImp); - ExtImp modifiedExtImp = ExtImp.of(extImp.getPrebid(), - extImp.getBidder(), - extImp.getExtImpData(), - extImp.getExtImpData().getAdServer().getAdSlot()); + if (adSlot != null) { - ObjectNode modifiedExt = mapper.mapper().valueToTree( - modifiedExtImp - ); + final GridExtImp modifiedGridExtImp = gridExtImp.toBuilder() + .gpid(adSlot) + .build(); - return imp.toBuilder().ext(modifiedExt).build(); + return imp.toBuilder().ext(mapper.mapper().valueToTree(modifiedGridExtImp)).build(); } return imp; @@ -65,4 +58,15 @@ protected BidType getBidType(Bid bid, List imps) { } throw new PreBidException(String.format("Failed to find impression for ID: %s", impId)); } + + private static String getAdSlot(GridExtImp gridExtImp) { + if (gridExtImp != null + && gridExtImp.getGridExtImpData() != null + && gridExtImp.getGridExtImpData().getAdServer() != null + && StringUtils.isNotEmpty(gridExtImp.getGridExtImpData().getAdServer().getAdSlot())) { + return gridExtImp.getGridExtImpData().getAdServer().getAdSlot(); + } + + return null; + } } diff --git a/src/main/java/org/prebid/server/bidder/grid/model/ExtImp.java b/src/main/java/org/prebid/server/bidder/grid/model/GridExtImp.java similarity index 73% rename from src/main/java/org/prebid/server/bidder/grid/model/ExtImp.java rename to src/main/java/org/prebid/server/bidder/grid/model/GridExtImp.java index d897ee2ba10..8aa20191ee1 100644 --- a/src/main/java/org/prebid/server/bidder/grid/model/ExtImp.java +++ b/src/main/java/org/prebid/server/bidder/grid/model/GridExtImp.java @@ -2,20 +2,20 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.JsonNode; -import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Value; import org.prebid.server.proto.openrtb.ext.request.ExtImpPrebid; -@AllArgsConstructor(staticName = "of") +@Builder(toBuilder = true) @Value -public class ExtImp { +public class GridExtImp { ExtImpPrebid prebid; JsonNode bidder; @JsonProperty("data") - ExtImpData extImpData; + GridExtImpData gridExtImpData; String gpid; } diff --git a/src/main/java/org/prebid/server/bidder/grid/model/ExtImpData.java b/src/main/java/org/prebid/server/bidder/grid/model/GridExtImpData.java similarity index 81% rename from src/main/java/org/prebid/server/bidder/grid/model/ExtImpData.java rename to src/main/java/org/prebid/server/bidder/grid/model/GridExtImpData.java index 59f0613d148..43d4e35bb91 100644 --- a/src/main/java/org/prebid/server/bidder/grid/model/ExtImpData.java +++ b/src/main/java/org/prebid/server/bidder/grid/model/GridExtImpData.java @@ -6,11 +6,11 @@ @AllArgsConstructor(staticName = "of") @Value -public class ExtImpData { +public class GridExtImpData { @JsonProperty("pbadslot") String pbAdSlot; @JsonProperty("adserver") - ExtImpDataAdServer adServer; + GridExtImpDataAdServer adServer; } diff --git a/src/main/java/org/prebid/server/bidder/grid/model/ExtImpDataAdServer.java b/src/main/java/org/prebid/server/bidder/grid/model/GridExtImpDataAdServer.java similarity index 87% rename from src/main/java/org/prebid/server/bidder/grid/model/ExtImpDataAdServer.java rename to src/main/java/org/prebid/server/bidder/grid/model/GridExtImpDataAdServer.java index f28cb18500c..a84828ba1c5 100644 --- a/src/main/java/org/prebid/server/bidder/grid/model/ExtImpDataAdServer.java +++ b/src/main/java/org/prebid/server/bidder/grid/model/GridExtImpDataAdServer.java @@ -6,7 +6,7 @@ @AllArgsConstructor(staticName = "of") @Value -public class ExtImpDataAdServer { +public class GridExtImpDataAdServer { String name; diff --git a/src/test/java/org/prebid/server/bidder/grid/GridBidderTest.java b/src/test/java/org/prebid/server/bidder/grid/GridBidderTest.java index b775ae42e36..cdc4a8b0e53 100644 --- a/src/test/java/org/prebid/server/bidder/grid/GridBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/grid/GridBidderTest.java @@ -12,6 +12,9 @@ import org.junit.Test; import org.prebid.server.VertxTest; import org.prebid.server.bidder.grid.model.ExtImpGrid; +import org.prebid.server.bidder.grid.model.GridExtImp; +import org.prebid.server.bidder.grid.model.GridExtImpData; +import org.prebid.server.bidder.grid.model.GridExtImpDataAdServer; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderError; import org.prebid.server.bidder.model.HttpCall; @@ -231,6 +234,25 @@ public void makeBidsShouldReturnErrorIfImpIdsFromBidAndRequestWereNotMatchedAndI .containsOnly(BidderError.badServerResponse("Failed to find impression for ID: 123")); } + @Test + public void modifyImpShouldChangeImpExt() { + // given + final GridExtImp gridExtImp = GridExtImp.builder() + .gridExtImpData(GridExtImpData.of(null, GridExtImpDataAdServer.of("name", "adslot"))) + .build(); + + Imp imp = Imp.builder() + .ext(mapper.valueToTree(gridExtImp)) + .build(); + + // when + final Imp modifiedImp = gridBidder.modifyImp(imp, ExtImpGrid.of(1)); + + // then + assertThat(mapper.convertValue(modifiedImp.getExt(), GridExtImp.class).getGpid()) + .isEqualTo(gridExtImp.getGridExtImpData().getAdServer().getAdSlot()); + } + private static BidResponse givenBidResponse(UnaryOperator bidResponseCustomizer, UnaryOperator bidCustomizer) { return bidResponseCustomizer.apply(BidResponse.builder() diff --git a/src/test/resources/org/prebid/server/it/openrtb2/grid/test-auction-grid-request.json b/src/test/resources/org/prebid/server/it/openrtb2/grid/test-auction-grid-request.json index c048df664df..7f190baf03f 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/grid/test-auction-grid-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/grid/test-auction-grid-request.json @@ -45,12 +45,6 @@ "tid": "tid" }, "ext": { - "data": { - "adserver": { - "name": "some_name", - "adslot": "some_slot" - } - }, "prebid": { "targeting": { "pricegranularity": { From 5b5d95d94ecb19d0d603bff0ad58a865c4d782ec Mon Sep 17 00:00:00 2001 From: nickluck8 Date: Thu, 3 Jun 2021 15:41:41 +0300 Subject: [PATCH 3/4] add processing of imp.ext.data to mediagrid --- .../prebid/server/bidder/grid/GridBidder.java | 25 ++++++------------- .../server/bidder/grid/GridBidderTest.java | 4 +-- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/grid/GridBidder.java b/src/main/java/org/prebid/server/bidder/grid/GridBidder.java index 14aaff4c6ad..d1a9b61075c 100644 --- a/src/main/java/org/prebid/server/bidder/grid/GridBidder.java +++ b/src/main/java/org/prebid/server/bidder/grid/GridBidder.java @@ -6,6 +6,8 @@ import org.prebid.server.bidder.OpenrtbBidder; import org.prebid.server.bidder.grid.model.ExtImpGrid; import org.prebid.server.bidder.grid.model.GridExtImp; +import org.prebid.server.bidder.grid.model.GridExtImpData; +import org.prebid.server.bidder.grid.model.GridExtImpDataAdServer; import org.prebid.server.exception.PreBidException; import org.prebid.server.json.JacksonMapper; import org.prebid.server.proto.openrtb.ext.response.BidType; @@ -23,14 +25,12 @@ protected Imp modifyImp(Imp imp, ExtImpGrid impExt) { if (impExt.getUid() == null || impExt.getUid() == 0) { throw new PreBidException("uid is empty"); } - final GridExtImp gridExtImp = mapper.mapper().convertValue( - imp.getExt(), - GridExtImp.class - ); - String adSlot = getAdSlot(gridExtImp); - - if (adSlot != null) { + final GridExtImp gridExtImp = mapper.mapper().convertValue(imp.getExt(), GridExtImp.class); + final GridExtImpData extImpData = gridExtImp != null ? gridExtImp.getGridExtImpData() : null; + final GridExtImpDataAdServer adServer = extImpData != null ? extImpData.getAdServer() : null; + final String adSlot = adServer != null ? adServer.getAdSlot() : null; + if (StringUtils.isNotEmpty(adSlot)) { final GridExtImp modifiedGridExtImp = gridExtImp.toBuilder() .gpid(adSlot) @@ -58,15 +58,4 @@ protected BidType getBidType(Bid bid, List imps) { } throw new PreBidException(String.format("Failed to find impression for ID: %s", impId)); } - - private static String getAdSlot(GridExtImp gridExtImp) { - if (gridExtImp != null - && gridExtImp.getGridExtImpData() != null - && gridExtImp.getGridExtImpData().getAdServer() != null - && StringUtils.isNotEmpty(gridExtImp.getGridExtImpData().getAdServer().getAdSlot())) { - return gridExtImp.getGridExtImpData().getAdServer().getAdSlot(); - } - - return null; - } } diff --git a/src/test/java/org/prebid/server/bidder/grid/GridBidderTest.java b/src/test/java/org/prebid/server/bidder/grid/GridBidderTest.java index cdc4a8b0e53..c7ad6a7567c 100644 --- a/src/test/java/org/prebid/server/bidder/grid/GridBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/grid/GridBidderTest.java @@ -241,9 +241,7 @@ public void modifyImpShouldChangeImpExt() { .gridExtImpData(GridExtImpData.of(null, GridExtImpDataAdServer.of("name", "adslot"))) .build(); - Imp imp = Imp.builder() - .ext(mapper.valueToTree(gridExtImp)) - .build(); + final Imp imp = Imp.builder().ext(mapper.valueToTree(gridExtImp)).build(); // when final Imp modifiedImp = gridBidder.modifyImp(imp, ExtImpGrid.of(1)); From 653da6e6428638b0ae8a72454cdd0135a12693a8 Mon Sep 17 00:00:00 2001 From: nickluck8 Date: Fri, 4 Jun 2021 09:56:07 +0300 Subject: [PATCH 4/4] rename property add try/catch clause --- .../java/org/prebid/server/bidder/grid/GridBidder.java | 10 ++++++++-- .../prebid/server/bidder/grid/model/GridExtImp.java | 4 +--- .../org/prebid/server/bidder/grid/GridBidderTest.java | 4 ++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/grid/GridBidder.java b/src/main/java/org/prebid/server/bidder/grid/GridBidder.java index d1a9b61075c..7512593d145 100644 --- a/src/main/java/org/prebid/server/bidder/grid/GridBidder.java +++ b/src/main/java/org/prebid/server/bidder/grid/GridBidder.java @@ -26,8 +26,14 @@ protected Imp modifyImp(Imp imp, ExtImpGrid impExt) { throw new PreBidException("uid is empty"); } - final GridExtImp gridExtImp = mapper.mapper().convertValue(imp.getExt(), GridExtImp.class); - final GridExtImpData extImpData = gridExtImp != null ? gridExtImp.getGridExtImpData() : null; + final GridExtImp gridExtImp; + try { + gridExtImp = mapper.mapper().convertValue(imp.getExt(), GridExtImp.class); + } catch (Exception e) { + throw new PreBidException(e.getMessage()); + } + + final GridExtImpData extImpData = gridExtImp != null ? gridExtImp.getData() : null; final GridExtImpDataAdServer adServer = extImpData != null ? extImpData.getAdServer() : null; final String adSlot = adServer != null ? adServer.getAdSlot() : null; if (StringUtils.isNotEmpty(adSlot)) { diff --git a/src/main/java/org/prebid/server/bidder/grid/model/GridExtImp.java b/src/main/java/org/prebid/server/bidder/grid/model/GridExtImp.java index 8aa20191ee1..72fe1667058 100644 --- a/src/main/java/org/prebid/server/bidder/grid/model/GridExtImp.java +++ b/src/main/java/org/prebid/server/bidder/grid/model/GridExtImp.java @@ -1,6 +1,5 @@ package org.prebid.server.bidder.grid.model; -import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.JsonNode; import lombok.Builder; import lombok.Value; @@ -14,8 +13,7 @@ public class GridExtImp { JsonNode bidder; - @JsonProperty("data") - GridExtImpData gridExtImpData; + GridExtImpData data; String gpid; } diff --git a/src/test/java/org/prebid/server/bidder/grid/GridBidderTest.java b/src/test/java/org/prebid/server/bidder/grid/GridBidderTest.java index c7ad6a7567c..cbfa1d50094 100644 --- a/src/test/java/org/prebid/server/bidder/grid/GridBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/grid/GridBidderTest.java @@ -238,7 +238,7 @@ public void makeBidsShouldReturnErrorIfImpIdsFromBidAndRequestWereNotMatchedAndI public void modifyImpShouldChangeImpExt() { // given final GridExtImp gridExtImp = GridExtImp.builder() - .gridExtImpData(GridExtImpData.of(null, GridExtImpDataAdServer.of("name", "adslot"))) + .data(GridExtImpData.of(null, GridExtImpDataAdServer.of("name", "adslot"))) .build(); final Imp imp = Imp.builder().ext(mapper.valueToTree(gridExtImp)).build(); @@ -248,7 +248,7 @@ public void modifyImpShouldChangeImpExt() { // then assertThat(mapper.convertValue(modifiedImp.getExt(), GridExtImp.class).getGpid()) - .isEqualTo(gridExtImp.getGridExtImpData().getAdServer().getAdSlot()); + .isEqualTo(gridExtImp.getData().getAdServer().getAdSlot()); } private static BidResponse givenBidResponse(UnaryOperator bidResponseCustomizer,