Commit 3890fc74 authored by Steffen Gieseler's avatar Steffen Gieseler
Browse files

Start ohne Versand

git-svn-id: svn://ntoserver/Datenverteiler/VRZ3/trunk/de.bsvrz.kex.lmstic3@63753 40c0be50-5d29-0410-901d-fb59edb5cafc
parent df29a2d3
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ public class TIC3InfoDateiDaten {
		return meldungen;
	}

	public void addMeldung(TIC3MeldungsDaten meldung) {
	public void addMeldung(final TIC3MeldungsDaten meldung) {
		meldungen.add(meldung);
	}

@@ -55,7 +55,7 @@ public class TIC3InfoDateiDaten {
		return exeption;
	}

	public void setExeption(TIC3InfoDateiException exeption) {
	public void setExeption(final TIC3InfoDateiException exeption) {
		this.exeption = exeption;
	}

+3 −3
Original line number Diff line number Diff line
@@ -63,8 +63,8 @@ import de.bsvrz.kex.lmstic3.vew.LmsMsg;
import de.bsvrz.kex.lmstic3.vew.TMCMeldung;
import de.bsvrz.kex.lmstic3.vew.daten.ExterneMeldung;
import de.bsvrz.kex.lmstic3.vew.daten.TMCKonvertierungException;
import de.bsvrz.kex.lmstic3.vew.daten.tic.TIC3Converter;
import de.bsvrz.kex.lmstic3.vew.daten.tic.TIC3Exception;
import de.bsvrz.kex.lmstic3.vew.daten.tic.TmcConverter;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCException;
import de.bsvrz.sys.funclib.debug.Debug;
import de.bsvrz.sys.funclib.dynobj.DynObjektException;
@@ -222,7 +222,7 @@ public class Meldungserzeugung extends Thread implements ClientReceiverInterface
		final AttributeGroup attributeGroup = dav.getDataModel().getAttributeGroup(TMCMeldung.ATG);
		final Data createData = dav.createData(attributeGroup);

		final TmcConverter conv = new TmcConverter(meldung.getMeldungsDaten());
		final TIC3Converter conv = new TIC3Converter(meldung.getMeldungsDaten());

		if (!conv.hasTmcDaten()) {
			debug.info("Die Meldung '" + meldung.getID()
@@ -231,7 +231,7 @@ public class Meldungserzeugung extends Thread implements ClientReceiverInterface
		}

		try {
			conv.toDAV(createData);
			conv.erzeugeDAVDaten(createData);
		} catch (final TMCKonvertierungException e) {
			debug.warning("Die Meldung '" + meldung.getID() + "' konnte nicht in eine TMC-Meldung konvertiert werden: "
					+ e.getMessage());
+41 −57
Original line number Diff line number Diff line
@@ -170,6 +170,8 @@ public class Meldungskodierer extends Thread
	/** Lock-Objekt. */
	private final Object runLock = new Object();

	private boolean datenAngemeldet;

	/** Run-Flag. */
	private boolean run = true;

@@ -194,8 +196,6 @@ public class Meldungskodierer extends Thread
		this.lms = lms;
		config = dav.getDataModel();
		this.setName(this.getClass().getSimpleName());
		// this.nachrichtenSender.init(dav, "LMS-Meldungsversand",
		// "LMS-Meldungsversand");

		DavDatenModell.getInstanz().setVerbindung((ClientDavConnection) dav);

@@ -226,6 +226,10 @@ public class Meldungskodierer extends Thread
		AttributeGroup attributeGroup = null;
		Aspect aspect = null;

		if (datenAngemeldet) {
			return;
		}

		// Anmeldungen zum Senden und Empfangen.
		try {
			//
@@ -246,9 +250,7 @@ public class Meldungskodierer extends Thread
					+ ") (OT: " + lms.getType().getName() + ")");

			dav.subscribeReceiver(this, objekte, paramEmpfang, new ReceiveOptions(false), // keine
					// Deltas,
					// keine
					// nachgelieferten Daten
					// Deltas, keine nachgelieferten Daten
					ReceiverRole.receiver());

			// Menge TMC-Meldungen anmelden
@@ -285,7 +287,7 @@ public class Meldungskodierer extends Thread
			final DynamicObjectType typ = (DynamicObjectType) config.getType(LMSTIC3.TYP_TMC_MELDUNGEN);
			// typ.addObjectCreationListener(privateListener);
			typ.addInvalidationListener(this);

			datenAngemeldet = true;
		} catch (final OneSubscriptionPerSendData e) {
			debug.error("Daten wurden bereits als Quelle angemeldet: " + dataDescription);
			throw new RuntimeException(e);
@@ -413,75 +415,56 @@ public class Meldungskodierer extends Thread
					try {
						ftpclient.join();
					} catch (final InterruptedException e1) {
						// TODO Auto-generated catch block
						// e1.printStackTrace();
					}
				}
			}
		});

		synchronized (this) {
			synchronized (runLock) {
			try {
				datenAnmeldenDaV();

				parameterEmpfangen = false;

				while (run) {
					// auf Parameter warten
					if (!parameterEmpfangen) {
						LMSTIC3LogTools.log(debug, LmsMsg.InfoWarteParameter);
					synchronized (this) {
						try {
							wait();
						} catch (final InterruptedException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
					}
				}
				if (isVersandAktiv()) {
					ftpclient = new LMSFTPClient(lmsParameter, true);
					ftpclient.addListener(this);
				} else {

					parameterEmpfangen = false;

					if (!isVersandAktiv()) {
						LMSTIC3LogTools.log(debug, LmsMsg.InfoKeinVersand);
				}
						continue;
					}

			parameterEmpfangen = false;
					ftpclient = new LMSFTPClient(lmsParameter, true);
					ftpclient.addListener(this);
					while (run) {
				try {

						wait(1000);
						if (parameterEmpfangen) {
						parameterEmpfangen = false;
						restartFtpClient();
							break;
						}
						try {
							ueberpruefeMeldungen();
						} catch (final TIC3Exception e) {
							debug.error(e.getMessage());
						}
				} catch (final InterruptedException e) {
					/** */
				}
					}

					if (ftpclient != null) {
						ftpclient.stopp();
					}
				}
			} catch (final InterruptedException e) {
				/** */
			}

	private void restartFtpClient() {
		if ((ftpclient != null) && ftpclient.isAlive()) {
			ftpclient.stopp();
			try {
				ftpclient.join();
			} catch (final InterruptedException e1) {
			}
		}

		if (isVersandAktiv()) {
			ftpclient = new LMSFTPClient(lmsParameter, true);
			ftpclient.addListener(this);
		} else {
			debug.info(
					"Es erfolgt kein Versand vom Meldungen an die LMS (der Parameter 'LMSHostRechner' ist nicht gesetzt).");
		}
	}

@@ -600,7 +583,8 @@ public class Meldungskodierer extends Thread
					try {
						meldung.datenvervollstaendigen(lmsParameter);
						final String ticId = meldung.bildeTICId();
						final ExterneMeldungsDaten md = (new TIC3Converter()).toEXT(meldung.getDavData(), ticId);
						final ExterneMeldungsDaten md = (new TIC3Converter(null))
								.erzeugeExterneMeldungsdaten(meldung.getDavData(), ticId);
						md.erzeugeDocumentElement(doc, root);
						meldung.setLetzterVersand(System.currentTimeMillis());
						versendet.add(meldung);
+33 −2
Original line number Diff line number Diff line
/*
 * Segment 2 (KEx), SWE LMS-TIC3
 * Copyright (C) 2016 BitCtrl Systems GmbH 
 * 
 * This library 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 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library 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 Lesser General Public License for more
 * details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this library; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
 *
 * Contact Information:
 * BitCtrl Systems GmbH
 * Weißenfelser Straße 67
 * 04229 Leipzig
 * Phone: +49 341-490670
 * mailto: info@bitctrl.de
 */

package de.bsvrz.kex.lmstic3.vew;

import java.lang.reflect.Field;
@@ -13,9 +39,14 @@ import de.bsvrz.sys.funclib.debug.Debug;
/**
 * Hilfsklasse zum Loggen mittels des Datenverteiler-Loggers.
 *
 * @author
 * @author BitCtrl Systems GmbH, Gieseler
 * @version $Id: $
 */
public final class LMSTIC3LogTools {

	private LMSTIC3LogTools() {
	}

	/**
	 * Gibt die Meldung auf dem Logger aus. Wenn es die Nachricht verlangt, wird
	 * ebenfalls eine Betriebsmeldung versandt. Wenn der Logger {@code null}
@@ -31,7 +62,7 @@ public final class LMSTIC3LogTools {
	 */
	public static void log(final Debug log, final LogNachricht nachricht, final Object... arguments) {
		if (isLogbar(log, nachricht.getLogLevel())) {
			String txt;
			final String txt;
			if (arguments != null) {
				txt = MessageFormat.format(nachricht.toString(), arguments);
			} else {
+29 −3
Original line number Diff line number Diff line
@@ -29,13 +29,13 @@ package de.bsvrz.kex.lmstic3.vew.daten;
import de.bsvrz.dav.daf.main.Data;

/**
 * Interface zur Konvertierung DAV-Daten in externe Daten.
 * Interface zur Konvertierung DAV-Daten in externe Daten und umgekehrt.
 *
 * @author BitCtrl Systems GmbH, Gieseler
 * @version $Id$
 */

public interface ExtAdapterIf {
public interface ExterneVerkehrsmeldungenAdapterIf {

	/**
	 * Konvertiert DAV-Daten in externe Daten.
@@ -48,5 +48,31 @@ public interface ExtAdapterIf {
	 * @throws TMCKonvertierungException
	 *             bei Fehlern
	 */
	ExterneMeldungsDaten toEXT(Data davdata, final String id) throws TMCKonvertierungException;
	ExterneMeldungsDaten erzeugeExterneMeldungsdaten(Data davdata, final String id) throws TMCKonvertierungException;

	/**
	 * Konvertiert die Daten in DAV-Daten.
	 * 
	 * @param davdata
	 *            {@link de.bsvrz.dav.daf.main.Data}
	 * @throws TMCKonvertierungException
	 *             bei Fehlern
	 */
	void erzeugeDAVDaten(Data davdata) throws TMCKonvertierungException;

	/**
	 * Prüft, ob die Meldung TMC-Daten besitzt.
	 * <p>
	 * Das Kriterium ist, dass die Meldung eine Verortung über TMC-Lokationen
	 * oder Koordinaten besitzt, damit sie dargestellt werden kann.
	 * </p>
	 * <p>
	 * Fehlende TMC-Ereigniscodes werden hier nicht herangezogen, da das
	 * Ereignis auch im Meldungstext enthalten ist.
	 * </p>
	 * 
	 * @return <code>true</code> wenn TMC_daten vorhanden, sonst
	 *         <code>false</code>
	 */
	boolean hasTmcDaten();
}
Loading