using Agent.Models;
using Agent.Services;
using log4net;
using System;
using System.IO;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using WinForms = System.Windows.Forms;
namespace Agent.Views
{
///
/// Interaction logic for RestorePage.xaml
///
public partial class RestorePage : Page
{
private static readonly ILog log = LogManager.GetLogger(typeof(PolicyPage));
private readonly PolicyService _policyService = new PolicyService();
private readonly UserService _userService = new UserService();
private readonly HashService _hashService = new HashService();
private readonly CollectionViewSource _searchViewSource = new CollectionViewSource();
private readonly ObservableCollection _resultList = new ObservableCollection();
public RestorePage()
{
InitializeComponent();
Tag1Header.Header = (string)Application.Current.Properties["user_tag1"];
Tag2Header.Header = (string)Application.Current.Properties["user_tag2"];
Tag3Header.Header = (string)Application.Current.Properties["user_tag3"];
Tag4Header.Header = (string)Application.Current.Properties["user_tag4"];
Tag5Header.Header = (string)Application.Current.Properties["user_tag5"];
Tag6Header.Header = (string)Application.Current.Properties["user_tag6"];
Tag7Header.Header = (string)Application.Current.Properties["user_tag7"];
Tag8Header.Header = (string)Application.Current.Properties["user_tag8"];
Tag9Header.Header = (string)Application.Current.Properties["user_tag9"];
Tag10Header.Header = (string)Application.Current.Properties["user_tag10"];
Tag1Content.Content = (string)Application.Current.Properties["user_tag1"];
Tag2Content.Content = (string)Application.Current.Properties["user_tag2"];
Tag3Content.Content = (string)Application.Current.Properties["user_tag3"];
Tag4Content.Content = (string)Application.Current.Properties["user_tag4"];
Tag5Content.Content = (string)Application.Current.Properties["user_tag5"];
Tag6Content.Content = (string)Application.Current.Properties["user_tag6"];
Tag7Content.Content = (string)Application.Current.Properties["user_tag7"];
Tag8Content.Content = (string)Application.Current.Properties["user_tag8"];
Tag9Content.Content = (string)Application.Current.Properties["user_tag9"];
Tag10Content.Content = (string)Application.Current.Properties["user_tag10"];
_searchViewSource.Source = _policyService.GetPolicyIndexesExtendTag();
SearchList.ItemsSource = _searchViewSource.View;
ResultList.ItemsSource = _resultList;
}
private void HashChk_btn_Click(object sender, RoutedEventArgs e)
{
try
{
if (0 == _resultList.Count)
{
MessageBox.Show("파일 히스토리가 존재하지 않습니다.", "오류", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
if (ResultList.SelectedIndex < 0)
{
MessageBox.Show("점검할 파일 히스토리를 선랙하지 않습니다.", "오류", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
var dialog = new WinForms.OpenFileDialog();
if (dialog.ShowDialog() == WinForms.DialogResult.Cancel)
{
return;
}
//HashChkWindow hashCheckWindow = new HashChkWindow(dialog.FileName, create_date, findHistory);
var hash = _hashService.FileToMD5(dialog.FileName);
var findHistory = _resultList[ResultList.SelectedIndex].Hash.Equals(hash);
HashChkWindow hashCheckWindow = new HashChkWindow(dialog.FileName, hash, findHistory);
if (findHistory == false)
{
hashCheckWindow.ShowDialog();
return;
}
var info = new FileInfo(dialog.FileName);
var create_date = info.LastWriteTime;
findHistory = _resultList[ResultList.SelectedIndex].Create_Date.ToString().Equals(create_date.ToString());
if (findHistory == false)
{
MessageBox.Show(" 원본 파일 : " + _resultList[ResultList.SelectedIndex].Create_Date.ToString() + "\r\n" + " 대상 파일 : " + create_date.ToString(), "작성일자 불일치", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
findHistory = ((Agent.Models.PolicyIndex)SearchList.SelectedItem).Name.ToString().Equals(dialog.SafeFileName.ToString());
//findHistory = SearchList.SelectedItem.ToString().Equals(create_date.ToString());
if (findHistory == false)
{
MessageBox.Show(" 원본 파일명 : " + ((Agent.Models.PolicyIndex)SearchList.SelectedItem).Name.ToString() + "\r\n" + " 대상 파일명 : " + dialog.SafeFileName.ToString(), "파일명 불일치", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
hashCheckWindow.ShowDialog();
}
catch (Exception ex)
{
log.Error(ex);
}
//---- 2023.01.03 Bclee Hash Code 일치 확인 로직 변경함 --------------
//var findHistory = _resultList.FirstOrDefault(item => item.Hash.Equals(hash));
//HashChkWindow hashCheckWindow = new HashChkWindow(dialog.FileName, hash, null != findHistory);
}
private void Restore_btn_Click(object sender, RoutedEventArgs e)
{
try
{
if (!(ResultList.SelectedItem is PolicyHistory item))
{
MessageBox.Show("복원 파일 히스토리를 선택해 주세요.", "오류", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
var frm1 = new LoginWindow();
if (frm1.ShowDialog() == true)
{
var result = MessageBox.Show($"해시값({item.Hash})\r\n복원하시겠습니까?", "확인", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.No)
{
return;
}
if (!(SearchList.SelectedItem is PolicyIndexDto policyIndex))
{
MessageBox.Show("복원에 실패하였습니다.\r\n다시 시도 해주세요.", "오류", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
if (!_policyService.Restore(item.Policy_Tid, policyIndex.Path, item.Hash, item.Create_Date, item.Backup_File_Id, "RE", policyIndex.Path + " [파일복원]"))
{
MessageBox.Show("복원에 실패하였습니다.\r\n다시 시도 해주세요.", "오류", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
MessageBox.Show($"해시값({item.Hash})\r\n복원되었습니다.", "확인", MessageBoxButton.OK, MessageBoxImage.Information);
}
else
{
}
}
catch (Exception ex)
{
log.Error(ex);
}
}
private void DownLoad_btn_Click(object sender, RoutedEventArgs e)
{
try
{
if (!(ResultList.SelectedItem is PolicyHistory item))
{
MessageBox.Show("다운로드할 파일 히스토리를 선택해 주세요.", "오류", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
var frm1 = new LoginWindow();
if (frm1.ShowDialog() == true)
{
var result = MessageBox.Show($"해시값({item.Hash})\r\n다운로드 하시겠습니까?", "확인", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.No)
{
return;
}
if (!(SearchList.SelectedItem is PolicyIndexDto policyIndex))
{
MessageBox.Show("다운로드에 실패하였습니다.\r\n다시 시도 해주세요.", "오류", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
//bool result = false;
var dialog = new WinForms.SaveFileDialog
{
Filter = "All files(*.*)|*.*"
};
if (dialog.ShowDialog() == WinForms.DialogResult.OK)
{
if (!_policyService.Restore(item.Policy_Tid, dialog.FileName, item.Hash, item.Create_Date, item.Backup_File_Id, "DN", dialog.FileName + " [File Download]"))
{
MessageBox.Show("다운로드에 실패하였습니다.\r\n다시 시도 해주세요.", "오류", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
}
MessageBox.Show($"해시값({item.Hash})\r\n다운로드 되었습니다.", "확인", MessageBoxButton.OK, MessageBoxImage.Information);
}
else
{
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "오류", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
var idx = RP_serarch_cb.SelectedIndex;
var view = CollectionViewSource.GetDefaultView(_searchViewSource.View);
if (0 == idx)
{
view.Filter = _NameFiltered;
return;
}
if (1 == idx)
{
view.Filter = _Tag1Filtered;
return;
}
if (2 == idx)
{
view.Filter = _Tag2Filtered;
return;
}
if (3 == idx)
{
view.Filter = _Tag3Filtered;
return;
}
if (4 == idx)
{
view.Filter = _Tag4Filtered;
return;
}
if (5 == idx)
{
view.Filter = _Tag5Filtered;
return;
}
if (6 == idx)
{
view.Filter = _Tag6Filtered;
return;
}
if (7 == idx)
{
view.Filter = _Tag7Filtered;
return;
}
if (8 == idx)
{
view.Filter = _Tag8Filtered;
return;
}
if (9 == idx)
{
view.Filter = _Tag9Filtered;
return;
}
if (10 == idx)
{
view.Filter = _Tag10Filtered;
return;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "오류", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
private bool _NameFiltered(object item)
{
return (item as PolicyIndexDto).Name.Contains(RP_search_tb.Text.Trim());
}
private bool _Tag1Filtered(object item)
{
return (item as PolicyIndexDto).Custom_tag1.Contains(RP_search_tb.Text.Trim());
}
private bool _Tag2Filtered(object item)
{
return (item as PolicyIndexDto).Custom_tag2.Contains(RP_search_tb.Text.Trim());
}
private bool _Tag3Filtered(object item)
{
return (item as PolicyIndexDto).Custom_tag3.Contains(RP_search_tb.Text.Trim());
}
private bool _Tag4Filtered(object item)
{
return (item as PolicyIndexDto).Custom_tag4.Contains(RP_search_tb.Text.Trim());
}
private bool _Tag5Filtered(object item)
{
return (item as PolicyIndexDto).Custom_tag5.Contains(RP_search_tb.Text.Trim());
}
private bool _Tag6Filtered(object item)
{
return (item as PolicyIndexDto).Custom_tag6.Contains(RP_search_tb.Text.Trim());
}
private bool _Tag7Filtered(object item)
{
return (item as PolicyIndexDto).Custom_tag7.Contains(RP_search_tb.Text.Trim());
}
private bool _Tag8Filtered(object item)
{
return (item as PolicyIndexDto).Custom_tag8.Contains(RP_search_tb.Text.Trim());
}
private bool _Tag9Filtered(object item)
{
return (item as PolicyIndexDto).Custom_tag9.Contains(RP_search_tb.Text.Trim());
}
private bool _Tag10Filtered(object item)
{
return (item as PolicyIndexDto).Custom_tag10.Contains(RP_search_tb.Text.Trim());
}
private void SearchList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
_resultList.Clear();
if (!((sender as ListView).SelectedItem is PolicyIndexDto item))
{
RP_title_tb.Text = string.Empty;
return;
}
_policyService
.GetPolicyHistories(item.Policy_Tid, item.Tid)
.ForEach(policyHistory => _resultList.Add(policyHistory));
RP_title_tb.Text = $"{_resultList.Count} 개의 히스토리가 있습니다.";
}
private void ResultList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
}
}
}