/** * */ package net.conselldemallorca.helium.webapp.mvc; import javax.servlet.http.HttpServletRequest; import net.conselldemallorca.helium.core.model.hibernate.DefinicioProces; import net.conselldemallorca.helium.core.model.hibernate.Entorn; import net.conselldemallorca.helium.core.model.hibernate.ExpedientTipus; import net.conselldemallorca.helium.core.model.service.DissenyService; import net.conselldemallorca.helium.core.model.service.ExpedientService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; 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.support.SessionStatus; /** * Controlador per la gestiĆ³ dels formularis dels camps de tipus registre * a dins el formulari d'inici d'expedient * * @author Limit Tecnologies <limit@limit.es> */ @Controller public class ExpedientIniciarRegistreController extends CommonRegistreController { private ExpedientService expedientService; @Autowired public ExpedientIniciarRegistreController( ExpedientService expedientService, DissenyService dissenyService) { super(dissenyService); this.expedientService = expedientService; } @ModelAttribute("expedientTipus") public ExpedientTipus populateExpedientTipus( HttpServletRequest request, @RequestParam(value = "id", required = true) Long expedientTipusId) { ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(expedientTipusId); return expedientTipus; } @ModelAttribute("definicioProces") public DefinicioProces populateDefinicioProces( HttpServletRequest request, @RequestParam(value = "id", required = true) Long expedientTipusId, @RequestParam(value = "definicioProcesId", required = false) Long definicioProcesId) { if (definicioProcesId != null) { return dissenyService.getById(definicioProcesId, false); } else { return dissenyService.findDarreraDefinicioProcesForExpedientTipus(expedientTipusId, false); } } @Override public void populateOthers( HttpServletRequest request, String id, Object command, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { Long expedientTipusId = new Long(id); model.addAttribute( "expedientTipus", dissenyService.getExpedientTipusById(expedientTipusId)); model.addAttribute( "tasca", expedientService.getStartTask( entorn.getId(), expedientTipusId, null, null)); } } @RequestMapping(value = "/expedient/iniciarRegistre", method = RequestMethod.GET) public String registreGet(HttpServletRequest request) { return super.registreGet(request); } @RequestMapping(value = "/expedient/iniciarRegistre", method = RequestMethod.POST) public String registrePost( HttpServletRequest request, @RequestParam(value = "id", required = true) String id, @RequestParam(value = "registreId", required = true) Long registreId, @RequestParam(value = "index", required = false) Integer index, @RequestParam(value = "submit", required = true) String submit, @ModelAttribute("command") Object command, BindingResult result, SessionStatus status, ModelMap model) { return super.registrePost( request, id, registreId, index, submit, command, result, status, model); } @Override public void esborrarRegistre( HttpServletRequest request, String id, String campCodi, boolean multiple, int index) { esborrarRegistre(request, campCodi, multiple, index); } @Override public Object[] getValorRegistre( HttpServletRequest request, Long entornId, String id, String campCodi) { return (Object[])request.getSession().getAttribute( ExpedientIniciarController.getClauSessioCampRegistre(campCodi)); } @Override public void guardarRegistre( HttpServletRequest request, String id, String campCodi, boolean multiple, Object[] valors, int index) { guardarRegistre(request, campCodi, multiple, valors, index); } @Override public void guardarRegistre( HttpServletRequest request, String id, String campCodi, boolean multiple, Object[] valors) { guardarRegistre(request, campCodi, multiple, valors, -1); } @Override public String redirectUrl(String id, String campCodi) { return "redirect:/expedient/iniciarPasForm.html?expedientTipusId=" + id; } @Override public String registreUrl() { return "expedient/iniciarRegistre"; } private void guardarRegistre( HttpServletRequest request, String campCodi, boolean multiple, Object[] valors, int index) { if (multiple) { Object valor = request.getSession().getAttribute( ExpedientIniciarController.getClauSessioCampRegistre(campCodi)); if (valor == null) { request.getSession().setAttribute( ExpedientIniciarController.getClauSessioCampRegistre(campCodi), new Object[]{valors}); } else { Object[] valorMultiple = (Object[])valor; if (index != -1) { valorMultiple[index] = valors; request.getSession().setAttribute( ExpedientIniciarController.getClauSessioCampRegistre(campCodi), valor); } else { Object[] valorNou = new Object[valorMultiple.length + 1]; for (int i = 0; i < valorMultiple.length; i++) valorNou[i] = valorMultiple[i]; valorNou[valorMultiple.length] = valors; request.getSession().setAttribute( ExpedientIniciarController.getClauSessioCampRegistre(campCodi), valorNou); } } } else { request.getSession().setAttribute( ExpedientIniciarController.getClauSessioCampRegistre(campCodi), valors); } } public void esborrarRegistre( HttpServletRequest request, String campCodi, boolean multiple, int index) { if (multiple) { Object valor = request.getSession().getAttribute( ExpedientIniciarController.getClauSessioCampRegistre(campCodi)); if (valor != null) { Object[] valorMultiple = (Object[])valor; if (valorMultiple.length > 0) { Object[] valorNou = new Object[valorMultiple.length - 1]; for (int i = 0; i < valorNou.length; i++) valorNou[i] = (i < index) ? valorMultiple[i] : valorMultiple[i + 1]; request.getSession().setAttribute( ExpedientIniciarController.getClauSessioCampRegistre(campCodi), valorNou); } } } else { request.getSession().removeAttribute( ExpedientIniciarController.getClauSessioCampRegistre(campCodi)); } } }