Author: adrianc
Date: Sat Apr 28 20:35:48 2012 New Revision: 1331827 URL: http://svn.apache.org/viewvc?rev=1331827&view=rev Log: Overhauled Mini-language <add-error> element. Modified: ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/callops/AddError.java Modified: ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd?rev=1331827&r1=1331826&r2=1331827&view=diff ============================================================================== --- ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd (original) +++ ofbiz/trunk/framework/minilang/dtd/simple-methods-v2.xsd Sat Apr 28 20:35:48 2012 @@ -3560,16 +3560,16 @@ under the License. <xs:element name="check-errors" substitutionGroup="ControlOperations"> <xs:annotation> <xs:documentation> - Halts script execution if the error message list contains any messages. + Halts script execution if errors were encountered in previous operations. </xs:documentation> </xs:annotation> <xs:complexType> <xs:attribute type="xs:string" name="error-code"> <xs:annotation> <xs:documentation> - The error code to return to the calling process. Defaults to "error". - <br/><br/> - Optional. Attribute type: constant+expr + The error code to return to the calling process. Defaults to "error". + <br/><br/> + Optional. Attribute type: constant+expr </xs:documentation> </xs:annotation> </xs:attribute> @@ -3578,14 +3578,23 @@ under the License. <xs:element name="add-error" substitutionGroup="ControlOperations"> <xs:annotation> <xs:documentation> - Adds an error message to the error message list. + Adds an error message to an error message list. </xs:documentation> </xs:annotation> <xs:complexType> <xs:choice> - <xs:element ref="fail-message"/> - <xs:element ref="fail-property"/> + <xs:element ref="fail-message" /> + <xs:element ref="fail-property" /> </xs:choice> + <xs:attribute type="xs:string" name="error-list-name"> + <xs:annotation> + <xs:documentation> + The name of the error message list. Defaults to "error_list". + <br/><br/> + Optional. Attribute type: constant + </xs:documentation> + </xs:annotation> + </xs:attribute> </xs:complexType> </xs:element> <xs:element name="break" substitutionGroup="ControlOperations"> Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/callops/AddError.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/callops/AddError.java?rev=1331827&r1=1331826&r2=1331827&view=diff ============================================================================== --- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/callops/AddError.java (original) +++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/callops/AddError.java Sat Apr 28 20:35:48 2012 @@ -23,77 +23,99 @@ import java.util.List; import javolution.util.FastList; import org.ofbiz.base.util.UtilProperties; -import org.ofbiz.base.util.UtilValidate; import org.ofbiz.base.util.UtilXml; +import org.ofbiz.base.util.string.FlexibleStringExpander; import org.ofbiz.minilang.MiniLangException; +import org.ofbiz.minilang.MiniLangValidate; import org.ofbiz.minilang.SimpleMethod; -import org.ofbiz.minilang.method.ContextAccessor; import org.ofbiz.minilang.method.MethodContext; import org.ofbiz.minilang.method.MethodOperation; import org.w3c.dom.Element; /** - * Adds the fail-message or fail-property value to the error-list. + * Adds an error message to an error message list. */ -public class AddError extends MethodOperation { +public final class AddError extends MethodOperation { - ContextAccessor<List<Object>> errorListAcsr; - boolean isProperty = false; - String message = null; - String propertyResource = null; + private final String listName; + private final FlexibleStringExpander messageFse; + private final String propertykey; + private final String propertyResource; public AddError(Element element, SimpleMethod simpleMethod) throws MiniLangException { super(element, simpleMethod); - errorListAcsr = new ContextAccessor<List<Object>>(element.getAttribute("error-list-name"), "error_list"); - Element failMessage = UtilXml.firstChildElement(element, "fail-message"); - Element failProperty = UtilXml.firstChildElement(element, "fail-property"); - if (failMessage != null) { - this.message = failMessage.getAttribute("message"); - this.isProperty = false; - } else if (failProperty != null) { - this.propertyResource = failProperty.getAttribute("resource"); - this.message = failProperty.getAttribute("property"); - this.isProperty = true; + if (MiniLangValidate.validationOn()) { + MiniLangValidate.childElements(simpleMethod, element, "fail-message", "fail-property"); + MiniLangValidate.requireAnyChildElement(simpleMethod, element, "fail-message", "fail-property"); } - } - - public void addMessage(List<Object> messages, ClassLoader loader, MethodContext methodContext) { - String message = methodContext.expandString(this.message); - String propertyResource = methodContext.expandString(this.propertyResource); - if (!isProperty && message != null) { - messages.add(message); - } else if (isProperty && propertyResource != null && message != null) { - String propMsg = UtilProperties.getMessage(propertyResource, message, methodContext.getEnvMap(), methodContext.getLocale()); - if (UtilValidate.isEmpty(propMsg)) { - messages.add("Simple Method error occurred, but no message was found, sorry."); - } else { - messages.add(methodContext.expandString(propMsg)); + MiniLangValidate.attributeNames(simpleMethod, element, "error-list-name"); + MiniLangValidate.constantAttributes(simpleMethod, element, "error-list-name"); + String listNameAttribute = element.getAttribute("error-list-name"); + if (listNameAttribute.length() == 0) { + this.listName = "error_list"; + } else { + this.listName = listNameAttribute; + } + Element childElement = UtilXml.firstChildElement(element, "fail-message"); + if (childElement != null) { + if (MiniLangValidate.validationOn()) { + MiniLangValidate.attributeNames(simpleMethod, childElement, "message"); + MiniLangValidate.requiredAttributes(simpleMethod, childElement, "message"); + MiniLangValidate.constantPlusExpressionAttributes(simpleMethod, childElement, "message"); } + this.messageFse = FlexibleStringExpander.getInstance(childElement.getAttribute("message")); + this.propertykey = null; + this.propertyResource = null; } else { - messages.add("Simple Method error occurred, but no message was found, sorry."); + childElement = UtilXml.firstChildElement(element, "fail-property"); + if (childElement != null) { + if (MiniLangValidate.validationOn()) { + MiniLangValidate.attributeNames(simpleMethod, childElement, "property", "resource"); + MiniLangValidate.requiredAttributes(simpleMethod, childElement, "property", "resource"); + MiniLangValidate.constantAttributes(simpleMethod, childElement, "property", "resource"); + } + this.messageFse = FlexibleStringExpander.getInstance(null); + this.propertykey = childElement.getAttribute("property"); + this.propertyResource = childElement.getAttribute("resource"); + } else { + this.messageFse = FlexibleStringExpander.getInstance(null); + this.propertykey = null; + this.propertyResource = null; + } } } @Override public boolean exec(MethodContext methodContext) throws MiniLangException { - List<Object> messages = errorListAcsr.get(methodContext); - if (messages == null) { - messages = FastList.newInstance(); - errorListAcsr.put(methodContext, messages); + String message = null; + if (!this.messageFse.isEmpty()) { + message = this.messageFse.expandString(methodContext.getEnvMap()); + } else if (this.propertyResource != null) { + message = UtilProperties.getMessage(this.propertyResource, this.propertykey, methodContext.getEnvMap(), methodContext.getLocale()); + } + if (message != null) { + List<String> messages = methodContext.getEnv(this.listName); + if (messages == null) { + messages = FastList.newInstance(); + } + methodContext.putEnv(this.listName, messages); + messages.add(message); } - this.addMessage(messages, methodContext.getLoader(), methodContext); return true; } @Override public String expandedString(MethodContext methodContext) { - // TODO: something more than a stub/dummy - return this.rawString(); + return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap()); } @Override public String rawString() { - // TODO: something more than the empty tag + return toString(); + } + + @Override + public String toString() { return "<add-error/>"; } |
Free forum by Nabble | Edit this page |