org.programmatori.domotica.own.plugin.remote.FTPUtility.java Source code

Java tutorial

Introduction

Here is the source code for org.programmatori.domotica.own.plugin.remote.FTPUtility.java

Source

/*
 * OWN Server is 
 * Copyright (C) 2010-2012 Moreno Cattaneo <moreno.cattaneo@gmail.com>
 * 
 * This file is part of OWN Server.
 * 
 * OWN Server is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as 
 * published by the Free Software Foundation, either version 3 of the
 *  License, or (at your option) any later version.
 * 
 * OWN Server is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with OWN Server.  If not, see 
 * <http://www.gnu.org/licenses/>.
 */
package org.programmatori.domotica.own.plugin.remote;

import java.io.*;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

/**
 * @author Marco Cazzaniga
 * @author Moreno Cattaneo (moreno.cattaneo@gmail.com)
 */
public class FTPUtility {
    private static final Log log = LogFactory.getLog(FTPUtility.class);

    public static final String PROTOCOL = "ftp";

    /**
     * Funzione che consente la connessione ad un Server FTP
     * 
     * @param ftpServer Server FTP
     * @param username Nome utente per l'accesso
     * @param password Password per l'accesso
     * @return Un oggetto di tipo FTPClient contenente il Client per l'accesso
     */
    public static FTPClient connect(String ftpServer, String username, String password) {

        FTPClient ftp = new FTPClient();
        String replyString;
        try {
            ftp.connect(ftpServer);
            ftp.login(username, password);
            log.info("Connesso a " + ftpServer + ".");

            replyString = ftp.getReplyString();
            log.debug(replyString);

            int reply = ftp.getReplyCode();

            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                log.error("Il Server FTP ha rifiutato la connessione.");
                log.error(replyString);
                return null;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return ftp;
    }

    /**
     * Funzione che consente la disconnessione da un Server FTP
     * 
     * @param ftp Offetto di tipo FTPClient utilizzato per l'accesso
     * @return >0 se tutto funziona correttamente; <0 in caso di errori
     */
    public static int disconnect(FTPClient ftp) {
        if (ftp.isConnected()) {
            try {
                ftp.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
                return -1;
            }
        }
        log.info("Disconnessione avvenuta con successo.");
        return 1;
    }

    /**
     * Funzione che consente di scrivere un file sul sito FTP remoto
     * 
     * @param ftp Oggetto di tipo FTPClient da usare per il salvataggio del file
     * @param name Nome del file da inserire sul server remoto
     * @param file Flusso di tipo InputStream, da cui prelevare il file
     * @return >=0 in caso tutto vada bene; <0 in caso di errori
     */
    public static int putFile(FTPClient ftp, String name, InputStream file) {
        try {
            ftp.storeFile(name, file);
        } catch (IOException e) {
            e.printStackTrace();
            return -1;
        }
        return 0;
    }

    /**
     * Funzione che consente di leggere un file sul sito FTP remoto
     * 
     * @param ftp Oggetto di tipo FTPClient da usare per il recupero del file
     * @param name Nome del file da recuperare dal server Remoto
     * @param output Flusso di tipo OutputStream, su cui salvare il file
     * @return >=0 in caso tutto vada bene; <0 in caso di errori
     */
    public static int getFile(FTPClient ftp, String name, OutputStream output) {
        try {
            ftp.retrieveFile(name, output);
        } catch (IOException e) {
            e.printStackTrace();
            return -1;
        }
        return 0;
    }

    /**
     * Funzione che salva un file di testo XML su un server remoto via FTP
     * 
     * @param pathXML Nome e path del file XML da depositare in remoto
     * @param ftpServer Server FTP su cui depositare il file
     * @param username Nome utente per l'accesso ftp
     * @param password Password per l'accesso ftp
     * @return >0 se l'operazione si  conclusa correttamente; <0 in caso di
     *         errore
     */
    public int saveXML(String remoteName, String localName, String ftpServer, String username, String password) {

        FTPClient ftp = connect(ftpServer, username, password);
        FileInputStream file;

        try {
            file = new FileInputStream(localName);
            putFile(ftp, remoteName, file);
            disconnect(ftp);
        } catch (FileNotFoundException e) {
            log.error("Il file non esiste.");
            e.printStackTrace();
            return -1;
        }
        return 1;
    }

    /**
     * Funzione che legge un file di testo XML su un server remoto via FTP
     * 
     * @param remoteName Nome e path del file XML da leggere in remoto
     * @param localName Nome e path del file XML da scrivere in locale
     * @param ftpServer Server FTP su cui depositare il file
     * @param username Nome utente per l'accesso ftp
     * @param password Password per l'accesso ftp
     * @return >0 se l'operazione si  conclusa correttamente; <0 in caso di errore
     */
    public int readXML(String remoteName, String localName, String ftpServer, String username, String password) {

        FTPClient ftp = connect(ftpServer, username, password);
        FileOutputStream file;

        try {
            file = new FileOutputStream(localName);
            getFile(ftp, remoteName, file);
        } catch (FileNotFoundException e) {
            log.error("Il file non esiste.");
            e.printStackTrace();
            return -1;
        }
        return 1;
    }

    //   public void run() {
    //      remoteFileName = "config.xml";
    //      Date now = new Date();
    //      String localFileName = "config.xml";
    //
    //      // Legge da remoto e scrive in locale
    //      if (this.readXML(remoteFileName, localFileName, server, user, pw) == 1)
    //         log.info("Operazione eseguita con successo: letto file " + remoteFileName + " e scritto su disco come " + localFileName + ".");
    //      else
    //         log.error("Operazione non eseguita per errori.");
    //
    //      // Legge in locale e scrive su remoto
    //      if (this.readXML(remoteFileName, localFileName, server, user, pw) == 1)
    //         log.info("Operazione eseguita con successo: scritto file " + remoteFileName + "sul server remoto.");
    //      else
    //         log.error("Operazione non eseguita per errori.");
    //   }

    public static void main(String[] args) {

        //FTPUtility remote = new FTPUtility();
        FTPClient ftp = FTPUtility.connect("192.168.3.97", "marco", "heaven");

        if (ftp != null) {

            // FileInputStream file;
            //
            // try {
            // file = new FileInputStream("/Users/Heaven/prova.txt");
            // remote.saveFile(ftp, "prova.txt", file);
            // } catch (FileNotFoundException e) {
            // System.out.println("Il file non esiste.");
            // e.printStackTrace();
            // }

            // FileOutputStream file;
            // try {
            // file=new FileOutputStream("/Users/Heaven/prova.uno");
            // remote.readFile(ftp, "prova.txt", file);
            // } catch (FileNotFoundException e) {
            // System.out.println("Il file non esiste.");
            // e.printStackTrace();
            // }
            FTPUtility.disconnect(ftp);
        }

    }

}