001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.commons.math3.exception;
018    
019    import org.apache.commons.math3.exception.util.Localizable;
020    import org.apache.commons.math3.exception.util.LocalizedFormats;
021    
022    /**
023     * Exception to be thrown when a number is too small.
024     *
025     * @since 2.2
026     * @version $Id: NumberIsTooSmallException.java 1364378 2012-07-22 17:42:38Z tn $
027     */
028    public class NumberIsTooSmallException extends MathIllegalNumberException {
029        /** Serializable version Id. */
030        private static final long serialVersionUID = -6100997100383932834L;
031        /**
032         * Higher bound.
033         */
034        private final Number min;
035        /**
036         * Whether the maximum is included in the allowed range.
037         */
038        private final boolean boundIsAllowed;
039    
040        /**
041         * Construct the exception.
042         *
043         * @param wrong Value that is smaller than the minimum.
044         * @param min Minimum.
045         * @param boundIsAllowed Whether {@code min} is included in the allowed range.
046         */
047        public NumberIsTooSmallException(Number wrong,
048                                         Number min,
049                                         boolean boundIsAllowed) {
050            this(boundIsAllowed ?
051                 LocalizedFormats.NUMBER_TOO_SMALL :
052                 LocalizedFormats.NUMBER_TOO_SMALL_BOUND_EXCLUDED,
053                 wrong, min, boundIsAllowed);
054        }
055    
056        /**
057         * Construct the exception with a specific context.
058         *
059         * @param specific Specific context pattern.
060         * @param wrong Value that is smaller than the minimum.
061         * @param min Minimum.
062         * @param boundIsAllowed Whether {@code min} is included in the allowed range.
063         */
064        public NumberIsTooSmallException(Localizable specific,
065                                         Number wrong,
066                                         Number min,
067                                         boolean boundIsAllowed) {
068            super(specific, wrong, min);
069    
070            this.min = min;
071            this.boundIsAllowed = boundIsAllowed;
072        }
073    
074        /**
075         * @return {@code true} if the minimum is included in the allowed range.
076         */
077        public boolean getBoundIsAllowed() {
078            return boundIsAllowed;
079        }
080    
081        /**
082         * @return the minimum.
083         */
084        public Number getMin() {
085            return min;
086        }
087    }