Free cookie consent management tool by TermsFeed Policy Generator

source: branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Auxiliary.cs @ 2033

Last change on this file since 2033 was 2033, checked in by swagner, 15 years ago

Refactoring of the operator architecture (#95)

File size: 3.3 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using System.Collections.Generic;
24using System.Text;
25using System.Windows.Forms;
26
27namespace HeuristicLab.Core {
28  /// <summary>
29  /// Static helper class.
30  /// </summary>
31  public static class Auxiliary {
32    #region Cloning
33    /// <summary>
34    /// Clones the given <paramref name="obj"/> (deep clone).
35    /// </summary>
36    /// <remarks>Checks before clone if object has not already been cloned.</remarks>
37    /// <param name="obj">The object to clone.</param>
38    /// <param name="clonedObjects">A dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
39    /// <returns>The cloned object.</returns>
40    public static object Clone(ICloneable obj, IDictionary<long, object> clonedObjects) {
41      object clone;
42      if (clonedObjects.TryGetValue(obj.Id, out clone))
43        return clone;
44      else
45        return obj.Clone(clonedObjects);
46    }
47    #endregion
48
49    #region Error Messages
50    /// <summary>
51    /// Shows an error message box with a given error <paramref name="message"/> and an OK-Button.
52    /// </summary>
53    /// <param name="message">The error message to display.</param>
54    public static void ShowErrorMessageBox(string message) {
55      MessageBox.Show(message,
56                      "Error",
57                      MessageBoxButtons.OK,
58                      MessageBoxIcon.Error);
59    }
60    /// <summary>
61    /// Shows an error message box with a given exception <paramref name="ex"/> and an OK-Button.
62    /// </summary>
63    /// <param name="ex">The exception to display.</param>
64    public static void ShowErrorMessageBox(Exception ex) {
65      MessageBox.Show(BuildErrorMessage(ex),
66                      "Error - " + ex.GetType().Name,
67                      MessageBoxButtons.OK,
68                      MessageBoxIcon.Error);
69    }
70    /// <summary>
71    /// Builds an error message out of an exception and formats it accordingly.
72    /// </summary>
73    /// <param name="ex">The exception to format.</param>
74    /// <returns>The formated message.</returns>
75    private static string BuildErrorMessage(Exception ex) {
76      StringBuilder sb = new StringBuilder();
77      sb.Append("Sorry, but something went wrong!\n\n" + ex.Message + "\n\n" + ex.StackTrace);
78
79      while (ex.InnerException != null) {
80        ex = ex.InnerException;
81        sb.Append("\n\n-----\n\n" + ex.Message + "\n\n" + ex.StackTrace);
82      }
83      return sb.ToString();
84    }
85    #endregion
86  }
87}
Note: See TracBrowser for help on using the repository browser.