1 /** 2 * Copyright 2010 The Kuali Foundation Licensed under the 3 * Educational Community License, Version 2.0 (the "License"); you may 4 * not use this file except in compliance with the License. You may 5 * obtain a copy of the License at 6 * 7 * http://www.osedu.org/licenses/ECL-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, 10 * software distributed under the License is distributed on an "AS IS" 11 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 12 * or implied. See the License for the specific language governing 13 * permissions and limitations under the License. 14 */ 15 16 package org.kuali.student.common.messagebuilder.impl; 17 18 import java.util.Map; 19 20 import org.kuali.student.common.messagebuilder.MessageBuilder; 21 import org.kuali.student.common.messagebuilder.MessageTreeBuilder; 22 import org.kuali.student.common.messagebuilder.booleanmessage.MessageContainer; 23 import org.kuali.student.common.messagebuilder.booleanmessage.ast.BooleanFunctionResult; 24 import org.kuali.student.common.messagebuilder.impl.exceptions.MessageBuilderException; 25 26 /** 27 * This <code>MessageBuilder</code> class builds a summary message from 28 * plain strings or templates. Summary message is built from analysing the 29 * outcome of a boolean expression. 30 */ 31 public class MessageBuilderImpl extends AbstractMessageBuilder implements MessageBuilder { 32 /** 33 * Constructor. 34 * 35 * @param language String Boolean operators' language (English and/or) 36 * @param treeNodeMessageBuilder AST tree node Message builder 37 */ 38 public MessageBuilderImpl(final String language, final MessageTreeBuilder treeNodeMessageBuilder) { 39 super(language, treeNodeMessageBuilder); 40 } 41 42 /** 43 * <p>Builds and evaluates a boolean expression and returns the message and result 44 * of the expression.</p> 45 * <p><b>Note:</b> Order of boolean operation: ANDs before ORs and operations 46 * inside parentheses before anything else.</p> 47 * Example 1: 'A AND B OR C AND D' internally evaluates to '(A AND B) OR (C AND D)' 48 * <pre><code>booleanExpression</code> = "A*B+C*D"</pre> 49 * Example 2: '(M1 AND M2) OR M3' 50 * <pre><code>booleanExpression</code> = "(M1*M2)+M3"</pre> 51 * 52 * @param booleanRule Boolean expression 53 * @param messageContainer Contains a list of messages 54 * @return Boolean function result 55 * @throws MessageBuilderException Errors building message 56 */ 57 public BooleanFunctionResult build(final String booleanRule, final MessageContainer messageContainer) { 58 return super.build(booleanRule, messageContainer.getMessageMap()); 59 } 60 61 /** 62 * <p>Builds and evaluates a boolean expression and returns the message and result 63 * of the expression.</p> 64 * <p><b>Note:</b> Order of boolean operation: ANDs before ORs and operations 65 * inside parentheses before anything else.</p> 66 * <p>if <code>messageContainer</code> contains any velocity templates 67 * with keys/tokens then <code>messageContextMap</code> must be set.</p> 68 * Example 1: 'A AND B OR C AND D' internally evaluates to '(A AND B) OR (C AND D)' 69 * <pre><code>booleanExpression</code> = "A*B+C*D"</pre> 70 * Example 2: '(M1 AND M2) OR M3' 71 * <pre><code>booleanExpression</code> = "(M1*M2)+M3"</pre> 72 * 73 * @param booleanRule Boolean expression 74 * @param messageContainer Contains a list of messages 75 * @param messageContextMap Message context template map 76 * @return Boolean function result 77 * @throws MessageBuilderException Errors building message 78 */ 79 public BooleanFunctionResult build( 80 final String booleanRule, 81 final MessageContainer messageContainer, 82 final Map<String, Object> messageContextMap) { 83 return super.build(booleanRule, messageContainer.getMessageMap(), messageContextMap); 84 } 85 86 /** 87 * Builds a message from a list of messages using a boolean expression. 88 * Example: (M1 AND M2) OR M3 -> (M1*M2)+M3 89 * 90 * @param booleanRule Boolean expression 91 * @param messageContainer Contains a list of messages 92 * @return A message 93 * @throws MessageBuilderException Errors building message 94 */ 95 public String buildMessage(final String booleanRule, final MessageContainer messageContainer) { 96 return super.build(booleanRule, messageContainer.getMessageMap()).getMessage(); 97 } 98 }