// // Class: Util // Current CLR: 4.0.30319.34209 // System: Microsoft Visual Studio 10.0 // Author: dani // Created: 4/13/2015 10:42:13 PM // // Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. using System; using System.Collections.Generic; using System.Diagnostics; using log4net; using bsmd.database; namespace bsmd.herberg.FormService { public static class Util { private static ILog _log = LogManager.GetLogger(typeof(Util)); internal static void UpdateFormCore(MessageCore aMessageCore, WebReference.GetFormDataResponseData formResponse) { ReportingParty bsmdParty = null; Dictionary repDict = DBManager.Instance.GetReportingPartyDict(); foreach (Guid key in repDict.Keys) { if (repDict[key].Name.Equals("BSMD")) { bsmdParty = repDict[key]; break; } } for (int i = 0; i < formResponse.formDatasets.Length; i++) { Dictionary> groupedVals = new Dictionary>(); WebReference.FormDataset fds = formResponse.formDatasets[i]; if (fds.startPeriodSpecified) Trace.WriteLine(fds.startPeriod); Trace.WriteLine(string.Format("Dataset {0}", i)); foreach(WebReference.FormData formData in fds.formData) { string[] nElems = formData.name.Split('.'); if (nElems.Length != 2) { _log.WarnFormat("Field name {0} has wrong format!", formData.name); continue; } Trace.WriteLine(string.Format("Set:{0} Type:{1} Name:{2} Value:{3}", i, nElems[0], nElems[1], formData.value)); if (!groupedVals.ContainsKey(nElems[0])) groupedVals[nElems[0]] = new Dictionary(); groupedVals[nElems[0]][nElems[1]] = formData.value; } // jetzt können wir die Felder nach Nachrichtentyp abarbeiten Dictionary messages = Util.PrepareMessageDict(aMessageCore); foreach (string messageType in groupedVals.Keys) { Dictionary vDict = groupedVals[messageType]; DatabaseEntity derivedMessage = null; Message theMessage = null; if (!messages.ContainsKey(messageType.ToUpper())) { theMessage = new Message(); if (messageType.Equals("HAZ")) continue; // HE spezial, sollte HAZA o. HAZD sein if (messageType.Equals("Agency")) { if (aMessageCore.Customer == null) aMessageCore.Customer = new Customer(); if (vDict.ContainsKey("Name")) aMessageCore.Customer.Name = vDict["Name"]; if (vDict.ContainsKey("Phone")) aMessageCore.Customer.Phone = vDict["Phone"]; if (vDict.ContainsKey("Email")) aMessageCore.Customer.Email = vDict["Email"]; if (vDict.ContainsKey("ContactFirstName")) aMessageCore.Customer.ContactFirstName = vDict["ContactFirstName"]; if (vDict.ContainsKey("ContactLastName")) aMessageCore.Customer.ContactLastName = vDict["ContactLastName"]; continue; // das Zeug verhält sich wie eine Not. Class } theMessage.MessageNotificationClass = (Message.NotificationClass) Enum.Parse(typeof(Message.NotificationClass), messageType, true); theMessage.MessageCoreId = aMessageCore.Id; theMessage.MessageCore = aMessageCore; if (bsmdParty != null) theMessage.ReportingParty = bsmdParty; } else { _log.InfoFormat("found message type {0}", messageType); theMessage = messages[messageType.ToUpper()]; } switch (messageType) { case "ATA": { if (theMessage.Elements.Count == 0) { ATA newATA = new ATA(); newATA.MessageHeader = theMessage; theMessage.MessageNotificationClass = Message.NotificationClass.ATA; theMessage.Elements.Add(newATA); } ATA ata = theMessage.Elements[0] as ATA; derivedMessage = ata; if (ata != null) { try { if (vDict.ContainsKey("ATAPortOfCall")) ata.ATAPortOfCall = DateTime.Parse(vDict["ATAPortOfCall"]); } catch (Exception ex) { _log.ErrorFormat("Error reading ATA fields: {0}", ex.Message); } } } break; case "ATD": { if (theMessage.Elements.Count == 0) { ATD newATD = new ATD(); newATD.MessageHeader = theMessage; theMessage.MessageNotificationClass = Message.NotificationClass.ATD; theMessage.Elements.Add(newATD); } ATD atd = theMessage.Elements[0] as ATD; derivedMessage = atd; if (atd != null) { try { if(vDict.ContainsKey("ATDPortOfCall")) atd.ATDPortOfCall = DateTime.Parse(vDict["ATDPortOfCall"]); } catch (Exception ex) { _log.ErrorFormat("Error reading ATD fields: {0}", ex.Message); } } } break; case "NOA_NOD": { if (theMessage.Elements.Count == 0) { NOA_NOD newNOA_NOD = new NOA_NOD(); newNOA_NOD.MessageHeader = theMessage; theMessage.MessageNotificationClass = Message.NotificationClass.NOA_NOD; theMessage.Elements.Add(newNOA_NOD); } NOA_NOD noa_nod = theMessage.Elements[0] as NOA_NOD; derivedMessage = noa_nod; if (noa_nod != null) { try { if (vDict.ContainsKey("CallPurposeCode")) noa_nod.CallPurposeCode = Int32.Parse(vDict["CallPurposeCode"]); if (vDict.ContainsKey("ETAToNextPort")) noa_nod.ETAToNextPort = DateTime.Parse(vDict["ETAToNextPort"]); if (vDict.ContainsKey("ETDFromLastPort")) noa_nod.ETDFromLastPort = DateTime.Parse(vDict["ETDFromLastPort"]); if (vDict.ContainsKey("ETAToPortOfCall")) noa_nod.ETAToPortOfCall = DateTime.Parse(vDict["ETAToPortOfCall"]); if (vDict.ContainsKey("ETDFromPortOfCall")) noa_nod.ETDFromPortOfCall = DateTime.Parse(vDict["ETDFromPortOfCall"]); if (vDict.ContainsKey("CallPurposeDescription")) noa_nod.CallPurposeDescription = vDict["CallPurposeDescription"]; // if(vDict.ContainsKey("CountryOfNextPort")) noa_nod. nicht relevant if (vDict.ContainsKey("ETAToKielCanal")) noa_nod.ETAToKielCanal = DateTime.Parse(vDict["ETAToKielCanal"]); if (vDict.ContainsKey("ETDFromKielCanal")) noa_nod.ETDFromKielCanal = DateTime.Parse(vDict["ETDFromKielCanal"]); if (vDict.ContainsKey("CountryCodeOfLastPort") && vDict.ContainsKey("LastPortCode")) noa_nod.LastPort = vDict["CountryCodeOfLastPort"] + vDict["LastPortCode"]; if (vDict.ContainsKey("CountryCodeOfNextPort") && vDict.ContainsKey("NextPortCode")) noa_nod.NextPort = vDict["CountryCodeOfNextPort"] + vDict["NextPortCode"]; } catch (Exception ex) { _log.ErrorFormat("Error reading NOA_NOD fields: {0}", ex.Message); } } } break; case "STAT": if(theMessage.Elements.Count == 0) { STAT newStat = new STAT(); newStat.MessageHeader = theMessage; theMessage.MessageNotificationClass = Message.NotificationClass.STAT; theMessage.Elements.Add(newStat); } STAT stat = theMessage.Elements[0] as STAT; derivedMessage = stat; if(stat != null) { try { if (vDict.ContainsKey("ShipName")) stat.ShipName = vDict["ShipName"]; if (vDict.ContainsKey("CallSign")) stat.CallSign = vDict["CallSign"]; if (vDict.ContainsKey("MMSINumber")) stat.MMSINumber = vDict["MMSINumber"]; if (vDict.ContainsKey("Flag")) stat.Flag = vDict["Flag"]; if (vDict.ContainsKey("ShipType")) stat.ShipType = vDict["ShipType"]; if (vDict.ContainsKey("LengthOverall_MTR")) stat.LengthOverall_MTR = (float)Double.Parse(vDict["LengthOverall_MTR"]); if (vDict.ContainsKey("Beam_MTR")) stat.Beam_MTR = (float)Double.Parse(vDict["Beam_MTR"]); if (vDict.ContainsKey("GrossTonnage")) stat.GrossTonnage = Int32.Parse(vDict["GrossTonnage"]); // if (vDict.ContainsKey("PortNameOfRegistry")) stat.PortOfRegistry = vDict["PortNameOfRegistry"]; // existiert nicht if (vDict.ContainsKey("InmarsatCallNumber")) stat.InmarsatCallNumber = vDict["InmarsatCallNumber"]; // if(vDict.ContainsKey("CountryOfRegistry")) stat.r // existiert nicht in spec if (vDict.ContainsKey("PortCodeOfRegistry") && vDict.ContainsKey("CountryCodeOfRegistry")) stat.PortOfRegistry = vDict["CountryCodeOfRegistry"] + vDict["PortCodeOfRegistry"]; if (vDict.ContainsKey("ShipTypeCode")) stat.ShipType = vDict["ShipTypeCode"]; if (vDict.ContainsKey("ISMCompanyName")) stat.ISMCompanyName = vDict["ISMCompanyName"]; if (vDict.ContainsKey("ISMCompanyId")) stat.ISMCompanyId = vDict["ISMCompanyId"]; if (vDict.ContainsKey("ISMCompanyStreetAndNumber")) stat.ISMCompanyStreetAndNumber = vDict["ISMCompanyStreetAndNumber"]; if (vDict.ContainsKey("ISMCompanyPostalCode")) stat.ISMCompanyPostalCode = vDict["ISMCompanyPostalCode"]; if (vDict.ContainsKey("ISMCompanyCity")) stat.ISMCompanyCity = vDict["ISMCompanyCity"]; if (vDict.ContainsKey("ISMCompanyCountry")) stat.ISMCompanyCountry = vDict["ISMCompanyCountry"]; } catch (Exception ex) { _log.ErrorFormat("Error reading STAT fields: {0}", ex.Message); } } break; case "MDH": { if (theMessage.Elements.Count == 0) { MDH newMDH = new MDH(); newMDH.MessageHeader = theMessage; theMessage.MessageNotificationClass = Message.NotificationClass.MDH; theMessage.Elements.Add(newMDH); } MDH mdh = theMessage.Elements[0] as MDH; derivedMessage = mdh; if (mdh != null) { try { if (vDict.ContainsKey("SickAnimalOrPetOnBoard")) mdh.SickAnimalOrPetOnBoard = vDict["SickAnimalOrPetOnBoard"].Equals("Y"); if (vDict.ContainsKey("Simplification")) mdh.MDHSimplification = vDict["Simplification"].Equals("Y"); if (vDict.ContainsKey("SanitaryMeasuresApplied")) mdh.SanitaryMeasuresApplied = vDict["SanitaryMeasuresApplied"].Equals("Y"); if (vDict.ContainsKey("NonAccidentialDeathsDuringVoyage")) mdh.NonAccidentalDeathsDuringVoyage = vDict["NonAccidentialDeathsDuringVoyage"].Equals("Y"); if (vDict.ContainsKey("SuspisionInfectiousNature")) mdh.SuspisionInfectiousNature = vDict["SuspisionInfectiousNature"].Equals("Y"); if (vDict.ContainsKey("NumberOfIllPersonsHigherThanExpected")) mdh.NumberOfIllPersonsHigherThanExpected = vDict["NumberOfIllPersonsHigherThanExpected"].Equals("Y"); if (vDict.ContainsKey("SickPersonsOnBoard")) mdh.SickPersonsOnBoard = vDict["SickPersonsOnBoard"].Equals("Y"); if (vDict.ContainsKey("MedicalConsulted")) mdh.MedicalConsulted = vDict["MedicalConsulted"].Equals("Y"); if (vDict.ContainsKey("AwareOfConditionsForFurtherInfections")) mdh.AwareOfFurtherInfections = vDict["AwareOfConditionsForFurtherInfections"].Equals("Y"); if (vDict.ContainsKey("ValidSanitaryControlExemptionOrCertificateOnBoard")) mdh.ValidSanitaryControlExemptionOrCertificateOnBoard = vDict["ValidSanitaryControlExemptionOrCertificateOnBoard"].Equals("Y"); if (vDict.ContainsKey("SanitaryControlReinspectionRequired")) mdh.SanitaryControlReinspectionRequired = vDict["SanitaryControlReinspectionRequired"].Equals("Y"); if (vDict.ContainsKey("InfectedAreaVisited")) mdh.InfectedAreaVisited = vDict["InfectedAreaVisited"].Equals("Y"); } catch (Exception ex) { _log.ErrorFormat("Error reading MDH fields: {0}", ex.Message); } } } break; case "POBA": { if (theMessage.Elements.Count == 0) { POBA newPOBA = new POBA(); newPOBA.MessageHeader = theMessage; theMessage.MessageNotificationClass = Message.NotificationClass.POBA; theMessage.Elements.Add(newPOBA); } POBA poba = theMessage.Elements[0] as POBA; derivedMessage = poba; if (poba != null) { try { if (vDict.ContainsKey("TotalPersonsOnBoardUponArrival")) poba.TotalPersonsOnBoardUponArrival = Int32.Parse(vDict["TotalPersonsOnBoardUponArrival"]); if (vDict.ContainsKey("TotalCrewMembersOnBoardUponArrival")) poba.TotalCrewMembersOnBoardUponArrival = Int32.Parse(vDict["TotalCrewMembersOnBoardUponArrival"]); if (vDict.ContainsKey("TotalPassengersOnBoardUponArrival")) poba.TotalPassengersOnBoardUponArrival = Int32.Parse(vDict["TotalPassengersOnBoardUponArrival"]); if (vDict.ContainsKey("TotalStowawaysOnBoardUponArrival")) poba.TotalStowawaysOnBoardUponArrival = Int32.Parse(vDict["TotalStowawaysOnBoardUponArrival"]); } catch (Exception ex) { _log.ErrorFormat("Error reading POBA fields: {0}", ex.Message); } } } break; case "POBD": { if (theMessage.Elements.Count == 0) { POBD newPOBD = new POBD(); newPOBD.MessageHeader = theMessage; theMessage.MessageNotificationClass = Message.NotificationClass.POBD; theMessage.Elements.Add(newPOBD); } POBD pobd = theMessage.Elements[0] as POBD; derivedMessage = pobd; if (pobd != null) { try { if (vDict.ContainsKey("TotalPersonsOnBoardUponDeparture")) pobd.TotalPersonsOnBoardUponDeparture = Int32.Parse(vDict["TotalPersonsOnBoardUponDeparture"]); if (vDict.ContainsKey("TotalCrewMembersOnBoardUponDeparture")) pobd.TotalCrewMembersOnBoardUponDeparture = Int32.Parse(vDict["TotalCrewMembersOnBoardUponDeparture"]); if (vDict.ContainsKey("TotalPassengersOnBoardUponDeparture")) pobd.TotalPassengersOnBoardUponDeparture = Int32.Parse(vDict["TotalPassengersOnBoardUponDeparture"]); if (vDict.ContainsKey("TotalStowawaysOnBoardUponDeparture")) pobd.TotalStowawaysOnBoardUponDeparture = Int32.Parse(vDict["TotalStowawaysOnBoardUponDeparture"]); } catch (Exception ex) { _log.ErrorFormat("Error reading POBA fields: {0}", ex.Message); } } } break; case "BKRA": { if (theMessage.Elements.Count == 0) { BRKA newBRKA = new BRKA(); newBRKA.MessageHeader = theMessage; theMessage.MessageNotificationClass = Message.NotificationClass.BKRA; theMessage.Elements.Add(newBRKA); } BRKA bkra = theMessage.Elements[0] as BRKA; derivedMessage = bkra; if (bkra != null) { try { if (vDict.ContainsKey("BunkerFuelType")) bkra.BunkerFuelType = vDict["BunkerFuelType"]; if (vDict.ContainsKey("BunkerFuelQuantity_TNE")) bkra.BunkerFuelQuantity_TNE = (float)Double.Parse(vDict["BunkerFuelQuantity_TNE"]); } catch (Exception ex) { _log.ErrorFormat("Error reading BKRA fields: {0}", ex.Message); } } } break; case "BKRD": { if (theMessage.Elements.Count == 0) { BRKD newBRKD = new BRKD(); newBRKD.MessageHeader = theMessage; theMessage.MessageNotificationClass = Message.NotificationClass.BKRD; theMessage.Elements.Add(newBRKD); } BRKD bkrd = theMessage.Elements[0] as BRKD; derivedMessage = bkrd; if (bkrd != null) { try { if (vDict.ContainsKey("BunkerFuelType")) bkrd.BunkerFuelType = vDict["BunkerFuelType"]; if (vDict.ContainsKey("BunkerFuelQuantity_TNE")) bkrd.BunkerFuelQuantity_TNE = (float)Double.Parse(vDict["BunkerFuelQuantity_TNE"]); } catch (Exception ex) { _log.ErrorFormat("Error reading BKRD fields: {0}", ex.Message); } } } break; case "WAS": break; case "Visit": { theMessage.MessageNotificationClass = Message.NotificationClass.VISIT; if (vDict.ContainsKey("PortNameOfCall")) aMessageCore.Portname = vDict["PortNameOfCall"]; if (vDict.ContainsKey("PortOfCall")) aMessageCore.PoC = "DE" + vDict["PortOfCall"]; if (vDict.ContainsKey("TransitKielCanal")) aMessageCore.IsTransit = vDict["TransitKielCanal"].Equals("Y"); if (vDict.ContainsKey("ETAPortOfCall")) aMessageCore.ETA = DateTime.Parse(vDict["ETAPortOfCall"]); } break; case "Transit": { theMessage.MessageNotificationClass = Message.NotificationClass.TRANSIT; } break; case "TOWA": if(theMessage.Elements.Count == 0) { TOWA newTOWA = new TOWA(); newTOWA.MessageHeader = theMessage; theMessage.MessageNotificationClass = Message.NotificationClass.TOWA; theMessage.Elements.Add(newTOWA); } TOWA towa = theMessage.Elements[0] as TOWA; derivedMessage = towa; if (towa != null) { try { if (vDict.ContainsKey("TowageOnArrivalBeam_MTR")) towa.TowageOnArrivalBeam_MTR = (float)Double.Parse(vDict["TowageOnArrivalBeam_MTR"]); if (vDict.ContainsKey("TowageOnArrivalDraught_DMT")) towa.TowageOnArrivalDraught_DMT = (float)Double.Parse(vDict["TowageOnArrivalDraught_DMT"]); if (vDict.ContainsKey("TowageOnArrivalLengthOverall_MTR")) towa.TowageOnArrivalLengthOverall_MTR = (float)Double.Parse(vDict["TowageOnArrivalLengthOverall_MTR"]); if (vDict.ContainsKey("TowageOnArrivalGrossTonnage")) towa.TowageOnArrivalGrossTonnage = Int32.Parse(vDict["TowageOnArrivalGrossTonnage"]); if (vDict.ContainsKey("TowageOnArrivalOperatorCountry")) towa.TowageOnArrivalOperatorCountry = vDict["TowageOnArrivalOperatorCountry"]; if (vDict.ContainsKey("TowageOnArrivalPurposeOfCall")) towa.TowageOnArrivalPurposeOfCall = vDict["TowageOnArrivalPurposeOfCall"]; if (vDict.ContainsKey("TowageOnArrivalName")) towa.TowageOnArrivalName = vDict["TowageOnArrivalName"]; if (vDict.ContainsKey("TowageOnArrivalFlag")) towa.TowageOnArrivalFlag = vDict["TowageOnArrivalFlag"]; if (vDict.ContainsKey("TowageOnArrivalOperatorCompanyName")) towa.TowageOnArrivalOperatorCompanyName = vDict["TowageOnArrivalOperatorCompanyName"]; if (vDict.ContainsKey("TowageOnArrivalOperatorStreetAndNumber")) towa.TowageOnArrivalOperatorStreetNameAndNumber = vDict["TowageOnArrivalOperatorStreetAndNumber"]; if (vDict.ContainsKey("TowageOnArrivalOperatorPostalCode")) towa.TowageOnArrivalOperatorPostalCode = vDict["TowageOnArrivalOperatorPostalCode"]; if (vDict.ContainsKey("TowageOnArrivalOperatorCity")) towa.TowageOnArrivalOperatorCity = vDict["TowageOnArrivalOperatorCity"]; if (vDict.ContainsKey("TowageOnArrivalOperatorPhone")) towa.TowageOnArrivalOperatorPhone = vDict["TowageOnArrivalOperatorPhone"]; if (vDict.ContainsKey("TowageOnArrivalOperatorFax")) towa.TowageOnArrivalOperatorFax = vDict["TowageOnArrivalOperatorFax"]; if (vDict.ContainsKey("TowageOnArrivalOperatorEmail")) towa.TowageOnArrivalOperatorEmail = vDict["TowageOnArrivalOperatorEmail"]; if (vDict.ContainsKey("TowageOnArrivalRemarks")) towa.TowageOnArrivalRemarks = vDict["TowageOnArrivalRemarks"]; } catch (Exception ex) { _log.ErrorFormat("Error reading TOWA fields: {0}", ex.Message); } } break; case "TOWD": if (theMessage.Elements.Count == 0) { TOWD newTOWD = new TOWD(); newTOWD.MessageHeader = theMessage; theMessage.MessageNotificationClass = Message.NotificationClass.TOWD; theMessage.Elements.Add(newTOWD); } TOWD towd = theMessage.Elements[0] as TOWD; derivedMessage = towd; if (towd != null) { try { if (vDict.ContainsKey("TowageOnDepartureBeam_MTR")) towd.TowageOnDepartureBeam_MTR = (float)Double.Parse(vDict["TowageOnDepartureBeam_MTR"]); if (vDict.ContainsKey("TowageOnDepartureDraught_DMT")) towd.TowageOnDepartureDraught_DMT = (float)Double.Parse(vDict["TowageOnDepartureDraught_DMT"]); if (vDict.ContainsKey("TowageOnDepartureLengthOverall_MTR")) towd.TowageOnDepartureLengthOverall_MTR = (float)Double.Parse(vDict["TowageOnDepartureLengthOverall_MTR"]); if (vDict.ContainsKey("TowageOnDepartureGrossTonnage")) towd.TowageOnDepartureGrossTonnage = Int32.Parse(vDict["TowageOnDepartureGrossTonnage"]); if (vDict.ContainsKey("TowageOnDepartureOperatorCountry")) towd.TowageOnDepartureOperatorCountry = vDict["TowageOnDepartureOperatorCountry"]; if (vDict.ContainsKey("TowageOnDeparturePurposeOfCall")) towd.TowageOnDeparturePurposeOfCall = vDict["TowageOnDeparturePurposeOfCall"]; if (vDict.ContainsKey("TowageOnDepartureName")) towd.TowageOnDepartureName = vDict["TowageOnDepartureName"]; if (vDict.ContainsKey("TowageOnDepartureFlag")) towd.TowageOnDepartureFlag = vDict["TowageOnDepartureFlag"]; if (vDict.ContainsKey("TowageOnDepartureOperatorCompanyName")) towd.TowageOnDepartureOperatorCompanyName = vDict["TowageOnDepartureOperatorCompanyName"]; if (vDict.ContainsKey("TowageOnDepartureOperatorStreetAndNumber")) towd.TowageOnDepartureOperatorStreetNameAndNumber = vDict["TowageOnDepartureOperatorStreetAndNumber"]; if (vDict.ContainsKey("TowageOnDepartureOperatorPostalCode")) towd.TowageOnDepartureOperatorPostalCode = vDict["TowageOnDepartureOperatorPostalCode"]; if (vDict.ContainsKey("TowageOnDepartureOperatorCity")) towd.TowageOnDepartureOperatorCity = vDict["TowageOnDepartureOperatorCity"]; if (vDict.ContainsKey("TowageOnDepartureOperatorPhone")) towd.TowageOnDepartureOperatorPhone = vDict["TowageOnDepartureOperatorPhone"]; if (vDict.ContainsKey("TowageOnDepartureOperatorFax")) towd.TowageOnDepartureOperatorFax = vDict["TowageOnDepartureOperatorFax"]; if (vDict.ContainsKey("TowageOnDepartureOperatorEmail")) towd.TowageOnDepartureOperatorEmail = vDict["TowageOnDepartureOperatorEmail"]; if (vDict.ContainsKey("TowageOnDepartureRemarks")) towd.TowageOnDepartureRemarks = vDict["TowageOnDepartureRemarks"]; } catch (Exception ex) { _log.ErrorFormat("Error reading TOWA fields: {0}", ex.Message); } } break; case "TIEFA": { if (theMessage.Elements.Count == 0) { TIEFA newTIEFA = new TIEFA(); newTIEFA.MessageHeader = theMessage; theMessage.MessageNotificationClass = Message.NotificationClass.TIEFA; theMessage.Elements.Add(newTIEFA); } TIEFA tiefa = theMessage.Elements[0] as TIEFA; derivedMessage = tiefa; if (tiefa != null) { try { if (vDict.ContainsKey("DraughtUponArrival_DMT")) tiefa.DraughtUponArrival_DMT = (float)Double.Parse(vDict["DraughtUponArrival_DMT"]); } catch (Exception ex) { _log.ErrorFormat("Error reading TIEFA fields: {0}", ex.Message); } } break; } case "TIEFD": { if (theMessage.Elements.Count == 0) { TIEFD newTIEFD = new TIEFD(); newTIEFD.MessageHeader = theMessage; theMessage.MessageNotificationClass = Message.NotificationClass.TIEFD; theMessage.Elements.Add(newTIEFD); } TIEFD tiefd = theMessage.Elements[0] as TIEFD; derivedMessage = tiefd; if (tiefd != null) { try { if (vDict.ContainsKey("DraughtUponDeparture_DMT")) tiefd.DraughtUponDeparture_DMT = (float)Double.Parse(vDict["DraughtUponDeparture_DMT"]); } catch (Exception ex) { _log.ErrorFormat("Error reading TIEFD fields: {0}", ex.Message); } } break; } } // Die Logik dient dazu, dass bei "leeren" Nachrichten (also z.B. MDH ohne MDH Infos) nicht nur der // Header gespeichert wird und danach in der Luft hängt if ((theMessage.MessageNotificationClass == Message.NotificationClass.VISIT) || (theMessage.MessageNotificationClass == Message.NotificationClass.TRANSIT) || (derivedMessage != null)) { DBManager.Instance.Save(theMessage); if (derivedMessage != null) DBManager.Instance.Save(derivedMessage); } } DBManager.Instance.Save(aMessageCore); // warum? } } /// /// Aufbereitung eines Dictionaries: Nachrichtentyp (aus Feld-Präfixen) zu eigentlichen Nachrichten /// private static Dictionary PrepareMessageDict(MessageCore aMessageCore) { List messages = DBManager.Instance.GetMessagesForCore(aMessageCore); Dictionary result = new Dictionary(); _log.InfoFormat("Core has {0} messages", messages.Count); foreach (Message message in messages) { if (!result.ContainsKey(message.MessageNotificationClass.ToString())) { result.Add(message.MessageNotificationClass.ToString(), message); } else { // es gibt schon einen Nachricht mit diesem Typ. // Das kann nur der Fall sein wenn es schon eine Cancel/Reset Nachricht gegeben hat. In diesem Fall wird eine // Nachricht überschrieben, wenn beide Flags nicht gesetzt sind if (!message.Reset && !message.Cancel) { result[message.MessageNotificationClass.ToString()] = message; } } } return result; } } }