1   /**
2    * Investor, the open-source investment library
3    *
4    * (C) Copyright 2008, by individual contributors as indicated by the @author tag.
5    *
6    * This library is free software; you can redistribute it and/or modify it
7    * under the terms of the GNU Lesser General Public License as
8    * published by the Free Software Foundation; either version 2.1 of
9    * the License, or (at your option) any later version.
10   *
11   * This software is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14   * Lesser General Public License for more details.
15   *
16   * You should have received a copy of the GNU Lesser General Public
17   * License along with this software; if not, write to the Free
18   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
20   */
21  package com.nickokiss.investor.util;
22  
23  import java.math.BigDecimal;
24  
25  import com.nickokiss.investor.calc.MathCalc;
26  
27  /**
28   * 
29   * @author Tomasz Koscinski <tomasz.koscinski@nickokiss.com>
30   */
31  public class Range {
32    private MathCalc mathCalc = new MathCalc();
33    private BigDecimal start;
34    private BigDecimal end;
35  
36    public Range(BigDecimal start, BigDecimal end) {
37      this.end = end;
38      this.start = start;
39    }
40    
41    public Range(Range range) {
42      this.start = range.getStart();
43      this.end = range.getEnd();
44    }
45  
46    public BigDecimal getStart() {
47      return start;
48    }
49    public void setStart(BigDecimal start) {
50      this.start = start;
51    }
52    public BigDecimal getEnd() {
53      return end;
54    }
55    public void setEnd(BigDecimal end) {
56      this.end = end;
57    }
58  
59    public BigDecimal getSize() {
60      return end.subtract(start);
61    }
62    
63    public BigDecimal getMiddle() {
64      return start.add(mathCalc.div(getSize(), mathCalc.TWO));
65    }
66  
67    public Range getUpperHalf() {
68      return new Range(getMiddle(), end);
69    }
70  
71    public Range getLowerHalf() {
72      return new Range(start, getMiddle());
73    }
74  
75    public boolean contains(BigDecimal value) {
76      if ((value.compareTo(end) <= 0) && (value.compareTo(start) >= 0)) {
77        return true;
78      } else {
79        return false;
80      }
81    }
82  
83    public BigDecimal getDistance(BigDecimal value) {
84      if (value.compareTo(end) > 0) {
85        return value.subtract(end);
86      }
87      if (value.compareTo(start) < 0) {
88        return value.subtract(start);
89      }
90      return mathCalc.ZERO;
91    }
92    
93    
94  
95  }