/** * */ package net.conselldemallorca.helium.webapp.mvc; import javax.servlet.http.HttpServletRequest; import net.conselldemallorca.helium.core.model.dto.InstanciaProcesDto; 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 l'expedient * * @author Limit Tecnologies <limit@limit.es> */ @Controller public class ExpedientMassivaRegistreController extends CommonRegistreController { public static final String CLAU_SESSIO_PREFIX_REGISTRE_MASS = "Modificar_reg_massiu_"; private ExpedientService expedientService; @Autowired public ExpedientMassivaRegistreController( ExpedientService expedientService, DissenyService dissenyService) { super(dissenyService); this.expedientService = expedientService; } @ModelAttribute("instanciaProces") public InstanciaProcesDto populateInstanciaProces( @RequestParam(value = "id", required = true) String id) { return expedientService.getInstanciaProcesById(id, true, true, true); } @RequestMapping(value = "/expedient/varRegistreMassiva", method = RequestMethod.GET) public String registreGet( HttpServletRequest request, @RequestParam(value = "id", required = true) String id, @RequestParam(value = "registreId", required = true) Long registreId, @RequestParam(value = "campCodi", required = true) String campCodi) { if (getRegistreMassiuSessio(request, id, campCodi) == null) setRegistreMassiuSessio(request, id, campCodi, getValorRegistre(request, campCodi, id)); return super.registreGet(request); } @RequestMapping(value = "/expedient/varRegistreMassiva", 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); } @RequestMapping(value = "/expedient/varRegistreMassivaEsborrar") public String esborrarMembre( HttpServletRequest request, @RequestParam(value = "id", required = true) String id, @RequestParam(value = "registreId", required = true) Long registreId, @RequestParam(value = "index", required = true) int index) { return super.esborrarMembre(request, id, registreId, index); } @Override public void esborrarRegistre( HttpServletRequest request, String id, String campCodi, boolean multiple, int index) { if (multiple) { Object valor = getRegistreMassiuSessio(request, id, 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]; setRegistreMassiuSessio(request, id, campCodi, valorNou); } } } else { setRegistreMassiuSessio(request, id, campCodi, new Object[0]); } // expedientService.esborrarRegistre(id, campCodi, index); } @Override public Object[] getValorRegistre( HttpServletRequest request, Long entornId, String id, String campCodi) { return (Object[])expedientService.getVariable(id, campCodi); } @Override public void guardarRegistre( HttpServletRequest request, String id, String campCodi, boolean multiple, Object[] valors, int index) { if (multiple) { Object valor = getRegistreMassiuSessio(request, id, campCodi); if (valor == null) { setRegistreMassiuSessio(request, id, campCodi, new Object[] {valors}); } else { Object[] valorMultiple = (Object[])valor; if (index != -1) { valorMultiple[index] = valors; setRegistreMassiuSessio(request, id, campCodi, valorMultiple); } else { Object[] valorNou = new Object[valorMultiple.length + 1]; for (int i = 0; i < valorMultiple.length; i++) valorNou[i] = valorMultiple[i]; valorNou[valorMultiple.length] = valors; setRegistreMassiuSessio(request, id, campCodi, valorNou); } } } else { setRegistreMassiuSessio(request, id, campCodi, valors); } // expedientService.guardarRegistre(id, campCodi, valors, index); } @Override public void guardarRegistre( HttpServletRequest request, String id, String registre, boolean multiple, Object[] valors) { guardarRegistre(request, id, registre, multiple, valors, -1); // expedientService.guardarRegistre(id, campCodi, valors); } @Override public String redirectUrl(String id, String campCodi) { return "redirect:/expedient/dadaModificarMas.html?id=" + id + "&var=" + campCodi; } @Override public String registreUrl() { return "expedient/varRegistreMassiva"; } public static void setRegistreMassiuSessio(HttpServletRequest request, String id, String campCodi, Object[] valor) { request.getSession().setAttribute(getRegistreMassiuSessioKey(id, campCodi), valor); } public static Object[] getRegistreMassiuSessio(HttpServletRequest request, String id, String campCodi) { return (Object[])request.getSession().getAttribute(getRegistreMassiuSessioKey(id, campCodi)); } public static void removeRegistreMassiuSessio(HttpServletRequest request, String id, String campCodi) { request.getSession().removeAttribute(getRegistreMassiuSessioKey(id, campCodi)); } public static String getRegistreMassiuSessioKey(String id, String campCodi) { return ExpedientMassivaRegistreController.CLAU_SESSIO_PREFIX_REGISTRE_MASS + campCodi + "_" + id; } }