diff --git a/projects/samskivert/src/java/com/samskivert/velocity/MessageResolver.java b/projects/samskivert/src/java/com/samskivert/velocity/MessageResolver.java deleted file mode 100644 index c3af829e..00000000 --- a/projects/samskivert/src/java/com/samskivert/velocity/MessageResolver.java +++ /dev/null @@ -1,140 +0,0 @@ -// -// $Id: MessageResolver.java,v 1.1 2001/10/31 09:44:22 mdb Exp $ -// -// samskivert library - useful routines for java programs -// Copyright (C) 2001 Michael Bayne -// -// This library is free software; you can redistribute it and/or modify it -// under the terms of the GNU Lesser General Public License as published -// by the Free Software Foundation; either version 2.1 of the License, or -// (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -package com.samskivert.velocity; - -import org.apache.velocity.context.InternalContextAdapter; -import org.apache.velocity.exception.MethodInvocationException; - -import org.apache.velocity.runtime.parser.node.ASTIdentifier; -import org.apache.velocity.runtime.parser.node.ASTMethod; -import org.apache.velocity.runtime.parser.node.Node; -import org.apache.velocity.runtime.parser.node.ReferenceResolver; - -import com.samskivert.Log; -import com.samskivert.servlet.MessageManager; - -/** - * Maps a set of appliation messages (translation strings) into the - * context so that they are available to templates that wish to display - * localized text. - * - *
If a message resolver is mapped into the context as
- * i18n, then it might be accessed as follows:
- *
- *
- * $i18n.main.intro($user.username) - *- * - * where
main.intro might be defined in the message resource
- * file as:
- *
- *
- * main.intro=Hello there {0}, welcome to our site!
- *
- *
- * @see MessageManager
- */
-public class MessageResolver implements ReferenceResolver
-{
- /**
- * Constructs a new message resolver which will use the supplied
- * message manager to obtain translated strings.
- */
- public MessageResolver (MessageManager msgmgr)
- {
- _msgmgr = msgmgr;
- }
-
- /**
- * Concatenates the remaining reference nodes into a single message
- * name and looks up the matching translation string. If the last node
- * is an {@link ASTMethod}, then the arguments from that are
- * substituted into the translated message.
- */
- public Object resolveReference (
- InternalContextAdapter ctx, Node[] nodes, int offset)
- throws MethodInvocationException
- {
- StringBuffer path = new StringBuffer();
- boolean bogus = false;
- int lastidx = nodes.length-1;
- Object result = this;
-
- // reconstruct the path to the property
- for (int i = offset; i < nodes.length; i++) {
- // separate components with dots
- if (path.length() > 0) {
- path.append(".");
- }
-
- // if the node is an ASTMethod, it dang well better be the
- // last thing in the chain or we've got a problem
- if (nodes[i] instanceof ASTMethod) {
- ASTMethod mnode = (ASTMethod)nodes[i];
- // make a note to freak out if this is anything but
- // the last component of the path. we'd freak out now
- // but we want to reconstruct the path so that we can
- // report it in the exception that's thrown
- if (i != lastidx) {
- bogus = true;
- }
- path.append(mnode.getMethodName());
-
- } else if (nodes[i] instanceof ASTIdentifier) {
- ASTIdentifier inode = (ASTIdentifier)nodes[i];
- path.append(inode.getIdentifier());
-
- } else {
- // what is it man?
- bogus = true;
- path.append("?").append(nodes[i]);
- }
- }
-
- // do any pending freaking out
- if (bogus) {
- throw new MethodInvocationException(
- "Invalid message resource path.", null, path.toString());
- }
-
- // we need to get the invocation context from our internal context
- // adapter
- InvocationContext ictx = (InvocationContext)
- ctx.getInternalUserContext();
-
- // if the last component is a property method, we want to use
- // it's arguments when looking up the message
- if (nodes[lastidx] instanceof ASTMethod) {
- ASTMethod mnode = (ASTMethod)nodes[lastidx];
- // we may cache message formatters later, but for now just
- // use the static convenience function
- Object[] args = mnode.getParams(ctx);
- return _msgmgr.getMessage(ictx.getRequest(),
- path.toString(), args);
-
- } else {
- // otherwise just look up the path
- return _msgmgr.getMessage(ictx.getRequest(), path.toString());
- }
- }
-
- protected MessageManager _msgmgr;
-}