aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Data/IntermediateFieldExtensions.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/WixToolset.Data/IntermediateFieldExtensions.cs')
-rw-r--r--src/WixToolset.Data/IntermediateFieldExtensions.cs370
1 files changed, 211 insertions, 159 deletions
diff --git a/src/WixToolset.Data/IntermediateFieldExtensions.cs b/src/WixToolset.Data/IntermediateFieldExtensions.cs
index a73a6552..5d2ddf06 100644
--- a/src/WixToolset.Data/IntermediateFieldExtensions.cs
+++ b/src/WixToolset.Data/IntermediateFieldExtensions.cs
@@ -20,20 +20,21 @@ namespace WixToolset.Data
20 20
21 switch (field.Definition.Type) 21 switch (field.Definition.Type)
22 { 22 {
23 case IntermediateFieldType.Bool: 23 case IntermediateFieldType.Bool:
24 return field.Value.AsBool(); 24 return field.Value.AsBool();
25 25
26 case IntermediateFieldType.Number: 26 case IntermediateFieldType.LargeNumber:
27 return field.Value.AsNumber() != 0; 27 case IntermediateFieldType.Number:
28 return field.Value.AsLargeNumber() != 0;
28 29
29 case IntermediateFieldType.String: 30 case IntermediateFieldType.String:
30 return !String.IsNullOrEmpty(field.Value.AsString()); 31 return !String.IsNullOrEmpty(field.Value.AsString());
31 32
32 case IntermediateFieldType.Path: 33 case IntermediateFieldType.Path:
33 return !String.IsNullOrEmpty(field.Value.AsPath()?.Path); 34 return !String.IsNullOrEmpty(field.Value.AsPath()?.Path);
34 35
35 default: 36 default:
36 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to boolean"); 37 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to boolean");
37 } 38 }
38 } 39 }
39 40
@@ -46,20 +47,68 @@ namespace WixToolset.Data
46 47
47 switch (field.Definition.Type) 48 switch (field.Definition.Type)
48 { 49 {
49 case IntermediateFieldType.Bool: 50 case IntermediateFieldType.Bool:
50 return field.Value.AsBool(); 51 return field.Value.AsBool();
51 52
52 case IntermediateFieldType.Number: 53 case IntermediateFieldType.LargeNumber:
53 return field.Value.AsNumber() != 0; 54 case IntermediateFieldType.Number:
55 return field.Value.AsLargeNumber() != 0;
54 56
55 case IntermediateFieldType.String: 57 case IntermediateFieldType.String:
56 return !String.IsNullOrEmpty(field.Value.AsString()); 58 return !String.IsNullOrEmpty(field.Value.AsString());
57 59
58 default: 60 default:
59 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to boolean"); 61 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to boolean");
60 } 62 }
61 } 63 }
62 64
65 public static long AsLargeNumber(this IntermediateField field)
66 {
67 if (field == null || field.Value == null || field.Value.Data == null)
68 {
69 return 0;
70 }
71
72 switch (field.Definition.Type)
73 {
74 case IntermediateFieldType.Bool:
75 return field.Value.AsBool() ? 1 : 0;
76
77 case IntermediateFieldType.LargeNumber:
78 case IntermediateFieldType.Number:
79 return field.Value.AsLargeNumber();
80
81 case IntermediateFieldType.String:
82 return Convert.ToInt64(field.Value.AsString());
83
84 default:
85 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to large number");
86 }
87 }
88
89 public static long? AsNullableLargeNumber(this IntermediateField field)
90 {
91 if (field == null || field.Value == null || field.Value.Data == null)
92 {
93 return null;
94 }
95
96 switch (field.Definition.Type)
97 {
98 case IntermediateFieldType.Bool:
99 return field.Value.AsBool() ? 1 : 0;
100
101 case IntermediateFieldType.LargeNumber:
102 case IntermediateFieldType.Number:
103 return field.Value.AsLargeNumber();
104
105 case IntermediateFieldType.String:
106 return Convert.ToInt64(field.Value.AsString());
107
108 default:
109 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to large number");
110 }
111 }
63 112
64 public static int AsNumber(this IntermediateField field) 113 public static int AsNumber(this IntermediateField field)
65 { 114 {
@@ -70,17 +119,18 @@ namespace WixToolset.Data
70 119
71 switch (field.Definition.Type) 120 switch (field.Definition.Type)
72 { 121 {
73 case IntermediateFieldType.Bool: 122 case IntermediateFieldType.Bool:
74 return field.Value.AsBool() ? 1 : 0; 123 return field.Value.AsBool() ? 1 : 0;
75 124
76 case IntermediateFieldType.Number: 125 case IntermediateFieldType.LargeNumber:
77 return field.Value.AsNumber(); 126 case IntermediateFieldType.Number:
127 return field.Value.AsNumber();
78 128
79 case IntermediateFieldType.String: 129 case IntermediateFieldType.String:
80 return Convert.ToInt32(field.Value.AsString()); 130 return Convert.ToInt32(field.Value.AsString());
81 131
82 default: 132 default:
83 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to number"); 133 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to number");
84 } 134 }
85 } 135 }
86 136
@@ -93,17 +143,18 @@ namespace WixToolset.Data
93 143
94 switch (field.Definition.Type) 144 switch (field.Definition.Type)
95 { 145 {
96 case IntermediateFieldType.Bool: 146 case IntermediateFieldType.Bool:
97 return field.Value.AsBool() ? 1 : 0; 147 return field.Value.AsBool() ? 1 : 0;
98 148
99 case IntermediateFieldType.Number: 149 case IntermediateFieldType.LargeNumber:
100 return field.Value.AsNumber(); 150 case IntermediateFieldType.Number:
151 return field.Value.AsNumber();
101 152
102 case IntermediateFieldType.String: 153 case IntermediateFieldType.String:
103 return Convert.ToInt32(field.Value.AsString()); 154 return Convert.ToInt32(field.Value.AsString());
104 155
105 default: 156 default:
106 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to number"); 157 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to number");
107 } 158 }
108 } 159 }
109 160
@@ -116,14 +167,14 @@ namespace WixToolset.Data
116 167
117 switch (field.Definition.Type) 168 switch (field.Definition.Type)
118 { 169 {
119 case IntermediateFieldType.String: 170 case IntermediateFieldType.String:
120 return new IntermediateFieldPathValue { Path = field.Value.AsString() }; 171 return new IntermediateFieldPathValue { Path = field.Value.AsString() };
121 172
122 case IntermediateFieldType.Path: 173 case IntermediateFieldType.Path:
123 return field.Value.AsPath(); 174 return field.Value.AsPath();
124 175
125 default: 176 default:
126 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to string"); 177 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to string");
127 } 178 }
128 } 179 }
129 180
@@ -136,20 +187,21 @@ namespace WixToolset.Data
136 187
137 switch (field.Definition.Type) 188 switch (field.Definition.Type)
138 { 189 {
139 case IntermediateFieldType.Bool: 190 case IntermediateFieldType.Bool:
140 return field.Value.AsBool() ? "true" : "false"; 191 return field.Value.AsBool() ? "true" : "false";
141 192
142 case IntermediateFieldType.Number: 193 case IntermediateFieldType.LargeNumber:
143 return field.Value.AsNumber().ToString(); 194 case IntermediateFieldType.Number:
195 return field.Value.AsLargeNumber().ToString();
144 196
145 case IntermediateFieldType.String: 197 case IntermediateFieldType.String:
146 return field.Value.AsString(); 198 return field.Value.AsString();
147 199
148 case IntermediateFieldType.Path: 200 case IntermediateFieldType.Path:
149 return field.Value.AsPath()?.Path; 201 return field.Value.AsPath()?.Path;
150 202
151 default: 203 default:
152 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to string"); 204 throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to string");
153 } 205 }
154 } 206 }
155 207
@@ -169,27 +221,27 @@ namespace WixToolset.Data
169 221
170 switch (field.Type) 222 switch (field.Type)
171 { 223 {
172 case IntermediateFieldType.Bool: 224 case IntermediateFieldType.Bool:
173 data = value; 225 data = value;
174 break; 226 break;
175 227
176 case IntermediateFieldType.LargeNumber: 228 case IntermediateFieldType.LargeNumber:
177 data = value ? (long)1 : (long)0; 229 data = value ? (long)1 : (long)0;
178 break; 230 break;
179 231
180 case IntermediateFieldType.Number: 232 case IntermediateFieldType.Number:
181 data = value ? 1 : 0; 233 data = value ? 1 : 0;
182 break; 234 break;
183 235
184 case IntermediateFieldType.Path: 236 case IntermediateFieldType.Path:
185 throw new ArgumentException($"Cannot convert bool '{value}' to a 'Path' field type.", nameof(value)); 237 throw new ArgumentException($"Cannot convert bool '{value}' to a 'Path' field type.", nameof(value));
186 238
187 case IntermediateFieldType.String: 239 case IntermediateFieldType.String:
188 data = value ? "true" : "false"; 240 data = value ? "true" : "false";
189 break; 241 break;
190 242
191 default: 243 default:
192 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}"); 244 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
193 }; 245 };
194 246
195 return AssignFieldValue(field, data); 247 return AssignFieldValue(field, data);
@@ -216,27 +268,27 @@ namespace WixToolset.Data
216 268
217 switch (field.Type) 269 switch (field.Type)
218 { 270 {
219 case IntermediateFieldType.Bool: 271 case IntermediateFieldType.Bool:
220 data = (value != 0); 272 data = (value != 0);
221 break; 273 break;
222 274
223 case IntermediateFieldType.LargeNumber: 275 case IntermediateFieldType.LargeNumber:
224 data = value; 276 data = value;
225 break; 277 break;
226 278
227 case IntermediateFieldType.Number: 279 case IntermediateFieldType.Number:
228 data = (int)value; 280 data = (int)value;
229 break; 281 break;
230 282
231 case IntermediateFieldType.Path: 283 case IntermediateFieldType.Path:
232 throw new ArgumentException($"Cannot convert large number '{value}' to a 'Path' field type.", nameof(value)); 284 throw new ArgumentException($"Cannot convert large number '{value}' to a 'Path' field type.", nameof(value));
233 285
234 case IntermediateFieldType.String: 286 case IntermediateFieldType.String:
235 data = value.ToString(); 287 data = value.ToString();
236 break; 288 break;
237 289
238 default: 290 default:
239 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}"); 291 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
240 }; 292 };
241 293
242 return AssignFieldValue(field, data); 294 return AssignFieldValue(field, data);
@@ -263,27 +315,27 @@ namespace WixToolset.Data
263 315
264 switch (field.Type) 316 switch (field.Type)
265 { 317 {
266 case IntermediateFieldType.Bool: 318 case IntermediateFieldType.Bool:
267 data = (value != 0); 319 data = (value != 0);
268 break; 320 break;
269 321
270 case IntermediateFieldType.LargeNumber: 322 case IntermediateFieldType.LargeNumber:
271 data = (long)value; 323 data = (long)value;
272 break; 324 break;
273 325
274 case IntermediateFieldType.Number: 326 case IntermediateFieldType.Number:
275 data = value; 327 data = value;
276 break; 328 break;
277 329
278 case IntermediateFieldType.Path: 330 case IntermediateFieldType.Path:
279 throw new ArgumentException($"Cannot convert number '{value}' to a 'Path' field type.", nameof(value)); 331 throw new ArgumentException($"Cannot convert number '{value}' to a 'Path' field type.", nameof(value));
280 332
281 case IntermediateFieldType.String: 333 case IntermediateFieldType.String:
282 data = value.ToString(); 334 data = value.ToString();
283 break; 335 break;
284 336
285 default: 337 default:
286 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}"); 338 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
287 }; 339 };
288 340
289 return AssignFieldValue(field, data); 341 return AssignFieldValue(field, data);
@@ -315,25 +367,25 @@ namespace WixToolset.Data
315 { 367 {
316 switch (field.Type) 368 switch (field.Type)
317 { 369 {
318 case IntermediateFieldType.Bool: 370 case IntermediateFieldType.Bool:
319 throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'bool' field type.", nameof(value)); 371 throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'bool' field type.", nameof(value));
320 372
321 case IntermediateFieldType.LargeNumber: 373 case IntermediateFieldType.LargeNumber:
322 throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'large number' field type.", nameof(value)); 374 throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'large number' field type.", nameof(value));
323 375
324 case IntermediateFieldType.Number: 376 case IntermediateFieldType.Number:
325 throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'number' field type.", nameof(value)); 377 throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'number' field type.", nameof(value));
326 378
327 case IntermediateFieldType.Path: 379 case IntermediateFieldType.Path:
328 data = value; 380 data = value;
329 break; 381 break;
330 382
331 case IntermediateFieldType.String: 383 case IntermediateFieldType.String:
332 data = value.Path; 384 data = value.Path;
333 break; 385 break;
334 386
335 default: 387 default:
336 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}"); 388 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
337 }; 389 };
338 } 390 }
339 391
@@ -356,53 +408,53 @@ namespace WixToolset.Data
356 { 408 {
357 switch (field.Type) 409 switch (field.Type)
358 { 410 {
359 case IntermediateFieldType.Bool: 411 case IntermediateFieldType.Bool:
360 if (value.Equals("yes", StringComparison.OrdinalIgnoreCase) || value.Equals("true", StringComparison.OrdinalIgnoreCase)) 412 if (value.Equals("yes", StringComparison.OrdinalIgnoreCase) || value.Equals("true", StringComparison.OrdinalIgnoreCase))
361 { 413 {
362 data = true; 414 data = true;
363 } 415 }
364 else if (value.Equals("no", StringComparison.OrdinalIgnoreCase) || value.Equals("false", StringComparison.OrdinalIgnoreCase)) 416 else if (value.Equals("no", StringComparison.OrdinalIgnoreCase) || value.Equals("false", StringComparison.OrdinalIgnoreCase))
365 { 417 {
366 data = false; 418 data = false;
367 } 419 }
368 else 420 else
369 { 421 {
370 throw new ArgumentException($"Cannot convert string '{value}' to a 'bool' field type.", nameof(value)); 422 throw new ArgumentException($"Cannot convert string '{value}' to a 'bool' field type.", nameof(value));
371 } 423 }
372 break; 424 break;
373 425
374 case IntermediateFieldType.LargeNumber: 426 case IntermediateFieldType.LargeNumber:
375 if (Int64.TryParse(value, out var largeNumber)) 427 if (Int64.TryParse(value, out var largeNumber))
376 { 428 {
377 data = largeNumber; 429 data = largeNumber;
378 } 430 }
379 else 431 else
380 { 432 {
381 throw new ArgumentException($"Cannot convert string '{value}' to a 'large number' field type.", nameof(value)); 433 throw new ArgumentException($"Cannot convert string '{value}' to a 'large number' field type.", nameof(value));
382 } 434 }
383 break; 435 break;
384 436
385 case IntermediateFieldType.Number: 437 case IntermediateFieldType.Number:
386 if (Int32.TryParse(value, out var number)) 438 if (Int32.TryParse(value, out var number))
387 { 439 {
388 data = number; 440 data = number;
389 } 441 }
390 else 442 else
391 { 443 {
392 throw new ArgumentException($"Cannot convert string '{value}' to a 'number' field type.", nameof(value)); 444 throw new ArgumentException($"Cannot convert string '{value}' to a 'number' field type.", nameof(value));
393 } 445 }
394 break; 446 break;
395 447
396 case IntermediateFieldType.Path: 448 case IntermediateFieldType.Path:
397 data = new IntermediateFieldPathValue { Path = value }; 449 data = new IntermediateFieldPathValue { Path = value };
398 break; 450 break;
399 451
400 case IntermediateFieldType.String: 452 case IntermediateFieldType.String:
401 data = value; 453 data = value;
402 break; 454 break;
403 455
404 default: 456 default:
405 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}"); 457 throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
406 }; 458 };
407 } 459 }
408 460