    001// Copyright 2006-2013 The Apache Software Foundation
    002//
    003// Licensed under the Apache License, Version 2.0 (the "License");
    004// you may not use this file except in compliance with the License.
    005// You may obtain a copy of the License at
    006//
    007//     http://www.apache.org/licenses/LICENSE-2.0
    008//
    009// Unless required by applicable law or agreed to in writing, software
    010// distributed under the License is distributed on an "AS IS" BASIS,
    011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    012// See the License for the specific language governing permissions and
    013// limitations under the License.
    014
    015package org.apache.tapestry5.commons.internal.util;
    016
    017import java.util.Locale;
    018
    019import org.apache.tapestry5.commons.MessageFormatter;
    020import org.apache.tapestry5.commons.util.ExceptionUtils;
    021
    022
    023public class MessageFormatterImpl implements MessageFormatter
    024{
    025    private final String format;
    026
    027    private final Locale locale;
    028
    029    public MessageFormatterImpl(String format, Locale locale)
    030    {
    031        this.format = format;
    032        this.locale = locale;
    033    }
    034
    035    @Override
    036    public String format(Object... args)
    037    {
    038        for (int i = 0; i < args.length; i++)
    039        {
    040            Object arg = args[i];
    041
    042            if (Throwable.class.isInstance(arg))
    043            {
    044                args[i] = ExceptionUtils.toMessage((Throwable) arg);
    045            }
    046        }
    047
    048        // Might be tempting to create a Formatter object and just keep reusing it ... but
    049        // Formatters are not threadsafe.
    050
    051        return String.format(locale, format, args);
    052    }
    053
    054    /**
    055     * Returns the underlying format string for this formatter.
    056     *
    057     * @since 5.4
    058     */
    059    @Override
    060    public String toString()
    061    {
    062        return format;
    063    }
    064
    065}