| /******************************************************************************* |
| * 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. |
| *******************************************************************************/ |
| package org.apache.ofbiz.service; |
| |
| import java.io.Serializable; |
| import java.util.List; |
| import java.util.Locale; |
| |
| import javax.wsdl.Definition; |
| import javax.wsdl.Part; |
| import javax.wsdl.WSDLException; |
| import javax.xml.namespace.QName; |
| |
| import org.apache.ofbiz.base.util.Debug; |
| import org.apache.ofbiz.base.util.ObjectType; |
| import org.apache.ofbiz.base.util.UtilProperties; |
| import org.apache.ofbiz.base.util.UtilValidate; |
| |
| /** |
| * Generic Service Model Parameter |
| */ |
| @SuppressWarnings("serial") |
| public class ModelParam implements Serializable { |
| |
| public static final String module = ModelParam.class.getName(); |
| |
| /** Parameter name */ |
| public String name; |
| |
| /** The description of this parameter */ |
| public String description; |
| |
| /** Paramater type */ |
| public String type; |
| |
| /** Parameter mode (IN/OUT/INOUT) */ |
| public String mode; |
| |
| /** The form label */ |
| public String formLabel; |
| |
| /** The entity name */ |
| public String entityName; |
| |
| /** The entity field name */ |
| public String fieldName; |
| |
| /** Request attribute to look for if not defined as a parameter */ |
| public String requestAttributeName; |
| |
| /** Session attribute to look for if not defined as a parameter */ |
| public String sessionAttributeName; |
| |
| /** Parameter prefix for creating an attribute Map */ |
| public String stringMapPrefix; |
| |
| /** Parameter suffix for creating an attribute List */ |
| public String stringListSuffix; |
| |
| /** Validation methods */ |
| public List<ModelParamValidator> validators; |
| |
| /** Default value */ |
| private String defaultValue = null; |
| |
| /** Is this Parameter required or optional? Default to false, or required */ |
| public boolean optional = false; |
| public boolean overrideOptional = false; |
| |
| /** Is this parameter to be displayed via the form tool? */ |
| public boolean formDisplay = true; |
| public boolean overrideFormDisplay = false; |
| |
| /** Default value */ |
| public String allowHtml = null; |
| |
| /** Is this Parameter set internally? */ |
| public boolean internal = false; |
| |
| public ModelParam() {} |
| |
| public ModelParam(ModelParam param) { |
| this.name = param.name; |
| this.description = param.description; |
| this.type = param.type; |
| this.mode = param.mode; |
| this.formLabel = param.formLabel; |
| this.entityName = param.entityName; |
| this.fieldName = param.fieldName; |
| this.requestAttributeName = param.requestAttributeName; |
| this.sessionAttributeName = param.sessionAttributeName; |
| this.stringMapPrefix = param.stringMapPrefix; |
| this.stringListSuffix = param.stringListSuffix; |
| this.validators = param.validators; |
| if (param.defaultValue != null) this.setDefaultValue(param.defaultValue); |
| this.optional = param.optional; |
| this.overrideOptional = param.overrideOptional; |
| this.formDisplay = param.formDisplay; |
| this.overrideFormDisplay = param.overrideFormDisplay; |
| this.allowHtml = param.allowHtml; |
| this.internal = param.internal; |
| } |
| |
| public void addValidator(String className, String methodName, String failMessage) { |
| validators.add(new ModelParamValidator(className, methodName, failMessage, null, null)); |
| } |
| |
| public void addValidator(String className, String methodName, String failResource, String failProperty) { |
| validators.add(new ModelParamValidator(className, methodName, null, failResource, failProperty)); |
| } |
| |
| public String getPrimaryFailMessage(Locale locale) { |
| if (UtilValidate.isNotEmpty(validators)) { |
| return validators.get(0).getFailMessage(locale); |
| } else { |
| return null; |
| } |
| } |
| |
| public String getShortDisplayDescription() { |
| return this.name + "[" + this.type + "-" + this.mode + "]" + (optional ? "" : "*"); |
| } |
| |
| public String getName() { |
| return this.name; |
| } |
| // Method to retrieve form-label from model parameter object in freemarker |
| public String getFormLabel() { |
| return this.formLabel; |
| } |
| |
| public String getType() { |
| return this.type; |
| } |
| |
| public String getMode() { |
| return this.mode; |
| } |
| |
| public String getEntityName() { |
| return this.entityName; |
| } |
| |
| public String getFieldName() { |
| return this.fieldName; |
| } |
| |
| public boolean getInternal() { |
| return this.internal; |
| } |
| |
| public boolean isIn() { |
| return "IN".equals(this.mode) || "INOUT".equals(this.mode); |
| } |
| |
| public boolean isOut() { |
| return "OUT".equals(this.mode) || "INOUT".equals(this.mode); |
| } |
| |
| public boolean isOptional() { |
| return this.optional; |
| } |
| |
| public Object getDefaultValue() { |
| Object defaultValueObj = null; |
| if (this.type != null) { |
| try { |
| defaultValueObj = ObjectType.simpleTypeConvert(this.defaultValue, this.type, null, null, false); |
| } catch (Exception e) { |
| Debug.logWarning(e, "Service attribute [" + name + "] default value could not be converted to type [" + type + "]: " + e.toString(), module); |
| } |
| if (defaultValueObj == null) { |
| // uh-oh, conversion failed, set the String and see what happens |
| defaultValueObj = this.defaultValue; |
| } |
| } else { |
| defaultValueObj = this.defaultValue; |
| } |
| return defaultValueObj; |
| } |
| public void setDefaultValue(String defaultValue) { |
| this.defaultValue = defaultValue; |
| if (this.defaultValue != null) { |
| this.optional = true; |
| } |
| if (Debug.verboseOn()) Debug.logVerbose("Default value for attribute [" + this.name + "] set to [" + this.defaultValue + "]", module); |
| } |
| public void copyDefaultValue(ModelParam param) { |
| this.setDefaultValue(param.defaultValue); |
| } |
| |
| public boolean equals(ModelParam model) { |
| return model.name.equals(this.name); |
| } |
| |
| @Override |
| public String toString() { |
| StringBuilder buf = new StringBuilder(); |
| buf.append(name).append("::"); |
| buf.append(type).append("::"); |
| buf.append(mode).append("::"); |
| buf.append(formLabel).append("::"); |
| buf.append(entityName).append("::"); |
| buf.append(fieldName).append("::"); |
| buf.append(stringMapPrefix).append("::"); |
| buf.append(stringListSuffix).append("::"); |
| buf.append(optional).append("::"); |
| buf.append(overrideOptional).append("::"); |
| buf.append(formDisplay).append("::"); |
| buf.append(overrideFormDisplay).append("::"); |
| buf.append(allowHtml).append("::"); |
| buf.append(defaultValue).append("::"); |
| buf.append(internal); |
| if (validators != null) |
| buf.append(validators.toString()).append("::"); |
| return buf.toString(); |
| } |
| |
| public Part getWSDLPart(Definition def) throws WSDLException { |
| Part part = def.createPart(); |
| part.setName(this.name); |
| part.setTypeName(new QName(ModelService.TNS, this.java2wsdlType())); |
| return part; |
| } |
| |
| protected String java2wsdlType() throws WSDLException { |
| if (ObjectType.instanceOf(java.lang.Character.class, this.type)) { |
| return "std-String"; |
| } else if (ObjectType.instanceOf(java.lang.String.class, this.type)) { |
| return "std-String"; |
| } else if (ObjectType.instanceOf(java.lang.Byte.class, this.type)) { |
| return "std-String"; |
| } else if (ObjectType.instanceOf(java.lang.Boolean.class, this.type)) { |
| return "std-Boolean"; |
| } else if (ObjectType.instanceOf(java.lang.Integer.class, this.type)) { |
| return "std-Integer"; |
| } else if (ObjectType.instanceOf(java.lang.Double.class, this.type)) { |
| return "std-Double"; |
| } else if (ObjectType.instanceOf(java.lang.Float.class, this.type)) { |
| return "std-Float"; |
| } else if (ObjectType.instanceOf(java.lang.Short.class, this.type)) { |
| return "std-Integer"; |
| } else if (ObjectType.instanceOf(java.math.BigDecimal.class, this.type)) { |
| return "std-Long"; |
| } else if (ObjectType.instanceOf(java.math.BigInteger.class, this.type)) { |
| return "std-Integer"; |
| } else if (ObjectType.instanceOf(java.util.Calendar.class, this.type)) { |
| return "sql-Timestamp"; |
| } else if (ObjectType.instanceOf(com.ibm.icu.util.Calendar.class, this.type)) { |
| return "sql-Timestamp"; |
| } else if (ObjectType.instanceOf(java.sql.Date.class, this.type)) { |
| return "sql-Date"; |
| } else if (ObjectType.instanceOf(java.util.Date.class, this.type)) { |
| return "sql-Timestamp"; |
| } else if (ObjectType.instanceOf(java.lang.Long.class, this.type)) { |
| return "std-Long"; |
| } else if (ObjectType.instanceOf(java.sql.Timestamp.class, this.type)) { |
| return "sql-Timestamp"; |
| } else if (ObjectType.instanceOf(org.apache.ofbiz.entity.GenericValue.class, this.type)) { |
| return "eeval-"; |
| } else if (ObjectType.instanceOf(org.apache.ofbiz.entity.GenericPK.class, this.type)) { |
| return "eepk-"; |
| } else if (ObjectType.instanceOf(java.util.Map.class, this.type)) { |
| return "map-Map"; |
| } else if (ObjectType.instanceOf(java.util.List.class, this.type)) { |
| return "col-LinkedList"; |
| } else { |
| return "cus-obj"; |
| } |
| |
| //throw new WSDLException(WSDLException.OTHER_ERROR, "Service cannot be described with WSDL (" + this.name + " / " + this.type + ")"); |
| } |
| |
| static class ModelParamValidator implements Serializable { |
| protected String className; |
| protected String methodName; |
| protected String failMessage; |
| protected String failResource; |
| protected String failProperty; |
| |
| public ModelParamValidator(String className, String methodName, String failMessage, String failResource, String failProperty) { |
| this.className = className; |
| this.methodName = methodName; |
| this.failMessage = failMessage; |
| this.failResource = failResource; |
| this.failProperty = failProperty; |
| } |
| |
| public String getClassName() { |
| return className; |
| } |
| |
| public String getMethodName() { |
| return methodName; |
| } |
| |
| public String getFailMessage(Locale locale) { |
| if (failMessage != null) { |
| return this.failMessage; |
| } else { |
| if (failResource != null && failProperty != null) { |
| return UtilProperties.getMessage(failResource, failProperty, locale); |
| } |
| } |
| return null; |
| } |
| |
| @Override |
| public String toString() { |
| return className + "::" + methodName + "::" + failMessage + "::" + failResource + "::" + failProperty; |
| } |
| } |
| } |