Package cpe.hapa

Source Code of cpe.hapa.VolServlet

package cpe.hapa;

import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import javax.cache.Cache;
import javax.cache.CacheException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.simple.JSONObject;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.EntityNotFoundException;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.SortDirection;
import com.google.appengine.api.taskqueue.Queue;
import com.google.appengine.api.taskqueue.QueueFactory;
import com.google.appengine.api.taskqueue.TaskOptions;
import com.google.appengine.api.taskqueue.TaskOptions.Method;
import com.google.appengine.labs.repackaged.org.json.JSONArray;

import cpe.hapa.authentication.Authenticate;
import cpe.hapa.dao.DatacacheSingleton;
import cpe.hapa.dao.VolDAO;
import cpe.hapa.dao.SearchDAO;
import cpe.hapa.model.User;
import cpe.hapa.model.Vol;

/**
* Servlet implementation class VolServlet
*/

public class VolServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
      
    /**
     * @see HttpServlet#HttpServlet()
     */
    public VolServlet() {
        super();
    }

  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    switch(request.getParameter("cmd")) {
      case "listeVol" :
        listeVol(request,response);
        break;
      case "listeVolHistoric" :
        listeVolHistoric(request,response);
        break;
      case "listeSearch":
        listeSearch(request,response);
        break;
      default:
        throw new ServletException("Cette commande n'existe pas");
    }
  }

  /**
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    switch(request.getParameter("cmd")) {
      case "addVol" :
        addVol(request, response);
        break;
      case "addVolQueue" :
        addVolQueue(request,response);
        break;
      case "searchVol" :
        searchVol(request,response);
        break;
      default:
        throw new ServletException("Cette commande n'existe pas");
    }
  }

 

  @Override
  protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException {
    switch(req.getParameter("cmd")) {
    case "deleteVol" :
      DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
      Key deleteKey = KeyFactory.stringToKey(req.getParameter("id"));
      datastore.delete(deleteKey);
      break;
    case "deleteVolQueue" :
      Queue queue = QueueFactory.getDefaultQueue();
      TaskOptions task = TaskOptions.Builder.withUrl("/vol?cmd=deleteVol&id=" + req.getParameter("id")).method(Method.DELETE);
      queue.add(task);
      break;
    default:
      throw new ServletException("Cette commande n'existe pas");
    }
  }
 
  @Override
  protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    switch(req.getParameter("cmd")){
    case "updateSearch" :
      try {
        SearchDAO.updateSearch(KeyFactory.stringToKey(req.getParameter("id")));
      } catch (EntityNotFoundException | CacheException e) {
        e.printStackTrace();
      }
      resp.getWriter().print("{\"redirect\":\"volSearch.html\"}");
      break;
    case "updateVol" :
      break;
    default:
      throw new ServletException("Cette commande n'existe pas");
    }
  }

  /********************************
   * =============================
   * COMMANDES ET SOUS-METHODES
   * =============================
   *********************************/
  private void addVol(HttpServletRequest request, HttpServletResponse response) throws ServletException {
    String leavingFrom = request.getParameter("leavingFrom");
    String goingTo = request.getParameter("goingTo");
    String departureDate = request.getParameter("departureDate");
    String arrivalDate = request.getParameter("arrivalDate");
    String departureTime = request.getParameter("departureTime");
    String arrivalTime = request.getParameter("arrivalTime");
    String price = request.getParameter("price");
    String availableSeats = request.getParameter("availableSeats");
    User connectedUser = null;
    Vol vol = null;
   
    try {
      connectedUser = Authenticate.getConnectedUser(request);
    } catch (NumberFormatException | ParseException e) {
      throw new ServletException(e);
    }
   
    //if( (connectedUser != null && connectedUser.isInRole(RoleDAO.getAdminRole()))) {
    //}
   
    try {
      vol = this.checkAndInstantiateVolModel(leavingFrom, goingTo, departureDate, arrivalDate, departureTime, arrivalTime, price, availableSeats);
    } catch(ParseException e) {
      throw new ServletException(e);
    }
   
    if (vol != null) {
      VolDAO.addVol(vol);
    } else {
      throw new ServletException("Données du formulaire incorrectes");
    }   
  }
 
 
  private void listeSearch(HttpServletRequest request,HttpServletResponse response) throws IOException {
    try {
      PreparedQuery researchPreparedQuery = SearchDAO.getHistoric(request);
   
      JSONArray searchList = new JSONArray();
      for(Entity result : researchPreparedQuery.asIterable())
      {       
        JSONObject search = new JSONObject();
        search.put("id", KeyFactory.keyToString(result.getKey()));
        search.put("date", new SimpleDateFormat("yyyy-MM-dd HH:mm").format(result.getProperty("date")));
        search.put("leavingFrom", result.getProperty("leavingFrom"));
        search.put("goingTo", result.getProperty("goingTo"));
        search.put("departure", new SimpleDateFormat("yyyy-MM-dd HH:mm").format(result.getProperty("departure")));
        search.put("responseCount", result.getProperty("responseCount"));
        searchList.put(search);
      }
      response.getWriter().print(searchList);
    } catch (NumberFormatException | ParseException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  private void listeVolHistoric(HttpServletRequest request,HttpServletResponse response) throws IOException {
    try {
      Cache cache = DatacacheSingleton.getInstance();
   
      PreparedQuery preparedHistoricQuery = VolDAO.getSearchVol((String)cache.get("leavingFrom"),(String)cache.get("goingTo"),(Date)cache.get("departure"));
      JSONObject search = new JSONObject();
      search.put("leaving", (String)cache.get("leavingFrom"));
      search.put("going", (String)cache.get("goingTo"));
      search.put("time", new SimpleDateFormat("HH:mm").format((Date)cache.get("departure")));
      search.put("date", new SimpleDateFormat("yyyy-MM-dd").format((Date)cache.get("departure")));
      cache.clear();
      JSONArray volHistoricList = new JSONArray();
      volHistoricList.put(search);
      for(Entity result : preparedHistoricQuery.asIterable())
      {       
        JSONObject vol = new JSONObject();
        vol.put("id", KeyFactory.keyToString(result.getKey()));
        vol.put("departureDate", result.getProperty("departureDate"));
        vol.put("departureTime", result.getProperty("departureTime"));
        vol.put("arrivalDate", result.getProperty("arrivalDate"));
        vol.put("arrivalTime", result.getProperty("arrivalTime"));
        vol.put("duration", result.getProperty("duration"));
        vol.put("price", result.getProperty("price"));
        vol.put("availableSeats", result.getProperty("availableSeats"));
        volHistoricList.put(vol);
      }
     
      response.getWriter().print(volHistoricList);
    } catch (CacheException | NullPointerException e) {
      response.getWriter().print("{\"message\":\"No Cache\"}");
    }
  }

  private void listeVol(HttpServletRequest request,HttpServletResponse response) throws IOException {
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    Query volListQuery = new Query("Vol")
    .addSort("departureDate", SortDirection.ASCENDING)
    .addSort("departureTime", SortDirection.ASCENDING);
   
    PreparedQuery preparedQuery = datastore.prepare(volListQuery);
   
    JSONArray volList = new JSONArray();
    for(Entity result : preparedQuery.asIterable())
    {
      Date flightDate = new Date();
      try {
        flightDate = (Date) new SimpleDateFormat("yyyy-MM-dd").parse(result.getProperty("departureDate").toString());
      } catch (ParseException e1) {
        flightDate = new Date();
        e1.printStackTrace();
      }
     
      JSONObject vol = new JSONObject();
      vol.put("id", KeyFactory.keyToString(result.getKey()));
      vol.put("date", new SimpleDateFormat("yyyy-MM-dd").format(flightDate));
      vol.put("leavingFrom", result.getProperty("leavingFrom"));
      vol.put("goingTo", result.getProperty("goingTo"));
      vol.put("flightDuration", result.getProperty("duration"));
      vol.put("price", result.getProperty("price"));
      vol.put("availableSeats", result.getProperty("availableSeats"));
      volList.put(vol);
    }
    response.getWriter().print(volList);
  }
 
  private void searchVol(HttpServletRequest request,HttpServletResponse response) throws IOException {
    Date departure;
    try {
      String s = request.getParameter("departureDate");
     
      departure = new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("departureDate"));
      Calendar cal = Calendar.getInstance();
      cal.setTime(departure);
      cal.add(Calendar.HOUR, Integer.parseInt(request.getParameter("departureTime").toString().split(":")[0]));
      cal.add(Calendar.MINUTE, Integer.parseInt(request.getParameter("departureTime").toString().split(":")[1]));
     
      departure = cal.getTime();
     
    } catch (ParseException e) {
      departure = new Date();
    };
   
    PreparedQuery preparedQuery = VolDAO.getSearchVol(request.getParameter("leavingFrom"),request.getParameter("goingTo"),departure);
   
    int responseCount = 0;
    JSONArray volList = new JSONArray();
   
    for(Entity result : preparedQuery.asIterable())
    {       
      JSONObject vol = new JSONObject();
      vol.put("id", KeyFactory.keyToString(result.getKey()));
      vol.put("departureDate", result.getProperty("departureDate"));
      vol.put("departureTime", result.getProperty("departureTime"));
      vol.put("arrivalDate", result.getProperty("arrivalDate"));
      vol.put("arrivalTime", result.getProperty("arrivalTime"));
      vol.put("duration", result.getProperty("duration"));
      vol.put("price", result.getProperty("price"));
      vol.put("availableSeats", result.getProperty("availableSeats"));
      volList.put(vol);
      responseCount++;
    }

    try {
      SearchDAO.addSearch(request.getParameter("leavingFrom"),request.getParameter("goingTo"),departure,responseCount,KeyFactory.keyToString(Authenticate.getConnectedUser(request).getKey()));
    } catch (NumberFormatException | ParseException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
   
    response.getWriter().print(volList);
  }

  private void addVolQueue(HttpServletRequest request,HttpServletResponse response) {
    Queue queue = QueueFactory.getDefaultQueue();
    TaskOptions task=TaskOptions.Builder.withUrl("/vol")
        .param("cmd", "addVol")
        .param("leavingFrom", request.getParameter("leavingFrom"))
        .param("goingTo", request.getParameter("goingTo"))
        .param("departureDate", request.getParameter("departureDate"))
        .param("arrivalDate", request.getParameter("arrivalDate"))
        .param("departureTime", request.getParameter("departureTime"))
        .param("arrivalTime", request.getParameter("arrivalTime"))
        .param("price", request.getParameter("price"))
        .param("availableSeats", request.getParameter("availableSeats"));
    queue.add(task);
  }

  private Vol checkAndInstantiateVolModel(String leavingFrom, String goingTo,
      String departureDate, String arrivalDate,
      String departureTime, String arrivalTime, String price,
      String availableSeats) throws ParseException {
    Vol vol = null;
    if ( leavingFrom != null &&
        goingTo != null &&
        departureDate != null &&
        departureTime != null &&
        arrivalDate != null && 
        arrivalTime != null &&
        price != null &&
        availableSeats != null &&
        !leavingFrom.isEmpty() &&
        !goingTo.isEmpty() &&
        !departureDate.isEmpty() &&
        !departureTime.isEmpty() &&
        !arrivalDate.isEmpty() &&
        !arrivalTime.isEmpty() &&
        !price.isEmpty() &&
        !availableSeats.isEmpty())
    {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      vol = new Vol(
        leavingFrom,
        goingTo,
        sdf.parse(departureDate),
        sdf.parse(arrivalDate),
        departureTime,
        arrivalTime,
        Double.valueOf(price),
        Integer.valueOf(availableSeats)
      );
     
    }
    return vol;
  }
}
TOP

Related Classes of cpe.hapa.VolServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.