package org.transgalactica.web.hangar.controller;
import javax.inject.Inject;
import javax.validation.Valid;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
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.transgalactica.fwk.validation.exception.BusinessException;
import org.transgalactica.fwk.web.message.BusinessMessageUtils;
import org.transgalactica.management.business.logistics.service.HangarService;
import org.transgalactica.management.data.materiel.bo.HangarEntity;
import org.transgalactica.web.hangar.mapper.HangarMapper;
import org.transgalactica.web.hangar.model.HangarCommand;
@Controller
@RequestMapping(value = "/hangars")
public class HangarDetailController {
private static final String HANGAR_MODEL = "hangar";
private static final String NUMERO_MODEL = "numeroHangar";
private static final String HANGAR_VIEW = "hangar/detail";
private static final String HANGAR_EDIT_VIEW = "hangar/edit";
private static final String HANGAR_REDIRECT = "redirect:/hangars/";
private static final String HANGARS_REDIRECT = "redirect:/hangars/search";
@Inject
private BeanFactory beanFactory;
@Inject
private HangarService hangarService;
@Inject
private HangarMapper hangarMapper;
protected HangarDetailController() {
}
@RequestMapping(method = RequestMethod.GET)
public String get() {
return HANGARS_REDIRECT;
}
@RequestMapping(value = "/new", method = RequestMethod.GET)
public String getNew(Model model) {
HangarCommand command = beanFactory.getBean(HangarCommand.class);
model.addAttribute(HANGAR_MODEL, command);
return HANGAR_EDIT_VIEW;
}
@RequestMapping(value = "/{numero}/update", method = RequestMethod.GET)
public String getUpdate(@PathVariable Long numero, Model model) {
HangarEntity entity = hangarService.chargerHangar(numero);
HangarCommand command = hangarMapper.mapToHangarCommand(entity);
model.addAttribute(HANGAR_MODEL, command);
model.addAttribute(NUMERO_MODEL, numero);
return HANGAR_EDIT_VIEW;
}
@RequestMapping(value = "/{numero}", method = RequestMethod.GET)
public String getById(@PathVariable Long numero, Model model) {
HangarEntity hangar = hangarService.chargerHangar(numero);
model.addAttribute(HANGAR_MODEL, hangar);
return HANGAR_VIEW;
}
@RequestMapping(value = "/new", method = RequestMethod.POST)
public String create(@Valid @ModelAttribute("hangar") HangarCommand command, BindingResult result, Model model) {
if (result.hasErrors()) {
return HANGAR_EDIT_VIEW;
}
HangarEntity entity = beanFactory.getBean(HangarEntity.class);
hangarMapper.mapHangarCommandToEntity(command, entity);
try {
hangarService.enregistrerHangar(entity);
return HANGAR_REDIRECT + entity.getNumero();
}
catch (BusinessException e) {
BusinessMessageUtils.addBusinessException(model, e);
return HANGAR_EDIT_VIEW;
}
}
@RequestMapping(value = "/{numero}", method = RequestMethod.POST)
public String save(@PathVariable Long numero, @Valid @ModelAttribute("hangar") HangarCommand command,
BindingResult result, Model model) {
if (result.hasErrors()) {
model.addAttribute(NUMERO_MODEL, numero);
return HANGAR_EDIT_VIEW;
}
HangarEntity entity = hangarService.chargerHangar(numero);
hangarMapper.mapHangarCommandToEntity(command, entity);
try {
hangarService.enregistrerHangar(entity);
}
catch (BusinessException e) {
BusinessMessageUtils.addBusinessException(model, e);
model.addAttribute(NUMERO_MODEL, numero);
return HANGAR_EDIT_VIEW;
}
return HANGAR_REDIRECT + numero;
}
@RequestMapping(value = "/{numero}", method = RequestMethod.DELETE)
public String delete(@PathVariable Long numero, Model model) {
try {
HangarEntity entity = hangarService.chargerHangar(numero);
hangarService.supprimerHangar(entity);
}
catch (BusinessException e) {
// Ici nous rechargeons le Hangar, ne sachant dans quel etat,
// l'exception l'a laissé. Ceci peut provoquer l'envoi d'une autre
// exception
BusinessMessageUtils.addBusinessException(model, e);
HangarEntity hangar = hangarService.chargerHangar(numero);
model.addAttribute(HANGAR_MODEL, hangar);
return HANGAR_VIEW;
}
return HANGARS_REDIRECT;
}
}