aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Data/Message.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/WixToolset.Data/Message.cs110
1 files changed, 110 insertions, 0 deletions
diff --git a/src/WixToolset.Data/Message.cs b/src/WixToolset.Data/Message.cs
new file mode 100644
index 00000000..6cd4105c
--- /dev/null
+++ b/src/WixToolset.Data/Message.cs
@@ -0,0 +1,110 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.Data
4{
5 using System;
6 using System.Resources;
7
8 /// <summary>
9 /// Event args for message events.
10 /// </summary>
11 public class Message
12 {
13 /// <summary>
14 /// Creates a new Message using a format string.
15 /// </summary>
16 /// <param name="sourceLineNumbers">Source line numbers for the message.</param>
17 /// <param name="level">Message level.</param>
18 /// <param name="id">Id for the message.</param>
19 /// <param name="format">Format .</param>
20 /// <param name="messageArgs">Arguments for the format string.</param>
21 public Message(SourceLineNumber sourceLineNumbers, MessageLevel level, int id, string format, params object[] messageArgs)
22 {
23 this.SourceLineNumbers = sourceLineNumbers;
24 this.Level = level;
25 this.Id = id;
26 this.ResourceNameOrFormat = format;
27 this.MessageArgs = messageArgs;
28 }
29
30 /// <summary>
31 /// Creates a new Message using a format string from a resource manager.
32 /// </summary>
33 /// <param name="sourceLineNumbers">Source line numbers for the message.</param>
34 /// <param name="level">Message level.</param>
35 /// <param name="id">Id for the message.</param>
36 /// <param name="resourceManager">Resource manager.</param>
37 /// <param name="resourceName">Name of the resource.</param>
38 /// <param name="messageArgs">Arguments for the format string.</param>
39 public Message(SourceLineNumber sourceLineNumbers, MessageLevel level, int id, ResourceManager resourceManager, string resourceName, params object[] messageArgs)
40 {
41 this.SourceLineNumbers = sourceLineNumbers;
42 this.Level = level;
43 this.Id = id;
44 this.ResourceManager = resourceManager;
45 this.ResourceNameOrFormat = resourceName;
46 this.MessageArgs = messageArgs;
47 }
48
49 /// <summary>
50 /// Gets the source line numbers.
51 /// </summary>
52 /// <value>The source line numbers.</value>
53 public SourceLineNumber SourceLineNumbers { get; }
54
55 /// <summary>
56 /// Gets the Id for the message.
57 /// </summary>
58 /// <value>The Id for the message.</value>
59 public int Id { get; }
60
61 /// <summary>
62 /// Gets the resource manager for this event args.
63 /// </summary>
64 /// <value>The resource manager for this event args.</value>
65 public ResourceManager ResourceManager { get; }
66
67 /// <summary>
68 /// Gets the name of the resource or format string if no resource manager was provided.
69 /// </summary>
70 /// <value>The name of the resource or format string.</value>
71 public string ResourceNameOrFormat { get; }
72
73 /// <summary>
74 /// Gets or sets the <see cref="MessageLevel"/> for the message.
75 /// </summary>
76 /// <value>The <see cref="MessageLevel"/> for the message.</value>
77 public MessageLevel Level { get; private set; }
78
79 /// <summary>
80 /// Gets the arguments for the format string.
81 /// </summary>
82 /// <value>The arguments for the format string.</value>
83 public object[] MessageArgs { get; }
84
85 /// <summary>
86 /// Makes a warning an error.
87 /// </summary>
88 public void ElevateWarningToError()
89 {
90 if (this.Level != MessageLevel.Warning)
91 {
92 throw new InvalidOperationException($"Cannot elevate {this.Level.ToString()} Message to an Error. Only Warning Messages can be elevated to an Error.");
93 }
94
95 this.Level = MessageLevel.Error;
96 }
97
98 public override string ToString()
99 {
100 if (this.ResourceManager == null)
101 {
102 return String.Format(this.ResourceNameOrFormat, this.MessageArgs);
103 }
104 else
105 {
106 return String.Format(this.ResourceManager.GetString(this.ResourceNameOrFormat), this.MessageArgs);
107 }
108 }
109 }
110}