// Copyright (c) 2017- schick Informatik // Description: // using System; using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using bsmd.database; using ENI2.Controls; using log4net; namespace ENI2.EditControls { /// /// Interaction logic for MessageHistoryDialog.xaml /// public partial class MessageHistoryDialog : StatusWindowBase { private static readonly ILog _log = LogManager.GetLogger(typeof(MessageHistoryDialog)); private readonly Dictionary groupColorDict = new Dictionary(); public MessageHistoryDialog() { InitializeComponent(); Loaded += (o, e) => { // "color-code" (Group) the message histories foreach(MessageHistory mh in this.MessageHistories) { if (!groupColorDict.ContainsKey(mh.EntityId)) groupColorDict[mh.EntityId] = new SolidColorBrush(Util.UIHelper.GetRandomBrightColor()); mh.GroupColorBrush = groupColorDict[mh.EntityId]; } this.dataGridMessageHistories.ItemsSource = this.MessageHistories; this.dataGridMessageHistories.ContextMenu = new ContextMenu(); MenuItem showDetailItem = new MenuItem { Header = Properties.Resources.textShowData, Icon = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/Resources/document_view.png")) } }; showDetailItem.Click += ShowDetailItem_Click; this.dataGridMessageHistories.ContextMenu.Items.Add(showDetailItem); MenuItem copyDataItem = new MenuItem { Header = Properties.Resources.textCopyData, Icon = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/Resources/document_down.png")) } }; copyDataItem.Click += CopyDataItem_Click; this.dataGridMessageHistories.ContextMenu.Items.Add(copyDataItem); }; } #region Properties public List MessageHistories { get; set; } public List Messages { get; set; } public event Action RequestReload; #endregion #region event handler private void ShowDetailItem_Click(object sender, RoutedEventArgs e) { this.DataGridViolations_MouseDoubleClick(sender, null); } private void DataGridViolations_MouseDoubleClick(object sender, MouseButtonEventArgs e) { if (this.dataGridMessageHistories.SelectedItem is MessageHistory selectedHistory) { SimplePropertyViewDialog spvd = new SimplePropertyViewDialog(); spvd.Title = "Message history"; spvd.DisplayObject = selectedHistory.CreateObjectFromValues(); spvd.Show(); } } private void CopyDataItem_Click(object sender, RoutedEventArgs e) { if (this.dataGridMessageHistories.SelectedItem is MessageHistory selectedHistory) { if (MessageBox.Show("Overwrite data selected message class?", "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes) { Message targetMessage = null; foreach (Message aMessage in this.Messages) { if (aMessage.MessageNotificationClassDisplay.Equals(selectedHistory.EntityName) || (aMessage.MessageNotificationClassDisplay.Equals("BKRA") && selectedHistory.EntityName.Equals("BRKA")) || // blöder Schreibfehler beachten (aMessage.MessageNotificationClassDisplay.Equals("BKRD") && selectedHistory.EntityName.Equals("BRKD")) ) { targetMessage = aMessage; break; } } if (targetMessage != null) { _log.InfoFormat("Message {0} Id {1} will be restored from {2}", selectedHistory.EntityName, targetMessage.Id, selectedHistory.Created); DatabaseEntity selectedItem = selectedHistory.CreateObjectFromValues() as DatabaseEntity; // Fallunterscheidung: a) ISublistElement oder nicht? Falls ja müssen die anderen Elemente zusammengesucht werden if(Message.IsListClass(targetMessage.MessageNotificationClass)) // Meldeklasse ist also z.B. LADG, CREW, PAS.. { foreach (DatabaseEntity oldElement in targetMessage.Elements) DBManager.Instance.Delete(oldElement); targetMessage.Elements.Clear(); foreach (DatabaseEntity element in selectedHistory.GetGroup(this.MessageHistories)) { targetMessage.Elements.Add(element); element.MessageHeader = targetMessage; DBManager.Instance.Save(element); } } else { targetMessage.Elements[0].OverwriteWith(selectedItem); } DBManager.Instance.Save(targetMessage); this.RequestReload?.Invoke(); } else { _log.WarnFormat("Cannot find message {0} to restore history element with id {1}", selectedHistory.EntityName, selectedHistory.Id); } } } } #endregion } }