/**
   * 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
   */
  protected void processRequest(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
      HttpSession sesi = request.getSession();
      if (sesi.getAttribute("role") == null) {
        request.getRequestDispatcher("page/index.jsp").forward(request, response);
        return;
      } else {
        String role = (String) sesi.getAttribute("role");
        if (!role.equals("dosen")) {
          response.sendRedirect("logout");
          return;
        }
      }

      String output = "";

      Semester semester = new SemesterDAO().getCurrentSemester();
      // HttpSession sesi = request.getSession();
      Dosen dosen = (Dosen) sesi.getAttribute("currentDosen");
      String task = request.getParameter("task");

      if (task.equals("JADWAL"))
        output = new JadwalDAO().getJadwalJSONObject(semester, dosen).toString();
      else if (task.equals("CURRENT")) {
        output = "Semester " + semester.getNama() + " Tahun Ajaran " + semester.getTahunAjaran();
      } else if (task.equals("MAHASISWA_LIMIT")) {
        int start = Integer.parseInt(request.getParameter("start"));
        int limit = Integer.parseInt(request.getParameter("limit"));

        output =
            new RegistrasiMatakuliahDAO()
                .getRegistrasiMatakuliahJSONObject(
                    new JadwalDAO().getJadwal(Long.parseLong(request.getParameter("id"))),
                    start,
                    limit)
                .toString();
      } else if (task.equals("UPDATE")) {
        long id = Long.parseLong(request.getParameter("id"));
        String nilai = request.getParameter("nilai");

        RegistrasiMatakuliah reg = new RegistrasiMatakuliahDAO().getRegistrasiMatakuliah(id);
        reg.setNilai(nilai);
        output = Integer.toString(new ObjectDAO().update(reg));
      }

      System.out.println(output);
      out.println(output);
    } catch (Exception ex) {
      Logger.getLogger(DaftarKelasJSON.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
      out.close();
    }
  }