com.thesoftwareguild.flightmaster.queryProcessor.QPXFlightQuery.java Source code

Java tutorial

Introduction

Here is the source code for com.thesoftwareguild.flightmaster.queryProcessor.QPXFlightQuery.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.thesoftwareguild.flightmaster.queryProcessor;

import com.thesoftwareguild.flightmaster.models.Flight;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.qpxExpress.QPXExpress;
import com.google.api.services.qpxExpress.QPXExpressRequestInitializer;
import com.google.api.services.qpxExpress.model.PassengerCounts;
import com.google.api.services.qpxExpress.model.SegmentInfo;
import com.google.api.services.qpxExpress.model.SliceInput;
import com.google.api.services.qpxExpress.model.TripOption;
import com.google.api.services.qpxExpress.model.TripOptionsRequest;
import com.google.api.services.qpxExpress.model.TripsSearchRequest;
import com.google.api.services.qpxExpress.model.TripsSearchResponse;
import com.thesoftwareguild.flightmaster.controllers.RequestController;
import com.thesoftwareguild.flightmaster.controllers.UserController;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
import org.apache.log4j.Logger;

/**
 * Uses QPXFlightQuery to make flight requests.API KEY and Application Name can
 * be hardcoded into the class initialization. I'm reading them in from a file
 * to hide the key as this project is on GitHub
 *
 * @author Yan
 */
public class QPXFlightQuery implements FlightQuery {

    private final static Logger logger = Logger.getLogger(QPXFlightQuery.class);

    private final int MAX_FLIGHTS_RETURNED = 30;
    private String APPLICATION_NAME;
    private String API_KEY;
    private HttpTransport httpTransport;
    private final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
    private final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

    private int requestId;
    private int adultPassengers;
    private int childPassengers;
    private int seniorPassengers;
    private int infantInSeatCount;

    private int maxStops;

    private String origin;
    private String destination;
    private Date departDate;
    private Date returnDate;

    /**
     * This is to hide the apikey from source control
     */
    public QPXFlightQuery() {
        try {
            Scanner sc = new Scanner(new FileReader("apikey.txt"));
            this.APPLICATION_NAME = sc.nextLine();
            this.API_KEY = sc.nextLine();
            sc.close();
        } catch (FileNotFoundException ex) {
            logger.error(ex);
        }
    }

    /**
     *
     * @return @throws IOException
     */
    @Override
    public List<Flight> execute() throws IOException {

        //FlightQueryResult> resultList = new ArrayList<>();
        List<Flight> retList = new ArrayList<>();
        try {
            httpTransport = GoogleNetHttpTransport.newTrustedTransport();
            QPXExpress qpXExpress = new QPXExpress.Builder(httpTransport, JSON_FACTORY, null)
                    .setApplicationName(APPLICATION_NAME)
                    .setGoogleClientRequestInitializer(new QPXExpressRequestInitializer(API_KEY)).build();

            PassengerCounts passengers = new PassengerCounts();
            passengers.setAdultCount(adultPassengers);
            passengers.setChildCount(childPassengers);
            passengers.setSeniorCount(seniorPassengers);
            passengers.setInfantInSeatCount(infantInSeatCount);

            List<SliceInput> slices = new ArrayList<>();

            // Flight to destination
            SliceInput departSlice = new SliceInput();
            departSlice.setOrigin(origin);
            departSlice.setDestination(destination);
            departSlice.setDate(df.format(departDate));
            departSlice.setMaxStops(maxStops);
            slices.add(departSlice);

            // Flight back home if it exists
            if (returnDate != null) {
                SliceInput returnSlice = new SliceInput();
                returnSlice.setOrigin(destination);
                returnSlice.setDestination(origin);
                returnSlice.setDate(df.format(returnDate));
                returnSlice.setMaxStops(maxStops);
                slices.add(returnSlice);
            }

            TripOptionsRequest request = new TripOptionsRequest();
            request.setSolutions(MAX_FLIGHTS_RETURNED); // number of flights to return
            request.setPassengers(passengers);
            request.setSlice(slices);

            TripsSearchRequest parameters = new TripsSearchRequest();
            parameters.setRequest(request);

            TripsSearchResponse list = qpXExpress.trips().search(parameters).execute(); // executes the search

            List<TripOption> tripResults = list.getTrips().getTripOption();

            for (int i = 0; i < tripResults.size(); i++) {
                Flight flight = new Flight();

                flight.setRequestId(requestId);
                flight.setOrigin(origin);
                flight.setDestination(destination);
                flight.setQueryTime(new Date(System.currentTimeMillis()));

                TripOption tripResult = tripResults.get(i);
                flight.setFightId(tripResult.getId());
                Integer totalDuration = 0;
                flight.setPrice(Double.parseDouble(tripResult.getSaleTotal().replaceAll("[a-zA-Z]", "")));
                for (int j = 0; j < tripResult.getSlice().size(); j++) {
                    List<SegmentInfo> segment = tripResult.getSlice().get(j).getSegment();
                    totalDuration += tripResult.getSlice().get(j).getDuration();
                    for (SegmentInfo segment1 : segment) {
                        flight.addFlightLeg(segment1.getBookingCode(), segment1.getFlight().getNumber(),
                                segment1.getFlight().getCarrier());
                        flight.setCarrier(segment1.getFlight().getCarrier());
                    }
                }

                flight.setDuration(totalDuration);

                retList.add(flight);
            }

        } catch (GeneralSecurityException ex) {
            logger.error(ex);
        }

        // Reset all parameters
        requestId = 0;
        adultPassengers = 0;
        childPassengers = 0;
        seniorPassengers = 0;
        infantInSeatCount = 0;
        maxStops = 0;
        origin = null;
        destination = null;
        departDate = null;
        returnDate = null;

        return retList;
    }

    @Override
    public int getAdultPassengers() {
        return adultPassengers;
    }

    @Override
    public void setAdultPassengers(int adultPassengers) {
        this.adultPassengers = adultPassengers;
    }

    @Override
    public int getChildPassengers() {
        return childPassengers;
    }

    @Override
    public void setChildPassengers(int childPassengers) {
        this.childPassengers = childPassengers;
    }

    @Override
    public int getSeniorPassengers() {
        return seniorPassengers;
    }

    @Override
    public void setSeniorPassengers(int seniorPassengers) {
        this.seniorPassengers = seniorPassengers;
    }

    @Override
    public int getInfantInSeatCount() {
        return infantInSeatCount;
    }

    @Override
    public void setInfantInSeatCount(int infantInSeatCount) {
        this.infantInSeatCount = infantInSeatCount;
    }

    @Override
    public int getMaxStops() {
        return maxStops;
    }

    @Override
    public void setMaxStops(int maxStops) {
        this.maxStops = maxStops;
    }

    @Override
    public String getOrigin() {
        return origin;
    }

    @Override
    public void setOrigin(String origin) {
        this.origin = origin;
    }

    @Override
    public String getDestination() {
        return destination;
    }

    @Override
    public void setDestination(String destination) {
        this.destination = destination;
    }

    @Override
    public Date getDepartDate() {
        return departDate;
    }

    @Override
    public void setDepartDate(Date departDate) {
        this.departDate = departDate;
    }

    @Override
    public Date getReturnDate() {
        return returnDate;
    }

    @Override
    public void setReturnDate(Date returnDate) {
        this.returnDate = returnDate;
    }

    @Override
    public int getRequestId() {
        return requestId;
    }

    @Override
    public void setRequestId(int requestId) {
        this.requestId = requestId;
    }

    public static void main(String[] args) {
        QPXFlightQuery q = new QPXFlightQuery();
        q.setAdultPassengers(1);
        q.setOrigin("ORD");
        q.setDestination("NYC");
        Date dep = new Date(115, 10, 31);
        q.setDepartDate(dep);
        q.setMaxStops(1);
        try {
            List<Flight> execute = q.execute();
            System.out.println("test");
        } catch (IOException ex) {
            logger.error(ex);
        }

    }
}