package com.usemodj.jpetstore.struts.admin.action;
import java.util.List;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import com.usemodj.jpetstore.domain.Product;
import com.usemodj.jpetstore.service.ProductService;
import com.usemodj.struts.Constants;
import com.usemodj.struts.Status;
import com.usemodj.struts.action.AdminAction;
public class ProductAction extends AdminAction {
private static Logger logger = Logger.getLogger( ProductAction.class);
protected ProductService productService = new ProductService();
private List<Product> productList;
private Product product = new Product();
public String execupte() throws Exception {
return SUCCESS;
}
public String input() throws Exception {
return INPUT;
}
public String list() throws Exception {
String categoryId = product.getCategoryId();
SqlSession sqlSession = this.getSqlSessionFactory().openSession();
//TODO: Paging...
try {
int offset = RowBounds.NO_ROW_OFFSET;
int limit = RowBounds.NO_ROW_LIMIT;
RowBounds rowBounds = new RowBounds(offset, limit);
List<Product> productList = productService.selectProductList( sqlSession, categoryId, null, rowBounds);
this.setProductList(productList);
} catch (Exception e) {
//e.printStackTrace();
logger.error(" ProductAction.list() Exception: " + e.getMessage());
} finally {
sqlSession.close();
}
return Constants.LIST;
}
public String view(){
SqlSession session = this.getSqlSessionFactory().openSession();
try {
this.product = productService.selectProduct(session, product.getProductId());
} catch (Exception e) {
// e.printStackTrace();
logger.error("-- ProductAction.view() Exception:" + e.getMessage());
} finally {
session.close();
}
return Constants.VIEW;
}
public String create(){
SqlSession session = this.getSqlSessionFactory().openSession();
try {
productService.createProduct(session, this.product);
session.commit();
} catch (Exception e) {
// e.printStackTrace();
this.addActionError("Create Exception:"+ e.getMessage());
logger.error("-- ProductAction.view() Exception:" + e.getMessage());
} finally {
session.close();
}
return Constants.REDIRECT;
}
public String update(){
SqlSession session = this.getSqlSessionFactory().openSession();
try {
//Product status and Items status belong to the product are changed together
productService.updateProduct(session, this.product);
productService.updateItemStatus(session, this.product.getProductId(), this.product.getStatus());
session.commit();
} catch (Exception e) {
// e.printStackTrace();
logger.error("-- ProductAction.view() Exception:" + e.getMessage());
session.rollback();
} finally {
session.close();
}
return Constants.REDIRECT_VIEW;
}
public String productIdList(){
SqlSession session = null;
try {
session = this.getSqlSessionFactory().openSession();
this.productList = productService.selectProductList( session, null, null, new RowBounds());
} catch (Exception e) {
logger.error("-- ProductAction.productIdList() Exception:" + e.getMessage());
} finally {
session.close();
}
return Constants.PRODUCT_LIST;
}
/**
* 선택된 카테고리 상태만 수정
*
* @return
*/
public String updateCheckedStatus(){
RowBounds rowBounds = new RowBounds();
SqlSession session = this.getSqlSessionFactory().openSession();
String[] checked = this.request.getParameterValues("checkboxStatus");
try {
if(null != checked){
for(int i=0; i < checked.length; i++){
logger.debug("checkboxStatus:" + checked[i]);
String status = this.request.getParameter( checked[i]);
logger.debug("status: "+ status);
if(null != status){
Status st = Status.valueOf( status);
try {
productService.updateStatus( session, checked[i], st);
} catch (Exception e) {
//e.printStackTrace();
logger.error(" -- ProductAction.updateCheckedStatus() Exception: " + e.getMessage());
}
}
}
}
session.commit();
} catch (Exception e) {
logger.error(" -- ProductAction.updateCheckedStatus() Exception: " + e.getMessage());
} finally{
session.close();
}
logger.debug("product.categoryId=" + this.product.getCategoryId());
logger.debug("param product.categoryId=" + this.request.getParameter("product.categoryId"));
return Constants.REDIRECT;
}
// -- getter/setter --
public List<Product> getProductList() {
return productList;
}
public void setProductList(List<Product> productList) {
this.productList = productList;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}