Commit beca98aa authored by Christian Kniss's avatar Christian Kniss

Vorbereitung Übernahme GradleUmstellung in develop

parent e0e1084b
#Sat Feb 03 08:32:55 CET 2018
gradle.version=4.0
This diff is collapsed.
/*
* Copyright (c) 2010-2011 by inovat, innovative systeme - verkehr - tunnel - technik, Dipl.-Ing. H. C. Kniss
*
* This file is part of de.inovat.kex.ftp.DavKommunikation
*
* de.inovat.kex.ftp.DavKommunikation is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* de.inovat.kex.ftp.DavKommunikation 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.
* <p>
* You should have received a copy of the GNU General Public License
* along with de.inovat.kex.ftp.DavKommunikation; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* Contact Information:
* inovat, Dipl.-Ing. H. C. Kniss
* Koelner Strasse 30
* D-50859 Koeln
* +49 (0)2234 4301 800
* info@invat.de
* www.inovat.de
*/
package de.inovat.kex.ftp;
//~ NICHT JDK IMPORTE =========================================================
import de.bsvrz.dav.daf.main.*;
import de.bsvrz.dav.daf.main.config.*;
import de.bsvrz.sys.funclib.debug.Debug;
import java.util.Calendar;
//~ JDK IMPORTE ===============================================================
//~ KLASSEN ===================================================================
/**
* Die Klasse dient verwaltet die Datenverteiler Kommunikation. Das Anmelden, Abmelden und Senden der Daten.
* <p/>
*
* @author inovat, innovative systeme - verkehr - tunnel - technik
* @author Dagmar Rostek (DR)
* @version $Revision$ / $Date$ / ($Author$)
*/
public class DavKommunikation implements ClientSenderInterface {
/** Aspekt Zustand. */
private static final String ASP_ZUSTAND = "asp.zustand";
/** Attributgruppe bastImportVerzeichnisberwachung. */
private static final String ATG_VEREICHNISUEBERWACHUNG = "atg.bastImportVerzeichnisUeberwachung";
/** DebugLogger fr Debug-Ausgaben. */
private static final Debug debug = Debug.getLogger();
//~ FELDER ================================================================
/** AttributeGroup der Verzeichnisberwachungsdaten. */
private AttributeGroup _atgVerzeichnisUeberwachung;
/** Datenbeschreibung zum Senden der Verzeichnisberwachungsdaten. */
private DataDescription _datenbeschreibungVerzeichnisUeberwachung;
/** ClientDavInteface. */
private ClientDavInterface _dav;
/** SystemObjekt Verzeichnisberwachung. */
private SystemObject _soVerzeichnisUeberwachung;
//~ KONSTRUKTOREN (und vom Konstruktor verwendete Methoden) ==============
/**
* Erstelle Instanz der Klasse.
*
* @param dav ClientDavInterface.
* @param typBAStBand Typ des Systemobjekte fr den BASt-Band Import/Export.
*/
public DavKommunikation(ClientDavInterface dav, String typBAStBand) {
_dav = dav;
// Initialisiere DaV-Daten:
_soVerzeichnisUeberwachung = _dav.getDataModel().getObject(typBAStBand);
_atgVerzeichnisUeberwachung = _dav.getDataModel().getAttributeGroup(ATG_VEREICHNISUEBERWACHUNG);
Aspect aspektZustand = _dav.getDataModel().getAspect(ASP_ZUSTAND);
_datenbeschreibungVerzeichnisUeberwachung = new DataDescription(_atgVerzeichnisUeberwachung, aspektZustand);
}
//~ METHODEN ==============================================================
/**
* 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)
*/
private void anmeldenAlsDavSender(String dateiName) {
// Anmelden zum Senden der Daten
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) {}
//~ GET METHODEN ==========================================================
// @Override
public boolean isRequestSupported(SystemObject systemObject, DataDescription dataDescription) {
return false;
}
//~ METHODEN ==============================================================
/**
* Die Methode sendet das Verzeichnis samt Datei.
*
* @param dateiName Dateiname mit dem Pfad relativ zum Server-Root-Ordner.
* @param istFtp Definiert den ServerTyp: FTP (true) oder SFTP (false).
* @param url URL.
* @param port Port.
* @param user FTP user.
* @param passwd FTP login.
* @param ftpPassivModus Stellt fest, ob passive FTP-Verbindung aufgebaut werden soll.
* @param bastFormat BASt-Format.
*/
private void sendeDavDaten(String dateiName, boolean istFtp, String url, int port, String user, String passwd, boolean ftpPassivModus, int bastFormat) {
// DaV-Datenformat:
String passivModus = ftpPassivModus ? "ja" : "nein";
String serverTyp = istFtp ? "FTP" : "SFTP";
String allInfosAlsString = String.format("%s@%s@%s@%s@%s@%s@%s@%s@", dateiName, url, port, user, passwd, passivModus, bastFormat, serverTyp);
Data dataVDatenLangZeitIntervall = _dav.createData(_atgVerzeichnisUeberwachung);
long zeitstempel = Calendar.getInstance().getTimeInMillis();
dataVDatenLangZeitIntervall.getTextValue("ImportDatei").setText(allInfosAlsString);
ResultData resultDate = new ResultData(_soVerzeichnisUeberwachung, _datenbeschreibungVerzeichnisUeberwachung, zeitstempel, dataVDatenLangZeitIntervall);
try {
_dav.sendData(resultDate);
}
catch (SendSubscriptionNotConfirmed sendSubscriptionNotConfirmed) {
debug.warning("Die Daten konnten nicht versendet werden! Bitte kontrollieren Sie ob der BASt-Band Prozess luft! " + sendSubscriptionNotConfirmed);
}
}
/**
* Die Methode sendet das Verzeichnis samt Datei.
*
* @param dateiName Dateiname mit dem Pfad relativ zum Server-Root-Ordner.
* @param ueberwachungsVerezichnis berwachungsverzeichnis um BastBandFormat zu bestimmen.
* @param istFtp Definiert den ServerTyp: FTP (true) oder SFTP (false).
* @param url URL.
* @param port Port.
* @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, boolean istFtp, String url, int port, 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 {
sendeDavDaten(dateiName, istFtp, url, port, user, passwd, ftpPassivModus, bastFormat);
abmeldenAlsDaVSender();
}
}
/**
* Anmeldung beim Datenverteiler.
* @param systemObjectVerzeichnisUeberwachung SystemObject fr die Verzeichnisberwachung.
* @param datenbeschreibungVerzeichnisUeberwachung Datenbeschreibung.
* @param senderRolle Senderrolle.
*/
private void subscribe(SystemObject systemObjectVerzeichnisUeberwachung, DataDescription datenbeschreibungVerzeichnisUeberwachung, SenderRole senderRolle) {
try {
_dav.subscribeSender(this, systemObjectVerzeichnisUeberwachung, datenbeschreibungVerzeichnisUeberwachung, senderRolle);
}
catch (OneSubscriptionPerSendData oneSubscriptionPerSendData) {
String infoText = "Es konnte keine Anmeldung beim Datenverteiler vollzogen werden." + oneSubscriptionPerSendData;
debug.error(infoText);
}
}
}
//~Formatiert mit 'inovat Kodierkonvention' am 27.06.13
This diff is collapsed.
This diff is collapsed.
/*
* Copyright 2008 by inovat, Dipl.-Ing. H. C. Kni
* ALL RIGHTS RESERVED.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL inovat OR ITS CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCL., BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCL.
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package de.inovat.kex.ftp;
//~ NICHT JDK IMPORTE =========================================================
import com.jcraft.jsch.Session;
import de.bsvrz.dav.daf.main.ClientDavInterface;
import de.bsvrz.sys.funclib.debug.Debug;
import java.util.ArrayList;
import java.util.List;
//~ JDK IMPORTE ===============================================================
//~ KLASSEN ===================================================================
/**
* Die Klasse dient zur Verwaltung der gesamten SFTP Kommunikation.
*
* @author inovat, innovative systeme - verkehr - tunnel - technik
* @author Liliya Givorgizova (LG)
* @version $Revision: 0 $ / $Date: neu $ / ($Author: HCK $)
*/
public class SFTPKommunikation {
/** TODO Fileseparator auf dem Server. */
private final static String FILESEPARATOR_SERVER = "/";
/** DebugLogger fr Debug-Ausgaben. */
private static final Debug debug = Debug.getLogger();
//~ FELDER ================================================================
/** ClientDavInteface. */
private ClientDavInterface _dav;
/** Passwort zum Login auf den SFTP-Server. */
private String _passwd;
/** Port des SFTP-Servers. */
private int _port;
/** Typ des Systemobjekte fr den BASt-Band Import/Export. */
private String _typBAStBand;
/** Verzeichnis das berwacht wird. */
private String _ueberwachungsVerezichnis;
/** URL des SFTP-Servers. */
private String _url;
/** User fr den Login auf den SFTP-Server. */
private String _user;
/** Verzeichnis in das die Dateien nach erfolgreichem Import verschoben werden. */
private String _verschiebeVerzeichnis;
//~ KONSTRUKTOREN (und vom Konstruktor verwendete Methoden) ==============
/**
* Konstruktor.
*
* @param dav ClientDavInterface.
* @param url URL des SFTP-Servers.
* @param port Port des SFTP-Servers.
* @param user User des SFTP-Servers.
* @param passwd Passwort fr den Login auf den SFTP-Server.
* @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.
*/
public SFTPKommunikation(ClientDavInterface dav, String url, int port, String user, String passwd, String typBAStBand, String ueberwachungsVerzeichnis, String verschiebeVerzeichnis) {
_dav = dav;
_url = url;
_port = port;
_user = user;
_passwd = passwd;
_typBAStBand = typBAStBand;
_ueberwachungsVerezichnis = ueberwachungsVerzeichnis;
_verschiebeVerzeichnis = verschiebeVerzeichnis;
}
//~ METHODEN ==============================================================
/**
* Ermittle SFTP-Datei-Pfad.
*
* @param sftpDateiName SFTP-Dateiname.
* @param sftpOrdner SFTP-Pfad, wo die Datei liegt.
*
* @return SFTP-Datei-Pfad.
*/
private String ermittleSftpDateiPfad(String sftpDateiName, String sftpOrdner) {
if (sftpOrdner.isEmpty()) {
return sftpDateiName;
} else {
if (sftpOrdner.endsWith(FILESEPARATOR_SERVER)) {
return String.format("%s%s", sftpOrdner, sftpDateiName);
} else {
return String.format("%s%s%s", sftpOrdner, FILESEPARATOR_SERVER, sftpDateiName);
}
}
}
/**
* Die Methode zur berwachung des Verzeichnisses.
*/
public void ueberwacheVerzeichnis() {
// ---------------------------------------------------------------
// Erstelle die SFTP-Verbindung:
// ---------------------------------------------------------------
Session session;
try {
session = SFTPFunktionen.verbindeMitSFTPServer(_url, _port, _user, _passwd);
}
catch (Exception e) {
session = null;
debug.warning(String.format("Fehler bei der Verbindung mit dem SFTP-Server:\n%s", e.getLocalizedMessage()), e.getStackTrace());
}
if (session != null) {
// ---------------------------------------------------------------
// Ermittle alle Dateien im SFTP-berwachungs-Verzeichnis:
// ---------------------------------------------------------------
List<String> alleDateien = SFTPFunktionen.ermittleDateienImSFTPOrdner(session, _ueberwachungsVerezichnis);
if (alleDateien == null) {
debug.warning(String.format("Die Dateien knnen nicht aus dem berwachungsverzeichnis <%s> ermittelt werden", _ueberwachungsVerezichnis));
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 neu = ermittleSftpDateiPfad(dateiSftp, _verschiebeVerzeichnis);
Exception e = SFTPFunktionen.verschiebeSFTPDatei(session, dateiSftpMitPfad, neu);
if (e != null) {
debug.warning(String.format("Datei <%s> kann nicht in %s verschoben bzw. umbenannt werden:\n%s", dateiSftpMitPfad, neu, e.getLocalizedMessage()), e.getStackTrace());
}
}
// ---------------------------------------------------------------
// Falls nicht Bearbeitungs-Datei und nicht Lock-Datei --->
// Sende berwachungsdaten fr die Datei an DaV:
// ---------------------------------------------------------------
else if (!dateiSftp.endsWith(Verzeichnisueberwachung.LOCK_DATEI)) {
DavKommunikation davKomm = new DavKommunikation(_dav, _typBAStBand);
davKomm.sendeVerzeichnisUeberwachungsDaVDaten(dateiSftp, _ueberwachungsVerezichnis, false, _url, _port, _user, _passwd, false);
}
}
// ---------------------------------------------------------------
// Terminiere die SFTP-Verbindung:
// ---------------------------------------------------------------
session.disconnect();
}
}
}
//~Formatiert mit 'inovat Kodierkonvention' am 27.06.13
Platzhalterdatei, damit Ornderstruktur fuer Gradle in GitLab eingecheckt werden kann (Git ignoriert leere Ordner).
\ No newline at end of file
Platzhalterdatei, damit Ornderstruktur fuer Gradle in GitLab eingecheckt werden kann (Git ignoriert leere Ordner).
\ No newline at end of file
Platzhalterdatei, damit Ornderstruktur fuer Gradle in GitLab eingecheckt werden kann (Git ignoriert leere Ordner).
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment