| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| package reversemapping; |
| |
| import java.text.*; |
| import java.util.*; |
| import javax.persistence.*; |
| |
| |
| /** |
| * A simple program that uses the reverse-mapped classes from the airlines |
| * schema to print out a list of schedules flightes and the |
| * projected profits from them. |
| */ |
| public class Main { |
| |
| private static void print(String msg) { |
| System.out.println(msg); |
| } |
| |
| @SuppressWarnings("unchecked") |
| public static void main(String[] args) { |
| // Create a new EntityManagerFactory using the System properties. |
| // The "reversemapping" name will be used to configure based on the |
| // corresponding name in the META-INF/persistence.xml file |
| EntityManagerFactory factory = Persistence. |
| createEntityManagerFactory("reversemapping", |
| System.getProperties()); |
| |
| // Create a new EntityManager from the EntityManagerFactory. The |
| // EntityManager is the main object in the persistence API, and is |
| // used to create, delete, and query objects, as well as access |
| // the current transaction |
| EntityManager em = factory.createEntityManager(); |
| |
| List<Availability> schedule = (List<Availability>) |
| em.createQuery("select avail from Availability avail " |
| + "join fetch avail.flight " |
| + "order by avail.flightDate asc, avail.flight.departureTime asc"). |
| getResultList(); |
| for (Availability avail : schedule) { |
| Flight flight = avail.getFlight(); |
| |
| // note that Availability.getFlightDate is just a DATE with no |
| // time component, and Flight.getDepartureTime() is just a TIME |
| // with no date component |
| print(new SimpleDateFormat("MMM dd, yyyy"). |
| format(avail.getFlightDate()) |
| + " flight " |
| + flight.getFlightId() + " departs " |
| + new SimpleDateFormat("hh:mm aa"). |
| format(flight.getDepartureTime()) |
| + " from " + flight.getOrigAirport() |
| + " to " + flight.getDestAirport()); |
| |
| // look up the Airline reference based on the flight ID |
| Airline airline = em.getReference(Airline.class, |
| flight.getFlightId().substring(0, 2)); |
| double ratePerMile = airline.getBasicRate(); |
| double rate = flight.getMiles() * ratePerMile; |
| |
| int econTaken = avail.getEconomySeatsTaken(); |
| int businessTaken = avail.getBusinessSeatsTaken(); |
| int firstclassTaken = avail.getFirstclassSeatsTaken(); |
| |
| double income = (econTaken * rate) |
| + (businessTaken * rate) |
| + (businessTaken * rate * airline.getBusinessLevelFactor()) |
| + (firstclassTaken * rate) |
| + (firstclassTaken * rate * airline.getFirstclassLevelFactor()); |
| |
| int seatsTaken = econTaken + businessTaken + firstclassTaken; |
| int totalSeats = airline.getEconomySeats() |
| + airline.getBusinessSeats() |
| + airline.getFirstclassSeats(); |
| double percentFull = (double) seatsTaken / (double) totalSeats; |
| |
| print(" income from flight: " |
| + NumberFormat.getCurrencyInstance().format(income) |
| + " with " + seatsTaken + " seats taken (" |
| + NumberFormat.getPercentInstance().format(percentFull) |
| + " full)"); |
| |
| double gallonsPerMile = 2.0d; // approx for a small plane |
| double totalGallons = gallonsPerMile * flight.getMiles(); |
| double costPerGallon = 0.50d; // approx 2006 prices |
| double totalFuelCost = totalGallons * costPerGallon; |
| print(" fuel cost of flight over " |
| + NumberFormat.getNumberInstance().format(flight.getMiles()) |
| + " miles: " |
| + NumberFormat.getCurrencyInstance().format(totalFuelCost)); |
| |
| double totalCost = totalFuelCost; |
| |
| print(" total profit: " + NumberFormat.getCurrencyInstance(). |
| format(income - totalCost)); |
| } |
| |
| // Again, it is always good to clean up after ourselves |
| em.close(); |
| |
| factory.close(); |
| } |
| } |