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;
017
018 /**
019 * Exception thrown when a monetary operation fails due to mismatched currencies.
020 * <p>
021 * For example, this exception would be thrown when trying to add a monetary
022 * value in one currency to a monetary value in a different currency.
023 * <p>
024 * This exception makes no guarantees about immutability or thread-safety.
025 */
026 public class CurrencyMismatchException extends IllegalArgumentException {
027
028 /** Serialization lock. */
029 private static final long serialVersionUID = 1L;
030
031 /** First currency. */
032 private final CurrencyUnit firstCurrency;
033 /** Second currency. */
034 private final CurrencyUnit secondCurrency;
035
036 /**
037 * Constructor.
038 *
039 * @param firstCurrency the first currency, may be null
040 * @param secondCurrency the second currency, not null
041 */
042 public CurrencyMismatchException(CurrencyUnit firstCurrency, CurrencyUnit secondCurrency) {
043 super("Currencies differ: " +
044 (firstCurrency != null ? firstCurrency.getCode() : "null") + '/' +
045 (secondCurrency != null ? secondCurrency.getCode() : "null"));
046 this.firstCurrency = firstCurrency;
047 this.secondCurrency = secondCurrency;
048 }
049
050 //-----------------------------------------------------------------------
051 /**
052 * Gets the first currency at fault.
053 *
054 * @return the currency at fault, may be null
055 */
056 public CurrencyUnit getFirstCurrency() {
057 return firstCurrency;
058 }
059
060 /**
061 * Gets the second currency at fault.
062 *
063 * @return the currency at fault, may be null
064 */
065 public CurrencyUnit getSecondCurrency() {
066 return secondCurrency;
067 }
068
069 }