package siniestrosServlet;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Locale;
import java.util.ResourceBundle;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import m05bClasses.m05bComun;
import m05bClasses.m05bConexion;
import m05bClasses.m05bConstantes;
import m05bClasses.m05bFileLog;

import org.apache.fop.apps.Driver;
import org.apache.fop.apps.FOPException;
import org.xml.sax.InputSource;


public class m05bImpSiniestrosVehiculoServlet extends javax.servlet.http.HttpServlet
{
		java.sql.Connection conn=null;
		String sLinea;
        String sFoFileDir = "/datos/m05b/tmp/";
        File foFileDir ;
        File tmpFoFile ;
		FileOutputStream tmpFoFileStream ;
	    m05bComun miComun = new m05bComun();
		m05bFileLog miLog = new m05bFileLog();
		
		String sDpto="";
		String sFDesde="";
		String sFHasta="";
		String sResponDes="";
	
   public static final String FO_REQUEST_PARAM = "fo";
//    Logger log = null;

   public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException
   {
 	   try{
		      doGet(request, response);
		    }catch (Exception e){
		      miLog.addTraza(e);
		    }
   }

   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException
   {
      performTask(request, response);
   }
//        if(log == null)
//        {
//            Hierarchy hierarchy = Hierarchy.getDefaultHierarchy();
//            log = hierarchy.getLoggerFor("fop");
//            log.setPriority(Priority.WARN);
//        }

private void fncAbrirFicheroTemporal() throws java.io.IOException
{
         foFileDir = new File(sFoFileDir);
         tmpFoFile = File.createTempFile("m05b", "Fo", foFileDir);
		 tmpFoFileStream = new FileOutputStream(tmpFoFile);

}	
private void fncImprimirFinPagina()throws java.io.IOException
{
     	    sLinea = "	    </fo:table-body>\n";
          	tmpFoFileStream.write(sLinea.getBytes());			            								            		
            sLinea= "       </fo:table>\n";
           	tmpFoFileStream.write(sLinea.getBytes());   
            sLinea = "      </fo:flow>\n";
            tmpFoFileStream.write(sLinea.getBytes());
            sLinea = "   </fo:page-sequence>\n";
            tmpFoFileStream.write(sLinea.getBytes());
	  
}	

private void fncImprimirComienzoPagina(ResourceBundle res,String idioma)throws java.io.IOException, javax.naming.NamingException
{
	        sLinea = "<fo:page-sequence master-reference=\"general\">\n";
	        tmpFoFileStream.write(sLinea.getBytes());
	        
            //REGION BEFORE
        	sLinea = "		<fo:static-content flow-name=\"xsl-region-before\" >\n";
        	tmpFoFileStream.write(sLinea.getBytes());
		           // --------------    CABECERA DEL LISTADO    --------------
                        //Cabecera 1
		            sLinea = "      <fo:block text-align=\"end\">\n";
		            tmpFoFileStream.write(sLinea.getBytes());
		            sLinea = "      </fo:block>\n";
		            tmpFoFileStream.write(sLinea.getBytes());
                    sLinea = "      <fo:block   font-weight=\"bold\" padding-top=\"10pt\">\n " + res.getString("infListSin.titulo")  ;
   			        tmpFoFileStream.write(sLinea.getBytes());
                    sLinea = "     <fo:leader leader-pattern=\"space\" leader-length=\"12cm\"/> <![CDATA[" +  res.getString("infListSin.texto1")+ sFDesde + res.getString("infListSin.texto2")+sFHasta+ "]]></fo:block> \n";
			        tmpFoFileStream.write(sLinea.getBytes());

					sLinea = "      <fo:block font-weight=\"bold\" padding-top=\"10pt\">\n<![CDATA[ "+res.getString("infListSin.texto3") + sResponDes +"]]></fo:block>\n";
					tmpFoFileStream.write(sLinea.getBytes());
	
					sLinea = "      <fo:block font-weight=\"bold\" padding-top=\"10pt\">\n <![CDATA["+ res.getString("infListSin.texto4") + sDpto +"]]></fo:block>\n";
					tmpFoFileStream.write(sLinea.getBytes());
        	sLinea = " 		</fo:static-content>\n"; 
        	tmpFoFileStream.write(sLinea.getBytes());
        	
            //PIE DE PAGINA Pie
        	sLinea = "		<fo:static-content flow-name=\"xsl-region-after\">\n";
        	tmpFoFileStream.write(sLinea.getBytes());
                        //PIE DE PAGINA Pie
					sLinea = "      <fo:block >\n";
		            tmpFoFileStream.write(sLinea.getBytes());
		            	sLinea= "       <fo:table>\n";
		            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"127mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"125mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-body font-family=\"Helvetica\" font-size=\"6pt\">\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
			            		sLinea = "	    <fo:table-row>\n";
			            		tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    <fo:table-cell >\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block text-align=\"left\">" + miComun.getDetFechaActual(idioma)+ "</fo:block>";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    <fo:table-cell >\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			    sLinea = "      <fo:block text-align=\"right\">" ; 
                       		            tmpFoFileStream.write(sLinea.getBytes());
		                                sLinea = res.getString("pagina")+" <fo:page-number/> \n";
                        	            tmpFoFileStream.write(sLinea.getBytes());
							            sLinea=  "</fo:block>";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            		sLinea = "	    </fo:table-row>\n";
			            		tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    </fo:table-body>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());			            								            		
			            sLinea= "       </fo:table>\n";
		            	tmpFoFileStream.write(sLinea.getBytes());
		            sLinea = "      </fo:block>\n";
		            tmpFoFileStream.write(sLinea.getBytes());
        	sLinea = " 		</fo:static-content>\n"; 
        	tmpFoFileStream.write(sLinea.getBytes());
                //BODY
		         sLinea = "	<fo:flow flow-name=\"xsl-region-body\">\n";
		         tmpFoFileStream.write(sLinea.getBytes());
		         Context ctx =  new InitialContext(System.getProperties());
      	         // --------------    DETALLE DEL LISTADO    --------------
		           		sLinea= "        <fo:table space-after.optimum=\"12pt\">\n";
		            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"36mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"15mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"23mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"23mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"36mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"40mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"19mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-column column-width=\"60mm\"/>\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
		            		sLinea = "	    <fo:table-body font-family=\"Helvetica\" >\n";
			            	tmpFoFileStream.write(sLinea.getBytes());
   		                        sLinea = "	    <fo:table-row >\n";
			            		tmpFoFileStream.write(sLinea.getBytes());
			            			// Matricula
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\"  text-align=\"center\">\n "+res.getString("infListSin.col1")+"</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// Peritado
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\" text-align=\"center\">\n "+res.getString("infListSin.col2")+""+"</fo:block>";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
		            			   // Fecha Siniestro
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\"  text-align=\"center\">\n "+res.getString("infListSin.col3")+"</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());	
     			                   // Fecha resolucion
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\"  text-align=\"center\">\n "+res.getString("infListSin.col4")+"</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());	
     			                   // Matricula Contrario
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\"  text-align=\"center\">\n "+res.getString("infListSin.col5")+"</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());	
     			                   // Taller
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\"  text-align=\"center\">\n "+res.getString("infListSin.col6")+"</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());	
     			                   // Importe
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\"  text-align=\"center\">\n "+res.getString("infListSin.col7")+"</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			//Comentarios	
			            			sLinea = "	    <fo:table-cell padding-top=\"2mm\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block font-weight=\"bold\"  text-align=\"center\">\n "+res.getString("infListSin.col8")+"</fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());	
			            		sLinea = "	    </fo:table-row>\n";
			            		tmpFoFileStream.write(sLinea.getBytes());
   		                        sLinea = "	    <fo:table-row >\n";
			            		tmpFoFileStream.write(sLinea.getBytes());
			            	
}
private void imprimirTotal(int intCont, boolean bolGeneral)throws java.io.IOException, javax.naming.NamingException
{
	sLinea = "	    <fo:table-row>\n";
		tmpFoFileStream.write(sLinea.getBytes());
		//vacías
		for (int i=0;i<7;i++){
			sLinea = "	    <fo:table-cell>\n<fo:block>\n</fo:block>\n</fo:table-cell>\n";
			tmpFoFileStream.write(sLinea.getBytes());
		}
		//Contador
		sLinea = "	    <fo:table-cell>\n";
		tmpFoFileStream.write(sLinea.getBytes());
		if(bolGeneral)
			sLinea = "      <fo:block font-weight=\"bold\" text-align=\"right\"  padding-top=\"26pt\">\n " + "Total General: " + intCont+ "</fo:block>\n";
		else
			sLinea = "      <fo:block font-weight=\"bold\" text-align=\"right\"  padding-top=\"26pt\">\n " + "Total Siniestros: " + intCont+ "</fo:block>\n";
       tmpFoFileStream.write(sLinea.getBytes());
		sLinea = "	    </fo:table-cell>\n";
		tmpFoFileStream.write(sLinea.getBytes());
		sLinea = "	    </fo:table-row>\n";
		tmpFoFileStream.write(sLinea.getBytes());
}
   public void performTask(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws ServletException
   {
	   java.sql.Connection conn=null;
	   PreparedStatement pstmt = null;
	   ResultSet rs = null;
	   m05bComun miComun = new m05bComun();
	   
      try
      {  HttpSession session = request.getSession(true);
      ResourceBundle res = (ResourceBundle) session
		.getAttribute("resTit");

Locale idiomaLocal = (Locale) session.getAttribute("Local");
String idiomaSes = ((idiomaLocal.getLanguage() == null) ? "es"
		: idiomaLocal.getLanguage());
String campoTexto = "",campoTexto2="",campoTexto3="C";
String formatoFecha="dd/MM/yyyy";
if (!idiomaSes.equals("es")){
	campoTexto = "E";
	campoTexto2 = "E_";
	campoTexto3 = "E";
	formatoFecha="yyyy/MM/dd";
}
			m05bConexion miConex = new m05bConexion();
			conn = miConex.getConnection();
      
      	 // Obtención de información de BD
      	 	 	// Vehículo
         sFDesde=request.getParameter("FDesde");
         sFHasta=request.getParameter("FHasta");
      	 String matricula="";
	     String sMatricula = "";
	     String sPeritado= "";
	     String sFechaSiniestro = "";
	     String sFechaResolucion = "";
	     String sMatriculaContrario="";
	     String sImporte="";
	     sDpto="";
	     String sDptoAnt="";
	     String sTaller="";
	     String sComentario="";
	     sResponDes="";
	     String sResponCod="";
	     String sResponCodAnt="";
	     double dNumero=0.0;
      	 
String sSentencia="SELECT " + 
	       m05bConstantes.COL_29_RESPONS+", DECODE( " +
	       m05bConstantes.COL_29_PERITADO+",'S','SI','NO')," +
	       m05bConstantes.COL_29_MATRICULA+",TO_CHAR("+
	       m05bConstantes.COL_29_FSINIESTRO+",'"+formatoFecha+"'),TO_CHAR("+
           m05bConstantes.COL_29_FRESOLU+",'"+formatoFecha+"'),"+
           m05bConstantes.COL_30_DESCRIP+","+
           m05bConstantes.COL_29_OBSERV+","+
           m05bConstantes.COL_29_MATRICULAC+",NVL("+
           campoTexto2+m05bConstantes.COL_06_DESCDPTO+","+
           m05bConstantes.COL_06_DESCDPTO+"),"+
           m05bConstantes.COL_29_IMPORTE+",NVL("+
           campoTexto+m05bConstantes.COL_99_DESCRIPCION+
           ","+m05bConstantes.COL_99_DESCRIPCION+
           ") FROM "+
           m05bConstantes.TAB_SINIESTROS+","+
           m05bConstantes.TAB_TALLER+","+
           m05bConstantes.TAB_VEHICULOS+","+
           m05bConstantes.TAB_DEPARTAMENTOS+","+
           m05bConstantes.TAB_DESCRIPCIONES+
           " WHERE " +
           m05bConstantes.COL_30_CODIGO+"(+)="+
           m05bConstantes.COL_29_TALLER+" AND "+
           m05bConstantes.COL_29_MATRICULA+"="+
           m05bConstantes.COL_34_MATRICULA+ " AND " +
           m05bConstantes.COL_34_CODDPTO +"="+ m05bConstantes.COL_06_CODDPTO+" AND "+
           m05bConstantes.COL_29_FSINIESTRO + " >= TO_DATE('" + sFDesde + "','"+formatoFecha+"') AND "+
           m05bConstantes.COL_29_FSINIESTRO + " <= TO_DATE('" + sFHasta + "','"+formatoFecha+"') AND "+
           m05bConstantes.COL_99_CODTABLA+"(+)='"+m05bConstantes.DESC_RESPONSABILIDAD+"' AND "+
           m05bConstantes.COL_99_CODDESC+"(+)="+m05bConstantes.COL_29_RESPONS+
           " ORDER BY "+
           m05bConstantes.COL_29_RESPONS+","+
           m05bConstantes.COL_34_DESDPTO+",DECODE (" + 
           m05bConstantes.COL_29_PERITADO+",'S','SI','NO') desc," +
    	   m05bConstantes.COL_29_MATRICULA+","+
           m05bConstantes.COL_29_FSINIESTRO;
miLog.addTraza("" , "Siniestros Vehiculos:  " , "sSentencia: " + sSentencia,m05bConstantes.LOG_NIVEL_BAJO);         
		     
		 pstmt = conn.prepareStatement(sSentencia);
		 rs = pstmt.executeQuery();
			 
	     fncAbrirFicheroTemporal();
         sLinea = "<?xml version=\"1.0\" encoding=\"windows-1252\"?>\n";
         tmpFoFileStream.write(sLinea.getBytes());
         
         sLinea = "<fo:root xmlns:fo=\"http://www.w3.org/1999/XSL/Format\">\n";
         tmpFoFileStream.write(sLinea.getBytes());
		 // LAYOUT DEL LISTADO 
	         sLinea = "<fo:layout-master-set>\n";
	         tmpFoFileStream.write(sLinea.getBytes());
		           sLinea = "	<fo:simple-page-master master-name=\"general\"  page-height=\"21cm\" page-width=\"29.5cm\" margin-top=\"2cm\" margin-bottom=\"2cm\" margin-left=\"2cm\" margin-right=\"2cm\">\n";
			       tmpFoFileStream.write(sLinea.getBytes());
			         sLinea = "		<fo:region-before extent=\"3cm\"/>\n";
			         tmpFoFileStream.write(sLinea.getBytes());
			         sLinea = "		<fo:region-body  margin-top=\"3.8cm\" margin-bottom=\"1.5cm\" />\n";
			         tmpFoFileStream.write(sLinea.getBytes());
			         sLinea = "		<fo:region-after  extent=\"1cm\"/>\n";
			         tmpFoFileStream.write(sLinea.getBytes());
			         sLinea = "		<fo:region-start extent=\"0cm\"/>\n";
			         tmpFoFileStream.write(sLinea.getBytes());
			         sLinea = "		<fo:region-end extent=\"0cm\"/>\n";
			         tmpFoFileStream.write(sLinea.getBytes());
			         
		            sLinea = "	</fo:simple-page-master>\n";
		          tmpFoFileStream.write(sLinea.getBytes());
		          
	         sLinea = "</fo:layout-master-set>\n";
	         tmpFoFileStream.write(sLinea.getBytes());
	         

			            	int cont=0;
//					         Agurtzane Mar12: contador en listados
				              int intCont=0, intContParcial=0;			                
//				              Fin Agurtzane Mar12: contador en listados
			   		         while (rs.next()){
//			   		           Agurtzane Mar12: contador en listados
			   		            intCont++;
			   		            intContParcial++;
//			   		       Fin Agurtzane Mar12: contador en listados
		   		    	    sDpto=rs.getString(9)==null ? "":rs.getString(9);
		   		    	    sPeritado=rs.getString(2)==null ? "":rs.getString(2);
		   		    	    if(sPeritado.toUpperCase().startsWith("S"))
		   		    	    	sPeritado="BAI";
		   		    	    else
		   		    	    	sPeritado="EZ";
	       	    			sMatricula = rs.getString(3)==null ? "":rs.getString(3);
	       	    			sFechaSiniestro= rs.getString(4)==null ? "":rs.getString(4);
	       	    			sFechaResolucion = rs.getString(5)==null ? "":rs.getString(5);
	       	    			sMatriculaContrario = rs.getString(8)==null ? "":rs.getString(8);
	       	    			sTaller = rs.getString(6)==null ? "":rs.getString(6);
	       	    			//sImporte = rs.getString(10)==null ? "":rs.getString(10);
	       	    			//sImporte = miComun.formatearStrMiles(sImporte);
	     	    			dNumero= rs.getDouble(10);
	       	    			sImporte = miComun.formatearDblMilesDec(dNumero);
	       	    			sResponDes = rs.getString(11)==null ? "":rs.getString(11);
	       	    			sResponCod = rs.getString(1)==null ? "":rs.getString(1);
	       	    			sComentario = rs.getString(7)==null ? "":rs.getString(7);
	       	    			if (((!(sDpto.equals(sDptoAnt))) ) ||((!(sResponCod.equals(sResponCodAnt))) )||(cont==40)){
       	    			   	   if ((((!(sDpto.equals(sDptoAnt))) ) && (sDptoAnt!="")) || (((!(sResponCod.equals(sResponCodAnt))) ) && (sResponCodAnt!=""))){
       	    			   		   imprimirTotal(intContParcial,false);//Agurtzane Mar12: contador en listados   	  
       	    			   		   
	       	    	           			       	    	    				       	    	    				       	    	    		
	       	    	           			                  	    			   		   
    	                         fncImprimirFinPagina();
	       	    			   	}	
	       	    			    fncImprimirComienzoPagina(res,campoTexto3);
	       	    			    cont=0;
	       	    			    intContParcial=0;//Agurtzane Mar12: contador en listados   
			            		}else{
	       	    			   	cont=cont+1;   
   		                        sLinea = "	    <fo:table-row >\n";
			            		tmpFoFileStream.write(sLinea.getBytes());}
	       	    			    sDptoAnt=sDpto;
	       	    			    sResponCodAnt=sResponCod;
			            			// Matricula
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n <![CDATA["+ sMatricula +"]]></fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// Peritado 
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n<![CDATA[ " + sPeritado +"]]></fo:block>";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// Fecha Siniestro
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n<![CDATA["+sFechaSiniestro+"]]></fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// Fecha Resolucion
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n<![CDATA["+sFechaResolucion+"]]></fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// Matricula Contrario
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n<![CDATA["+sMatriculaContrario+"]]></fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// Taller
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n<![CDATA["+sTaller+"]]></fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// Importe
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n<![CDATA["+sImporte+"]]></fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            			// Comentarios
			            			sLinea = "	    <fo:table-cell padding-top=\"0.2mm\" border-width=\"0.1mm\" border-style=\"solid\">\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
							            sLinea = "      <fo:block  text-align=\"center\">\n<![CDATA["+sComentario+"]]></fo:block>\n";
							            tmpFoFileStream.write(sLinea.getBytes());
			            			sLinea = "	    </fo:table-cell>\n";
			            			tmpFoFileStream.write(sLinea.getBytes());
			            		sLinea = "	    </fo:table-row>\n";
			            		tmpFoFileStream.write(sLinea.getBytes());
			        }
//			   		    Agurtzane Mar12: contador en listados 
			   		      intContParcial++;
			   		         imprimirTotal(intContParcial, false);
			   		   imprimirTotal(intCont, true);
//			   		 FIn Agurtzane Mar12: contador en listados 
			                    fncImprimirFinPagina();
		                   		rs.close();
         sLinea = "</fo:root>\n";
         tmpFoFileStream.write(sLinea.getBytes());
         tmpFoFileStream.close();

         //FileInputStream file = new FileInputStream(sFoFileDir + tmpFoFile.getName());
         generarPDFdesdeFO(sFoFileDir + tmpFoFile.getName(),sFoFileDir,response);
         

         //renderFO(new InputSource(file), response);

         //tmpFoFile.delete();

         //response.flushBuffer();


      }
      catch (Exception ex)
      {
      	try {
			response.sendRedirect("m05bError.jsp");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			miLog.addTraza(e);
		}
      }
      finally{
	   	    try {
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
				if (conn != null)
					conn.close();
			} catch (SQLException e2) {
				try {
					response.sendRedirect("m05bError.jsp");
				} catch (IOException e) {
					// TODO Auto-generated catch block
					miLog.addTraza(e);
				}
	  		}
	   }
    }

    /**
     * renders an FO inputsource into a PDF file which is rendered
     * directly to the response object's OutputStream
     */
    public void renderFO(InputSource foFile, HttpServletResponse response) throws ServletException
    {
        try
        {
            ByteArrayOutputStream out = new ByteArrayOutputStream();

	    	response.reset();
            OutputStream oOut=response.getOutputStream();
            BufferedOutputStream bOut=new BufferedOutputStream(oOut);
            Driver driver = new Driver(foFile, out);
            driver.setRenderer(Driver.RENDER_PDF);
            driver.run();

            response.setContentLength(out.size());
	    response.setContentType("application/pdf");


            bOut.write(out.toByteArray());
	    out.close();
	    bOut.flush();
            bOut.close();
//	    response.flushBuffer();
        }
        catch (Exception ex)
        {
            throw new ServletException(ex);
        }
    }
public void generarPDFdesdeFO(String ficheroFO, String rutaPDF, HttpServletResponse response) throws FOPException {
        try {

            Driver driver = new Driver();

            driver.setRenderer(Driver.RENDER_PDF);

            //Si no existe el directrio lo crea
            File f = new File(rutaPDF);

            if (!f.exists()) {

                f.mkdir();


            }
            //Cargar los datos del .FO
            FileInputStream file = new FileInputStream(ficheroFO);

            BufferedInputStream bfile=new BufferedInputStream(file);

            driver.setInputSource(new InputSource(bfile));


            //Crear un temporal que va a ser el .pdf
            String sPdfFileDir = rutaPDF;
            File   pdfFileDir = new File(sPdfFileDir);
            File   tmpPdfFile = File.createTempFile("m05b", ".pdf", pdfFileDir);


            FileOutputStream fileout = new FileOutputStream(tmpPdfFile);

            BufferedOutputStream bfileout=new BufferedOutputStream(fileout);

            driver.setOutputStream(bfileout);

            driver.run();


 

            bfile.close();

            bfileout.close();
            //Longitus del Fichero PDF.
            Long longitud = new Long(tmpPdfFile.length());            
            String sLongitud=""+ longitud;
            int iLongitud=Integer.parseInt(sLongitud);

            response.setContentLength((int)iLongitud);
	        response.setContentType("application/pdf");
	        
            byte[] fileBytes = new byte[longitud.intValue()];
            FileInputStream fisficheroPdf = new FileInputStream(tmpPdfFile);
            fisficheroPdf.read(fileBytes);
            ServletOutputStream os = response.getOutputStream();
            ((OutputStream)os).write(fileBytes);
            ((OutputStream)os).flush();
            ((OutputStream)os).close();

            // BORRAR EL FICHERO FO

            File fichero = new File(ficheroFO);
            

            boolean borrado = fichero.delete();
            boolean borrado2 = tmpPdfFile.delete();

        } catch (Exception e) {

            ////System.out.println("EXCEPCION !!! : Error pasando de FO a PDF: " + e);

        }


    }

    
}