package web;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.EmployeeDAO;
import entity.Employee;

public class ActionServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置解码所使用的字符集,注意要与客户端保持一致
        request.setCharacterEncoding("utf-8");
        // 告诉浏览器,服务器返回的数据类型
        // (通过设置content-type消息头的值)
        response.setContentType("text/html;charset=utf-8");
        String uri = request.getRequestURI();
        String action = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));
        System.out.println(action);
        if ("/list".equals(action)) {
            request.setCharacterEncoding("utf-8");
            PrintWriter out = response.getWriter();
            // 访问数据库,获取所有员工信息
            EmployeeDAO dao = new EmployeeDAO();
            try {
                List<Employee> employees = dao.findAll();
                // 依据查询到的员工信息,输出表格
                // 因为servlet不擅长生成页面,我们使用转发
                // 交给JSP来生成页面
                // 1.将处理结果绑定到request
                request.setAttribute("employees", employees);
                // 2.获取转发器
                RequestDispatcher rd = request.getRequestDispatcher("listEmp.jsp");
                // 3.转发
                rd.forward(request, response);
            } catch (Exception e) {
                e.printStackTrace();
                out.println("系统繁忙,稍后重试");
            }
            // 可以不调用close方法,容器会自动调用close方法。
            out.close();
        } else if ("/add".equals(action)) {
            PrintWriter out = response.getWriter();
            // 调用request对象提供的方法来读取请求参数值
            String name = request.getParameter("name");
            String salary = request.getParameter("salary");
            String age = request.getParameter("age");

            // 一般来说,服务器端应该对请求参数值做一些
            // 合法性检查,比如检查姓名是否为空,这儿
            // 暂时不做。

            // 将员工信息插入到数据库
            EmployeeDAO dao = new EmployeeDAO();
            Employee e = new Employee();
            e.setName(name);
            e.setSalary(Double.parseDouble(salary));
            e.setAge(Integer.parseInt(age));
            try {
                dao.save(e);
                // 重定向
                out.println("插入成功");
                response.sendRedirect("list.do");

            } catch (Exception e1) {
                e1.printStackTrace();
                out.println("<h1>系统繁忙,稍后重试</h1>");
            }
            // 关闭流。
            out.close();
        } else if ("/del".equals(action)) {
            // 读取要删除员工的id
            String id = request.getParameter("id");
            EmployeeDAO dao = new EmployeeDAO();
            PrintWriter pw = response.getWriter();
            try {
                dao.del(Integer.parseInt(id));
                response.sendRedirect("list.do");
            } catch (NumberFormatException e) {
                e.printStackTrace();
                pw.println("系统繁忙,稍后重试");
            }
        } else if ("/load".equals(action)) {
            PrintWriter out = response.getWriter();
            // 读取员工的id
            String id = request.getParameter("id");
            // 依据id访问数据库,获取员工信息
            EmployeeDAO dao = new EmployeeDAO();
            try {
                Employee e = dao.findById(Integer.parseInt(id));
                // 依据查询到的员工信息,生成表单
                request.setAttribute("e", e);
                request.getRequestDispatcher("updateEmp.jsp").forward(request, response);
            } catch (Exception e) {
                e.printStackTrace();
                out.println("系统繁忙,稍后再试!");
            }
        } else if ("/modify".equals(action)) {
            PrintWriter writer = response.getWriter();
            // 读取要修改的员工信息
            String id = request.getParameter("id");
            String name = request.getParameter("name");
            String salary = request.getParameter("salary");
            String age = request.getParameter("age");
            Employee e = new Employee();
            EmployeeDAO dao = new EmployeeDAO();
            e.setId(Integer.parseInt(id));
            e.setName(name);
            e.setSalary(Double.parseDouble(salary));
            e.setAge(Integer.parseInt(age));

            try {
                dao.modify(e);
                response.sendRedirect("list.do");
            } catch (Exception e1) {
                e1.printStackTrace();
                writer.println("系统繁忙,稍后在式");
            }
        }
    }
}

//properties

# connection parameters
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
user=system
password=123456
# datasouce parameters
initSize=1
maxSize=2