Skip to content

Commit 3689974

Browse files
committed
Implementation of suggested code from AntoxaAntoxic
1 parent 137c7fc commit 3689974

4 files changed

Lines changed: 36 additions & 130 deletions

File tree

src/main/java/org/prebid/server/bidder/sparteo/SparteoBidder.java

Lines changed: 35 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
import org.prebid.server.exception.PreBidException;
2222
import org.prebid.server.json.DecodeException;
2323
import org.prebid.server.json.JacksonMapper;
24+
import org.prebid.server.proto.openrtb.ext.ExtPrebid;
2425
import org.prebid.server.proto.openrtb.ext.request.ExtPublisher;
2526
import org.prebid.server.proto.openrtb.ext.request.sparteo.ExtImpSparteo;
26-
import org.prebid.server.proto.openrtb.ext.request.sparteo.ExtImpParamsSparteo;
2727
import org.prebid.server.proto.openrtb.ext.response.BidType;
2828
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebid;
2929
import org.prebid.server.util.BidderUtil;
@@ -32,14 +32,17 @@
3232
import java.util.ArrayList;
3333
import java.util.Collection;
3434
import java.util.Collections;
35-
import java.util.HashMap;
35+
import java.util.Iterator;
3636
import java.util.List;
3737
import java.util.Map;
3838
import java.util.Objects;
3939
import java.util.Optional;
4040

4141
public class SparteoBidder implements Bidder<BidRequest> {
4242

43+
private static final TypeReference<ExtPrebid<?, ExtImpSparteo>> TYPE_REFERENCE =
44+
new TypeReference<>() { };
45+
4346
private final String endpointUrl;
4447
private final JacksonMapper mapper;
4548

@@ -56,19 +59,16 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request
5659

5760
for (Imp imp : request.getImp()) {
5861
try {
59-
final ObjectNode impExt = mapper.mapper().convertValue(imp.getExt(), ObjectNode.class);
60-
61-
final JsonNode bidderNode = impExt.get("bidder");
62-
final ExtImpSparteo bidderParams = mapper.mapper().treeToValue(bidderNode, ExtImpSparteo.class);
62+
final ExtImpSparteo bidderParams = parseExtImp(imp);
6363

6464
if (siteNetworkId == null && bidderParams.getNetworkId() != null) {
6565
siteNetworkId = bidderParams.getNetworkId();
6666
}
6767

68-
final ObjectNode modifiedExt = buildImpExt(impExt, bidderParams, mapper);
68+
final ObjectNode modifiedExt = modifyImpExt(imp);
6969

7070
modifiedImps.add(imp.toBuilder().ext(modifiedExt).build());
71-
} catch (JsonProcessingException e) {
71+
} catch (PreBidException e) {
7272
errors.add(BidderError.badInput(
7373
"ignoring imp id=%s, error processing ext: %s".formatted(
7474
imp.getId(), e.getMessage())));
@@ -89,48 +89,35 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request
8989
return Result.of(Collections.singletonList(call), errors);
9090
}
9191

92-
private ObjectNode buildImpExt(ObjectNode impExt, ExtImpSparteo bidderParams, JacksonMapper mapper)
93-
throws JsonProcessingException {
94-
95-
final String adUnitCode = Optional.ofNullable(impExt.get("prebid"))
96-
.map(prebidNode -> prebidNode.get("adunitcode"))
97-
.filter(JsonNode::isTextual)
98-
.map(JsonNode::asText)
99-
.orElse(null);
92+
private ExtImpSparteo parseExtImp(Imp imp) {
93+
try {
94+
return mapper.mapper().convertValue(imp.getExt(), TYPE_REFERENCE).getBidder();
95+
} catch (IllegalArgumentException e) {
96+
throw new PreBidException("invalid imp.ext");
97+
}
98+
}
10099

101-
final Map<String, JsonNode> sparteoProperties = Optional.ofNullable(impExt.get("sparteo"))
102-
.map(sparteoNode -> sparteoNode.get("params"))
103-
.filter(JsonNode::isObject)
104-
.map(paramsNode -> mapper.mapper().convertValue(paramsNode,
105-
new TypeReference<Map<String, JsonNode>>() { }))
106-
.orElse(Collections.emptyMap());
107-
108-
final Map<String, JsonNode> additionnalProperties = new HashMap<>(sparteoProperties);
109-
additionnalProperties.putAll(bidderParams.getAdditionalProperties());
110-
111-
final ExtImpParamsSparteo sparteoParams = ExtImpParamsSparteo.of(
112-
bidderParams.getNetworkId(),
113-
bidderParams.getCustom1(),
114-
bidderParams.getCustom2(),
115-
bidderParams.getCustom3(),
116-
bidderParams.getCustom4(),
117-
bidderParams.getCustom5(),
118-
adUnitCode,
119-
additionnalProperties);
120-
121-
final ObjectNode ext = mapper.mapper().createObjectNode();
122-
123-
impExt.fields().forEachRemaining(entry -> {
124-
final String key = entry.getKey();
125-
if (!key.equals("bidder") && !key.equals("sparteo")) {
126-
ext.set(key, entry.getValue());
100+
private static ObjectNode modifyImpExt(Imp imp) {
101+
final ObjectNode modifiedImpExt = imp.getExt().deepCopy();
102+
final JsonNode sparteoJsonNode = modifiedImpExt.get("sparteo");
103+
final ObjectNode sparteoNode = sparteoJsonNode == null || !sparteoJsonNode.isObject()
104+
? modifiedImpExt.putObject("sparteo")
105+
: (ObjectNode) sparteoJsonNode;
106+
107+
final JsonNode paramsJsonNode = sparteoNode.get("params");
108+
final ObjectNode paramsNode = paramsJsonNode == null || !paramsJsonNode.isObject()
109+
? sparteoNode.putObject("params")
110+
: (ObjectNode) paramsJsonNode;
111+
112+
final JsonNode bidderJsonNode = modifiedImpExt.remove("bidder");
113+
if (bidderJsonNode != null && bidderJsonNode.isObject()) {
114+
final Iterator<Map.Entry<String, JsonNode>> fields = bidderJsonNode.fields();
115+
while (fields.hasNext()) {
116+
final Map.Entry<String, JsonNode> field = fields.next();
117+
paramsNode.set(field.getKey(), field.getValue());
127118
}
128-
});
129-
130-
final ObjectNode sparteoParamsAsNode = mapper.mapper().convertValue(sparteoParams, ObjectNode.class);
131-
ext.putObject("sparteo").set("params", sparteoParamsAsNode);
132-
133-
return ext;
119+
}
120+
return modifiedImpExt;
134121
}
135122

136123
private Site modifySite(Site site, String siteNetworkId, JacksonMapper mapper) {

src/main/java/org/prebid/server/proto/openrtb/ext/request/sparteo/ExtImpParamsSparteo.java

Lines changed: 0 additions & 46 deletions
This file was deleted.
Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,11 @@
11
package org.prebid.server.proto.openrtb.ext.request.sparteo;
22

3-
import com.fasterxml.jackson.annotation.JsonAnyGetter;
4-
import com.fasterxml.jackson.annotation.JsonAnySetter;
5-
import com.fasterxml.jackson.annotation.JsonInclude;
63
import com.fasterxml.jackson.annotation.JsonProperty;
7-
import com.fasterxml.jackson.databind.JsonNode;
84
import lombok.Value;
95

10-
import java.util.HashMap;
11-
import java.util.Map;
12-
136
@Value(staticConstructor = "of")
14-
@JsonInclude(JsonInclude.Include.NON_NULL)
157
public class ExtImpSparteo {
168

179
@JsonProperty("networkId")
1810
String networkId;
19-
20-
@JsonProperty("custom1")
21-
String custom1;
22-
23-
@JsonProperty("custom2")
24-
String custom2;
25-
26-
@JsonProperty("custom3")
27-
String custom3;
28-
29-
@JsonProperty("custom4")
30-
String custom4;
31-
32-
@JsonProperty("custom5")
33-
String custom5;
34-
35-
Map<String, JsonNode> additionalProperties = new HashMap<>();
36-
37-
@JsonAnySetter
38-
public void addAdditionalProperty(String key, JsonNode value) {
39-
additionalProperties.put(key, value);
40-
}
41-
42-
@JsonAnyGetter
43-
public Map<String, JsonNode> getAdditionalProperties() {
44-
return additionalProperties;
45-
}
4611
}

src/test/java/org/prebid/server/bidder/sparteo/SparteoBidderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public void makeHttpRequestsShouldReturnErrorIfImpExtCannotBeParsed() {
9191
.hasSize(1)
9292
.allSatisfy(error -> {
9393
assertThat(error.getMessage())
94-
.startsWith("ignoring imp id=null, error processing ext: Cannot construct instance");
94+
.startsWith("ignoring imp id=null, error processing ext: invalid imp.ext");
9595
});
9696
assertThat(result.getValue())
9797
.isEmpty();

0 commit comments

Comments
 (0)