Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

SDK-1354 update example scenarios to use the new links feature #85

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
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
2 changes: 1 addition & 1 deletion examples/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<dependency>
<groupId>com.expediagroup</groupId>
<artifactId>rapid-sdk</artifactId>
<version>4.1.2</version>
<version>4.2.0-SNAPSHOT</version>
</dependency>

<dependency>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.expediagroup.sdk.rapid.examples;

import com.expediagroup.sdk.rapid.examples.salesprofiles.DefaultRapidPartnerProfile;
import com.expediagroup.sdk.rapid.examples.scenarios.booking.CancelHeldBookingScenario;
import com.expediagroup.sdk.rapid.examples.scenarios.booking.MultiRoomHoldAndResumeBookScenario;
import com.expediagroup.sdk.rapid.examples.scenarios.booking.SingleRoomBookScenario;
import com.expediagroup.sdk.rapid.examples.scenarios.geography.GetListOfRegionNamesScenario;
Expand All @@ -11,6 +12,7 @@
import com.expediagroup.sdk.rapid.examples.scenarios.geography.ParseRegionCoordinatesScenario;
import com.expediagroup.sdk.rapid.examples.scenarios.geography.ParseRegionDescendantsScenario;
import com.expediagroup.sdk.rapid.examples.scenarios.geography.ParseRegionWithMultiPolygonCoordinatesScenario;
import com.expediagroup.sdk.rapid.examples.scenarios.shopping.GetAdditionalAvailabilityOfPropertyScenario;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -29,6 +31,17 @@ public static void main(String[] args) {
logger.info("=======================================================================================");
logger.info("=======================================================================================");

logger.info("=============================== Running Shopping Scenarios ============================");

logger.info("Running Get Additional Availability Of Property Scenario...");
GetAdditionalAvailabilityOfPropertyScenario getAdditionalAvailabilityOfPropertyScenario = new GetAdditionalAvailabilityOfPropertyScenario();
getAdditionalAvailabilityOfPropertyScenario.setProfile(new DefaultRapidPartnerProfile());
getAdditionalAvailabilityOfPropertyScenario.run();

logger.info("=============================== End of Shopping Scenarios =============================");

logger.info("=============================== Running Booking Scenarios =============================");

/* Run Single Room Book Scenario using the default profile
This scenario demonstrates the following:
1. Shopping for properties
Expand All @@ -53,6 +66,22 @@ public static void main(String[] args) {
multiRoomHoldAndResumeBookScenario.setProfile(new DefaultRapidPartnerProfile());
multiRoomHoldAndResumeBookScenario.run();

/* Run Cancel Held Booking Scenario using the default profile
This scenario demonstrates the following:
1. Shopping for properties
2. Checking room prices for the property
3. Booking a room with hold in the property
4. Cancelling the held booking
*/
logger.info("Running Cancel Held Booking Scenario using the default profile...");
CancelHeldBookingScenario cancelHeldBookingScenario = new CancelHeldBookingScenario();
cancelHeldBookingScenario.setProfile(new DefaultRapidPartnerProfile());
cancelHeldBookingScenario.run();

logger.info("=============================== End of Booking Scenarios ==============================");

logger.info("=============================== Running Geography Scenarios ===========================");

/* Run Get List of Region Names Scenario using the default profile
This scenario demonstrates the following:
1. Getting all regions with details in a paginated manner
Expand Down Expand Up @@ -134,5 +163,22 @@ public static void main(String[] args) {
parseRegionCategoriesScenario.setProfile(new DefaultRapidPartnerProfile());
parseRegionCategoriesScenario.run();

/* Run Get Additional Availability Of Property Scenario using the default profile
This scenario demonstrates the following:
1. Getting property availability for a test property
2. Getting additional availability of the first property returned
*/

logger.info("=============================== End of Geography Scenarios ===========================");


logger.info("=======================================================================================");
logger.info("=======================================================================================");
logger.info("== ==");
logger.info("== That's all folks! Thanks for watching the demonstration of RAPID SDK. ==");
logger.info("== ==");
logger.info("=======================================================================================");
logger.info("=======================================================================================");

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package com.expediagroup.sdk.rapid.examples.scenarios.booking;

import com.expediagroup.sdk.rapid.examples.Constants;
import com.expediagroup.sdk.rapid.examples.salesprofiles.RapidPartnerSalesProfile;
import com.expediagroup.sdk.rapid.examples.scenarios.RapidScenario;
import com.expediagroup.sdk.rapid.examples.services.BookService;
import com.expediagroup.sdk.rapid.examples.services.ShopService;
import com.expediagroup.sdk.rapid.models.ItineraryCreation;
import com.expediagroup.sdk.rapid.models.Property;
import com.expediagroup.sdk.rapid.models.PropertyAvailability;
import com.expediagroup.sdk.rapid.models.RoomPriceCheck;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;
import java.util.List;

public class CancelHeldBookingScenario implements RapidScenario {

private static final Logger logger = LoggerFactory.getLogger(CancelHeldBookingScenario.class);
private ShopService shopService = new ShopService();
private RapidPartnerSalesProfile rapidPartnerSalesProfile;

@Override
public void setProfile(RapidPartnerSalesProfile rapidPartnerSalesProfile) {
this.rapidPartnerSalesProfile = rapidPartnerSalesProfile;
}

@Override
public void run() {

// Shopping for properties
logger.info("Getting property availability for test property: [{}]", Constants.TEST_PROPERTY_ID);

List<Property> propertyAvailabilityList = shopService.getSingleRoomPropertiesAvailability(this.rapidPartnerSalesProfile).getData();

if (propertyAvailabilityList == null || propertyAvailabilityList.isEmpty()) {
logger.error("No property availability found for the test property.");
return;
}

logger.info("Property Availability: {}", propertyAvailabilityList.get(0).getStatus());

// Checking room prices for the property
logger.info("Checking room prices for the property: [{}]...", Constants.TEST_PROPERTY_ID);
Property property = propertyAvailabilityList.get(0);
RoomPriceCheck roomPriceCheck = null;

if (property instanceof PropertyAvailability) {
PropertyAvailability propertyAvailability = (PropertyAvailability) property;
roomPriceCheck = shopService.checkRoomPrices(propertyAvailability, 0, 0).getData();
logger.info("Room Price Check: [{}]", roomPriceCheck.getStatus());
}

// Booking a room with hold in the property
logger.info("Booking a room with hold=true in test property: [{}]...", Constants.TEST_PROPERTY_ID);

BookService bookService = new BookService();
ItineraryCreation itineraryCreation = bookService.createBookingWithHold(roomPriceCheck, Arrays.asList("2")).getData();

logger.info("Booking with hold success. Itinerary id: [{}]", itineraryCreation.getItineraryId());

// Cancel the held booking
logger.info("Cancelling the held booking with itinerary id: [{}]...", itineraryCreation.getItineraryId());
bookService.cancelHeldReservationByItiniaryId(itineraryCreation);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public void run() {
logger.info("Booking 2 rooms with [hold=true] in test property: [{}]...", Constants.TEST_PROPERTY_ID);
BookService bookService = new BookService();
ItineraryCreation itineraryCreation = bookService.createBookingWithHold(roomPriceCheck, occupancy).getData();
logger.info("Booking with hold Success. Itinerary id: [{}]. Link to resume booking: [{}]",
logger.info("Booking with hold success. Itinerary id: [{}]. Link to resume booking: [{}]",
itineraryCreation.getItineraryId(), itineraryCreation.getLinks().getResume().getHref());

// Resume the booking process
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,5 +65,6 @@ public void run() {
logger.info("Getting itinerary by itinerary id...");
Itinerary itinerary = bookService.getReservationByItineraryId(itineraryCreation).getData();
logger.info("Itinerary: {}", itinerary.getItineraryId());
logger.info("Count of rooms booked: {}", itinerary.getRooms().size());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.expediagroup.sdk.rapid.examples.scenarios.shopping;

import com.expediagroup.sdk.core.model.Response;
import com.expediagroup.sdk.rapid.examples.Constants;
import com.expediagroup.sdk.rapid.examples.salesprofiles.RapidPartnerSalesProfile;
import com.expediagroup.sdk.rapid.examples.scenarios.RapidScenario;
import com.expediagroup.sdk.rapid.examples.services.ShopService;
import com.expediagroup.sdk.rapid.models.Property;
import com.expediagroup.sdk.rapid.models.PropertyAvailability;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;

public class GetAdditionalAvailabilityOfPropertyScenario implements RapidScenario {

private static final Logger logger = LoggerFactory.getLogger(GetAdditionalAvailabilityOfPropertyScenario.class);
private ShopService shopService = new ShopService();
private RapidPartnerSalesProfile rapidPartnerSalesProfile;

@Override
public void setProfile(RapidPartnerSalesProfile rapidPartnerSalesProfile) {
this.rapidPartnerSalesProfile = rapidPartnerSalesProfile;
}

@Override
public void run() {

// Shopping for properties
logger.info("Getting property availability for test property: {}", Constants.TEST_PROPERTY_ID);

List<Property> propertyAvailabilityList = shopService.getSingleRoomPropertiesAvailability(this.rapidPartnerSalesProfile).getData();

if (propertyAvailabilityList == null || propertyAvailabilityList.isEmpty()) {
logger.error("No property availability found for the test property.");
return;
}

logger.info("Property Availability: {}", propertyAvailabilityList.get(0).getStatus());

// Get additional availability of the first property returned
Property property = propertyAvailabilityList.get(0);
logger.info("Get additional availability of property id: {}...", property.getPropertyId());

PropertyAvailability propertyAvailability = (PropertyAvailability) property;
Response<List<PropertyAvailability>> additionalPropertyAvailability = shopService.getAdditionalAvailability(propertyAvailability);

// Log the additional availability
logger.info("Additional availability returned:");
additionalPropertyAvailability.getData().forEach(additionalProperty -> {
logger.info("---------------------------------");
logger.info("Property Id: {}", additionalProperty.getPropertyId());
logger.info("Property Rooms Count: {}", additionalProperty.getRooms().size());
logger.info("Property Status: {}", additionalProperty.getStatus());
});

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.expediagroup.sdk.core.model.Nothing;
import com.expediagroup.sdk.core.model.Response;
import com.expediagroup.sdk.rapid.examples.Constants;
import com.expediagroup.sdk.rapid.models.BillingContactRequest;
import com.expediagroup.sdk.rapid.models.BillingContactRequestAddress;
import com.expediagroup.sdk.rapid.models.CreateItineraryRequest;
Expand All @@ -12,33 +11,23 @@
import com.expediagroup.sdk.rapid.models.PaymentRequest;
import com.expediagroup.sdk.rapid.models.PhoneRequest;
import com.expediagroup.sdk.rapid.models.RoomPriceCheck;
import com.expediagroup.sdk.rapid.operations.DeleteHeldBookingOperation;
import com.expediagroup.sdk.rapid.operations.GetReservationByItineraryIdOperation;
import com.expediagroup.sdk.rapid.operations.GetReservationByItineraryIdOperationParams;
import com.expediagroup.sdk.rapid.operations.PostItineraryOperation;
import com.expediagroup.sdk.rapid.operations.PostItineraryOperationParams;
import com.expediagroup.sdk.rapid.operations.PutResumeBookingOperation;
import com.expediagroup.sdk.rapid.operations.PutResumeBookingOperationParams;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.UUID;

public class BookService extends RapidService {

public Response<ItineraryCreation> createBooking(RoomPriceCheck roomPriceCheck, List<String> occupancy) {

String bookHref = roomPriceCheck.getLinks().getBook().getHref();

// In the Book request, include corresponding separate instances of room in the rooms array for each room you wish to book. */
List<CreateItineraryRequestRoom> rooms = Collections.nCopies(occupancy.size(), createRoom());

PostItineraryOperationParams params = PostItineraryOperationParams.builder()
.customerIp(Constants.CUSTOMER_IP)
.token(Objects.requireNonNull(rapidClient.helpers.extractToken(bookHref)))
.build();

CreateItineraryRequest createItineraryRequest = CreateItineraryRequest.builder()
.affiliateReferenceId(UUID.randomUUID().toString().substring(0, 28))
.hold(false)
Expand All @@ -51,23 +40,16 @@ public Response<ItineraryCreation> createBooking(RoomPriceCheck roomPriceCheck,
.travelerHandlingInstructions("Please use the card provided for payment. Avoid cancellation as this is for a corporate traveler. Contact traveler if any issues.")
.build();

PostItineraryOperation operation = new PostItineraryOperation(createItineraryRequest, params);

PostItineraryOperation operation = new PostItineraryOperation(roomPriceCheck.getLinks().getBook(), createItineraryRequest);
return rapidClient.execute(operation);
}

public Response<ItineraryCreation> createBookingWithHold(RoomPriceCheck roomPriceCheck, List<String> occupancy) {
String bookHref = roomPriceCheck.getLinks().getBook().getHref();

// In the Book request, include corresponding separate instances of room in the rooms array for each room you wish to book. */
List<CreateItineraryRequestRoom> rooms = Collections.nCopies(occupancy.size(), createRoom());

// Create a booking with hold, set hold to true
PostItineraryOperationParams params = PostItineraryOperationParams.builder()
.customerIp(Constants.CUSTOMER_IP)
.token(Objects.requireNonNull(rapidClient.helpers.extractToken(bookHref)))
.build();

// Create a booking with hold, set hold to true in the request
CreateItineraryRequest createItineraryRequest = CreateItineraryRequest.builder()
.affiliateReferenceId(UUID.randomUUID().toString().substring(0, 28))
.hold(true)
Expand All @@ -80,37 +62,20 @@ public Response<ItineraryCreation> createBookingWithHold(RoomPriceCheck roomPric
.travelerHandlingInstructions("Please use the card provided for payment. Avoid cancellation as this is for a corporate traveler. Contact traveler if any issues.")
.build();

PostItineraryOperation operation = new PostItineraryOperation(createItineraryRequest, params);

PostItineraryOperation operation = new PostItineraryOperation(roomPriceCheck.getLinks().getBook(), createItineraryRequest);
return rapidClient.execute(operation);
}

public Response<Nothing> resumeBooking(ItineraryCreation itineraryCreation) {

PutResumeBookingOperationParams params = PutResumeBookingOperationParams.builder()
.customerIp(Constants.CUSTOMER_IP)
.customerSessionId("123455656565")
.itineraryId(itineraryCreation.getItineraryId())
.token(Objects.requireNonNull(rapidClient.helpers.extractToken(itineraryCreation.getLinks().getResume().getHref())))
.test("standard")
.build();

return rapidClient.execute(new PutResumeBookingOperation(params));
return rapidClient.execute(new PutResumeBookingOperation(itineraryCreation.getLinks().getResume()));
}

public Response<Itinerary> getReservationByItineraryId(ItineraryCreation itineraryCreation) {
return rapidClient.execute(new GetReservationByItineraryIdOperation(itineraryCreation.getLinks().getRetrieve()));
}

GetReservationByItineraryIdOperationParams params = GetReservationByItineraryIdOperationParams.builder()
.customerIp(Constants.CUSTOMER_IP)
.itineraryId(itineraryCreation.getItineraryId())
.customerSessionId("123455656565")
.test("standard")
.token(rapidClient.helpers.extractToken(itineraryCreation.getLinks().getRetrieve().getHref()))
.build();

GetReservationByItineraryIdOperation operation = new GetReservationByItineraryIdOperation(params);

return rapidClient.execute(operation);
public Response<Nothing> cancelHeldReservationByItiniaryId(ItineraryCreation itineraryCreation) {
return rapidClient.execute(new DeleteHeldBookingOperation(itineraryCreation.getLinks().getCancel()));
}

/* Helper methods */
Expand Down
Loading