Commit 625a7b32 authored by LG's avatar LG
Browse files

Verzeichnisüberwachung: SFTP-Kommunikation...

git-svn-id: https://inovat-svn-server:8443/svn/NI-DAUZ-1/trunk@805 8a9b1199-d942-744a-a8b1-ac58f4d8385e
parent 8f33aa32
Loading
Loading
Loading
Loading
+94 −70
Original line number Diff line number Diff line
@@ -52,60 +52,37 @@ import java.util.Calendar;
 */
public class DavKommunikation implements ClientSenderInterface {

    /**
     * Aspekt Zustand.
     */
    /** Aspekt Zustand. */
    private static final String ASP_ZUSTAND = "asp.zustand";

    /**
     * Attributgruppe bastImportVerzeichnisberwachung.
     */
    /** Attributgruppe bastImportVerzeichnisberwachung. */
    private static final String ATG_VEREICHNISUEBERWACHUNG = "atg.bastImportVerzeichnisUeberwachung";

    /**
     * DebugLogger fr Debug-Ausgaben
     */
    /** DebugLogger fr Debug-Ausgaben. */
    private static final Debug debug = Debug.getLogger();

    //~ FELDER ================================================================

    /**
     * Benutzer zur Anmeldung am Datenverteiler.
     */
    /** Benutzer zur Anmeldung am Datenverteiler. */
    private String _daVBenutzer = "inovat";

    /**
     * IP Adresse Datenverteiler.
     */
    /** IP Adresse Datenverteiler. */
    private String _DaVIp = "127.0.0.1";

    /**
     * Passwort zur Anmeldung am Datenverteiler.
     */
    /** Passwort zur Anmeldung am Datenverteiler. */
    private String _daVPasswort = "inovat";

    /**
     * Port Datenverteiler.
     */
    /** Port Datenverteiler. */
    private int _DaVPort = 8083;

    /**
     * Datenbeschreibung zum Senden der Verzeichnisberwachungsdaten.
     */
    /** Datenbeschreibung zum Senden der Verzeichnisberwachungsdaten. */
    private DataDescription _datenbeschreibungVerzeichnisUeberwachung;

    /**
     * ClientDavInteface.
     */
    /** ClientDavInteface. */
    private ClientDavInterface _dav;

    /**
     * SystemObjekt Verzeichnisberwachung.
     */
    private SystemObject _systemObjectVerzeichnisUeberwachung;

    /** Typ des Systemobjekte fr den BASt-Band Import/Export. */
    private String _typBAStBand;
    /** SystemObjekt Verzeichnisberwachung. */
    private SystemObject _soVerzeichnisUeberwachung;

    //~ KONSTRUKTOREN  (und vom Konstruktor verwendete Methoden) ==============

@@ -115,36 +92,59 @@ public class DavKommunikation implements ClientSenderInterface {
     * @param typBAStBand Typ des Systemobjekte fr den BASt-Band Import/Export.
     */
    public DavKommunikation(String typBAStBand) {
        _typBAStBand = typBAStBand;

        // Initialisiere DaV-Daten:
        _soVerzeichnisUeberwachung = _dav.getDataModel().getObject(typBAStBand);

        AttributeGroup attributgruppeStatus = _dav.getDataModel().getAttributeGroup(ATG_VEREICHNISUEBERWACHUNG);
        Aspect         aspektZustand        = _dav.getDataModel().getAspect(ASP_ZUSTAND);

        _datenbeschreibungVerzeichnisUeberwachung = new DataDescription(attributgruppeStatus, aspektZustand);
    }

    //~ METHODEN ==============================================================

    /** Abmelden vom Datenverteiler. */
    public void abmeldenDaVSenderBAStStatus() {
        _dav.unsubscribeSender(this, _systemObjectVerzeichnisUeberwachung, _datenbeschreibungVerzeichnisUeberwachung);
    /**
     * Abmelden vom Datenverteiler.
     */
    private void abmeldenAlsDaVSender() {
        _dav.unsubscribeSender(this, _soVerzeichnisUeberwachung, _datenbeschreibungVerzeichnisUeberwachung);
    }

    /**
     * Anmeldung beim Datenverteiler als Sender fr den Status bzgl. Senden der BASt-Band Daten.
     *
     * @param dateiName Dateiname, fr den die Anmeldung erfolgt (nur fr die Debugausgabe)
     */
    public void anmeldenDaVSenderFTPVerzeichnisinformation(String dateiName) {
        AttributeGroup attributgruppeStatus;
        Aspect         aspektZustand;
        SenderRole     senderRolle = SenderRole.sender();

    private void anmeldenAlsDavSender(String dateiName) {
        _dav = verbindeMitDav();
        _systemObjectVerzeichnisUeberwachung      = _dav.getDataModel().getObject(_typBAStBand);
        attributgruppeStatus                      = _dav.getDataModel().getAttributeGroup(ATG_VEREICHNISUEBERWACHUNG);
        aspektZustand                             = _dav.getDataModel().getAspect(ASP_ZUSTAND);
        _datenbeschreibungVerzeichnisUeberwachung = new DataDescription(attributgruppeStatus, aspektZustand);

        // Anmelden zum Senden der Daten
        subscribe(_systemObjectVerzeichnisUeberwachung, _datenbeschreibungVerzeichnisUeberwachung, senderRolle);
        subscribe(_soVerzeichnisUeberwachung, _datenbeschreibungVerzeichnisUeberwachung, SenderRole.sender());

        //
        debug.info("Die Anmeldung beim Datenverteiler zum Senden der Verzeichnisinformationsdaten ist erfolgt fuer die Datei: " + dateiName);
    }

    /**
     * Die Methode bestimmt das BASt-Band Format abhngig vom berwachungsverzeichnis.
     *
     * @param ueberwachungsVerezichnis  berwachungsverzeichnis.
     *
     * @return integer Zahl die das Format reprsentiert. Return Wert von 0 entspricht dem BASt-Band Format 2004,
     * Return Wert von 5 entspricht dem BASt-Band Format VerkehrGeschwindigkeit2007. Sollten beide
     * Formate nicht mit dem bergebenem bereinstimmten wird -1 retuniert.
     */
    private int bestimmeBastFormat(String ueberwachungsVerezichnis) {
        if (ueberwachungsVerezichnis.contains("Verkehr_Menge_2004")) {
            return 0;
        } else if (ueberwachungsVerezichnis.contains("Verkehr_Geschwindigkeit_2007")) {
            return 5;
        } else {
            return -1;
        }
    }

    // @Override
    public void dataRequest(SystemObject systemObject, DataDescription dataDescription, byte b) {}

@@ -158,6 +158,8 @@ public class DavKommunikation implements ClientSenderInterface {
    //~ METHODEN ==============================================================

    /**
     * TODO Datenformat!
     *
     * Die Methode sendet das Verzeichnis samt Datei.
     *
     * @param dateiName                  Dateiname.
@@ -167,23 +169,16 @@ public class DavKommunikation implements ClientSenderInterface {
     * @param ftpPassivModus Stellt fest, ob passive FTP-Verbindung aufgebaut werden soll.
     * @param bastFormat  BASt-Format.
     */
    public void sendeVerzeichnisUeberwachungsDatenDaV(String dateiName, String url, String user, String passwd, boolean ftpPassivModus, int bastFormat) {
    private void sendeDatenDaV(String dateiName, String url, String user, String passwd, boolean ftpPassivModus, int bastFormat) {
        String         modus                       = ftpPassivModus ? "ja" : "nein";
        String         allInfosAlsString           = String.format("%s@%s@%s@%s@%s@%s@", dateiName, url, user, passwd, modus, bastFormat);
        AttributeGroup atgVerzeichnisUeberwachung  = _dav.getDataModel().getAttributeGroup(ATG_VEREICHNISUEBERWACHUNG);
        Aspect         aspZustand                 = _dav.getDataModel().getAspect(ASP_ZUSTAND);

        _systemObjectVerzeichnisUeberwachung = _dav.getDataModel().getObject(_typBAStBand);

        Data           dataVDatenLangZeitIntervall = _dav.createData(atgVerzeichnisUeberwachung);

        _datenbeschreibungVerzeichnisUeberwachung = new DataDescription(atgVerzeichnisUeberwachung, aspZustand);

        long           zeitstempel                 = Calendar.getInstance().getTimeInMillis();

        dataVDatenLangZeitIntervall.getTextValue("ImportDatei").setText(allInfosAlsString);

        ResultData resultDate = new ResultData(_systemObjectVerzeichnisUeberwachung, _datenbeschreibungVerzeichnisUeberwachung, zeitstempel, dataVDatenLangZeitIntervall);
        ResultData resultDate = new ResultData(_soVerzeichnisUeberwachung, _datenbeschreibungVerzeichnisUeberwachung, zeitstempel, dataVDatenLangZeitIntervall);

        try {
            _dav.sendData(resultDate);
@@ -193,6 +188,33 @@ public class DavKommunikation implements ClientSenderInterface {
        }
    }

    /**
     * TODO
     *
     * Die Methode sendet das Verzeichnis samt Datei.
     *
     * @param dateiName  Dateiname mit dem Path relativ zum Server-Root-Ordner. //TODO Path prfen!!!
     * @param ueberwachungsVerezichnis  berwachungsverzeichnis.
     * @param url URL.
     * @param user  FTP user.
     * @param passwd  FTP login.
     * @param ftpPassivModus Stellt fest, ob passive FTP-Verbindung aufgebaut werden soll.
     */
    public void sendeVerzeichnisUeberwachungsDaVDaten(String dateiName, String ueberwachungsVerezichnis, String url, String user, String passwd, boolean ftpPassivModus) {
        anmeldenAlsDavSender(dateiName);

        int bastFormat = bestimmeBastFormat(ueberwachungsVerezichnis);

        if (bastFormat == -1) {
            String infoText = "Das berwachungsverzeichnis ist nicht korrekt, bitte berprfen Sie ihre Angaben.";

            debug.error(infoText);
        } else {
            sendeDatenDaV(dateiName, url, user, passwd, ftpPassivModus, bastFormat);
            abmeldenAlsDaVSender();
        }
    }

    /**
     * Anmeldung beim Datenverteiler.
     * @param systemObjectVerzeichnisUeberwachung  SystemObject fr die Verzeichnisberwachung.
@@ -211,11 +233,13 @@ public class DavKommunikation implements ClientSenderInterface {
    }

    /**
     * TODO DaV Zugangsdaten?
     *
     * Diese Methode verbindet mit dem Datenverteiler.
     *
     * @return ClientDavInterface.
     */
    protected ClientDavInterface verbindeMitDav() {
    private ClientDavInterface verbindeMitDav() {
        if (_dav != null) {
            return _dav;
        } else {
@@ -223,7 +247,7 @@ public class DavKommunikation implements ClientSenderInterface {
                _dav = new ClientDavConnection();
            }
            catch (MissingParameterException e) {
                e.printStackTrace();
                debug.error("ClientDavInterfacefehler: " + e.toString(), e);
            }

            // IP setzen
@@ -237,10 +261,10 @@ public class DavKommunikation implements ClientSenderInterface {
                _dav.connect();
            }
            catch (CommunicationError e) {
                debug.error("Kommunikationsfehler: " + e.toString());
                debug.error("Kommunikationsfehler: " + e.toString(), e);
            }
            catch (ConnectionException e) {
                debug.error("Verbindungsausnahmefehler: " + e.toString());
                debug.error("Verbindungsausnahmefehler: " + e.toString(), e);
            }

            // Benutzer und Passwort setzen
@@ -248,11 +272,11 @@ public class DavKommunikation implements ClientSenderInterface {
                _dav.login(_daVBenutzer, _daVPasswort);
            }
            catch (InconsistentLoginException e) {
                debug.error("Falsche Zugangsdaten zum DaV: " + e.toString());
                debug.error("Falsche Zugangsdaten zum DaV: " + e.toString(), e);
                System.exit(-2);
            }
            catch (CommunicationError e) {
                debug.error("Kommunikationsfehler bei bergabe der Zugangsdaten: " + e.toString());
                debug.error("Kommunikationsfehler bei bergabe der Zugangsdaten: " + e.toString(), e);
                System.exit(-2);
            }

@@ -262,4 +286,4 @@ public class DavKommunikation implements ClientSenderInterface {
}


//~Formatiert mit 'inovat Kodierkonvention' am 06.08.12
//~Formatiert mit 'inovat Kodierkonvention' am 14.06.13
+23 −31
Original line number Diff line number Diff line
@@ -148,22 +148,6 @@ public class FTPKommunikation {
        }
    }

    /**
     * Die Methode bestimmt das BASt-Band Format.
     * @return integer Zahl die das Format repräsentiert. Return Wert von 0 entspricht dem BASt-Band Format 2004,
     * Return Wert von 5 entspricht dem BASt-Band Format VerkehrGeschwindigkeit2007. Sollten beide
     * Formate nicht mit dem übergebenem übereinstimmten wird -1 retuniert.
     */
    private int bestimmeBastFormat() {
        if (_ueberwachungsVerezichnis.contains("Verkehr_Menge_2004")) {
            return 0;
        } else if (_ueberwachungsVerezichnis.contains("Verkehr_Geschwindigkeit_2007")) {
            return 5;
        } else {
            return -1;
        }
    }

    /**
     * Die Methode wechselt in das Exportverzeichnis fr den gestarteten Export.
     */
@@ -293,29 +277,37 @@ public class FTPKommunikation {
    public void ueberwacheVerzeichnis() {
        if (_ftpClient.isConnected()) {
            try {

                // ---------------------------------------------------------------
                // Ermittle alle Dateien im FTP-berwachungs-Verzeichnis:
                // ---------------------------------------------------------------
                String[] alleFiles = _ftpClient.listNames();

                if (alleFiles != null) {

                    // ---------------------------------------------------------------
                    // Bearbeite alle FTP-Dateien:
                    // ---------------------------------------------------------------
                    for (String dateiName : alleFiles) {
                        if ((!dateiName.endsWith(Verzeichnisueberwachung.LOCK_DATEI)) && (dateiName.endsWith(Verzeichnisueberwachung.BEARBEITUNGS_DATEI))) {

                        // ---------------------------------------------------------------
                        // Falls Bearbeitungs-Datei --->
                        // verschiebe die in FTP-Verzeichnis _verschiebeVerzeichnis:
                        // ---------------------------------------------------------------
                        if (dateiName.endsWith(Verzeichnisueberwachung.BEARBEITUNGS_DATEI)) {
                            if (downloadFileImVerschiebeverzeichnis(dateiName)) {
                                deleteAlteDatei(dateiName);
                            }
                        } else if (!dateiName.endsWith(Verzeichnisueberwachung.LOCK_DATEI) && (!dateiName.endsWith(Verzeichnisueberwachung.BEARBEITUNGS_DATEI))) {
                            DavKommunikation davKomm = new DavKommunikation(_typBAStBand);

                            davKomm.anmeldenDaVSenderFTPVerzeichnisinformation(dateiName);

                            int bastFormat = bestimmeBastFormat();
                        }

                            if (bastFormat == -1) {
                                String infoText = "Das Überwachungsverzeichnis ist nicht korrekt, bitte überprüfen Sie ihre Angaben.";
                        // ---------------------------------------------------------------
                        // Falls nicht Bearbeitungs-Datei und nicht Lock-Datei --->
                        // Sende berwachungsdaten fr die Datei an DaV:
                        // ---------------------------------------------------------------
                        else if (!dateiName.endsWith(Verzeichnisueberwachung.LOCK_DATEI) && (!dateiName.endsWith(Verzeichnisueberwachung.BEARBEITUNGS_DATEI))) {
                            DavKommunikation davKomm = new DavKommunikation(_typBAStBand);

                                debug.error(infoText);
                            } else {
                                davKomm.sendeVerzeichnisUeberwachungsDatenDaV(dateiName, _url, _user, _passwd, _ftpPassivModus, bastFormat);
                                davKomm.abmeldenDaVSenderBAStStatus();
                            }
                            davKomm.sendeVerzeichnisUeberwachungsDaVDaten(dateiName, _ueberwachungsVerezichnis, _url, _user, _passwd, _ftpPassivModus);
                        }
                    }
                }
@@ -368,4 +360,4 @@ public class FTPKommunikation {
}


//~Formatiert mit 'inovat Kodierkonvention' am 13.06.13
//~Formatiert mit 'inovat Kodierkonvention' am 14.06.13
+23 −40
Original line number Diff line number Diff line
@@ -32,9 +32,7 @@ import java.util.List;
//~ KLASSEN ===================================================================

/**
 * DOC: Kurzbeschreibung.
 * <p/>
 * DOC: Langbeschreibung.
 * Die Klasse dient zur Verwaltung der gesamten SFTP Kommunikation.
 *
 * @author inovat, innovative systeme - verkehr - tunnel - technik
 * @author Liliya Givorgizova (LG)
@@ -56,9 +54,6 @@ public class SFTPKommunikation {
    /** Port des SFTP-Servers. */
    private int _port;

    /** Temporre lokale Verzeichnis auf dem die Dateien kurz abgelebt werden. */
    private String _tempVerzeichnis;

    /** Typ des Systemobjekte fr den BASt-Band Import/Export. */
    private String _typBAStBand;

@@ -86,9 +81,8 @@ public class SFTPKommunikation {
     * @param typBAStBand              Typ des Systemobjekte fr den BASt-Band Import/Export.
     * @param ueberwachungsVerzeichnis das zu berwachende Verzeichnis.
     * @param verschiebeVerzeichnis    das Verzeichnis, in das die Dateien nach erfolgreichem Import verschoben werden.
     * @param tempVerzeichnis          temporre Verzeichnis.
     */
    public SFTPKommunikation(String url, int port, String user, String passwd, String typBAStBand, String ueberwachungsVerzeichnis, String verschiebeVerzeichnis, String tempVerzeichnis) {
    public SFTPKommunikation(String url, int port, String user, String passwd, String typBAStBand, String ueberwachungsVerzeichnis, String verschiebeVerzeichnis) {
        _url                      = url;
        _port                     = port;
        _user                     = user;
@@ -96,16 +90,7 @@ public class SFTPKommunikation {
        _typBAStBand              = typBAStBand;
        _ueberwachungsVerezichnis = ueberwachungsVerzeichnis;
        _verschiebeVerzeichnis    = verschiebeVerzeichnis;
        _tempVerzeichnis          = tempVerzeichnis;

        // TODO
        try {

            // aktualisiereVerbindung();
        }
        catch (Exception e) {
            debug.warning("Die Verbindung zum FTP-Server konnte nicht erstellt werden.", e);
        }
    }

    //~ METHODEN ==============================================================
@@ -136,9 +121,9 @@ public class SFTPKommunikation {
    public void ueberwacheVerzeichnis() {

        // TODO
        // -----------------------------------------
        // ---------------------------------------------------------------
        // Erstelle die SFTP-Verbindung:
        // -----------------------------------------
        // ---------------------------------------------------------------
        Session session;

        try {
@@ -151,9 +136,9 @@ public class SFTPKommunikation {

        if (session != null) {

            // -----------------------------------------
            // ---------------------------------------------------------------
            // Ermittle alle Dateien im SFTP-berwachungs-Verzeichnis:
            // -----------------------------------------
            // ---------------------------------------------------------------
            List<String> alleDateien = SFTPFunktionen.ermittleDateienImSFTPOrdner(session, _ueberwachungsVerezichnis);

            if (alleDateien == null) {
@@ -161,47 +146,45 @@ public class SFTPKommunikation {
                alleDateien = new ArrayList<String>();
            }

            // -----------------------------------------
            // ---------------------------------------------------------------
            // Bearbeite alle SFTP-Dateien:
            // -----------------------------------------
            // ---------------------------------------------------------------
            for (String dateiSftp : alleDateien) {
                String dateiSftpMitPfad = ermittleSftpDateiPfad(dateiSftp, _ueberwachungsVerezichnis);

                // -----------------------------------------
                // ---------------------------------------------------------------
                // Falls Bearbeitungs-Datei --->
                // verschiebe die in SFTP-Verzeichnis _verschiebeVerzeichnis:
                // -----------------------------------------
                // ---------------------------------------------------------------
                if (dateiSftp.endsWith(Verzeichnisueberwachung.BEARBEITUNGS_DATEI)) {
                    String    alt = ermittleSftpDateiPfad(dateiSftp, _ueberwachungsVerezichnis);
                    String    neu = ermittleSftpDateiPfad(dateiSftp, _verschiebeVerzeichnis);
                    Exception e   = SFTPFunktionen.verschiebeSFTPDatei(session, alt, neu);
                    Exception e   = SFTPFunktionen.verschiebeSFTPDatei(session, dateiSftpMitPfad, neu);

                    if (e != null) {
                        debug.warning(String.format("Datei <%s> kann nicht in %s verschiebt bzw. umbenannt werden:\n%s", alt, neu, e.getLocalizedMessage()), e.getStackTrace());
                        debug.warning(String.format("Datei <%s> kann nicht in %s verschiebt bzw. umbenannt werden:\n%s", dateiSftpMitPfad, neu, e.getLocalizedMessage()), e.getStackTrace());
                    }
                }

                // -----------------------------------------
                // ---------------------------------------------------------------
                // Falls nicht Bearbeitungs-Datei und nicht Lock-Datei --->
                // TODO
                // DaV-Eintrag:
                // -----------------------------------------
                // Sende berwachungsdaten fr die Datei an DaV:
                // ---------------------------------------------------------------
                else if (!dateiSftp.endsWith(Verzeichnisueberwachung.LOCK_DATEI)) {

                    //
                }
                    // TODO testen (mit/ohne Pfad):
                    DavKommunikation davKomm = new DavKommunikation(_typBAStBand);

                // -----------------------------------------
                    davKomm.sendeVerzeichnisUeberwachungsDaVDaten(dateiSftpMitPfad, _ueberwachungsVerezichnis, _url, _user, _passwd, false);
                }
            }

            // ..
            //
            // -----------------------------------------
            // ---------------------------------------------------------------
            // Terminiere die SFTP-Verbindung:
            // -----------------------------------------
            // ---------------------------------------------------------------
            session.disconnect();
        }
    }
}


//~Formatiert mit 'inovat Kodierkonvention' am 13.06.13
//~Formatiert mit 'inovat Kodierkonvention' am 14.06.13
+2 −4
Original line number Diff line number Diff line
@@ -140,7 +140,7 @@ public class Verzeichnisueberwachung implements Runnable, StandardApplication {

        // SFTP:
        else {
            _sftpKommunikation = new SFTPKommunikation(_url, _port, _user, _passwd, _typBAStBand, _zuUeberwachendeVerzeichnis, _verschiebeVerzeichnis, _tempVerzeichnis);
            _sftpKommunikation = new SFTPKommunikation(_url, _port, _user, _passwd, _typBAStBand, _zuUeberwachendeVerzeichnis, _verschiebeVerzeichnis);
        }

        starteThread();
@@ -327,8 +327,6 @@ public class Verzeichnisueberwachung implements Runnable, StandardApplication {

                // SFTP:
                else {

                    // TODO
                    _sftpKommunikation.ueberwacheVerzeichnis();
                }
            }
@@ -368,4 +366,4 @@ public class Verzeichnisueberwachung implements Runnable, StandardApplication {
}


//~Formatiert mit 'inovat Kodierkonvention' am 13.06.13
//~Formatiert mit 'inovat Kodierkonvention' am 14.06.13