| /* |
| * 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.ofbiz.base.util.Debug; |
| import org.ofbiz.base.util.UtilXml; |
| import org.ofbiz.base.util.UtilProperties; |
| import org.ofbiz.service.eca.ServiceEcaUtil; |
| import org.ofbiz.service.ModelPermGroup; |
| import org.ofbiz.service.ModelPermission; |
| import org.ofbiz.service.ServiceContainer; |
| import org.ofbiz.base.util.UtilHttp; |
| import org.ofbiz.base.util.UtilProperties; |
| |
| List getEcaListForService(String selectedService) { |
| ecaMap = org.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.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()}:${UtilProperties.getPropertyValue("url.properties", "port.http", "80")}${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")) { |
| fullPath = "file:/" + System.getProperty("ofbiz.home") + "/" + constraintVal; |
| canIncludeService = curServiceModel.definitionLocation.equals(fullPath); |
| } |
| |
| 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; |
| } |