1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.data.basic;
18
19 import io.github.tonywasher.joceanus.metis.data.MetisDataFieldValue;
20 import io.github.tonywasher.joceanus.metis.data.MetisDataItem.MetisDataFieldId;
21 import io.github.tonywasher.joceanus.metis.field.MetisFieldRequired;
22 import io.github.tonywasher.joceanus.metis.field.MetisFieldSet;
23 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseTransInfo.MoneyWiseTransInfoList;
24 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseTransCategoryClass;
25 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseTransInfoClass;
26 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseTransInfoType.MoneyWiseTransInfoTypeList;
27 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
28 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataInfoClass;
29 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataInfoSet;
30 import io.github.tonywasher.joceanus.prometheus.views.PrometheusEditSet;
31
32 import java.util.Arrays;
33 import java.util.Iterator;
34 import java.util.Map;
35
36
37
38
39
40
41 public class MoneyWiseTransInfoSet
42 extends PrometheusDataInfoSet<MoneyWiseTransInfo> {
43
44
45
46 private static final MetisFieldSet<MoneyWiseTransInfoSet> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWiseTransInfoSet.class);
47
48
49
50
51 private static final Map<MetisDataFieldId, MoneyWiseTransInfoClass> FIELDSET_MAP = FIELD_DEFS.buildFieldMap(MoneyWiseTransInfoClass.class, MoneyWiseTransInfoSet::getFieldValue);
52
53
54
55
56 private static final Map<MoneyWiseTransInfoClass, MetisDataFieldId> REVERSE_FIELDMAP = MetisFieldSet.reverseFieldMap(FIELDSET_MAP, MoneyWiseTransInfoClass.class);
57
58
59
60
61
62
63
64
65 protected MoneyWiseTransInfoSet(final MoneyWiseTransaction pOwner,
66 final MoneyWiseTransInfoTypeList pTypeList,
67 final MoneyWiseTransInfoList pInfoList) {
68
69 super(pOwner, pTypeList, pInfoList);
70 }
71
72 @Override
73 public MetisFieldSetDef getDataFieldSet() {
74 return FIELD_DEFS;
75 }
76
77 @Override
78 public MoneyWiseTransaction getOwner() {
79 return (MoneyWiseTransaction) super.getOwner();
80 }
81
82
83
84
85
86
87
88 public Object getFieldValue(final MetisDataFieldId pFieldId) {
89
90 final MoneyWiseTransInfoClass myClass = getClassForField(pFieldId);
91 if (myClass != null) {
92 return getInfoSetValue(myClass);
93 }
94
95
96 return null;
97 }
98
99
100
101
102
103
104
105 private Object getInfoSetValue(final MoneyWiseTransInfoClass pInfoClass) {
106 final Object myValue = switch (pInfoClass) {
107 case RETURNEDCASHACCOUNT ->
108
109 getTransAsset(pInfoClass);
110 case TRANSTAG ->
111
112 getListValue(pInfoClass);
113 default ->
114
115 getField(pInfoClass);
116 };
117
118
119 return myValue != null
120 ? myValue
121 : MetisDataFieldValue.SKIP;
122 }
123
124
125
126
127
128
129
130 public static MoneyWiseTransInfoClass getClassForField(final MetisDataFieldId pField) {
131
132 return FIELDSET_MAP.get(pField);
133 }
134
135
136
137
138
139
140
141 public static MetisDataFieldId getFieldForClass(final MoneyWiseTransInfoClass pClass) {
142
143 return REVERSE_FIELDMAP.get(pClass);
144 }
145
146 @Override
147 public MetisDataFieldId getFieldForClass(final PrometheusDataInfoClass pClass) {
148 return getFieldForClass((MoneyWiseTransInfoClass) pClass);
149 }
150
151 @Override
152 public Iterator<PrometheusDataInfoClass> classIterator() {
153 final PrometheusDataInfoClass[] myValues = MoneyWiseTransInfoClass.values();
154 return Arrays.stream(myValues).iterator();
155 }
156
157
158
159
160
161
162 protected void cloneDataInfoSet(final MoneyWiseTransInfoSet pSource) {
163
164 cloneTheDataInfoSet(pSource);
165 }
166
167
168
169
170
171
172
173 void resolveEditSetLinks(final PrometheusEditSet pEditSet) throws OceanusException {
174
175 for (MoneyWiseTransInfo myInfo : this) {
176 myInfo.resolveEditSetLinks(pEditSet);
177 }
178 }
179
180
181
182
183
184
185
186 public MoneyWiseTransAsset getTransAsset(final MoneyWiseTransInfoClass pInfoClass) {
187
188 final MoneyWiseTransInfo myValue = getInfo(pInfoClass);
189
190
191 if (myValue == null) {
192 return null;
193 }
194
195
196 return myValue.getTransAsset();
197 }
198
199
200
201
202
203
204
205 public boolean isMetaData(final MoneyWiseTransInfoClass pClass) {
206
207 return switch (pClass) {
208
209 case REFERENCE, COMMENTS, TRANSTAG -> true;
210
211
212 default -> false;
213 };
214 }
215
216
217
218
219
220
221
222
223 public static MetisFieldRequired isAccountUnitsPositive(final MoneyWiseAssetDirection pDir,
224 final MoneyWiseTransCategoryClass pClass) {
225 return switch (pClass) {
226 case TRANSFER -> pDir.isFrom()
227 ? MetisFieldRequired.MUSTEXIST
228 : MetisFieldRequired.NOTALLOWED;
229 case UNITSADJUST, STOCKSPLIT -> MetisFieldRequired.CANEXIST;
230 case INHERITED, DIVIDEND, STOCKRIGHTSISSUE -> MetisFieldRequired.MUSTEXIST;
231 default -> MetisFieldRequired.NOTALLOWED;
232 };
233 }
234
235
236
237
238
239
240
241
242 public static MetisFieldRequired isPartnerUnitsPositive(final MoneyWiseAssetDirection pDir,
243 final MoneyWiseTransCategoryClass pClass) {
244 return switch (pClass) {
245 case TRANSFER -> pDir.isTo()
246 ? MetisFieldRequired.MUSTEXIST
247 : MetisFieldRequired.NOTALLOWED;
248 case STOCKDEMERGER, SECURITYREPLACE, STOCKTAKEOVER, STOCKRIGHTSISSUE -> MetisFieldRequired.MUSTEXIST;
249 default -> MetisFieldRequired.NOTALLOWED;
250 };
251 }
252 }