package org.beesden.shop.admin;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.beesden.shop.model.Page;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/admin")
public class PageAdmin extends Admin {
@RequestMapping(value = "/pageList", method = RequestMethod.GET)
public String pageList(ModelMap model, HttpServletRequest request) {
logger.info("Received request to show list of pages");
// Check if list requires sorting and archived
String archive = request.getParameter("archived");
String sort = request.getParameter("sort");
if (sort == null) {
sort = "id";
}
// Get page list from database
List<Page> itemList = new ArrayList<Page>();
String dbQuery = pageService.getQuery(null, null, archive != null ? null : 0, sort);
itemList = pageService.findAll(dbQuery);
// Update model
model = adminTemplate(model, request, "admin", "page");
model.addAttribute("itemList", itemList);
return "admin.adminList";
}
@RequestMapping(value = "/pageList", method = RequestMethod.POST)
public String pageListUpdate(ModelMap model, HttpServletRequest request) {
logger.info("Received request to update list of pages");
String message = "An error has occured";
// Update selected pages
String status = request.getParameter("statusUpdate");
String[] ids = request.getParameterValues("update");
for (String id : ids) {
String dbQuery = pageService.getQuery(id, null, null, null);
Page page = pageService.findOne(dbQuery);
page.setStatus(Integer.parseInt(status));
pageService.objectUpdate(page);
logger.debug("Page " + id + " " + status + "d");
}
message = "Selected pages have been updated";
logger.info(message);
request.getSession().setAttribute("message", message);
String redirect = request.getParameter("return");
if (redirect == null) {
redirect = "/admin/pageList";
}
return "redirect:" + redirect;
}
@RequestMapping(value = "/page", method = RequestMethod.GET)
public String pageSingle(ModelMap model, HttpServletRequest request) {
logger.info("Received request to show page form");
// Get new or existing page if requested
Page page = new Page();
if (request.getParameter("id") != null) {
String dbQuery = pageService.getQuery(request.getParameter("id"), null, null, null);
page = pageService.findOne(dbQuery);
}
// Update model
model = fetchPanelData(model, 1, 0, 0, 0);
model = adminTemplate(model, request, "admin", "page");
model.addAttribute("page", page);
return "admin.formPage";
}
@RequestMapping(value = "/page", method = RequestMethod.POST)
public String pageSingleUpdate(HttpServletRequest request, ModelMap model, @Valid @ModelAttribute("page") Page page, BindingResult result) {
logger.info("Submitting requested page");
String message = "An error has occured whislt updating that page";
// Return form if not valid
if (result.hasErrors()) {
logger.warn("Form submission contains " + result.getErrorCount() + " errors");
model = fetchPanelData(model, 1, 0, 0, 0);
model = adminTemplate(model, request, "admin", "variant");
return "admin.formVariant";
} else {
// Get promotional category
if (page.getPromotionId() != null) {
String dbQuery = categoryService.getQuery(page.getPromotionId().toString(), null, 0, null);
page.setPromotionList(categoryService.findOne(dbQuery));
}
// Add / Update page
if (page.getId() == null) {
page.setCreatedBy(fetchAdminUser().getName());
page.setDateCreated(new Date());
pageService.objectCreate(page);
message = page.getName() + " created";
} else {
page.setLastEditedBy(fetchAdminUser().getName());
page.setLastEdited(new Date());
pageService.objectUpdate(page);
message = page.getName() + " updated";
}
logger.info(message);
request.getSession().setAttribute("message", message);
// Redirect to page list page
String redirect = request.getParameter("return");
if (redirect == null) {
redirect = "/admin/pageList";
}
return "redirect:" + redirect;
}
}
}