001 /*
002 * Copyright 2009-2013 Stephen Colebourne
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.joda.money.format;
017
018 import java.io.IOException;
019
020 import org.joda.money.BigMoney;
021
022 /**
023 * Prints part of a monetary value to the output appendable.
024 * <p>
025 * The printer may print any part, or the whole, of the input {@link BigMoney}.
026 * Typically, a complete print is constructed from a number of smaller printers
027 * that have been combined using {@link MoneyFormatterBuilder}.
028 * <p>
029 * This interface must be implemented with care to ensure other classes operate correctly.
030 * All instantiable implementations must be thread-safe, and should generally
031 * be final and immutable.
032 */
033 public interface MoneyPrinter {
034
035 /**
036 * Prints part of a monetary value to the output appendable.
037 * <p>
038 * The implementation determines what to append, which may be some or all
039 * of the data held in the {@code BigMoney}.
040 * <p>
041 * The context is not a thread-safe object and a new instance will be created
042 * for each print. The context must not be stored in an instance variable
043 * or shared with any other threads.
044 *
045 * @param context the context being used, not null
046 * @param appendable the appendable to add to, not null
047 * @param money the money to print, not null
048 * @throws MoneyFormatException if there is a problem while printing
049 * @throws IOException if an IO exception occurs
050 */
051 void print(MoneyPrintContext context, Appendable appendable, BigMoney money) throws IOException;
052
053 }