/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Servlets;
import Beans.BeanCmdTicket;
import Beans.BeanHoraire;
import Beans.BeanHoraires;
import Beans.BeanMovie;
import Beans.BeanProjection;
import Beans.BeanProjections;
import Database.OracleAccess;
import java.io.IOException;
import java.sql.Blob;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.LinkedList;
import java.util.Map;
import java.util.TreeMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
*
* @author Greenlamp
*/
public class ServletControle extends HttpServlet {
/**
* Processes requests for both HTTP
* <code>GET</code> and
* <code>POST</code> methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
OracleAccess oracle = null;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String action = null;
action = request.getParameter("action");
ServletContext sc = getServletContext();
oracle = (OracleAccess)getVariableSession(request, "oracle");
if(oracle == null){
oracle = new OracleAccess("CC1");
addVariableSession(request, "oracle", oracle);
}
BeanProjections beanProjections = (BeanProjections) getVariableSession(request, "beanProjections");
if(beanProjections == null){
oracle.initCallFunc("PACKAGE_PROGRAMMATION", "getAllProjection", 1);
beanProjections = oracle.doGetAllProjection("ALL");
initBeanMovie(beanProjections);
addVariableSession(request, "beanProjections", beanProjections);
}
if(action == null){
rediriger(request, response, sc, "/index.jsp");
}else if(action.equals("view")){
rassemblerProjection(request);
rediriger(request, response, sc, "/Seances.jsp");
}else if(action.equals("getImage")){
int idMovie = Integer.parseInt(request.getParameter("idMovie"));
for(BeanProjection proj : beanProjections.getListeBeanProjection()){
if(proj.getIdMovie() == idMovie){
Blob imageBlob = proj.getBeanMovie().getAffiche();
response.setContentType("image/jpeg");
byte[] bytes;
try {
bytes = imageBlob.getBytes(1, (int)imageBlob.length());
response.setContentLength(bytes.length);
response.getOutputStream().write(bytes);
response.getOutputStream().flush();
response.getOutputStream().close();
} catch (Exception ex) {
Logger.getLogger(ServletControle.class.getName()).log(Level.SEVERE, null, ex);
}
break;
}
}
}else if (action.equals("commander")){
actionCommander(request);
rediriger(request, response, sc, "/Details.jsp");
}else if(action.equals("CommanderTicket")){
actionCommanderTicket(request);
rediriger(request, response, sc, "/Recap.jsp");
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP
* <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP
* <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
/******************************************************************************************************************************/
/*METHODES UTILITAIRES*/
/******************************************************************************************************************************/
private void rediriger(HttpServletRequest request, HttpServletResponse response, ServletContext sc, String lien) {
try {
RequestDispatcher rd = sc.getRequestDispatcher(lien);
rd.forward(request, response);
} catch (Exception ex) {
Logger.getLogger(ServletControle.class.getName()).log(Level.SEVERE, null, ex);
}
}
private Object getVariableSession(HttpServletRequest request, String key){
HttpSession session = request.getSession(true);
Object object = session.getAttribute(key);
return object;
}
private void addVariableSession(HttpServletRequest request, String key, Object value) {
HttpSession session = request.getSession(true);
session.setAttribute(key, value);
}
private void delVariableSession(HttpServletRequest request, String key){
HttpSession session = request.getSession(true);
session.removeAttribute(key);
}
/******************************************************************************************************************************/
/*METHODES METIERS*/
/******************************************************************************************************************************/
private BeanProjections initProjections() {
oracle.initCallFunc("PACKAGE_PROGRAMMATION", "getAllProjection", 1);
BeanProjections projections = oracle.doGetAllProjection("ALL");
return projections;
}
private void actionView() {
Date today = new Date();
System.out.println("today: " + new SimpleDateFormat("dd/MM/YYYY").format(new Date()));
}
private void initBeanMovie(BeanProjections beanProjections) {
for(BeanProjection proj : beanProjections.getListeBeanProjection()){
oracle.initCallFunc("PACKAGE_PROGRAMMATION", "getDetail", 1);
proj.setBeanMovie(oracle.doGetDetail(proj.getIdMovie()));
}
System.out.println("test");
}
private void rassemblerProjection(HttpServletRequest request) {
BeanProjections beanProjections = (BeanProjections) getVariableSession(request, "beanProjections");
BeanHoraires beanHoraires = new BeanHoraires();
String today = new SimpleDateFormat("dd/MM/YYYY").format(new Date());
Calendar c = new GregorianCalendar();
c.setTime(new Date());
int dayToday = c.get(Calendar.DAY_OF_WEEK);
String dayTodayStr = getDay(dayToday);
c.add(Calendar.HOUR, 24);
int dayTomorow = c.get(Calendar.DAY_OF_WEEK);
String dayTomorowStr = getDay(dayTomorow);
Date tomorow = c.getTime();
c.add(Calendar.HOUR, 24);
Date afterTomorow = c.getTime();
int dayAfterTomorow = c.get(Calendar.DAY_OF_WEEK);
String dayAfterTomorowStr = getDay(dayAfterTomorow);
BeanProjections projectionsJour = beanProjections.getProjection(today);
String testTomorow = new SimpleDateFormat("dd/MM/YYYY").format(tomorow);
BeanProjections projectionsTomorow = beanProjections.getProjection(testTomorow);
String testAfterTomorow = new SimpleDateFormat("dd/MM/YYYY").format(afterTomorow);
BeanProjections projectionsAfterTomorow = beanProjections.getProjection(testAfterTomorow);
if(projectionsJour != null){
for(BeanProjection proj : projectionsJour.getListeBeanProjection()){
String heure = new SimpleDateFormat("HH:mm").format(proj.getDateHeureProjection());
beanHoraires.addHeure(proj.getIdMovie(), heure);
beanHoraires.addHeure(dayTodayStr, proj.getIdMovie(), heure);
}
addVariableSession(request, "projectionsJour", projectionsJour);
}
if(projectionsTomorow != null){
for(BeanProjection proj : projectionsTomorow.getListeBeanProjection()){
String heure = new SimpleDateFormat("HH:mm").format(proj.getDateHeureProjection());
beanHoraires.addHeure(proj.getIdMovie(), heure);
beanHoraires.addHeure(dayTomorowStr, proj.getIdMovie(), heure);
}
addVariableSession(request, "projectionsTomorow", projectionsTomorow);
}
if(projectionsAfterTomorow != null){
for(BeanProjection proj : projectionsAfterTomorow.getListeBeanProjection()){
String heure = new SimpleDateFormat("HH:mm").format(proj.getDateHeureProjection());
beanHoraires.addHeure(proj.getIdMovie(), heure);
beanHoraires.addHeure(dayAfterTomorowStr, proj.getIdMovie(), heure);
}
addVariableSession(request, "projectionsAfterTomorow", projectionsAfterTomorow);
}
addVariableSession(request, "beanHoraires", beanHoraires);
}
private String getDay(int nbDay) {
switch(nbDay){
case GregorianCalendar.MONDAY:
return "Lundi";
case GregorianCalendar.TUESDAY:
return "Mardi";
case GregorianCalendar.WEDNESDAY:
return "Mercredi";
case GregorianCalendar.THURSDAY:
return "Jeudi";
case GregorianCalendar.FRIDAY:
return "Vendredi";
case GregorianCalendar.SATURDAY:
return "Samedi";
case GregorianCalendar.SUNDAY:
return "Dimanche";
}
return null;
}
private void actionCommander(HttpServletRequest request) {
int idMovie = Integer.parseInt(request.getParameter("idMovie"));
String jour = request.getParameter("jour");
String heure = request.getParameter("heure");
BeanHoraires beanHoraires = (BeanHoraires) getVariableSession(request, "beanHoraires");
BeanProjections projectionsJour = (BeanProjections) getVariableSession(request, "projectionsJour");
BeanProjections projectionsTomorow = (BeanProjections) getVariableSession(request, "projectionsTomorow");
BeanProjections projectionsAfterTomorow = (BeanProjections) getVariableSession(request, "projectionsAfterTomorow");
Calendar c = new GregorianCalendar();
c.setTime(projectionsJour.getListeBeanProjection().getFirst().getDateHeureProjection());
int dayToday = c.get(Calendar.DAY_OF_WEEK);
String dayTodayStr = getDay(dayToday);
c.setTime(projectionsTomorow.getListeBeanProjection().getFirst().getDateHeureProjection());
int dayTomorow = c.get(Calendar.DAY_OF_WEEK);
String dayTomorowStr = getDay(dayTomorow);
c.setTime(projectionsAfterTomorow.getListeBeanProjection().getFirst().getDateHeureProjection());
int dayAfterTomorow = c.get(Calendar.DAY_OF_WEEK);
String dayAfterTomorowStr = getDay(dayAfterTomorow);
String dateProjection = null;
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
if(jour.equalsIgnoreCase(dayTodayStr)){
dateProjection = sdf.format(projectionsJour.getListeBeanProjection().getFirst().getDateHeureProjection());
}else if(jour.equalsIgnoreCase(dayTomorowStr)){
dateProjection = sdf.format(projectionsTomorow.getListeBeanProjection().getFirst().getDateHeureProjection());
}else if(jour.equalsIgnoreCase(dayAfterTomorowStr)){
dateProjection = sdf.format(projectionsAfterTomorow.getListeBeanProjection().getFirst().getDateHeureProjection());
}
dateProjection += " " + heure;
oracle.initCallFunc("PACKAGE_CMDTICKET", "getCmdDetails", 2);
BeanCmdTicket beanCmdTicket = oracle.doGetCmdDetails(dateProjection, idMovie);
addVariableSession(request, "beanCmdTicket", beanCmdTicket);
}
private void actionCommanderTicket(HttpServletRequest request) {
String date = request.getParameter("date");
int numeroSalle = Integer.parseInt(request.getParameter("salle"));
int nbTicket = Integer.parseInt(request.getParameter("nbPlace"));
oracle.initCallProc("PACKAGE_CMDTICKET", "acheterTicket", 3);
String messageErreur = oracle.doAcheterTicket(date, numeroSalle, nbTicket);
addVariableSession(request, "messageErreur", messageErreur);
addVariableSession(request, "date", date);
addVariableSession(request, "numeroSalle", numeroSalle);
addVariableSession(request, "nbTicket", nbTicket);
}
}