aboutsummaryrefslogtreecommitdiff
path: root/src/wixext/MsmqCompiler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/wixext/MsmqCompiler.cs')
-rw-r--r--src/wixext/MsmqCompiler.cs188
1 files changed, 87 insertions, 101 deletions
diff --git a/src/wixext/MsmqCompiler.cs b/src/wixext/MsmqCompiler.cs
index b40e2dc1..5365f0fb 100644
--- a/src/wixext/MsmqCompiler.cs
+++ b/src/wixext/MsmqCompiler.cs
@@ -1,30 +1,19 @@
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. 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 2
3namespace WixToolset.Extensions 3namespace WixToolset.Msmq
4{ 4{
5 using System; 5 using System;
6 using System.Collections;
7 using System.Collections.Generic; 6 using System.Collections.Generic;
8 using System.Globalization;
9 using System.Reflection;
10 using System.Xml;
11 using System.Xml.Linq; 7 using System.Xml.Linq;
12 using System.Xml.Schema;
13 using WixToolset.Data; 8 using WixToolset.Data;
14 using WixToolset.Extensibility; 9 using WixToolset.Extensibility;
15 10
16 /// <summary> 11 /// <summary>
17 /// The compiler for the WiX Toolset Internet Information Services Extension. 12 /// The compiler for the WiX Toolset MSMQ Extension.
18 /// </summary> 13 /// </summary>
19 public sealed class MsmqCompiler : CompilerExtension 14 public sealed class MsmqCompiler : BaseCompilerExtension
20 { 15 {
21 /// <summary> 16 public override XNamespace Namespace => "http://wixtoolset.org/schemas/v4/wxs/msmq";
22 /// Instantiate a new MsmqCompiler.
23 /// </summary>
24 public MsmqCompiler()
25 {
26 this.Namespace = "http://wixtoolset.org/schemas/v4/wxs/msmq";
27 }
28 17
29 /// <summary> 18 /// <summary>
30 /// </summary> 19 /// </summary>
@@ -75,7 +64,7 @@ namespace WixToolset.Extensions
75 /// <param name="parentElement">Parent element of element to process.</param> 64 /// <param name="parentElement">Parent element of element to process.</param>
76 /// <param name="element">Element to process.</param> 65 /// <param name="element">Element to process.</param>
77 /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param> 66 /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param>
78 public override void ParseElement(XElement parentElement, XElement element, IDictionary<string, string> context) 67 public override void ParseElement(Intermediate intermediate, IntermediateSection section, XElement parentElement, XElement element, IDictionary<string, string> context)
79 { 68 {
80 switch (parentElement.Name.LocalName) 69 switch (parentElement.Name.LocalName)
81 { 70 {
@@ -86,18 +75,18 @@ namespace WixToolset.Extensions
86 switch (element.Name.LocalName) 75 switch (element.Name.LocalName)
87 { 76 {
88 case "MessageQueue": 77 case "MessageQueue":
89 this.ParseMessageQueueElement(element, componentId); 78 this.ParseMessageQueueElement(intermediate, section, element, componentId);
90 break; 79 break;
91 case "MessageQueuePermission": 80 case "MessageQueuePermission":
92 this.ParseMessageQueuePermissionElement(element, componentId, null); 81 this.ParseMessageQueuePermissionElement(intermediate, section, element, componentId, null);
93 break; 82 break;
94 default: 83 default:
95 this.Core.UnexpectedElement(parentElement, element); 84 this.ParseHelper.UnexpectedElement(parentElement, element);
96 break; 85 break;
97 } 86 }
98 break; 87 break;
99 default: 88 default:
100 this.Core.UnexpectedElement(parentElement, element); 89 this.ParseHelper.UnexpectedElement(parentElement, element);
101 break; 90 break;
102 } 91 }
103 } 92 }
@@ -107,11 +96,11 @@ namespace WixToolset.Extensions
107 /// </summary> 96 /// </summary>
108 /// <param name="node">Element to parse.</param> 97 /// <param name="node">Element to parse.</param>
109 /// <param name="componentKey">Identifier of parent component.</param> 98 /// <param name="componentKey">Identifier of parent component.</param>
110 private void ParseMessageQueueElement(XElement node, string componentId) 99 private void ParseMessageQueueElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentId)
111 { 100 {
112 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 101 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
113 102
114 string id = null; 103 Identifier id = null;
115 int basePriority = CompilerConstants.IntegerNotSet; 104 int basePriority = CompilerConstants.IntegerNotSet;
116 int journalQuota = CompilerConstants.IntegerNotSet; 105 int journalQuota = CompilerConstants.IntegerNotSet;
117 string label = null; 106 string label = null;
@@ -129,10 +118,10 @@ namespace WixToolset.Extensions
129 switch (attrib.Name.LocalName) 118 switch (attrib.Name.LocalName)
130 { 119 {
131 case "Id": 120 case "Id":
132 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 121 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
133 break; 122 break;
134 case "Authenticate": 123 case "Authenticate":
135 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 124 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
136 { 125 {
137 attributes |= (int)MqiMessageQueueAttributes.Authenticate; 126 attributes |= (int)MqiMessageQueueAttributes.Authenticate;
138 } 127 }
@@ -142,10 +131,10 @@ namespace WixToolset.Extensions
142 } 131 }
143 break; 132 break;
144 case "BasePriority": 133 case "BasePriority":
145 basePriority = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, short.MaxValue); 134 basePriority = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, short.MaxValue);
146 break; 135 break;
147 case "Journal": 136 case "Journal":
148 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 137 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
149 { 138 {
150 attributes |= (int)MqiMessageQueueAttributes.Journal; 139 attributes |= (int)MqiMessageQueueAttributes.Journal;
151 } 140 }
@@ -155,19 +144,19 @@ namespace WixToolset.Extensions
155 } 144 }
156 break; 145 break;
157 case "JournalQuota": 146 case "JournalQuota":
158 journalQuota = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue); 147 journalQuota = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue);
159 break; 148 break;
160 case "Label": 149 case "Label":
161 label = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 150 label = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
162 break; 151 break;
163 case "MulticastAddress": 152 case "MulticastAddress":
164 multicastAddress = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 153 multicastAddress = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
165 break; 154 break;
166 case "PathName": 155 case "PathName":
167 pathName = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 156 pathName = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
168 break; 157 break;
169 case "PrivLevel": 158 case "PrivLevel":
170 string privLevelAttr = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 159 string privLevelAttr = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
171 switch (privLevelAttr) 160 switch (privLevelAttr)
172 { 161 {
173 case "none": 162 case "none":
@@ -180,15 +169,15 @@ namespace WixToolset.Extensions
180 privLevel = (int)MqiMessageQueuePrivacyLevel.Body; 169 privLevel = (int)MqiMessageQueuePrivacyLevel.Body;
181 break; 170 break;
182 default: 171 default:
183 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "MessageQueue", "PrivLevel", privLevelAttr, "none", "body", "optional")); 172 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "MessageQueue", "PrivLevel", privLevelAttr, "none", "body", "optional"));
184 break; 173 break;
185 } 174 }
186 break; 175 break;
187 case "Quota": 176 case "Quota":
188 quota = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue); 177 quota = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue);
189 break; 178 break;
190 case "Transactional": 179 case "Transactional":
191 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 180 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
192 { 181 {
193 attributes |= (int)MqiMessageQueueAttributes.Transactional; 182 attributes |= (int)MqiMessageQueueAttributes.Transactional;
194 } 183 }
@@ -198,16 +187,16 @@ namespace WixToolset.Extensions
198 } 187 }
199 break; 188 break;
200 case "ServiceTypeGuid": 189 case "ServiceTypeGuid":
201 serviceTypeGuid = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); 190 serviceTypeGuid = this.TryFormatGuidValue(this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib));
202 break; 191 break;
203 default: 192 default:
204 this.Core.UnexpectedAttribute(node, attrib); 193 this.ParseHelper.UnexpectedAttribute(node, attrib);
205 break; 194 break;
206 } 195 }
207 } 196 }
208 else 197 else
209 { 198 {
210 this.Core.ParseExtensionAttribute(node, attrib); 199 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
211 } 200 }
212 } 201 }
213 202
@@ -218,46 +207,45 @@ namespace WixToolset.Extensions
218 switch (child.Name.LocalName) 207 switch (child.Name.LocalName)
219 { 208 {
220 case "MessageQueuePermission": 209 case "MessageQueuePermission":
221 this.ParseMessageQueuePermissionElement(child, componentId, id); 210 this.ParseMessageQueuePermissionElement(intermediate, section, child, componentId, id?.Id);
222 break; 211 break;
223 default: 212 default:
224 this.Core.UnexpectedElement(node, child); 213 this.ParseHelper.UnexpectedElement(node, child);
225 break; 214 break;
226 } 215 }
227 } 216 }
228 else 217 else
229 { 218 {
230 this.Core.ParseExtensionElement(node, child); 219 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
231 } 220 }
232 } 221 }
233 222
234 Row row = this.Core.CreateRow(sourceLineNumbers, "MessageQueue"); 223 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "MessageQueue", id);
235 row[0] = id; 224 row.Set(1, componentId);
236 row[1] = componentId;
237 if (CompilerConstants.IntegerNotSet != basePriority) 225 if (CompilerConstants.IntegerNotSet != basePriority)
238 { 226 {
239 row[2] = basePriority; 227 row.Set(2, basePriority);
240 } 228 }
241 if (CompilerConstants.IntegerNotSet != journalQuota) 229 if (CompilerConstants.IntegerNotSet != journalQuota)
242 { 230 {
243 row[3] = journalQuota; 231 row.Set(3, journalQuota);
244 } 232 }
245 row[4] = label; 233 row.Set(4, label);
246 row[5] = multicastAddress; 234 row.Set(5, multicastAddress);
247 row[6] = pathName; 235 row.Set(6, pathName);
248 if (CompilerConstants.IntegerNotSet != privLevel) 236 if (CompilerConstants.IntegerNotSet != privLevel)
249 { 237 {
250 row[7] = privLevel; 238 row.Set(7, privLevel);
251 } 239 }
252 if (CompilerConstants.IntegerNotSet != quota) 240 if (CompilerConstants.IntegerNotSet != quota)
253 { 241 {
254 row[8] = quota; 242 row.Set(8, quota);
255 } 243 }
256 row[9] = serviceTypeGuid; 244 row.Set(9, serviceTypeGuid);
257 row[10] = attributes; 245 row.Set(10, attributes);
258 246
259 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "MessageQueuingInstall"); 247 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "MessageQueuingInstall");
260 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "MessageQueuingUninstall"); 248 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "MessageQueuingUninstall");
261 } 249 }
262 250
263 /// <summary> 251 /// <summary>
@@ -266,11 +254,11 @@ namespace WixToolset.Extensions
266 /// <param name="node">Element to parse.</param> 254 /// <param name="node">Element to parse.</param>
267 /// <param name="componentKey">Identifier of parent component.</param> 255 /// <param name="componentKey">Identifier of parent component.</param>
268 /// <param name="applicationKey">Optional identifier of parent message queue.</param> 256 /// <param name="applicationKey">Optional identifier of parent message queue.</param>
269 private void ParseMessageQueuePermissionElement(XElement node, string componentId, string messageQueueId) 257 private void ParseMessageQueuePermissionElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentId, string messageQueueId)
270 { 258 {
271 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 259 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
272 260
273 string id = null; 261 Identifier id = null;
274 string user = null; 262 string user = null;
275 string group = null; 263 string group = null;
276 int permissions = 0; 264 int permissions = 0;
@@ -282,34 +270,34 @@ namespace WixToolset.Extensions
282 switch (attrib.Name.LocalName) 270 switch (attrib.Name.LocalName)
283 { 271 {
284 case "Id": 272 case "Id":
285 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 273 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
286 break; 274 break;
287 case "MessageQueue": 275 case "MessageQueue":
288 if (null != messageQueueId) 276 if (null != messageQueueId)
289 { 277 {
290 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 278 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
291 } 279 }
292 messageQueueId = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 280 messageQueueId = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
293 this.Core.CreateSimpleReference(sourceLineNumbers, "MessageQueue", messageQueueId); 281 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "MessageQueue", messageQueueId);
294 break; 282 break;
295 case "User": 283 case "User":
296 if (null != group) 284 if (null != group)
297 { 285 {
298 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "User", "Group")); 286 this.Messaging.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "User", "Group"));
299 } 287 }
300 user = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 288 user = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
301 this.Core.CreateSimpleReference(sourceLineNumbers, "User", user); 289 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "User", user);
302 break; 290 break;
303 case "Group": 291 case "Group":
304 if (null != user) 292 if (null != user)
305 { 293 {
306 this.Core.OnMessage(WixErrors.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Group", "User")); 294 this.Messaging.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "Group", "User"));
307 } 295 }
308 group = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 296 group = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
309 this.Core.CreateSimpleReference(sourceLineNumbers, "Group", group); 297 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "Group", group);
310 break; 298 break;
311 case "DeleteMessage": 299 case "DeleteMessage":
312 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 300 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
313 { 301 {
314 permissions |= (int)MqiMessageQueuePermission.DeleteMessage; 302 permissions |= (int)MqiMessageQueuePermission.DeleteMessage;
315 } 303 }
@@ -319,7 +307,7 @@ namespace WixToolset.Extensions
319 } 307 }
320 break; 308 break;
321 case "PeekMessage": 309 case "PeekMessage":
322 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 310 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
323 { 311 {
324 permissions |= (int)MqiMessageQueuePermission.PeekMessage; 312 permissions |= (int)MqiMessageQueuePermission.PeekMessage;
325 } 313 }
@@ -329,7 +317,7 @@ namespace WixToolset.Extensions
329 } 317 }
330 break; 318 break;
331 case "WriteMessage": 319 case "WriteMessage":
332 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 320 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
333 { 321 {
334 permissions |= (int)MqiMessageQueuePermission.WriteMessage; 322 permissions |= (int)MqiMessageQueuePermission.WriteMessage;
335 } 323 }
@@ -339,7 +327,7 @@ namespace WixToolset.Extensions
339 } 327 }
340 break; 328 break;
341 case "DeleteJournalMessage": 329 case "DeleteJournalMessage":
342 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 330 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
343 { 331 {
344 permissions |= (int)MqiMessageQueuePermission.DeleteJournalMessage; 332 permissions |= (int)MqiMessageQueuePermission.DeleteJournalMessage;
345 } 333 }
@@ -349,7 +337,7 @@ namespace WixToolset.Extensions
349 } 337 }
350 break; 338 break;
351 case "SetQueueProperties": 339 case "SetQueueProperties":
352 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 340 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
353 { 341 {
354 permissions |= (int)MqiMessageQueuePermission.SetQueueProperties; 342 permissions |= (int)MqiMessageQueuePermission.SetQueueProperties;
355 } 343 }
@@ -359,7 +347,7 @@ namespace WixToolset.Extensions
359 } 347 }
360 break; 348 break;
361 case "GetQueueProperties": 349 case "GetQueueProperties":
362 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 350 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
363 { 351 {
364 permissions |= (int)MqiMessageQueuePermission.GetQueueProperties; 352 permissions |= (int)MqiMessageQueuePermission.GetQueueProperties;
365 } 353 }
@@ -369,7 +357,7 @@ namespace WixToolset.Extensions
369 } 357 }
370 break; 358 break;
371 case "DeleteQueue": 359 case "DeleteQueue":
372 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 360 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
373 { 361 {
374 permissions |= (int)MqiMessageQueuePermission.DeleteQueue; 362 permissions |= (int)MqiMessageQueuePermission.DeleteQueue;
375 } 363 }
@@ -379,7 +367,7 @@ namespace WixToolset.Extensions
379 } 367 }
380 break; 368 break;
381 case "GetQueuePermissions": 369 case "GetQueuePermissions":
382 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 370 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
383 { 371 {
384 permissions |= (int)MqiMessageQueuePermission.GetQueuePermissions; 372 permissions |= (int)MqiMessageQueuePermission.GetQueuePermissions;
385 } 373 }
@@ -389,7 +377,7 @@ namespace WixToolset.Extensions
389 } 377 }
390 break; 378 break;
391 case "ChangeQueuePermissions": 379 case "ChangeQueuePermissions":
392 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 380 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
393 { 381 {
394 permissions |= (int)MqiMessageQueuePermission.ChangeQueuePermissions; 382 permissions |= (int)MqiMessageQueuePermission.ChangeQueuePermissions;
395 } 383 }
@@ -399,7 +387,7 @@ namespace WixToolset.Extensions
399 } 387 }
400 break; 388 break;
401 case "TakeQueueOwnership": 389 case "TakeQueueOwnership":
402 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 390 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
403 { 391 {
404 permissions |= (int)MqiMessageQueuePermission.TakeQueueOwnership; 392 permissions |= (int)MqiMessageQueuePermission.TakeQueueOwnership;
405 } 393 }
@@ -409,7 +397,7 @@ namespace WixToolset.Extensions
409 } 397 }
410 break; 398 break;
411 case "ReceiveMessage": 399 case "ReceiveMessage":
412 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 400 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
413 { 401 {
414 permissions |= (int)MqiMessageQueuePermission.ReceiveMessage; 402 permissions |= (int)MqiMessageQueuePermission.ReceiveMessage;
415 } 403 }
@@ -419,7 +407,7 @@ namespace WixToolset.Extensions
419 } 407 }
420 break; 408 break;
421 case "ReceiveJournalMessage": 409 case "ReceiveJournalMessage":
422 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 410 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
423 { 411 {
424 permissions |= (int)MqiMessageQueuePermission.ReceiveJournalMessage; 412 permissions |= (int)MqiMessageQueuePermission.ReceiveJournalMessage;
425 } 413 }
@@ -429,7 +417,7 @@ namespace WixToolset.Extensions
429 } 417 }
430 break; 418 break;
431 case "QueueGenericRead": 419 case "QueueGenericRead":
432 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 420 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
433 { 421 {
434 permissions |= (int)MqiMessageQueuePermission.QueueGenericRead; 422 permissions |= (int)MqiMessageQueuePermission.QueueGenericRead;
435 } 423 }
@@ -439,7 +427,7 @@ namespace WixToolset.Extensions
439 } 427 }
440 break; 428 break;
441 case "QueueGenericWrite": 429 case "QueueGenericWrite":
442 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 430 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
443 { 431 {
444 permissions |= (int)MqiMessageQueuePermission.QueueGenericWrite; 432 permissions |= (int)MqiMessageQueuePermission.QueueGenericWrite;
445 } 433 }
@@ -449,7 +437,7 @@ namespace WixToolset.Extensions
449 } 437 }
450 break; 438 break;
451 case "QueueGenericExecute": 439 case "QueueGenericExecute":
452 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 440 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
453 { 441 {
454 permissions |= (int)MqiMessageQueuePermission.QueueGenericExecute; 442 permissions |= (int)MqiMessageQueuePermission.QueueGenericExecute;
455 } 443 }
@@ -459,7 +447,7 @@ namespace WixToolset.Extensions
459 } 447 }
460 break; 448 break;
461 case "QueueGenericAll": 449 case "QueueGenericAll":
462 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 450 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
463 { 451 {
464 permissions |= (int)MqiMessageQueuePermission.QueueGenericAll; 452 permissions |= (int)MqiMessageQueuePermission.QueueGenericAll;
465 } 453 }
@@ -469,44 +457,42 @@ namespace WixToolset.Extensions
469 } 457 }
470 break; 458 break;
471 default: 459 default:
472 this.Core.UnexpectedAttribute(node, attrib); 460 this.ParseHelper.UnexpectedAttribute(node, attrib);
473 break; 461 break;
474 } 462 }
475 } 463 }
476 else 464 else
477 { 465 {
478 this.Core.ParseExtensionAttribute(node, attrib); 466 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
479 } 467 }
480 } 468 }
481 469
482 if (null == messageQueueId) 470 if (null == messageQueueId)
483 { 471 {
484 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "MessageQueue")); 472 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "MessageQueue"));
485 } 473 }
486 if (null == user && null == group) 474 if (null == user && null == group)
487 { 475 {
488 this.Core.OnMessage(WixErrors.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "User", "Group")); 476 this.Messaging.Write(ErrorMessages.ExpectedAttributes(sourceLineNumbers, node.Name.LocalName, "User", "Group"));
489 } 477 }
490 478
491 this.Core.ParseForExtensionElements(node); 479 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, node);
492 480
493 if (null != user) 481 if (null != user)
494 { 482 {
495 Row row = this.Core.CreateRow(sourceLineNumbers, "MessageQueueUserPermission"); 483 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "MessageQueueUserPermission", id);
496 row[0] = id; 484 row.Set(1, componentId);
497 row[1] = componentId; 485 row.Set(2, messageQueueId);
498 row[2] = messageQueueId; 486 row.Set(3, user);
499 row[3] = user; 487 row.Set(4, permissions);
500 row[4] = permissions;
501 } 488 }
502 if (null != group) 489 if (null != group)
503 { 490 {
504 Row row = this.Core.CreateRow(sourceLineNumbers, "MessageQueueGroupPermission"); 491 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "MessageQueueGroupPermission", id);
505 row[0] = id; 492 row.Set(1, componentId);
506 row[1] = componentId; 493 row.Set(2, messageQueueId);
507 row[2] = messageQueueId; 494 row.Set(3, group);
508 row[3] = group; 495 row.Set(4, permissions);
509 row[4] = permissions;
510 } 496 }
511 } 497 }
512 498