package com.jspxcms.core.web.back;
import static com.jspxcms.core.support.Constants.CREATE;
import static com.jspxcms.core.support.Constants.DELETE_SUCCESS;
import static com.jspxcms.core.support.Constants.EDIT;
import static com.jspxcms.core.support.Constants.MESSAGE;
import static com.jspxcms.core.support.Constants.OPERATION_SUCCESS;
import static com.jspxcms.core.support.Constants.OPRT;
import static com.jspxcms.core.support.Constants.SAVE_SUCCESS;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.web.PageableDefaults;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.jspxcms.common.util.RowSide;
import com.jspxcms.common.web.Servlets;
import com.jspxcms.core.domain.Model;
import com.jspxcms.core.domain.ModelField;
import com.jspxcms.core.service.ModelFieldService;
import com.jspxcms.core.service.ModelService;
import com.jspxcms.core.support.Constants;
import com.jspxcms.core.support.ModelTypeHolder;
/**
* ModelFieldController
*
* @author liufang
*
*/
@Controller
@RequestMapping("/core/model_field")
public class ModelFieldController {
private static final Logger logger = LoggerFactory
.getLogger(ModelFieldController.class);
@RequiresPermissions("core:model_field:list")
@RequestMapping("list.do")
public String list(Integer modelId, HttpServletRequest request,
org.springframework.ui.Model modelMap) {
Model model = modelService.get(modelId);
modelMap.addAttribute("model", model);
// List<ModelField> list = service.findList(modelId);
List<ModelField> list = model.getFields();
modelMap.addAttribute("list", list);
return "core/model_field/model_field_list";
}
@RequiresPermissions("core:model_field:predefined_list")
@RequestMapping("predefined_list.do")
public String predefinedList(Integer modelId,
org.springframework.ui.Model modelMap) {
Model model = modelService.get(modelId);
modelMap.addAttribute("model", model);
String path = modelTypeHolder.getPaths().get(model.getType());
return path + "model_predefined_list";
}
@RequiresPermissions("core:model_field:create")
@RequestMapping("create.do")
public String create(Integer modelId, Integer id,
org.springframework.ui.Model modelMap) {
Model model = modelService.get(modelId);
modelMap.addAttribute("model", model);
if (id != null) {
ModelField bean = service.get(id);
modelMap.addAttribute("bean", bean);
}
modelMap.addAttribute(OPRT, CREATE);
return "core/model_field/model_field_form";
}
@RequiresPermissions("core:model_field:edit")
@RequestMapping("edit.do")
public String edit(
Integer id,
Integer position,
@PageableDefaults(sort = "id", sortDir = Direction.DESC) Pageable pageable,
HttpServletRequest request, org.springframework.ui.Model modelMap) {
ModelField bean = service.get(id);
Model model = bean.getModel();
RowSide<ModelField> side = service.findSide(bean, position);
modelMap.addAttribute("bean", bean);
modelMap.addAttribute("model", model);
modelMap.addAttribute("side", side);
modelMap.addAttribute("position", position);
modelMap.addAttribute(OPRT, EDIT);
return "core/model_field/model_field_form";
}
@RequiresPermissions("core:model_field:save")
@RequestMapping("save.do")
public String save(ModelField bean, Integer modelId, Boolean clob,
String redirect, HttpServletRequest request, RedirectAttributes ra) {
Map<String, String> customs = Servlets.getParameterMap(request,
"customs_");
service.save(bean, modelId, customs, clob);
logger.info("save ModelField, name={}.", bean.getName());
ra.addFlashAttribute(MESSAGE, SAVE_SUCCESS);
if (Constants.REDIRECT_LIST.equals(redirect)) {
ra.addAttribute("modelId", modelId);
return "redirect:list.do";
} else if (Constants.REDIRECT_CREATE.equals(redirect)) {
ra.addAttribute("modelId", modelId);
return "redirect:create.do";
} else {
ra.addAttribute("id", bean.getId());
return "redirect:edit.do";
}
}
@RequiresPermissions("core:model_field:batch_save")
@RequestMapping("/batch_save.do")
public String batchSave(Integer modelId, String[] name, String[] label,
Boolean[] dblColumn, String[] property, String[] custom,
RedirectAttributes ra) {
service.batchSave(modelId, name, label, dblColumn, property, custom);
ra.addAttribute("modelId", modelId);
ra.addFlashAttribute(MESSAGE, SAVE_SUCCESS);
return "redirect:list.do";
}
@RequiresPermissions("core:model_field:update")
@RequestMapping("update.do")
public String update(@ModelAttribute("bean") ModelField bean, Boolean clob,
Integer position, String redirect, HttpServletRequest request,
RedirectAttributes ra) {
Map<String, String> customs = Servlets.getParameterMap(request,
"customs_");
service.update(bean, customs, clob);
logger.info("update ModelField, name={}.", bean.getName());
ra.addFlashAttribute(MESSAGE, SAVE_SUCCESS);
if (Constants.REDIRECT_LIST.equals(redirect)) {
ra.addAttribute("modelId", bean.getModel().getId());
return "redirect:list.do";
} else {
ra.addAttribute("id", bean.getId());
ra.addAttribute("position", position);
return "redirect:edit.do";
}
}
@RequiresPermissions("core:model_field:batch_update")
@RequestMapping("batch_update.do")
public String batchUpdate(Integer modelId, Integer[] id, String[] name,
String[] label, Boolean[] dblColumn, RedirectAttributes redirect) {
ModelField[] beans = service.batchUpdate(id, name, label, dblColumn);
for (ModelField bean : beans) {
logger.info("update ModelField, name={}.", bean.getName());
}
redirect.addAttribute("modelId", modelId);
redirect.addFlashAttribute("message", "success");
return "redirect:list.do";
}
@RequiresPermissions("core:model_field:disable")
@RequestMapping("disable.do")
public String disable(Integer[] ids, Integer modelId, RedirectAttributes ra) {
ModelField[] beans = service.disable(ids);
for (ModelField bean : beans) {
logger.info("disable ModelField, name={}.", bean.getName());
}
ra.addAttribute("modelId", modelId);
ra.addFlashAttribute(MESSAGE, OPERATION_SUCCESS);
return "redirect:list.do";
}
@RequiresPermissions("core:model_field:enable")
@RequestMapping("enable.do")
public String enable(Integer[] ids, Integer modelId, RedirectAttributes ra) {
ModelField[] beans = service.enable(ids);
for (ModelField bean : beans) {
logger.info("enable ModelField, name={}.", bean.getName());
}
ra.addAttribute("modelId", modelId);
ra.addFlashAttribute(MESSAGE, OPERATION_SUCCESS);
return "redirect:list.do";
}
@RequiresPermissions("core:model_field:delete")
@RequestMapping("delete.do")
public String delete(Integer[] ids, Integer modelId, RedirectAttributes ra) {
ModelField[] beans = service.delete(ids);
for (ModelField bean : beans) {
logger.info("delete ModelField, name={}.", bean.getName());
}
ra.addAttribute("modelId", modelId);
ra.addFlashAttribute(MESSAGE, DELETE_SUCCESS);
return "redirect:list.do";
}
@ModelAttribute("bean")
public ModelField preloadBean(@RequestParam(required = false) Integer oid) {
return oid != null ? service.get(oid) : null;
}
@Autowired
private ModelTypeHolder modelTypeHolder;
@Autowired
private ModelService modelService;
@Autowired
private ModelFieldService service;
}