package pdf; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.sql.Time; import java.util.Calendar; import java.util.Date; import org.jdom.Document; import org.jdom.Element; import org.jdom.output.XMLOutputter; import com.evolute.utils.fop.FOPCreator; import com.evolute.utils.fop.PDFCreator; import analiseacidentestrabalho.Acidentado; import analiseacidentestrabalho.AnaliseAcidente; import analiseacidentestrabalho.Causa; import analiseacidentestrabalho.Medida; import analiseacidentestrabalho.Recomendacao; import analiseacidentestrabalho.Utilizador; public class PdfGenerator { protected final Utilizador utilizador; protected final AnaliseAcidente analiseAcidente; protected final Acidentado acidentado; protected final Recomendacao recomendacoes[]; protected final Medida medidas[]; protected final Causa causa; public PdfGenerator( Utilizador utilizador, AnaliseAcidente analiseAcidente, Acidentado acidentado, Recomendacao recomendacoes[], Medida medidas[], Causa causa ) { this.utilizador = utilizador; this.analiseAcidente = analiseAcidente; this.acidentado = acidentado; this.recomendacoes = recomendacoes; this.medidas = medidas; this.causa = causa; } public byte[] generatePdf() throws Exception { Document doc = new Document( createXml() ); ByteArrayOutputStream baos = new ByteArrayOutputStream(); new XMLOutputter().output( doc, baos ); ByteArrayOutputStream out = new ByteArrayOutputStream(); InputStream xmlIn = new ByteArrayInputStream( baos.toByteArray() ); InputStream xslStream = getClass().getClassLoader().getResourceAsStream( "pdf/analise_acidentes_trabalho.xsl" ); FOPCreator.getFOPCreator().createFOfromXML( xmlIn, xslStream, out ); return PDFCreator.getPDFCreator().createPdfFromFo( out.toByteArray() ); } protected Element createXml() { Element rootElement = new Element( "AnaliseAcidente" ); Element numeroElement = new Element( "Numero" ); numeroElement.setText( analiseAcidente.getAnalise_nr() ); rootElement.addContent( numeroElement ); Date data = analiseAcidente.getData_acidente(); rootElement.addContent( createDataElement( "Data", data ) ); rootElement.addContent( createEntidadeEmpregadoraElement() ); rootElement.addContent( createSeguroElement() ); rootElement.addContent( createEmpresaSHSTElement() ); rootElement.addContent( createAcidentadoElement() ); rootElement.addContent( createAcidenteElement() ); rootElement.addContent( createRecomendacoesSIPRPElement() ); rootElement.addContent( createMedidasElement() ); rootElement.addContent( createTomadaConhecimentoElement() ); return rootElement; } protected Element createEntidadeEmpregadoraElement() { Element entidadeEmpregadoraElement = new Element( "EntidadeEmpregadora" ); Element identificacaoElement = new Element( "IdentificacaoCompleta" ); identificacaoElement.setText( "Companhia Portuguesa de Hipermercados, S.A., com sede na Travessa Teixeira J\u00fanior, 1 - 1300-553 Lisboa" ); entidadeEmpregadoraElement.addContent( identificacaoElement ); Element actividadeElement = new Element( "Actividade" ); actividadeElement.setText( "Com\u00e9rcio a Retalho em Supermercados e Hipermercados" ); entidadeEmpregadoraElement.addContent( actividadeElement ); Element lojaElement = new Element( "Loja" ); //PERGUNTAR entidadeEmpregadoraElement.addContent( lojaElement ); return entidadeEmpregadoraElement; } protected Element createSeguroElement() { Element seguroElement = new Element( "Seguro" ); Element empresaElement = new Element( "Empresa" ); empresaElement.setText( "Mapfre Seguros Gerais, S.A." ); seguroElement.addContent( empresaElement ); Element apoliceElement = new Element( "Apolice" ); apoliceElement.setText( "1500591100500" ); seguroElement.addContent( apoliceElement ); return seguroElement; } protected Element createEmpresaSHSTElement() { Element empresaSHSTElement = new Element( "EmpresaSHST" ); Element identificacaoElement = new Element( "IdentificacaoCompleta" ); identificacaoElement.setText( "SIPRP - Sociedade Ibérica de Prevenção de Riscos Profissionais Lda., " + "com sede no Edifício Atrium Saldanha, Praça Duque de Saldanha, 1 - 9º G" + " - 1050-094 Lisboa " ); empresaSHSTElement.addContent( identificacaoElement ); Element tecnicoSuperiorHSTElement = new Element( "TecnicoSuperiorHST" ); Element nomeTecnicoSuperiorHSTElement = new Element( "Nome" ); //PERGUNTAR nomeTecnicoSuperiorHSTElement.setText( "" ); tecnicoSuperiorHSTElement.addContent( nomeTecnicoSuperiorHSTElement ); Element capElement = new Element( "CAP" ); //PERGUNTAR capElement.setText( "" ); tecnicoSuperiorHSTElement.addContent( capElement ); empresaSHSTElement.addContent( tecnicoSuperiorHSTElement ); Element medicoTrabalhoElement = new Element( "MedicoTrabalho" ); Element nomeMedicoTrabalhoElement = new Element( "Nome" ); //PERGUNTAR nomeMedicoTrabalhoElement.setText( "" ); medicoTrabalhoElement.addContent( nomeMedicoTrabalhoElement ); Element cedulaElement = new Element( "Cedula" ); //PERGUNTAR cedulaElement.setText( "" ); medicoTrabalhoElement.addContent( cedulaElement ); empresaSHSTElement.addContent( medicoTrabalhoElement ); return empresaSHSTElement; } protected Element createAcidentadoElement() { Element acidentadoElement = new Element( "Acidentado" ); Element nomeElement = new Element( "Nome" ); nomeElement.setText( acidentado.getNome() ); acidentadoElement.addContent( nomeElement ); Element estabelecimentoOrigemElement = new Element( "EstabelecimentoOrigem" ); Element nomeEstabelecimentoOrigemElement = new Element( "Nome" ); nomeEstabelecimentoOrigemElement.setText( acidentado.getEstabelecimento_origem() ); estabelecimentoOrigemElement.addContent( nomeEstabelecimentoOrigemElement ); acidentadoElement.addContent( estabelecimentoOrigemElement ); Date dataNascimento = acidentado.getData_nascimento(); acidentadoElement.addContent( createDataElement( "DataNascimento", dataNascimento ) ); Element biElement = new Element( "BilheteIdentidade" ); Element numeroBiElement = new Element( "Numero" ); numeroBiElement.setText( acidentado.getBilhete_identidade() ); biElement.addContent( numeroBiElement ); acidentadoElement.addContent( biElement ); Element moradaElement = new Element( "Morada" ); moradaElement.setText( acidentado.getMorada() + " " + acidentado.getCod_postal() ); acidentadoElement.addContent( moradaElement ); Element telefoneElement = new Element( "Telefone" ); telefoneElement.setText( acidentado.getContacto_telefonico() ); acidentadoElement.addContent( telefoneElement ); Date dataAdmissao = acidentado.getData_admissao(); acidentadoElement.addContent( createDataElement( "DataAdmissao", dataAdmissao ) ); Element funcaoElement = new Element( "Funcao" ); funcaoElement.setText( acidentado.getFuncao() ); acidentadoElement.addContent( funcaoElement ); Element turnoElement = new Element( "Turno" ); turnoElement.setText( acidentado.getTurno() ); acidentadoElement.addContent( turnoElement ); Element superiorElement = new Element( "Superior" ); Element nomeSuperiorElement = new Element( "Nome" ); nomeSuperiorElement.setText( acidentado.getNome_superior_hierarquico() ); superiorElement.addContent( nomeSuperiorElement ); Element emailSuperiorElement = new Element( "Email" ); emailSuperiorElement.setText( acidentado.getEmail_superior_hierarquico() ); superiorElement.addContent( emailSuperiorElement ); acidentadoElement.addContent( superiorElement ); return acidentadoElement; } protected Element createAcidenteElement() { Element acidenteElement = new Element( "Acidente" ); Element averiguadorElement = new Element( "Averiguador" ); Element nomeAveriguadorElement = new Element( "Nome" ); nomeAveriguadorElement.setText( analiseAcidente.getAveriguador() ); averiguadorElement.addContent( nomeAveriguadorElement ); acidenteElement.addContent( averiguadorElement ); Date dataOcorrencia = analiseAcidente.getData_acidente(); acidenteElement.addContent( createDataElement( "DataOcorrencia", dataOcorrencia ) ); Time horaOcorrencia = analiseAcidente.getHora_acidente(); acidenteElement.addContent( createHoraElement( "HoraOcorrencia", horaOcorrencia ) ); Element horasTrabalhadasElement = new Element( "HorasTrabalhadas" ); horasTrabalhadasElement.setText( "" + analiseAcidente.getHoras_turno() ); acidenteElement.addContent( horasTrabalhadasElement ); Element localElement = new Element( "Local" ); Element seccaoElement = new Element( "Seccao" ); seccaoElement.setText( analiseAcidente.getSeccao() ); localElement.addContent( seccaoElement ); Element localEspecificoElement = new Element( "LocalEspecifico" ); localEspecificoElement.setText( analiseAcidente.getLocal_trabalho() ); localElement.addContent( localEspecificoElement ); acidenteElement.addContent( localElement ); Element actividadeElement = new Element( "Actividade" ); Element descricaoActividadeElement = new Element( "Descricao" ); descricaoActividadeElement.setText( analiseAcidente.getTarefa() ); actividadeElement.addContent( descricaoActividadeElement ); Element objectosActividadeElement = new Element( "Objectos" ); objectosActividadeElement.setText( analiseAcidente.getSubstancias() ); actividadeElement.addContent( objectosActividadeElement ); Element condicoesActividadeElement = new Element( "Condicoes" ); condicoesActividadeElement.setText( analiseAcidente.getCondicoes() ); actividadeElement.addContent( condicoesActividadeElement ); acidenteElement.addContent( actividadeElement ); Element testemunhasElement = new Element( "Testemunhas" ); testemunhasElement.setText( analiseAcidente.getTestemunhas() ); acidenteElement.addContent( testemunhasElement ); Element causasElement = new Element( "Causas" ); causasElement.setText( causa.getCausa() ); acidenteElement.addContent( causasElement ); Element descricaoElement = new Element( "Descricao" ); descricaoElement.setText( analiseAcidente.getDescricao() ); acidenteElement.addContent( descricaoElement ); Element imagensElement = new Element( "Imagens" ); //PERGUNTAR String imagens[] = new String[]{}; for( int i = 0; i < imagens.length; i++ ) { String imagem = imagens[ i ]; Element imagemElement = new Element( "Imagem" ); imagemElement.setText( imagem ); imagensElement.addContent( imagemElement ); } acidenteElement.addContent( imagensElement ); Element conclusoesElement = new Element( "Conclusoes" ); conclusoesElement.setText( analiseAcidente.getConclusoes() ); acidenteElement.addContent( conclusoesElement ); Element accoesTomadasElement = new Element( "AccoesTomadas" ); accoesTomadasElement.setText( analiseAcidente.getAccoes() ); acidenteElement.addContent( accoesTomadasElement ); Element formacaoSHSTElement = new Element( "FormacaoSHST" ); Element teveFormacaoSHSTElement = new Element( "TeveFormacao" ); //PERGUNTAR teveFormacaoSHSTElement.setText( "" ); formacaoSHSTElement.addContent( teveFormacaoSHSTElement ); Element motivoFormacaoSHSTElement = new Element( "Motivo" ); //PERGUNTAR motivoFormacaoSHSTElement.setText( "" ); formacaoSHSTElement.addContent( motivoFormacaoSHSTElement ); acidenteElement.addContent( formacaoSHSTElement ); Element outrasOcorrenciasMesmoPostoElement = new Element( "OutrasOcorrenciasMesmoPosto" ); Element quantidadeOutrasOcorrenciasMesmoPostoElement = new Element( "Quantidade" ); //PERGUNTAR quantidadeOutrasOcorrenciasMesmoPostoElement.setText( "" ); outrasOcorrenciasMesmoPostoElement.addContent( quantidadeOutrasOcorrenciasMesmoPostoElement ); Element relatoriosOutrasOcorrenciasMesmoPostoElement = new Element( "Relatorios" ); //PERGUNTAR String numerosRelatoriosOutrasOcorrenciasMesmoPosto[] = new String[]{}; for( int r = 0; r < numerosRelatoriosOutrasOcorrenciasMesmoPosto.length; r++ ) { String numeroRelatorio = numerosRelatoriosOutrasOcorrenciasMesmoPosto[ r ]; Element relatorioElement = new Element( "Relatorio" ); relatorioElement.setText( numeroRelatorio ); relatoriosOutrasOcorrenciasMesmoPostoElement.addContent( relatorioElement ); } outrasOcorrenciasMesmoPostoElement.addContent( relatoriosOutrasOcorrenciasMesmoPostoElement ); acidenteElement.addContent( outrasOcorrenciasMesmoPostoElement ); Element outrasOcorrenciasOutrosTrabalhadoresElement = new Element( "OutrasOcorrenciasOutrosTrabalhadores" ); Element quantidadeOutrasOcorrenciasOutrosTrabalhadoresElement = new Element( "Quantidade" ); //PERGUNTAR quantidadeOutrasOcorrenciasOutrosTrabalhadoresElement.setText( "" ); outrasOcorrenciasOutrosTrabalhadoresElement.addContent( quantidadeOutrasOcorrenciasOutrosTrabalhadoresElement ); Element relatoriosOutrasOcorrenciasOutrosTrabalhadoresElement = new Element( "Relatorios" ); //PERGUNTAR String numerosRelatoriosOutrasOcorrenciasOutrosTrabalhadores[] = new String[]{}; for( String numeroRelatorio : numerosRelatoriosOutrasOcorrenciasOutrosTrabalhadores ) { Element relatorioElement = new Element( "Relatorio" ); relatorioElement.setText( numeroRelatorio ); relatoriosOutrasOcorrenciasOutrosTrabalhadoresElement.addContent( relatorioElement ); } outrasOcorrenciasOutrosTrabalhadoresElement.addContent( relatoriosOutrasOcorrenciasOutrosTrabalhadoresElement ); acidenteElement.addContent( outrasOcorrenciasOutrosTrabalhadoresElement ); Element lesaoElement = new Element( "Lesao" ); Element areasLesaoElement = new Element( "Areas" ); //PERGUNTAR String areasLesao[][] = new String[][]{}; for( int a = 0; a < areasLesao.length; a++ ) { String area[] = areasLesao[ a ]; Element areaLesaoElement = new Element( "Area" ); Element nomeAreaLesaoElement = new Element( "Nome" ); nomeAreaLesaoElement.setText( area[ 0 ] ); areaLesaoElement.addContent( nomeAreaLesaoElement ); Element detalheAreaLesaoElement = new Element( "Detalhe" ); detalheAreaLesaoElement.setText( area[ 1 ] ); areaLesaoElement.addContent( detalheAreaLesaoElement ); areasLesaoElement.addContent( areaLesaoElement ); } lesaoElement.addContent( areasLesaoElement ); Element tipoLesaoElement = new Element( "Tipo" ); //PERGUNTAR tipoLesaoElement.setText( "" ); lesaoElement.addContent( tipoLesaoElement ); acidenteElement.addContent( lesaoElement ); Element incapacidadeElement = new Element( "Incapacidade" ); // Element tipoIncapacidadeElement = new Element( "Tipo" ); //PERGUNTAR tipoIncapacidadeElement.setText( "" ); incapacidadeElement.addContent( tipoIncapacidadeElement ); Element coeficienteIncapacidadeElement = new Element( "Coeficiente" ); //PERGUNTAR coeficienteIncapacidadeElement.setText( "" ); incapacidadeElement.addContent( coeficienteIncapacidadeElement ); //PERGUNTAR Date dataAvaliacao = new Date(); incapacidadeElement.addContent( createDataElement( "DataAvaliacao", dataAvaliacao ) ); //PERGUNTAR Date dataRevisao = new Date(); incapacidadeElement.addContent( createDataElement( "DataRevisao", dataRevisao ) ); Element periodoIncapacidadeElement = new Element( "PeriodoIncapacidade" ); //PERGUNTAR Date inicioIncapacidade = new Date(); periodoIncapacidadeElement.addContent( createDataElement( "Inicio", inicioIncapacidade ) ); //PERGUNTAR Date fimIncapacidade = new Date(); periodoIncapacidadeElement.addContent( createDataElement( "Fim", fimIncapacidade ) ); incapacidadeElement.addContent( periodoIncapacidadeElement ); acidenteElement.addContent( incapacidadeElement ); return acidenteElement; } protected Element createRecomendacoesSIPRPElement() { Element recomendacoesSIPRPElement = new Element( "RecomendacoesSIPRP" ); for( int r = 0; r < recomendacoes.length; r++ ) { Element recomendacaoElement = new Element( "Recomendacao" ); recomendacaoElement.setText( recomendacoes[ r ].getRecomendacao() ); recomendacoesSIPRPElement.addContent( recomendacaoElement ); } return recomendacoesSIPRPElement; } protected Element createMedidasElement() { Element medidasElement = new Element( "MedidasAdoptar" ); for( int m = 0; m < medidas.length; m++ ) { Element medidaElement = new Element( "Medida" ); medidaElement.setText( medidas[ m ].getMedida() ); medidasElement.addContent( medidaElement ); } return medidasElement; } protected Element createTomadaConhecimentoElement() { Element tomadaConhecimentoElement = new Element( "TomadaConhecimento" ); //PERGUNTAR tomadaConhecimentoElement.addContent( createAssinaturaElement( "DepartamentoSeguranca", "", new Date() ) ); tomadaConhecimentoElement.addContent( createAssinaturaElement( "TecnicoHST", "", new Date() ) ); tomadaConhecimentoElement.addContent( createAssinaturaElement( "ResponsavelSeguranca", "", new Date() ) ); tomadaConhecimentoElement.addContent( createAssinaturaElement( "ResponsavelRH", "", new Date() ) ); tomadaConhecimentoElement.addContent( createAssinaturaElement( "SuperiorHierarquico", "", new Date() ) ); tomadaConhecimentoElement.addContent( createAssinaturaElement( "DepartamentoSeguranca", "", new Date() ) ); return tomadaConhecimentoElement; } protected Element createAssinaturaElement( String nome, String nomeStr, Date data ) { Element assinaturaElement = new Element( nome ); Element nomeElement = new Element( "Nome" ); nomeElement.setText( nomeStr ); assinaturaElement.addContent( nomeElement ); assinaturaElement.addContent( createDataElement( "Data", data ) ); return assinaturaElement; } protected Element createDataElement( String nome, Date data ) { Element dataElement = new Element( nome ); Element anoElement = new Element( "Ano" ); dataElement.addContent( anoElement ); Element mesElement = new Element( "Mes" ); dataElement.addContent( mesElement ); Element diaElement = new Element( "Dia" ); dataElement.addContent( diaElement ); if( data != null ) { Calendar cal = Calendar.getInstance(); cal.setTime( data ); anoElement.setText( "" + cal.get( Calendar.YEAR ) ); int mes = cal.get( Calendar.MONTH ) + 1; mesElement.setText( mes > 9 ? ( "" + mes ) : ( "0" + mes ) ); int dia = cal.get( Calendar.DAY_OF_MONTH ); diaElement.setText( dia > 9 ? ( "" + dia ) : ( "0" + dia ) ); } return dataElement; } protected Element createHoraElement( String nome, Date hora ) { Element horaElement = new Element( nome ); Element horasElement = new Element( "Horas" ); horaElement.addContent( horasElement ); Element minutosElement = new Element( "Minutos" ); horaElement.addContent( minutosElement ); if( hora != null ) { Calendar cal = Calendar.getInstance(); cal.setTime( hora ); int horas = cal.get( Calendar.HOUR_OF_DAY ); horasElement.setText( horas > 9 ? ( "" + horas ) : ( "0" + horas ) ); int minutos = cal.get( Calendar.MINUTE ); minutosElement.setText( minutos > 9 ? ( "" + minutos ) : ( "0" + minutos ) ); } return horaElement; } }