View Javadoc

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  }