/** * */ package net.conselldemallorca.helium.webapp.mvc; import java.io.BufferedReader; import java.io.InputStreamReader; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import net.conselldemallorca.helium.core.model.hibernate.Entorn; import net.conselldemallorca.helium.core.model.hibernate.Estat; import net.conselldemallorca.helium.core.model.hibernate.ExpedientTipus; import net.conselldemallorca.helium.core.model.service.DissenyService; import net.conselldemallorca.helium.core.model.service.PermissionService; import net.conselldemallorca.helium.core.security.ExtendedPermission; import net.conselldemallorca.helium.webapp.mvc.util.BaseController; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.acls.model.Permission; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.validation.Validator; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; 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; import org.springframework.web.multipart.MultipartFile; /** * Controlador per la gestiĆ³ dels estats per tipus d'expedient * * @author Limit Tecnologies <limit@limit.es> */ @Controller public class ExpedientTipusEstatsController extends BaseController { private DissenyService dissenyService; private PermissionService permissionService; private Validator annotationValidator; @Autowired public ExpedientTipusEstatsController( DissenyService dissenyService, PermissionService permissionService) { this.dissenyService = dissenyService; this.permissionService = permissionService; } @ModelAttribute("command") public Estat populateCommand( HttpServletRequest request, @RequestParam(value = "id", required = false) Long id) { if (id != null) return dissenyService.getEstatById(id); return new Estat(); } @ModelAttribute("expedientTipus") public ExpedientTipus populateExpedientTipus( @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId) { return dissenyService.getExpedientTipusById(expedientTipusId); } @RequestMapping(value = "/expedientTipus/estats", method = RequestMethod.GET) public String formGet( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, @RequestParam(value = "estatId", required = false) Long estatId, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { CommandImportacio commandImportacio = new CommandImportacio(); model.addAttribute("commandImportacio", commandImportacio); ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(expedientTipusId); if (potDissenyarExpedientTipus(entorn, expedientTipus)) { model.addAttribute("estats", dissenyService.findEstatAmbExpedientTipus(expedientTipusId)); return "expedientTipus/estats"; } else { missatgeError(request, getMessage("error.permisos.disseny.tipus.exp")); return "redirect:/index.html"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedientTipus/estats", method = RequestMethod.POST) public String formPost( HttpServletRequest request, @RequestParam(value = "submit", required = false) String submit, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, @ModelAttribute("command") Estat command, BindingResult result, SessionStatus status, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(expedientTipusId); if (potDissenyarExpedientTipus(entorn, expedientTipus)) { if ("submit".equals(submit) || submit.length() == 0) { annotationValidator.validate(command, result); if (result.hasErrors()) { model.addAttribute("estats", dissenyService.findEstatAmbExpedientTipus(expedientTipusId)); return "expedientTipus/estats"; } try { dissenyService.createEstat(command); missatgeInfo(request, getMessage("info.estat.creat") ); status.setComplete(); } catch (Exception ex) { missatgeError(request, getMessage("error.proces.peticio"), ex.getLocalizedMessage()); logger.error("No s'ha pogut guardar el registre", ex); } } return "redirect:/expedientTipus/estats.html?expedientTipusId=" + expedientTipusId; } else { missatgeError(request, getMessage("error.permisos.disseny.tipus.exp")); return "redirect:/index.html"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedientTipus/estatsForm", method = RequestMethod.GET) public String formGetValors( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(expedientTipusId); if (potDissenyarExpedientTipus(entorn, expedientTipus)) { return "expedientTipus/estatsForm"; } else { missatgeError(request, getMessage("error.permisos.disseny.tipus.exp")); return "redirect:/index.html"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedientTipus/estatsForm", method = RequestMethod.POST) public String formPostValors( HttpServletRequest request, @RequestParam(value = "submit", required = false) String submit, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, @ModelAttribute("command") Estat command, BindingResult result, SessionStatus status, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(expedientTipusId); if (potDissenyarExpedientTipus(entorn, expedientTipus)) { if ("submit".equals(submit) || submit.length() == 0) { annotationValidator.validate(command, result); if (result.hasErrors()) { model.addAttribute("estats", dissenyService.findEstatAmbExpedientTipus(expedientTipusId)); return "expedientTipus/estats"; } try { if (command.getId() == null){ dissenyService.createEstat(command); missatgeInfo(request, getMessage("info.estat.creat") ); status.setComplete(); } else dissenyService.updateEstat(command); missatgeInfo(request, getMessage("info.estat.guardat") ); status.setComplete(); } catch (Exception ex) { missatgeError(request, getMessage("error.proces.peticio"), ex.getLocalizedMessage()); logger.error("No s'ha pogut guardar el registre", ex); return "expedientTipus/estatsForm"; } } return "redirect:/expedientTipus/estats.html?expedientTipusId=" + expedientTipusId; } else { missatgeError(request, getMessage("error.permisos.disseny.tipus.exp")); return "redirect:/index.html"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } //importar estats amb arxius csv //format de l'arxiu:codi;nom /// codi,nom //exemple:test;test @RequestMapping(value = "/expedientTipus/importarEstats") public String importarEstats( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = false) Long expedientTipusId, @RequestParam(value = "arxiu", required = false) final MultipartFile multipartFile) { Entorn entorn = getEntornActiu(request); ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(expedientTipusId); if (entorn != null) { try { if (multipartFile.getBytes() == null || multipartFile.getBytes().length == 0) { missatgeError(request, getMessage("error.especificar.arxiu.importar")); } else { BufferedReader br = new BufferedReader( new InputStreamReader(multipartFile.getInputStream())); String linia = br.readLine(); while (linia != null) { String[] columnes = linia.contains(";") ? linia.split(";") : linia.split(","); if (columnes.length > 1) { Estat estat = new Estat(); estat.setId(null); estat.setCodi(columnes[0]); estat.setNom(columnes[1]); estat.setExpedientTipus(expedientTipus); dissenyService.createOrUpdateEstat(estat); } linia = br.readLine(); } missatgeInfo(request, getMessage("info.enum.valors.importats")); } } catch (Exception ex) { missatgeError(request, getMessage("error.ordre.enumeracio"), ex.getLocalizedMessage()); logger.error("No s'han pogut importar els estats", ex); } return "redirect:/expedientTipus/estats.html?expedientTipusId=" + expedientTipus.getId(); } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedientTipus/estatEsborrar.html") public String deleteAction( HttpServletRequest request, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId, @RequestParam(value = "id", required = true) Long id) { Entorn entorn = getEntornActiu(request); if (entorn != null) { ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(expedientTipusId); if (potDissenyarExpedientTipus(entorn, expedientTipus)) { dissenyService.deleteEstat(id, expedientTipusId); missatgeInfo(request, getMessage("info.estat.esborrat") ); return "redirect:/expedientTipus/estats.html?expedientTipusId=" + expedientTipusId; } else { missatgeError(request, getMessage("error.permisos.disseny.tipus.exp")); return "redirect:/index.html"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedientTipus/estatPujar") public String pujarCamp( HttpServletRequest request, @RequestParam(value = "id", required = true) Long id, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId) { Entorn entorn = getEntornActiu(request); if (entorn != null) { ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(expedientTipusId); if (potDissenyarExpedientTipus(entorn, expedientTipus)) { try { dissenyService.goUpEstat(id); } catch (Exception ex) { missatgeError(request, getMessage("error.ordre.estat"), ex.getLocalizedMessage()); logger.error("No s'ha pogut canviar l'ordre de l'estat", ex); } return "redirect:/expedientTipus/estats.html?expedientTipusId=" + expedientTipusId; } else { missatgeError(request, getMessage("error.permisos.disseny.tipus.exp")); return "redirect:/index.html"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @RequestMapping(value = "/expedientTipus/estatBaixar") public String baixarCamp( HttpServletRequest request, @RequestParam(value = "id", required = true) Long id, @RequestParam(value = "expedientTipusId", required = true) Long expedientTipusId) { Entorn entorn = getEntornActiu(request); if (entorn != null) { ExpedientTipus expedientTipus = dissenyService.getExpedientTipusById(expedientTipusId); if (potDissenyarExpedientTipus(entorn, expedientTipus)) { try { dissenyService.goDownEstat(id); } catch (Exception ex) { missatgeError(request, getMessage("error.ordre.estat"), ex.getLocalizedMessage()); logger.error("No s'ha pogut canviar l'ordre de l'estat", ex); } return "redirect:/expedientTipus/estats.html?expedientTipusId=" + expedientTipusId; } else { missatgeError(request, getMessage("error.permisos.disseny.tipus.exp")); return "redirect:/index.html"; } } else { missatgeError(request, getMessage("error.no.entorn.selec") ); return "redirect:/index.html"; } } @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomEditor( ExpedientTipus.class, new ExpedientTipusTypeEditor(dissenyService)); } @Resource(name = "annotationValidator") public void setAnnotationValidator(Validator annotationValidator) { this.annotationValidator = annotationValidator; } private boolean potDissenyarExpedientTipus(Entorn entorn, ExpedientTipus expedientTipus) { if (potDissenyarEntorn(entorn)) return true; return permissionService.filterAllowed( expedientTipus, ExpedientTipus.class, new Permission[] { ExtendedPermission.ADMINISTRATION, ExtendedPermission.DESIGN}) != null; } private boolean potDissenyarEntorn(Entorn entorn) { return permissionService.filterAllowed( entorn, Entorn.class, new Permission[] { ExtendedPermission.ADMINISTRATION, ExtendedPermission.DESIGN}) != null; } public class CommandImportacio { private byte[] arxiu; private Long expedientTipusId; public byte[] getArxiu() { return arxiu; } public void setArxiu(byte[] arxiu) { this.arxiu = arxiu; } public Long getExpedientTipusId() { return expedientTipusId; } public void setExpedientTipusId(Long expedientTipusId) { this.expedientTipusId = expedientTipusId; } } private static final Log logger = LogFactory.getLog(ExpedientTipusEstatsController.class); }