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.cs98
1 files changed, 52 insertions, 46 deletions
diff --git a/src/wixext/MsmqCompiler.cs b/src/wixext/MsmqCompiler.cs
index 5365f0fb..15c3f3ca 100644
--- a/src/wixext/MsmqCompiler.cs
+++ b/src/wixext/MsmqCompiler.cs
@@ -7,6 +7,7 @@ namespace WixToolset.Msmq
7 using System.Xml.Linq; 7 using System.Xml.Linq;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Extensibility; 9 using WixToolset.Extensibility;
10 using WixToolset.Msmq.Tuples;
10 11
11 /// <summary> 12 /// <summary>
12 /// The compiler for the WiX Toolset MSMQ Extension. 13 /// The compiler for the WiX Toolset MSMQ Extension.
@@ -69,8 +70,8 @@ namespace WixToolset.Msmq
69 switch (parentElement.Name.LocalName) 70 switch (parentElement.Name.LocalName)
70 { 71 {
71 case "Component": 72 case "Component":
72 string componentId = context["ComponentId"]; 73 var componentId = context["ComponentId"];
73 string directoryId = context["DirectoryId"]; 74 var directoryId = context["DirectoryId"];
74 75
75 switch (element.Name.LocalName) 76 switch (element.Name.LocalName)
76 { 77 {
@@ -98,20 +99,20 @@ namespace WixToolset.Msmq
98 /// <param name="componentKey">Identifier of parent component.</param> 99 /// <param name="componentKey">Identifier of parent component.</param>
99 private void ParseMessageQueueElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentId) 100 private void ParseMessageQueueElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentId)
100 { 101 {
101 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node); 102 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
102 103
103 Identifier id = null; 104 Identifier id = null;
104 int basePriority = CompilerConstants.IntegerNotSet; 105 var basePriority = CompilerConstants.IntegerNotSet;
105 int journalQuota = CompilerConstants.IntegerNotSet; 106 var journalQuota = CompilerConstants.IntegerNotSet;
106 string label = null; 107 string label = null;
107 string multicastAddress = null; 108 string multicastAddress = null;
108 string pathName = null; 109 string pathName = null;
109 int privLevel = CompilerConstants.IntegerNotSet; 110 var privLevel = CompilerConstants.IntegerNotSet;
110 int quota = CompilerConstants.IntegerNotSet; 111 var quota = CompilerConstants.IntegerNotSet;
111 string serviceTypeGuid = null; 112 string serviceTypeGuid = null;
112 int attributes = 0; 113 int attributes = 0;
113 114
114 foreach (XAttribute attrib in node.Attributes()) 115 foreach (var attrib in node.Attributes())
115 { 116 {
116 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 117 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
117 { 118 {
@@ -156,7 +157,7 @@ namespace WixToolset.Msmq
156 pathName = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 157 pathName = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
157 break; 158 break;
158 case "PrivLevel": 159 case "PrivLevel":
159 string privLevelAttr = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 160 var privLevelAttr = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
160 switch (privLevelAttr) 161 switch (privLevelAttr)
161 { 162 {
162 case "none": 163 case "none":
@@ -200,7 +201,7 @@ namespace WixToolset.Msmq
200 } 201 }
201 } 202 }
202 203
203 foreach (XElement child in node.Elements()) 204 foreach (var child in node.Elements())
204 { 205 {
205 if (this.Namespace == child.Name.Namespace) 206 if (this.Namespace == child.Name.Namespace)
206 { 207 {
@@ -220,32 +221,36 @@ namespace WixToolset.Msmq
220 } 221 }
221 } 222 }
222 223
223 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "MessageQueue", id); 224 var tuple = section.AddTuple(new MessageQueueTuple(sourceLineNumbers, id)
224 row.Set(1, componentId); 225 {
226 ComponentRef = componentId,
227 Label = label,
228 MulticastAddress = multicastAddress,
229 PathName = pathName,
230 ServiceTypeGuid = serviceTypeGuid,
231 Attributes = attributes,
232 });
233
225 if (CompilerConstants.IntegerNotSet != basePriority) 234 if (CompilerConstants.IntegerNotSet != basePriority)
226 { 235 {
227 row.Set(2, basePriority); 236 tuple.BasePriority = basePriority;
228 } 237 }
229 if (CompilerConstants.IntegerNotSet != journalQuota) 238 if (CompilerConstants.IntegerNotSet != journalQuota)
230 { 239 {
231 row.Set(3, journalQuota); 240 tuple.JournalQuota = journalQuota;
232 } 241 }
233 row.Set(4, label); 242
234 row.Set(5, multicastAddress);
235 row.Set(6, pathName);
236 if (CompilerConstants.IntegerNotSet != privLevel) 243 if (CompilerConstants.IntegerNotSet != privLevel)
237 { 244 {
238 row.Set(7, privLevel); 245 tuple.PrivLevel = privLevel;
239 } 246 }
240 if (CompilerConstants.IntegerNotSet != quota) 247 if (CompilerConstants.IntegerNotSet != quota)
241 { 248 {
242 row.Set(8, quota); 249 tuple.Quota = quota;
243 } 250 }
244 row.Set(9, serviceTypeGuid);
245 row.Set(10, attributes);
246 251
247 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "MessageQueuingInstall"); 252 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.CustomAction, "MessageQueuingInstall");
248 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "MessageQueuingUninstall"); 253 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.CustomAction, "MessageQueuingUninstall");
249 } 254 }
250 255
251 /// <summary> 256 /// <summary>
@@ -256,14 +261,14 @@ namespace WixToolset.Msmq
256 /// <param name="applicationKey">Optional identifier of parent message queue.</param> 261 /// <param name="applicationKey">Optional identifier of parent message queue.</param>
257 private void ParseMessageQueuePermissionElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentId, string messageQueueId) 262 private void ParseMessageQueuePermissionElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentId, string messageQueueId)
258 { 263 {
259 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node); 264 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
260 265
261 Identifier id = null; 266 Identifier id = null;
262 string user = null; 267 string user = null;
263 string group = null; 268 string group = null;
264 int permissions = 0; 269 int permissions = 0;
265 270
266 foreach (XAttribute attrib in node.Attributes()) 271 foreach (var attrib in node.Attributes())
267 { 272 {
268 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 273 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
269 { 274 {
@@ -278,7 +283,7 @@ namespace WixToolset.Msmq
278 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 283 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
279 } 284 }
280 messageQueueId = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 285 messageQueueId = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
281 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "MessageQueue", messageQueueId); 286 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, MsmqTupleDefinitions.MessageQueue, messageQueueId);
282 break; 287 break;
283 case "User": 288 case "User":
284 if (null != group) 289 if (null != group)
@@ -467,6 +472,11 @@ namespace WixToolset.Msmq
467 } 472 }
468 } 473 }
469 474
475 if (null == id)
476 {
477 id = this.ParseHelper.CreateIdentifier("mqp", componentId, messageQueueId, user, group);
478 }
479
470 if (null == messageQueueId) 480 if (null == messageQueueId)
471 { 481 {
472 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "MessageQueue")); 482 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "MessageQueue"));
@@ -480,19 +490,23 @@ namespace WixToolset.Msmq
480 490
481 if (null != user) 491 if (null != user)
482 { 492 {
483 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "MessageQueueUserPermission", id); 493 section.AddTuple(new MessageQueueUserPermissionTuple(sourceLineNumbers, id)
484 row.Set(1, componentId); 494 {
485 row.Set(2, messageQueueId); 495 ComponentRef = componentId,
486 row.Set(3, user); 496 MessageQueueRef = messageQueueId,
487 row.Set(4, permissions); 497 UserRef = user,
498 Permissions = permissions,
499 });
488 } 500 }
489 if (null != group) 501 if (null != group)
490 { 502 {
491 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "MessageQueueGroupPermission", id); 503 section.AddTuple(new MessageQueueGroupPermissionTuple(sourceLineNumbers, id)
492 row.Set(1, componentId); 504 {
493 row.Set(2, messageQueueId); 505 ComponentRef = componentId,
494 row.Set(3, group); 506 MessageQueueRef = messageQueueId,
495 row.Set(4, permissions); 507 GroupRef = group,
508 Permissions = permissions,
509 });
496 } 510 }
497 } 511 }
498 512
@@ -504,19 +518,11 @@ namespace WixToolset.Msmq
504 /// <returns></returns> 518 /// <returns></returns>
505 string TryFormatGuidValue(string val) 519 string TryFormatGuidValue(string val)
506 { 520 {
507 try 521 if (!Guid.TryParse(val, out var guid))
508 {
509 Guid guid = new Guid(val);
510 return guid.ToString("B").ToUpper();
511 }
512 catch (FormatException)
513 {
514 return val;
515 }
516 catch (OverflowException)
517 { 522 {
518 return val; 523 return val;
519 } 524 }
525 return guid.ToString("B").ToUpper();
520 } 526 }
521 } 527 }
522} 528}