Commit 35555750 authored by Steffen Gieseler's avatar Steffen Gieseler

Für Meldungen ohne TMC-Locationen werden keine TMC-Meldungsobjekte angelegt

git-svn-id: svn://ntoserver/Datenverteiler/VRZ3/trunk/de.bsvrz.kex.lmstic3@63657 40c0be50-5d29-0410-901d-fb59edb5cafc
parent b17694e3
......@@ -61,6 +61,7 @@ import de.bsvrz.kex.lmstic3.vew.LMSTIC3LogTools;
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.TIC3Exception;
import de.bsvrz.kex.lmstic3.vew.daten.tic.TIC3Meldung;
import de.bsvrz.kex.lmstic3.vew.daten.tic.TmcConverter;
......@@ -116,15 +117,18 @@ public class Meldungserzeugung extends Thread implements ClientReceiverInterface
try {
neueTic3Meldungen.add(createOrUpdateTIC3Meldung(m));
} catch (final TMCException e) {
// TODO Auto-generated catch block
e.printStackTrace();
debug.error("Zur Meldung '" + m.getID() + "' konnte keine TIC3-Meldung angelegt werden: "
+ e.getMessage());
}
try {
neueTmcMeldungen.add(createOrUpdateTMCMeldung(m));
final String tmcMeldung = createOrUpdateTMCMeldung(m);
if (tmcMeldung != null) {
neueTmcMeldungen.add(createOrUpdateTMCMeldung(m));
}
} catch (final TMCException e) {
// TODO Auto-generated catch block
e.printStackTrace();
debug.error("Zur Meldung '" + m.getID() + "' konnte keine TMC-Meldung angelegt werden: "
+ e.getMessage());
}
}
......@@ -205,8 +209,8 @@ public class Meldungserzeugung extends Thread implements ClientReceiverInterface
try {
vdo.entferneObjektAusMenge((DynamicObject) o, menge, true);
} catch (final DynObjektException e) {
// TODO Auto-generated catch block
e.printStackTrace();
debug.error("Das dynamische Meldungsobjekt '" + o.getPid() + "' konnte nicht aus der Menge '"
+ menge.getName() + "' entfernt werden: " + e.getMessage());
}
}
}
......@@ -215,14 +219,33 @@ public class Meldungserzeugung extends Thread implements ClientReceiverInterface
final String pid = TMCMeldung.bildePid(meldung.getID());
TMCMeldung found = null;
final AttributeGroup attributeGroup = dav.getDataModel().getAttributeGroup(TMCMeldung.ATG);
final Data createData = dav.createData(attributeGroup);
final TmcConverter conv = new TmcConverter(meldung.getMeldungsDaten());
if (!conv.hasTmcDaten()) {
debug.info("Die Meldung '" + meldung.getID()
+ "' besitzt keine TMC-Daten. Es wird kein TMC-Meldungsobjekt angelegt.");
return null;
}
try {
conv.toDAV(createData);
} catch (final TMCKonvertierungException e) {
debug.warning("Die Meldung '" + meldung.getID() + "' konnte nicht in eine TMC-Meldung konvertiert werden: "
+ e.getMessage());
return null;
}
synchronized (meldungenTMC) {
found = meldungenTMC.get(pid);
}
if (found == null) {
try {
final SystemObject systemObject = vdo.erzeugeObjektInMenge(objektTypTMC, pid, pid, meldungsmengeTMC);
debug.info("Eine neue TMC-Meldung '" + pid + "' wird erzeugt");
final SystemObject systemObject = vdo.erzeugeObjektInMenge(objektTypTMC, pid, pid, meldungsmengeTMC);
found = new TMCMeldung(systemObject);
} catch (final DynObjektException de) {
throw new TMCException(de.getMessage());
......@@ -231,20 +254,8 @@ public class Meldungserzeugung extends Thread implements ClientReceiverInterface
debug.info("Die Daten der TMC-Meldung '" + pid + "' werden aktualisiert");
}
final AttributeGroup attributeGroup = dav.getDataModel().getAttributeGroup(TMCMeldung.ATG);
final Data createData = dav.createData(attributeGroup);
final TmcConverter conv = new TmcConverter(meldung.getMeldungsDaten());
try {
conv.toDAV(createData);
found.setData(createData);
} catch (final TIC3Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
// debug.info("Eine neue TMC-Meldung '" + pid + "' wird erzeugt");
found.anmeldenDavEmpfang(dav);
found.publiziereDav(dav);
synchronized (meldungenTMC) {
......@@ -666,9 +677,7 @@ public class Meldungserzeugung extends Thread implements ClientReceiverInterface
@Override
public void empfangen(final List<ExterneMeldung> externemeldungen) {
System.out.println("Empfangen: " + externemeldungen);
meldungsAuftraege.add(externemeldungen);
// (new MeldungenWorker(new ArrayList<>(externemeldungen))).start();
}
private void handleTMCSetUpdate(final SystemObject[] addedObjects, final SystemObject[] removedObjects) {
......@@ -770,8 +779,6 @@ public class Meldungserzeugung extends Thread implements ClientReceiverInterface
e.printStackTrace();
}
}
// Assert.assertTrue(meldungen.size() == 0);
// Assert.assertTrue(meldungsmenge.getElements().size() == 0);
} else {
debug.info("keine Meldungen aus der Menge '" + menge + "' zu löschen");
}
......
......@@ -27,7 +27,6 @@
package de.bsvrz.kex.lmstic3.vew.daten;
import de.bsvrz.dav.daf.main.Data;
import de.bsvrz.kex.lmstic3.vew.daten.tic.TIC3Exception;
/**
* Interface zur Konvertierung DAV-Daten in externe Daten.
......@@ -46,8 +45,8 @@ public interface ExtAdapterIf {
* @param id
* zu benutzende Meldungs-ID
* @return {@link ExterneMeldungsDaten}
* @throws TIC3Exception
* @throws TMCKonvertierungException
* bei Fehlern
*/
ExterneMeldungsDaten toEXT(Data davdata, final String id) throws TIC3Exception;
ExterneMeldungsDaten toEXT(Data davdata, final String id) throws TMCKonvertierungException;
}
/*
* 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;
/**
* Ausnahmeklasse für Ausnahmen im Zusammenhang mit der Konvertierung der Daten.
*
* @author BitCtrl Systems GmbH, Gieseler
* @version $Id: $
*/
public class TMCKonvertierungException extends Exception {
/**
* VersionUID.
*/
private static final long serialVersionUID = -5123255674903317454L;
/**
* Konstruktor mit Message-Argument.
*
* @param message
* Grund der Ausnahme
*/
public TMCKonvertierungException(final String message) {
super(message);
}
}
......@@ -27,7 +27,6 @@
package de.bsvrz.kex.lmstic3.vew.daten;
import de.bsvrz.dav.daf.main.Data;
import de.bsvrz.kex.lmstic3.vew.daten.tic.TIC3Exception;
/**
* Interface zur Konvertierung von externen Daten in DAV-Daten.
......@@ -43,8 +42,25 @@ public interface TmcAdapterIf {
*
* @param davdata
* {@link de.bsvrz.dav.daf.main.Data}
* @throws TIC3Exception
* @throws TMCKonvertierungException
* bei Fehlern
*/
void toDAV(Data davdata) throws TIC3Exception;
void toDAV(Data davdata) throws TMCKonvertierungException;
/**
* Pr&uuml;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();
}
......@@ -33,6 +33,7 @@ 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.daten.ExterneMeldungsDaten;
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.TMCLocation;
......@@ -43,7 +44,7 @@ import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCStatus.TMCStatusEnum;
public class TIC3Converter implements ExtAdapterIf {
@Override
public ExterneMeldungsDaten toEXT(final Data davdata, final String id) throws TIC3Exception {
public ExterneMeldungsDaten toEXT(final Data davdata, final String id) throws TMCKonvertierungException {
final ExterneMeldungsDaten tic3daten = new TIC3MeldungsDaten();
tic3daten.setID(id);
......@@ -63,24 +64,31 @@ public class TIC3Converter implements ExtAdapterIf {
tic3daten.setDatenStartZeit(getZeitStempel(vi, "StartZeit"));
tic3daten.setDatenEndeZeit(getZeitStempel(vi, "EndeZeit"));
final TMCStatusEnum stat = TMCStatusEnum.getInstance(vi.getItem("TmcStatus").asUnscaledValue().intValue());
tic3daten.setTMCMeldungsStatus(stat);
final TMCPrioritaetEnum prio = TMCPrioritaetEnum
.getInstance(vi.getItem("TmcPrioritaet").asUnscaledValue().intValue());
tic3daten.setTMCMeldungsPrioritaet(prio);
// TODO: Hier muss die OppositeDirectionLocation versorgt werden, dann
// gelten die Daten für beide Richtungen
// final boolean istEreignisInBeidenRichtungen =
// vi.getItem("EreignisInBeidenRichtungen").asUnscaledValue().intValue()
// == 1;
// tic3daten.setEreignisInBeidenRichtungen(istEreignisInBeidenRichtungen);
// final boolean istEreignisInBeidenRichtungen =
// tic3daten.istEreignisInBeidenRichtungen();
convertEreignisse(davdata, tic3daten);
convertVerortung(davdata, tic3daten);
TMCStatusEnum stat;
try {
stat = TMCStatusEnum.getInstance(vi.getItem("TmcStatus").asUnscaledValue().intValue());
tic3daten.setTMCMeldungsStatus(stat);
final TMCPrioritaetEnum prio = TMCPrioritaetEnum
.getInstance(vi.getItem("TmcPrioritaet").asUnscaledValue().intValue());
tic3daten.setTMCMeldungsPrioritaet(prio);
// TODO: Hier muss die OppositeDirectionLocation versorgt werden,
// dann
// gelten die Daten für beide Richtungen
// final boolean istEreignisInBeidenRichtungen =
// vi.getItem("EreignisInBeidenRichtungen").asUnscaledValue().intValue()
// == 1;
// tic3daten.setEreignisInBeidenRichtungen(istEreignisInBeidenRichtungen);
// final boolean istEreignisInBeidenRichtungen =
// tic3daten.istEreignisInBeidenRichtungen();
convertEreignisse(davdata, tic3daten);
convertVerortung(davdata, tic3daten);
} catch (final TIC3Exception e) {
throw new TMCKonvertierungException(e.getMessage());
}
return tic3daten;
}
......
/*
* Segment 2 (KEx), SWE 2.1 LMS
* Copyright (C) 2007 BitCtrl Systems GmbH
*
* 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)
......@@ -18,7 +18,7 @@
*
* Contact Information:
* BitCtrl Systems GmbH
* Wei�enfelser Stra�e 67
* Weißenfelser Straße 67
* 04229 Leipzig
* Phone: +49 341-490670
* mailto: info@bitctrl.de
......
......@@ -34,35 +34,41 @@ 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;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCStatus;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCZustand;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCEvent.TMCEventType;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCPrioritaet.TMCPrioritaetEnum;
import de.bsvrz.kex.lmstic3.vew.daten.tmc.TMCStatus.TMCStatusEnum;
//import de.bsvrz.sys.funclib.bitctrl.modell.DefaultObjektFactory;
//import de.bsvrz.sys.funclib.bitctrl.modell.tmverkehrglobal.objekte.StrassenSegment;
//import de.bsvrz.sys.funclib.bitctrl.modell.util.cache.ModellObjektCache;
//import de.bsvrz.sys.funclib.bitctrl.modell.util.cache.NetzCache;
//import de.bsvrz.sys.funclib.bitctrl.modell.util.cache.SimpleDavVerbindungsCache;
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 TIC3Exception {
public void toDAV(final Data davdata) throws TMCKonvertierungException {
Data item = davdata.getItem("TMCID");
item.getTextValue("Datenproduzent").setText(tic3daten.getDatenProduzent());
......@@ -74,10 +80,14 @@ public class TmcConverter implements TmcAdapterIf {
final Data vi = item.getItem("VerwaltungsInformationen");
tic3daten.getDatenErzeugungsZeit().setDavDaten(vi, "ErzeugungsZeit");
tic3daten.getDatenAktualisierungsZeit().setDavDaten(vi, "AktualisierungsZeit");
tic3daten.getDatenStartZeit().setDavDaten(vi, "StartZeit");
tic3daten.getDatenEndeZeit().setDavDaten(vi, "EndeZeit");
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());
......@@ -142,35 +152,38 @@ public class TmcConverter implements TmcAdapterIf {
}
/**
* Bestimmt die DAV-ereigniskodierung.
* Bestimmt die DAV-Ereigniskodierung.
*
* @param te
* @param event
* {@link TMCEvent}
* @param item
* @return
* {@link de.bsvrz.dav.daf.main.Data}
* @return {@link TMCZustand}
*/
private TMCZustand getDavEreignisKodierung(final TMCEvent te, final Data item) {
private TMCZustand getDavEreignisKodierung(final TMCEvent event, final Data item) {
TMCZustand ev;
if (te.getTyp() == TMCEventType.Ereigniscode) {
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", te.getCode());
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", te.getCode());
ev = new TMCZustand("VorhersageCode", event.getCode());
try {
ev.setDavDaten(item);
} catch (final TMCException e2) {
LMSTIC3LogTools.log(Debug.getLogger(), LmsMsg.WarningFehlerEreignisDaten, "Der Code '"
+ te.getCode() + "' kann weder auf einen Ereignis- noch Vorhersagecode abgebildet werden!");
LMSTIC3LogTools.log(Debug.getLogger(), LmsMsg.WarningFehlerEreignisDaten,
"Der Code '" + event.getCode()
+ "' kann weder auf einen Ereignis- noch Vorhersagecode abgebildet werden!");
return null;
}
}
} else if (te.getTyp() == TMCEventType.Empfehlungscode) {
ev = new TMCZustand("EmpfehlungsCode", te.getCode());
} else if (event.getTyp() == TMCEventType.Empfehlungscode) {
ev = new TMCZustand("EmpfehlungsCode", event.getCode());
try {
ev.setDavDaten(item);
} catch (final TMCException e) {
......@@ -191,12 +204,7 @@ public class TmcConverter implements TmcAdapterIf {
final List<TMCLocation> lokationen = tic3daten.getTMCLokationen();
if (lokationen == null || lokationen.size() == 0) {
// ei.getItem("StartOffset").asUnscaledValue().set(0);
// ei.getItem("EndOffset").asUnscaledValue().set(0);
// ei.getItem("PrimaerLokation").asUnscaledValue().set(0);
// ei.getItem("SekundaerLokation").asUnscaledValue().set(0);
} else {
if (lokationen != null && lokationen.size() > 0) {
final Array array = ei.getArray("LokationsDaten");
array.setLength(lokationen.size());
......@@ -208,8 +216,8 @@ public class TmcConverter implements TmcAdapterIf {
final Data koordinateItem = ei.getItem("Koordinate");
final List<TMCKoordinate> koordinaten = tic3daten.getKoordinaten();
if (koordinaten != null && !koordinaten.isEmpty()) {
// TODO: welche Koordinate nehmen wir?
// Die Koordinaten sind in der Meldung in Fahrtrichtung geordnet
// 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 {
......@@ -249,4 +257,12 @@ public class TmcConverter implements TmcAdapterIf {
item.getItem("EndOffset").asScaledValue().set(entfernung);
}
}
@Override
public boolean hasTmcDaten() {
final List<TMCLocation> lokationen = tic3daten.getTMCLokationen();
final List<TMCKoordinate> koordinaten = tic3daten.getKoordinaten();
return (lokationen != null && lokationen.size() > 0) || (koordinaten != null && koordinaten.size() > 0);
}
}
......@@ -42,6 +42,7 @@ import de.bsvrz.dav.daf.main.config.SystemObjectType;
import de.bsvrz.kex.lmstic3.vew.TMCMeldung;
import de.bsvrz.kex.lmstic3.vew.TestDav;
import de.bsvrz.kex.lmstic3.vew.daten.ExterneMeldungsDaten;
import de.bsvrz.kex.lmstic3.vew.daten.TMCKonvertierungException;
import de.bsvrz.kex.lmstic3.vew.daten.tic.TIC3Exception;
import de.bsvrz.kex.lmstic3.vew.daten.tic.TIC3Meldung;
import de.bsvrz.kex.lmstic3.vew.daten.tic.TIC3MeldungsDaten;
......@@ -151,7 +152,10 @@ public class TestPublizieren {
final TMCMeldung tmcmeldung = new TMCMeldung(so);
tmcmeldung.anmeldenDavEmpfang(dav.getDav());
tmcmeldung.aktualisieren(dav.getDav(), createData);
} catch (final TIC3Exception e) {
} catch (final TMCKonvertierungException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TIC3Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
......
......@@ -67,6 +67,7 @@ import de.bsvrz.kex.lmstic3.empfang.dekoder.TIC3InfoDatei;
import de.bsvrz.kex.lmstic3.empfang.dekoder.TIC3InfoDateiException;
import de.bsvrz.kex.lmstic3.vew.daten.DavDatenModell;
import de.bsvrz.kex.lmstic3.vew.daten.ExterneMeldung;
import de.bsvrz.kex.lmstic3.vew.daten.TMCKonvertierungException;
import de.bsvrz.kex.lmstic3.vew.daten.tic.TIC3Exception;
import de.bsvrz.kex.lmstic3.vew.daten.tic.TIC3Meldung;
import de.bsvrz.kex.lmstic3.vew.daten.tic.TIC3MeldungsDaten;
......@@ -272,8 +273,9 @@ public class VersendeMeldung implements ClientSenderInterface {
} catch (final DynObjektException de) {
throw new TMCException(de.getMessage());
}
// } else {
// System.out.println("Die Daten der TMC-Meldung '" + pid + "' werden aktualisiert");
// } else {
// System.out.println("Die Daten der TMC-Meldung '" + pid + "'
// werden aktualisiert");
}
final AttributeGroup attributeGroup = VersendeMeldung.verbindung.getDataModel()
......@@ -289,7 +291,7 @@ public class VersendeMeldung implements ClientSenderInterface {
conv.toDAV(createData);
setAblaufzeit(createData);
found.setData(createData);
} catch (final TIC3Exception e) {
} catch (final TMCKonvertierungException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
......
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