Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package rs.code9.taster.service.impl;
- import java.sql.Array;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.Date;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.List;
- import oracle.jdbc.OracleTypes;
- import org.hibernate.internal.SessionImpl;
- import org.springframework.stereotype.Service;
- import rs.code9.taster.model.Airport;
- import rs.code9.taster.model.Flight;
- import rs.code9.taster.model.FlightProcedureResult;
- import rs.code9.taster.repository.FlightRepository;
- import rs.code9.taster.service.FlightService;
- @Service
- public class FlightServiceImpl extends CrudServiceImpl<Flight, FlightRepository> implements FlightService {
- private static final int DAYS_RANGE = 2;
- private static final double HOURS_BEFORE_NEXT_FLIGHT = 0.5;
- @Override
- public List<List<FlightProcedureResult>> calculateFlights(Airport departureAirport, Airport arrivalAirport) {
- List<List<FlightProcedureResult>> result = new ArrayList<List<FlightProcedureResult>>();
- Connection connection = ((SessionImpl) getEntityManager().getDelegate()).connection();
- try (CallableStatement statement = connection.prepareCall("{call calculate_flights (?, ?, ?, ?, ?,?)}")) {
- statement.setString(1, departureAirport.getCode());
- statement.setString(2, arrivalAirport.getCode());
- statement.registerOutParameter(3, OracleTypes.ARRAY, "TABLE_ROUTES");
- statement.setDate(4, new Date(Calendar.getInstance().getTimeInMillis()));
- statement.setDouble(5, HOURS_BEFORE_NEXT_FLIGHT);
- statement.setInt(6, DAYS_RANGE);
- statement.execute();
- Array routesArray = statement.getArray(3);
- connection.getTypeMap().put("T_FLIGHT", FlightProcedureResult.class);
- Object[] routes = (Object[]) routesArray.getArray();
- for (int i = 0; i < routes.length; i++) {
- List<FlightProcedureResult> flightsInRoute = new ArrayList<FlightProcedureResult>();
- Array flightsArray = (Array) routes[i];
- Object[] flights = (Object[]) flightsArray.getArray();
- for (int j = 0; j < flights.length; j++) {
- flightsInRoute.add((FlightProcedureResult) flights[j]);
- }
- result.add(flightsInRoute);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return result;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement