package org.podcastpedia.web.user; import org.apache.log4j.Logger; import org.podcastpedia.common.domain.Episode; import org.podcastpedia.common.domain.Podcast; import org.podcastpedia.core.searching.SearchData; import org.podcastpedia.core.user.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; import javax.annotation.security.RolesAllowed; import java.util.List; @Controller @RequestMapping("users/subscriptions") public class UserController { protected static Logger LOG = Logger.getLogger(UserController.class); @Autowired UserService userService; /** * Add an empty searchData object to the model */ @ModelAttribute public void addDataToModel(ModelMap model){ SearchData dataForSearchBar = new SearchData(); dataForSearchBar.setSearchMode("natural"); dataForSearchBar.setCurrentPage(1); dataForSearchBar.setQueryText(null); dataForSearchBar.setNumberResultsPerPage(10); model.put("advancedSearchData", dataForSearchBar); } @RequestMapping(method= RequestMethod.GET) @RolesAllowed("ROLE_USER") public String getPodcastSubscriptions(ModelMap model) { LOG.debug("------ Returns the podcasts the user has subscribed to ------"); UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); List<Podcast> subscriptions = userService.getSubscriptions(userDetails.getUsername()); model.addAttribute("subscriptions", subscriptions); return "podcast_subscriptions_def"; } @RequestMapping(value="latest-episodes", method= RequestMethod.GET) public String getLatestEpisodesFromPodcastSubscriptions(ModelMap model) { LOG.debug("------ Returns the podcasts the user has subscribed to ------"); UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); List<Episode> latestEpisodes = userService.getLatestEpisodesFromSubscriptions(userDetails.getUsername()); model.addAttribute("latestEpisodes", latestEpisodes); return "latest_episodes_for_podcast_subscriptions_def"; } @RequestMapping(method= RequestMethod.POST) @RolesAllowed("ROLE_USER") public @ResponseBody String subscribeToPodcast(@RequestParam("podcastId") Integer podcastId, @RequestParam("newSubscriptionCategory")String newSubscriptionCategory, @RequestParam("existingSubscriptionCategory")String existingSubscriptionCategory) { UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); String subscriptionCategory = !"".equals(newSubscriptionCategory) ? newSubscriptionCategory : existingSubscriptionCategory; userService.subscribeToPodcast(userDetails.getUsername(), podcastId, subscriptionCategory); return "OK"; } @RequestMapping(value="unsubscribe", method= RequestMethod.POST) @RolesAllowed("ROLE_USER") public @ResponseBody String unsubscribeFromPodcast(@RequestParam("podcastId") Integer podcastId) { UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); userService.unsubscribeFromPodcast(userDetails.getUsername(), podcastId); return "OK"; } @RequestMapping(value="remove-from-subscription-category", method= RequestMethod.POST) @RolesAllowed("ROLE_USER") public @ResponseBody String removeFromSubscriptionCategory(@RequestParam("podcastId") Integer podcastId, @RequestParam("subscriptionCategory") String subscriptionCategory) { UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); userService.removeFromSubscriptionCategory(userDetails.getUsername(), podcastId, subscriptionCategory); return "OK"; } }