
package educacion;
import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

import com.oreilly.servlet.MultipartRequest;

public class SubirArchivo extends HttpServlet {
    
	static final long serialVersionUID = 0;
	private String webTempPath, webTempPath2;
	 
	 	
	public void init(){
		//Introducimos la localizacion que tendran los archivos que subimos
		webTempPath="C:/Documents and Settings/SSSI/AWJuan/workspace/proyecto/educacion.war/data/";
		webTempPath2="C:/programa/jboss-4.0.5.GA/server/default/deploy/educacion.war/data";
		
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(request,response);
	}  	
		
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		//Ponemos un limite de 16 MB al tamaņo del archivo
		
		MultipartRequest mpr= new MultipartRequest(request, webTempPath, 5*1024*1024);		
		
		String nombre= mpr.getFilesystemName("archivo");
		SubirBean s=new SubirBean();		
		
		String ruta = webTempPath2+nombre;

		s.subirArchivo(nombre, ruta);
		File origen = new File(webTempPath);
		File destino = new File(webTempPath2);
		copyDirectory(origen, destino);
				
		//El servlet nos devolvera a la pagina subir.jsp 	
		RequestDispatcher dispatcher = request.getRequestDispatcher("subir.jsp");
		dispatcher.forward(request, response);
	}

	private void copyDirectory(File rutaOrigen, File rutaDestino) throws IOException{
		// TODO Auto-generated method stub
		
		if(rutaOrigen.isDirectory()){
			if(!rutaDestino.exists()){
				rutaDestino.mkdir();
			}
			String [] children = rutaOrigen.list();
			int i=0;
			while(i<children.length){
				copyDirectory(new File(rutaOrigen, children[i]), new File(rutaDestino, children[i]));
				i++;
			}
		}
		else{
			copy(rutaOrigen, rutaDestino);
		}
		
	}

	private void copy(File rutaOrigen, File rutaDestino) throws IOException{
		// TODO Auto-generated method stub
		InputStream in = new FileInputStream(rutaOrigen);
		OutputStream out = new FileOutputStream(rutaDestino);
		
		byte[] buf = new byte[1024];
		int len;
		while((len=in.read(buf))>0){
			out.write(buf, 0, len);
		}
		in.close();
		out.close();

	}
}