Add this for backwards compatibility
[mono.git] / mcs / class / Microsoft.Build.Utilities / Microsoft.Build.Utilities / TaskLoggingHelper.cs
1 //
2 // TaskLoggingHelper.cs: Wrapper aroudn IBuildEngine.
3 //
4 // Author:
5 //   Marek Sieradzki (marek.sieradzki@gmail.com)
6 //
7 // (C) 2005 Marek Sieradzki
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
28 #if NET_2_0
29
30 using System;
31 using System.IO;
32 using System.Resources;
33 using System.Text;
34 using Microsoft.Build.Framework;
35
36 namespace Microsoft.Build.Utilities
37 {
38         public class TaskLoggingHelper : MarshalByRefObject
39         {
40                 IBuildEngine    buildEngine;
41                 bool            hasLoggedErrors;
42                 string          helpKeywordPrefix;
43                 string          taskName;
44                 ResourceManager taskResources;
45         
46                 public TaskLoggingHelper (ITask taskInstance)
47                 {
48                         this.buildEngine = taskInstance.BuildEngine;
49                 }
50
51                 [MonoTODO]
52                 public string ExtractMessageCode (string message,
53                                                   out string messageWithoutCodePrefix)
54                 {
55                         messageWithoutCodePrefix = "";
56                         return "";
57                 }
58
59                 [MonoTODO]
60                 public virtual string FormatResourceString (string resourceName,
61                                                             params object[] args)
62                 {
63                         return null;
64                 }
65
66                 [MonoTODO]
67                 public virtual string FormatString (string unformatted,
68                                                    params object[] args)
69                 {
70                         return "";
71                 }
72
73                 public void LogError (string message,
74                                      params object[] messageArgs)
75                 {
76                         BuildErrorEventArgs beea = new BuildErrorEventArgs (
77                                 null, null, null, 0, 0, 0, 0, message,
78                                 helpKeywordPrefix, null);
79                         buildEngine.LogErrorEvent (beea);
80                         hasLoggedErrors = true;
81                 }
82
83                 public void LogError (string subcategory, string errorCode,
84                                       string helpKeyword, string file,
85                                       int lineNumber, int columnNumber,
86                                       int endLineNumber, int endColumnNumber,
87                                       string message,
88                                       params object[] messageArgs)
89                 {
90                         BuildErrorEventArgs beea = new BuildErrorEventArgs (
91                                 subcategory, errorCode, file, lineNumber,
92                                 columnNumber, endLineNumber, endColumnNumber,
93                                 message, helpKeywordPrefix /*it's helpKeyword*/,
94                                 null /*it's senderName*/);
95                         // FIXME: what with messageArgs?
96                         buildEngine.LogErrorEvent (beea);
97                         hasLoggedErrors = true;
98                 }
99
100                 public void LogErrorFromException (Exception e)
101                 {
102                         LogErrorFromException (e, false);
103                 }
104
105                 public void LogErrorFromException (Exception e,
106                                                    bool showStackTrace)
107                 {
108                         StringBuilder sb = new StringBuilder ();
109                         sb.Append (e.Message);
110                         if (showStackTrace == true)
111                                 sb.Append (e.StackTrace);
112                         BuildErrorEventArgs beea = new BuildErrorEventArgs (
113                                 null, null, null, 0, 0, 0, 0, sb.ToString (),
114                                 e.HelpLink, e.Source);
115                         buildEngine.LogErrorEvent (beea);
116                         hasLoggedErrors = true;
117                 }
118
119                 public void LogErrorFromResources (string messageResourceName,
120                                                    params object[] messageArgs)
121                 {
122                         LogErrorFromResources (null, null, null, null, 0, 0, 0,
123                                 0, messageResourceName, null);
124                 }
125
126                 public void LogErrorFromResources (string subcategoryResourceName,
127                                                    string errorCode,
128                                                    string helpKeyword,
129                                                    string file, int lineNumber,
130                                                    int columnNumber,
131                                                    int endLineNumber,
132                                                    int endColumnNumber,
133                                                    string messageResourceName,
134                                                    params object[] messageArgs)
135                 {
136                         BuildErrorEventArgs beea = new BuildErrorEventArgs (
137                                 taskResources.GetString (subcategoryResourceName),
138                                 errorCode, file, lineNumber, columnNumber,
139                                 endLineNumber, endColumnNumber,
140                                 taskResources.GetString (messageResourceName),
141                                 helpKeyword, null );
142                         buildEngine.LogErrorEvent (beea);
143                         hasLoggedErrors = true;
144                 }
145
146                 public void LogErrorWithCodeFromResources (string messageResourceName,
147                                                           params object[] messageArgs)
148                 {
149                         // FIXME: there should be something different than normal
150                         // LogErrorFromResources
151                         LogErrorFromResources (messageResourceName, messageArgs);
152                 }
153
154                 public void LogErrorWithCodeFromResources (string subcategoryResourceName,
155                                                           string file,
156                                                           int lineNumber,
157                                                           int columnNumber,
158                                                           int endLineNumber,
159                                                           int endColumnNumber,
160                                                           string messageResourceName,
161                                                           params object[] messageArgs)
162                 {
163                         // FIXME: there should be something different than normal
164                         // LogErrorFromResources
165                         LogErrorFromResources (subcategoryResourceName, file,
166                                 lineNumber, columnNumber, endLineNumber,
167                                 endColumnNumber, messageResourceName,
168                                 messageArgs);
169                 }
170
171                 public void LogMessage (string message,
172                                        params object[] messageArgs)
173                 {
174                         LogMessage (MessageImportance.Normal, message,
175                                 messageArgs); 
176                 }
177
178                 public void LogMessage (MessageImportance importance,
179                                         string message,
180                                         params object[] messageArgs)
181                 {
182                         BuildMessageEventArgs bmea = new BuildMessageEventArgs (
183                                 message, helpKeywordPrefix, /*helpKeyword*/
184                                 null /*sender*/, importance);
185                         // FIXME: probably messageArgs contain helpKeyword or
186                         // senderName
187                         buildEngine.LogMessageEvent (bmea);
188                 }
189
190                 public void LogMessageFromResources (string messageResourceName,
191                                                      params object[] messageArgs)
192                 {
193                         LogMessage (taskResources.GetString (messageResourceName),
194                                 messageArgs);
195                 }
196
197                 public void LogMessageFromResources (MessageImportance importance,
198                                                      string messageResourceName,
199                                                      params object[] messageArgs)
200                 {
201                         LogMessage (importance, taskResources.GetString (
202                                 messageResourceName), messageArgs);
203                 }
204
205                 public bool LogMessagesFromFile (string filename)
206                 {
207                         return LogMessagesFromFile (filename, MessageImportance.Normal);
208                 }
209
210                 public bool LogMessagesFromFile (string filename,
211                                                  MessageImportance messageImportance)
212                 {
213                         try {
214                                 StreamReader sr = new StreamReader (filename);
215                                 LogMessage (messageImportance, sr.ReadToEnd (),
216                                         null);
217                                 sr.Close ();
218                                 return true;
219                         }
220                         catch (Exception ex) {
221                                 return false;
222                         }
223                 }
224
225                 public bool LogMessagesFromStream (TextReader stream,
226                                                    MessageImportance messageImportance,
227                                                    bool synchronize)
228                 // FIXME: what about synchronize
229                 {
230                         try {
231                                 LogMessage (messageImportance, stream.ReadToEnd (), null);
232                                 return true;
233                         }
234                         catch (Exception ex) {
235                                 return false;
236                         }
237                         finally {
238                                 // FIXME: should it be done here?
239                                 stream.Close ();
240                         }
241                 }
242
243                 public void LogWarning (string message,
244                                        params object[] messageArgs)
245                 {
246                         // FIXME: what about all the parameters?
247                         BuildWarningEventArgs bwea = new BuildWarningEventArgs (
248                                 null, null, null, 0, 0, 0, 0, message,
249                                 helpKeywordPrefix, null);
250                         buildEngine.LogWarningEvent (bwea);
251                 }
252
253                 public void LogWarning (string subcategory, string warningCode,
254                                         string helpKeyword, string file,
255                                         int lineNumber, int columnNumber,
256                                         int endLineNumber, int endColumnNumber,
257                                         string message,
258                                         params object[] messageArgs)
259                 {
260                         BuildWarningEventArgs bwea = new BuildWarningEventArgs (
261                                 subcategory, warningCode, file, lineNumber,
262                                 columnNumber, endLineNumber, endColumnNumber,
263                                 message, helpKeywordPrefix, null);
264                         buildEngine.LogWarningEvent (bwea);
265                 }
266
267                 public void LogWarningFromException (Exception e)
268                 {
269                         LogWarningFromException (e, false);
270                 }
271
272                 public void LogWarningFromException (Exception e,
273                                                      bool showStackTrace)
274                 {
275                         StringBuilder sb = new StringBuilder ();
276                         sb.Append (e.Message);
277                         if (showStackTrace)
278                                 sb.Append (e.StackTrace);
279                         LogWarning (null, null, null, null, 0, 0, 0, 0,
280                                 sb.ToString (), null);
281                 }
282
283                 public void LogWarningFromResources (string messageResourceName,
284                                                      params object[] messageArgs)
285                 {
286                         LogWarning (taskResources.GetString (messageResourceName),
287                                 messageArgs);
288                 }
289
290                 public void LogWarningFromResources (string subcategoryResourceName,
291                                                      string warningCode,
292                                                      string helpKeyword,
293                                                      string file,
294                                                      int lineNumber,
295                                                      int columnNumber,
296                                                      int endLineNumber,
297                                                      int endColumnNumber,
298                                                      string messageResourceName,
299                                                      params object[] messageArgs)
300                 {
301                         LogWarning (taskResources.GetString (subcategoryResourceName),
302                                 warningCode, helpKeyword, file, lineNumber,
303                                 columnNumber, endLineNumber, endColumnNumber,
304                                 taskResources.GetString (messageResourceName),
305                                 messageArgs);
306                 }
307
308                 public void LogWarningWithCodeFromResources (string messageResourceName,
309                                                              params object[] messageArgs)
310                 {
311                         // FIXME: what's different from normal logwarning?
312                         LogWarningFromResources (messageResourceName, messageArgs);
313                 }
314
315                 public void LogWarningWithCodeFromResources (string subcategoryResourceName,
316                                                              string file,
317                                                              int lineNumber,
318                                                              int columnNumber,
319                                                              int endLineNumber,
320                                                              int endColumnNumber,
321                                                              string messageResourceName,
322                                                              params object[] messageArgs)
323                 {
324                         LogWarningFromResources (subcategoryResourceName, file,
325                                 lineNumber, columnNumber, endLineNumber,
326                                 endColumnNumber, messageResourceName,
327                                 messageArgs);
328                 }
329
330                 protected IBuildEngine BuildEngine {
331                         get {
332                                 return buildEngine;
333                         }
334                 }
335
336                 public bool HasLoggedErrors {
337                         get {
338                                 return hasLoggedErrors;
339                         }
340                 }
341
342                 public string HelpKeywordPrefix {
343                         get {
344                                 return helpKeywordPrefix;
345                         }
346                         set {
347                                 helpKeywordPrefix = value;
348                         }
349                 }
350
351                 protected string TaskName {
352                         get {
353                                 return taskName;
354                         }
355                 }
356
357                 public ResourceManager TaskResources {
358                         get {
359                                 return taskResources;
360                         }
361                         set {
362                                 taskResources = value;
363                         }
364                 }
365         }
366 }
367
368 #endif