001: /*******************************************************************************
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: *******************************************************************************/package org.ofbiz.minilang.method.conditional;
019:
020: import java.util.Iterator;
021: import java.util.List;
022:
023: import javolution.util.FastList;
024:
025: import org.ofbiz.base.util.UtilValidate;
026: import org.ofbiz.base.util.UtilXml;
027: import org.ofbiz.base.util.string.FlexibleStringExpander;
028: import org.ofbiz.minilang.SimpleMethod;
029: import org.ofbiz.minilang.method.ContextAccessor;
030: import org.ofbiz.minilang.method.MethodContext;
031: import org.ofbiz.minilang.method.MethodOperation;
032: import org.w3c.dom.Element;
033:
034: /**
035: * Operation used to check each sub-condition independently and for each one that fails (does not evaluate to true), adds an error to the error message list.
036: */
037: public class Assert extends MethodOperation {
038:
039: public static final String module = Assert.class.getName();
040:
041: protected ContextAccessor errorListAcsr;
042: protected FlexibleStringExpander titleExdr;
043:
044: /** List of Conditional objects */
045: protected List conditionalList = FastList.newInstance();
046:
047: public Assert(Element element, SimpleMethod simpleMethod) {
048: super (element, simpleMethod);
049:
050: errorListAcsr = new ContextAccessor(element
051: .getAttribute("error-list-name"), "error_list");
052: titleExdr = new FlexibleStringExpander(element
053: .getAttribute("title"));
054:
055: List conditionalElementList = UtilXml.childElementList(element);
056: Iterator conditionalElementIter = conditionalElementList
057: .iterator();
058: while (conditionalElementIter.hasNext()) {
059: Element conditionalElement = (Element) conditionalElementIter
060: .next();
061: this .conditionalList.add(ConditionalFactory
062: .makeConditional(conditionalElement, simpleMethod));
063: }
064: }
065:
066: public boolean exec(MethodContext methodContext) {
067: List messages = (List) errorListAcsr.get(methodContext);
068: if (messages == null) {
069: messages = FastList.newInstance();
070: errorListAcsr.put(methodContext, messages);
071: }
072:
073: String title = this .titleExdr.expandString(methodContext
074: .getEnvMap());
075:
076: // check each conditional and if fails generate a message to add to the error list
077: Iterator conditionalIter = conditionalList.iterator();
078: while (conditionalIter.hasNext()) {
079: Conditional condition = (Conditional) conditionalIter
080: .next();
081: boolean conditionTrue = condition
082: .checkCondition(methodContext);
083:
084: if (!conditionTrue) {
085: // pretty print condition
086: StringBuffer messageBuffer = new StringBuffer();
087: messageBuffer.append("Assertion ");
088: if (UtilValidate.isNotEmpty(title)) {
089: messageBuffer.append("[");
090: messageBuffer.append(title);
091: messageBuffer.append("] ");
092: }
093: messageBuffer.append("failed: ");
094: condition.prettyPrint(messageBuffer, methodContext);
095: messages.add(messageBuffer.toString());
096: }
097: }
098:
099: return true;
100: }
101:
102: public String rawString() {
103: return expandedString(null);
104: }
105:
106: public String expandedString(MethodContext methodContext) {
107: String title = this .titleExdr.expandString(methodContext
108: .getEnvMap());
109:
110: StringBuffer messageBuf = new StringBuffer();
111: messageBuf.append("<assert");
112: if (UtilValidate.isNotEmpty(title)) {
113: messageBuf.append(" title=\"");
114: messageBuf.append(title);
115: messageBuf.append("\"");
116: }
117: messageBuf.append(">");
118: Iterator conditionalIter = conditionalList.iterator();
119: while (conditionalIter.hasNext()) {
120: Conditional condition = (Conditional) conditionalIter
121: .next();
122: condition.prettyPrint(messageBuf, methodContext);
123: }
124: messageBuf.append("</assert>");
125: return messageBuf.toString();
126: }
127: }
|