package oss.ngocminh.lego.service;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import oss.ngocminh.lego.data.Entity;
import oss.ngocminh.lego.data.EntityImpl;
import oss.ngocminh.lego.persistence.CategoryDAO;
import oss.ngocminh.lego.persistence.ImageCollectionDAO;
import oss.ngocminh.lego.persistence.ImageDAO;
import oss.ngocminh.lego.persistence.ProductDAO;
/**
* Servlet implementation class ProductCreateController
*/
public class ProductCreateController extends AbstractController {
private static final long serialVersionUID = 1L;
private ProductDAO productDAO = new ProductDAO();
private ImageCollectionDAO imageCollectionDAO = new ImageCollectionDAO();
private ImageDAO imageDAO = new ImageDAO();
private CategoryDAO categoryDAO = new CategoryDAO();
/**
* @see HttpServlet#HttpServlet()
*/
public ProductCreateController() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
Connection conn = getConnection();
categoryDAO.setConnection(conn);
request.setAttribute("categories", categoryDAO.list());
conn.close();
renderView(request, response);
} catch (SQLException e) {
throw new ServletException(e);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Errors error = new Errors();
request.setAttribute("error", error);
String name = request.getParameter("name");
String description = request.getParameter("description");
int quantity = getQuantity(request, error);
double price = getPrice(request, error);
double discount = getDiscount(request, error);
String type = request.getParameter("type");
Integer category = getCategory(request, error);
List<Entity> images = getImages(request, error);
if (!error.isEmpty()) {
renderView(request, response);
return;
}
Entity product = new EntityImpl();
product.put("name", name);
product.put("imageCollection", request.getParameter("imageCollection"));
product.put("description", description);
product.put("quantity", quantity);
product.put("price", price);
product.put("discount", discount);
product.put("type", type);
product.put("category", category);
try {
Connection conn = getConnection();
conn.setAutoCommit(false);
productDAO.setConnection(conn);
imageCollectionDAO.setConnection(conn);
imageDAO.setConnection(conn);
Entity imageCollection = new EntityImpl();
imageCollectionDAO.save(imageCollection);
for (Entity image : images) {
image.put("collection", imageCollection.get("id"));
imageDAO.save(image);
}
product.put("imageCollection", imageCollection.get("id"));
productDAO.save(product);
conn.commit();
conn.close();
request.setAttribute("product", product);
renderView("success", request, response);
} catch (SQLException e) {
error.put("", e.getMessage());
renderView(request, response);
}
}
private List<Entity> getImages(HttpServletRequest request, Errors error) {
List<Entity> images = new LinkedList<Entity>();
int imageCount = Integer.parseInt(request.getParameter("imageCount"));
for (int i = 1; i <= imageCount; i++) {
String fileName = request.getParameter("image" + i);
if (!StringUtils.isEmpty(fileName)) {
Entity image = new EntityImpl();
image.put("fileName", fileName);
images.add(image);
}
}
return images;
}
private Integer getCategory(HttpServletRequest request, Errors error) {
Integer category = null;
String categoryStr = request.getParameter("category");
if (!categoryStr.isEmpty()) {
try {
category = Integer.valueOf(categoryStr);
} catch (NumberFormatException e) {
error.put("category", "Chủ đề không hợp lệ");
}
}
return category;
}
private double getDiscount(HttpServletRequest request, Errors error) {
double discount = 0;
if (!StringUtils.isEmpty(request.getParameter("price"))) {
try {
discount = Double.parseDouble(request.getParameter("discount"));
if (discount < 0 || discount >= 100) {
error.put("discount",
"Tỉ lệ khuyến mãi phải nằm trong khoảng 0 đến 100");
}
} catch (NumberFormatException e1) {
error.put("discount", "Tỉ lệ khuyến mãi phải là số thập phân");
}
}
return discount;
}
private double getPrice(HttpServletRequest request, Errors error) {
double price = 0;
try {
price = Double.parseDouble(request.getParameter("price"));
} catch (NumberFormatException e1) {
error.put("price", "Giá tiền phải là số thập phân");
}
return price;
}
private int getQuantity(HttpServletRequest request, Errors error) {
int quantity = 0;
try {
quantity = Integer.parseInt(request.getParameter("quantity"));
} catch (NumberFormatException e) {
error.put("quantity", "Số lượng phải là một số nguyên");
}
return quantity;
}
}