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.
- checksums.yaml +7 -0
- data/.gitignore +6 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +77 -0
- data/bin/xmltogdl +88 -0
- data/docs/README.txt +20 -0
- data/lib/xmlutils/contextlistener.rb +432 -0
- data/lib/xmlutils/contextparser.rb +111 -0
- data/lib/xmlutils/dumplistener.rb +57 -0
- data/lib/xmlutils/gdlcontext.rb +305 -0
- data/lib/xmlutils/gdlcontextobjs.rb +286 -0
- data/lib/xmlutils/gdldoc.rb +547 -0
- data/lib/xmlutils/gdldocbuilder.rb +181 -0
- data/lib/xmlutils/gdllistener.rb +265 -0
- data/lib/xmlutils/gdltemplate.rb +488 -0
- data/lib/xmlutils/lineparser.rb +193 -0
- data/lib/xmlutils/listener.rb +459 -0
- data/lib/xmlutils/rulelistener.rb +414 -0
- data/lib/xmlutils/ruleparser.rb +112 -0
- data/lib/xmlutils/varlistener.rb +86 -0
- data/lib/xmlutils/version.rb +5 -0
- data/lib/xmlutils/xmlrulevisitor.rb +704 -0
- data/lib/xmlutils/xmltogdlcontroller.rb +93 -0
- data/lib/xmlutils/xmltogdltask.rb +23 -0
- data/lib/xmlutils/xmlvisitor.rb +690 -0
- data/lib/xmlutils.rb +40 -0
- data/rakefile.rb +34 -0
- data/unittests/2830.xml +1 -0
- data/unittests/chunks.rb +31 -0
- data/unittests/curDirTest.rb +2 -0
- data/unittests/data/2830-GENERATED.gdl +309 -0
- data/unittests/data/2830-GENERATED.xml +1 -0
- data/unittests/data/AUGuideline.xml +12 -0
- data/unittests/data/AUGuideline.xml.gdl +19190 -0
- data/unittests/data/BAKUP.DCTEST1.xml +1 -0
- data/unittests/data/DCTEST.xml +1 -0
- data/unittests/data/DCTEST1.xml +1 -0
- data/unittests/data/DCTEST1.xml.gdl +14890 -0
- data/unittests/data/DCTEST1.xml.rename.csv +180 -0
- data/unittests/data/DCTEST1wLookups.xml +174 -0
- data/unittests/data/DCTEST1wLookups.xml.gdl +127 -0
- data/unittests/data/GENERATED.gdl.xml +1 -0
- data/unittests/data/Message.xml +1 -0
- data/unittests/data/Message.xml.gdl +142 -0
- data/unittests/data/Pricing2ndGuideline.xml +1 -0
- data/unittests/data/Pricing2ndGuideline.xml.gdl +52670 -0
- data/unittests/data/Z-TEMP-Jeff.xml +1 -0
- data/unittests/data/Z-TEMP-Jeff.xml.gdl +288 -0
- data/unittests/tc_convert_xml_to_gdl.rb +23 -0
- data/unittests/ts_allTests.rb +2 -0
- data/xmlutils.gemspec +25 -0
- metadata +139 -0
@@ -0,0 +1,488 @@
|
|
1
|
+
#
|
2
|
+
# File: gdlTemplate.rb
|
3
|
+
#
|
4
|
+
# This class is used to create the final GDL document
|
5
|
+
#
|
6
|
+
#
|
7
|
+
|
8
|
+
require 'xmlutils/gdlcontext'
|
9
|
+
require 'xmlutils/gdlcontextobjs'
|
10
|
+
|
11
|
+
|
12
|
+
#################################################
|
13
|
+
#
|
14
|
+
# class GdlTemplate
|
15
|
+
#
|
16
|
+
#################################################
|
17
|
+
class GdlTemplate
|
18
|
+
|
19
|
+
attr_accessor :maxWidth
|
20
|
+
|
21
|
+
def initialize()
|
22
|
+
@maxWidth = 75
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
#-------------------------------------------------------------------------------------------------------------#
|
29
|
+
# fileHeader - generate file header
|
30
|
+
#
|
31
|
+
# fname - file name to place on header
|
32
|
+
# curDate - a date string
|
33
|
+
#
|
34
|
+
# returns - File header text
|
35
|
+
#
|
36
|
+
#------------------------------------------------------------------------------------------------------------#
|
37
|
+
def fileHeader(fname, curDate, misc="")
|
38
|
+
fname = File.basename(fname, ".gdl")
|
39
|
+
header = <<EOF
|
40
|
+
/* **************************************************************************
|
41
|
+
* File: #{fname}.gdl
|
42
|
+
*
|
43
|
+
* Guideline source generated #{curDate}
|
44
|
+
* #{misc}
|
45
|
+
*
|
46
|
+
* *************************************************************************/
|
47
|
+
|
48
|
+
|
49
|
+
EOF
|
50
|
+
|
51
|
+
return header
|
52
|
+
end # fileHeader
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
#-------------------------------------------------------------------------------------------------------------#
|
57
|
+
# sectionComment - generate definition header
|
58
|
+
#
|
59
|
+
# headerType - Header type (ex: DSM)
|
60
|
+
#
|
61
|
+
# returns - definition header text
|
62
|
+
#
|
63
|
+
#------------------------------------------------------------------------------------------------------------#
|
64
|
+
def sectionComment(sectionName)
|
65
|
+
txt = sectionName.strip
|
66
|
+
bar = ""
|
67
|
+
# 6: 5 misc chars (// ) plus 1
|
68
|
+
width = (@maxWidth - 6 - txt.length) / 2
|
69
|
+
width.times do
|
70
|
+
bar += "+"
|
71
|
+
end
|
72
|
+
|
73
|
+
header = <<EOF
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
// #{bar} #{txt} #{bar}
|
79
|
+
|
80
|
+
EOF
|
81
|
+
|
82
|
+
header
|
83
|
+
|
84
|
+
end # def sectionComment
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
#-------------------------------------------------------------------------------------------------------------#
|
90
|
+
# multiLineComment - generate a multi line comment block
|
91
|
+
#
|
92
|
+
# comment - comment text
|
93
|
+
#
|
94
|
+
# returns - multi line comment block
|
95
|
+
#
|
96
|
+
#------------------------------------------------------------------------------------------------------------#
|
97
|
+
def multiLineComment(comment, header = "")
|
98
|
+
bar = ""
|
99
|
+
hdrBar = ""
|
100
|
+
|
101
|
+
# 3: 3 misc chars (/* )
|
102
|
+
width = (@maxWidth - 3)
|
103
|
+
|
104
|
+
width.times do
|
105
|
+
bar += "*"
|
106
|
+
end
|
107
|
+
|
108
|
+
if (header.length > 0) # Generate a formatted header if it exists.
|
109
|
+
hdrWidth = (@maxWidth - 6 - header.length) / 2
|
110
|
+
|
111
|
+
hdrWidth.times do
|
112
|
+
hdrBar += " "
|
113
|
+
end # times
|
114
|
+
end # if header
|
115
|
+
|
116
|
+
output = <<EOF
|
117
|
+
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
/* #{bar}
|
122
|
+
#{hdrBar}-- #{header} --#{hdrBar}
|
123
|
+
|
124
|
+
#{comment}
|
125
|
+
|
126
|
+
#{bar} */
|
127
|
+
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
EOF
|
132
|
+
|
133
|
+
output
|
134
|
+
|
135
|
+
end # def multiLineComment
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
#-------------------------------------------------------------------------------------------------------------#
|
141
|
+
# ppm - generate a PPM definition
|
142
|
+
#
|
143
|
+
# var - XML element to generate output for
|
144
|
+
#
|
145
|
+
# @returns GDL output for PPM definition
|
146
|
+
#
|
147
|
+
#------------------------------------------------------------------------------------------------------------#
|
148
|
+
def ppm(dataType, ppmType, varName, varAlias)
|
149
|
+
dt = dataType.ljust(12)
|
150
|
+
pt = ppmType.ljust(12)
|
151
|
+
vn = varName.ljust(48)
|
152
|
+
va = varAlias
|
153
|
+
out = <<EOF
|
154
|
+
ppm #{dt}#{pt}#{vn}"#{va}";
|
155
|
+
EOF
|
156
|
+
|
157
|
+
out # Return generated output
|
158
|
+
end # ppm
|
159
|
+
|
160
|
+
|
161
|
+
#-------------------------------------------------------------------------------------------------------------#
|
162
|
+
# dsm - generate a GDL version of a DSM definition based on DSM XML element
|
163
|
+
#
|
164
|
+
# var - XML element to generate output for
|
165
|
+
#
|
166
|
+
# @returns GDL output for DSM definition
|
167
|
+
#
|
168
|
+
#------------------------------------------------------------------------------------------------------------#
|
169
|
+
def dsm(dataType, varName, varAlias)
|
170
|
+
dsn = "decision".ljust(16)
|
171
|
+
dpm = "dpm".ljust(4)
|
172
|
+
dt = dataType.ljust(12)
|
173
|
+
vn = varName.ljust(48)
|
174
|
+
|
175
|
+
out = <<EOF
|
176
|
+
#{dsn}#{dpm}#{dt}#{vn}"#{varAlias}";
|
177
|
+
EOF
|
178
|
+
|
179
|
+
out # Return generated output
|
180
|
+
end # dsm
|
181
|
+
|
182
|
+
|
183
|
+
#-------------------------------------------------------------------------------------------------------------#
|
184
|
+
# dpm - generate a GDL version of a DPM definition based on DPM XML element
|
185
|
+
#
|
186
|
+
# var - XML element to generate output for
|
187
|
+
#
|
188
|
+
# @returns GDL output for DPM definition
|
189
|
+
#
|
190
|
+
#------------------------------------------------------------------------------------------------------------#
|
191
|
+
def dpm(dataType, varName, varAlias)
|
192
|
+
lead = " ".ljust(16)
|
193
|
+
dpm = "dpm".ljust(4)
|
194
|
+
dt = dataType.ljust(12)
|
195
|
+
vn = varName.ljust(48)
|
196
|
+
|
197
|
+
out = <<EOF
|
198
|
+
#{lead}#{dpm}#{dt}#{vn}"#{varAlias}";
|
199
|
+
EOF
|
200
|
+
|
201
|
+
out # Return generated output
|
202
|
+
end # dpm
|
203
|
+
|
204
|
+
|
205
|
+
|
206
|
+
|
207
|
+
#-------------------------------------------------------------------------------------------------------------#
|
208
|
+
# rule - output a rule
|
209
|
+
#
|
210
|
+
# ofile - output file handle
|
211
|
+
#
|
212
|
+
#------------------------------------------------------------------------------------------------------------#
|
213
|
+
def rule(rule)
|
214
|
+
|
215
|
+
# Rule output is generated in GdlDoc.visitRule()
|
216
|
+
return rule.src
|
217
|
+
|
218
|
+
end # def rule
|
219
|
+
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
#-------------------------------------------------------------------------------------------------------------#
|
224
|
+
# ruleset - output collected variables to file
|
225
|
+
#
|
226
|
+
# ofile - output file handle
|
227
|
+
#
|
228
|
+
#------------------------------------------------------------------------------------------------------------#
|
229
|
+
def ruleset(ruleset, ctx)
|
230
|
+
rulelist = rulelist(ruleset, ctx)
|
231
|
+
|
232
|
+
cmtSuffix = ""
|
233
|
+
ruleParams = "#{ruleset.execType}" # Build the ruleset parameter list.
|
234
|
+
|
235
|
+
if (ruleset.type == "PL")
|
236
|
+
ruleParams += ", PL"
|
237
|
+
cmtSuffix += "(PowerLookup)"
|
238
|
+
end # if ruleset.type
|
239
|
+
|
240
|
+
aliasStmt = "" # Don't create an alias statement if it is not needed.
|
241
|
+
|
242
|
+
if (ruleset.name != ruleset.alias)
|
243
|
+
aliasStmt = <<EOF
|
244
|
+
alias(ruleset, #{ruleset.name}, "#{ruleset.alias}");
|
245
|
+
EOF
|
246
|
+
end # if ruleset.name...
|
247
|
+
|
248
|
+
|
249
|
+
out = <<EOF
|
250
|
+
#{aliasStmt}
|
251
|
+
/* ==========================================================================
|
252
|
+
* #{ruleset.name} #{cmtSuffix}
|
253
|
+
*
|
254
|
+
*
|
255
|
+
*/
|
256
|
+
ruleset #{ruleset.name}(#{ruleParams})
|
257
|
+
#{rulelist}
|
258
|
+
end // ruleset #{ruleset.name}(#{ruleParams})
|
259
|
+
|
260
|
+
|
261
|
+
|
262
|
+
|
263
|
+
EOF
|
264
|
+
|
265
|
+
return out
|
266
|
+
|
267
|
+
end # def ruleset
|
268
|
+
|
269
|
+
|
270
|
+
|
271
|
+
|
272
|
+
#-------------------------------------------------------------------------------------------------------------#
|
273
|
+
# rulelist - output ruleset's rule ref list
|
274
|
+
#
|
275
|
+
# returns ruleset rule list source
|
276
|
+
#
|
277
|
+
#------------------------------------------------------------------------------------------------------------#
|
278
|
+
def rulelist(ruleset, ctx)
|
279
|
+
|
280
|
+
outlist = ""
|
281
|
+
|
282
|
+
ruleset.rules.each do |ralias|
|
283
|
+
rname = ctx.rules[ralias].name
|
284
|
+
outlist += reference("rule", rname)
|
285
|
+
|
286
|
+
end # rules.each
|
287
|
+
|
288
|
+
return outlist
|
289
|
+
|
290
|
+
end # def rulelist
|
291
|
+
|
292
|
+
|
293
|
+
|
294
|
+
|
295
|
+
#-------------------------------------------------------------------------------------------------------------#
|
296
|
+
# reference - output rule/set reference
|
297
|
+
#
|
298
|
+
# returns rule/set reference source
|
299
|
+
#
|
300
|
+
#------------------------------------------------------------------------------------------------------------#
|
301
|
+
def reference(refType, refName)
|
302
|
+
|
303
|
+
refout = <<EOF
|
304
|
+
#{refType} #{refName}();
|
305
|
+
EOF
|
306
|
+
|
307
|
+
return refout
|
308
|
+
|
309
|
+
end # def reference
|
310
|
+
|
311
|
+
|
312
|
+
|
313
|
+
|
314
|
+
#-------------------------------------------------------------------------------------------------------------#
|
315
|
+
# cleanMsgText - msg text to clean. Converts double quotes to single quotes.
|
316
|
+
#
|
317
|
+
# returns cleaned text
|
318
|
+
#
|
319
|
+
#------------------------------------------------------------------------------------------------------------#
|
320
|
+
def cleanMsgText(txt)
|
321
|
+
clean = txt.gsub(/["]/,"'")
|
322
|
+
|
323
|
+
clean
|
324
|
+
end # cleanMsgText
|
325
|
+
|
326
|
+
|
327
|
+
|
328
|
+
|
329
|
+
#-------------------------------------------------------------------------------------------------------------#
|
330
|
+
# msg - output a message
|
331
|
+
#
|
332
|
+
# returns message source
|
333
|
+
#
|
334
|
+
#------------------------------------------------------------------------------------------------------------#
|
335
|
+
def msg(msgObj)
|
336
|
+
|
337
|
+
raise "Bad argument" if (nil == msgObj)
|
338
|
+
|
339
|
+
isCondition = false
|
340
|
+
isException = false
|
341
|
+
|
342
|
+
msgTxt = cleanMsgText(msgObj.msg)
|
343
|
+
msgTag = "message"
|
344
|
+
msgType = ""
|
345
|
+
# Determine message type
|
346
|
+
case msgObj.type
|
347
|
+
when 'Condition'
|
348
|
+
isCondition = true
|
349
|
+
msgTag = "condition"
|
350
|
+
|
351
|
+
when 'Exceptions'
|
352
|
+
msgType += "exception"
|
353
|
+
isException = true
|
354
|
+
|
355
|
+
when 'Observation'
|
356
|
+
msgType += "observation"
|
357
|
+
|
358
|
+
when 'Findings'
|
359
|
+
msgType += "findings"
|
360
|
+
|
361
|
+
when 'Credit'
|
362
|
+
msgType += "credit"
|
363
|
+
|
364
|
+
end # case msgObj.type
|
365
|
+
|
366
|
+
|
367
|
+
if (isCondition) # Handle condition messages
|
368
|
+
|
369
|
+
case msgObj.category # Handle condition message category type
|
370
|
+
when '1'
|
371
|
+
msgType += "asset"
|
372
|
+
|
373
|
+
when '2'
|
374
|
+
msgType += "credit"
|
375
|
+
|
376
|
+
when '3'
|
377
|
+
msgType += "income"
|
378
|
+
|
379
|
+
when '4'
|
380
|
+
msgType += "property"
|
381
|
+
|
382
|
+
when '5'
|
383
|
+
msgType += "purchase"
|
384
|
+
|
385
|
+
when '6'
|
386
|
+
msgType += "title"
|
387
|
+
|
388
|
+
else
|
389
|
+
msgType += " asset"
|
390
|
+
|
391
|
+
end # case category
|
392
|
+
|
393
|
+
|
394
|
+
|
395
|
+
case msgObj.priorTo # Handle condition message priorTo type
|
396
|
+
when '1'
|
397
|
+
msgType += ", docs"
|
398
|
+
|
399
|
+
when '2'
|
400
|
+
msgType += ", funding"
|
401
|
+
|
402
|
+
when '3'
|
403
|
+
msgType += ", approval"
|
404
|
+
|
405
|
+
else
|
406
|
+
msgType += ", docs"
|
407
|
+
|
408
|
+
end # case priorTo
|
409
|
+
|
410
|
+
end # if isCondition
|
411
|
+
|
412
|
+
|
413
|
+
|
414
|
+
|
415
|
+
msgout = <<EOF
|
416
|
+
#{msgTag}(#{msgType}, "#{msgTxt}");
|
417
|
+
EOF
|
418
|
+
|
419
|
+
return msgout
|
420
|
+
|
421
|
+
end # def msg
|
422
|
+
|
423
|
+
|
424
|
+
|
425
|
+
|
426
|
+
#-------------------------------------------------------------------------------------------------------------#
|
427
|
+
# guideline - output collected variables to file
|
428
|
+
#
|
429
|
+
# ofile - output file handle
|
430
|
+
#
|
431
|
+
#------------------------------------------------------------------------------------------------------------#
|
432
|
+
def guideline(ctx)
|
433
|
+
gdlout = ""
|
434
|
+
reflist = ""
|
435
|
+
return gdlout if( ctx.guideline.nil? )
|
436
|
+
|
437
|
+
if( ! ctx.guideline.items.nil? )
|
438
|
+
ctx.guideline.items.each do |item|
|
439
|
+
rname = "UNKNOWN"
|
440
|
+
if (item[0] == 'rule')
|
441
|
+
rname = ctx.rules[item[1]].name
|
442
|
+
elsif (item[0] == 'ruleset')
|
443
|
+
rname = ctx.rulesets[item[1]].name
|
444
|
+
end # if item
|
445
|
+
|
446
|
+
reflist += reference(item[0], rname)
|
447
|
+
|
448
|
+
end # items.each
|
449
|
+
end
|
450
|
+
|
451
|
+
gdlout = <<EOF
|
452
|
+
/* ==========================================================================
|
453
|
+
* #{ctx.guideline.name}
|
454
|
+
*
|
455
|
+
* ID: #{ctx.guideline.id}
|
456
|
+
* Version: #{ctx.guideline.version}
|
457
|
+
* Start Date: #{ctx.guideline.startDate}
|
458
|
+
*
|
459
|
+
*/
|
460
|
+
guideline("#{ctx.guideline.name}")
|
461
|
+
|
462
|
+
#{reflist}
|
463
|
+
|
464
|
+
end // guideline #{ctx.guideline.name}
|
465
|
+
EOF
|
466
|
+
|
467
|
+
return gdlout
|
468
|
+
|
469
|
+
end # def guideline
|
470
|
+
|
471
|
+
|
472
|
+
|
473
|
+
#-------------------------------------------------------------------------------------------------------------#
|
474
|
+
# lookup - output lookup reference
|
475
|
+
#
|
476
|
+
# returns lookup reference source
|
477
|
+
#
|
478
|
+
#------------------------------------------------------------------------------------------------------------#
|
479
|
+
def lookup(lkupName, xParamName, yParamName)
|
480
|
+
|
481
|
+
|
482
|
+
refout = 'lookup("' + "#{lkupName}" + '", ' + "#{xParamName}, #{yParamName})"
|
483
|
+
|
484
|
+
return refout
|
485
|
+
|
486
|
+
end # def lookup
|
487
|
+
end # class GdlTemplate
|
488
|
+
|
@@ -0,0 +1,193 @@
|
|
1
|
+
#
|
2
|
+
# File: lineParser.rb
|
3
|
+
#
|
4
|
+
# This class is used to import GDL variable definitions.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
|
8
|
+
require 'xmlutils/gdlcontextobjs'
|
9
|
+
|
10
|
+
class LineParser
|
11
|
+
|
12
|
+
attr_accessor :ppms
|
13
|
+
attr_accessor :dpms
|
14
|
+
attr_accessor :dsms
|
15
|
+
|
16
|
+
|
17
|
+
def initialize()
|
18
|
+
@ppms = Hash.new
|
19
|
+
@dpms = Hash.new
|
20
|
+
@dsms = Hash.new
|
21
|
+
|
22
|
+
end # initialize
|
23
|
+
|
24
|
+
|
25
|
+
def dumpResults()
|
26
|
+
puts "PPMs parsed: #{ppms.size}"
|
27
|
+
puts "DPMs parsed: #{dpms.size}"
|
28
|
+
puts "DSMs parsed: #{dsms.size}"
|
29
|
+
|
30
|
+
puts "--== PPMs ==--".center(79)
|
31
|
+
puts
|
32
|
+
@ppms.each do |key, val|
|
33
|
+
puts "[#{key}] #{val.name}"
|
34
|
+
# puts "[ #{key} ] #{val.inspect}"
|
35
|
+
#puts "\t\t#{val.inspect}"
|
36
|
+
end # do
|
37
|
+
puts
|
38
|
+
puts
|
39
|
+
|
40
|
+
puts "--== DPMs ==--".center(79)
|
41
|
+
puts
|
42
|
+
@dpms.each do |key, val|
|
43
|
+
puts "[#{key}] #{val.name}"
|
44
|
+
end # do
|
45
|
+
puts
|
46
|
+
puts
|
47
|
+
|
48
|
+
puts "--== DSMs ==--".center(79)
|
49
|
+
puts
|
50
|
+
@dsms.each do |key, val|
|
51
|
+
puts "[#{key}] #{val.name}"
|
52
|
+
end # do
|
53
|
+
puts
|
54
|
+
puts
|
55
|
+
|
56
|
+
end # dumpResults
|
57
|
+
|
58
|
+
|
59
|
+
def getAlias(line)
|
60
|
+
outAry = line.scan(/"([^";]*)"/)
|
61
|
+
#puts "Get Alias scan result: #{outAry}"
|
62
|
+
outp = outAry[0].to_s
|
63
|
+
outp.strip!
|
64
|
+
#puts "Get Alias final result: #{outp}"
|
65
|
+
return outp
|
66
|
+
end # getAlias
|
67
|
+
|
68
|
+
|
69
|
+
def parse(filename)
|
70
|
+
fh = File.new(filename)
|
71
|
+
|
72
|
+
fh.readlines.each { |line|
|
73
|
+
parseLine(line.chomp!)
|
74
|
+
}
|
75
|
+
|
76
|
+
end # parse
|
77
|
+
|
78
|
+
|
79
|
+
def parseLine(line)
|
80
|
+
line.gsub!(/;/, '') # Remove semi-colon terminators
|
81
|
+
parts = line.split
|
82
|
+
return unless (parts.length > 0)
|
83
|
+
|
84
|
+
case parts[0]
|
85
|
+
when 'ppm'
|
86
|
+
parsePpm(line)
|
87
|
+
|
88
|
+
when 'dpm'
|
89
|
+
parseDpm(line)
|
90
|
+
|
91
|
+
when 'decision'
|
92
|
+
parseDsm(line)
|
93
|
+
|
94
|
+
else
|
95
|
+
puts "Skipping line: #{line}" if $DEBUG
|
96
|
+
end # case
|
97
|
+
end
|
98
|
+
|
99
|
+
def parsePpm(line)
|
100
|
+
varAlias = getAlias(line)
|
101
|
+
parts = line.split
|
102
|
+
|
103
|
+
parts.each {|part| part.strip!}
|
104
|
+
|
105
|
+
if (parts.length < 5)
|
106
|
+
puts "*** Invalid PPM line. Less than 5 items. ***"
|
107
|
+
return
|
108
|
+
end # if parts
|
109
|
+
|
110
|
+
attributes = Hash.new
|
111
|
+
attributes["DataType"] = parts[1]
|
112
|
+
attributes["Type"] = parts[2]
|
113
|
+
varName = parts[3]
|
114
|
+
|
115
|
+
raise "Missing PPM var name: #{attributes}" unless (varName.length > 0)
|
116
|
+
|
117
|
+
if (nil == varAlias || varAlias.length < 1)
|
118
|
+
varAlias = varName
|
119
|
+
end
|
120
|
+
|
121
|
+
attributes["Name"] = varAlias
|
122
|
+
|
123
|
+
@ppms[varAlias] = Ppm.new(varName, attributes)
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
def parseDpm(line)
|
128
|
+
puts "parse DPM: #{line}" if $DEBUG
|
129
|
+
varAlias = getAlias(line)
|
130
|
+
parts = line.split
|
131
|
+
|
132
|
+
parts.each {|part| part.strip!}
|
133
|
+
|
134
|
+
if (parts.length < 3)
|
135
|
+
puts "*** Invalid DPM line. Less than 3 items. ***"
|
136
|
+
return
|
137
|
+
end # if parts
|
138
|
+
|
139
|
+
attributes = Hash.new
|
140
|
+
attributes["Type"] = "DPM"
|
141
|
+
attributes["ProductType"] = parts[1]
|
142
|
+
attributes["DataType"] = parts[1]
|
143
|
+
varName = parts[2]
|
144
|
+
|
145
|
+
if (nil == varAlias || varAlias.length < 1)
|
146
|
+
varAlias = varName
|
147
|
+
end
|
148
|
+
|
149
|
+
attributes["Name"] = varAlias
|
150
|
+
|
151
|
+
raise "Missing DPM var name: #{attributes}" unless (varName.length > 0)
|
152
|
+
|
153
|
+
|
154
|
+
#attributes["Type"] = parts[2]
|
155
|
+
|
156
|
+
@dpms[varAlias] = Dpm.new(varName, attributes)
|
157
|
+
|
158
|
+
end
|
159
|
+
|
160
|
+
def parseDsm(line)
|
161
|
+
puts "parse DSM: #{line}" if $DEBUG
|
162
|
+
varAlias = getAlias(line)
|
163
|
+
parts = line.split
|
164
|
+
|
165
|
+
parts.each {|part| part.strip!}
|
166
|
+
|
167
|
+
if (parts.length < 4)
|
168
|
+
puts "*** Invalid DSM line. Less than 4 items. ***"
|
169
|
+
return
|
170
|
+
end # if parts
|
171
|
+
|
172
|
+
attributes = Hash.new
|
173
|
+
attributes["Type"] = "DSM"
|
174
|
+
attributes["ProductType"] = parts[2]
|
175
|
+
attributes["DataType"] = parts[2]
|
176
|
+
varName = parts[3]
|
177
|
+
|
178
|
+
if (nil == varAlias || varAlias.length < 1)
|
179
|
+
varAlias = varName
|
180
|
+
end
|
181
|
+
|
182
|
+
attributes["Name"] = varAlias
|
183
|
+
|
184
|
+
|
185
|
+
raise "Missing DSM var name: #{attributes}" unless (varName.length > 0)
|
186
|
+
|
187
|
+
#attributes["Type"] = parts[2]
|
188
|
+
|
189
|
+
@dsms[varAlias] = Dpm.new(varName, attributes)
|
190
|
+
|
191
|
+
end
|
192
|
+
end # class LineParser
|
193
|
+
|