package org.hepx.ticket.web.controller;
import org.hepx.ticket.entity.Resource;
import org.hepx.ticket.service.ResourceService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.hepx.ticket.velocity.Functions;
import org.hepx.ticket.web.ResponseResult;
import org.hepx.ticket.entity.Resource;
import org.hepx.ticket.service.ResourceService;
import org.hepx.ticket.velocity.Functions;
import org.hepx.ticket.web.ResponseResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.util.*;
@Controller
@RequestMapping("/resource")
public class ResourceController {
private static Logger logger = LoggerFactory.getLogger(ResourceController.class);
@Autowired
private ResourceService resourceService;
@ModelAttribute("types")
public Resource.ResourceType[] resourceTypes() {
return Resource.ResourceType.values();
}
@RequiresPermissions("resource:view")
@RequestMapping(method = RequestMethod.GET)
public String list(Model model) {
model.addAttribute("resourceList", resourceService.findAll());
return "resource/list";
}
@RequiresPermissions("resource:create")
@RequestMapping(value = "/{parentId}/appendChild", method = RequestMethod.GET)
public String showAppendChildForm(@PathVariable("parentId") Long parentId, Model model) {
Resource parent = resourceService.findOne(parentId);
model.addAttribute("parent", parent);
model.addAttribute("op", "新增子节点");
return "resource/edit";
}
@RequiresPermissions("resource:create")
@RequestMapping(value = "/{parentId}/appendChild", method = RequestMethod.POST)
public String create(Resource resource, RedirectAttributes redirectAttributes) {
resourceService.createResource(resource);
redirectAttributes.addFlashAttribute("msg", "新增子节点成功");
return "redirect:/resource";
}
@RequiresPermissions("resource:update")
@RequestMapping(value = "/{id}/update", method = RequestMethod.GET)
public String showUpdateForm(@PathVariable("id") Long id, Model model) {
model.addAttribute("resource", resourceService.findOne(id));
model.addAttribute("op", "修改");
return "resource/edit";
}
@RequiresPermissions("resource:update")
@RequestMapping(value = "/{id}/update", method = RequestMethod.POST)
public String update(Resource resource, RedirectAttributes redirectAttributes) {
resourceService.updateResource(resource);
redirectAttributes.addFlashAttribute("msg", "修改成功");
return "redirect:/resource";
}
@RequiresPermissions("resource:delete")
@RequestMapping(value = "/{id}/delete", method = RequestMethod.GET)
@ResponseBody
public Map delete(@PathVariable("id") Long id) {
try {
resourceService.deleteResource(id);
return ResponseResult.buildSuccessResult().toMap();
} catch (Exception e) {
logger.error(e.getMessage(), e);
return ResponseResult.buildFailResult().toMap();
}
}
@RequiresPermissions("resource:view")
@RequestMapping("/json")
@ResponseBody
public List<Map<String, Object>> jsonAll(@RequestParam(required = false) Collection<Long> resourceIds) {
List<Resource> resources = resourceService.findAll();
List<Map<String, Object>> maps = new ArrayList<Map<String, Object>>();
for (Resource resource : resources) {
if (!resource.isRootNode()) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", resource.getId());
map.put("pId", resource.getParentId());
map.put("name", resource.getName());
map.put("checked", CollectionUtils.isEmpty(resourceIds) ? false : Functions.in(resourceIds, resource.getId()));
maps.add(map);
}
}
return maps;
}
}