<%@page import="org.apache.commons.fileupload.*,java.util.Date,java.sql.*,javax.sql.*,javax.naming.*,m05bClasses.*"%>
<!-- Fecha de creacion: (06/10/05) -->
	
<html>
<%
	// _______________________________XLNETs______________________________________
	// Evaluar variable de session que indica si esta conectado a XLNets
	if ((session.getAttribute("objetoSeguridad")) == null)  { 
		// Verificar que no ha transcurrido el tiempo de sesion (web.xml) %>
			<%@ include file="/m05bControlAcceso.inc"%>
	<% } %>
	<%@ include file="/m05bIdioma.inc"%>
	
<head>
	<title><%= resTit.getString("titPrcImportCajasFich")%></title>
</head>
<% String fileName="", sNomFichero="";
   int id=0;
   boolean bExiste=false;
   m05bFileLog miLog = new m05bFileLog();
%>
<body style="cursor: wait" bgcolor="#ffffff" onkeydown="cancelaEnter();" onload="fncImportar();return true;" onunload="document.body.style.cursor='wait';">


<%
	boolean isMultipart = FileUpload.isMultipartContent(request);
	if (isMultipart) {
%>
		<!--h1>
		Fichero Subido Correctamente
		</h1-->
		<form method="post" name="formImportCajasFrame" nctype="multipart/form-data">
<%
                DiskFileUpload upload = new DiskFileUpload();
                // Ficheros de mas de 1 MB se escriben directamente en disco
                upload.setSizeThreshold(1*1024*1024);
                // 100 MB de tamaño máximo de la petición Multipart
                upload.setSizeMax(100*1024*1024);
                // Carpeta temporal de trabajo
                //upload.setRepositoryPath("c:/datosA");
                upload.setRepositoryPath("/datos/m05b/tmp");

                List items = upload.parseRequest(request);

                // Procesar la subida de ficheros
                Iterator iter = items.iterator();
                while (iter.hasNext()) {
						FileItem item = (FileItem) iter.next();
						if (item.isFormField()) {
							// Campos del formulario
							String name = item.getFieldName();
							String value = item.getString();
			                out.println( name + ": " + value + "<br/>");
						} else {
							// Ficheros adjuntos
			                String fieldName = item.getFieldName();
							fileName = item.getName();
			     			String contentType = item.getContentType();
							boolean isInMemory = item.isInMemory();
							long sizeInBytes = item.getSize();
							BufferedInputStream bis=new BufferedInputStream(item.getInputStream());
		                    // Inicio de escritura en la BD del fichero subido
			   				miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "SUBIR FICHERO: "+new Date(), m05bConstantes.LOG_NIVEL_BAJO);
							String cadena="", sql="";
							ResultSet rs=null;
							java.sql.Connection conn=null;
							Context ctx=null;
						    try {
						        // Obteniendo una conexion BD
								m05bConexion miConex = new m05bConexion();
								conn = miConex.getConnection();
						        // Insertando CLOB
						        conn.setAutoCommit(false);
						        Statement stmt = conn.createStatement();
							    String delimReg= "\\";
							    StringTokenizer stReg = new StringTokenizer(fileName,delimReg);
							    while (stReg.hasMoreTokens()) {
					   	    			sNomFichero = stReg.nextToken();
							    }  // Fin while
			   					miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "      ......   NOMBRE FICHERO: " + sNomFichero, m05bConstantes.LOG_NIVEL_BAJO);
						         // Insercion de la Fila con el LOB vacio
			   					miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "      ......   ANTES DE INSERCION FILA VACIA: "+new Date(), m05bConstantes.LOG_NIVEL_BAJO);
								m05bGenerarClave miID = new m05bGenerarClave();
								id = miID.getNextId(m05bConstantes.TAB_CARGAGASTOSTARJETAS, m05bConstantes.COL_43_ID);
								sql = "INSERT INTO " + m05bConstantes.TAB_CARGAGASTOSTARJETAS + 
							   	   			" (" + m05bConstantes.COL_43_ID + ", " + m05bConstantes.COL_43_FECHA + 
							   	   				", " + 	m05bConstantes.COL_43_NOMBRE + ", " +   m05bConstantes.COL_43_PRIMERREG + 
							   					", " + m05bConstantes.COL_43_NUMREG + ", " + m05bConstantes.COL_43_FICHERO + ")" +
							   	   			" VALUES (" + id + ", sysdate, '" + sNomFichero + "', '', 0, empty_clob())";
						        stmt.execute(sql);
						        // Reserva de la Fila
			   					miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "      ......   ANTES DE RESERVA FILA: "+new Date(), m05bConstantes.LOG_NIVEL_BAJO);
								sql="SELECT " + m05bConstantes.COL_43_FICHERO +  
								   	   		" FROM " + m05bConstantes.TAB_CARGAGASTOSTARJETAS +
								   			" WHERE " + m05bConstantes.COL_43_ID + " = '" + id + "' FOR UPDATE";
						        rs = stmt.executeQuery (sql);
								rs.next();
						        // Insertar fichero
        						BufferedOutputStream bos=null;
						        java.sql.Clob lob=rs.getClob(1);
						        if (lob instanceof oracle.sql.CLOB) {
							          // Oracle thin/oci driver non-rmi
							          bos=new BufferedOutputStream(((oracle.sql.CLOB)lob).getAsciiOutputStream());
						        //} else if (lob instanceof weblogic.jdbc.vendor.oracle.OracleThinClob) {
							    //      // Oracle thin/oci driver via rmi
							    //      bos=new BufferedOutputStream(((weblogic.jdbc.vendor.oracle.OracleThinClob)lob).getAsciiOutputStream());
						        //} else if (lob instanceof weblogic.jdbc.common.OracleClob) {
							    //      // WebLogic Type 2 Driver for Oracle
							    //      bos=new BufferedOutputStream(((weblogic.jdbc.common.OracleClob) lob).getAsciiOutputStream());
						        } else {
							          // New Weblogic type 4 driver for Oracle or any non-Oracle driver
							          bos=new BufferedOutputStream(((java.sql.Clob) lob).setAsciiStream(1));
						        }

						        byte[] chunk = new byte[10*1024*1024];
						        int i=-1;
			   					miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "---> loading: ", m05bConstantes.LOG_NIVEL_BAJO);
						        while((i = bis.read(chunk))!=-1) {
						        	  bExiste=true;
							          bos.write(chunk,0,i); 							         
						        }
						        bos.close();
					      		stmt.close();
					      		if (!(bExiste)) {
						        	conn.rollback();
			   						miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "         No existe - rollback ", m05bConstantes.LOG_NIVEL_BAJO);
					      		}
						  	} catch (Exception e) {
						        miLog.addTraza(e);
		   						miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "m05b - EXCEPTION-1: " + e, m05bConstantes.LOG_NIVEL_BAJO);
						        conn.rollback();
		   						miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "         rollback ", m05bConstantes.LOG_NIVEL_BAJO);
						    } finally {
		   						miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, " IMPORT CAJAS FRAME JSP  - FINALLY ", m05bConstantes.LOG_NIVEL_BAJO);
							        try {
							          if (rs != null)
									          rs.close();
							          if (conn != null) {
							          	  	conn.commit();
		   									miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, " IMPORT CAJAS FRAME JSP  - COMMIT ", m05bConstantes.LOG_NIVEL_BAJO);
							          		conn.close();
							          }
							        } catch (Exception e1) {
							          	
							          	
		   								miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "m05b - EXCEPTION-2: " + e1, m05bConstantes.LOG_NIVEL_BAJO);
		   								miLog.addTraza(e1);
							        }
						    }
						    if (bExiste) {
								miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "      ......   FICHERO INSERTADO EN BD: "+new Date(), m05bConstantes.LOG_NIVEL_BAJO);
				                bis.close();
			                    // Fin de escritura en BD
			                    miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, fieldName + ", " + fileName + ", " + contentType + ", inMemory=" + isInMemory + ", size=" + sizeInBytes + "<br/>", m05bConstantes.LOG_NIVEL_BAJO);
				                bis.close();
						    }
					    }
                }  %>
                </form>
	<% } else {
%>
		<h1>
		Formulario de Carga de Ficheros
		</h1>
		<form method="post" name="formImportCajasFrame" nctype="multipart/form-data">
		<br><br>
		<input type="submit" name="Submit" value="Submit"/>
		<input type="file" name="fichero"/>
		<input type="reset" value="Reset"/>
                </form>
<%
        }
%>
<script>
	function fncImportar() {
		var docu = document.formImportCajasFrame;
		<% if (bExiste==true) { 
			miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "EL FICHERO SI EXISTE", m05bConstantes.LOG_NIVEL_BAJO);
		%>
			docu.action="m05bImportarArchivosCajasServlet?Id=<%=id%>";
		<% } else {
			miLog.addTraza(m05bConstantes.LOG_NO_USER, m05bConstantes.LOG_NO_SRC, "EL FICHERO NO EXISTE", m05bConstantes.LOG_NIVEL_BAJO);
		%>
			docu.action="m05bImportCajasJsp.jsp?Mensaje=<%=m05bConstantes.MSG_NODATOS%>";
		<%  } %>
			docu.submit();
	}
</script>


</body>
</html>