Advertisement
Guest User

Untitled

a guest
May 24th, 2015
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.28 KB | None | 0 0
  1. package rs.code9.taster.service.impl;
  2.  
  3. import java.sql.Array;
  4. import java.sql.CallableStatement;
  5. import java.sql.Connection;
  6. import java.sql.Date;
  7. import java.sql.SQLException;
  8. import java.util.ArrayList;
  9. import java.util.Calendar;
  10. import java.util.List;
  11.  
  12. import oracle.jdbc.OracleTypes;
  13.  
  14. import org.hibernate.internal.SessionImpl;
  15. import org.springframework.stereotype.Service;
  16.  
  17. import rs.code9.taster.model.Airport;
  18. import rs.code9.taster.model.Flight;
  19. import rs.code9.taster.model.FlightProcedureResult;
  20. import rs.code9.taster.repository.FlightRepository;
  21. import rs.code9.taster.service.FlightService;
  22.  
  23. @Service
  24. public class FlightServiceImpl extends CrudServiceImpl<Flight, FlightRepository> implements FlightService {
  25.  
  26.     private static final int DAYS_RANGE = 2;
  27.     private static final double HOURS_BEFORE_NEXT_FLIGHT = 0.5;
  28.  
  29.     @Override
  30.     public List<List<FlightProcedureResult>> calculateFlights(Airport departureAirport, Airport arrivalAirport) {
  31.  
  32.         List<List<FlightProcedureResult>> result = new ArrayList<List<FlightProcedureResult>>();
  33.  
  34.         Connection connection = ((SessionImpl) getEntityManager().getDelegate()).connection();
  35.  
  36.         try (CallableStatement statement = connection.prepareCall("{call calculate_flights (?, ?, ?, ?, ?,?)}")) {
  37.  
  38.             statement.setString(1, departureAirport.getCode());
  39.             statement.setString(2, arrivalAirport.getCode());
  40.             statement.registerOutParameter(3, OracleTypes.ARRAY, "TABLE_ROUTES");
  41.             statement.setDate(4, new Date(Calendar.getInstance().getTimeInMillis()));
  42.             statement.setDouble(5, HOURS_BEFORE_NEXT_FLIGHT);
  43.             statement.setInt(6, DAYS_RANGE);
  44.  
  45.             statement.execute();
  46.  
  47.             Array routesArray = statement.getArray(3);
  48.             connection.getTypeMap().put("T_FLIGHT", FlightProcedureResult.class);
  49.  
  50.             Object[] routes = (Object[]) routesArray.getArray();
  51.  
  52.             for (int i = 0; i < routes.length; i++) {
  53.  
  54.                 List<FlightProcedureResult> flightsInRoute = new ArrayList<FlightProcedureResult>();
  55.  
  56.                 Array flightsArray = (Array) routes[i];
  57.                 Object[] flights = (Object[]) flightsArray.getArray();
  58.  
  59.                 for (int j = 0; j < flights.length; j++) {
  60.                     flightsInRoute.add((FlightProcedureResult) flights[j]);
  61.                 }
  62.                 result.add(flightsInRoute);
  63.             }
  64.         } catch (SQLException e) {
  65.             e.printStackTrace();
  66.         }
  67.         return result;
  68.     }
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement