package fr.gael.dhus.server.http.webapp.stub.controller;
import java.security.Principal;
import java.util.HashMap;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.SchedulerException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
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.bind.annotation.RestController;
import fr.gael.dhus.database.object.Search;
import fr.gael.dhus.database.object.User;
import fr.gael.dhus.service.exception.UserNotExistingException;
import fr.gael.dhus.spring.context.ApplicationContextProvider;
@RestController
public class StubSavedSearchController
{
private static Log logger = LogFactory
.getLog(StubSavedSearchController.class);
@RequestMapping(value = "/users/{userid}/searches", method = RequestMethod.POST)
public void storeUserSearch(final Principal principal,
@PathVariable(value = "userid")
final String userid,
@RequestParam(value = "complete", defaultValue = "")
final String complete)
{
final fr.gael.dhus.service.UserService userService =
ApplicationContextProvider
.getBean(fr.gael.dhus.service.UserService.class);
final User u =
(User) ((UsernamePasswordAuthenticationToken) principal).getPrincipal();
if (u == null)
{
throw new UserNotExistingException();
}
logger.debug("complete search " + complete);
userService.storeUserSearch(u.getUUID(), complete, "",
new HashMap<String, String>(), complete);
}
@RequestMapping(value = "/users/{userid}/searches", method = RequestMethod.GET)
public List<Search> getUserSearches(final Principal principal,
@PathVariable(value = "userid")
final String userid, @RequestParam(value = "offset", defaultValue = "")
final int offset, @RequestParam(value = "count", defaultValue = "")
final int count)
{
List<Search> searches = null;
final fr.gael.dhus.service.UserService userService =
ApplicationContextProvider
.getBean(fr.gael.dhus.service.UserService.class);
final User u =
(User) ((UsernamePasswordAuthenticationToken) principal).getPrincipal();
if (u == null)
{
throw new UserNotExistingException();
}
logger.debug(" ***** parameters ***** ");
logger.debug(" ***** offset ***** " + offset);
logger.debug(" ***** count ***** " + count);
searches = userService.scrollSearchesOfUser(u.getUUID(), offset, count);
try
{
userService.getNextScheduleSearch();
}
catch (final SchedulerException e)
{
logger.error("Error scheduling next search" + e.getMessage());
e.printStackTrace();
}
return searches;
}
@RequestMapping(value = "/users/{userid}/searches/count", method = RequestMethod.GET)
public int getUserSearchesCount(final Principal principal,
@PathVariable(value = "userid")
final String userid)
{
int count = 0;
final fr.gael.dhus.service.UserService userService =
ApplicationContextProvider
.getBean(fr.gael.dhus.service.UserService.class);
final User u =
(User) ((UsernamePasswordAuthenticationToken) principal).getPrincipal();
if (u == null)
{
throw new UserNotExistingException();
}
count = userService.countUserSearches(u.getUUID());
return count;
}
@RequestMapping(value = "/users/{userid}/searches", method = RequestMethod.DELETE)
public void clearSavedSearches(final Principal principal,
@PathVariable(value = "userid")
final String userid)
{
final fr.gael.dhus.service.UserService userService =
ApplicationContextProvider
.getBean(fr.gael.dhus.service.UserService.class);
final User u =
(User) ((UsernamePasswordAuthenticationToken) principal).getPrincipal();
if (u == null)
{
throw new UserNotExistingException();
}
userService.clearSavedSearches(u.getUUID());
}
@RequestMapping(value = "/users/{userid}/searches/{searchid}", method = RequestMethod.DELETE)
public void removeUserSearch(final Principal principal,
@PathVariable(value = "userid")
final String userid, @PathVariable(value = "searchid")
final String searchid, @RequestParam(value = "id", defaultValue = "")
final String id)
{
final fr.gael.dhus.service.UserService userService =
ApplicationContextProvider
.getBean(fr.gael.dhus.service.UserService.class);
final User u =
(User) ((UsernamePasswordAuthenticationToken) principal).getPrincipal();
if (u == null)
{
throw new UserNotExistingException();
}
userService.removeUserSearch(u.getUUID(), id);
}
@RequestMapping(value = "/users/{userid}/searches/{searchid}", method = RequestMethod.POST)
public void updateUserSearchNotification(@PathVariable(value = "userid")
final String userid, @PathVariable(value = "searchid")
final String searchid, @RequestParam(value = "id", defaultValue = "")
final String id, @RequestParam(value = "notify", defaultValue = "")
final boolean notify)
{
final fr.gael.dhus.service.UserService userService =
ApplicationContextProvider
.getBean(fr.gael.dhus.service.UserService.class);
userService.activateUserSearchNotification(id, notify);
}
}