Java tutorial
/** ======================================================================== */ /** */ /** @copyright Copyright (c) 2010-2015, S2S s.r.l. */ /** @license http://www.gnu.org/licenses/gpl-2.0.html GNU Public License v.2 */ /** @version 6.0 */ /** This file is part of SdS - Sistema della Sicurezza . */ /** SdS - Sistema della Sicurezza is free software: you can redistribute it and/or modify */ /** it under the terms of the GNU General Public License as published by */ /** the Free Software Foundation, either version 3 of the License, or */ /** (at your option) any later version. */ /** SdS - Sistema della Sicurezza 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 General Public License for more details. */ /** You should have received a copy of the GNU General Public License */ /** along with SdS - Sistema della Sicurezza . If not, see <http://www.gnu.org/licenses/gpl-2.0.html> GNU Public License v.2 */ /** */ /** ======================================================================== */ package s2s.luna.reports; import com.apconsulting.luna.ejb.AnagrDocumentiGestioneCantieri.IAnagrDocumentiGestioneCantieri; import com.apconsulting.luna.ejb.AnagrDocumentiGestioneCantieri.IAnagrDocumentiGestioneCantieriHome; import com.apconsulting.luna.ejb.AnagrDocumento.AnagDocumentoFileInfo; import com.apconsulting.luna.ejb.AnagrDocumento.IAnagrDocumento; import com.apconsulting.luna.ejb.AnagrDocumento.IAnagrDocumentoHome; import com.apconsulting.luna.ejb.AnagrProcedimento.IAnagrProcedimento; import com.apconsulting.luna.ejb.Azienda.IAzienda; import com.apconsulting.luna.ejb.Azienda.IAziendaHome; import com.apconsulting.luna.ejb.Dipendente.DipendentiBySOP_View; import com.apconsulting.luna.ejb.Sopraluogo.ISopraluogo; import com.apconsulting.luna.ejb.Sopraluogo.ISopraluogoHome; import com.apconsulting.luna.ejb.Dipendente.IDipendenteHome; import com.apconsulting.luna.ejb.AnagrOpere.IAnagrOpereHome; import com.apconsulting.luna.ejb.Cantiere.ICantiereHome; import com.apconsulting.luna.ejb.AnagrProcedimento.IAnagrProcedimentoHome; import com.apconsulting.luna.ejb.AnagrOpere.IAnagrOpere; import com.apconsulting.luna.ejb.Cantiere.ICantiere; import com.apconsulting.luna.ejb.Media.jbMedia; import com.apconsulting.luna.ejb.Sopraluogo.jbConstatazione; import com.apconsulting.luna.ejb.Sopraluogo.DocumentiAssociati_Sopralluogo_View; import com.lowagie.text.BadElementException; import com.lowagie.text.Cell; import com.lowagie.text.DocumentException; import com.lowagie.text.Element; import com.lowagie.text.Image; import com.lowagie.text.Phrase; import com.lowagie.text.pdf.PdfWriter; import java.io.IOException; import java.util.Collection; import s2s.ejb.pseudoejb.PseudoContext; import s2s.luna.conf.ApplicationConfigurator; import s2s.luna.util.SecurityWrapper; import s2s.report.CenterMiddleTable; import s2s.report.Report; import s2s.report.ZREPORT_SETTINGS; import s2s.utils.Alphabet; import s2s.utils.plain.Formatter; import s2s.utils.text.StringManager; import com.lowagie.text.Document; import java.io.File; import java.util.Iterator; public class Report_REP_SOP extends Report { public long lCOD_SOP = 0; private boolean IncludeLogo = true; private ZREPORT_SETTINGS REPORT_SETTINGS = new ZREPORT_SETTINGS(); private byte defaultFontSize = 9; public Report_REP_SOP(long lCOD_SOP) { this.lCOD_SOP = lCOD_SOP; } public Report_REP_SOP(long lCOD_SOP, boolean _IncludeLogo) { this(lCOD_SOP); this.IncludeLogo = _IncludeLogo; } public String formatPlain(java.util.Date dt) { if (dt == null) { return ""; } return new java.text.SimpleDateFormat("dd/MM/yyyy").format(dt); } public String formatPlain(int i) { return Integer.toString(i); } private boolean StampaDocumenti(ISopraluogoHome home_sop, long lCOD_COD_SOP, Document document, PdfWriter writer) throws Exception { /* NB, il metodo stampa documenti torna true non se ho stampato i documenti * ma se la evantuale stampa dei documenti finisce con una pagina nuova o meno. */ boolean endWithNewPage = false; // Estraggo i documenti legati al sopralluogo Collection sop_doc_list = home_sop.getDocumentiCantiereSOP_STAMPA(lCOD_SOP); // ... se ne trovo... if (sop_doc_list != null && !sop_doc_list.isEmpty()) { //writePage(); Iterator it_prg_doc = sop_doc_list.iterator(); int i = 0; while (it_prg_doc.hasNext()) { DocumentiAssociati_Sopralluogo_View sop_doc = (DocumentiAssociati_Sopralluogo_View) it_prg_doc .next(); if (i > 0) { writePage(); } // Stampo i file allegati al documento /* NB, il metodo stampa documento torna true non se ho stampato un * documento ma se ho stampato gli allegati di tale documento. * Solo in questo caso infatti, necessario andare a pagina nuova. */ if (StampaDocumento(sop_doc.lCOD_DOC, document, writer)) { endWithNewPage = true; } else { writeLine(); endWithNewPage = false; } i = i + 1; } } return endWithNewPage; } private boolean StampaDocumento(Long lCOD_DOC, Document document, PdfWriter writer) throws Exception { IAnagrDocumentiGestioneCantieriHome doc_home = (IAnagrDocumentiGestioneCantieriHome) PseudoContext .lookup("AnagrDocumentiGestioneCantieriBean"); IAnagrDocumentiGestioneCantieri doc_can_bean = null; // NB, il metodo stampa documento torna true non se ho stampato un // documento ma se ho stampato gli allegati di tale documento. // // Se st trattando un documento valido... if (lCOD_DOC != null && lCOD_DOC.compareTo(new Long(0)) > 0) { // Estraggo il documento al quale sono allegati i file. doc_can_bean = doc_home.findByPrimaryKey(lCOD_DOC); Stampa_documento stampa_documento = new Stampa_documento(); // Se trovo il documento e se lo stesso contiene allegati.. if (doc_can_bean != null && stampa_documento.checkAllegati(lCOD_DOC)) { //writePage(); //stampo il titolo del documento writeTitle(Formatter.format(doc_can_bean.getTIT_DOC())); boolean printedFiles = false; // Stampo l'allegato 1 (File) if (stampa_documento.StampaAllegato(lCOD_DOC, Stampa_documento.TIPO_ALLEGATO.FILE, document, writer)) { printedFiles = true; } // Stampo l'allegato 2 (File Link) if (stampa_documento.StampaAllegato(lCOD_DOC, Stampa_documento.TIPO_ALLEGATO.FILE_LINK, document, writer)) { printedFiles = true; } // Se ho stampato degli allegati, vado a pagina nuova. return printedFiles; } } return false; } @Override public void doReport() throws DocumentException, IOException, BadElementException, Exception { SecurityWrapper Security = SecurityWrapper.getInstance(); ISopraluogoHome home1 = (ISopraluogoHome) PseudoContext.lookup("SopraluogoBean"); ISopraluogo bean = home1.findByPrimaryKey(new Long(new Long(request.getParameter("ID")))); IAnagrProcedimentoHome home_pro = (IAnagrProcedimentoHome) PseudoContext.lookup("AnagrProcedimentoBean"); IAnagrProcedimento bean_pro = home_pro.findByPrimaryKey(new Long(bean.getCOD_PRO())); IDipendenteHome home_dpd = (IDipendenteHome) PseudoContext.lookup("DipendenteBean"); ICantiereHome home_can = (ICantiereHome) PseudoContext.lookup("CantiereBean"); ICantiere bean_can = home_can.findByPrimaryKey(new Long(bean.getCOD_CAN())); IAnagrOpereHome home_ope = (IAnagrOpereHome) PseudoContext.lookup("AnagrOpereBean"); IAnagrOpere bean_ope = null; long COD_OPE = bean.getCOD_OPE(); if (COD_OPE != 0) { bean_ope = home_ope.findByPrimaryKey(COD_OPE); } lCOD_AZL = Security.getAziendaR(); IAziendaHome home_az = (IAziendaHome) PseudoContext.lookup("AziendaBean"); IAzienda bean_az = home_az.findByPrimaryKey(new Long(lCOD_AZL)); initDocument("the doc", // Intestazione - Cella a sinistra bean_pro.getstrDES(), // Intestazione - Cella centrale bean_can.getNOM_CAN() + " - " + bean.getNUM_SOP(), // Pi di pagina Cella a sinistra bean_az.getRAG_SCL_AZL(), // Pi di pagina Cella a destra formatPlain(bean.getDAT_SOP())); m_handler.bShowDate = false; // LOGO E TITOLO { CenterMiddleTable tbl = new CenterMiddleTable(2); tbl.setDefaultCellBorder(0); int width[] = { 15, 75 }; tbl.setWidths(width); if (IncludeLogo) { Image png = loadImage("LOGO"); png.scalePercent(50); png.setAlignment(Image.ALIGN_LEFT); Cell cImage = new Cell(png); tbl.addCell(cImage); } else { tbl.addCell(""); } CenterMiddleTable tbl2 = new CenterMiddleTable(1); tbl2.setDefaultCellBorder(0); tbl2.addCellBU(ApplicationConfigurator.CUSTOMER_NAME.toUpperCase(), 15); tbl2.addCellBU(ApplicationConfigurator.LanguageManager.getString("Coordinamento.sicurezza.cantieri") .toUpperCase(), 15); Cell cText = new Cell(tbl2); tbl.addCell(cText); m_document.add(tbl); } writeIndent(); { CenterMiddleTable tbl = new CenterMiddleTable(1); if (bStandAlone) { } m_document.add(tbl); } // DATI DEL SOPRALLUOGO { CenterMiddleTable tbl = new CenterMiddleTable(4); tbl.toLeft(); int width[] = { 30, 20, 25, 25 }; tbl.setWidths(width); tbl.addCell( ApplicationConfigurator.LanguageManager.getString("Sopralluogo.N") + " " + bean.getNUM_SOP(), defaultFontSize); tbl.addCell(ApplicationConfigurator.LanguageManager.getString("del") + " " + formatPlain(bean.getDAT_SOP()), defaultFontSize); tbl.addCell( ApplicationConfigurator.LanguageManager.getString("Inizio.h") + (bean.getORA_INI() != null ? bean.getORA_INI().toString().substring(0, 5) : ""), defaultFontSize); tbl.addCell( ApplicationConfigurator.LanguageManager.getString("Fine.h") + (bean.getORA_FIN() != null ? bean.getORA_FIN().toString().substring(0, 5) : ""), defaultFontSize); m_document.add(tbl); } { CenterMiddleTable tbl = new CenterMiddleTable(3); tbl.toLeft(); int width[] = { 34, 33, 33 }; tbl.setWidths(width); tbl.addCell(ApplicationConfigurator.LanguageManager.getString("Linea") + ": " + bean_pro.getstrDES(), defaultFontSize); tbl.addCell( ApplicationConfigurator.LanguageManager.getString("Stazione") + ": " + bean_can.getNOM_CAN(), defaultFontSize); tbl.addCell(ApplicationConfigurator.LanguageManager.getString("Opera") + ": " + (bean_ope != null ? bean_ope.getstrNOM_OPE() : ""), defaultFontSize); m_document.add(tbl); } // PRESENTI AZIENDA { CenterMiddleTable tbl = new CenterMiddleTable(2); tbl.toLeft(); int width[] = { 25, 70 }; tbl.setWidths(width); tbl.border(); java.util.Collection col = home_dpd.getDipendentiBySOP_View(lCOD_SOP); tbl.addCell(ApplicationConfigurator.LanguageManager.getString("Presenti.RM"), defaultFontSize); java.util.Iterator it = col.iterator(); String presentiRM = ""; while (it.hasNext()) { DipendentiBySOP_View obj = (DipendentiBySOP_View) it.next(); presentiRM += (StringManager.isEmpty(presentiRM) ? "" : ", ") + obj.COG_DPD + " " + obj.NOM_DPD; } tbl.addCell(presentiRM, defaultFontSize); m_document.add(tbl); } // PRESENTI IMPRESA { CenterMiddleTable tbl = new CenterMiddleTable(2); tbl.toLeft(); tbl.setPadding(1 / 2); int width[] = { 25, 70 }; tbl.setWidths(width); tbl.border(); java.util.Collection col = home_dpd.getDipendentiEstBySOP_View(lCOD_SOP); java.util.Iterator it = col.iterator(); tbl.addCell(ApplicationConfigurator.LanguageManager.getString("Presenti.impresa"), defaultFontSize); String presentiIMP = ""; while (it.hasNext()) { DipendentiBySOP_View obj = (DipendentiBySOP_View) it.next(); presentiIMP += (StringManager.isEmpty(presentiIMP) ? "" : ", ") + obj.COG_DPD + " " + obj.NOM_DPD + " (" + obj.IMPRESA + ")"; } tbl.addCell(presentiIMP, defaultFontSize); m_document.add(tbl); } writeLine(); // CONSTATAZIONI { CenterMiddleTable tbl = new CenterMiddleTable(1); tbl.toLeft(); int width[] = { 100 }; tbl.setWidths(width); tbl.addHeaderCellB2(ApplicationConfigurator.LanguageManager.getString("CONSTATAZIONI"), 1, false, 11); m_document.add(tbl); } { CenterMiddleTable tbl = new CenterMiddleTable(2); tbl.toLeft(); int width[] = { 5, 85 }; tbl.setWidths(width); java.util.Collection col = home1.getConstatazioniSop(lCOD_SOP); java.util.Iterator it = col.iterator(); tbl.setWidths(width); String constElementSeparator = " - "; Alphabet c = new Alphabet(); String REV1 = c.getNextElement("1"); while (it.hasNext()) { jbConstatazione obj = (jbConstatazione) it.next(); // Numerazione alfabetica Cell cell = new Cell(new Phrase(Formatter.format(REV1), REPORT_SETTINGS.ftText9B)); cell.setVerticalAlignment(Element.ALIGN_TOP); tbl.addCell(cell); // Constatazione tbl.addCell(Formatter.format( (StringManager.isNotEmpty(obj.sRAG_SCL_DTE) ? obj.sRAG_SCL_DTE + constElementSeparator : "") + (StringManager.isNotEmpty(obj.sNOM_ATT) ? obj.sNOM_ATT + constElementSeparator : "") + (StringManager.isNotEmpty(obj.sDES_LIB) ? obj.sDES_LIB + constElementSeparator : "") + obj.sDESC), defaultFontSize); REV1 = c.getNextElement(REV1); } m_document.add(tbl); } writeLine(); // DISPOSIZIONI { CenterMiddleTable tbl = new CenterMiddleTable(1); tbl.toLeft(); int width[] = { 85 }; tbl.setWidths(width); tbl.addHeaderCellB2(ApplicationConfigurator.LanguageManager.getString("DISPOSIZIONI"), 1, false, 11); m_document.add(tbl); } { CenterMiddleTable tbl = new CenterMiddleTable(2); tbl.toLeft(); int width[] = { 5, 85 }; java.util.Collection col = home1.getConstatazioniSop(lCOD_SOP); java.util.Iterator it = col.iterator(); tbl.setWidths(width); Alphabet c = new Alphabet(); String REV2 = c.getNextElement("1"); while (it.hasNext()) { jbConstatazione obj = (jbConstatazione) it.next(); // Numerazione alfabetica Cell cell = new Cell(new Phrase(Formatter.format(REV2), REPORT_SETTINGS.ftText9B)); cell.setVerticalAlignment(Element.ALIGN_TOP); tbl.addCell(cell); // Disposizione generata tbl.addCell(Formatter.format(obj.sDIS_GEN), defaultFontSize); REV2 = c.getNextElement(REV2); } m_document.add(tbl); } // FIRME // Spazio per le firme for (int i = 1; i <= 5; i++) { writeLine(); } { CenterMiddleTable tbl = new CenterMiddleTable(2); int width[] = { 50, 50 }; tbl.setWidths(width); tbl.setDefaultCellBorder(0); // Firme del personale dell'azienda Cell cell = new Cell( new Phrase(ApplicationConfigurator.CUSTOMER_NAME.toUpperCase(), REPORT_SETTINGS.ftText9)); cell.setHorizontalAlignment(Element.ALIGN_LEFT); tbl.addCell(cell); // Firme del personale delle imprese Cell cell2 = new Cell( new Phrase(ApplicationConfigurator.LanguageManager.getString("Impresa").toUpperCase(), REPORT_SETTINGS.ftText9)); cell2.setHorizontalAlignment(Element.ALIGN_RIGHT); tbl.addCell(cell2); m_document.add(tbl); } // FOTO { Collection<jbMedia> listaFoto = home1.getMediaSOP(lCOD_SOP); if (listaFoto != null && listaFoto.size() > 0) { // STAMPA L'INDICE DELLE FOTO. boolean firstFoto = true; int fotoIndex = 0; for (jbMedia foto : listaFoto) { try { // Verifica che l'immagine sia in un formato supportato. Image.getInstance(foto.mediaData); fotoIndex++; if (firstFoto) { writePage(); writeTitle(ApplicationConfigurator.LanguageManager.getString("Indice.foto.allegate")); firstFoto = false; } writeLine(); // Stampo il progessivo della foto, nel formato "Foto n". writeText2Bold(ApplicationConfigurator.LanguageManager.getString("Foto") + " " + fotoIndex); // Stampo il "nome" o se questo assente, "il nome file". writeText2(StringManager.isNotEmpty(foto.sNOM_MED) ? Formatter.format(foto.sNOM_MED) : Formatter.format(foto.sFile)); // Stampo, se presente, la "descrizione". writeText2(StringManager.isNotEmpty(foto.sDES_MED) ? Formatter.format(foto.sDES_MED) : ""); } catch (Exception ex) { // Eccezione silenziosa. // Gestisce il caso in cui l'allegato non sia un immagine } } // STAMPA LE FOTO. firstFoto = true; fotoIndex = 0; byte SPACE_FOR_TITLE = 20; byte SPACE_FOR_BOTTOM_MARGIN = 20; boolean strictImageSequence = m_writer.isStrictImageSequence(); m_writer.setStrictImageSequence(true); for (jbMedia foto : listaFoto) { Element image = prepareImage(m_document, foto.mediaData); if (image != null) { fotoIndex++; if (firstFoto) { writePage(); firstFoto = false; } if (m_document.getPageSize().getHeight() - m_document.topMargin() + 20 < getAvailablePageSpace(m_document, m_writer)) { writeLine(); } if (getAvailablePageSpace(m_document, m_writer) - (SPACE_FOR_TITLE + SPACE_FOR_BOTTOM_MARGIN) < ((Image) image).getScaledHeight()) { writePage(); } // Stampo il progessivo della foto, nel formato "Foto n". writeText2(ApplicationConfigurator.LanguageManager.getString("Foto") + " " + fotoIndex); // Stampo l'immagine. m_document.add(image); } } m_writer.setStrictImageSequence(strictImageSequence); } } // DOCUMENTI ALLEGATI Collection<DocumentiAssociati_Sopralluogo_View> listadocumenti = home1 .getDocumentiCantiereSOP_STAMPA(lCOD_SOP); if (listadocumenti != null && listadocumenti.size() > 0) { // STAMPA L'INDICE DEI DOCUMENTI ALLEGATI // i documenti allegati sono quei documenti la cui tipologia risulta avere attivo //il flag di stampa in sopralluogo. boolean firstdocument = true; int documentIndex = 0; for (DocumentiAssociati_Sopralluogo_View documento : listadocumenti) { try { // Verifica che l'immagine sia in un formato supportato. documentIndex++; if (firstdocument) { writePage(); writeTitle(ApplicationConfigurator.LanguageManager.getString("Indice.documenti.allegati")); firstdocument = false; } writeLine(); // Stampo il "titolo" del documento. writeText3Bold(documentIndex + ")" + (StringManager.isNotEmpty(documento.TIT_DOC) ? Formatter.format(documento.TIT_DOC) : Formatter.format(documento.NOM_TPL_DOC))); // Stampo, se presente, la "descrizione". if (!(documento.DES).equals("")) { writeLine(); } writeText3_3(StringManager.isNotEmpty(documento.DES) ? Formatter.format(documento.DES) : ""); IAnagrDocumentoHome doc_home = (IAnagrDocumentoHome) PseudoContext.lookup("AnagrDocumentoBean"); AnagDocumentoFileInfo fileInfo = null; AnagDocumentoFileInfo fileInfoLink = null; fileInfo = doc_home.getFileInfoU("", documento.lCOD_DOC); fileInfoLink = doc_home.getFileInfoULink("", documento.lCOD_DOC); // se esiste stampo il file allegato if (fileInfo != null) { writeLine(); writeText3_3(Formatter.format(" " + "File Allegato: " + fileInfo.strName)); } else { writeLine(); writeText3_3(Formatter.format(" " + "File Allegato: ")); } // se esiste stampo il file link allegato if (fileInfoLink != null) { writeText3_3(Formatter.format(" " + "File Link Allegato: " + fileInfoLink.strName)); } else { writeText3_3(Formatter.format(" " + "File Link Allegato: ")); } writeLine(); } catch (Exception ex) { // Eccezione silenziosa. // Gestisce il caso in cui l'allegato non sia un immagine } } writePage(); // Stampa documenti allegati boolean endWithNewPage = false; endWithNewPage = StampaDocumenti(home1, bean.getCOD_SOP(), m_document, m_writer); } closeDocument(); } }