001    package data;
002    
003    /**
004     * Exception thrown when an error occurs on transferring money from one MoneyBag to another.
005     *
006     * @author Andreas Bartho
007     * @version 3.1
008     * @since v3.1
009     */
010    public class NotEnoughMoneyException extends RuntimeException {
011    
012        /**
013         * Indicates that this Exception was thrown because the money in the MoneyBag is less than
014         * the money to be removed.
015         */
016        public static final int NOT_ENOUGH_MONEY = 0;
017    
018        /**
019         * Indicates that this Exception was thrown because it is not possible to sum up the
020         * available money to the amount to be removed.<br>
021         * <br>
022         * Example:<br>
023         * The MoneyBag contains:
024         * <ul>
025         *   <li>5 coins of value 10 cents</li>
026         *   <li>5 coins of value 2 cents</li>
027         * </ul>
028         * Trying to return 11 cents would cause that exception.
029         */
030        public static final int NO_FITTING_UNITS = 1;
031    
032        private int iCause;
033    
034        /**
035         * Creates a new NotEnoughMoneyException.
036         */
037        public NotEnoughMoneyException(int cause) {
038            super();
039            iCause = cause;
040        }
041    
042        /**
043         * Creates a new NotEnoughMoneyException with a detail message.
044         *
045         * @param sDetail the detail message.
046         */
047        public NotEnoughMoneyException(String sDetail, int cause) {
048            super(sDetail);
049            iCause = cause;
050        }
051    
052        /**
053         * Returns the cause for this exception. If there was not enough money, {@link #NOT_ENOUGH_MONEY} is
054         * returned. If there was no way to sum up the money with the coins/bank notes available,
055         * {@link #NO_FITTING_UNITS} is returned.
056         *
057         * @return the cause for this exception
058         */
059        public int cause() {
060            return iCause;
061        }
062    }