Skip to content

Commit 9e96160

Browse files
committed
Added new case variants to <METHOD_NAME> and <PARAMETER_NAME>. Declared new tokens <METHOD_ATTRIBUTE> and <PARAMETER_ATTRIBUTE>. Added iterative nested group processing via <FIELD_GROUP_EXPAND>.
1 parent 3a12387 commit 9e96160

7 files changed

Lines changed: 257 additions & 2 deletions

File tree

CodeGenEngine/LoopExpander.dbl

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,42 @@ namespace CodeGen.Engine
157157

158158
endmethod
159159

160+
;;This method is different to the others here. It is caled during the processing of the <FIELD_GROUP_EXPAND> field loop token
161+
public static method ProcessGroup, string
162+
required in tkn, @Token
163+
required in template, @FileNode
164+
required in loops, @IEnumerable<LoopNode>
165+
required in str, @RpsStructure
166+
required in field, @RpsField
167+
proc
168+
data context = template.Context
169+
data task = context.CurrentTask
170+
data loop = ^as(loops.Last(), FieldLoopNode)
171+
data groupStructure = String.IsNullOrWhiteSpace(field.GroupStructure) ? new RpsStructure(field.GroupFields,field.Name) : new RpsStructure(field.GroupStructure)
172+
data saveMaxIndex = loop.MaxIndex
173+
data saveCurrentIndex = loop.CurrentIndex
174+
175+
;;Configure the environment for the new group
176+
context.SetCurrentStructure(groupStructure)
177+
loop.AddNestedField(groupStructure.Fields.First())
178+
loop.MaxIndex = groupStructure.Fields.Count - 1
179+
loop.CurrentIndex = 0
180+
181+
data expanderOutput = new StringWriter()
182+
data expander = new TreeExpander(template, loops, expanderOutput)
183+
184+
LoopExpander.ProcessLoop(loop, template, loops, expander)
185+
186+
;;Restore the environment to its previous state
187+
context.ClearCurrentStructure()
188+
loop.RemoveNestedField()
189+
loop.MaxIndex = saveMaxIndex
190+
loop.CurrentIndex = saveCurrentIndex
191+
192+
mreturn expanderOutput.ToString()
193+
194+
endmethod
195+
160196
private static method processKeyLoop, void
161197
required in node, @LoopNode
162198
required in template, @FileNode

CodeGenEngine/TokenExpanders/TokenExpanderFieldLoop.dbl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ namespace CodeGen.Engine
9393
fieldLoopTokenExpanders.Add("FIELD_ENUMWIDTH", expandFieldEnumWidth)
9494
fieldLoopTokenExpanders.Add("FIELD_FORMATNAME", expandFieldFormatName)
9595
fieldLoopTokenExpanders.Add("FIELD_FORMATSTRING", expandFieldFormatString)
96+
fieldLoopTokenExpanders.Add("FIELD_GROUP_EXPAND", expandFieldGroupExpand)
9697
fieldLoopTokenExpanders.Add("FIELD_GROUP_MEMBER_PREFIX",exapndFieldGroupMemberPrefix)
9798
fieldLoopTokenExpanders.Add("FIELD_GROUP_STRUCTURE",exapndFieldGroupStructure)
9899
fieldLoopTokenExpanders.Add("FIELD_HEADING", expandFieldHeading)
@@ -668,6 +669,21 @@ namespace CodeGen.Engine
668669
mreturn ExpandFieldLoopToken(tkn, template, loops, doExpand)
669670
endmethod
670671

672+
private static method expandFieldGroupExpand, string
673+
tkn, @Token
674+
template, @FileNode
675+
loops, @IEnumerable<LoopNode>
676+
endparams
677+
proc
678+
lambda doExpand(str, field)
679+
begin
680+
if (field.GroupType != RpsFieldGroup.Yes)
681+
throw new ApplicationException(String.Format("Field loop token {0} can only be used with non-overlay GROUP fields!",tkn.Value))
682+
mreturn LoopExpander.ProcessGroup(tkn,template,loops,str,field)
683+
end
684+
mreturn ExpandFieldLoopToken(tkn, template, loops, doExpand)
685+
endmethod
686+
671687
private static method exapndFieldGroupMemberPrefix, string
672688
tkn, @Token
673689
template, @FileNode

CodeGenEngine/TokenExpanders/TokenExpanderMethodLoop.dbl

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ namespace CodeGen.Engine
6161
endparams
6262
proc
6363
methodLoopTokenExpanders = new Dictionary<string, Func<Token, FileNode, IEnumerable<LoopNode>, string>>()
64+
methodLoopTokenExpanders.Add("METHOD_ATTRIBUTE", expandMethodAttribute)
6465
methodLoopTokenExpanders.Add("METHOD_COMMENT", expandMethodComment)
6566
methodLoopTokenExpanders.Add("METHOD_ENCRYPT", expandMethodEncrypt)
6667
methodLoopTokenExpanders.Add("METHOD_ELB", expandMethodElb)
@@ -100,6 +101,93 @@ namespace CodeGen.Engine
100101
mreturn specific(template.Context.Taskset.MethodCatalog,loop.CurrentInterface, loop.CurrentMethod)
101102
endmethod
102103

104+
private static method expandMethodAttribute, string
105+
tkn, @Token
106+
template, @FileNode
107+
loops, @IEnumerable<LoopNode>
108+
endparams
109+
proc
110+
lambda doExpand(catalog,iface,meth)
111+
begin
112+
data coerced = ""
113+
data nullable = ""
114+
data format = ""
115+
data encrypt = ""
116+
117+
if (meth.MethodType==MethodType.Function && meth.ReturnValue.CoerceType!=CoerceType.None)
118+
begin
119+
using meth.ReturnValue.CoerceType select
120+
(CoerceType.Boolean),
121+
coerced = ",cType=xfType.Boolean"
122+
(CoerceType.Byte),
123+
coerced = ",cType=xfType.byte"
124+
(CoerceType.DateTime),
125+
coerced = ",cType=xfType.DateTime"
126+
(CoerceType.DateTimeNullable),
127+
begin
128+
coerced = ",cType=xfType.DateTime"
129+
nullable = ",nullable=true"
130+
end
131+
(CoerceType.Decimal),
132+
coerced = ",cType=xfType.decimal"
133+
(CoerceType.DecimalNullable),
134+
begin
135+
coerced = "cType=xfType.decimal"
136+
nullable = ",nullable=true"
137+
end
138+
(CoerceType.Double),
139+
coerced = ",cType=xfType.double"
140+
(CoerceType.Float),
141+
coerced = ",cType=xfType.float"
142+
(CoerceType.Int),
143+
coerced = ",cType=xfType.int"
144+
(CoerceType.Long),
145+
coerced = ",cType=xfType.long"
146+
(CoerceType.Sbyte),
147+
coerced = ",cType=xfType.sbyte"
148+
(CoerceType.Short),
149+
coerced = ",cType=xfType.short"
150+
(CoerceType.Uint),
151+
coerced = ",cType=xfType.uint"
152+
(CoerceType.Ulong),
153+
coerced = ",cType=xfType.ulong"
154+
(CoerceType.Ushort),
155+
coerced = ",cType=xfType.ushort"
156+
endusing
157+
end
158+
159+
if (meth.MethodType==MethodType.Function && meth.ReturnValue.DateFormat!=DateFormat.None)
160+
begin
161+
using meth.ReturnValue.DateFormat select
162+
(DateFormat.YYYYMMDD),
163+
format = ",format=xfFormat.YYYYMMDD"
164+
(DateFormat.YYMMDD),
165+
format = ",format=xfFormat.YYMMDD"
166+
(DateFormat.YYYYJJJ),
167+
format = ",format=xfFormat.YYYYJJJ"
168+
(DateFormat.YYJJJ),
169+
format = ",format=xfFormat.YYJJJ"
170+
(DateFormat.HHMMSS),
171+
format = ",format=xfFormat.HHMMSS"
172+
(DateFormat.HHMM),
173+
format = ",format=xfFormat.HHMM"
174+
(DateFormat.YYYYMMDDHHMISS),
175+
format = ",format=xfFormat.YYYYMMDDHHMISS"
176+
(DateFormat.YYYYMMDDHHMISSUUUUUU),
177+
format = ",format=xfFormat.YYYYMMDDHHMISSUUUUUU"
178+
endusing
179+
end
180+
181+
if (meth.Encrypt)
182+
begin
183+
encrypt = ",encrypt=true"
184+
end
185+
186+
mreturn String.Format('{0}xfMethod(name="{1}",id="{2}",interface="{3}",elb="{4}"{5}{6}{7}{8}){9}',"{",meth.Name,meth.Id,iface.Name,meth.Elb,coerced,nullable,format,encrypt,"}")
187+
end
188+
mreturn ExpandMethodLoopToken(tkn, template, loops, doExpand)
189+
endmethod
190+
103191
private static method expandMethodComment, string
104192
tkn, @Token
105193
template, @FileNode

CodeGenEngine/TokenExpanders/TokenExpanderParameterLoop.dbl

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ namespace CodeGen.Engine
6161
endparams
6262
proc
6363
parameterLoopTokenExpanders = new Dictionary<string, Func<Token, FileNode, IEnumerable<LoopNode>, string>>()
64+
parameterLoopTokenExpanders.Add("PARAMETER_ATTRIBUTE", expandParameterAttribute)
6465
parameterLoopTokenExpanders.Add("PARAMETER_NAME", expandParameterName)
6566
parameterLoopTokenExpanders.Add("PARAMETER_NUMBER", expandParameterNumber)
6667
parameterLoopTokenExpanders.Add("PARAMETER_COMMENT", expandParameterComment)
@@ -96,6 +97,117 @@ namespace CodeGen.Engine
9697
mreturn specific(template.Context.Taskset.MethodCatalog,loop.CurrentInterface, loop.CurrentMethod, loop.CurrentParameter)
9798
endmethod
9899

100+
private static method expandParameterAttribute, string
101+
tkn, @Token
102+
template, @FileNode
103+
loops, @IEnumerable<LoopNode>
104+
endparams
105+
proc
106+
lambda doExpand(catalog,iface,meth,param)
107+
begin
108+
data typeValue = ""
109+
data coercedValue = ""
110+
data nullableValue = ""
111+
data formatValue = ""
112+
data collectionTypeValue = ""
113+
data structureValue = ""
114+
data dataTableValue = ""
115+
116+
using param.Type select
117+
(ParameterType.Handle),
118+
typeValue = ",type=SynType.handle"
119+
(ParameterType.BinaryHandle),
120+
typeValue = ",type=SynType.binaryhandle"
121+
endusing
122+
123+
using meth.ReturnValue.CoerceType select
124+
(CoerceType.Boolean),
125+
coercedValue = ",cType=xfType.Boolean"
126+
(CoerceType.Byte),
127+
coercedValue = ",cType=xfType.byte"
128+
(CoerceType.DateTime),
129+
coercedValue = ",cType=xfType.DateTime"
130+
(CoerceType.DateTimeNullable),
131+
begin
132+
coercedValue = ",cType=xfType.DateTime"
133+
nullableValue = ",nullable=true"
134+
end
135+
(CoerceType.Decimal),
136+
coercedValue = ",cType=xfType.decimal"
137+
(CoerceType.DecimalNullable),
138+
begin
139+
coercedValue = "cType=xfType.decimal"
140+
nullableValue = ",nullable=true"
141+
end
142+
(CoerceType.Double),
143+
coercedValue = ",cType=xfType.double"
144+
(CoerceType.Float),
145+
coercedValue = ",cType=xfType.float"
146+
(CoerceType.Int),
147+
coercedValue = ",cType=xfType.int"
148+
(CoerceType.Long),
149+
coercedValue = ",cType=xfType.long"
150+
(CoerceType.Sbyte),
151+
coercedValue = ",cType=xfType.sbyte"
152+
(CoerceType.Short),
153+
coercedValue = ",cType=xfType.short"
154+
(CoerceType.Uint),
155+
coercedValue = ",cType=xfType.uint"
156+
(CoerceType.Ulong),
157+
coercedValue = ",cType=xfType.ulong"
158+
(CoerceType.Ushort),
159+
coercedValue = ",cType=xfType.ushort"
160+
endusing
161+
162+
using meth.ReturnValue.DateFormat select
163+
(DateFormat.YYYYMMDD),
164+
formatValue = ",format=xfFormat.YYYYMMDD"
165+
(DateFormat.YYMMDD),
166+
formatValue = ",format=xfFormat.YYMMDD"
167+
(DateFormat.YYYYJJJ),
168+
formatValue = ",format=xfFormat.YYYYJJJ"
169+
(DateFormat.YYJJJ),
170+
formatValue = ",format=xfFormat.YYJJJ"
171+
(DateFormat.HHMMSS),
172+
formatValue = ",format=xfFormat.HHMMSS"
173+
(DateFormat.HHMM),
174+
formatValue = ",format=xfFormat.HHMM"
175+
(DateFormat.YYYYMMDDHHMISS),
176+
formatValue = ",format=xfFormat.YYYYMMDDHHMISS"
177+
(DateFormat.YYYYMMDDHHMISSUUUUUU),
178+
formatValue = ",format=xfFormat.YYYYMMDDHHMISSUUUUUU"
179+
endusing
180+
181+
182+
;TODO: CollectionType
183+
if (param.CollectionType != ParameterCollectionType.None)
184+
begin
185+
using param.Type select
186+
(ParameterType.Alpha),
187+
collectionTypeValue = ",collectionType=xfCollectType.alpha"
188+
(ParameterType.Decimal),
189+
collectionTypeValue = ",collectionType=xfCollectType.decimal"
190+
(ParameterType.ImpliedDecimal),
191+
collectionTypeValue = ",collectionType=xfCollectType.impdec"
192+
(ParameterType.Integer),
193+
collectionTypeValue = ",collectionType=xfCollectType.integer"
194+
(ParameterType.String),
195+
collectionTypeValue = ",collectionType=xfCollectType.string"
196+
(ParameterType.Structure),
197+
begin
198+
collectionTypeValue = ",collectionType=xfCollectType.structure"
199+
structureValue = String.Format(',structure="str{0}"',StringTools.PascalCase(param.StructureName.EndsWith("S") ? param.StructureName.Substring(0,param.StructureName.Length-1) : param.StructureName))
200+
end
201+
endusing
202+
end
203+
204+
dataTableValue = param.DataTable ? ",dataTable=true" : ""
205+
206+
mreturn String.Format('{0}xfParameter(name="{1}"{2}{3}{4}{5}{6}{7}{8}){9}',"{",param.Name,typeValue,coercedValue,nullableValue,formatValue,collectionTypeValue,structureValue,dataTableValue,"}")
207+
end
208+
mreturn ExpandParameterLoopToken(tkn, template, loops, doExpand)
209+
endmethod
210+
99211
private static method expandParameterName, string
100212
tkn, @Token
101213
template, @FileNode

0 commit comments

Comments
 (0)