1
2
3
4 package de.powerstat.validation.values;
5
6
7 import java.util.ArrayList;
8 import java.util.List;
9 import java.util.Map;
10 import java.util.concurrent.ConcurrentHashMap;
11
12 import de.powerstat.validation.interfaces.IValueObject;
13
14
15
16
17
18
19
20
21
22 public enum BloodGroup implements IValueObject
23 {
24
25
26
27 ON(0),
28
29
30
31
32 OP(1),
33
34
35
36
37 AN(2),
38
39
40
41
42 AP(3),
43
44
45
46
47 BN(4),
48
49
50
51
52 BP(5),
53
54
55
56
57 ABN(6),
58
59
60
61
62 ABP(7);
63
64
65
66
67
68 private static final Map<BloodGroup, List<BloodGroup>> DONATE_TO = new ConcurrentHashMap<>();
69
70
71
72
73 private static final Map<BloodGroup, List<BloodGroup>> RECEIVE_FROM = new ConcurrentHashMap<>();
74
75
76
77
78 private final int action;
79
80
81 static
82 {
83 final List<BloodGroup> onTo = new ArrayList<>();
84 onTo.add(ABP);
85 onTo.add(ABN);
86 onTo.add(AP);
87 onTo.add(AN);
88 onTo.add(BP);
89 onTo.add(BN);
90 onTo.add(OP);
91 onTo.add(ON);
92 BloodGroup.DONATE_TO.put(ON, onTo);
93
94 final List<BloodGroup> opTo = new ArrayList<>();
95 opTo.add(ABP);
96 opTo.add(AP);
97 opTo.add(BP);
98 opTo.add(OP);
99 BloodGroup.DONATE_TO.put(OP, opTo);
100
101 final List<BloodGroup> bnTo = new ArrayList<>();
102 bnTo.add(ABP);
103 bnTo.add(ABN);
104 bnTo.add(BP);
105 bnTo.add(BN);
106 BloodGroup.DONATE_TO.put(BN, bnTo);
107
108 final List<BloodGroup> bpTo = new ArrayList<>();
109 bpTo.add(ABP);
110 bpTo.add(BP);
111 BloodGroup.DONATE_TO.put(BP, bpTo);
112
113 final List<BloodGroup> anTo = new ArrayList<>();
114 anTo.add(ABP);
115 anTo.add(ABN);
116 anTo.add(AP);
117 anTo.add(AN);
118 BloodGroup.DONATE_TO.put(AN, anTo);
119
120 final List<BloodGroup> apTo = new ArrayList<>();
121 apTo.add(ABP);
122 apTo.add(AP);
123 BloodGroup.DONATE_TO.put(AP, apTo);
124
125 final List<BloodGroup> abnTo = new ArrayList<>();
126 abnTo.add(ABP);
127 abnTo.add(ABN);
128 BloodGroup.DONATE_TO.put(ABN, abnTo);
129
130 final List<BloodGroup> abpTo = new ArrayList<>();
131 abpTo.add(ABP);
132 BloodGroup.DONATE_TO.put(ABP, abpTo);
133
134 final List<BloodGroup> abpFrom = new ArrayList<>();
135 abpFrom.add(ON);
136 abpFrom.add(OP);
137 abpFrom.add(BN);
138 abpFrom.add(BP);
139 abpFrom.add(AN);
140 abpFrom.add(AP);
141 abpFrom.add(ABN);
142 abpFrom.add(ABP);
143 BloodGroup.RECEIVE_FROM.put(ABP, abpFrom);
144
145 final List<BloodGroup> abnFrom = new ArrayList<>();
146 abnFrom.add(ON);
147 abnFrom.add(BN);
148 abnFrom.add(AN);
149 abnFrom.add(ABN);
150 BloodGroup.RECEIVE_FROM.put(ABN, abnFrom);
151
152 final List<BloodGroup> apFrom = new ArrayList<>();
153 apFrom.add(ON);
154 apFrom.add(OP);
155 apFrom.add(AN);
156 apFrom.add(AP);
157 BloodGroup.RECEIVE_FROM.put(AP, apFrom);
158
159 final List<BloodGroup> anFrom = new ArrayList<>();
160 anFrom.add(ON);
161 anFrom.add(AN);
162 BloodGroup.RECEIVE_FROM.put(AN, anFrom);
163
164 final List<BloodGroup> bpFrom = new ArrayList<>();
165 bpFrom.add(ON);
166 bpFrom.add(OP);
167 bpFrom.add(BN);
168 bpFrom.add(BP);
169 BloodGroup.RECEIVE_FROM.put(BP, bpFrom);
170
171 final List<BloodGroup> bnFrom = new ArrayList<>();
172 bnFrom.add(ON);
173 bnFrom.add(BN);
174 BloodGroup.RECEIVE_FROM.put(BN, bnFrom);
175
176 final List<BloodGroup> opFrom = new ArrayList<>();
177 opFrom.add(ON);
178 opFrom.add(OP);
179 BloodGroup.RECEIVE_FROM.put(OP, opFrom);
180
181 final List<BloodGroup> onFrom = new ArrayList<>();
182 onFrom.add(ON);
183 BloodGroup.RECEIVE_FROM.put(ON, onFrom);
184 }
185
186
187
188
189
190
191
192 BloodGroup(final int action)
193 {
194 this.action = action;
195 }
196
197
198
199
200
201
202
203
204 public static BloodGroup of(final String value)
205 {
206 return BloodGroup.valueOf(value);
207 }
208
209
210
211
212
213
214
215 public int getAction()
216 {
217 return this.action;
218 }
219
220
221
222
223
224
225
226 @Override
227 public String stringValue()
228 {
229 return this.name();
230 }
231
232
233
234
235
236
237
238
239 public boolean couldDonateTo(final BloodGroup other)
240 {
241 return BloodGroup.DONATE_TO.get(this).contains(other);
242 }
243
244
245
246
247
248
249
250
251 public boolean couldReceiveFrom(final BloodGroup other)
252 {
253 return BloodGroup.RECEIVE_FROM.get(this).contains(other);
254 }
255
256 }