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;
17
18 import java.util.Map;
19
20 import org.kuali.student.common.messagebuilder.booleanmessage.MessageContainer;
21 import org.kuali.student.common.messagebuilder.booleanmessage.ast.BooleanFunctionResult;
22 import org.kuali.student.common.messagebuilder.impl.exceptions.MessageBuilderException;
23
24 public interface MessageBuilder {
25 /**
26 * <p>Builds and evaluates a boolean expression and returns the message and result
27 * of the expression.</p>
28 * <p><b>Note:</b> Order of boolean operation: ANDs before ORs and operations
29 * inside parentheses before anything else.</p>
30 * Example 1: 'A AND B OR C AND D' internally evaluates to '(A AND B) OR (C AND D)'
31 * <pre><code>booleanExpression</code> = "A*B+C*D"</pre>
32 * Example 2: '(M1 AND M2) OR M3'
33 * <pre><code>booleanExpression</code> = "(M1*M2)+M3"</pre>
34 *
35 * @param booleanRule Boolean expression
36 * @param messageContainer Contains a list of messages
37 * @return Boolean function result
38 * @throws MessageBuilderException Errors building message
39 */
40 public BooleanFunctionResult build(String booleanRule, MessageContainer messageContainer);
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 * <p>if <code>messageContainer</code> contains any velocity templates
48 * with keys/tokens then <code>messageContextMap</code> must be set.</p>
49 * Example 1: 'A AND B OR C AND D' internally evaluates to '(A AND B) OR (C AND D)'
50 * <pre><code>booleanExpression</code> = "A*B+C*D"</pre>
51 * Example 2: '(M1 AND M2) OR M3'
52 * <pre><code>booleanExpression</code> = "(M1*M2)+M3"</pre>
53 *
54 * @param booleanRule Boolean expression
55 * @param messageContainer Contains a list of messages
56 * @param messageContextMap Message context template map
57 * @return Boolean function result
58 * @throws MessageBuilderException Errors building message
59 */
60 public BooleanFunctionResult build(String booleanRule, MessageContainer messageContainer, Map<String, Object> messageContextMap);
61
62 /**
63 * Builds a message from a list of message using a boolean expression.
64 * Example: (M1 AND M2) OR M3 -> (M1*M2)+M3
65 *
66 * @param booleanRule Boolean expression
67 * @param messageContainer Contains a list of messages
68 * @return A message
69 * @throws MessageBuilderException Errors building message
70 */
71 public String buildMessage(String booleanRule, MessageContainer messageContainer);
72 }