| /* |
| * 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 |
| } |