Hi Adrian,

<add-error> + <check-errors/> doesn't seem to be working for minilang events 
anymore.  For example:
https://demo-trunk.ofbiz.apache.org:8443/ecommerce/control/AnonContactus

Submitting that form while completely empty returns successfully even though 
the event has validation for the required fields.  I think add-error is adding 
to a differently list than what check-errors is looking at.

Thanks
Scott

On 29/04/2012, at 7:25 AM, [email protected] wrote:

> Author: adrianc
> Date: Sat Apr 28 19:25:48 2012
> New Revision: 1331811
> 
> URL: http://svn.apache.org/viewvc?rev=1331811&view=rev
> Log:
> Reverting changes to the Mini-language <add-error> element. Too much code 
> depends on the "error_list" name.
> 
> Modified:
>    
> ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/callops/AddError.java
> 
> 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=1331811&r1=1331810&r2=1331811&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 19:25:48 2012
> @@ -22,118 +22,78 @@ import java.util.List;
> 
> import javolution.util.FastList;
> 
> -import org.ofbiz.base.util.Debug;
> 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.MiniLangUtil;
> -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 an error message to the error message list.
> + * Adds the fail-message or fail-property value to the error-list.
>  */
> -public final class AddError extends MethodOperation {
> +public class AddError extends MethodOperation {
> 
> -    // This method is needed only during the v1 to v2 transition
> -    private static boolean autoCorrect(Element element) {
> -        String errorListAttr = element.getAttribute("error-list-name");
> -        if (errorListAttr.length() > 0) {
> -            element.removeAttribute("error-list-name");
> -            return true;
> -        }
> -        return false;
> -    }
> -    
> -    private final FlexibleStringExpander messageFse;
> -    private final String propertykey;
> -    private final String propertyResource;
> +    ContextAccessor<List<Object>> errorListAcsr;
> +    boolean isProperty = false;
> +    String message = null;
> +    String propertyResource = null;
> 
>     public AddError(Element element, SimpleMethod simpleMethod) throws 
> MiniLangException {
>         super(element, simpleMethod);
> -        if (MiniLangValidate.validationOn()) {
> -            MiniLangValidate.childElements(simpleMethod, element, 
> "fail-message", "fail-property");
> -            MiniLangValidate.requireAnyChildElement(simpleMethod, element, 
> "fail-message", "fail-property");
> +        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;
>         }
> -        boolean elementModified = autoCorrect(element);
> -        if (elementModified && MiniLangUtil.autoCorrectOn()) {
> -            MiniLangUtil.flagDocumentAsCorrected(element);
> -        }
> -        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 {
> -            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");
> +    }
> +
> +    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 {
> -                this.messageFse = FlexibleStringExpander.getInstance(null);
> -                this.propertykey = null;
> -                this.propertyResource = null;
> +                messages.add(methodContext.expandString(propMsg));
>             }
> +        } else {
> +            messages.add("Simple Method error occurred, but no message was 
> found, sorry.");
>         }
>     }
> 
>     @Override
>     public boolean exec(MethodContext methodContext) throws MiniLangException 
> {
> -        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 = null;
> -            if (methodContext.getMethodType() == MethodContext.EVENT) {
> -                messages = 
> methodContext.getEnv(this.simpleMethod.getEventErrorMessageListName());
> -                if (messages == null) {
> -                    messages = FastList.newInstance();
> -                    
> methodContext.putEnv(this.simpleMethod.getEventErrorMessageListName(), 
> messages);
> -                }
> -            } else {
> -                messages = 
> methodContext.getEnv(this.simpleMethod.getServiceErrorMessageListName());
> -                if (messages == null) {
> -                    messages = FastList.newInstance();
> -                    
> methodContext.putEnv(this.simpleMethod.getServiceErrorMessageListName(), 
> messages);
> -                }
> -            }
> -            messages.add(message);
> -            // TODO: Remove this line after tests are fixed
> -            Debug.logInfo("<add-error> message = " + message + ", location = 
> " + this.simpleMethod.getLocationAndName() + ", line = " + 
> this.getLineNumber(), this.getClass().getName());
> +        List<Object> messages = errorListAcsr.get(methodContext);
> +        if (messages == null) {
> +            messages = FastList.newInstance();
> +            errorListAcsr.put(methodContext, messages);
>         }
> +        this.addMessage(messages, methodContext.getLoader(), methodContext);
>         return true;
>     }
> 
>     @Override
>     public String expandedString(MethodContext methodContext) {
> -        return FlexibleStringExpander.expandString(toString(), 
> methodContext.getEnvMap());
> +        // TODO: something more than a stub/dummy
> +        return this.rawString();
>     }
> 
>     @Override
>     public String rawString() {
> -        return toString();
> -    }
> -
> -    @Override
> -    public String toString() {
> +        // TODO: something more than the empty tag
>         return "<add-error/>";
>     }
> 
> 
> 

Reply via email to