001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: * $Header:$
018: */
019: package org.apache.beehive.netui.pageflow;
020:
021: import org.apache.struts.action.ActionMessage;
022: import org.apache.beehive.netui.pageflow.internal.InternalConstants;
023:
024: /**
025: * Extension of the base Struts ActionMessage; instead of retrieving messages and their arguments from message
026: * resources, it calculates them by evaluating JSP 2.0-style expressions (or, in the degenerate case, from hardcoded
027: * strings).
028: */
029: public class ExpressionMessage extends ActionMessage {
030: /**
031: * Constructor, using an array for the message arguments.
032: *
033: * @param expression the JSP 2.0-style expression (e.g., <code>${pageFlow.myProperty}</code>) or literal string
034: * that will be used as the message.
035: * @param messageArgExpressions an array of JSP 2.0-style expressions <i>or</i> raw Objects to be used as arguments
036: * to the message. Expressions are evaluated; all other Objects are passed as-is.
037: */
038: public ExpressionMessage(String expression,
039: Object[] messageArgExpressions) {
040: super (InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX
041: + expression, prefixArgs(messageArgExpressions));
042: }
043:
044: /**
045: * Constructor, for a message without message arguments.
046: *
047: * @param expression the JSP 2.0-style expression (e.g., <code>${pageFlow.myProperty}</code>) or literal string
048: * that will be used as the message.
049: */
050: public ExpressionMessage(String expression) {
051: this (expression, null);
052: }
053:
054: /**
055: * Constructor, for a message with a single argument.
056: *
057: * @param expression the JSP 2.0-style expression (e.g., <code>${pageFlow.myProperty}</code>) or literal string
058: * that will be used as the message.
059: * @param messageArgExpression a JSP 2.0-style expression <i>or</i> raw Object to be used the argument
060: * to the message. Expressions are evaluated; all other Objects are passed as-is.
061: */
062: public ExpressionMessage(String expression,
063: Object messageArgExpression) {
064: this (expression, new Object[] { messageArgExpression });
065: }
066:
067: /**
068: * Constructor, for a message with two arguments.
069: *
070: * @param expression the JSP 2.0-style expression (e.g., <code>${pageFlow.myProperty}</code>) or literal string
071: * that will be used as the message.
072: * @param messageArgExpression1 a JSP 2.0-style expression <i>or</i> raw Object to be used the first argument
073: * to the message. Expressions are evaluated; all other Objects are passed as-is.
074: * @param messageArgExpression2 a JSP 2.0-style expression <i>or</i> raw Object to be used the second argument
075: * to the message. Expressions are evaluated; all other Objects are passed as-is.
076: */
077: public ExpressionMessage(String expression,
078: Object messageArgExpression1, Object messageArgExpression2) {
079: this (expression, new Object[] { messageArgExpression1,
080: messageArgExpression2 });
081: }
082:
083: /**
084: * Constructor, for a message with two arguments.
085: *
086: * @param expression the JSP 2.0-style expression (e.g., <code>${pageFlow.myProperty}</code>) or literal string
087: * that will be used as the message.
088: * @param messageArgExpression1 a JSP 2.0-style expression <i>or</i> raw Object to be used the first argument
089: * to the message. Expressions are evaluated; all other Objects are passed as-is.
090: * @param messageArgExpression2 a JSP 2.0-style expression <i>or</i> raw Object to be used the second argument
091: * to the message. Expressions are evaluated; all other Objects are passed as-is.
092: * @param messageArgExpression3 a JSP 2.0-style expression <i>or</i> raw Object to be used the third argument
093: * to the message. Expressions are evaluated; all other Objects are passed as-is.
094: */
095: public ExpressionMessage(String expression,
096: Object messageArgExpression1, Object messageArgExpression2,
097: Object messageArgExpression3) {
098: this (expression, new Object[] { messageArgExpression1,
099: messageArgExpression2, messageArgExpression3 });
100: }
101:
102: private static Object[] prefixArgs(Object[] messageArgExpressions) {
103: if (messageArgExpressions == null)
104: return null;
105:
106: Object[] ret = new Object[messageArgExpressions.length];
107:
108: for (int i = 0; i < messageArgExpressions.length; i++) {
109: ret[i] = InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX
110: + messageArgExpressions[i];
111: }
112:
113: return ret;
114: }
115: }
|