github.com/TIBCOSoftware/flogo-lib@v0.5.9/core/mapper/exprmapper/exprmapper.go (about)

     1  package exprmapper
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/TIBCOSoftware/flogo-lib/core/data"
     6  	"github.com/TIBCOSoftware/flogo-lib/core/mapper/assign"
     7  	"github.com/TIBCOSoftware/flogo-lib/core/mapper/exprmapper/expression"
     8  	"github.com/TIBCOSoftware/flogo-lib/logger"
     9  
    10  	//Pre registry all function for now
    11  	_ "github.com/TIBCOSoftware/flogo-lib/core/mapper/exprmapper/function/array/length"
    12  	_ "github.com/TIBCOSoftware/flogo-lib/core/mapper/exprmapper/function/number/random"
    13  	_ "github.com/TIBCOSoftware/flogo-lib/core/mapper/exprmapper/function/string/concat"
    14  	_ "github.com/TIBCOSoftware/flogo-lib/core/mapper/exprmapper/function/string/equals"
    15  	_ "github.com/TIBCOSoftware/flogo-lib/core/mapper/exprmapper/function/string/equalsignorecase"
    16  	_ "github.com/TIBCOSoftware/flogo-lib/core/mapper/exprmapper/function/string/length"
    17  	_ "github.com/TIBCOSoftware/flogo-lib/core/mapper/exprmapper/function/string/substring"
    18  )
    19  
    20  var log = logger.GetLogger("expr-mapper")
    21  
    22  const (
    23  	MAP_TO_INPUT = "$INPUT"
    24  )
    25  
    26  func MapExpreesion(mapping *data.MappingDef, inputScope, outputScope data.Scope, resolver data.Resolver) error {
    27  	mappingValue, err := GetExpresssionValue(mapping.Value, inputScope, resolver)
    28  	if err != nil {
    29  		return err
    30  	}
    31  	err = assign.SetValueToOutputScope(mapping.MapTo, outputScope, mappingValue)
    32  	if err != nil {
    33  		err = fmt.Errorf("Set value %+v to output [%s] error - %s", mappingValue, mapping.MapTo, err.Error())
    34  		log.Error(err)
    35  		return err
    36  	}
    37  	log.Debugf("Set value %+v to %s Done", mappingValue, mapping.MapTo)
    38  	return nil
    39  }
    40  
    41  func GetExpresssionValue(mappingV interface{}, inputScope data.Scope, resolver data.Resolver) (interface{}, error) {
    42  	mappingValue, ok := mappingV.(string)
    43  	if !ok {
    44  		return mappingV, nil
    45  	}
    46  	exp, err := expression.ParseExpression(mappingValue)
    47  	if err == nil {
    48  		//flogo expression
    49  		log.Debugf("[%s] is an valid expression", mappingValue)
    50  		expValue, err := exp.EvalWithScope(inputScope, resolver)
    51  		if err != nil {
    52  			return nil, fmt.Errorf("Execution failed for mapping [%s] due to error - %s", mappingValue, err.Error())
    53  		}
    54  		return expValue, nil
    55  	} else {
    56  		log.Debugf("[%s] is not an expression, take it as assign", mappingValue)
    57  		return assign.GetMappingValue(mappingV, inputScope, resolver)
    58  	}
    59  }