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
}