package ua.sergiishapoval.carrental.command.car;
import org.apache.commons.beanutils.BeanUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ua.sergiishapoval.carrental.command.CommandTemplate;
import ua.sergiishapoval.carrental.dao.DaoCar;
import ua.sergiishapoval.carrental.dao.DaoFactory;
import ua.sergiishapoval.carrental.model.Car;
import ua.sergiishapoval.carrental.model.CarFilter;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.SQLException;
import java.util.List;
/**
* Created by Сергей on 22.12.2014.
*/
public class SearchCarCommand extends CommandTemplate {
private static final Logger logger = LoggerFactory.getLogger(SearchCarCommand.class);
public static final int PAGE_LIMIT = 10;
@Override
public void execute(HttpServletRequest request, HttpServletResponse response) {
String[] path = request.getServletPath().split("/");
Integer pageNumber = getPageNumber(path);
CarFilter carFilter = getCarFilter(request);
try {
createCarPage(request, pageNumber, carFilter);
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/"+ path[1] +".tiles");
requestDispatcher.forward(request, response);
} catch (SQLException e) {
infoRedirect(request, response, "DATABASE_PROBLEM" );
logger.error("DBError", e);
} catch (Exception e) {
logger.error("Forward", e);
}
}
private void createCarPage(HttpServletRequest request, Integer pageNumber, CarFilter carFilter) throws SQLException {
DaoCar daoCar = DaoFactory.getDaoCar();
List<Car> cars = daoCar.getFilteredPage(pageNumber, PAGE_LIMIT, carFilter);
Integer carCount = carFilter.getResultQty();
int totalPages = carCount/PAGE_LIMIT + 1;
int current = pageNumber;
int begin = Math.max(1, current - 2);
int end = Math.min(begin + 5, totalPages);
request.getSession().setAttribute("beginIndex", begin);
request.getSession().setAttribute("endIndex", end);
request.getSession().setAttribute("currentIndex", pageNumber);
request.getSession().setAttribute("totalPages", totalPages);
request.getSession().setAttribute("cars", cars);
request.getSession().setAttribute("carFilter", carFilter);
}
private CarFilter getCarFilter(HttpServletRequest request) {
CarFilter carFilter = new CarFilter();
if (request.getMethod().toLowerCase().equals("post")) {
try {
BeanUtils.populate(carFilter, request.getParameterMap());
} catch (ReflectiveOperationException e) {
logger.error("BeanUtilsError", e);
}
} else {
carFilter = (CarFilter) request.getSession().getAttribute("carFilter");
if (carFilter == null) carFilter = new CarFilter();
}
return carFilter;
}
private Integer getPageNumber(String[] path) {
Integer pageNumber = null;
if (path.length > 3){
pageNumber = Integer.parseInt(path[3]);
}else {
pageNumber = 1;
}
return pageNumber;
}
}