airport.database.dispatcher.airplane.FlightDaoImpl.java Source code

Java tutorial

Introduction

Here is the source code for airport.database.dispatcher.airplane.FlightDaoImpl.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 airport.database.dispatcher.airplane;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.stereotype.Repository;

/**
 *
 * @author mcdoker
 */
@Repository
public class FlightDaoImpl implements FlightDao {

    private final static Logger LOG = Logger.getLogger(FlightDaoImpl.class);

    @Autowired
    private NamedParameterJdbcTemplate jdbcTemplate;

    private final static String SQL_QUERY_ADD_FLIGHT = "INSERT INTO flight(\n"
            + "            flight_number, from_city, to_city, hour_of_departure, arrival_time, \n"
            + "            airplane_number, flight_state, type_machine)\n"
            + "    VALUES (:flightNumber, :fromity, :toCity, :hourOfDeparture, :arrivalTime, "
            + "            :airplaneNumber, :flightState, :typeMachine)";

    private final static String SQL_QUERY_REMOVE_FLIGT = "DELETE FROM flight "
            + "WHERE flight_number = :flightNumber";

    private final static String SQL_QUERY_REMOVE_ALL_FLIGHT = "DELETE FROM FLIGHT";

    private final static String SQL_QUERY_SELECT_ALL_FLIGHT = "SELECT flight_number, from_city, to_city, hour_of_departure, arrival_time, \n"
            + "            airplane_number, flight_state, type_machine " + "FROM flight";

    private final static String SQL_QUERY_SELECT_FLIGHT_STATE = "SELECT flight_state FROM flight "
            + "WHERE flight_number = :flightNumber";

    @Override
    public void addFlight(Flight flight) {
        SqlParameterSource paramertFlight = new BeanPropertySqlParameterSource(flight);

        jdbcTemplate.update(SQL_QUERY_ADD_FLIGHT, paramertFlight);

        if (LOG.isInfoEnabled()) {
            LOG.info("add flight. Flight" + (flight != null ? flight.toString() : ""));
        }
    }

    @Override
    public void removeFlight(Flight flight) {
        SqlParameterSource parameterFlight = new BeanPropertySqlParameterSource(flight);

        jdbcTemplate.update(SQL_QUERY_REMOVE_FLIGT, parameterFlight);

        if (LOG.isInfoEnabled()) {
            LOG.info("remove flight. Flight: " + (flight != null ? flight.toString() : ""));
        }
    }

    @Override
    public void removeAllFlight() {
        jdbcTemplate.getJdbcOperations().update(SQL_QUERY_REMOVE_ALL_FLIGHT);

        if (LOG.isInfoEnabled()) {
            LOG.info("remove all flight");
        }
    }

    @Override
    public List<Flight> getAllFlight() {
        List<Flight> resultMessages;

        try {
            resultMessages = jdbcTemplate.getJdbcOperations().query(SQL_QUERY_SELECT_ALL_FLIGHT,
                    new FlightMapper());

        } catch (EmptyResultDataAccessException e) {
            if (LOG.isInfoEnabled()) {
                LOG.info("flights aren't present");
            }

            return new ArrayList<>();
        }

        if (LOG.isInfoEnabled()) {
            LOG.info("get all flight " + resultMessages);
        }

        return resultMessages;
    }

    @Override
    public String getFlightState(String flightNumber) {
        MapSqlParameterSource mapSqlParameterSource = new MapSqlParameterSource("flightNumber", flightNumber);

        String resultStateFlight = jdbcTemplate.queryForObject(SQL_QUERY_SELECT_FLIGHT_STATE, mapSqlParameterSource,
                String.class);

        if (LOG.isInfoEnabled()) {
            LOG.info("get flight state. FlightNumber : " + flightNumber + ". Result : " + resultStateFlight);
        }

        return resultStateFlight;
    }

    private static class FlightMapper implements RowMapper<Flight> {

        private final static String PARAMETR_FLIGHT_FLIGHT_NUMBER = "flight_number";
        private final static String PARAMETR_FLIGHT_FROM_CITY = "from_city";
        private final static String PARAMETR_FLIGHT_TO_CITY = "to_city";
        private final static String PARAMETR_FLIGHT_HOUR_OF_DEPARTURE = "hour_of_departure";
        private final static String PARAMETR_FLIGHT_ARRIVAL_TIME = "arrival_time";
        private final static String PARAMETR_FLIGHT_AIRPLANE_NUMBER = "airplane_number";
        private final static String PARAMETR_FLIGHT_FLIGHT_STATE = "flight_state";
        private final static String PARAMETR_FLIGHT_TYPE_MACHINE = "type_machine";

    @Override
    public Flight mapRow(ResultSet rs, int rowNum) throws SQLException {
        Flight flightResult = new Flight();

        flightResult.setAirplaneNumber(rs.getString(PARAMETR_FLIGHT_AIRPLANE_NUMBER));
        flightResult.setArrivalTime(rs.getString(PARAMETR_FLIGHT_ARRIVAL_TIME));
        flightResult.setFlightNumber(rs.getString(PARAMETR_FLIGHT_FLIGHT_NUMBER));
        flightResult.setFromity(rs.getString(PARAMETR_FLIGHT_FROM_CITY));
        flightResult.setHourOfDeparture(rs.getString(PARAMETR_FLIGHT_HOUR_OF_DEPARTURE));
        flightResult.setToCity(rs.getString(PARAMETR_FLIGHT_TO_CITY));
        flightResult.setTypeMachine(rs.getString(PARAMETR_FLIGHT_TYPE_MACHINE));

        String valueStateFlight = rs.getString(PARAMETR_FLIGHT_FLIGHT_STATE);
        for (StateFlight sf : StateFlight.values()) {
            if (sf.getActionName().equals(valueStateFlight)) {
                flightResult.setFlightState(sf);

                break;
            }
        }

        return flightResult;
    }

    }

}