1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portal.kernel.increment;
16  
17  /**
18   * <a href="NumberIncrement.java.html"><b><i>View Source</i></b></a>
19   *
20   * @author Zsolt Berentey
21   */
22  public class NumberIncrement implements Increment<Number> {
23  
24      public NumberIncrement(Number value) {
25          _value = value;
26      }
27  
28      public void decrease(Number delta) {
29          _value = subtract(delta);
30      }
31  
32      public Increment<Number> decreaseForNew(Number delta) {
33          return new NumberIncrement(subtract(delta));
34      }
35  
36      public Number getValue() {
37          return _value;
38      }
39  
40      public void increase(Number delta) {
41          _value = add(delta);
42      }
43  
44      public Increment<Number> increaseForNew(Number delta) {
45          return new NumberIncrement(add(delta));
46      }
47  
48      public void setValue(Number value) {
49          _value = value;
50      }
51  
52      protected Number add(Number delta) {
53          if (delta instanceof Double) {
54              return addAsDouble(delta);
55          }
56          else if (delta instanceof Integer) {
57              return addAsInteger(delta);
58          }
59          else if (delta instanceof Long) {
60              return addAsLong(delta);
61          }
62  
63          return _value;
64      }
65  
66      protected Number addAsDouble(Number delta) {
67          if (delta == null) {
68              return _value;
69          }
70  
71          return _value.doubleValue() + delta.doubleValue();
72      }
73  
74      protected Number addAsInteger(Number delta) {
75          if (delta == null) {
76              return _value;
77          }
78  
79          return _value.intValue() + delta.intValue();
80      }
81  
82      protected Number addAsLong(Number delta) {
83          if (delta == null) {
84              return _value;
85          }
86  
87          return _value.longValue() + delta.longValue();
88      }
89  
90      protected Number subtract(Number delta) {
91          if (delta instanceof Double) {
92              return subtractAsDouble(delta);
93          }
94          else if (delta instanceof Integer) {
95              return subtractAsInteger(delta);
96          }
97          else if (delta instanceof Long) {
98              return subtractAsLong(delta);
99          }
100 
101         return _value;
102     }
103 
104     protected Number subtractAsDouble(Number delta) {
105         if (delta == null) {
106             return _value;
107         }
108 
109         return _value.doubleValue() - delta.doubleValue();
110     }
111 
112     protected Number subtractAsInteger(Number delta) {
113         if (delta == null) {
114             return _value;
115         }
116 
117         return _value.intValue() - delta.intValue();
118     }
119 
120     protected Number subtractAsLong(Number delta) {
121         if (delta == null) {
122             return _value;
123         }
124 
125         return _value.longValue() - delta.longValue();
126     }
127 
128     private Number _value = 0;
129 
130 }