import java.io.*;
import java.net.*;
import org.apache.commons.net.ftp.*;

// Ojo al cortafuegos, que tiene que abrir los puertos FTP
// Desde dentro del insti se puede acceder (solo desde el aula 31)
// a través del nombre ftp.a31.mio o la dirección 192.168.31.139 
// a los puertos normales (20 y 21)


public class cliente2FTPDam2{
    public static void main(String args[]){
        try{
            boolean estoyEnCasa=true;
            
            // El servidor se comporta de forma distinta desde fuera que desde dentro
            String servFTP="";
            int puerto=0;
            FTPClient cliente=new FTPClient();
           
            if(estoyEnCasa){
                servFTP="v-espino.com";
                puerto=3305;
                cliente.connect(servFTP,puerto);
            }else{
                servFTP="ftp.a31.mio";
                puerto=20;
                cliente.connect(servFTP);
            }
            System.out.print("Conectando con "+servFTP+"...");
            System.out.println("conectado");
            
            // Usuario y contraseña
            String usuario="dam2";
            String clave="alcachofa";
            
            // El Pascu tiene el FTP en modo pasivo desde fuera
            // y lo tiene activo desde dentro (20 y 21)
            if(estoyEnCasa) cliente.enterLocalPassiveMode();
            
            // Nos identificamos
            boolean login=cliente.login(usuario,clave);
            if(login) System.out.println("usuario y contraseña correctos");
            else{
                System.out.println("login incorrecto");
                cliente.disconnect();
                System.exit(1);
            }
            
            // A ver donde estoy
            System.out.println("Directorio actual: "+cliente.printWorkingDirectory());
            
            // Cambio de directorio
            cliente.changeWorkingDirectory("public_html");
            System.out.println("Directorio actual: "+cliente.printWorkingDirectory());
            
            // Creo un directorio nuevo y entro en el
            cliente.makeDirectory("dam2");
            cliente.changeWorkingDirectory("dam2");
            System.out.println("Directorio actual: "+cliente.printWorkingDirectory());
           
            // Subamos un fichero
            cliente.setFileType(FTP.BINARY_FILE_TYPE);
            FileInputStream fis=new FileInputStream("twitter.txt");
            BufferedInputStream bis =new BufferedInputStream(fis);
            if (cliente.storeFile("twitter.txt",bis)) System.out.println("subido fichero");
            else System.out.println("ERROR SUBIENDO");
            bis.close();
            fis.close();
            
            /*
            // Renombrar un fichero (devuelve TRUE si lo renombra)
            cliente.rename("subido.txt","cambiado.txt");
            */
           
            /*
            // Descargar un fichero
            FileOutputStream fos=new FileOutputStream("twitter.txt");
            BufferedOutputStream bos =new BufferedOutputStream(fos);
            if (cliente.retrieveFile("twitter.txt",bos)) System.out.println("bajado fichero");
            else System.out.println("ERROR BAJANDO");
            bos.close();
            fos.close();
            */
           
            // Borrar un fichero (devuelve TRUE si lo borra)
            // cliente.deleteFile("cambiado.txt");
         
            // Recogemos los ficheros via FTP
            
            FTPFile[] ficheros=cliente.listFiles();
            System.out.println("Ficheros en el directorio actual: "+ficheros.length);
            String tipos[]={"Fichero","Directorio","Enlace"};
            for(int i=0;i<ficheros.length;i++){
                System.out.println("\t"+ficheros[i].getName()+" => "+tipos[ficheros[i].getType()]+" - "+ficheros[i].getUser());
            }
           
           
            // Despidiendo de forma educada
            cliente.logout();
            cliente.disconnect();
            System.out.println("Desconectado");
        }catch(Exception e){
            System.out.println("ERROR");
            e.printStackTrace();
        }
    }

}
