using System; using System.Windows.Forms; using Step.Model; using TeamDev.SDK.MVVM; using static Step.Utils.Constants; using static Step.Utils.StepLogger; namespace Step.Utils { public static class ExceptionManager { public static void Manage(Exception ex) { if (ex is System.IO.FileNotFoundException) { // File not found LogAndNotifyUsers(CreateMessageModel("Configuration file not found!", ex.Message, ERROR_LEVEL.FATAL)); // Close the application Environment.Exit(1); } else if(ex is MySql.Data.MySqlClient.MySqlException) { // MySql Error LogAndNotifyUsers(CreateMessageModel("Database Error!", ex.Message, ERROR_LEVEL.FATAL)); } else { if (ex.InnerException != null) { Manage(ex.InnerException); // TODO test } else { // Default case LogAndNotifyUsers(CreateMessageModel("Generic Error!", ex.Message, ERROR_LEVEL.FATAL)); // Close the application Environment.Exit(1); } } } public static void Manage(ERROR_LEVEL errorLevel, Exception exception) { Manage(errorLevel, exception.Message); } public static void Manage(ERROR_LEVEL errorLevel, string message) { switch (errorLevel) { case ERROR_LEVEL.INFO: { // Log LogInfo(message); // Notify users NotifyUsers(CreateMessageModel("Info!", message, ERROR_LEVEL.INFO)); } break; case ERROR_LEVEL.WARNING: { LogWarning(message); NotifyUsers(CreateMessageModel("Warning!", message, ERROR_LEVEL.WARNING)); } break; case ERROR_LEVEL.ERROR: { LogError(message); NotifyUsers(CreateMessageModel("Error!", message, ERROR_LEVEL.ERROR)); } break; case ERROR_LEVEL.FATAL: { LogFatal(message); NotifyUsers(CreateMessageModel("Fatal Error!", message, ERROR_LEVEL.FATAL)); // Close the application Environment.Exit(1); }break; default: { LogFatal(message); NotifyUsers(CreateMessageModel("Generic Error!", message, ERROR_LEVEL.FATAL)); // Close the application Environment.Exit(1); } break; } } private static void LogAndNotifyUsers(ErrorMessageModel error) { // Log LogMessage(error.Message, (ERROR_LEVEL)error.errorLevel); NotifyUsers(error); } private static void NotifyUsers(ErrorMessageModel error) { if (error.errorLevel > (int)ERROR_LEVEL.WARNING) { // Notify user MessageBox.Show(error.Message, error.Title, MessageBoxButtons.OK, MessageBoxIcon.Error); } else { // Notify user MessageServices.Current.Publish(SEND_MESSAGE, null, error); } } private static ErrorMessageModel CreateMessageModel(string title, string message, ERROR_LEVEL level) { return new ErrorMessageModel() { Title = title, Message = message, errorLevel = (int)level }; } } }