147 lines
6.3 KiB
C#
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
|
|
|
|
}
|
|
}
|