001
014
015 package com.liferay.portal.kernel.increment;
016
017
020 public class NumberIncrement implements Increment<Number> {
021
022 public NumberIncrement(Number value) {
023 _value = value;
024 }
025
026 @Override
027 public void decrease(Number delta) {
028 _value = subtract(delta);
029 }
030
031 @Override
032 public Increment<Number> decreaseForNew(Number delta) {
033 return new NumberIncrement(subtract(delta));
034 }
035
036 @Override
037 public Number getValue() {
038 return _value;
039 }
040
041 @Override
042 public void increase(Number delta) {
043 _value = add(delta);
044 }
045
046 @Override
047 public Increment<Number> increaseForNew(Number delta) {
048 return new NumberIncrement(add(delta));
049 }
050
051 @Override
052 public void setValue(Number value) {
053 _value = value;
054 }
055
056 protected Number add(Number delta) {
057 if (delta instanceof Double) {
058 return addAsDouble(delta);
059 }
060 else if (delta instanceof Integer) {
061 return addAsInteger(delta);
062 }
063 else if (delta instanceof Long) {
064 return addAsLong(delta);
065 }
066
067 return _value;
068 }
069
070 protected Number addAsDouble(Number delta) {
071 if (delta == null) {
072 return _value;
073 }
074
075 return _value.doubleValue() + delta.doubleValue();
076 }
077
078 protected Number addAsInteger(Number delta) {
079 if (delta == null) {
080 return _value;
081 }
082
083 return _value.intValue() + delta.intValue();
084 }
085
086 protected Number addAsLong(Number delta) {
087 if (delta == null) {
088 return _value;
089 }
090
091 return _value.longValue() + delta.longValue();
092 }
093
094 protected Number subtract(Number delta) {
095 if (delta instanceof Double) {
096 return subtractAsDouble(delta);
097 }
098 else if (delta instanceof Integer) {
099 return subtractAsInteger(delta);
100 }
101 else if (delta instanceof Long) {
102 return subtractAsLong(delta);
103 }
104
105 return _value;
106 }
107
108 protected Number subtractAsDouble(Number delta) {
109 if (delta == null) {
110 return _value;
111 }
112
113 return _value.doubleValue() - delta.doubleValue();
114 }
115
116 protected Number subtractAsInteger(Number delta) {
117 if (delta == null) {
118 return _value;
119 }
120
121 return _value.intValue() - delta.intValue();
122 }
123
124 protected Number subtractAsLong(Number delta) {
125 if (delta == null) {
126 return _value;
127 }
128
129 return _value.longValue() - delta.longValue();
130 }
131
132 private Number _value = 0;
133
134 }