Skip to content

Commit 41278c7

Browse files
authored
Merge pull request #259 from TIBCOSoftware/iterate-expression
Support expression for iterate field
2 parents b383405 + 7015092 commit 41278c7

File tree

3 files changed

+26
-16
lines changed

3 files changed

+26
-16
lines changed

action/flow/instance/taskinst.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/TIBCOSoftware/flogo-contrib/action/flow/model"
1010
"github.com/TIBCOSoftware/flogo-lib/core/activity"
1111
"github.com/TIBCOSoftware/flogo-lib/core/data"
12+
"github.com/TIBCOSoftware/flogo-lib/core/mapper/exprmapper"
1213
"github.com/TIBCOSoftware/flogo-lib/logger"
1314
)
1415

@@ -189,8 +190,8 @@ func (ti *TaskInst) HasWorkingData() bool {
189190
}
190191

191192
func (ti *TaskInst) Resolve(toResolve string) (value interface{}, err error) {
192-
193-
return definition.GetDataResolver().Resolve(toResolve, ti.flowInst)
193+
//Support expression mapping
194+
return exprmapper.GetMappingValue(toResolve, ti.flowInst, definition.GetDataResolver())
194195
}
195196

196197
func (ti *TaskInst) AddWorkingData(attr *data.Attribute) {
@@ -494,6 +495,7 @@ func (taskInst *TaskInst) appendErrorData(err error) {
494495

495496
//todo add case for *dataMapperError & *activity.Error
496497
}
498+
497499
//// Failed marks the Activity as failed
498500
//func (td *TaskInst) Failed(err error) {
499501
//

action/flow/model/simple/iteratorbehavior.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ func (tb *IteratorTaskBehavior) Eval(ctx model.TaskContext) (evalResult model.Ev
4747
return model.EVAL_FAIL, err
4848
}
4949
itx = NewIntIterator(count)
50+
case int64:
51+
itx = NewIntIterator(int(t))
52+
case float64:
53+
itx = NewIntIterator(int(t))
5054
case int:
5155
count := iterateOn.(int)
5256
itx = NewIntIterator(count)
@@ -142,12 +146,12 @@ func getIterateValue(ctx model.TaskContext) (value interface{}, set bool) {
142146

143147
strVal, ok := value.(string)
144148
if ok {
145-
if strVal[0] == '$' {
146-
val, err := ctx.Resolve(strVal)
147-
if err == nil {
148-
return val, true
149-
}
149+
val, err := ctx.Resolve(strVal)
150+
if err != nil {
151+
log.Errorf("Get iterate value failed, due to %s", err.Error())
152+
return nil, false
150153
}
154+
return val, true
151155
}
152156

153157
return value, true
@@ -270,7 +274,7 @@ func NewObjectIterator(data map[string]interface{}) *ObjectIterator {
270274

271275
type ReflectIterator struct {
272276
current int
273-
val reflect.Value
277+
val reflect.Value
274278
}
275279

276280
func (itx *ReflectIterator) Key() interface{} {
@@ -299,4 +303,4 @@ func (itx *ReflectIterator) next() bool {
299303

300304
func NewReflectIterator(val reflect.Value) *ReflectIterator {
301305
return &ReflectIterator{val: val, current: -1}
302-
}
306+
}

model/simple/behaviors/taskiterator.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ func (tb *IteratorTask) Eval(ctx model.TaskContext) (evalResult model.EvalResult
4747
return model.EVAL_FAIL, err
4848
}
4949
itx = NewIntIterator(count)
50+
case int64:
51+
itx = NewIntIterator(int(t))
52+
case float64:
53+
itx = NewIntIterator(int(t))
5054
case int:
5155
count := iterateOn.(int)
5256
itx = NewIntIterator(count)
@@ -141,12 +145,12 @@ func getIterateValue(ctx model.TaskContext) (value interface{}, set bool) {
141145

142146
strVal, ok := value.(string)
143147
if ok {
144-
if strVal[0] == '$' {
145-
val, err := ctx.Resolve(strVal)
146-
if err == nil {
147-
return val, true
148-
}
148+
val, err := ctx.Resolve(strVal)
149+
if err != nil {
150+
log.Errorf("Get iterate value failed, due to %s", err.Error())
151+
return nil, false
149152
}
153+
return val, true
150154
}
151155

152156
return value, true
@@ -269,7 +273,7 @@ func NewObjectIterator(data map[string]interface{}) *ObjectIterator {
269273

270274
type ReflectIterator struct {
271275
current int
272-
val reflect.Value
276+
val reflect.Value
273277
}
274278

275279
func (itx *ReflectIterator) Key() interface{} {
@@ -298,4 +302,4 @@ func (itx *ReflectIterator) next() bool {
298302

299303
func NewReflectIterator(val reflect.Value) *ReflectIterator {
300304
return &ReflectIterator{val: val, current: -1}
301-
}
305+
}

0 commit comments

Comments
 (0)