1 package org.djunits.unit;
2
3 import org.djunits.unit.unitsystem.UnitSystem;
4
5
6
7
8
9
10
11
12
13
14
15 public class MoneyPerDurationUnit extends LinearUnit<MoneyPerDurationUnit>
16 {
17
18 private static final long serialVersionUID = 20150905L;
19
20
21 private final MoneyUnit moneyUnit;
22
23
24 private final DurationUnit durationUnit;
25
26
27 public static final MoneyPerDurationUnit EUR_PER_HOUR;
28
29
30 public static final MoneyPerDurationUnit EUR_PER_DAY;
31
32
33 public static final MoneyPerDurationUnit USD_PER_HOUR;
34
35
36 public static final MoneyPerDurationUnit USD_PER_DAY;
37
38
39 private static MoneyPerDurationUnit standardMoneyPerDurationUnit;
40
41 static
42 {
43 EUR_PER_HOUR = new MoneyPerDurationUnit(MoneyUnit.EUR, DurationUnit.HOUR, "EUR per hour", "\u20AC/h", false);
44 EUR_PER_DAY = new MoneyPerDurationUnit(MoneyUnit.EUR, DurationUnit.DAY, "EUR per day", "\u20AC/day", false);
45 USD_PER_HOUR = new MoneyPerDurationUnit(MoneyUnit.USD, DurationUnit.HOUR, "USD per hour", "US$/h", false);
46 USD_PER_DAY = new MoneyPerDurationUnit(MoneyUnit.USD, DurationUnit.DAY, "USD per day", "US$/day", false);
47 standardMoneyPerDurationUnit = EUR_PER_HOUR;
48 }
49
50
51
52
53
54
55
56
57
58
59
60
61 private MoneyPerDurationUnit(final MoneyUnit moneyUnit, final DurationUnit durationUnit, final String nameOrNameKey,
62 final String abbreviationOrAbbreviationKey, final boolean standardUnit)
63 {
64 super(nameOrNameKey, abbreviationOrAbbreviationKey, UnitSystem.OTHER, standardMoneyPerDurationUnit,
65 moneyUnit.getScaleFactor() / durationUnit.getScaleFactor(), standardUnit);
66 this.moneyUnit = moneyUnit;
67 this.durationUnit = durationUnit;
68 }
69
70
71
72
73
74
75
76
77 public MoneyPerDurationUnit(final MoneyUnit moneyUnit, final DurationUnit durationUnit, final String name,
78 final String abbreviation)
79 {
80 this(moneyUnit, durationUnit, name, abbreviation, false);
81 }
82
83
84
85
86
87
88
89
90
91
92
93
94
95 private MoneyPerDurationUnit(final String nameOrNameKey, final String abbreviationOrAbbreviationKey,
96 final MoneyPerDurationUnit referenceUnit, final double scaleFactorToReferenceUnit, final boolean standardUnit)
97 {
98 super(nameOrNameKey, abbreviationOrAbbreviationKey, UnitSystem.OTHER, referenceUnit, scaleFactorToReferenceUnit,
99 standardUnit);
100 this.moneyUnit = referenceUnit.getMoneyUnit();
101 this.durationUnit = referenceUnit.getDurationUnit();
102 }
103
104
105
106
107
108
109
110
111
112 public MoneyPerDurationUnit(final String name, final String abbreviation, final MoneyPerDurationUnit referenceUnit,
113 final double scaleFactorToReferenceUnit)
114 {
115 this(name, abbreviation, referenceUnit, scaleFactorToReferenceUnit, false);
116 }
117
118
119
120
121 public final MoneyUnit getMoneyUnit()
122 {
123 return this.moneyUnit;
124 }
125
126
127
128
129 public final DurationUnit getDurationUnit()
130 {
131 return this.durationUnit;
132 }
133
134
135
136
137
138 protected static void setStandardUnit(final MoneyUnit standardMoneyUnit)
139 {
140 try
141 {
142 standardMoneyPerDurationUnit = new MoneyPerDurationUnit(standardMoneyUnit, DurationUnit.HOUR,
143 standardMoneyUnit.getName() + " per hour", standardMoneyUnit.getAbbreviation() + "/h");
144 }
145 catch (Exception e)
146 {
147
148 e = null;
149 }
150 }
151
152
153 @Override
154 public final MoneyPerDurationUnit getStandardUnit()
155 {
156 return standardMoneyPerDurationUnit;
157 }
158
159
160
161
162 public static MoneyPerDurationUnit getStandardMoneyPerDurationUnit()
163 {
164 return standardMoneyPerDurationUnit;
165 }
166
167
168 @Override
169 public final String getSICoefficientsString()
170 {
171 return "1/s";
172 }
173
174
175 @Override
176 public int hashCode()
177 {
178 final int prime = 31;
179 int result = super.hashCode();
180 result = prime * result + ((this.durationUnit == null) ? 0 : this.durationUnit.hashCode());
181 result = prime * result + ((this.moneyUnit == null) ? 0 : this.moneyUnit.hashCode());
182 return result;
183 }
184
185
186 @SuppressWarnings("checkstyle:needbraces")
187 @Override
188 public boolean equals(final Object obj)
189 {
190 if (this == obj)
191 return true;
192 if (!super.equals(obj))
193 return false;
194 if (getClass() != obj.getClass())
195 return false;
196 MoneyPerDurationUnit other = (MoneyPerDurationUnit) obj;
197 if (this.durationUnit == null)
198 {
199 if (other.durationUnit != null)
200 return false;
201 }
202 else if (!this.durationUnit.equals(other.durationUnit))
203 return false;
204 if (this.moneyUnit == null)
205 {
206 if (other.moneyUnit != null)
207 return false;
208 }
209 else if (!this.moneyUnit.equals(other.moneyUnit))
210 return false;
211 return true;
212 }
213
214 }