List getEcaListForService()

in framework/webtools/src/main/groovy/org/apache/ofbiz/webtools/service/AvailableServices.groovy [29:327]


List getEcaListForService(String selectedService) {
    ecaMap = org.apache.ofbiz.service.eca.ServiceEcaUtil.getServiceEventMap(selectedService)

    if (!ecaMap) {
        return []
    }

    //ecaMap is a HashMap so get keyset & iterate
    ecaMapList = []

    ecaMap.each { ecaKey, ecaValue ->
        ecaValue.each { curRule ->
            curRuleMap = [:]

            curRuleMap.ruleKey = ecaKey

            curRuleClass = curRule.getClass()

            //event name for rule
            eventName = curRuleClass.getDeclaredField('eventName')
            eventName.setAccessible(true)
            eventNameVal = eventName.get(curRule)
            if (eventNameVal) {
                curRuleMap.eventName = eventNameVal as String
            }
            eventName.setAccessible(false)

            //runOnError
            runOnError = curRuleClass.getDeclaredField('runOnError')
            runOnError.setAccessible(true)
            runOnErrorVal = runOnError.get(curRule)
            if (runOnErrorVal) {
                curRuleMap.runOnError = runOnErrorVal as String
            }
            runOnError.setAccessible(false)

            //runOnFailure
            runOnFailure = curRuleClass.getDeclaredField('runOnFailure')
            runOnFailure.setAccessible(true)
            runOnFailureVal = runOnFailure.get(curRule)
            if (runOnFailureVal) {
                curRuleMap.runOnFailure = runOnFailureVal as String
            }
            runOnFailure.setAccessible(false)

            //extract actions
            actions = curRuleClass.getDeclaredField('actionsAndSets')
            actions.setAccessible(true)
            actionsVal = actions.get(curRule)
            if (actionsVal) {
                actionsList = []
                setsList = []
                actionsVal.each { curAction ->
                    actionClass = curAction.getClass()
                    if (org.apache.ofbiz.service.eca.ServiceEcaAction == actionClass) {
                        actionMap = [:]

                        //eventName
                        eventName = actionClass.getDeclaredField('eventName')
                        eventName.setAccessible(true)
                        eventNameVal = eventName.get(curAction)
                        if (eventNameVal) {
                            actionMap.eventName = eventNameVal as String
                        }
                        eventName.setAccessible(false)

                        //ignoreError
                        ignoreError = actionClass.getDeclaredField('ignoreError')
                        ignoreError.setAccessible(true)
                        ignoreErrorVal = ignoreError.get(curAction)
                        if (ignoreErrorVal) {
                            actionMap.ignoreError = ignoreErrorVal as String
                        }
                        ignoreError.setAccessible(false)

                        //ignoreFailure
                        ignoreFailure = actionClass.getDeclaredField('ignoreFailure')
                        ignoreFailure.setAccessible(true)
                        ignoreFailureVal = ignoreFailure.get(curAction)
                        if (ignoreFailureVal) {
                            actionMap.ignoreFailure = ignoreFailureVal as String
                        }
                        ignoreFailure.setAccessible(false)

                        //persist
                        persist = actionClass.getDeclaredField('persist')
                        persist.setAccessible(true)
                        persistVal = persist.get(curAction)
                        if (persistVal) {
                            actionMap.persist = persistVal as String
                        }
                        persist.setAccessible(false)

                        //resultMapName
                        resultMapName = actionClass.getDeclaredField('resultMapName')
                        resultMapName.setAccessible(true)
                        resultMapNameVal = resultMapName.get(curAction)
                        if (resultMapNameVal) {
                            actionMap.resultMapName = resultMapNameVal as String
                        }
                        resultMapName.setAccessible(false)

                        //resultToContext
                        resultToContext = actionClass.getDeclaredField('resultToContext')
                        resultToContext.setAccessible(true)
                        resultToContextVal = resultToContext.get(curAction)
                        if (resultToContextVal) {
                            actionMap.resultToContext = resultToContextVal as String
                        }
                        resultToContext.setAccessible(false)

                        //resultToResult
                        resultToResult = actionClass.getDeclaredField('resultToResult')
                        resultToResult.setAccessible(true)
                        resultToResultVal = resultToResult.get(curAction)
                        if (resultToResultVal) {
                            actionMap.resultToResult = resultToResultVal as String
                        }
                        resultToResult.setAccessible(false)

                        //serviceMode
                        serviceMode = actionClass.getDeclaredField('serviceMode')
                        serviceMode.setAccessible(true)
                        serviceModeVal = serviceMode.get(curAction)
                        if (serviceModeVal) {
                            actionMap.serviceMode = serviceModeVal as String
                        }
                        serviceMode.setAccessible(false)

                        //serviceName
                        serviceName = actionClass.getDeclaredField('serviceName')
                        serviceName.setAccessible(true)
                        serviceNameVal = serviceName.get(curAction)
                        if (serviceNameVal) {
                            actionMap.serviceName = serviceNameVal as String
                        }
                        serviceName.setAccessible(false)

                        actionsList.add(actionMap)
                    } else {  // FIXME : we should also show field-names and values for set operation
                        setMap = [:]

                        // fieldName
                        fieldName = actionClass.getDeclaredField('fieldName')
                        fieldName.setAccessible(true)
                        fieldNameVal = fieldName.get(curAction)
                        if (fieldNameVal) {
                            setMap.fieldName = fieldNameVal as String
                        }
                        fieldName.setAccessible(false)

                        // envName
                        envName = actionClass.getDeclaredField('envName')
                        envName.setAccessible(true)
                        envNameVal = envName.get(curAction)
                        if (envNameVal) {
                            setMap.envName = envNameVal as String
                        }
                        envName.setAccessible(false)

                        // value
                        value = actionClass.getDeclaredField('value')
                        value.setAccessible(true)
                        valueVal = value.get(curAction)
                        if (valueVal) {
                            setMap.value = valueVal as String
                        }
                        value.setAccessible(false)

                        // format
                        format = actionClass.getDeclaredField('format')
                        format.setAccessible(true)
                        formatVal = format.get(curAction)
                        if (formatVal) {
                            setMap.format = formatVal as String
                        }
                        format.setAccessible(false)

                        setsList.add(setMap)
                    }
                }

                curRuleMap.actions = actionsList
                curRuleMap.sets = setsList
            }
            actions.setAccessible(true)

            //extract conditions
            conditions = curRuleClass.getDeclaredField('conditions')
            conditions.setAccessible(true)
            conditionsVal = conditions.get(curRule)
            if (conditionsVal) {
                curRuleMap.conditions = runOnFailureVal as String
                condList = new ArrayList(conditionsVal.size())
                conditionsVal.each { condVal ->
                    condValClass = condVal.getClass()
                    condMap = [:]

                    //compareType
                    compareType = condValClass.getDeclaredField('compareType')
                    compareType.setAccessible(true)
                    compareTypeVal = compareType.get(condVal)
                    if (compareTypeVal) {
                        condMap.compareType = compareTypeVal as String
                    }
                    compareType.setAccessible(false)

                    //conditionService
                    conditionService = condValClass.getDeclaredField('conditionService')
                    conditionService.setAccessible(true)
                    conditionServiceVal = conditionService.get(condVal)
                    if (conditionServiceVal) {
                        condMap.conditionService = conditionServiceVal as String
                    }
                    conditionService.setAccessible(false)

                    //format
                    format = condValClass.getDeclaredField('format')
                    format.setAccessible(true)
                    formatVal = format.get(condVal)
                    if (formatVal) {
                        condMap.format = formatVal as String
                    }
                    format.setAccessible(false)

                    //isConstant
                    isConstant = condValClass.getDeclaredField('isConstant')
                    isConstant.setAccessible(true)
                    isConstantVal = isConstant.get(condVal)
                    if (isConstantVal) {
                        condMap.isConstant = isConstantVal as String
                    }
                    isConstant.setAccessible(false)

                    //isService
                    isService = condValClass.getDeclaredField('isService')
                    isService.setAccessible(true)
                    isServiceVal = isService.get(condVal)
                    if (isServiceVal) {
                        condMap.isService = isServiceVal as String
                    }
                    isService.setAccessible(false)

                    //lhsMapName
                    lhsMapName = condValClass.getDeclaredField('lhsMapName')
                    lhsMapName.setAccessible(true)
                    lhsMapNameVal = lhsMapName.get(condVal)
                    if (lhsMapNameVal) {
                        condMap.lhsMapName = lhsMapNameVal as String
                    }
                    lhsMapName.setAccessible(false)

                    //lhsValueName
                    lhsValueName = condValClass.getDeclaredField('lhsValueName')
                    lhsValueName.setAccessible(true)
                    lhsValueNameVal = lhsValueName.get(condVal)
                    if (lhsValueNameVal) {
                        condMap.lhsValueName = lhsValueNameVal as String
                    }
                    lhsValueName.setAccessible(false)

                    //operator
                    operator = condValClass.getDeclaredField('operator')
                    operator.setAccessible(true)
                    operatorVal = operator.get(condVal)
                    if (operatorVal) {
                        condMap.operator = operatorVal as String
                    }
                    operator.setAccessible(false)

                    //rhsMapName
                    rhsMapName = condValClass.getDeclaredField('rhsMapName')
                    rhsMapName.setAccessible(true)
                    rhsMapNameVal = rhsMapName.get(condVal)
                    if (rhsMapNameVal) {
                        condMap.rhsMapName = rhsMapNameVal as String
                    }
                    rhsMapName.setAccessible(false)

                    //rhsValueName
                    rhsValueName = condValClass.getDeclaredField('rhsValueName')
                    rhsValueName.setAccessible(true)
                    rhsValueNameVal = rhsValueName.get(condVal)
                    if (rhsValueNameVal) {
                        condMap.rhsValueName = rhsValueNameVal as String
                    }
                    rhsValueName.setAccessible(false)

                    condList.add(condMap)
                }
                curRuleMap.conditions = condList
            }
            conditions.setAccessible(false)

            ecaMapList.add(curRuleMap)
        }
    }
    return ecaMapList
}