From 8111fdf72cc496ecdbba7e8f2cefebdd576564a8 Mon Sep 17 00:00:00 2001 From: IstitutoCentraleCatalogoUnicoBiblio Date: Wed, 21 Jun 2023 16:33:20 +0200 Subject: [PATCH] export unimarc: configurazione tramite file template --- SBNWeb/.classpath | 1 + .../esporta/EsportaAction.java | 369 +++++++++++------- .../elaborazioniDifferite/esporta/esporta.jsp | 5 + .../web/resources/EsportaLabels.properties | 1 + .../util/cloning/dozer-custom-mappings.xml | 6 + .../iccu/sbn/util/config/Configuration.java | 1 + .../vo/it/iccu/sbn/util/config/sbnweb.conf | 2 + .../unimarc/ExportSchedulableBatchVO.java | 108 +++++ .../sbn/batch/unimarc/ExportUnimarcBatch.java | 88 +++-- .../sbn/servizi/batch/SchedulableBatchVO.java | 53 +-- .../sbn/servizi/sip2/SbnSIP2Listener.java | 1 + .../it/iccu/sbn/util/file/FileUtil.java | 10 + 12 files changed, 408 insertions(+), 237 deletions(-) create mode 100644 SbnWebDomainEjb/ejbModule/it/iccu/sbn/batch/unimarc/ExportSchedulableBatchVO.java diff --git a/SBNWeb/.classpath b/SBNWeb/.classpath index e321ba5..75ab00b 100644 --- a/SBNWeb/.classpath +++ b/SBNWeb/.classpath @@ -50,5 +50,6 @@ + diff --git a/SBNWeb/JavaSource/it/iccu/sbn/web/actions/elaborazioniDifferite/esporta/EsportaAction.java b/SBNWeb/JavaSource/it/iccu/sbn/web/actions/elaborazioniDifferite/esporta/EsportaAction.java index fb2b346..cb64ab0 100644 --- a/SBNWeb/JavaSource/it/iccu/sbn/web/actions/elaborazioniDifferite/esporta/EsportaAction.java +++ b/SBNWeb/JavaSource/it/iccu/sbn/web/actions/elaborazioniDifferite/esporta/EsportaAction.java @@ -21,6 +21,7 @@ import it.iccu.sbn.ejb.exception.ValidationException; import it.iccu.sbn.ejb.utils.ValidazioneDati; import it.iccu.sbn.ejb.utils.stampe.StampeUtil; +import it.iccu.sbn.ejb.vo.UniqueIdentifiableVO; import it.iccu.sbn.ejb.vo.amministrazionesistema.BibliotecaVO; import it.iccu.sbn.ejb.vo.amministrazionesistema.sif.SIFListaBibliotecheAffiliatePerAttivitaVO; import it.iccu.sbn.ejb.vo.amministrazionesistema.sif.SIFListaBibliotechePoloVO; @@ -34,13 +35,17 @@ import it.iccu.sbn.ejb.vo.gestionebibliografica.titolo.ComboCodDescVO; import it.iccu.sbn.ejb.vo.gestionestampe.common.TipoStampa; import it.iccu.sbn.ejb.vo.stampe.StampaDiffVO; +import it.iccu.sbn.persistence.dao.common.DaoManager; import it.iccu.sbn.servizi.codici.CodiciProvider; +import it.iccu.sbn.util.config.CommonConfiguration; +import it.iccu.sbn.util.config.Configuration; import it.iccu.sbn.util.rfid.InventarioRFIDParser; import it.iccu.sbn.vo.domain.CodiciAttivita; import it.iccu.sbn.web.actionforms.common.documentofisico.RicercaInventariCollocazioniForm; import it.iccu.sbn.web.actionforms.elaborazioniDifferite.esporta.EsportaForm; import it.iccu.sbn.web.actionforms.elaborazioniDifferite.esporta.EsportaForm.TipoProspettazioneExport; import it.iccu.sbn.web.actions.common.ConfermaDati; +import it.iccu.sbn.web.actions.common.SbnDownloadAction; import it.iccu.sbn.web.actions.common.documentofisico.RicercaInventariCollocazioniAction; import it.iccu.sbn.web.actions.gestionebibliografica.isbd.akros.EccezioneSbnDiagnostico; import it.iccu.sbn.web.actions.gestionesemantica.utility.CaricamentoComboSemantica; @@ -60,6 +65,7 @@ import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.File; +import java.io.IOException; import java.io.InputStreamReader; import java.sql.Timestamp; import java.text.SimpleDateFormat; @@ -72,19 +78,27 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.commons.lang.NotImplementedException; import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionMessages; import org.apache.struts.upload.FormFile; +import com.google.gson.ExclusionStrategy; +import com.google.gson.FieldAttributes; +import com.google.gson.GsonBuilder; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + import static it.iccu.sbn.ejb.utils.ValidazioneDati.isFilled; public class EsportaAction extends RicercaInventariCollocazioniAction implements SbnAttivitaChecker { private static final String LISTA_BIBLIOTECHE = "sif.bib.export.unimarc"; + private static final EsportaVO ESPORTA_ERROR = new EsportaVO(); private static Logger log = Logger.getLogger(EsportaAction.class); @@ -102,6 +116,8 @@ protected Map getKeyMethodMap() { map.put("gestionestampe.lsBib", "cartiglioListaBib"); + map.put("button.scarica.template.conf", "downloadConfigTemplate"); + return map; } @@ -268,14 +284,14 @@ protected ActionForward unspecified(ActionMapping mapping, ActionForm form, this.saveToken(request); } catch (ValidationException ve) { - ActionMessages errors = new ActionMessages(); - errors.add("generico", new ActionMessage("error.documentofisico."+ ve.getMessage())); - this.saveErrors(request, errors); + + LinkableTagUtils.addError(request, new ActionMessage("error.documentofisico."+ ve.getMessage())); + return mapping.getInputForward(); } catch (Exception e) { // altri tipi di errore - ActionMessages errors = new ActionMessages(); - errors.add("generico", new ActionMessage("error.documentofisico."+ e.getMessage())); if (!ValidazioneDati.isFilled(e.getMessage())) log.error("", e); - this.saveErrors(request, errors); + + LinkableTagUtils.addError(request, new ActionMessage("error.documentofisico."+ e.getMessage())); if (!ValidazioneDati.isFilled(e.getMessage())) log.error("", e); + return mapping.getInputForward(); } return mapping.getInputForward(); @@ -310,9 +326,9 @@ public ActionForward selezPosseduto(ActionMapping mapping, ActionForm form, if (ValidazioneDati.equals(currentForm.getCodAttivita(), CodiciAttivita.getIstance().ESPORTA_DOCUMENTI_1040) && ValidazioneDati.size(currentForm.getEsporta().getListaBib()) != 1) { - ActionMessages errors = new ActionMessages(); - errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.esporta.selezionare.bib")); - this.saveErrors(request, errors); + + LinkableTagUtils.addError(request, new ActionMessage("errors.esporta.selezionare.bib")); + } currentForm.getEsporta().setTipoEstrazione(TipoEstrazioneUnimarc.COLLOCAZIONI); super.unspecified(mapping, currentForm, request, response); @@ -374,7 +390,6 @@ public ActionForward esporta(ActionMapping mapping, ActionForm form, EsportaForm currentForm = (EsportaForm) form; String idBatch = null; - ActionMessages errors = new ActionMessages(); try { resetToken(request); @@ -384,44 +399,12 @@ public ActionForward esporta(ActionMapping mapping, ActionForm form, // Setting biblioteca corrente (6 caratteri) // codice polo + codice biblioteca + EsportaVO esportaVO = this.preparaParametriExport(mapping, form, request, response); + if (esportaVO == ESPORTA_ERROR) + return mapping.getInputForward(); + Navigation navi = Navigation.getInstance(request); UserVO utente = navi.getUtente(); - EsportaVO esportaVO = currentForm.getEsporta().copy(); - esportaVO.setCodPolo(utente.getCodPolo()); - esportaVO.setCodBib(utente.getCodBib()); - esportaVO.setUser(utente.getUserId()); - - esportaVO.setCodAttivita(CodiciAttivita.getIstance().ESPORTA_DOCUMENTI_1040); - - if (currentForm.isUnimarc() ) { - esportaVO.validate(); - //almaviva5_20130226 imposta etichette da esportate - ExportUnimarcBatch.impostaEtichetteDaEsportare(esportaVO); - } - - // se ho selezionato tutti i materiali é più efficente - // eliminare il filtro - String[] materiali = esportaVO.getMateriali(); - if (ValidazioneDati.size(materiali) == EsportaVO.MATERIALI.length) - esportaVO.setMateriali(null); - else - // le collane hanno il tipo materiale a spazio, devo includerlo nel - // filtro - if (ValidazioneDati.isFilled(materiali)) { - if (Arrays.asList(esportaVO.getNature()).contains("C")) { - List tmp = new ArrayList(Arrays.asList(materiali)); - tmp.add(" "); // aggiungo mat. fittizio - esportaVO.setMateriali(tmp.toArray(materiali)); - } - } - - String basePath = this.servlet.getServletContext().getRealPath(File.separator); - esportaVO.setBasePath(basePath); - String downloadPath = StampeUtil.getBatchFilesPath(); - esportaVO.setDownloadPath(downloadPath); - esportaVO.setDownloadLinkPath("/"); // eliminato - - esportaVO.setTicket(utente.getTicket()); // Inizio Modifica almaviva2 febbraio 2010 per utilizzare oggetto anche per stampa cataloghi e classi. if (currentForm.getCodAttivita().equals(CodiciAttivita.getIstance().GDF_STAMPA_CATALOGHI)) { @@ -429,10 +412,10 @@ public ActionForward esporta(ActionMapping mapping, ActionForm form, // Intervento del 25.02.2013 su Richiesta ICCU in fase di Elaborazione Manuale Utente; // Modifiche/controlli per attivazione stampa catalogo per Soggetti e Classi if (esportaVO.getTipoCatalogo().equals("SOG") && esportaVO.getCodSoggettario().equals("")) { - errors = new ActionMessages(); - errors.add("Attenzione", new ActionMessage("errors.gestioneBibliografica.testoProtocollo" , + + LinkableTagUtils.addError(request, new ActionMessage("errors.gestioneBibliografica.testoProtocollo" , "La stampa catalogo per Soggetto può essere richiesta per un solo Soggettario - impostarlo con l'apposita selezione")); - this.saveErrors(request, errors); + return mapping.getInputForward(); } if (esportaVO.getCodSoggettario().length() > 0 && !esportaVO.getTipoCatalogo().equals("SOG")) { @@ -440,10 +423,10 @@ public ActionForward esporta(ActionMapping mapping, ActionForm form, } if (esportaVO.getTipoCatalogo().equals("CLA") && esportaVO.getCodSistemaClassificazione().equals("")) { - errors = new ActionMessages(); - errors.add("Attenzione", new ActionMessage("errors.gestioneBibliografica.testoProtocollo" , + + LinkableTagUtils.addError(request, new ActionMessage("errors.gestioneBibliografica.testoProtocollo" , "La stampa catalogo per Classe può essere richiesta per un solo sistema di Classificazione - impostarlo con l'apposita selezione")); - this.saveErrors(request, errors); + return mapping.getInputForward(); } if (esportaVO.getCodSistemaClassificazione().length() > 0 && !esportaVO.getTipoCatalogo().equals("CLA")) { @@ -498,8 +481,8 @@ public ActionForward esporta(ActionMapping mapping, ActionForm form, try { nome = FormattazioneModificata.formatta(stringaLike); } catch (EccezioneSbnDiagnostico e) { - errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(e.getMessage())); - this.saveErrors(request, errors); + LinkableTagUtils.addError(request, new ActionMessage(e.getMessage())); + return mapping.getInputForward(); } // Manutenzione BUG Mantis (Collaudo) 5167 - 05-11-2012 @@ -507,8 +490,8 @@ public ActionForward esporta(ActionMapping mapping, ActionForm form, // perchè tale limite è valido solo nel caso che la ricerca venga effettuata con il Protocollo // mentre qui si usano le select su tabelle DB // if (nome.length() < 3) { -// errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.prenotazione.failed")); -// this.saveErrors(request, errors); +// LinkableTagUtils.addError(request, new ActionMessage("errors.prenotazione.failed")); +// // return mapping.getInputForward(); // } if (nome.length() > 50) { @@ -522,8 +505,8 @@ public ActionForward esporta(ActionMapping mapping, ActionForm form, try { nome = FormattazioneModificata.formatta(stringaLike); } catch (EccezioneSbnDiagnostico e) { - errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(e.getMessage())); - this.saveErrors(request, errors); + LinkableTagUtils.addError(request, new ActionMessage(e.getMessage())); + return mapping.getInputForward(); } if (nome.length() > 50) { @@ -539,8 +522,8 @@ public ActionForward esporta(ActionMapping mapping, ActionForm form, //esporta per collocazioni if (esportaVO.getTipoEstrazione() == TipoEstrazioneUnimarc.COLLOCAZIONI) { if (currentForm.getCodPoloSez() == null && currentForm.getCodBibSez() == null){ - errors.add("generico", new ActionMessage("error.documentofisico.premereTastoSezione")); - this.saveErrors(request, errors); + LinkableTagUtils.addError(request, new ActionMessage("error.documentofisico.premereTastoSezione")); + request.setAttribute("currentForm", currentForm); super.unspecified(mapping, currentForm, request, response); this.saveMessages(request, ConfermaDati.bottoneGenerico(this, mapping, request)); @@ -577,21 +560,21 @@ public ActionForward esporta(ActionMapping mapping, ActionForm form, areaParametriStampaSchedeVo.setEndInventario(currentForm.getEndInventario()); areaParametriStampaSchedeVo.setStartInventario(currentForm.getStartInventario()); } else { - errors = new ActionMessages(); - errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage( + + LinkableTagUtils.addError(request, new ActionMessage( "errors.gestioneBibliografica.testoProtocollo", "Selezionare il tipo di filtri da utilizzare (Collocazione o Serie inventariale)")); - this.saveErrors(request, errors); + return mapping.getInputForward(); } } else if (currentForm.getTipoProspettazione().toString().equals("CLASSIFICAZIONI")) { - errors = new ActionMessages(); - errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage( + + LinkableTagUtils.addError(request, new ActionMessage( "errors.gestioneBibliografica.testoProtocollo", "La funzione richiesta attualmente non è disponibile; utilizzare i filtri per DATI CATALOGRAFICI")); - this.saveErrors(request, errors); + return mapping.getInputForward(); } @@ -649,16 +632,15 @@ public ActionForward esporta(ActionMapping mapping, ActionForm form, } // user - UserVO user = utente; - areaParametriStampaSchedeVo.setUser(user.getUserId()); + areaParametriStampaSchedeVo.setUser(utente.getUserId()); // percorso dei file template: webroot/jrxml/\tab\tab\tab\par - basePath = this.servlet.getServletContext().getRealPath(File.separator); + String basePath = this.servlet.getServletContext().getRealPath(File.separator); String pathJrxml = basePath + File.separator + "jrxml" + File.separator + "default_catalografico.jrxml"; // ho finito di preparare il VO, ora lo metto nell'arraylist che // passerò alla coda. - List parametri = new ArrayList(); + List parametri = new ArrayList(); parametri.add(areaParametriStampaSchedeVo); request.setAttribute("DatiVo", parametri); @@ -668,10 +650,10 @@ public ActionForward esporta(ActionMapping mapping, ActionForm form, // differita StampaDiffVO stam = new StampaDiffVO(); - UserVO ute = utente; - stam.setCodPolo(ute.getCodPolo()); - stam.setCodBib(ute.getCodBib()); - stam.setUser(ute.getUserId()); + + stam.setCodPolo(utente.getCodPolo()); + stam.setCodBib(utente.getCodBib()); + stam.setUser(utente.getUserId()); stam.setCodAttivita(CodiciAttivita.getIstance().GDF_STAMPA_CATALOGHI); stam.setTipoStampa(currentForm.getTipoFormato()); @@ -686,61 +668,9 @@ public ActionForward esporta(ActionMapping mapping, ActionForm form, String dataCorr = util.getCurrentDate(); stam.setData(dataCorr); - idBatch = factory.getElaborazioniDifferite().prenotaElaborazioneDifferita(ute.getTicket(), stam, null); + idBatch = factory.getElaborazioniDifferite().prenotaElaborazioneDifferita(utente.getTicket(), stam, null); } else { //esporta - TipoEstrazioneUnimarc type = getTipoEstrazione(mapping, form, request, response); - if (type == null) - return mapping.getInputForward(); - esportaVO.setTipoEstrazione(type); - if (!ValidazioneDati.in(type, - TipoEstrazioneUnimarc.ARCHIVIO, - TipoEstrazioneUnimarc.FILE)) { - if (ValidazioneDati.equals(currentForm.getCodAttivita(), CodiciAttivita.getIstance().ESPORTA_DOCUMENTI_1040) - && ValidazioneDati.size(currentForm.getEsporta().getListaBib()) != 1) { - errors = new ActionMessages(); - errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.esporta.selezionare.bib")); - this.saveErrors(request, errors); - request.setAttribute("currentForm", currentForm); - return mapping.getInputForward(); - } - //esporta per collocazioni - if (type == TipoEstrazioneUnimarc.COLLOCAZIONI) { - if (currentForm.getCodPoloSez() == null && currentForm.getCodBibSez() == null){ - errors.add("generico", new ActionMessage("error.documentofisico.premereTastoSezione")); - this.saveErrors(request, errors); - request.setAttribute("currentForm", currentForm); - return mapping.getInputForward(); - } - currentForm.setFolder("Collocazione"); - - super.validaInputCollocazioni(mapping, request, currentForm); - currentForm.setTipoOperazione("S"); - esportaVO.setCodPoloSez(utente.getCodPolo()); - esportaVO.setCodBibSez(utente.getCodBib()); - esportaVO.setPossCodSez(currentForm.getSezione()); - esportaVO.setPossDallaCollocazione(currentForm.getDallaCollocazione()); - esportaVO.setPossAllaCollocazione(currentForm.getAllaCollocazione()); - esportaVO.setPossSpecificazioneCollDa(currentForm.getDallaSpecificazione()); - esportaVO.setPossSpecificazioneCollA(currentForm.getAllaSpecificazione()); - esportaVO.setTipoCollocazione(currentForm.getTipoColloc()); - if (ValidazioneDati.size(currentForm.getEsporta().getListaBib()) != 1){ - throw new ValidationException(SbnErrorTypes.UNI_TROPPE_BIBLIOTECHE_PER_RANGE); - } - currentForm.setFolder(null); - }else{ - super.validaInputRangeInventari(mapping, request, currentForm); - currentForm.setTipoOperazione("R"); - esportaVO.setPossSerie(currentForm.getSerie()); - esportaVO.setPossDalNumero(currentForm.getStartInventario()); - esportaVO.setPossAlNumero(currentForm.getEndInventario()); - currentForm.setFolder(null); - if (ValidazioneDati.size(currentForm.getEsporta().getListaBib()) != 1){ - throw new ValidationException(SbnErrorTypes.UNI_TROPPE_BIBLIOTECHE_PER_RANGE); - } - } - - } idBatch = factory.getElaborazioniDifferite().prenotaElaborazioneDifferita(utente.getTicket(), esportaVO, null); } @@ -752,9 +682,9 @@ public ActionForward esporta(ActionMapping mapping, ActionForm form, } if (currentForm.getTipoProspettazione() == TipoProspettazioneExport.POSSEDUTO){ - errors = new ActionMessages(); - errors.add("generico", new ActionMessage("error.documentofisico."+ e.getMessage())); if (!ValidazioneDati.isFilled(e.getMessage())) log.error("", e); - this.saveErrors(request, errors); + + LinkableTagUtils.addError(request, new ActionMessage("error.documentofisico."+ e.getMessage())); if (!ValidazioneDati.isFilled(e.getMessage())) log.error("", e); + request.setAttribute("currentForm", currentForm); return mapping.getInputForward(); } @@ -765,20 +695,119 @@ public ActionForward esporta(ActionMapping mapping, ActionForm form, } if (idBatch != null) { - errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage( + LinkableTagUtils.addError(request, new ActionMessage( "errors.prenotazione.ok", idBatch)); - this.saveErrors(request, errors); + return mapping.getInputForward(); } else { - errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage( + LinkableTagUtils.addError(request, new ActionMessage( "errors.prenotazione.failed")); - this.saveErrors(request, errors); + return mapping.getInputForward(); } } + private EsportaVO preparaParametriExport(ActionMapping mapping, ActionForm form, + HttpServletRequest request, HttpServletResponse response) throws Exception { + Navigation navi = Navigation.getInstance(request); + UserVO utente = navi.getUtente(); + EsportaForm currentForm = (EsportaForm) form; + EsportaVO esportaVO = currentForm.getEsporta().copy(); + esportaVO.setCodPolo(utente.getCodPolo()); + esportaVO.setCodBib(utente.getCodBib()); + esportaVO.setUser(utente.getUserId()); + + esportaVO.setCodAttivita(CodiciAttivita.getIstance().ESPORTA_DOCUMENTI_1040); + + if (currentForm.isUnimarc() ) { + esportaVO.validate(); + //almaviva5_20130226 imposta etichette da esportate + ExportUnimarcBatch.impostaEtichetteDaEsportare(esportaVO); + } + + // se ho selezionato tutti i materiali é più efficente + // eliminare il filtro + String[] materiali = esportaVO.getMateriali(); + if (ValidazioneDati.size(materiali) == EsportaVO.MATERIALI.length) + esportaVO.setMateriali(null); + else + // le collane hanno il tipo materiale a spazio, devo includerlo nel + // filtro + if (ValidazioneDati.isFilled(materiali)) { + if (Arrays.asList(esportaVO.getNature()).contains("C")) { + List tmp = new ArrayList(Arrays.asList(materiali)); + tmp.add(" "); // aggiungo mat. fittizio + esportaVO.setMateriali(tmp.toArray(materiali)); + } + } + + String basePath = this.servlet.getServletContext().getRealPath(File.separator); + esportaVO.setBasePath(basePath); + String downloadPath = StampeUtil.getBatchFilesPath(); + esportaVO.setDownloadPath(downloadPath); + esportaVO.setDownloadLinkPath("/"); // eliminato + + esportaVO.setTicket(utente.getTicket()); + + if (currentForm.isUnimarc() ) { + TipoEstrazioneUnimarc type = getTipoEstrazione(mapping, form, request, response); + if (type == null) + return ESPORTA_ERROR; + esportaVO.setTipoEstrazione(type); + if (!ValidazioneDati.in(type, + TipoEstrazioneUnimarc.ARCHIVIO, + TipoEstrazioneUnimarc.FILE)) { + if (ValidazioneDati.equals(currentForm.getCodAttivita(), CodiciAttivita.getIstance().ESPORTA_DOCUMENTI_1040) + && ValidazioneDati.size(currentForm.getEsporta().getListaBib()) != 1) { + + LinkableTagUtils.addError(request, new ActionMessage("errors.esporta.selezionare.bib")); + + request.setAttribute("currentForm", currentForm); + return ESPORTA_ERROR; + } + //esporta per collocazioni + if (type == TipoEstrazioneUnimarc.COLLOCAZIONI) { + if (currentForm.getCodPoloSez() == null && currentForm.getCodBibSez() == null){ + LinkableTagUtils.addError(request, new ActionMessage("error.documentofisico.premereTastoSezione")); + + request.setAttribute("currentForm", currentForm); + return ESPORTA_ERROR; + } + currentForm.setFolder("Collocazione"); + + super.validaInputCollocazioni(mapping, request, currentForm); + currentForm.setTipoOperazione("S"); + esportaVO.setCodPoloSez(utente.getCodPolo()); + esportaVO.setCodBibSez(utente.getCodBib()); + esportaVO.setPossCodSez(currentForm.getSezione()); + esportaVO.setPossDallaCollocazione(currentForm.getDallaCollocazione()); + esportaVO.setPossAllaCollocazione(currentForm.getAllaCollocazione()); + esportaVO.setPossSpecificazioneCollDa(currentForm.getDallaSpecificazione()); + esportaVO.setPossSpecificazioneCollA(currentForm.getAllaSpecificazione()); + esportaVO.setTipoCollocazione(currentForm.getTipoColloc()); + if (ValidazioneDati.size(currentForm.getEsporta().getListaBib()) != 1){ + throw new ValidationException(SbnErrorTypes.UNI_TROPPE_BIBLIOTECHE_PER_RANGE); + } + currentForm.setFolder(null); + }else{ + super.validaInputRangeInventari(mapping, request, currentForm); + currentForm.setTipoOperazione("R"); + esportaVO.setPossSerie(currentForm.getSerie()); + esportaVO.setPossDalNumero(currentForm.getStartInventario()); + esportaVO.setPossAlNumero(currentForm.getEndInventario()); + currentForm.setFolder(null); + if (ValidazioneDati.size(currentForm.getEsporta().getListaBib()) != 1){ + throw new ValidationException(SbnErrorTypes.UNI_TROPPE_BIBLIOTECHE_PER_RANGE); + } + } + } + } + + return esportaVO; + } + private TipoEstrazioneUnimarc getTipoEstrazione(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { @@ -929,6 +958,9 @@ public ActionForward caricaFile(ActionMapping mapping, ActionForm form, return caricaFileBid(mapping, form, request); case INV: return caricaFileInventari(mapping, form, request); + default: + LinkableTagUtils.addError(request, new ActionMessage("error.documentofisico.contenutoFileNonValido")); + break; } return mapping.getInputForward(); @@ -1060,9 +1092,9 @@ public ActionForward listaSupportoBib(ActionMapping mapping, return biblio.getSIFListaBibliotechePolo(richiesta); } catch (Exception e) { // altri tipi di errore - ActionMessages errors = new ActionMessages(); - errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.errore." + e.getMessage())); - this.saveErrors(request, errors); + + LinkableTagUtils.addError(request, new ActionMessage("errors.errore." + e.getMessage())); + return mapping.getInputForward(); } } @@ -1157,10 +1189,10 @@ public ActionForward listaSupportoBib(ActionMapping mapping, // return mapping.getInputForward(); // } - private List getListaSerie(String codPolo, String codBib, String ticket) + private List getListaSerie(String codPolo, String codBib, String ticket) throws Exception { FactoryEJBDelegate factory = FactoryEJBDelegate.getInstance(); - List serie = factory.getGestioneDocumentoFisico().getListaSerie(codPolo, codBib, ticket); + List serie = factory.getGestioneDocumentoFisico().getListaSerie(codPolo, codBib, ticket); if (!ValidazioneDati.isFilled(serie)) return null; @@ -1169,14 +1201,16 @@ private List getListaSerie(String codPolo, String codBib, String ticket) public boolean checkAttivita(HttpServletRequest request, ActionForm form, String idCheck) { - EsportaForm currentForm = (EsportaForm) form; if (currentForm.isUnimarc()) { // filtri su possesso solo se seleziono una singola bib. if (ValidazioneDati.equals(idCheck, "COUNT_BIBLIOTECHE")) return (ValidazioneDati.size(currentForm.getEsporta().getListaBib()) == 1); + if (ValidazioneDati.equals(idCheck, "TEMPLATE")) + try { + return Boolean.parseBoolean(CommonConfiguration.getProperty(Configuration.EXPORT_UNIMARC_SAVE_TEMPLATE, "false")); + } catch (Exception e) { return false; } } - return true; } @@ -1246,15 +1280,11 @@ private void caricaSoggettariClassificazioni(ActionForm form, String ticket) thr currentForm.getEsporta().setCodSistemaClassificazione(""); } - - - public ActionForward cartiglioListaBib(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { EsportaForm currentForm = (EsportaForm) form; try { - FactoryEJBDelegate factory = FactoryEJBDelegate.getInstance(); BibliotecaDelegate biblio = new BibliotecaDelegate(factory, request); SIFListaBibliotecheAffiliatePerAttivitaVO richiesta = new SIFListaBibliotecheAffiliatePerAttivitaVO( @@ -1270,6 +1300,53 @@ public ActionForward cartiglioListaBib(ActionMapping mapping, ActionForm form, } } + public ActionForward downloadConfigTemplate(ActionMapping mapping, ActionForm form, + HttpServletRequest request, HttpServletResponse response) + throws Exception { + + try { + EsportaVO esportaVO = this.preparaParametriExport(mapping, form, request, response); + if (esportaVO == ESPORTA_ERROR) + return mapping.getInputForward(); + + String json = this.toJson(esportaVO); + String fileName = "esporta-conf-" + (new SimpleDateFormat("yyyyMMdd-HHmmss")).format(DaoManager.now()) + ".json"; + return SbnDownloadAction.downloadFile(request, fileName, json.getBytes("UTF-8")); + } catch (Exception e) { + return mapping.getInputForward(); + } + } + + private String toJson(EsportaVO esportaVO) { + final GsonBuilder gsonBuilder = new GsonBuilder().addSerializationExclusionStrategy(new ExclusionStrategy() { + public boolean shouldSkipField(FieldAttributes f) { + Class clazz = f.getDeclaringClass(); + return clazz == UniqueIdentifiableVO.class + && ValidazioneDati.in(f.getName(), "uniqueId", "creationTime"); + } + + public boolean shouldSkipClass(Class c) { + return false; + } + }).registerTypeAdapter(BibliotecaVO.class, new TypeAdapter() { + @Override + public BibliotecaVO read(JsonReader reader) throws IOException { + throw new NotImplementedException("non implementato"); + } + + @Override + public void write(JsonWriter writer, BibliotecaVO bib) throws IOException { + writer.beginObject(); + writer.name("cod_polo"); + writer.value(bib.getCod_polo()); + writer.name("cod_bib"); + writer.value(bib.getCod_bib()); + writer.endObject(); + } + }); + + return gsonBuilder.create().toJson(esportaVO); + } } diff --git a/SBNWeb/WebContent/WEB-INF/jsp/pages/elaborazioniDifferite/esporta/esporta.jsp b/SBNWeb/WebContent/WEB-INF/jsp/pages/elaborazioniDifferite/esporta/esporta.jsp index 8d9f563..565e78b 100644 --- a/SBNWeb/WebContent/WEB-INF/jsp/pages/elaborazioniDifferite/esporta/esporta.jsp +++ b/SBNWeb/WebContent/WEB-INF/jsp/pages/elaborazioniDifferite/esporta/esporta.jsp @@ -717,6 +717,11 @@ + + + + + diff --git a/SBNWeb/config/web/it/iccu/sbn/web/resources/EsportaLabels.properties b/SBNWeb/config/web/it/iccu/sbn/web/resources/EsportaLabels.properties index 8fd060c..cf85e75 100644 --- a/SBNWeb/config/web/it/iccu/sbn/web/resources/EsportaLabels.properties +++ b/SBNWeb/config/web/it/iccu/sbn/web/resources/EsportaLabels.properties @@ -23,6 +23,7 @@ button.cercaspecificazioneA=Specificazione a button.cercasezione=Sezione button.cercabiblioteche=CercaBiblioteche button.tutteLeBiblio=Tutte le biblioteche +button.scarica.template.conf=Scarica template conf. #intestazione schede label.schedalistadocarchivio=Prepara lista documenti da Archivio diff --git a/SbnWebCommon/src/vo/it/iccu/sbn/util/cloning/dozer-custom-mappings.xml b/SbnWebCommon/src/vo/it/iccu/sbn/util/cloning/dozer-custom-mappings.xml index 9b41d58..a9e509e 100644 --- a/SbnWebCommon/src/vo/it/iccu/sbn/util/cloning/dozer-custom-mappings.xml +++ b/SbnWebCommon/src/vo/it/iccu/sbn/util/cloning/dozer-custom-mappings.xml @@ -55,6 +55,12 @@ java.io.Serializable + + + it.iccu.sbn.batch.unimarc.ExportSchedulableBatchVO + java.io.Serializable + + it.iccu.sbn.ejb.vo.servizi.sale.StatoPrenotazionePosto diff --git a/SbnWebCommon/src/vo/it/iccu/sbn/util/config/Configuration.java b/SbnWebCommon/src/vo/it/iccu/sbn/util/config/Configuration.java index cc29f44..b1c25da 100644 --- a/SbnWebCommon/src/vo/it/iccu/sbn/util/config/Configuration.java +++ b/SbnWebCommon/src/vo/it/iccu/sbn/util/config/Configuration.java @@ -100,6 +100,7 @@ public class Configuration { public static final String SBNWEB_EXPORT_CONFIG_FILE = "SBNWEB_EXPORT_CONFIG_FILE"; public static final String SBNWEB_EXPORT_IGNORE_FILE = "SBNWEB_EXPORT_IGNORE_FILE"; public static final String EXPORT_UNIMARC_FILE_ACCESSORI = "EXPORT_UNIMARC_FILE_ACCESSORI"; + public static final String EXPORT_UNIMARC_SAVE_TEMPLATE = "EXPORT_UNIMARC_SAVE_TEMPLATE"; public static final String WS_MAX_CONCURRENT_CLIENTS = "WS_MAX_CONCURRENT_CLIENTS"; diff --git a/SbnWebCommon/src/vo/it/iccu/sbn/util/config/sbnweb.conf b/SbnWebCommon/src/vo/it/iccu/sbn/util/config/sbnweb.conf index 12fbcbb..0f3d598 100644 --- a/SbnWebCommon/src/vo/it/iccu/sbn/util/config/sbnweb.conf +++ b/SbnWebCommon/src/vo/it/iccu/sbn/util/config/sbnweb.conf @@ -87,6 +87,8 @@ EXPORT_UNIMARC_FILE_ACCESSORI=BID-Classificazioni_SBW.txt;CategorieDiFruizione_S #file che contiene il nr. richiesta dell'ultimo export elaborato EXPORT_UNIMARC_FILE_ULTIMO_ID=ultimo_exp.txt +EXPORT_UNIMARC_SAVE_TEMPLATE=false + #webservice max clients WS_MAX_CONCURRENT_CLIENTS=10 diff --git a/SbnWebDomainEjb/ejbModule/it/iccu/sbn/batch/unimarc/ExportSchedulableBatchVO.java b/SbnWebDomainEjb/ejbModule/it/iccu/sbn/batch/unimarc/ExportSchedulableBatchVO.java new file mode 100644 index 0000000..b87f755 --- /dev/null +++ b/SbnWebDomainEjb/ejbModule/it/iccu/sbn/batch/unimarc/ExportSchedulableBatchVO.java @@ -0,0 +1,108 @@ +/******************************************************************************* + * Copyright (C) 2019 ICCU - Istituto Centrale per il Catalogo Unico + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + ******************************************************************************/ +package it.iccu.sbn.batch.unimarc; + +import it.iccu.sbn.ejb.utils.ValidazioneDati; +import it.iccu.sbn.ejb.vo.common.CodiciType; +import it.iccu.sbn.ejb.vo.common.CodiciType.CodiciRicercaType; +import it.iccu.sbn.ejb.vo.common.TB_CODICI; +import it.iccu.sbn.ejb.vo.elaborazioniDifferite.esporta.EsportaVO; +import it.iccu.sbn.servizi.batch.SchedulableBatchVO; +import it.iccu.sbn.servizi.codici.CodiciProvider; +import it.iccu.sbn.util.cloning.ClonePool; +import it.iccu.sbn.util.file.FileUtil; + +import java.io.File; +import java.io.FileInputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.apache.commons.lang.StringUtils; + +public class ExportSchedulableBatchVO extends SchedulableBatchVO { + + private static final long serialVersionUID = -2883771863550034442L; + + public ExportSchedulableBatchVO(SchedulableBatchVO sb) { + super(sb.getConfig()); + } + + public String getTipoScarico() throws Exception { + String cd_flg11 = trimOrEmpty(config.getCd_flg11()); + String[] tokens = cd_flg11.split("\\|"); + //il flag11 contiene sia il cod.scarico che l'elenco delle biblioteche, viene gestito il codice solo in prima + //posizione + if (tokens.length > 2) + return null; + + String tipoScarico = tokens[0].trim().toUpperCase(); + TB_CODICI cod = CodiciProvider.cercaCodice(tipoScarico, CodiciType.CODICE_TIPO_ESTRAZIONE_UNIMARC, + CodiciRicercaType.RICERCA_CODICE_SBN, true); + + return (cod != null) ? tipoScarico : null; + } + + public List getBiblioteche() throws Exception { + Set biblioteche = new HashSet(); + String cd_flg11 = trimOrEmpty(config.getCd_flg11()); + + //il flag11 contiene sia il cod.scarico che l'elenco delle biblioteche, + //le biblioteche sono gestite solo in seconda posizione + if (isFilled(getTipoScarico()) ) { + String[] tokens = cd_flg11.split("\\|"); + if (tokens.length != 2) //non ci sono biblioteche + return Collections.emptyList(); + + cd_flg11 = tokens[1]; //biblioteche nel secondo blocco + } else + //almaviva5_20170712 #6439 eliminazione delimitatore + cd_flg11 = StringUtils.stripStart(cd_flg11, "|"); + + for (String token : cd_flg11.split(",|;")) { + token = token.trim(); + if (token.length() != 2) //cod.bib senza spazio + continue; + + biblioteche.add(ValidazioneDati.fillLeft(token.toUpperCase(), ' ', 3)); + } + + return new ArrayList(biblioteche); + } + + public EsportaVO getTemplate() { + EsportaVO esportaVO = null; + String cd_flg11 = trimOrEmpty(config.getCd_flg11()); + if (cd_flg11.startsWith("template=")) { + final String filename = cd_flg11.substring("template=".length()); + File f = new File(filename); + if (f.exists()) { + try { + String template = FileUtil.streamToString(new FileInputStream(f)); + esportaVO = ClonePool.fromJson(template, EsportaVO.class); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + return esportaVO; + } + +} diff --git a/SbnWebDomainEjb/ejbModule/it/iccu/sbn/batch/unimarc/ExportUnimarcBatch.java b/SbnWebDomainEjb/ejbModule/it/iccu/sbn/batch/unimarc/ExportUnimarcBatch.java index 2431339..d7da6a1 100644 --- a/SbnWebDomainEjb/ejbModule/it/iccu/sbn/batch/unimarc/ExportUnimarcBatch.java +++ b/SbnWebDomainEjb/ejbModule/it/iccu/sbn/batch/unimarc/ExportUnimarcBatch.java @@ -80,6 +80,7 @@ public class ExportUnimarcBatch extends ExternalBatchExecutor implements Schedul private static final String TAGS_FILE = "tagsToExport.txt"; protected static final String PROPS_FILE = "db_extract.properties"; + protected static final String LATEST_EXPORT_ID_FILE = "export.latest"; private AmministrazioneBiblioteca amministrazioneBiblioteca; @@ -108,7 +109,7 @@ private AmministrazioneGestioneCodici getCodici() throws Exception { protected AtomicBoolean status_ok = new AtomicBoolean(false); protected Logger _log; - private Timestamp tsLastDBExtraction; + private Timestamp tsExportStart; private UserTransaction tx; public static final long getDbLastExtractionTime() { @@ -151,6 +152,9 @@ public ElaborazioniDifferiteOutputVo execute(String prefissoOutput, if (ValidazioneDati.isFilled(richiesta.getAteneo())) status_ok.set( impostaFiltroAteneo(richiesta) ); + //almaviva5_20130326 evolutive LO1 + this.tsExportStart = DaoManager.now(); + // estrazione totale del DB //almaviva5_20111027 estrazione db solo per unimarc if (isEsporta && status_ok.get() && richiesta.isExportDB()) { @@ -270,6 +274,7 @@ public ElaborazioniDifferiteOutputVo execute(String prefissoOutput, if (status_ok.get()) output.addDownload(zipFile, mrcPath + File.separator + zipFile); + } if (status_ok.get()) { @@ -469,12 +474,9 @@ protected int execFase1_estrazioneDB(BatchLogWriter log) throws Exception { try { _log.debug("execFase1_estrazioneDB()"); - long startTime = 0;//System.currentTimeMillis(); + long startTime = 0; status_ok.set(false); - //almaviva5_20130326 evolutive LO1 - tsLastDBExtraction = DaoManager.now(); - String exportHome = getExportHome(); int exit = exec(log, exportHome, exportHome + File.separator + "export.sh"); @@ -553,12 +555,20 @@ public static void main (String[] args) { } public ParametriRichiestaElaborazioneDifferitaVO buildActivationParameters( - SchedulableBatchVO params, Serializable... otherParams) + SchedulableBatchVO sb, Serializable... otherParams) throws Exception { _log = Logger.getLogger(ExportUnimarcBatch.class); - EsportaVO esporta = new EsportaVO(); + ExportSchedulableBatchVO params = new ExportSchedulableBatchVO(sb); + + EsportaVO template = params.getTemplate(); + boolean withTemplate = (template != null); + if (withTemplate) { + _log.debug("export json template: " + sb.getConfig().getCd_flg11()); + } + + EsportaVO esporta = withTemplate ? template : new EsportaVO(); esporta.setPayload(params); String userId = params.getUser(); @@ -570,42 +580,42 @@ public ParametriRichiestaElaborazioneDifferitaVO buildActivationParameters( esporta.setCodPolo(codPolo); esporta.setCodBib(codBib); esporta.setUser(user); - String ticket = SbnSIP2Ticket.getUtenteTicket(codPolo, codBib, user, InetAddress.getLocalHost()); - esporta.setTicket(ticket); + esporta.setTicket(SbnSIP2Ticket.getUtenteTicket(codPolo, codBib, user, InetAddress.getLocalHost())); - esporta.setCodAttivita(CodiciAttivita.getIstance().ESPORTA_DOCUMENTI_1040); - - esporta.setExportDB(true); - //almaviva5_20131106 segnalazione RML: eliminato filtro su tipo materiale - //esporta.setMateriali(EsportaVO.MATERIALI); - esporta.setMateriali(null); - esporta.setNature(EsportaVO.NATURE); - esporta.setTipoEstrazione(TipoEstrazioneUnimarc.ARCHIVIO); - - //almaviva5_20160322 tipo scarico da tabella - String tipoScarico = ValidazioneDati.coalesce(params.getTipoScarico(), "ALL"); - _log.debug("tipo scarico unimarc: " + tipoScarico); - esporta.setCodScaricoSelez(tipoScarico); - impostaEtichetteDaEsportare(esporta); - - String downloadPath = StampeUtil.getBatchFilesPath(); - esporta.setDownloadPath(downloadPath); + esporta.setDownloadPath(StampeUtil.getBatchFilesPath()); esporta.setDownloadLinkPath("/"); // eliminato - //almaviva5_20160308 prepara filtro biblioteche - List biblioteche = params.getBiblioteche(); - if (ValidazioneDati.isFilled(biblioteche)) { - _log.debug("preparazione filtro per biblioteca: " + biblioteche); - List listaBib = new ArrayList(); - for (String cdBib : biblioteche) { - BibliotecaVO bib = DomainEJBFactory.getInstance().getBiblioteca().getBiblioteca(codPolo, cdBib); - if (bib != null) - listaBib.add(bib); + esporta.setCodAttivita(CodiciAttivita.getIstance().ESPORTA_DOCUMENTI_1040); + + if (!withTemplate) { + //template mancante: impostazione filtri di default + esporta.setExportDB(true); + //almaviva5_20131106 segnalazione RML: eliminato filtro su tipo materiale + //esporta.setMateriali(EsportaVO.MATERIALI); + esporta.setMateriali(null); + esporta.setNature(EsportaVO.NATURE); + esporta.setTipoEstrazione(TipoEstrazioneUnimarc.ARCHIVIO); + + //almaviva5_20160322 tipo scarico da tabella + String tipoScarico = ValidazioneDati.coalesce(params.getTipoScarico(), "ALL"); + _log.debug("tipo scarico unimarc: " + tipoScarico); + esporta.setCodScaricoSelez(tipoScarico); + impostaEtichetteDaEsportare(esporta); + + //almaviva5_20160308 prepara filtro biblioteche + List biblioteche = params.getBiblioteche(); + if (ValidazioneDati.isFilled(biblioteche)) { + _log.debug("preparazione filtro per biblioteca: " + biblioteche); + List listaBib = new ArrayList(); + for (String cdBib : biblioteche) { + BibliotecaVO bib = DomainEJBFactory.getInstance().getBiblioteca().getBiblioteca(codPolo, cdBib); + if (bib != null) + listaBib.add(bib); + } + esporta.setListaBib(listaBib); + //preparaFileFiltroBiblioteca(esporta); } - esporta.setListaBib(listaBib); - //preparaFileFiltroBiblioteca(esporta); } - return esporta; } @@ -641,7 +651,7 @@ public void setEnd(ParametriRichiestaElaborazioneDifferitaVO params, Elaborazion if (!ValidazioneDati.equals(stato, ConstantsJMS.STATO_OK)) return; - sb.setLatestSuccessfulEnd(tsLastDBExtraction); + sb.setLatestSuccessfulEnd(tsExportStart); getCodici().salvaTabellaCodici(sb.getConfig(), false); } diff --git a/SbnWebDomainEjb/ejbModule/it/iccu/sbn/servizi/batch/SchedulableBatchVO.java b/SbnWebDomainEjb/ejbModule/it/iccu/sbn/servizi/batch/SchedulableBatchVO.java index eed95f1..070460a 100644 --- a/SbnWebDomainEjb/ejbModule/it/iccu/sbn/servizi/batch/SchedulableBatchVO.java +++ b/SbnWebDomainEjb/ejbModule/it/iccu/sbn/servizi/batch/SchedulableBatchVO.java @@ -20,20 +20,11 @@ import it.iccu.sbn.ejb.utils.ValidazioneDati; import it.iccu.sbn.ejb.vo.UniqueIdentifiableVO; import it.iccu.sbn.ejb.vo.common.CodiciType; -import it.iccu.sbn.ejb.vo.common.CodiciType.CodiciRicercaType; import it.iccu.sbn.ejb.vo.common.TB_CODICI; -import it.iccu.sbn.servizi.codici.CodiciProvider; import java.io.Serializable; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Collections; import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.apache.commons.lang.StringUtils; /* * cd_tabella job_name. @@ -56,7 +47,7 @@ public class SchedulableBatchVO extends UniqueIdentifiableVO { private static final long serialVersionUID = -7803792221970476948L; - private final TB_CODICI config; + protected final TB_CODICI config; public enum ScheduleType { TIME, @@ -148,48 +139,6 @@ public void setParams(String params) { config.setCd_flg10(params); } - public String getTipoScarico() throws Exception { - String cd_flg11 = trimOrEmpty(config.getCd_flg11()); - String[] tokens = cd_flg11.split("\\|"); - //il flag11 contiene sia il cod.scarico che l'elenco delle biblioteche, viene gestito il codice solo in prima - //posizione - if (tokens.length > 2) - return null; - - String tipoScarico = tokens[0].trim().toUpperCase(); - TB_CODICI cod = CodiciProvider.cercaCodice(tipoScarico, CodiciType.CODICE_TIPO_ESTRAZIONE_UNIMARC, - CodiciRicercaType.RICERCA_CODICE_SBN, true); - - return (cod != null) ? tipoScarico : null; - } - - public List getBiblioteche() throws Exception { - Set biblioteche = new HashSet(); - String cd_flg11 = trimOrEmpty(config.getCd_flg11()); - - //il flag11 contiene sia il cod.scarico che l'elenco delle biblioteche, - //le biblioteche sono gestite solo in seconda posizione - if (isFilled(getTipoScarico()) ) { - String[] tokens = cd_flg11.split("\\|"); - if (tokens.length != 2) //non ci sono biblioteche - return Collections.emptyList(); - - cd_flg11 = tokens[1]; //biblioteche nel secondo blocco - } else - //almaviva5_20170712 #6439 eliminazione delimitatore - cd_flg11 = StringUtils.stripStart(cd_flg11, "|"); - - for (String token : cd_flg11.split(",|;")) { - token = token.trim(); - if (token.length() != 2) //cod.bib senza spazio - continue; - - biblioteche.add(ValidazioneDati.fillLeft(token.toUpperCase(), ' ', 3)); - } - - return new ArrayList(biblioteche); - } - public boolean isActive() { Date fineValidita = config.getDt_fine_validita(); return (fineValidita == null || fineValidita.after(creationTime)); diff --git a/SbnWebDomainEjb/ejbModule/it/iccu/sbn/servizi/sip2/SbnSIP2Listener.java b/SbnWebDomainEjb/ejbModule/it/iccu/sbn/servizi/sip2/SbnSIP2Listener.java index 6d01bc8..c23396b 100644 --- a/SbnWebDomainEjb/ejbModule/it/iccu/sbn/servizi/sip2/SbnSIP2Listener.java +++ b/SbnWebDomainEjb/ejbModule/it/iccu/sbn/servizi/sip2/SbnSIP2Listener.java @@ -130,6 +130,7 @@ public Server(int listenPort) throws IOException { super("SbnSIP2Listener@Server"); socket = new ServerSocket(listenPort); socket.setSoTimeout(1000); + socket.setReuseAddress(true); } public Server(int listenPort, String codPolo, String codBiblio) throws IOException { diff --git a/SbnWebDomainEjb/ejbModule/it/iccu/sbn/util/file/FileUtil.java b/SbnWebDomainEjb/ejbModule/it/iccu/sbn/util/file/FileUtil.java index 4e9ff0f..a394756 100644 --- a/SbnWebDomainEjb/ejbModule/it/iccu/sbn/util/file/FileUtil.java +++ b/SbnWebDomainEjb/ejbModule/it/iccu/sbn/util/file/FileUtil.java @@ -177,4 +177,14 @@ public static boolean writeStringToFile(String fileName, String content, String return transfer(new ByteArrayInputStream(content.getBytes(encoding)), new FileOutputStream(fileName)); } + public static void delete(String fileName) { + try { + File f = new File(fileName); + if (f.exists()) + f.delete(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }