xmlutils 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +22 -0
  5. data/README.md +77 -0
  6. data/bin/xmltogdl +88 -0
  7. data/docs/README.txt +20 -0
  8. data/lib/xmlutils/contextlistener.rb +432 -0
  9. data/lib/xmlutils/contextparser.rb +111 -0
  10. data/lib/xmlutils/dumplistener.rb +57 -0
  11. data/lib/xmlutils/gdlcontext.rb +305 -0
  12. data/lib/xmlutils/gdlcontextobjs.rb +286 -0
  13. data/lib/xmlutils/gdldoc.rb +547 -0
  14. data/lib/xmlutils/gdldocbuilder.rb +181 -0
  15. data/lib/xmlutils/gdllistener.rb +265 -0
  16. data/lib/xmlutils/gdltemplate.rb +488 -0
  17. data/lib/xmlutils/lineparser.rb +193 -0
  18. data/lib/xmlutils/listener.rb +459 -0
  19. data/lib/xmlutils/rulelistener.rb +414 -0
  20. data/lib/xmlutils/ruleparser.rb +112 -0
  21. data/lib/xmlutils/varlistener.rb +86 -0
  22. data/lib/xmlutils/version.rb +5 -0
  23. data/lib/xmlutils/xmlrulevisitor.rb +704 -0
  24. data/lib/xmlutils/xmltogdlcontroller.rb +93 -0
  25. data/lib/xmlutils/xmltogdltask.rb +23 -0
  26. data/lib/xmlutils/xmlvisitor.rb +690 -0
  27. data/lib/xmlutils.rb +40 -0
  28. data/rakefile.rb +34 -0
  29. data/unittests/2830.xml +1 -0
  30. data/unittests/chunks.rb +31 -0
  31. data/unittests/curDirTest.rb +2 -0
  32. data/unittests/data/2830-GENERATED.gdl +309 -0
  33. data/unittests/data/2830-GENERATED.xml +1 -0
  34. data/unittests/data/AUGuideline.xml +12 -0
  35. data/unittests/data/AUGuideline.xml.gdl +19190 -0
  36. data/unittests/data/BAKUP.DCTEST1.xml +1 -0
  37. data/unittests/data/DCTEST.xml +1 -0
  38. data/unittests/data/DCTEST1.xml +1 -0
  39. data/unittests/data/DCTEST1.xml.gdl +14890 -0
  40. data/unittests/data/DCTEST1.xml.rename.csv +180 -0
  41. data/unittests/data/DCTEST1wLookups.xml +174 -0
  42. data/unittests/data/DCTEST1wLookups.xml.gdl +127 -0
  43. data/unittests/data/GENERATED.gdl.xml +1 -0
  44. data/unittests/data/Message.xml +1 -0
  45. data/unittests/data/Message.xml.gdl +142 -0
  46. data/unittests/data/Pricing2ndGuideline.xml +1 -0
  47. data/unittests/data/Pricing2ndGuideline.xml.gdl +52670 -0
  48. data/unittests/data/Z-TEMP-Jeff.xml +1 -0
  49. data/unittests/data/Z-TEMP-Jeff.xml.gdl +288 -0
  50. data/unittests/tc_convert_xml_to_gdl.rb +23 -0
  51. data/unittests/ts_allTests.rb +2 -0
  52. data/xmlutils.gemspec +25 -0
  53. metadata +139 -0
@@ -0,0 +1,547 @@
1
+ #
2
+ # File: gdlDoc.rb
3
+ #
4
+ # This class is used to create the final GDL document
5
+ #
6
+ #
7
+
8
+ require 'xmlutils/gdlcontextobjs'
9
+ require 'xmlutils/gdltemplate'
10
+ require 'date'
11
+
12
+
13
+
14
+
15
+
16
+ #################################################
17
+ #
18
+ # class GdlDoc
19
+ #
20
+ #################################################
21
+ class GdlDoc
22
+
23
+ attr_reader :context
24
+ attr_reader :srcPath
25
+
26
+
27
+
28
+
29
+ def initialize(srcPath, ctx)
30
+ super()
31
+ @srcPath = srcPath
32
+ @context = ctx
33
+ end
34
+
35
+
36
+
37
+
38
+ #------------------------------------------------------------------------------------------------------------#
39
+ # setOptions - Set configuration option flags
40
+ #
41
+ # flg - Array of options or single string option. Currently, only -v: verbose is available
42
+ #
43
+ #------------------------------------------------------------------------------------------------------------#
44
+ def setOptions(flgs)
45
+ if (flgs.class == Array)
46
+ flgs.each do |f|
47
+ case f
48
+ when '-v'
49
+ @verbose = true
50
+ end
51
+ end # flgs.each
52
+
53
+ return
54
+ end # if flgs
55
+
56
+ case flgs
57
+ when '-v'
58
+ @verbose = true
59
+ end
60
+
61
+ end
62
+
63
+
64
+
65
+
66
+ #-------------------------------------------------------------------------------------------------------------#
67
+ # currentDate - Generate today's date string
68
+ #
69
+ #
70
+ #------------------------------------------------------------------------------------------------------------#
71
+ def currentDate()
72
+ now = DateTime::now()
73
+ return now.strftime("%m/%d/%Y %H:%M:%S")
74
+ end # currentDate
75
+
76
+
77
+
78
+
79
+ #-------------------------------------------------------------------------------------------------------------#
80
+ # generate - Generate a GDL document
81
+ #
82
+ # returns string - generated file name
83
+ #
84
+ #------------------------------------------------------------------------------------------------------------#
85
+ def generate()
86
+ destDir = @context.options[:destdir]
87
+ destFile = @context.options[:destfile]
88
+ if(nil == destFile || destFile.empty?)
89
+ destFile = File.basename(@srcPath, ".xml") + ".gdl"
90
+ end
91
+
92
+ if ($DEBUG)
93
+ puts "generate:"
94
+ puts " sourcePath: #{@srcPath}"
95
+ puts " destDir: #{destDir}"
96
+ puts " destFile: #{destFile}"
97
+ puts " context: #{@context}"
98
+ end # if $DEBUG
99
+
100
+ tpl = GdlTemplate.new
101
+
102
+ genFile = File.join(destDir, destFile)
103
+
104
+ createOutdir(destDir)
105
+
106
+ File.open("#{genFile}", "w") do |ofile|
107
+
108
+ ofile << tpl.fileHeader(@srcPath, currentDate() )
109
+
110
+
111
+ ofile << tpl.sectionComment("DPM Definitions")
112
+
113
+ vars = @context.dpms.sort {|a, b| a[1].name.downcase <=> b[1].name.downcase}
114
+ vars.each do |rDpm|
115
+ dpm = rDpm[1]
116
+ if (dpm.varType == "DPM")
117
+ ofile << tpl.dpm(dpm.prodType, dpm.name, dpm.alias)
118
+ end # if dpm
119
+ end # do
120
+
121
+ # @context.dpms.each do |key, dpm|
122
+ # if (dpm.varType == "DPM")
123
+ # ofile << tpl.dpm(dpm.prodType, dpm.name, dpm.alias)
124
+ # end # if dpm
125
+ # end # dpms.each
126
+
127
+
128
+ ofile << tpl.sectionComment("DSM Definitions")
129
+
130
+
131
+ vars = @context.dpms.sort {|a, b| a[1].name.downcase <=> b[1].name.downcase}
132
+ vars.each do |rDpm|
133
+ dpm = rDpm[1]
134
+ if (dpm.varType == "DSM")
135
+ ofile << tpl.dsm(dpm.prodType, dpm.name, dpm.alias)
136
+ end # if dpm
137
+ end # do
138
+
139
+ # @context.dpms.each do |key, dpm|
140
+ # if (dpm.varType == "DSM")
141
+ # ofile << tpl.dsm(dpm.prodType, dpm.name, dpm.alias)
142
+ # end # if dsm
143
+ # end # dsms.each
144
+
145
+ #@context.ppms.each do |p|
146
+ # puts p.inspect
147
+ #end
148
+
149
+ # @context.ppms consists of an array of [ppm alias, ppm object]s
150
+ #vars = @context.ppms.sort {|a, b| a[1].name.downcase <=> b[1].name.downcase}
151
+
152
+ prds = @context.ppms.select {|a,b| b.varType == "prd"}
153
+ prds.sort {|a, b| a[1].name.downcase <=> b[1].name.downcase}
154
+
155
+ apps = @context.ppms.select {|a,b| b.varType == "app"}
156
+ apps.sort {|a, b| a[1].name.downcase <=> b[1].name.downcase}
157
+
158
+ crds = @context.ppms.select {|a,b| b.varType == "crd"}
159
+ crds.sort {|a, b| a[1].name.downcase <=> b[1].name.downcase}
160
+
161
+ ofile << tpl.sectionComment("PPM Definitions (PRD)")
162
+ prds.each do |rPpm|
163
+ ppm = rPpm[1]
164
+ ofile << tpl.ppm(ppm.dataType, ppm.varType, ppm.name, ppm.alias)
165
+ end # do
166
+
167
+ ofile << tpl.sectionComment("PPM Definitions (APP)")
168
+ apps.each do |rPpm|
169
+ ppm = rPpm[1]
170
+ ofile << tpl.ppm(ppm.dataType, ppm.varType, ppm.name, ppm.alias)
171
+ end # do
172
+
173
+ ofile << tpl.sectionComment("PPM Definitions (CRD)")
174
+ crds.each do |rPpm|
175
+ ppm = rPpm[1]
176
+ ofile << tpl.ppm(ppm.dataType, ppm.varType, ppm.name, ppm.alias)
177
+ end # do
178
+
179
+ # @context.ppms.each do |key, ppm|
180
+ # ofile << tpl.ppm(ppm.dataType, ppm.varType, ppm.name, ppm.alias)
181
+ # end # ppms.each
182
+
183
+
184
+ ofile << tpl.multiLineComment(buildLookupList(), "Lookups that need to be imported")
185
+
186
+
187
+ ofile << tpl.sectionComment("Rule Definitions")
188
+
189
+ rules = @context.rules.sort {|a, b| a[1].name.downcase <=> b[1].name.downcase}
190
+ rules.each do |rrule|
191
+ rule = rrule[1]
192
+ ofile << tpl.rule(rule)
193
+ end # do
194
+
195
+ # @context.rules.each do |key, rule|
196
+ # ofile << tpl.rule(rule)
197
+ # end # rules.each
198
+
199
+
200
+ ofile << tpl.sectionComment("Ruleset Definitions")
201
+
202
+ rulesets = @context.rulesets.sort {|a, b| a[1].name.downcase <=> b[1].name.downcase}
203
+ rulesets.each do |rruleset|
204
+ ruleset = rruleset[1]
205
+ ofile << tpl.ruleset(ruleset, @context)
206
+ end # do
207
+
208
+ # @context.rulesets.each do |key, ruleset|
209
+ # ofile << tpl.ruleset(ruleset, @context)
210
+ # end # ruleset.each
211
+
212
+
213
+ ofile << tpl.sectionComment("Guideline Definition")
214
+ ofile << tpl.guideline(@context)
215
+
216
+
217
+ end
218
+
219
+ return genFile
220
+
221
+ end # generate
222
+
223
+
224
+
225
+
226
+ #-------------------------------------------------------------------------------------------------------------#
227
+ # generateRenameList - Generate a CSV rename list
228
+ #
229
+ # returns string - generated file name
230
+ #
231
+ #------------------------------------------------------------------------------------------------------------#
232
+ def generateRenameList()
233
+ destDir = @context.options[:destdir]
234
+ destFile = @context.options[:destfile]
235
+ if(nil == destFile || destFile.empty?)
236
+ destFile = File.basename(@srcPath, ".xml") + ".gdl"
237
+ end
238
+
239
+ destFile = File.basename(destFile, ".gdl") + ".rename.csv"
240
+
241
+ if ($DEBUG)
242
+ puts "generateRenameList:"
243
+ puts " sourcePath: #{@srcPath}"
244
+ puts " destDir: #{destDir}"
245
+ puts " context: #{@context}"
246
+ end # if $DEBUG
247
+
248
+ genFile = File.join(destDir, destFile)
249
+
250
+ createOutdir(destDir)
251
+
252
+ File.open("#{genFile}", "w") do |ofile|
253
+
254
+ # Don't add to list if alias has '.'.
255
+ # Don't add to list if alias and name are identical.
256
+ vars = @context.rules.sort {|a, b| a[0].downcase <=> b[0].downcase}
257
+ vars.each do |ruleAry|
258
+ rule = ruleAry[1]
259
+ if (ruleAry[0] != rule.name)
260
+ if (nil == ruleAry[0].index('.'))
261
+ ofile << "rule,#{ruleAry[0]},#{rule.name}\n"
262
+ end # if no period
263
+ end # if name and alias do not match
264
+ end # do
265
+
266
+
267
+
268
+
269
+ # Don't add to list if ruleset is powerlookup.
270
+ # Don't add to list if alias and name are identical.
271
+ vars = @context.rulesets.sort {|a, b| a[0].downcase <=> b[0].downcase}
272
+ vars.each do |rulesetAry|
273
+ ruleset = rulesetAry[1]
274
+ if ("PL" != ruleset.type)
275
+ if (rulesetAry[0] != ruleset.name)
276
+ ofile << "ruleset,#{rulesetAry[0]},#{ruleset.name}\n"
277
+ end # if not identical
278
+ end # if not PL ruleset
279
+ end # do
280
+
281
+
282
+
283
+ end
284
+
285
+ return genFile
286
+
287
+ end # generateRenameList
288
+
289
+
290
+
291
+
292
+ #-------------------------------------------------------------------------------------------------------------#
293
+ # buildLookupList - Create a listing of lookup definitions from the context
294
+ #
295
+ #
296
+ #------------------------------------------------------------------------------------------------------------#
297
+ def buildLookupList()
298
+ lkups = Hash.new
299
+ lkList = ""
300
+ tpl = GdlTemplate.new
301
+
302
+ @context.lookups.each do |lkName, lkup|
303
+ params = @context.getLookupParamNames(lkName)
304
+ lkups[lkName] = tpl.lookup(lkName, params["xparam"], params["yparam"])
305
+ # lkList += tpl.lookup(lkName, params["xparam"], params["yparam"])
306
+ # lkList += ";\n" # Put each lookup on a seperate line
307
+ end # do
308
+
309
+ sorted = lkups.sort {|a, b| a[0].downcase <=> b[0].downcase}
310
+ sorted.each do |item|
311
+ lkList += "#{item[1]};\n"
312
+ end # do sorted
313
+
314
+ return lkList
315
+ end # def buildLookupList
316
+
317
+
318
+
319
+
320
+ #-------------------------------------------------------------------------------------------------------------#
321
+ # createOutdir - Create a directory if it does not exist
322
+ #
323
+ # outdir - Directory name/path to create
324
+ #
325
+ #------------------------------------------------------------------------------------------------------------#
326
+ def createOutdir(outdir)
327
+ if( !File.directory?(outdir) )
328
+ FileUtils.makedirs("#{outdir}")
329
+ end
330
+
331
+ end # def createOutdir
332
+
333
+
334
+
335
+
336
+ #-------------------------------------------------------------------------------------------------------------#
337
+ # outputFileHeader - output file header
338
+ #
339
+ # ofile - output file to write header to
340
+ # infile - Name of file to create header for
341
+ #
342
+ #------------------------------------------------------------------------------------------------------------#
343
+ def outputFileHeader(ofile, infile)
344
+ header = <<EOF
345
+ /* **************************************************************************
346
+ * File: #{infile}.gdl
347
+ * Generated guideline
348
+ *
349
+ * *************************************************************************/
350
+
351
+
352
+ EOF
353
+
354
+ ofile << header
355
+ end
356
+
357
+
358
+
359
+ #-------------------------------------------------------------------------------------------------------------#
360
+ # definitionHeader - output collected variables to file
361
+ #
362
+ # headerType - Header type (ex: DSM)
363
+ #
364
+ #------------------------------------------------------------------------------------------------------------#
365
+ def definitionHeader(headerType)
366
+ header = <<EOF
367
+
368
+
369
+
370
+
371
+ // ---------------------------- #{headerType} definitions ----------------------------
372
+
373
+ EOF
374
+
375
+ header
376
+
377
+ end # def definitionHeader
378
+
379
+
380
+
381
+
382
+ #-------------------------------------------------------------------------------------------------------------#
383
+ # outputPpm - generate a GDL version of a PPM definition based on PPM XML element
384
+ #
385
+ # var - XML element to generate output for
386
+ #
387
+ # @returns GDL output for PPM definition
388
+ #
389
+ #------------------------------------------------------------------------------------------------------------#
390
+ def outputPpm(var)
391
+ xVarType = "text"
392
+ xvarSection = var.attribute('Type').to_s
393
+
394
+ case xvarSection
395
+ when 'APM'
396
+ varSection = "app"
397
+
398
+ when 'PRD'
399
+ varSection = "prd"
400
+
401
+ when 'CRP'
402
+ varSection = "crd"
403
+ end
404
+
405
+ varAlias = var.attribute('Alias')
406
+ varName = var.attribute('Name')
407
+
408
+
409
+ out = <<EOF
410
+ ppm #{xVarType} #{varSection} p#{varName} "#{varAlias}";
411
+ EOF
412
+
413
+ out # Return generated output
414
+ end # outputPpm
415
+
416
+
417
+ #-------------------------------------------------------------------------------------------------------------#
418
+ # outputDsm - generate a GDL version of a DSM definition based on DSM XML element
419
+ #
420
+ # var - XML element to generate output for
421
+ #
422
+ # @returns GDL output for DSM definition
423
+ #
424
+ #------------------------------------------------------------------------------------------------------------#
425
+ def outputDsm(var)
426
+ xVarType = var.attribute('ProductType').to_s
427
+
428
+ case xVarType
429
+ when '1'
430
+ varType = "boolean"
431
+
432
+ when '2'
433
+ varType = "date"
434
+
435
+ when '3'
436
+ varType = "money"
437
+
438
+ when '4'
439
+ varType = "numeric"
440
+
441
+ when '5'
442
+ varType = "percentage"
443
+
444
+ when '6'
445
+ varType = "text"
446
+ end
447
+
448
+ varAlias = var.attribute('Alias')
449
+ varName = var.attribute('Name')
450
+
451
+
452
+ out = <<EOF
453
+ decision dpm #{varType} #{varName} "#{varAlias}";
454
+ EOF
455
+
456
+ out # Return generated output
457
+ end # outputDsm
458
+
459
+
460
+ #-------------------------------------------------------------------------------------------------------------#
461
+ # outputDpm - generate a GDL version of a DPM definition based on DPM XML element
462
+ #
463
+ # var - XML element to generate output for
464
+ #
465
+ # @returns GDL output for DPM definition
466
+ #
467
+ #------------------------------------------------------------------------------------------------------------#
468
+ def outputDpm(var)
469
+ xVarType = var.attribute('ProductType').to_s
470
+
471
+ case xVarType
472
+ when '1'
473
+ varType = "boolean"
474
+
475
+ when '2'
476
+ varType = "date"
477
+
478
+ when '3'
479
+ varType = "money"
480
+
481
+ when '4'
482
+ varType = "numeric"
483
+
484
+ when '5'
485
+ varType = "percentage"
486
+
487
+ when '6'
488
+ varType = "text"
489
+ end
490
+
491
+ varAlias = var.attribute('Alias')
492
+ varName = var.attribute('Name')
493
+
494
+
495
+ out = <<EOF
496
+ dpm #{varType} #{varName} "#{varAlias}";
497
+ EOF
498
+
499
+ out # Return generated output
500
+ end # outputDpm
501
+
502
+
503
+
504
+
505
+ #-------------------------------------------------------------------------------------------------------------#
506
+ # outputRuleInfo - output collected variables to file
507
+ #
508
+ # ofile - output file handle
509
+ #
510
+ #------------------------------------------------------------------------------------------------------------#
511
+ def outputRuleInfo(ofile)
512
+
513
+ ofile << definitionHeader("Rule")
514
+
515
+ @rules.each_value do |rule|
516
+ ofile << outputRule(rule)
517
+ end
518
+
519
+ end # def outputRuleInfo
520
+
521
+
522
+ #-------------------------------------------------------------------------------------------------------------#
523
+ # outputRule - generate a GDL version of a rule definition based on Rule XML element
524
+ #
525
+ # rule - XML element to generate output for
526
+ #
527
+ # @returns GDL output for Rule definition
528
+ #
529
+ #------------------------------------------------------------------------------------------------------------#
530
+ def outputRule(rule)
531
+ # arule = root.elements['//Rule'].to_a # returns all 1st level rule children elements
532
+ ruleParts = rule.elements.to_a
533
+ puts ""
534
+ puts "Rule Parts:"
535
+ puts "#{ruleParts.inspect}"
536
+ puts ""
537
+
538
+ visitor = XmlRuleVisitor.new
539
+ output = ""
540
+ visitor.lookupData = @lookupData
541
+
542
+ return visitor.visit(rule, output)
543
+
544
+
545
+ end # outputRule
546
+ end # class GdlDoc
547
+
@@ -0,0 +1,181 @@
1
+ #
2
+ # File: gdlDocBuilder.rb
3
+ #
4
+ # This is a guideline document builder
5
+ #
6
+ #
7
+
8
+ require 'xmlutils/contextparser'
9
+ require 'xmlutils/ruleparser'
10
+ require 'xmlutils/gdldoc'
11
+ require 'xmlutils/lineparser'
12
+
13
+
14
+ #################################################
15
+ #
16
+ # class GdlDocBuilder
17
+ #
18
+ #################################################
19
+ class GdlDocBuilder
20
+
21
+ attr_accessor :options
22
+ attr_accessor :context
23
+
24
+
25
+
26
+ #-------------------------------------------------------------------------------------------------------------#
27
+ # initialize - CTor
28
+ #
29
+ # options - Document builder options
30
+ #
31
+ #------------------------------------------------------------------------------------------------------------#
32
+ def initialize(options)
33
+ @options = options
34
+ @context = GdlContext.new
35
+ @context.setOptions(@options)
36
+ end # initialize
37
+
38
+
39
+
40
+
41
+ #-------------------------------------------------------------------------------------------------------------#
42
+ # createDocument - create a GDL document from an XML document
43
+ #
44
+ # srcFile - XML source file
45
+ #
46
+ #------------------------------------------------------------------------------------------------------------#
47
+ def createDocument(srcFile)
48
+
49
+ # Setup context object builder
50
+ ctxBuilder = ContextParser.new(@context)
51
+ ctxBuilder.setFlag(@options)
52
+
53
+ statusMsg "Creating guideline context."
54
+
55
+ ctxBuilder.parse(srcFile)
56
+
57
+ printMetrics(@context)
58
+
59
+
60
+
61
+ statusMsg "Parsing external variable definitions."
62
+
63
+ parseExternalVarDefs(@context)
64
+
65
+
66
+
67
+ statusMsg "Parsing rule data (#{ctxBuilder.context.rules.size.to_s} rules)."
68
+
69
+ ruleBuilder = RuleParser.new(@context)
70
+ ruleBuilder.setFlag(@options)
71
+
72
+ @context.rules.each do |key, rule|
73
+ rule.src = ruleBuilder.parse(rule.xml)
74
+ print "."
75
+ end # rules.each
76
+ puts
77
+
78
+
79
+ # ctxBuilder.dumpResults
80
+
81
+
82
+ # Create output file and output src.
83
+ statusMsg "Generating document."
84
+
85
+ gdlDoc = GdlDoc.new(srcFile, @context)
86
+ gdlDoc.setOptions(@options)
87
+
88
+ genFile = gdlDoc.generate
89
+
90
+ statusMsg "Document created: #{genFile}"
91
+
92
+ genFile = gdlDoc.generateRenameList
93
+
94
+ statusMsg "Rename list document created: #{genFile}"
95
+
96
+ end # createDocument
97
+
98
+
99
+
100
+
101
+ #-------------------------------------------------------------------------------------------------------------#
102
+ # statusMsg - output a status message
103
+ #
104
+ # msg - Message to output
105
+ #
106
+ #------------------------------------------------------------------------------------------------------------#
107
+ def statusMsg(msg)
108
+
109
+ puts
110
+ puts "-} #{msg}"
111
+ puts
112
+
113
+ end # statusMsg
114
+
115
+
116
+
117
+
118
+ #-------------------------------------------------------------------------------------------------------------#
119
+ # printMetrics - Print context metrics
120
+ #
121
+ # ctx - Context to generate metrics from
122
+ #
123
+ #------------------------------------------------------------------------------------------------------------#
124
+ def printMetrics(ctx)
125
+
126
+ puts " DPM count: #{ctx.dpms.size.to_s} (includes DSMs)"
127
+ puts " PPM count: #{ctx.ppms.size.to_s}"
128
+ puts " Lookup count: #{ctx.lookups.size.to_s}"
129
+ puts " Message count: #{ctx.messages.size.to_s} (includes conditions)"
130
+ puts " Rule count: #{ctx.rules.size.to_s}"
131
+ puts " Ruleset count: #{ctx.rulesets.size.to_s}"
132
+
133
+ end # printMetrics
134
+
135
+
136
+
137
+
138
+ #-------------------------------------------------------------------------------------------------------------#
139
+ # parseExternalVarDefs - parse predefined GDL variable definition files.
140
+ #
141
+ # ctx - context containing variables to update
142
+ #
143
+ #------------------------------------------------------------------------------------------------------------#
144
+ def parseExternalVarDefs(ctx)
145
+ puts "No external variable definition files provided." if (!ctx.options[:verbose].nil? && ctx.options[:includes].nil?)
146
+ return if ctx.options[:includes].nil?
147
+
148
+ vp = LineParser.new # Parse externally defined GDL variable definition files.
149
+ ctx.options[:includes].each do |inc|
150
+ vp.parse(inc) # TODO: Allow external var def files to be defined in a config file.
151
+ end # ctx.options.each
152
+
153
+ vp.dumpResults if $DEBUG
154
+
155
+ puts "Searching for external DPM definitions." if $DEBUG
156
+ ctx.dpms.each do |key, val|
157
+ if (vp.dpms.has_key?(key))
158
+ ctx.dpms[key] = vp.dpms[key]
159
+ puts "Found match: #{key}" if $DEBUG
160
+ end # if vp.dpms
161
+ end # do
162
+
163
+ puts "Searching for external DSM definitions." if $DEBUG
164
+ ctx.dpms.each do |key, val|
165
+ if (vp.dsms.has_key?("#{key}"))
166
+ ctx.dpms[key] = vp.dsms[key]
167
+ puts "Found match: #{key}" if $DEBUG
168
+ end # if vp.dsms
169
+ end # do
170
+
171
+ puts "Searching for external PPM definitions." if $DEBUG
172
+ ctx.ppms.each do |key, val|
173
+ if (vp.ppms.has_key?(key))
174
+ ctx.ppms[key] = vp.ppms[key]
175
+ puts "Found match: #{key}" if $DEBUG
176
+ end # if vp.ppms
177
+ end # do
178
+
179
+ end # parseExternalVarDefs
180
+ end # class GdlDocBuilder
181
+