View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.math4.legacy.exception;
18  
19  import org.apache.commons.math4.legacy.exception.util.LocalizedFormats;
20  
21  /**
22   * Exception to be thrown when the a sequence of values is not monotonically
23   * increasing or decreasing.
24   *
25   * @since 2.2 (name changed to "NonMonotonicSequenceException" in 3.0)
26   */
27  public class NonMonotonicSequenceException extends MathIllegalNumberException {
28      /** Serializable version Id. */
29      private static final long serialVersionUID = 20210531L;
30      /**
31       * Whether the sequence should be increasing.
32       */
33      private final boolean increasing;
34      /**
35       * Whether the sequence must be strictly increasing or decreasing.
36       */
37      private final boolean strict;
38      /**
39       * Index of the wrong value.
40       */
41      private final int index;
42      /**
43       * Previous value.
44       */
45      private final Number previous;
46  
47      /**
48       * Construct the exception.
49       * This constructor uses default values assuming that the sequence should
50       * have been strictly increasing.
51       *
52       * @param wrong Value that did not match the requirements.
53       * @param previous Previous value in the sequence.
54       * @param index Index of the value that did not match the requirements.
55       */
56      public NonMonotonicSequenceException(Number wrong,
57                                           Number previous,
58                                           int index) {
59          this(wrong, previous, index, true, true);
60      }
61  
62      /**
63       * Construct the exception.
64       *
65       * @param wrong Value that did not match the requirements.
66       * @param previous Previous value in the sequence.
67       * @param index Index of the value that did not match the requirements.
68       * @param increasing {@code true} for a sequence required to be
69       * increasing, {@code false} for a decreasing sequence.
70       * @param strict Whether the sequence must be strictly increasing or
71       * decreasing.
72       */
73      public NonMonotonicSequenceException(Number wrong,
74                                           Number previous,
75                                           int index,
76                                           boolean increasing,
77                                           boolean strict) {
78          super(increasing ?
79                (strict ?
80                 LocalizedFormats.NOT_STRICTLY_INCREASING_SEQUENCE :
81                 LocalizedFormats.NOT_INCREASING_SEQUENCE) :
82                (strict ?
83                 LocalizedFormats.NOT_STRICTLY_DECREASING_SEQUENCE :
84                 LocalizedFormats.NOT_DECREASING_SEQUENCE),
85                wrong, previous, Integer.valueOf(index), Integer.valueOf(index - 1));
86  
87          this.increasing = increasing;
88          this.strict = strict;
89          this.index = index;
90          this.previous = previous;
91      }
92  
93      /**
94       * @return {@code true} if the sequence should be increasing.
95       **/
96      public boolean getIncreasing() {
97          return increasing;
98      }
99      /**
100      * @return {@code true} is the sequence should be strictly monotonic.
101      **/
102     public boolean getStrict() {
103         return strict;
104     }
105     /**
106      * Get the index of the wrong value.
107      *
108      * @return the current index.
109      */
110     public int getIndex() {
111         return index;
112     }
113     /**
114      * @return the previous value.
115      */
116     public Number getPrevious() {
117         return previous;
118     }
119 }