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 private MoneyPerDurationUnit(final MoneyUnit moneyUnit, final DurationUnit durationUnit, final String nameOrNameKey,
60 final String abbreviationOrAbbreviationKey, final boolean standardUnit)
61 {
62 super(nameOrNameKey, abbreviationOrAbbreviationKey, UnitSystem.OTHER, standardMoneyPerDurationUnit,
63 moneyUnit.getScaleFactor() / durationUnit.getScaleFactor(), standardUnit);
64 this.moneyUnit = moneyUnit;
65 this.durationUnit = durationUnit;
66 }
67
68
69
70
71
72
73
74
75 public MoneyPerDurationUnit(final MoneyUnit moneyUnit, final DurationUnit durationUnit, final String name,
76 final String abbreviation)
77 {
78 this(moneyUnit, durationUnit, name, abbreviation, false);
79 }
80
81
82
83
84
85
86
87
88
89
90 private MoneyPerDurationUnit(final String nameOrNameKey, final String abbreviationOrAbbreviationKey,
91 final MoneyPerDurationUnit referenceUnit, final double scaleFactorToReferenceUnit, final boolean standardUnit)
92 {
93 super(nameOrNameKey, abbreviationOrAbbreviationKey, UnitSystem.OTHER, referenceUnit, scaleFactorToReferenceUnit,
94 standardUnit);
95 this.moneyUnit = referenceUnit.getMoneyUnit();
96 this.durationUnit = referenceUnit.getDurationUnit();
97 }
98
99
100
101
102
103
104
105
106 public MoneyPerDurationUnit(final String name, final String abbreviation, final MoneyPerDurationUnit referenceUnit,
107 final double scaleFactorToReferenceUnit)
108 {
109 this(name, abbreviation, referenceUnit, scaleFactorToReferenceUnit, false);
110 }
111
112
113
114
115 public final MoneyUnit getMoneyUnit()
116 {
117 return this.moneyUnit;
118 }
119
120
121
122
123 public final DurationUnit getDurationUnit()
124 {
125 return this.durationUnit;
126 }
127
128
129
130
131
132 protected static void setStandardUnit(final MoneyUnit standardMoneyUnit)
133 {
134 try
135 {
136 standardMoneyPerDurationUnit = new MoneyPerDurationUnit(standardMoneyUnit, DurationUnit.HOUR,
137 standardMoneyUnit.getName() + " per hour", standardMoneyUnit.getAbbreviation() + "/h");
138 }
139 catch (Exception e)
140 {
141
142 e = null;
143 }
144 }
145
146
147 @Override
148 public final MoneyPerDurationUnit getStandardUnit()
149 {
150 return standardMoneyPerDurationUnit;
151 }
152
153
154
155
156 public static MoneyPerDurationUnit getStandardMoneyPerDurationUnit()
157 {
158 return standardMoneyPerDurationUnit;
159 }
160
161
162 @Override
163 public final String getSICoefficientsString()
164 {
165 return "1/s";
166 }
167
168
169 @Override
170 public int hashCode()
171 {
172 final int prime = 31;
173 int result = super.hashCode();
174 result = prime * result + ((this.durationUnit == null) ? 0 : this.durationUnit.hashCode());
175 result = prime * result + ((this.moneyUnit == null) ? 0 : this.moneyUnit.hashCode());
176 return result;
177 }
178
179
180 @SuppressWarnings("checkstyle:needbraces")
181 @Override
182 public boolean equals(final Object obj)
183 {
184 if (this == obj)
185 return true;
186 if (!super.equals(obj))
187 return false;
188 if (getClass() != obj.getClass())
189 return false;
190 MoneyPerDurationUnit other = (MoneyPerDurationUnit) obj;
191 if (this.durationUnit == null)
192 {
193 if (other.durationUnit != null)
194 return false;
195 }
196 else if (!this.durationUnit.equals(other.durationUnit))
197 return false;
198 if (this.moneyUnit == null)
199 {
200 if (other.moneyUnit != null)
201 return false;
202 }
203 else if (!this.moneyUnit.equals(other.moneyUnit))
204 return false;
205 return true;
206 }
207
208 }