Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package cz.swi2.mendeluis.app.web.controllers; import cz.swi2.mendeluis.dataaccesslayer.domain.Placement; import cz.swi2.mendeluis.dataaccesslayer.domain.User; import cz.swi2.mendeluis.dto.PortletDTO; import cz.swi2.mendeluis.dto.UserDTO; import cz.swi2.mendeluis.dto.UserPortletCreateDTO; import cz.swi2.mendeluis.dto.UserPortletDTO; import cz.swi2.mendeluis.dto.UserPortletEditDTO; import cz.swi2.mendeluis.service.config.ServiceConfiguration; import cz.swi2.mendeluis.facade.IPortletFacade; import cz.swi2.mendeluis.facade.IUserFacade; import cz.swi2.mendeluis.facade.IUserPortletFacade; import cz.swi2.mendeluis.service.UserService; import java.security.Principal; import java.util.ArrayList; import java.util.List; import javax.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springframework.web.util.UriComponentsBuilder; /** * A list of user portlets + edit info form + attaching new portlet. * * @author ivo */ @Controller @RequestMapping("/portlets") @ComponentScan(basePackages = "cz.swi2.mendeluis.service") public class PortletsController { final static Logger log = LoggerFactory.getLogger(PortletsController.class); @Autowired IPortletFacade portletFacade; @Autowired IUserPortletFacade userPortletFacade; @Autowired IUserFacade userFacade; /* --- LIST --- */ /** * Shows a list of portlets attached to the current user. */ @RequestMapping(value = "", method = RequestMethod.GET) public String index(Model model, Principal principal) { UserDTO user = userFacade.getLoggedUser(); List<UserPortletDTO> userPortletDTOs = userPortletFacade.getAllUserPortlets(user); List<UserPortletDTO> results = new ArrayList<>(); for (UserPortletDTO p : userPortletDTOs) { results.add(p); } model.addAttribute("portlets", results); return "portlets/list"; } /** * Remove the attached portlet from the current user. */ @PreAuthorize("hasPermission(#id, 'UserPortlet', 'isOwner')") @RequestMapping(value = "remove/{id}", method = RequestMethod.GET) public String remove(@PathVariable int id, RedirectAttributes redirectAttributes, Principal principal) { userPortletFacade.deleteUserPortlet(id); redirectAttributes.addFlashAttribute("alert_success", "Portlet was detached."); return "redirect:/portlets/"; } /** * Set the user portlet visibility. */ @PreAuthorize("hasPermission(#id, 'UserPortlet', 'isOwner')") @RequestMapping(value = "setVisibility/{id}", params = { "hidden" }, method = RequestMethod.GET) public String setVisibility(@PathVariable int id, @RequestParam(value = "hidden") int hidden, RedirectAttributes redirectAttributes, Principal principal) { UserPortletDTO up = userPortletFacade.getUserPortletWithId(id); userPortletFacade.setVisibility(up, (hidden == 1)); if (hidden == 1) { redirectAttributes.addFlashAttribute("alert_success", "Portlet is hidden."); } else { redirectAttributes.addFlashAttribute("alert_success", "Portlet is now visible."); } return "redirect:/portlets/"; } /** * Move the portlet in the given direction. */ @PreAuthorize("hasPermission(#id, 'UserPortlet', 'isOwner')") @RequestMapping(value = "move/{id}", params = { "direction" }, method = RequestMethod.GET) public String move(@PathVariable int id, @RequestParam(value = "direction") String direction, RedirectAttributes redirectAttributes, Principal principal) { UserPortletDTO up = userPortletFacade.getUserPortletWithId(id); if (direction.equals("up")) { userPortletFacade.moveUp(up); } else if (direction.equals("down")) { userPortletFacade.moveDown(up); } return "redirect:/portlets/"; } /* --- DETAIL: UPDATE --- */ /** * Shows portlet edit form. */ @PreAuthorize("hasPermission(#id, 'UserPortlet', 'isOwner')") @RequestMapping(value = "detail/{id}", method = RequestMethod.GET) public String detail(@PathVariable int id, RedirectAttributes redirectAttributes, Model model, Principal principal) { UserPortletDTO up = userPortletFacade.getUserPortletWithId(id); UserPortletEditDTO upd = new UserPortletEditDTO(); upd.setId(up.getId()); upd.setDescription(up.getDescription()); upd.setHidden(up.isHidden()); upd.setPlacement(up.getPlacement()); model.addAttribute("isAdding", false); model.addAttribute("portlet", up.getPortlet()); model.addAttribute("userPortletEditDTO", upd); return "portlets/detail"; } /** * Handles submit of the portlet edit form. */ @PreAuthorize("hasPermission(#userPortletEditDTO.id, 'UserPortlet', 'isOwner')") @RequestMapping(value = "detail/{id}", method = RequestMethod.POST) public String detail(@Valid @ModelAttribute("userPortletEditDTO") UserPortletEditDTO userPortletEditDTO, BindingResult bindingResult, RedirectAttributes redirectAttributes, UriComponentsBuilder uriBuilder, Principal principal) { UserPortletDTO up = userPortletFacade.getUserPortletWithId(userPortletEditDTO.getId()); if (bindingResult.hasErrors()) { redirectAttributes.addFlashAttribute("alert_danger", "Some data were not filled!"); return "redirect:/portlets/"; } // update userPortletFacade.updateInfo(userPortletEditDTO.getId(), userPortletEditDTO.getDescription(), userPortletEditDTO.getPlacement(), userPortletEditDTO.isHidden()); redirectAttributes.addFlashAttribute("alert_success", "Portlet was successfully modified."); return "redirect:/portlets/"; } /* --- DETAIL: ADD --- */ /** * Shows a list of pre-defined portlets. */ @RequestMapping(value = "add", method = RequestMethod.GET) public String add(Model model, Principal principal) { List<PortletDTO> portletDTOs = portletFacade.getAllPortlets(); model.addAttribute("portlets", portletDTOs); return "portlets/choose-portlet"; } /** * Shows the adding form with options. */ @RequestMapping(value = "add/{id}", method = RequestMethod.GET) public String add(@PathVariable int id, Model model, Principal principal) { PortletDTO p = portletFacade.getPortletWithId(id); UserPortletCreateDTO upd = new UserPortletCreateDTO(); upd.setDescription(""); upd.setHidden(false); upd.setPlacement(Placement.LEFT); model.addAttribute("isAdding", true); model.addAttribute("portlet", p); model.addAttribute("userPortletCreateDTO", upd); return "portlets/detail"; } /** * Finishes adding a new portlet. */ @RequestMapping(value = "add/{portletId}", method = RequestMethod.POST) public String add(@PathVariable int portletId, @Valid @ModelAttribute("userPortletCreateDTO") UserPortletCreateDTO userPortletCreateDTO, BindingResult bindingResult, RedirectAttributes redirectAttributes, UriComponentsBuilder uriBuilder, Principal principal) { UserDTO user = userFacade.getLoggedUser(); if (bindingResult.hasErrors()) { redirectAttributes.addFlashAttribute("alert_danger", "Some data were not filled!"); return "redirect:/portlets/add/" + portletId; } // add PortletDTO port = portletFacade.getPortletWithId(portletId); UserPortletDTO upd = new UserPortletDTO(); upd.setDescription(userPortletCreateDTO.getDescription()); upd.setHidden(userPortletCreateDTO.isHidden()); upd.setPlacement(userPortletCreateDTO.getPlacement()); upd.setUser(user); upd.setPortlet(port); userPortletFacade.createUserPortlet(upd); // redirect redirectAttributes.addFlashAttribute("alert_success", "Portlet was successfully added."); return "redirect:/portlets/"; } }