Skip to content

Commit 18f71bf

Browse files
committed
feat: Adding AdDelivery capability
1 parent f20b1f9 commit 18f71bf

File tree

8 files changed

+756
-82
lines changed

8 files changed

+756
-82
lines changed

.github/workflows/generate-and-publish-sdk-sources.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@ jobs:
2323
with:
2424
name: rapid
2525
version: ${{ inputs.version }}
26-
transformations: "-th -te /v3 --operationIdsToTags"
26+
transformations: "-th --operationIdsToTags"
2727
repository: 'ExpediaGroup/rapid-java-sdk'
2828
sdk_repo_ref: ${{ inputs.sdk_repo_ref || 'v20250203' }}

examples/src/main/java/com/expediagroup/sdk/rapid/examples/RapidSdkDemoApplication.java

Lines changed: 10 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,12 @@
11
package com.expediagroup.sdk.rapid.examples;
22

33
import com.expediagroup.sdk.rapid.examples.salesprofiles.DefaultRapidPartnerProfile;
4+
import com.expediagroup.sdk.rapid.examples.scenarios.addelivery.GetAdsScenario;
45
import com.expediagroup.sdk.rapid.examples.scenarios.booking.AsyncSingleRoomBookScenario;
56
import com.expediagroup.sdk.rapid.examples.scenarios.booking.MultiRoomHoldAndResumeBookScenario;
67
import com.expediagroup.sdk.rapid.examples.scenarios.booking.SingleRoomBookScenario;
78
import com.expediagroup.sdk.rapid.examples.scenarios.content.GetPropertyContentInAdditionalLanguageScenario;
89
import com.expediagroup.sdk.rapid.examples.scenarios.content.GetPropertyContentScenario;
9-
import com.expediagroup.sdk.rapid.examples.scenarios.geography.GetListOfRegionNamesScenario;
10-
import com.expediagroup.sdk.rapid.examples.scenarios.geography.GetRegionByAncestorIdScenario;
11-
import com.expediagroup.sdk.rapid.examples.scenarios.geography.GetRegionDetailsAndPropertyIdsScenario;
12-
import com.expediagroup.sdk.rapid.examples.scenarios.geography.ParseRegionAncestorsScenario;
13-
import com.expediagroup.sdk.rapid.examples.scenarios.geography.ParseRegionCategoriesScenario;
14-
import com.expediagroup.sdk.rapid.examples.scenarios.geography.ParseRegionCoordinatesScenario;
15-
import com.expediagroup.sdk.rapid.examples.scenarios.geography.ParseRegionDescendantsScenario;
16-
import com.expediagroup.sdk.rapid.examples.scenarios.geography.ParseRegionWithMultiPolygonCoordinatesScenario;
1710
import com.expediagroup.sdk.rapid.examples.scenarios.managebooking.CancelHeldBookingScenario;
1811
import com.expediagroup.sdk.rapid.examples.scenarios.managebooking.ChangeRoomDetailsScenario;
1912
import com.expediagroup.sdk.rapid.examples.scenarios.managebooking.DeleteRoomScenario;
@@ -159,82 +152,19 @@ public static void main(String[] args) throws ExecutionException, InterruptedExc
159152

160153
logger.info("=============================== End of Property Content Scenarios ===========================");
161154

162-
logger.info("=============================== Running Geography Scenarios ===========================");
155+
logger.info("============================ Running Ad Delivery Scenarios =============================");
163156

164-
/* Run Get List of Region Names Scenario using the default profile
157+
/* Run Get Ads Scenario using the default profile
165158
This scenario demonstrates the following:
166-
1. Getting all regions with details in a paginated manner
167-
2. Filtering region names
168-
*/
169-
GetListOfRegionNamesScenario getListOfRegionNamesScenario = new GetListOfRegionNamesScenario();
170-
getListOfRegionNamesScenario.setProfile(new DefaultRapidPartnerProfile());
171-
getListOfRegionNamesScenario.run();
172-
173-
/* Run Get Region Name of Region Scenario using the default profile
174-
This scenario demonstrates the following:
175-
1. Getting region details by region id
176-
2. Accessing region details
177-
*/
178-
GetRegionDetailsAndPropertyIdsScenario getRegionNameOfRegionScenario = new GetRegionDetailsAndPropertyIdsScenario();
179-
getRegionNameOfRegionScenario.setProfile(new DefaultRapidPartnerProfile());
180-
getRegionNameOfRegionScenario.run();
181-
182-
/* Run Get Region By Ancestor Id Scenario using the default profile
183-
This scenario demonstrates the following:
184-
1. Getting paginated regions details by ancestor id
185-
2. Accessing region details
186-
*/
187-
GetRegionByAncestorIdScenario getRegionByAncestorIdScenario = new GetRegionByAncestorIdScenario();
188-
getRegionByAncestorIdScenario.setProfile(new DefaultRapidPartnerProfile());
189-
getRegionByAncestorIdScenario.run();
190-
191-
/* Run Get Region With MultiPolygon Coordinates Scenario using the default profile
192-
This scenario demonstrates the following:
193-
1. Getting region details with multipolygon coordinates by region id
194-
2. Accessing region coordinates of type multipolygon
195-
3. Accessing every polygon list of coordinates.
196-
*/
197-
ParseRegionWithMultiPolygonCoordinatesScenario parseRegionWithMultiPolygonCoordinatesScenario = new ParseRegionWithMultiPolygonCoordinatesScenario();
198-
parseRegionWithMultiPolygonCoordinatesScenario.setProfile(new DefaultRapidPartnerProfile());
199-
parseRegionWithMultiPolygonCoordinatesScenario.run();
200-
201-
/* Run Parse Region Ancestors Scenario using the default profile
202-
This scenario demonstrates the following:
203-
1. Getting region details with ancestors by region id
204-
2. Parsing region ancestors
205-
*/
206-
ParseRegionAncestorsScenario parseRegionAncestorsScenario = new ParseRegionAncestorsScenario();
207-
parseRegionAncestorsScenario.setProfile(new DefaultRapidPartnerProfile());
208-
parseRegionAncestorsScenario.run();
209-
210-
/* Run Parse Region Descendants Scenario using the default profile
211-
This scenario demonstrates the following:
212-
1. Getting region details with descendants by region id
213-
2. Parsing region descendants
214-
*/
215-
ParseRegionDescendantsScenario parseRegionDescendantsScenario = new ParseRegionDescendantsScenario();
216-
parseRegionDescendantsScenario.setProfile(new DefaultRapidPartnerProfile());
217-
parseRegionDescendantsScenario.run();
218-
219-
/* Run Parse Region Coordinates Scenario using the default profile
220-
This scenario demonstrates the following:
221-
1. Getting region details with coordinates by region id
222-
2. Parsing region coordinates
223-
*/
224-
ParseRegionCoordinatesScenario parseRegionCoordinatesScenario = new ParseRegionCoordinatesScenario();
225-
parseRegionCoordinatesScenario.setProfile(new DefaultRapidPartnerProfile());
226-
parseRegionCoordinatesScenario.run();
227-
228-
/* Run Parse Region Categories Scenario using the default profile
229-
This scenario demonstrates the following:
230-
1. Getting region details with property ids by region id
231-
2. Parsing region categories
159+
1. Shopping for properties
160+
2. Getting property availability for test property
161+
3. Getting sponsored listings for the property
232162
*/
233-
ParseRegionCategoriesScenario parseRegionCategoriesScenario = new ParseRegionCategoriesScenario();
234-
parseRegionCategoriesScenario.setProfile(new DefaultRapidPartnerProfile());
235-
parseRegionCategoriesScenario.run();
163+
GetAdsScenario getAdsScenario = new GetAdsScenario();
164+
getAdsScenario.setProfile(new DefaultRapidPartnerProfile());
165+
getAdsScenario.run();
236166

237-
logger.info("=============================== End of Geography Scenarios ===========================");
167+
logger.info("=========================== End of Ad Delivery Scenarios ============================");
238168

239169

240170
logger.info("=======================================================================================");
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
package com.expediagroup.sdk.rapid.examples;
2+
3+
import com.expediagroup.sdk.rapid.examples.salesprofiles.DefaultRapidPartnerProfile;
4+
import com.expediagroup.sdk.rapid.examples.scenarios.geography.GetListOfRegionNamesScenario;
5+
import com.expediagroup.sdk.rapid.examples.scenarios.geography.GetRegionByAncestorIdScenario;
6+
import com.expediagroup.sdk.rapid.examples.scenarios.geography.GetRegionDetailsAndPropertyIdsScenario;
7+
import com.expediagroup.sdk.rapid.examples.scenarios.geography.ParseRegionAncestorsScenario;
8+
import com.expediagroup.sdk.rapid.examples.scenarios.geography.ParseRegionCategoriesScenario;
9+
import com.expediagroup.sdk.rapid.examples.scenarios.geography.ParseRegionCoordinatesScenario;
10+
import com.expediagroup.sdk.rapid.examples.scenarios.geography.ParseRegionDescendantsScenario;
11+
import com.expediagroup.sdk.rapid.examples.scenarios.geography.ParseRegionWithMultiPolygonCoordinatesScenario;
12+
import org.slf4j.Logger;
13+
import org.slf4j.LoggerFactory;
14+
15+
import java.util.concurrent.ExecutionException;
16+
17+
18+
public class RapidSdkGeographyDemoApp {
19+
20+
private static final Logger logger = LoggerFactory.getLogger(RapidSdkGeographyDemoApp.class);
21+
22+
public static void main(String[] args) throws ExecutionException, InterruptedException {
23+
24+
logger.info("=======================================================================================");
25+
logger.info("=======================================================================================");
26+
logger.info("== ==");
27+
logger.info("== Howdy! This is a demonstration of Expedia Group RAPID SDK Geography, Enjoy! ==");
28+
logger.info("== ==");
29+
logger.info("=======================================================================================");
30+
logger.info("=======================================================================================");
31+
32+
logger.info("=============================== Running Geography Scenarios ===========================");
33+
34+
/* Run Get List of Region Names Scenario using the default profile
35+
This scenario demonstrates the following:
36+
1. Getting all regions with details in a paginated manner
37+
2. Filtering region names
38+
*/
39+
GetListOfRegionNamesScenario getListOfRegionNamesScenario = new GetListOfRegionNamesScenario();
40+
getListOfRegionNamesScenario.setProfile(new DefaultRapidPartnerProfile());
41+
getListOfRegionNamesScenario.run();
42+
43+
/* Run Get Region Name of Region Scenario using the default profile
44+
This scenario demonstrates the following:
45+
1. Getting region details by region id
46+
2. Accessing region details
47+
*/
48+
GetRegionDetailsAndPropertyIdsScenario getRegionNameOfRegionScenario = new GetRegionDetailsAndPropertyIdsScenario();
49+
getRegionNameOfRegionScenario.setProfile(new DefaultRapidPartnerProfile());
50+
getRegionNameOfRegionScenario.run();
51+
52+
/* Run Get Region By Ancestor Id Scenario using the default profile
53+
This scenario demonstrates the following:
54+
1. Getting paginated regions details by ancestor id
55+
2. Accessing region details
56+
*/
57+
GetRegionByAncestorIdScenario getRegionByAncestorIdScenario = new GetRegionByAncestorIdScenario();
58+
getRegionByAncestorIdScenario.setProfile(new DefaultRapidPartnerProfile());
59+
getRegionByAncestorIdScenario.run();
60+
61+
/* Run Get Region With MultiPolygon Coordinates Scenario using the default profile
62+
This scenario demonstrates the following:
63+
1. Getting region details with multipolygon coordinates by region id
64+
2. Accessing region coordinates of type multipolygon
65+
3. Accessing every polygon list of coordinates.
66+
*/
67+
ParseRegionWithMultiPolygonCoordinatesScenario parseRegionWithMultiPolygonCoordinatesScenario = new ParseRegionWithMultiPolygonCoordinatesScenario();
68+
parseRegionWithMultiPolygonCoordinatesScenario.setProfile(new DefaultRapidPartnerProfile());
69+
parseRegionWithMultiPolygonCoordinatesScenario.run();
70+
71+
/* Run Parse Region Ancestors Scenario using the default profile
72+
This scenario demonstrates the following:
73+
1. Getting region details with ancestors by region id
74+
2. Parsing region ancestors
75+
*/
76+
ParseRegionAncestorsScenario parseRegionAncestorsScenario = new ParseRegionAncestorsScenario();
77+
parseRegionAncestorsScenario.setProfile(new DefaultRapidPartnerProfile());
78+
parseRegionAncestorsScenario.run();
79+
80+
/* Run Parse Region Descendants Scenario using the default profile
81+
This scenario demonstrates the following:
82+
1. Getting region details with descendants by region id
83+
2. Parsing region descendants
84+
*/
85+
ParseRegionDescendantsScenario parseRegionDescendantsScenario = new ParseRegionDescendantsScenario();
86+
parseRegionDescendantsScenario.setProfile(new DefaultRapidPartnerProfile());
87+
parseRegionDescendantsScenario.run();
88+
89+
/* Run Parse Region Coordinates Scenario using the default profile
90+
This scenario demonstrates the following:
91+
1. Getting region details with coordinates by region id
92+
2. Parsing region coordinates
93+
*/
94+
ParseRegionCoordinatesScenario parseRegionCoordinatesScenario = new ParseRegionCoordinatesScenario();
95+
parseRegionCoordinatesScenario.setProfile(new DefaultRapidPartnerProfile());
96+
parseRegionCoordinatesScenario.run();
97+
98+
/* Run Parse Region Categories Scenario using the default profile
99+
This scenario demonstrates the following:
100+
1. Getting region details with property ids by region id
101+
2. Parsing region categories
102+
*/
103+
ParseRegionCategoriesScenario parseRegionCategoriesScenario = new ParseRegionCategoriesScenario();
104+
parseRegionCategoriesScenario.setProfile(new DefaultRapidPartnerProfile());
105+
parseRegionCategoriesScenario.run();
106+
107+
logger.info("=============================== End of Geography Scenarios ===========================");
108+
109+
logger.info("=======================================================================================");
110+
logger.info("=======================================================================================");
111+
logger.info("== ==");
112+
logger.info("== That's all folks! That was the demonstration of RAPID SDK Geography. ==");
113+
logger.info("== ==");
114+
logger.info("=======================================================================================");
115+
logger.info("=======================================================================================");
116+
System.exit(0);
117+
}
118+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.expediagroup.sdk.rapid.examples.scenarios.addelivery;
2+
3+
import com.expediagroup.sdk.core.model.Response;
4+
import com.expediagroup.sdk.rapid.examples.Constants;
5+
import com.expediagroup.sdk.rapid.examples.salesprofiles.RapidPartnerSalesProfile;
6+
import com.expediagroup.sdk.rapid.examples.scenarios.RapidScenario;
7+
import com.expediagroup.sdk.rapid.examples.services.ShopService;
8+
import com.expediagroup.sdk.rapid.examples.services.AdDeliveryService;
9+
import com.expediagroup.sdk.rapid.models.AdsResponse;
10+
import com.expediagroup.sdk.rapid.models.Property;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
13+
14+
import java.util.ArrayList;
15+
import java.util.Arrays;
16+
import java.util.List;
17+
18+
public class GetAdsScenario implements RapidScenario {
19+
20+
private static final Logger logger = LoggerFactory.getLogger(GetAdsScenario.class);
21+
private AdDeliveryService adDeliveryService = new AdDeliveryService();
22+
private ShopService shopService = new ShopService();
23+
private RapidPartnerSalesProfile rapidPartnerSalesProfile;
24+
25+
@Override
26+
public void setProfile(RapidPartnerSalesProfile rapidPartnerSalesProfile) {
27+
this.rapidPartnerSalesProfile = rapidPartnerSalesProfile;
28+
}
29+
30+
@Override
31+
public void run() {
32+
33+
logger.info("Running Get Lodging Ads...");
34+
35+
// Shopping for properties
36+
logger.info("Getting property availability for test property: {}", Constants.TEST_PROPERTY_ID);
37+
38+
List<Property> propertyAvailabilityList = shopService.getPropertiesAvailability(Arrays.asList("2"), this.rapidPartnerSalesProfile).getData();
39+
40+
if (propertyAvailabilityList == null || propertyAvailabilityList.isEmpty()) {
41+
throw new IllegalStateException("No property availability found for the test property.");
42+
}
43+
44+
// Get the property ids from response
45+
ArrayList<String> propertyIds = new ArrayList<>();
46+
propertyAvailabilityList.forEach(property -> propertyIds.add(property.getPropertyId()));
47+
48+
// call Ad Delivery API
49+
logger.info("Calling GetAdsOperation for property ids:");
50+
propertyIds.forEach(propertyId -> logger.info("Property Id: [{}]", propertyId));
51+
52+
Response<AdsResponse> adsResponse = adDeliveryService.getAds(propertyIds);
53+
logger.info("Get ads response status: [{}]", adsResponse.getStatusCode());
54+
logger.info("Get ads response, number of sponsored listings: {}", adsResponse.getData()
55+
.getSponsoredListings().size());
56+
}
57+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.expediagroup.sdk.rapid.examples.services;
2+
3+
import com.expediagroup.sdk.core.model.Response;
4+
import com.expediagroup.sdk.rapid.examples.Constants;
5+
import com.expediagroup.sdk.rapid.models.AdsRequest;
6+
import com.expediagroup.sdk.rapid.models.AdsResponse;
7+
import com.expediagroup.sdk.rapid.models.Coordinates1;
8+
import com.expediagroup.sdk.rapid.models.GuestCounts;
9+
import com.expediagroup.sdk.rapid.models.PageType;
10+
import com.expediagroup.sdk.rapid.models.ProductLine;
11+
import com.expediagroup.sdk.rapid.models.SalesChannel;
12+
import com.expediagroup.sdk.rapid.operations.GetAdsOperation;
13+
import com.expediagroup.sdk.rapid.operations.GetAdsOperationParams;
14+
15+
import java.math.BigDecimal;
16+
import java.time.LocalDate;
17+
import java.util.Arrays;
18+
import java.util.List;
19+
20+
public class AdDeliveryService extends RapidService {
21+
22+
public Response<AdsResponse> getAds(List<String> propertyIds) {
23+
GetAdsOperationParams getAdsOperationParams = getAdsOperationParams();
24+
25+
AdsRequest adsRequest = AdsRequest.builder()
26+
.checkin(LocalDate.now().plusDays(20).toString())
27+
.checkout(LocalDate.now().plusDays(23).toString())
28+
.occupancies(Arrays.asList(GuestCounts.builder().adultCount(2).childCount(0).build()))
29+
.searchProductLines(Arrays.asList(ProductLine.LODGING))
30+
.propertyIds(propertyIds)
31+
.pageType(PageType.SEARCH_RESULTS)
32+
.salesChannel(SalesChannel.WEBSITE)
33+
.countryCode("US")
34+
.experimentIds(Arrays.asList("1234"))
35+
.language("en-US")
36+
.travelerLocation(Coordinates1.builder()
37+
.latitude(BigDecimal.valueOf(37.7749))
38+
.longitude(BigDecimal.valueOf(-122.4194))
39+
.build())
40+
.build();
41+
42+
GetAdsOperation getAdsOperation =
43+
new GetAdsOperation(getAdsOperationParams, adsRequest);
44+
45+
return rapidClient.execute(getAdsOperation);
46+
}
47+
48+
private GetAdsOperationParams getAdsOperationParams() {
49+
return GetAdsOperationParams
50+
.builder()
51+
.customerIp(Constants.CUSTOMER_IP)
52+
.build();
53+
}
54+
}

0 commit comments

Comments
 (0)