Commit 35555750 authored by Steffen Gieseler's avatar Steffen Gieseler
Browse files

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
Loading
Loading
Loading
Loading
+31 −24
Original line number Diff line number Diff line
@@ -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 {
					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");
			}
+2 −3
Original line number Diff line number Diff line
@@ -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;
}
+51 −0
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.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);
	}
}
+19 −3
Original line number Diff line number Diff line
@@ -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();
}
+27 −19
Original line number Diff line number Diff line
@@ -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,14 +64,18 @@ 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());
		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
			// TODO: Hier muss die OppositeDirectionLocation versorgt werden,
			// dann
			// gelten die Daten für beide Richtungen
			// final boolean istEreignisInBeidenRichtungen =
			// vi.getItem("EreignisInBeidenRichtungen").asUnscaledValue().intValue()
@@ -81,6 +86,9 @@ public class TIC3Converter implements ExtAdapterIf {

			convertEreignisse(davdata, tic3daten);
			convertVerortung(davdata, tic3daten);
		} catch (final TIC3Exception e) {
			throw new TMCKonvertierungException(e.getMessage());
		}

		return tic3daten;
	}
Loading