package no.niths.application.web;
import java.util.ArrayList;
import java.util.List;
import no.niths.application.web.interfaces.DeveloperController;
import no.niths.common.constants.AdminConstantNames;
import no.niths.domain.development.Application;
import no.niths.domain.development.Developer;
import no.niths.services.auth.interfaces.KeyGeneratorService;
import no.niths.services.development.interfaces.DeveloperService;
import no.niths.services.interfaces.MailSenderService;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
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.ModelAndView;
/**
* Controller for the developer view
*
* Let admin enable/disable developers and applications
*
* For the URL too the developer view add /admin/developer
* after the {@value no.niths.common.constants.MiscConstants#NITHS_BASE_DOMAIN}
*/
@Controller(value = "adminDeveloperImpl")
@RequestMapping(AdminConstantNames.ADMIN_DEV)
public class DeveloperControllerImpl implements DeveloperController {
private Logger logger = org.slf4j.LoggerFactory
.getLogger(DeveloperControllerImpl.class);
private static final String DEVELOPERS = "developers";
private List<Developer> allDevelopers = new ArrayList<Developer>();
@Autowired
private DeveloperService devService;
@Autowired
private KeyGeneratorService keyService;
@Autowired
private MailSenderService mailService;
/**
* {@inheritDoc}
*/
@Override
@RequestMapping(method = RequestMethod.GET)
public ModelAndView getDevelopers() {
logger.debug("Recieved request to see admin/developer");
ModelAndView view = new ModelAndView(DEVELOPERS);
setAllDevelopers(devService.getAllWithApps(null));
view.addObject("allDevelopers", allDevelopers);
return view;
}
/**
* {@inheritDoc}
*/
@Override
@RequestMapping(value = "/reset", method = RequestMethod.POST)
public String resetDeveloperKey(@RequestParam(value="developerId") Long developerId){
logger.debug("Reset developer");
Developer dev = devService.getById(developerId);
if(dev != null){
dev.setDeveloperToken(null);
dev.setDeveloperKey(keyService.generateDeveloperKey());
devService.update(dev);
mailService.sendDeveloperRegistratedConfirmation(dev);
}
return "redirect:/admin/developer";
}
/**
* {@inheritDoc}
*/
@Override
@RequestMapping(method = RequestMethod.POST)
public String updateDeveloper(@RequestParam(value="developerId") Long developerId,
@RequestParam(value = "devs", defaultValue = "") Long[] checkedDevs,
@RequestParam(value = "apps", defaultValue = "") Long[] checkedApps){
logger.debug("Updating developer");
if(developerId != null){
Developer dev = devService.getById(developerId);
if(dev != null){
if(checkedDevs.length == 1){
dev.setEnabled(true);
} else {
dev.setEnabled(false);
}
for (Application a: dev.getApps()){
boolean checked = false;
for (int i = 0; i < checkedApps.length; i++){
if (a.getId() == checkedApps[i]){
checked = true;
break;
}
}
if (checked){
a.setEnabled(true);
}else{
a.setEnabled(false);
}
}
devService.update(dev);
}
}
return "redirect:developer";//getDevelopers();
}
public List<Developer> getAllDevelopers() {
return allDevelopers;
}
public void setAllDevelopers(List<Developer> allDevelopers) {
this.allDevelopers = allDevelopers;
}
}