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

Start ohne Versand

git-svn-id: svn://ntoserver/Datenverteiler/VRZ3/trunk/de.bsvrz.kex.lmstic3@63753 40c0be50-5d29-0410-901d-fb59edb5cafc
parent df29a2d3
......@@ -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;
}
......
......@@ -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());
......
......@@ -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();
// auf Parameter warten
if (!parameterEmpfangen) {
LMSTIC3LogTools.log(debug, LmsMsg.InfoWarteParameter);
synchronized (this) {
parameterEmpfangen = false;
while (run) {
// auf Parameter warten
if (!parameterEmpfangen) {
LMSTIC3LogTools.log(debug, LmsMsg.InfoWarteParameter);
try {
wait();
} catch (final InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
if (isVersandAktiv()) {
parameterEmpfangen = false;
if (!isVersandAktiv()) {
LMSTIC3LogTools.log(debug, LmsMsg.InfoKeinVersand);
continue;
}
ftpclient = new LMSFTPClient(lmsParameter, true);
ftpclient.addListener(this);
} else {
LMSTIC3LogTools.log(debug, LmsMsg.InfoKeinVersand);
}
}
while (run) {
parameterEmpfangen = false;
while (run) {
try {
wait(1000);
if (parameterEmpfangen) {
parameterEmpfangen = false;
restartFtpClient();
wait(1000);
if (parameterEmpfangen) {
break;
}
try {
ueberpruefeMeldungen();
} catch (final TIC3Exception e) {
debug.error(e.getMessage());
}
}
try {
ueberpruefeMeldungen();
} catch (final TIC3Exception e) {
debug.error(e.getMessage());
if (ftpclient != null) {
ftpclient.stopp();
}
} catch (final InterruptedException e) {
/** */
}
} catch (final InterruptedException e) {
/** */
}
if (ftpclient != null) {
ftpclient.stopp();
}
}
}
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);
......
/*
* 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,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();
}
......@@ -31,20 +31,40 @@ import java.util.List;
import de.bsvrz.dav.daf.main.Data;
import de.bsvrz.dav.daf.main.Data.Array;
import de.bsvrz.kex.lmstic3.vew.daten.ExtAdapterIf;
import de.bsvrz.kex.lmstic3.vew.LMSTIC3LogTools;
import de.bsvrz.kex.lmstic3.vew.LmsMsg;
import de.bsvrz.kex.lmstic3.vew.daten.ExterneMeldungsDaten;
import de.bsvrz.kex.lmstic3.vew.daten.ExterneVerkehrsmeldungenAdapterIf;
import de.bsvrz.kex.lmstic3.vew.daten.TMCKonvertierungException;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCEvent;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCEvent.TMCEventType;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCException;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCKoordinate;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCLocation;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCPrioritaet.TMCPrioritaetEnum;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCRichtung.TMCRichtungEnum;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCStatus.TMCStatusEnum;
public class TIC3Converter implements ExtAdapterIf {
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCZustand;
import de.bsvrz.sys.funclib.debug.Debug;
public class TIC3Converter implements ExterneVerkehrsmeldungenAdapterIf {
private ExterneMeldungsDaten daten;
/**
* Konstruktor.
*
* @param meldungsDaten
* {@link ExterneMeldungsDaten}
*/
public TIC3Converter(final ExterneMeldungsDaten meldungsDaten) {
super();
this.daten = meldungsDaten;
}
@Override
public ExterneMeldungsDaten toEXT(final Data davdata, final String id) throws TMCKonvertierungException {
public ExterneMeldungsDaten erzeugeExterneMeldungsdaten(final Data davdata, final String id)
throws TMCKonvertierungException {
final ExterneMeldungsDaten tic3daten = new TIC3MeldungsDaten();
tic3daten.setID(id);
......@@ -64,7 +84,7 @@ public class TIC3Converter implements ExtAdapterIf {
tic3daten.setDatenStartZeit(getZeitStempel(vi, "StartZeit"));
tic3daten.setDatenEndeZeit(getZeitStempel(vi, "EndeZeit"));
TMCStatusEnum stat;
final TMCStatusEnum stat;
try {
stat = TMCStatusEnum.getInstance(vi.getItem("TmcStatus").asUnscaledValue().intValue());
......@@ -174,4 +194,202 @@ public class TIC3Converter implements ExtAdapterIf {
tic3daten.setTMCLokationen(lokationen);
}
@Override
public void erzeugeDAVDaten(final Data davdata) throws TMCKonvertierungException {
Data item = davdata.getItem("TMCID");
item.getTextValue("Datenproduzent").setText(daten.getDatenProduzent());
item.getTextValue("Datenkennung").setText(daten.getDatenKennung());
davdata.getTextValue("Beschreibung").setText(daten.getEreignisBeschreibung());
item = davdata.getItem("TMCDaten");
final Data vi = item.getItem("VerwaltungsInformationen");
try {
daten.getDatenErzeugungsZeit().setDavDaten(vi, "ErzeugungsZeit");
daten.getDatenAktualisierungsZeit().setDavDaten(vi, "AktualisierungsZeit");
daten.getDatenStartZeit().setDavDaten(vi, "StartZeit");
daten.getDatenEndeZeit().setDavDaten(vi, "EndeZeit");
} catch (final TIC3Exception e) {
throw new TMCKonvertierungException(e.getMessage());
}
final TMCStatusEnum stat = daten.getTMCMeldungsStatus();
vi.getItem("TmcStatus").asUnscaledValue().set(stat.getId());
final TMCPrioritaetEnum prio = daten.getTMCMeldungsPrioritaet();
vi.getItem("TmcPrioritaet").asUnscaledValue().set(prio.getId());
vi.getItem("Erzeugungsart").asTextValue().setText("LMS");
final boolean istEreignisInBeidenRichtungen = daten.istEreignisInBeidenRichtungen();
vi.getItem("EreignisInBeidenRichtungen").asUnscaledValue().set(istEreignisInBeidenRichtungen ? 1 : 0);
convertEreignisseToDav(item, daten);
convertVerortungToDav(item, daten);
}
private void convertEreignisseToDav(final Data item, final ExterneMeldungsDaten tic3daten) {
final Data ei = item.getItem("EreignisInformationen");
final List<TMCEvent> tmcEreignisse = tic3daten.getTMCEreignisse();
final Array array = ei.getArray("EreignisDaten");
final List<TMCZustand> okliste = new ArrayList<>();
// Ereignisdaten testweise publizieren, Fehler werden geloggt, nur
// fehlerfreie Daten werden weiter genutzt
if (tmcEreignisse != null) {
final int anzahl = tmcEreignisse.size();
array.setLength(anzahl);
for (int i = 0; i < anzahl; i++) {
final TMCEvent te = tmcEreignisse.get(i);
final TMCZustand ev = getDavEreignisKodierung(te, array.getItem(0));
if (ev != null) {
okliste.add(ev);
}
}
}
final int anzahl = okliste.size();
array.setLength(anzahl);
final TMCZustand ereignisCodeUndefiniert = new TMCZustand("EreignisCode", 0);
final TMCZustand empfehlungsCodeCodeUndefiniert = new TMCZustand("EmpfehlungsCode", 0);
final TMCZustand vorhersageCodeUndefiniert = new TMCZustand("VorhersageCode", 0);
for (int i = 0; i < anzahl; i++) {
try {
final Data eitem = array.getItem(i);
ereignisCodeUndefiniert.setDavDaten(eitem);
empfehlungsCodeCodeUndefiniert.setDavDaten(eitem);
vorhersageCodeUndefiniert.setDavDaten(eitem);
final TMCZustand ev = okliste.get(i);
ev.setDavDaten(eitem);
} catch (final TMCException rdse) {
LMSTIC3LogTools.log(Debug.getLogger(), LmsMsg.WarningFehlerEreignisDaten, rdse.getMessage());
}
}
}
/**
* Bestimmt die DAV-Ereigniskodierung.
*
* @param event
* {@link TMCEvent}
* @param item
* {@link de.bsvrz.dav.daf.main.Data}
* @return {@link TMCZustand}
*/
private TMCZustand getDavEreignisKodierung(final TMCEvent event, final Data item) {
TMCZustand ev;
if (event.getTyp() == TMCEventType.Ereigniscode) {
// Ein TMC-Ereigniscode von TIC3 kann ein Ereignis- oder
// Vorhersagecode sein
// 1. Versuche Ereigniscode (att.rdsEreignisCode)
ev = new TMCZustand("EreignisCode", event.getCode());
try {
ev.setDavDaten(item);
} catch (final TMCException e1) {
// kein Ereigniscode (att.rdsEreignisCode)
// 2. Versuche VorhersageCode (att.rdsVorhersageCode)
ev = new TMCZustand("VorhersageCode", event.getCode());
try {
ev.setDavDaten(item);
} catch (final TMCException e2) {
LMSTIC3LogTools.log(Debug.getLogger(), LmsMsg.WarningFehlerEreignisDaten,
"Der Code '" + event.getCode()
+ "' kann weder auf einen Ereignis- noch Vorhersagecode abgebildet werden!");
return null;
}
}
} else if (event.getTyp() == TMCEventType.Empfehlungscode) {
ev = new TMCZustand("EmpfehlungsCode", event.getCode());
try {
ev.setDavDaten(item);
} catch (final TMCException e) {
LMSTIC3LogTools.log(Debug.getLogger(), LmsMsg.WarningFehlerEreignisDaten, e.getMessage());
return null;
}
} else {
LMSTIC3LogTools.log(Debug.getLogger(), LmsMsg.WarningFehlerEreignisDaten, "TMCEventType unbekannt");
return null;
}
return ev;
}
private void convertVerortungToDav(final Data item, final ExterneMeldungsDaten tic3daten) {
final Data ei = item.getItem("VerortungsInformationen");
final List<TMCLocation> lokationen = tic3daten.getTMCLokationen();
if (lokationen != null && lokationen.size() > 0) {
final Array array = ei.getArray("LokationsDaten");
array.setLength(lokationen.size());
for (int i = 0; i < lokationen.size(); i++) {
setLokation(lokationen.get(i), array.getItem(i));
}
}
final Data koordinateItem = ei.getItem("Koordinate");
final List<TMCKoordinate> koordinaten = tic3daten.getKoordinaten();
if (koordinaten != null && !koordinaten.isEmpty()) {
// Die Koordinaten sind in der Meldung in Fahrtrichtung geordnet:
// Wir nehmen die erste.
koordinateItem.getItem("TMCLänge").asScaledValue().set(koordinaten.get(0).getLaenge());
koordinateItem.getItem("TMCBreite").asScaledValue().set(koordinaten.get(0).getBreite());
} else {
koordinateItem.getItem("TMCLänge").asUnscaledValue().setText("undefiniert");
koordinateItem.getItem("TMCBreite").asUnscaledValue().setText("undefiniert");
}
}
private void setLokation(final TMCLocation tmcLocation, final Data item) {
final Integer primaerLokation = tmcLocation.getPrimaerLokation();
if (primaerLokation == null) {
item.getItem("PrimaerLokation").asScaledValue().set(0);
} else {
item.getItem("PrimaerLokation").asScaledValue().set(primaerLokation);
}
final Integer sekundaerLokation = tmcLocation.getSekundaerLokation();
if (sekundaerLokation == null) {
item.getItem("SekundaerLokation").asScaledValue().set(0);
} else {
item.getItem("SekundaerLokation").asScaledValue().set(sekundaerLokation);
}
item.getItem("TMCRichtung").asUnscaledValue().set(tmcLocation.getTmcRichtung().getId());
Double entfernung = tmcLocation.getPrimaerEntfernung();
if (entfernung == null) {
item.getItem("StartOffset").asUnscaledValue().set(0);
} else {
item.getItem("StartOffset").asScaledValue().set(entfernung);
}
entfernung = tmcLocation.getSekundaerEntfernung();
if (entfernung == null) {
item.getItem("EndOffset").asUnscaledValue().set(0);
} else {
item.getItem("EndOffset").asScaledValue().set(entfernung);
}
}
@Override
public boolean hasTmcDaten() {
final List<TMCLocation> lokationen = daten.getTMCLokationen();
final List<TMCKoordinate> koordinaten = daten.getKoordinaten();
return (lokationen != null && lokationen.size() > 0) || (koordinaten != null && koordinaten.size() > 0);
}
}
/*
* 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.daten.tic;
import java.util.ArrayList;
import java.util.List;
import de.bsvrz.dav.daf.main.Data;
import de.bsvrz.dav.daf.main.Data.Array;
import de.bsvrz.kex.lmstic3.vew.LMSTIC3LogTools;
import de.bsvrz.kex.lmstic3.vew.LmsMsg;
import de.bsvrz.kex.lmstic3.vew.daten.ExterneMeldungsDaten;
import de.bsvrz.kex.lmstic3.vew.daten.TMCKonvertierungException;
import de.bsvrz.kex.lmstic3.vew.daten.TmcAdapterIf;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCEvent;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCEvent.TMCEventType;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCException;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCKoordinate;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCLocation;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCPrioritaet.TMCPrioritaetEnum;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCStatus.TMCStatusEnum;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCZustand;
import de.bsvrz.sys.funclib.debug.Debug;
/**
* Konvertierung von externen Daten in TMC-Meldungsdaten.
*
* @author BitCtrl Systems GmbH, Gieseler
* @version $Id$
*/
public class TmcConverter implements TmcAdapterIf {
private ExterneMeldungsDaten tic3daten;
/**
* Konstruktor.
*
* @param tic3daten
* {@link ExterneMeldungsDaten}
*/
public TmcConverter(final ExterneMeldungsDaten tic3daten) {
super();
this.tic3daten = tic3daten;
}
@Override
public void toDAV(final Data davdata) throws TMCKonvertierungException {
Data item = davdata.getItem("TMCID");
item.getTextValue("Datenproduzent").setText(tic3daten.getDatenProduzent());
item.getTextValue("Datenkennung").setText(tic3daten.getDatenKennung());
davdata.getTextValue("Beschreibung").setText(tic3daten.getEreignisBeschreibung());
item = davdata.getItem("TMCDaten");
final Data vi = item.getItem("VerwaltungsInformationen");
try {
tic3daten.getDatenErzeugungsZeit().setDavDaten(vi, "ErzeugungsZeit");
tic3daten.getDatenAktualisierungsZeit().setDavDaten(vi, "AktualisierungsZeit");
tic3daten.getDatenStartZeit().setDavDaten(vi, "StartZeit");
tic3daten.getDatenEndeZeit().setDavDaten(vi, "EndeZeit");
} catch (final TIC3Exception e) {
throw new TMCKonvertierungException(e.getMessage());
}
final TMCStatusEnum stat = tic3daten.getTMCMeldungsStatus();
vi.getItem("TmcStatus").asUnscaledValue().set(stat.getId());
final TMCPrioritaetEnum prio = tic3daten.getTMCMeldungsPrioritaet();
vi.getItem("TmcPrioritaet").asUnscaledValue().set(prio.getId());
vi.getItem("Erzeugungsart").asTextValue().setText("LMS");
final boolean istEreignisInBeidenRichtungen = tic3daten.istEreignisInBeidenRichtungen();
vi.getItem("EreignisInBeidenRichtungen").asUnscaledValue().set(istEreignisInBeidenRichtungen ? 1 : 0);
convertEreignisse(item);
convertVerortung(item);
}
private void convertEreignisse(final Data item) {
final Data ei = item.getItem("EreignisInformationen");
final List<TMCEvent> tmcEreignisse = tic3daten.getTMCEreignisse();
final Array array = ei.getArray("EreignisDaten");
final List<TMCZustand> okliste = new ArrayList<>();
// Ereignisdaten testweise publizieren, Fehler werden geloggt, nur
// fehlerfreie Daten werden weiter genutzt
if (tmcEreignisse != null) {
final int anzahl = tmcEreignisse.size();
array.setLength(anzahl);
for (int i = 0; i < anzahl; i