blob: 69479c7cdb7beb6d709d9f2cd29dbee8f59c8f59 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.util.*
import javax.wsdl.WSDLException
import org.apache.ofbiz.base.util.Debug
import org.apache.ofbiz.base.util.UtilXml
import org.apache.ofbiz.base.util.UtilProperties
import org.apache.ofbiz.service.eca.ServiceEcaUtil
import org.apache.ofbiz.service.ModelPermGroup
import org.apache.ofbiz.service.ModelPermission
import org.apache.ofbiz.service.ServiceContainer
import org.apache.ofbiz.base.util.UtilHttp
import org.apache.ofbiz.base.util.UtilProperties
import org.apache.ofbiz.entity.util.EntityUtilProperties
List getEcaListForService(String selectedService) {
ecaMap = org.apache.ofbiz.service.eca.ServiceEcaUtil.getServiceEventMap(selectedService)
if (!ecaMap) return null
//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 = new ArrayList()
setsList = new ArrayList()
actionsVal.each { curAction ->
actionClass = curAction.getClass()
if (org.apache.ofbiz.service.eca.ServiceEcaAction.equals(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
}
//Local Dispatchers
dispArrList = new TreeSet()
dispArrList.addAll(ServiceContainer.getAllDispatcherNames())
context.dispArrList = dispArrList
uiLabelMap = UtilProperties.getResourceBundleMap("WebtoolsUiLabels", locale)
uiLabelMap.addBottomResourceBundle("CommonUiLabels")
curDispatchContext = dispatcher.getDispatchContext()
context.dispatcherName = dispatcher.getName()
selectedService = parameters.sel_service_name
if (selectedService) {
curServiceMap = [:]
curServiceMap.serviceName = selectedService
curServiceModel = curDispatchContext.getModelService(selectedService)
if (curServiceModel != null) {
curServiceMap.description = curServiceModel.description
engineName = curServiceModel.engineName ?: "NA"
defaultEntityName = curServiceModel.defaultEntityName ?: "NA"
export = curServiceModel.export ? uiLabelMap.CommonTrue : uiLabelMap.CommonFalse
exportBool = curServiceModel.export ? "true" : "false"
permissionGroups = curServiceModel.permissionGroups ?: "NA"
implServices = curServiceModel.implServices ?: "NA"
overrideParameters = curServiceModel.overrideParameters
useTrans = curServiceModel.useTransaction ? uiLabelMap.CommonTrue : uiLabelMap.CommonFalse
maxRetry = curServiceModel.maxRetry
//Test for ECA's
ecaMapList = getEcaListForService(selectedService)
if (ecaMapList) {
context.ecaMapList = ecaMapList
}
//End Test for ECA's
invoke = curServiceModel.invoke ?: "NA"
location = curServiceModel.location ?: "NA"
requireNewTransaction = curServiceModel.requireNewTransaction ? uiLabelMap.CommonTrue : uiLabelMap.CommonFalse
curServiceMap.engineName = engineName
curServiceMap.defaultEntityName = defaultEntityName
curServiceMap.invoke = invoke
curServiceMap.location = location
curServiceMap.definitionLocation = curServiceModel.definitionLocation.replaceFirst("file:/" + System.getProperty("ofbiz.home") + "/", "")
curServiceMap.requireNewTransaction = requireNewTransaction
curServiceMap.export = export
curServiceMap.exportBool = exportBool
if (permissionGroups && !permissionGroups.equals("NA")) {
permList = new ArrayList(permissionGroups.size())
permissionGroups.each { curPerm -> //This is a ModelPermGroup
curPerm.permissions.each { curPermObj ->
permObj = [:]
permObj.action = curPermObj.action
permType = curPermObj.permissionType
if (permType == 1) {
permType = "Simple Permission"
} else if (permType == 2) {
permType = "Entity Permission"
} else if (permType == 3) {
permType = "Role Member"
}
permObj.permType = permType
permObj.nameOrRole = curPermObj.nameOrRole
permList.add(permObj)
}
}
curServiceMap.permissionGroups = permList
} else {
curServiceMap.permissionGroups = permissionGroups
}
curServiceMap.implServices = implServices
curServiceMap.useTrans = useTrans
curServiceMap.maxRetry = maxRetry
allParamsList = new ArrayList(3)
inParams = curServiceModel.getInParamNames()
inParamsList = new ArrayList(inParams.size())
inParams.each { paramName ->
curParam = curServiceModel.getParam(paramName)
curInParam = [:]
curInParam.entityName = curParam.entityName
curInParam.fieldName = curParam.fieldName
curInParam.internal = curParam.internal ? uiLabelMap.CommonTrue : uiLabelMap.CommonFalse
curInParam.mode = curParam.mode
curInParam.name = curParam.name
curInParam.description = curParam.description
curInParam.optional = curParam.optional ? uiLabelMap.CommonTrue : uiLabelMap.CommonFalse
curInParam.type = curParam.type
inParamsList.add(curInParam)
}
inParamMap = [:]
inParamMap.title = uiLabelMap.WebtoolsInParameters
inParamMap.paramList = inParamsList
allParamsList.add(inParamMap)
outParams = curServiceModel.getOutParamNames()
outParamsList = new ArrayList(outParams.size())
outParams.each { paramName ->
curParam = curServiceModel.getParam(paramName)
curOutParam = [:]
curOutParam.entityName = curParam.entityName
curOutParam.fieldName = curParam.fieldName
curOutParam.internal = curParam.internal ? uiLabelMap.CommonTrue : uiLabelMap.CommonFalse
curOutParam.mode = curParam.mode
curOutParam.name = curParam.name
curOutParam.description = curParam.description
curOutParam.optional = curParam.optional ? uiLabelMap.CommonTrue : uiLabelMap.CommonFalse
curOutParam.type = curParam.type
outParamsList.add(curOutParam)
}
outParamMap = [:]
outParamMap.title = uiLabelMap.get("WebtoolsOutParameters")
outParamMap.paramList = outParamsList
allParamsList.add(outParamMap)
if (overrideParameters) {
ovrPrmList = new ArrayList(overrideParameters.size())
overrideParameters.each { curParam ->
curOvrPrm = [:]
curOvrPrm.entityName = curParam.entityName
curOvrPrm.fieldName = curParam.fieldName
curOvrPrm.internal = curParam.internal ? uiLabelMap.CommonTrue : uiLabelMap.CommonFalse
curOvrPrm.mode = curParam.mode
curOvrPrm.name = curParam.name
curOvrPrm.description = curParam.description
curOvrPrm.optional = curParam.optional ? uiLabelMap.CommonTrue : uiLabelMap.CommonFalse
curOvrPrm.type = curParam.type
ovrPrmList.add(curOvrPrm)
}
ovrParamMap = [:]
ovrParamMap.title = "Override parameters"
ovrParamMap.paramList = ovrPrmList
allParamsList.add(ovrParamMap)
}
curServiceMap.allParamsList = allParamsList
}
showWsdl = parameters.show_wsdl
if (showWsdl?.equals("true")) {
try {
wsdl = curServiceModel.toWSDL("http://${request.getServerName()}:${EntityUtilProperties.getPropertyValue("url", "port.http", "80", delegator)}${parameters._CONTROL_PATH_}/SOAPService")
curServiceMap.wsdl = UtilXml.writeXmlDocument(wsdl)
} catch (WSDLException ex) {
curServiceMap.wsdl = ex.getLocalizedMessage()
}
context.showWsdl = true
}
context.selectedServiceMap = curServiceMap
}
if (!selectedService) {
//get constraints if any
constraint = parameters.constraint
serviceNames = curDispatchContext.getAllServiceNames()
serviceNamesAlphaList = new ArrayList(26)
servicesList = new ArrayList(serviceNames.size())
servicesFoundCount = 0
serviceNames.each { serviceName ->
//add first char of service name to list
if (serviceName) {
serviceCharAt1 = serviceName[0]
if (!serviceNamesAlphaList.contains(serviceCharAt1)) {
serviceNamesAlphaList.add(serviceCharAt1)
}
}
//create basic service def
curServiceMap = [:]
curServiceMap.serviceName = serviceName
curServiceModel = curDispatchContext.getModelService(serviceName)
canIncludeService = true
if (constraint && curServiceModel != null) {
consArr = constraint.split("@")
constraintName = consArr[0]
constraintVal = consArr[1]
if (constraintName.equals("engine_name")) {
canIncludeService = curServiceModel.engineName.equals(constraintVal)
if (constraintVal.equals("NA")) {
canIncludeService = curServiceModel.engineName ? false : true
}
}
if (canIncludeService && constraintName.equals("default_entity_name")) {
canIncludeService = curServiceModel.defaultEntityName.equals(constraintVal)
if (constraintVal.equals("NA")) {
canIncludeService = curServiceModel.defaultEntityName ? false : true
}
}
if (canIncludeService && constraintName.equals("location")) {
canIncludeService = curServiceModel.location.equals(constraintVal)
if (constraintVal.equals("NA")) {
canIncludeService = curServiceModel.location ? false : true
}
}
if (canIncludeService && constraintName.equals("definitionLocation")) {
canIncludeService = curServiceModel.definitionLocation.equals(constraintVal)
}
if (canIncludeService && constraintName.equals("alpha")) {
canIncludeService = (serviceName[0]).equals(constraintVal)
if (constraintVal.equals("NA")) {
canIncludeService = true
}
}
}
if (curServiceModel != null && canIncludeService) {
engineName = curServiceModel.engineName ?: "NA"
defaultEntityName = curServiceModel.defaultEntityName ?: "NA"
invoke = curServiceModel.invoke ?: "NA"
location = curServiceModel.location ?: "NA"
requireNewTransaction = curServiceModel.requireNewTransaction
curServiceMap.engineName = engineName
curServiceMap.defaultEntityName = defaultEntityName
curServiceMap.invoke = invoke
curServiceMap.location = location
curServiceMap.definitionLocation = curServiceModel.definitionLocation.replaceFirst("file:/" + System.getProperty("ofbiz.home") + "/", "")
curServiceMap.requireNewTransaction = requireNewTransaction
servicesList.add(curServiceMap)
servicesFoundCount++
}
}
context.servicesList = servicesList
context.serviceNamesAlphaList = serviceNamesAlphaList
context.servicesFoundCount = servicesFoundCount
}