Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.prebid.server.bidder.adoppler;
package org.prebid.server.bidder.elementaltv;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
Expand All @@ -10,11 +10,18 @@
import com.iab.openrtb.response.SeatBid;
import io.vertx.core.MultiMap;
import io.vertx.core.http.HttpMethod;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
import org.prebid.server.bidder.Bidder;
import org.prebid.server.bidder.adoppler.model.AdopplerResponseAdsExt;
import org.prebid.server.bidder.adoppler.model.AdopplerResponseExt;
import org.prebid.server.bidder.adoppler.model.AdopplerResponseVideoAdsExt;
import org.prebid.server.bidder.elementaltv.model.ElementalTVResponseAdsExt;
import org.prebid.server.bidder.elementaltv.model.ElementalTVResponseExt;
import org.prebid.server.bidder.elementaltv.model.ElementalTVResponseVideoAdsExt;
import org.prebid.server.bidder.model.BidderBid;
import org.prebid.server.bidder.model.BidderCall;
import org.prebid.server.bidder.model.BidderError;
Expand All @@ -24,29 +31,20 @@
import org.prebid.server.json.DecodeException;
import org.prebid.server.json.JacksonMapper;
import org.prebid.server.proto.openrtb.ext.ExtPrebid;
import org.prebid.server.proto.openrtb.ext.request.adoppler.ExtImpAdoppler;
import org.prebid.server.proto.openrtb.ext.request.elementaltv.ExtImpElementalTV;
import org.prebid.server.proto.openrtb.ext.response.BidType;
import org.prebid.server.util.HttpUtil;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

public class AdopplerBidder implements Bidder<BidRequest> {
public class ElementalTVBidder implements Bidder<BidRequest> {

private static final TypeReference<ExtPrebid<?, ExtImpAdoppler>> ADOPPLER_EXT_TYPE_REFERENCE =
private static final TypeReference<ExtPrebid<?, ExtImpElementalTV>> ELEMENTALTV_EXT_TYPE_REFERENCE =
new TypeReference<>() {
};
private static final String DEFAULT_CLIENT = "app";

private final String endpointTemplate;
private final JacksonMapper mapper;

public AdopplerBidder(String endpointTemplate, JacksonMapper mapper) {
public ElementalTVBidder(String endpointTemplate, JacksonMapper mapper) {
this.endpointTemplate = HttpUtil.validateUrl(Objects.requireNonNull(endpointTemplate));
this.mapper = Objects.requireNonNull(mapper);
}
Expand All @@ -58,7 +56,7 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request

for (Imp imp : request.getImp()) {
try {
final ExtImpAdoppler validExtImp = parseAndValidateImpExt(imp);
final ExtImpElementalTV validExtImp = parseAndValidateImpExt(imp);
final String updateRequestId = request.getId() + "-" + validExtImp.getAdunit();
final BidRequest updateRequest = request.toBuilder().id(updateRequestId).build();
final String url = resolveUrl(validExtImp);
Expand All @@ -71,29 +69,22 @@ public Result<List<HttpRequest<BidRequest>>> makeHttpRequests(BidRequest request
return Result.of(result, errors);
}

private ExtImpAdoppler parseAndValidateImpExt(Imp imp) {
final ExtImpAdoppler extImpAdoppler;
private ExtImpElementalTV parseAndValidateImpExt(Imp imp) {
final ExtImpElementalTV extImpElementalTV;
try {
extImpAdoppler = mapper.mapper().convertValue(imp.getExt(), ADOPPLER_EXT_TYPE_REFERENCE).getBidder();
extImpElementalTV = mapper.mapper().convertValue(imp.getExt(), ELEMENTALTV_EXT_TYPE_REFERENCE).getBidder();
} catch (IllegalArgumentException e) {
throw new PreBidException(e.getMessage());
}
if (StringUtils.isBlank(extImpAdoppler.getAdunit())) {
throw new PreBidException("adunit parameter is required for adoppler bidder");
if (StringUtils.isBlank(extImpElementalTV.getAdunit())) {
throw new PreBidException("adunit parameter is required for elementaltv bidder");
}
return extImpAdoppler;
return extImpElementalTV;
}

private String resolveUrl(ExtImpAdoppler extImp) {
final String client = extImp.getClient();

private String resolveUrl(ExtImpElementalTV extImp) {
try {
final String accountIdMacro = StringUtils.isBlank(client)
? DEFAULT_CLIENT
: HttpUtil.encodeUrl(client);

return endpointTemplate
.replace("{{AccountID}}", accountIdMacro)
.replace("{{AdUnit}}", HttpUtil.encodeUrl(extImp.getAdunit()));
} catch (Exception e) {
throw new PreBidException(e.getMessage());
Expand Down Expand Up @@ -171,17 +162,17 @@ private BidderBid createBid(Bid bid, Map<String, BidType> impTypes, String curre

private void validateVideoBidExt(Bid bid) {
final ObjectNode extNode = bid.getExt();
final AdopplerResponseExt ext = extNode != null ? parseResponseExt(extNode) : null;
final AdopplerResponseAdsExt adsExt = ext != null ? ext.getAds() : null;
final AdopplerResponseVideoAdsExt videoAdsExt = adsExt != null ? adsExt.getVideo() : null;
final ElementalTVResponseExt ext = extNode != null ? parseResponseExt(extNode) : null;
final ElementalTVResponseAdsExt adsExt = ext != null ? ext.getAds() : null;
final ElementalTVResponseVideoAdsExt videoAdsExt = adsExt != null ? adsExt.getVideo() : null;
if (videoAdsExt == null) {
throw new PreBidException("$.seatbid.bid.ext.ads.video required");
}
}

private AdopplerResponseExt parseResponseExt(ObjectNode ext) {
private ElementalTVResponseExt parseResponseExt(ObjectNode ext) {
try {
return mapper.mapper().treeToValue(ext, AdopplerResponseExt.class);
return mapper.mapper().treeToValue(ext, ElementalTVResponseExt.class);
} catch (JsonProcessingException e) {
throw new PreBidException(e.getMessage(), e);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.prebid.server.bidder.elementaltv.model;

import lombok.Value;

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

ElementalTVResponseVideoAdsExt video;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.prebid.server.bidder.elementaltv.model;

import lombok.Value;

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

ElementalTVResponseAdsExt ads;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.prebid.server.bidder.elementaltv.model;

import lombok.Value;

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

Integer duration;
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.prebid.server.proto.openrtb.ext.request.elementaltv;

import lombok.Value;

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

String adunit;
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package org.prebid.server.spring.config.bidder;

import jakarta.validation.constraints.NotBlank;
import org.prebid.server.bidder.BidderDeps;
import org.prebid.server.bidder.adoppler.AdopplerBidder;
import org.prebid.server.bidder.elementaltv.ElementalTVBidder;
import org.prebid.server.json.JacksonMapper;
import org.prebid.server.spring.config.bidder.model.BidderConfigurationProperties;
import org.prebid.server.spring.config.bidder.util.BidderDepsAssembler;
Expand All @@ -13,29 +14,27 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import jakarta.validation.constraints.NotBlank;

@Configuration
@PropertySource(value = "classpath:/bidder-config/adoppler.yaml", factory = YamlPropertySourceFactory.class)
public class AdopplerConfiguration {
@PropertySource(value = "classpath:/bidder-config/elementaltv.yaml", factory = YamlPropertySourceFactory.class)
public class ElementalTVConfiguration {

private static final String BIDDER_NAME = "adoppler";
private static final String BIDDER_NAME = "elementaltv";

@Bean("adopplerConfigurationProperties")
@ConfigurationProperties("adapters.adoppler")
@Bean("elementalTVConfigurationProperties")
@ConfigurationProperties("adapters.elementaltv")
BidderConfigurationProperties configurationProperties() {
return new BidderConfigurationProperties();
}

@Bean
BidderDeps adopplerBidderDeps(BidderConfigurationProperties adopplerConfigurationProperties,
BidderDeps elementaltvBidderDeps(BidderConfigurationProperties elementalTVConfigurationProperties,
@NotBlank @Value("${external-url}") String externalUrl,
JacksonMapper mapper) {

return BidderDepsAssembler.forBidder(BIDDER_NAME)
.withConfig(adopplerConfigurationProperties)
.withConfig(elementalTVConfigurationProperties)
.usersyncerCreator(UsersyncerCreator.create(externalUrl))
.bidderCreator(config -> new AdopplerBidder(config.getEndpoint(), mapper))
.bidderCreator(config -> new ElementalTVBidder(config.getEndpoint(), mapper))
.assemble();
}
}
13 changes: 0 additions & 13 deletions src/main/resources/bidder-config/adoppler.yaml

This file was deleted.

18 changes: 18 additions & 0 deletions src/main/resources/bidder-config/elementaltv.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
adapters:
elementaltv:
endpoint: https://pbs.elementaltv.io/ads/processHeaderBid/{{AdUnit}}
ortb-version: "2.6"
aliases:
adoppler: ~
meta-info:
maintainer-email: support@elementaltv.com
app-media-types:
- banner
- video
- native
site-media-types:
- banner
- video
- native
supported-vendors:
vendor-id: 0
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Adoppler Adapter Params",
"description": "A schema which validates params accepted by the Adoppler adapter",
"title": "ElementalTV Adapter Params",
"description": "A schema which validates params accepted by the ElementalTV adapter",
"type": "object",
"properties": {
"adunit": {
"type": "string",
"description": "AdUnit to bid against to."
},
"client": {
"type": "string",
"description": "Client name."
}
},
"required": ["adunit"]
Expand Down
Loading