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’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Flight Create Orders #54

Merged
merged 9 commits into from
Mar 12, 2020
Merged
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
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,14 @@ Delay[] flightDelay = amadeus.travel.predictions.flightDelay.get(Params
.and("flightNumber", "1816")
.and("duration", "PT31H10M"));

// Flight Create Orders to book a flight
// Using a JSonObject or String
FlightOrder createdOrder = amadeus.booking.flightOrders.pricing.post(body);

// Using a JsonObject for flight offer and Traveler[] as traveler information
// see example at src/main/java/examples/flight/createorders/FlightCreateOrders.java
FlightOrder createdOrder = amadeus.booking.flightOrders.post(flightOffersSearches, travelerArray);

// What is the the seat map of a given flight?
SeatMap[] seatmap = amadeus.shopping.seatMaps.get(Params
.with("flight-orderId", "eJzTd9f3NjIJdzUGAAp%2fAiY="));
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/amadeus/Booking.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.amadeus;

import com.amadeus.booking.FlightOrder;
import com.amadeus.booking.FlightOrders;

public class Booking {
private Amadeus client;
Expand All @@ -13,8 +14,17 @@ public class Booking {
*/
public FlightOrder flightOrder;

/**
* <p>
* A namespaced client for the
* <code>/v1/booking/flightOrders</code> endpoints.
* </p>
*/
public FlightOrders flightOrders;

public Booking(Amadeus client) {
this.client = client;
this.flightOrders = new FlightOrders(client);
}

public FlightOrder flightOrder(String flightOrderId) {
Expand Down
147 changes: 147 additions & 0 deletions src/main/java/com/amadeus/booking/FlightOrders.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
package com.amadeus.booking;

import com.amadeus.Amadeus;
import com.amadeus.Response;
import com.amadeus.exceptions.ResponseException;
import com.amadeus.resources.FlightOfferSearch;
import com.amadeus.resources.FlightOrder;
import com.amadeus.resources.Resource;
import com.amadeus.resources.Traveler;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

/**
* <p>
* A namespaced client for the
* <code>/v1/booking/flight-orders</code> endpoints.
* </p>
*
* <p>
* Access via the Amadeus client object.
* </p>
*
* <pre>
* Amadeus amadeus = Amadeus.builder(API_KEY, API_SECRET).build();
* amadeus.booking.flightOrders;</pre>
*/
public class FlightOrders {
private Amadeus client;

/**
* Constructor.
*
* @hide
*/
public FlightOrders(Amadeus client) {
this.client = client;
}

/**
* <p>
* The Flight Create Orders API allows you to perform flight booking.
* </p>
*
* <pre>
* amadeus.booking.flightOrders.post(body);</pre>
*
* @param body the parameters to send to the API as a JSonObject
* @return an API resource
* @throws ResponseException when an exception occurs
*/
public FlightOrder post(JsonObject body) throws ResponseException {
Response response = client.post("/v1/booking/flight-orders", body);
return (FlightOrder) Resource.fromObject(response, FlightOrder.class);
}

/**
* <p>
* The Flight Create Orders API allows you to perform flight booking.
* </p>
*
* <pre>
* amadeus.booking.flightOrders.post(body);</pre>
*
* @param body the parameters to send to the API as a String
* @return an API resource
* @throws ResponseException when an exception occurs
*/
public FlightOrder post(String body) throws ResponseException {
Response response = client.post("/v1/booking/flight-orders", body);
return (FlightOrder) Resource.fromObject(response, FlightOrder.class);
}

/**
* <p>
* The Flight Create Orders API allows you to perform flight booking.
* </p>
*
* <pre>
* amadeus.booking.flightOrders.post(object);</pre>
*
* @param flightOffersSearches List of flight-offers as FlightOfferSearch[]
* @param travelers List of travelers as Traveler[]
* @return an API resource
* @throws ResponseException when an exception occurs
*/
public FlightOrder post(FlightOfferSearch[] flightOffersSearches,
Traveler[] travelers) throws ResponseException {

JsonObject nameObject = new JsonObject();
nameObject.addProperty("firstName", travelers[0].getName().getFirstName());
nameObject.addProperty("lastName", travelers[0].getName().getLastName());

JsonObject phoneObject = new JsonObject();
phoneObject.addProperty("countryCallingCode",
travelers[0].getContact().getPhones()[0].getCountryCallingCode());
phoneObject.addProperty("number", travelers[0].getContact().getPhones()[0].getNumber());
phoneObject.addProperty("deviceType", travelers[0].getContact().getPhones()[0].getDeviceType());


JsonArray phonesArray = new JsonArray();
phonesArray.add(phoneObject);

JsonObject contactObject = new JsonObject();
contactObject.add("phones", phonesArray);

JsonObject documentsOject = new JsonObject();
documentsOject.addProperty("documentType", travelers[0].getDocuments()[0].getDocumentType());
documentsOject.addProperty("number", travelers[0].getDocuments()[0].getNumber());
documentsOject.addProperty("expiryDate", travelers[0].getDocuments()[0].getExpiryDate());
documentsOject.addProperty("nationality", travelers[0].getDocuments()[0].getNationality());
documentsOject.addProperty("issuanceCountry",
travelers[0].getDocuments()[0].getIssuanceCountry());
documentsOject.addProperty("holder", travelers[0].getDocuments()[0].isHolder());
JsonArray documentsArray = new JsonArray();
documentsArray.add(documentsOject);

JsonObject travelerObject = new JsonObject();
travelerObject.addProperty("id", travelers[0].getId());
travelerObject.addProperty("dateOfBirth", travelers[0].getDateOfBirth());
travelerObject.add("name", nameObject);
travelerObject.add("contact", contactObject);
travelerObject.add("documents", documentsArray);
JsonArray travelerArray = new JsonArray();
travelerArray.add(travelerObject);

JsonObject typeObject = new JsonObject();
typeObject.addProperty("type", "flight-order");
typeObject.add("flightOffers", flightOffersSearches[0].getResponse().getData());
typeObject.add("travelers", travelerArray);

JsonObject jsonObject = new JsonObject();
jsonObject.add("data", typeObject);
System.out.println(jsonObject);

Response response = client.post("/v1/booking/flight-orders", jsonObject);
return (FlightOrder) Resource.fromObject(response, FlightOrder.class);
}

/**
* Convenience method for calling <code>post</code> without any parameters.
*
* @see FlightOrders#post()
*/
public FlightOrder post() throws ResponseException {
return post((String) null);
}
}
83 changes: 83 additions & 0 deletions src/main/java/com/amadeus/resources/Traveler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package com.amadeus.resources;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
* An Traveler object used in the body of Flight Create Orders.
* @see com.amadeus.booking.flightOrder#get()
*/
@ToString
public class Traveler extends Resource {
public Traveler(String id, String dateOfBirth, Name name, Contact contact, Document[] documents) {
this.name = name;
this.contact = contact;
}

public Traveler() {

}

private @Getter @Setter String id;
private @Getter @Setter String dateOfBirth;
private @Getter @Setter Name name;
private @Getter @Setter Contact contact;
private @Getter @Setter Document[] documents;

@ToString
public class Name {
public Name(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}

private @Getter @Setter String firstName;
private @Getter @Setter String lastName;

}

@ToString
public class Contact {
public Contact() {
}

public Contact(Phone phones) {
}

private @Getter @Setter Phone[] phones;
}

@ToString
public class Document {
public Document() {
}

public Document(String documentType, String number, String expiryDate,
String issuanceCountry, String nationality, boolean holder) {

}

private @Getter @Setter String documentType;
private @Getter @Setter String number;
private @Getter @Setter String expiryDate;
private @Getter @Setter String issuanceCountry;
private @Getter @Setter String nationality;
private @Getter @Setter boolean holder;
}

@ToString
public class Phone {

public Phone() {
}

public Phone(String countryCallingCode, String number) {
}

private @Getter @Setter String countryCallingCode;
private @Getter @Setter String number;
private @Getter @Setter String deviceType;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package examples.flight.createorders;

import com.amadeus.Amadeus;
import com.amadeus.Params;
import com.amadeus.exceptions.ResponseException;
import com.amadeus.resources.FlightOfferSearch;
import com.amadeus.resources.FlightOrder;
import com.amadeus.resources.Traveler;
import com.amadeus.resources.Traveler.Document;
import com.amadeus.resources.Traveler.Phone;

public class FlightCreateOrders {
/**
* <p>
* An example to call the Flight Create Orders API
* <code>/v1/booking/flight-orders</code> endpoints.
* </p>
*
* <p>
* Access via the Amadeus client object.
* </p>
*
* <pre>
* Amadeus amadeus = Amadeus.builder("clientId", "secret").build();
* amadeus.booking.flightOrders;</pre>
*/
public static void main(String[] args) throws ResponseException {

Traveler traveler = new Traveler();

traveler.setId("1");
traveler.setDateOfBirth("2000-04-14");
traveler.setName(traveler.new Name("JORGE", "GONZALES"));

Traveler.Phone[] phone = new Phone[1];
phone[0] = traveler.new Phone();
phone[0].setCountryCallingCode("33");
phone[0].setNumber("675426222");
phone[0].setDeviceType("MOBILE");

Traveler.Contact contact = traveler.new Contact();
contact.setPhones(phone);
traveler.setContact(contact);

Traveler.Document[] document = new Document[1];
document[0] = traveler.new Document();
document[0].setDocumentType("PASSPORT");
document[0].setNumber("480080076");
document[0].setExpiryDate("2022-10-11");
document[0].setIssuanceCountry("ES");
document[0].setNationality("ES");
document[0].setHolder(true);
traveler.setDocuments(document);

Traveler[] travelerArray = new Traveler[1];
travelerArray[0] = traveler;
System.out.println(travelerArray[0]);

Amadeus amadeus = Amadeus
.builder("YOUR_CLIENT_ID","YOUR_CLIENT_SECRET")
.build();

FlightOfferSearch[] flightOffersSearches = amadeus.shopping.flightOffersSearch.get(
Params.with("originLocationCode", "SYD")
.and("destinationLocationCode", "BKK")
.and("departureDate", "2020-11-01")
.and("returnDate", "2020-11-08")
.and("adults", 1)
.and("max", 1));

FlightOrder order = amadeus.booking.flightOrders.post(flightOffersSearches, travelerArray);
System.out.println(order);
}
}
10 changes: 10 additions & 0 deletions src/test/java/com/amadeus/NamespaceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.amadeus.airport.predictions.AirportOnTime;
import com.amadeus.booking.FlightOrder;
import com.amadeus.booking.FlightOrders;
import com.amadeus.ereputation.HotelSentiments;
import com.amadeus.exceptions.ResponseException;
import com.amadeus.referenceData.Airlines;
Expand Down Expand Up @@ -323,6 +324,15 @@ public void testPostMethods() throws ResponseException {
TestCase.assertNotNull(flightOfferSearch.post(body));
TestCase.assertEquals(flightOfferSearch.post().length, 2);

// Test flight create orders
Mockito.when(client.post("/v1/booking/flight-orders", (String) null))
.thenReturn(singleResponse);
Mockito.when(client.post("/v1/booking/flight-orders", body))
.thenReturn(singleResponse);
FlightOrders order = new FlightOrders(client);
TestCase.assertNotNull(order.post());
TestCase.assertNotNull(order.post(body));

// Test SeatMaps post
Mockito.when(client.post("/v1/shopping/seatmaps", (String) null))
.thenReturn(multiResponse);
Expand Down