proyectoftp.controlador.Controlador.java Source code

Java tutorial

Introduction

Here is the source code for proyectoftp.controlador.Controlador.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package proyectoftp.controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import org.apache.commons.net.ftp.FTPFile;
import proyectoftp.modelo.ClienteFTP;
import proyectoftp.vista.VistaPrincipal;

/**
 *
 * @author alumno2damdiurno
 */
public class Controlador extends MouseAdapter implements ActionListener {

    private VistaPrincipal vistaPrincipal;
    private ClienteFTP clienteFtp;
    private boolean logeado;
    private String nombreDirectorio;

    public Controlador(VistaPrincipal v, ClienteFTP c) {

        this.clienteFtp = c;
        this.vistaPrincipal = v;

        logeado = clienteFtp.conexion();

        vistaPrincipal.setValorUsuario(clienteFtp.getUsuario());
        vistaPrincipal.setValorServidor(clienteFtp.ipServidor().toString());
        vistaPrincipal.setDirectorioRaiz(clienteFtp.getDirectorioActual());

        cargarListaDirectorioPrincipal();

    }

    private void cargarListaDirectorioPrincipal() {

        vistaPrincipal.vaciarDatos();

        String archivo;
        FTPFile[] archivos = clienteFtp.listaNombreDatos();

        for (int i = 0; i < archivos.length; i++) {

            if (archivos[i].isDirectory()) {
                archivo = "{DIR} " + archivos[i].getName();
                vistaPrincipal.annadirDato(archivo);
            } else {
                archivo = archivos[i].getName();
                vistaPrincipal.annadirDato(archivo);
            }

        }

    }

    @Override
    public void mouseClicked(MouseEvent e) {

        if (e.getClickCount() == 2) {

            if (clienteFtp.esDirectorio(this.vistaPrincipal.getFicheroSeleccionado())) {

                vistaPrincipal.setDirectorio(clienteFtp.getDirectorioActual());
                cargarListaDirectorioPrincipal();
            }

        } else {
            if (clienteFtp.esDirectorio(this.vistaPrincipal.getFicheroSeleccionado())) {

                int numArchivos = 0;
                FTPFile[] archivos = clienteFtp.listaNombreDatos();
                numArchivos = archivos.length;

                if (numArchivos > 0) {

                    vistaPrincipal.setDirectorio(clienteFtp.getDirectorioActual() + ", " + numArchivos);
                } else {

                    vistaPrincipal.setDirectorio(clienteFtp.getDirectorioActual());
                }

                vistaPrincipal.setDirectorioActual(
                        "/" + this.vistaPrincipal.getFicheroSeleccionado().replace("{DIR}", "").trim());

                try {
                    clienteFtp.getConexion().changeToParentDirectory();
                } catch (IOException ex) {
                    Logger.getLogger(Controlador.class.getName()).log(Level.SEVERE, null, ex);
                }
            } else {

                vistaPrincipal.setDirectorio(clienteFtp.getDirectorioActual());
                vistaPrincipal.setDirectorioActual("/" + this.vistaPrincipal.getFicheroSeleccionado());
            }
        }

    }

    @Override
    public void actionPerformed(ActionEvent e) {

        String id;

        id = e.getActionCommand();

        switch (id) {

        case "botonSubirFichero":

            tratarSubirArchivo();

            break;

        case "botonDescargarFichero":

            descargarFichero();

            break;

        case "botonEliminarFichero":

            tratarBorrarFichero();

            break;

        case "botonCrearDirectorio":

            tratarCrearDirectorio();

            break;

        case "botonEliminarDirectorio":

            tratarEliminarDirectorio();

            break;

        case "botonSalir":
            clienteFtp.cerrarSesion();
            System.exit(0);

            break;
        }

    }

    private void tratarBorrarFichero() {

        String nomFich = vistaPrincipal.getFicheroSeleccionado();
        if (nomFich != null) {

            try {
                if (clienteFtp.borrarFichero(nomFich)) {

                    JOptionPane.showMessageDialog(vistaPrincipal, "Se ha borrado correctamente");

                    cargarListaDirectorioPrincipal();
                } else
                    JOptionPane.showMessageDialog(vistaPrincipal, "Ha habido un error");

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else {
            JOptionPane.showMessageDialog(vistaPrincipal, "Selecciona uno de los ficheros de la lista");
        }

    }

    private void descargarFichero() {

        int pos, correcto;
        boolean descargar;
        String fichero;
        FTPFile fFTP;

        JFileChooser exploradorArchivos = new JFileChooser();
        pos = vistaPrincipal.devolverPulsadoLista();

        if (pos <= -1) {
            JOptionPane.showMessageDialog(vistaPrincipal, "Debes de pulsar un archivo para poder descargarlo.",
                    "Error", JOptionPane.ERROR_MESSAGE);
        } else {
            fichero = vistaPrincipal.devolverObjeto(pos);
            fFTP = new FTPFile();
            fFTP.setName(fichero);
            if (fFTP.isDirectory()) {
                JOptionPane.showMessageDialog(vistaPrincipal, "Debes seleccionar un fichero para descargar.",
                        "Error", JOptionPane.ERROR_MESSAGE);
            } else {
                correcto = exploradorArchivos.showOpenDialog(vistaPrincipal);
                if (correcto == JFileChooser.APPROVE_OPTION) {
                    File file = exploradorArchivos.getSelectedFile();

                    try {

                        descargar = clienteFtp.descargarFichero(file.getCanonicalPath(), fFTP.getName());
                        comprobarDescargas(descargar);
                    } catch (IOException ex) {
                        Logger.getLogger(Controlador.class.getName()).log(Level.SEVERE, null, ex);
                    }

                }

            }

        }
    }

    private void comprobarDescargas(boolean descargar) {

        if (descargar) {
            JOptionPane.showMessageDialog(vistaPrincipal, "La descarga ha sido un xito", "Descargas",
                    JOptionPane.INFORMATION_MESSAGE);
        } else {
            JOptionPane.showMessageDialog(vistaPrincipal, "No se ha podido realizar la descarga", "Descargas",
                    JOptionPane.ERROR_MESSAGE);
        }
    }

    private void tratarSubirArchivo() {
        int correcto;

        JFileChooser exploradorArchivos = new JFileChooser();

        correcto = exploradorArchivos.showOpenDialog(vistaPrincipal);

        if (correcto == JFileChooser.APPROVE_OPTION) {

            File file = exploradorArchivos.getSelectedFile();

            if (logeado) {

                try {

                    clienteFtp.subirFichero(file);

                } catch (IOException ex) {
                    Logger.getLogger(Controlador.class.getName()).log(Level.SEVERE, null, ex);
                }

            } else {

                JOptionPane.showMessageDialog(vistaPrincipal, "Imposible conectarse");
            }

        }
    }

    private void tratarCrearDirectorio() {
        nombreDirectorio = JOptionPane.showInputDialog(vistaPrincipal, "Introduce el nombre del directrio.");
        if (nombreDirectorio != null) {
            nombreDirectorio = nombreDirectorio.trim();

            if (!nombreDirectorio.equals("")) {

                logeado = clienteFtp.conexion();

                try {

                    clienteFtp.crearDirectorio(nombreDirectorio);

                } catch (IOException ex) {
                    JOptionPane.showMessageDialog(vistaPrincipal,
                            "Error al crear la carpeta '" + nombreDirectorio + "'");
                }

                cargarListaDirectorioPrincipal();

            } else {
                JOptionPane.showMessageDialog(vistaPrincipal, "Error, no se puede crear el directrio.");
            }
        } else {
            JOptionPane.showMessageDialog(vistaPrincipal, "Error, se ha dejado el campo vacio.");
        }
    }

    private void tratarEliminarDirectorio() {

        nombreDirectorio = vistaPrincipal.getFicheroSeleccionado();
        if (nombreDirectorio != null) {
            String[] resultado = nombreDirectorio.split(" ", 2);

            if (resultado[0].equals("{DIR}")) {

                nombreDirectorio = resultado[1];

                if (clienteFtp.conexion()) {

                    try {

                        clienteFtp.eliminarDirectorio(nombreDirectorio);

                    } catch (IOException ex) {
                        JOptionPane.showMessageDialog(vistaPrincipal,
                                "Error al eliminar la carpeta '" + nombreDirectorio + "'");
                    }

                    cargarListaDirectorioPrincipal();

                } else {
                    JOptionPane.showMessageDialog(vistaPrincipal, "Error, no se puede eliminar el directrio.");
                }
            } else {
                JOptionPane.showMessageDialog(vistaPrincipal, "Error, solo se pueden borrar directorios.");
            }
        } else {
            JOptionPane.showMessageDialog(vistaPrincipal, "Error, no se ha seleccionado nada.");
        }
    }

}