git_bsmd/ENI2/EditControls/MessageHistoryDialog.xaml.cs

147 lines
6.3 KiB
C#

// 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
{
/// <summary>
/// Interaction logic for MessageHistoryDialog.xaml
/// </summary>
public partial class MessageHistoryDialog : StatusWindowBase
{
private static readonly ILog _log = LogManager.GetLogger(typeof(MessageHistoryDialog));
private readonly Dictionary<Guid, Brush> groupColorDict = new Dictionary<Guid, Brush>();
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<MessageHistory> MessageHistories { get; set; }
public List<Message> 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
}
}