FimExplorer/src/UI.WPF/Main/MainWindow.xaml.cs

151 lines
4.8 KiB
C#

using System;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Win32;
using Predica.FimCommunication.Export;
namespace Predica.FimExplorer.UI.WPF.Main
{
public partial class MainWindow : Window
{
MainModel _model;
ReferenceColumnDetector _referenceColumnDetector;
WindowsManager _windowsManager;
public MainWindow()
{
try
{
_windowsManager = new WindowsManager();
_model = new MainModel(this, FimClientFactory.CreateClient(), _windowsManager, new XmlExporter());
_referenceColumnDetector = new ReferenceColumnDetector();
InitializeComponent();
this.DataContext = _model;
_model.Initialize();
}
catch (Exception exc)
{
MessageBox.Show(@"There was an error during application startup. Verify that your configuration file points to a valid FIM service instance.
Application will now close.
Exception details:
" + exc, "Predica.FimExplorer Initialization error", MessageBoxButton.OK, MessageBoxImage.Error);
Application.Current.Shutdown();
}
}
private void btnRunQuery_Click(object sender, RoutedEventArgs e)
{
if (_model.CurrentAttributes.Count == 0)
{
_windowsManager.Error("Object type must be selected first. Only currently selected object type can be searched by xpath.");
return;
}
try
{
_model.ExecuteQuery();
}
catch (Exception exc)
{
_windowsManager.Error(exc.ToString());
}
}
private void btnFindById_Click(object sender, RoutedEventArgs e)
{
_model.ShowDetailsById();
}
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
// only references are marked as objects, all other are strings
_referenceColumnDetector.ProcessAutogeneratedColumn<object>(e
, id =>
{
_model.IdForSearch = id;
_model.ShowDetailsById();
});
DecideColumnOrder(e);
}
// field used to correctly set column display indexes (ID and DisplayName); reset when all columns are generated
private bool resourceID_column_already_configured = false;
private void DecideColumnOrder(DataGridAutoGeneratingColumnEventArgs e)
{
// ObjectID always as 1st column
if (e.PropertyName == "Resource ID")
{
e.Column.DisplayIndex = 0;
resourceID_column_already_configured = true;
}
// DisplayName is 2nd
if (e.PropertyName == "Display Name")
{
// set to 0 if ResourceID was not already configured - it will be configured later, pushing this column further
e.Column.DisplayIndex = resourceID_column_already_configured ? 1 : 0;
}
}
private void DataGrid_AutoGeneratedColumns(object sender, EventArgs e)
{
resourceID_column_already_configured = false;
}
private void DataGrid_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
_model.ShowDetailsById();
}
private void btnExportXml_Click(object sender, RoutedEventArgs e)
{
try
{
var saveFileDialog = new SaveFileDialog();
saveFileDialog.DefaultExt = ".xml";
saveFileDialog.Filter = "XML documents|*.xml|All files|*.*";
if (saveFileDialog.ShowDialog() != true)
{
return;
}
_model.ExportToXml(saveFileDialog.FileName);
_windowsManager.Info("Export finished");
}
catch (Exception exc)
{
_windowsManager.Error(exc.ToString());
}
}
private void btnImportXml_Click(object sender, RoutedEventArgs e)
{
try
{
var openFileDialog = new OpenFileDialog();
openFileDialog.DefaultExt = ".xml";
openFileDialog.Filter = "XML documents|*.xml|All files|*.*";
if (openFileDialog.ShowDialog() != true)
{
return;
}
_windowsManager.ImportObjectsDialog(openFileDialog.FileName);
}
catch (Exception exc)
{
_windowsManager.Error(exc.ToString());
}
}
}
}