Skip to content

Commit 8ed52c6

Browse files
authored
Flight Create Orders (#54)
* initial commit * fix booking * support traveler and flighs object for create orders * update docs and add tests * fix readme * add create orders example * update docs * update readme
1 parent cdc8fc9 commit 8ed52c6

File tree

6 files changed

+332
-0
lines changed

6 files changed

+332
-0
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,14 @@ Delay[] flightDelay = amadeus.travel.predictions.flightDelay.get(Params
335335
.and("flightNumber", "1816")
336336
.and("duration", "PT31H10M"));
337337

338+
// Flight Create Orders to book a flight
339+
// Using a JSonObject or String
340+
FlightOrder createdOrder = amadeus.booking.flightOrders.pricing.post(body);
341+
342+
// Using a JsonObject for flight offer and Traveler[] as traveler information
343+
// see example at src/main/java/examples/flight/createorders/FlightCreateOrders.java
344+
FlightOrder createdOrder = amadeus.booking.flightOrders.post(flightOffersSearches, travelerArray);
345+
338346
// What is the the seat map of a given flight?
339347
SeatMap[] seatmap = amadeus.shopping.seatMaps.get(Params
340348
.with("flight-orderId", "eJzTd9f3NjIJdzUGAAp%2fAiY="));

src/main/java/com/amadeus/Booking.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.amadeus;
22

33
import com.amadeus.booking.FlightOrder;
4+
import com.amadeus.booking.FlightOrders;
45

56
public class Booking {
67
private Amadeus client;
@@ -13,8 +14,17 @@ public class Booking {
1314
*/
1415
public FlightOrder flightOrder;
1516

17+
/**
18+
* <p>
19+
* A namespaced client for the
20+
* <code>/v1/booking/flightOrders</code> endpoints.
21+
* </p>
22+
*/
23+
public FlightOrders flightOrders;
24+
1625
public Booking(Amadeus client) {
1726
this.client = client;
27+
this.flightOrders = new FlightOrders(client);
1828
}
1929

2030
public FlightOrder flightOrder(String flightOrderId) {
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package com.amadeus.booking;
2+
3+
import com.amadeus.Amadeus;
4+
import com.amadeus.Response;
5+
import com.amadeus.exceptions.ResponseException;
6+
import com.amadeus.resources.FlightOfferSearch;
7+
import com.amadeus.resources.FlightOrder;
8+
import com.amadeus.resources.Resource;
9+
import com.amadeus.resources.Traveler;
10+
import com.google.gson.JsonArray;
11+
import com.google.gson.JsonObject;
12+
13+
/**
14+
* <p>
15+
* A namespaced client for the
16+
* <code>/v1/booking/flight-orders</code> endpoints.
17+
* </p>
18+
*
19+
* <p>
20+
* Access via the Amadeus client object.
21+
* </p>
22+
*
23+
* <pre>
24+
* Amadeus amadeus = Amadeus.builder(API_KEY, API_SECRET).build();
25+
* amadeus.booking.flightOrders;</pre>
26+
*/
27+
public class FlightOrders {
28+
private Amadeus client;
29+
30+
/**
31+
* Constructor.
32+
*
33+
* @hide
34+
*/
35+
public FlightOrders(Amadeus client) {
36+
this.client = client;
37+
}
38+
39+
/**
40+
* <p>
41+
* The Flight Create Orders API allows you to perform flight booking.
42+
* </p>
43+
*
44+
* <pre>
45+
* amadeus.booking.flightOrders.post(body);</pre>
46+
*
47+
* @param body the parameters to send to the API as a JSonObject
48+
* @return an API resource
49+
* @throws ResponseException when an exception occurs
50+
*/
51+
public FlightOrder post(JsonObject body) throws ResponseException {
52+
Response response = client.post("/v1/booking/flight-orders", body);
53+
return (FlightOrder) Resource.fromObject(response, FlightOrder.class);
54+
}
55+
56+
/**
57+
* <p>
58+
* The Flight Create Orders API allows you to perform flight booking.
59+
* </p>
60+
*
61+
* <pre>
62+
* amadeus.booking.flightOrders.post(body);</pre>
63+
*
64+
* @param body the parameters to send to the API as a String
65+
* @return an API resource
66+
* @throws ResponseException when an exception occurs
67+
*/
68+
public FlightOrder post(String body) throws ResponseException {
69+
Response response = client.post("/v1/booking/flight-orders", body);
70+
return (FlightOrder) Resource.fromObject(response, FlightOrder.class);
71+
}
72+
73+
/**
74+
* <p>
75+
* The Flight Create Orders API allows you to perform flight booking.
76+
* </p>
77+
*
78+
* <pre>
79+
* amadeus.booking.flightOrders.post(object);</pre>
80+
*
81+
* @param flightOffersSearches List of flight-offers as FlightOfferSearch[]
82+
* @param travelers List of travelers as Traveler[]
83+
* @return an API resource
84+
* @throws ResponseException when an exception occurs
85+
*/
86+
public FlightOrder post(FlightOfferSearch[] flightOffersSearches,
87+
Traveler[] travelers) throws ResponseException {
88+
89+
JsonObject nameObject = new JsonObject();
90+
nameObject.addProperty("firstName", travelers[0].getName().getFirstName());
91+
nameObject.addProperty("lastName", travelers[0].getName().getLastName());
92+
93+
JsonObject phoneObject = new JsonObject();
94+
phoneObject.addProperty("countryCallingCode",
95+
travelers[0].getContact().getPhones()[0].getCountryCallingCode());
96+
phoneObject.addProperty("number", travelers[0].getContact().getPhones()[0].getNumber());
97+
phoneObject.addProperty("deviceType", travelers[0].getContact().getPhones()[0].getDeviceType());
98+
99+
100+
JsonArray phonesArray = new JsonArray();
101+
phonesArray.add(phoneObject);
102+
103+
JsonObject contactObject = new JsonObject();
104+
contactObject.add("phones", phonesArray);
105+
106+
JsonObject documentsOject = new JsonObject();
107+
documentsOject.addProperty("documentType", travelers[0].getDocuments()[0].getDocumentType());
108+
documentsOject.addProperty("number", travelers[0].getDocuments()[0].getNumber());
109+
documentsOject.addProperty("expiryDate", travelers[0].getDocuments()[0].getExpiryDate());
110+
documentsOject.addProperty("nationality", travelers[0].getDocuments()[0].getNationality());
111+
documentsOject.addProperty("issuanceCountry",
112+
travelers[0].getDocuments()[0].getIssuanceCountry());
113+
documentsOject.addProperty("holder", travelers[0].getDocuments()[0].isHolder());
114+
JsonArray documentsArray = new JsonArray();
115+
documentsArray.add(documentsOject);
116+
117+
JsonObject travelerObject = new JsonObject();
118+
travelerObject.addProperty("id", travelers[0].getId());
119+
travelerObject.addProperty("dateOfBirth", travelers[0].getDateOfBirth());
120+
travelerObject.add("name", nameObject);
121+
travelerObject.add("contact", contactObject);
122+
travelerObject.add("documents", documentsArray);
123+
JsonArray travelerArray = new JsonArray();
124+
travelerArray.add(travelerObject);
125+
126+
JsonObject typeObject = new JsonObject();
127+
typeObject.addProperty("type", "flight-order");
128+
typeObject.add("flightOffers", flightOffersSearches[0].getResponse().getData());
129+
typeObject.add("travelers", travelerArray);
130+
131+
JsonObject jsonObject = new JsonObject();
132+
jsonObject.add("data", typeObject);
133+
System.out.println(jsonObject);
134+
135+
Response response = client.post("/v1/booking/flight-orders", jsonObject);
136+
return (FlightOrder) Resource.fromObject(response, FlightOrder.class);
137+
}
138+
139+
/**
140+
* Convenience method for calling <code>post</code> without any parameters.
141+
*
142+
* @see FlightOrders#post()
143+
*/
144+
public FlightOrder post() throws ResponseException {
145+
return post((String) null);
146+
}
147+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package com.amadeus.resources;
2+
3+
import lombok.Getter;
4+
import lombok.Setter;
5+
import lombok.ToString;
6+
7+
/**
8+
* An Traveler object used in the body of Flight Create Orders.
9+
* @see com.amadeus.booking.flightOrder#get()
10+
*/
11+
@ToString
12+
public class Traveler extends Resource {
13+
public Traveler(String id, String dateOfBirth, Name name, Contact contact, Document[] documents) {
14+
this.name = name;
15+
this.contact = contact;
16+
}
17+
18+
public Traveler() {
19+
20+
}
21+
22+
private @Getter @Setter String id;
23+
private @Getter @Setter String dateOfBirth;
24+
private @Getter @Setter Name name;
25+
private @Getter @Setter Contact contact;
26+
private @Getter @Setter Document[] documents;
27+
28+
@ToString
29+
public class Name {
30+
public Name(String firstName, String lastName) {
31+
this.firstName = firstName;
32+
this.lastName = lastName;
33+
}
34+
35+
private @Getter @Setter String firstName;
36+
private @Getter @Setter String lastName;
37+
38+
}
39+
40+
@ToString
41+
public class Contact {
42+
public Contact() {
43+
}
44+
45+
public Contact(Phone phones) {
46+
}
47+
48+
private @Getter @Setter Phone[] phones;
49+
}
50+
51+
@ToString
52+
public class Document {
53+
public Document() {
54+
}
55+
56+
public Document(String documentType, String number, String expiryDate,
57+
String issuanceCountry, String nationality, boolean holder) {
58+
59+
}
60+
61+
private @Getter @Setter String documentType;
62+
private @Getter @Setter String number;
63+
private @Getter @Setter String expiryDate;
64+
private @Getter @Setter String issuanceCountry;
65+
private @Getter @Setter String nationality;
66+
private @Getter @Setter boolean holder;
67+
}
68+
69+
@ToString
70+
public class Phone {
71+
72+
public Phone() {
73+
}
74+
75+
public Phone(String countryCallingCode, String number) {
76+
}
77+
78+
private @Getter @Setter String countryCallingCode;
79+
private @Getter @Setter String number;
80+
private @Getter @Setter String deviceType;
81+
}
82+
83+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package examples.flight.createorders;
2+
3+
import com.amadeus.Amadeus;
4+
import com.amadeus.Params;
5+
import com.amadeus.exceptions.ResponseException;
6+
import com.amadeus.resources.FlightOfferSearch;
7+
import com.amadeus.resources.FlightOrder;
8+
import com.amadeus.resources.Traveler;
9+
import com.amadeus.resources.Traveler.Document;
10+
import com.amadeus.resources.Traveler.Phone;
11+
12+
public class FlightCreateOrders {
13+
/**
14+
* <p>
15+
* An example to call the Flight Create Orders API
16+
* <code>/v1/booking/flight-orders</code> endpoints.
17+
* </p>
18+
*
19+
* <p>
20+
* Access via the Amadeus client object.
21+
* </p>
22+
*
23+
* <pre>
24+
* Amadeus amadeus = Amadeus.builder("clientId", "secret").build();
25+
* amadeus.booking.flightOrders;</pre>
26+
*/
27+
public static void main(String[] args) throws ResponseException {
28+
29+
Traveler traveler = new Traveler();
30+
31+
traveler.setId("1");
32+
traveler.setDateOfBirth("2000-04-14");
33+
traveler.setName(traveler.new Name("JORGE", "GONZALES"));
34+
35+
Traveler.Phone[] phone = new Phone[1];
36+
phone[0] = traveler.new Phone();
37+
phone[0].setCountryCallingCode("33");
38+
phone[0].setNumber("675426222");
39+
phone[0].setDeviceType("MOBILE");
40+
41+
Traveler.Contact contact = traveler.new Contact();
42+
contact.setPhones(phone);
43+
traveler.setContact(contact);
44+
45+
Traveler.Document[] document = new Document[1];
46+
document[0] = traveler.new Document();
47+
document[0].setDocumentType("PASSPORT");
48+
document[0].setNumber("480080076");
49+
document[0].setExpiryDate("2022-10-11");
50+
document[0].setIssuanceCountry("ES");
51+
document[0].setNationality("ES");
52+
document[0].setHolder(true);
53+
traveler.setDocuments(document);
54+
55+
Traveler[] travelerArray = new Traveler[1];
56+
travelerArray[0] = traveler;
57+
System.out.println(travelerArray[0]);
58+
59+
Amadeus amadeus = Amadeus
60+
.builder("YOUR_CLIENT_ID","YOUR_CLIENT_SECRET")
61+
.build();
62+
63+
FlightOfferSearch[] flightOffersSearches = amadeus.shopping.flightOffersSearch.get(
64+
Params.with("originLocationCode", "SYD")
65+
.and("destinationLocationCode", "BKK")
66+
.and("departureDate", "2020-11-01")
67+
.and("returnDate", "2020-11-08")
68+
.and("adults", 1)
69+
.and("max", 1));
70+
71+
FlightOrder order = amadeus.booking.flightOrders.post(flightOffersSearches, travelerArray);
72+
System.out.println(order);
73+
}
74+
}

src/test/java/com/amadeus/NamespaceTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.amadeus.airport.predictions.AirportOnTime;
44
import com.amadeus.booking.FlightOrder;
5+
import com.amadeus.booking.FlightOrders;
56
import com.amadeus.ereputation.HotelSentiments;
67
import com.amadeus.exceptions.ResponseException;
78
import com.amadeus.referenceData.Airlines;
@@ -323,6 +324,15 @@ public void testPostMethods() throws ResponseException {
323324
TestCase.assertNotNull(flightOfferSearch.post(body));
324325
TestCase.assertEquals(flightOfferSearch.post().length, 2);
325326

327+
// Test flight create orders
328+
Mockito.when(client.post("/v1/booking/flight-orders", (String) null))
329+
.thenReturn(singleResponse);
330+
Mockito.when(client.post("/v1/booking/flight-orders", body))
331+
.thenReturn(singleResponse);
332+
FlightOrders order = new FlightOrders(client);
333+
TestCase.assertNotNull(order.post());
334+
TestCase.assertNotNull(order.post(body));
335+
326336
// Test SeatMaps post
327337
Mockito.when(client.post("/v1/shopping/seatmaps", (String) null))
328338
.thenReturn(multiResponse);

0 commit comments

Comments
 (0)