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.MetisDataDifference;
20 import io.github.tonywasher.joceanus.metis.data.MetisDataResource;
21 import io.github.tonywasher.joceanus.metis.field.MetisFieldSet;
22 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseAssetBase.MoneyWiseAssetBaseList;
23 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseRegion.MoneyWiseRegionList;
24 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseAccountInfoClass;
25 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseAccountInfoType;
26 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseAccountInfoType.MoneyWiseAccountInfoTypeList;
27 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseStaticDataType;
28 import io.github.tonywasher.joceanus.moneywise.exc.MoneyWiseDataException;
29 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
30 import io.github.tonywasher.joceanus.prometheus.data.PrometheusData.PrometheusDataSetCtl;
31 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataInfoClass;
32 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataInfoItem;
33 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataInfoSet;
34 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
35 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataList;
36 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataResource;
37 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataSet;
38 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataValues;
39 import io.github.tonywasher.joceanus.prometheus.data.PrometheusEncrypted.PrometheusDataInfoSetItemCtl;
40 import io.github.tonywasher.joceanus.prometheus.data.PrometheusListStyle;
41 import io.github.tonywasher.joceanus.prometheus.data.PrometheusStaticDataItem;
42 import io.github.tonywasher.joceanus.prometheus.views.PrometheusEditSet;
43
44
45
46
47
48
49 public class MoneyWiseSecurityInfo
50 extends PrometheusDataInfoItem {
51
52
53
54 public static final String OBJECT_NAME = MoneyWiseBasicDataType.SECURITYINFO.getItemName();
55
56
57
58
59 public static final String LIST_NAME = MoneyWiseBasicDataType.SECURITYINFO.getListName();
60
61
62
63
64 private static final MetisFieldSet<MoneyWiseSecurityInfo> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWiseSecurityInfo.class);
65
66
67
68
69
70
71
72 protected MoneyWiseSecurityInfo(final MoneyWiseSecurityInfoList pList,
73 final MoneyWiseSecurityInfo pInfo) {
74
75 super(pList, pInfo);
76 }
77
78
79
80
81
82
83
84
85 private MoneyWiseSecurityInfo(final MoneyWiseSecurityInfoList pList,
86 final PrometheusDataItem pSecurity,
87 final MoneyWiseAccountInfoType pType) {
88
89 super(pList);
90 setNextDataKeySet();
91
92
93 setValueInfoType(pType);
94 setValueOwner(pSecurity);
95 }
96
97
98
99
100
101
102
103
104 private MoneyWiseSecurityInfo(final MoneyWiseSecurityInfoList pList,
105 final PrometheusDataValues pValues) throws OceanusException {
106
107 super(pList, pValues);
108
109
110 try {
111
112 resolveDataLink(PrometheusDataResource.DATAINFO_TYPE, MoneyWiseStaticDataType.ACCOUNTINFOTYPE);
113 resolveDataLink(PrometheusDataResource.DATAINFO_OWNER, MoneyWiseBasicDataType.SECURITY);
114
115
116 setValue(pValues.getValue(PrometheusDataResource.DATAINFO_VALUE));
117
118
119 resolveLink(null);
120
121
122 getInfoSet().registerInfo(this);
123
124 } catch (OceanusException e) {
125
126 throw new MoneyWiseDataException(this, ERROR_CREATEITEM, e);
127 }
128 }
129
130 @Override
131 public MetisFieldSetDef getDataFieldSet() {
132 return FIELD_DEFS;
133 }
134
135 @Override
136 public MoneyWiseAccountInfoType getInfoType() {
137 return getValues().getValue(PrometheusDataResource.DATAINFO_TYPE, MoneyWiseAccountInfoType.class);
138 }
139
140 @Override
141 public MoneyWiseAccountInfoClass getInfoClass() {
142 return getInfoType().getInfoClass();
143 }
144
145 @Override
146 public PrometheusDataItem getOwner() {
147 return getValues().getValue(PrometheusDataResource.DATAINFO_OWNER, PrometheusDataItem.class);
148 }
149
150
151
152
153
154
155 public MoneyWiseRegion getRegion() {
156 return getValues().getValue(PrometheusDataResource.DATAINFO_LINK, MoneyWiseRegion.class);
157 }
158
159
160
161
162
163
164 public MoneyWiseAssetBase getSecurity() {
165 return getValues().getValue(PrometheusDataResource.DATAINFO_LINK, MoneyWiseAssetBase.class);
166 }
167
168 @Override
169 public String getLinkName() {
170 final PrometheusDataItem myItem = getLink();
171 if (myItem instanceof MoneyWiseRegion myRegion) {
172 return myRegion.getName();
173 }
174 if (myItem instanceof MoneyWiseAssetBase mySecurity) {
175 return mySecurity.getName();
176 }
177 return null;
178 }
179
180 @Override
181 public MoneyWiseSecurityInfo getBase() {
182 return (MoneyWiseSecurityInfo) super.getBase();
183 }
184
185 @Override
186 public MoneyWiseSecurityInfoList getList() {
187 return (MoneyWiseSecurityInfoList) super.getList();
188 }
189
190
191
192
193
194
195 @SuppressWarnings("unchecked")
196 private PrometheusDataInfoSet<MoneyWiseSecurityInfo> getInfoSet() {
197 return (PrometheusDataInfoSet<MoneyWiseSecurityInfo>) ((PrometheusDataInfoSetItemCtl<MoneyWiseSecurityInfo>) getOwner()).getInfoSet();
198 }
199
200 @Override
201 public void deRegister() {
202
203 getInfoSet().deRegisterInfo(this);
204 }
205
206 @Override
207 public void resolveDataSetLinks() throws OceanusException {
208
209 super.resolveDataSetLinks();
210
211
212 resolveDataLink(PrometheusDataResource.DATAINFO_TYPE, MoneyWiseStaticDataType.ACCOUNTINFOTYPE);
213 resolveDataLink(PrometheusDataResource.DATAINFO_OWNER, MoneyWiseBasicDataType.SECURITY);
214
215
216 resolveLink(null);
217
218
219 getInfoSet().registerInfo(this);
220 }
221
222
223
224
225
226
227
228 public void resolveEditSetLinks(final PrometheusEditSet pEditSet) throws OceanusException {
229
230 super.resolveDataSetLinks();
231
232
233 resolveDataLink(PrometheusDataResource.DATAINFO_TYPE, pEditSet.getDataList(MoneyWiseStaticDataType.ACCOUNTINFOTYPE, MoneyWiseAccountInfoTypeList.class));
234 resolveDataLink(PrometheusDataResource.DATAINFO_OWNER, pEditSet.getDataList(MoneyWiseBasicDataType.SECURITY, PrometheusDataList.class));
235
236
237 resolveLink(pEditSet);
238 }
239
240
241
242
243
244
245
246 private void resolveLink(final PrometheusEditSet pEditSet) throws OceanusException {
247
248 final MoneyWiseAccountInfoType myType = getInfoType();
249 if (myType.isLink()) {
250
251 final PrometheusDataSetCtl myData = getDataSet();
252 final Object myLinkId = getValues().getValue(PrometheusDataResource.DATAINFO_VALUE);
253
254
255 switch (myType.getInfoClass()) {
256 case REGION:
257 resolveDataLink(PrometheusDataResource.DATAINFO_LINK, pEditSet == null
258 ? myData.getDataList(MoneyWiseBasicDataType.REGION, MoneyWiseRegionList.class)
259 : pEditSet.getDataList(MoneyWiseBasicDataType.REGION, MoneyWiseRegionList.class));
260 if (myLinkId == null) {
261 setValueValue(getRegion().getIndexedId());
262 }
263 break;
264 case UNDERLYINGSTOCK:
265 resolveDataLink(PrometheusDataResource.DATAINFO_LINK, pEditSet == null
266 ? myData.getDataList(MoneyWiseBasicDataType.SECURITY, MoneyWiseAssetBaseList.class)
267 : pEditSet.getDataList(MoneyWiseBasicDataType.SECURITY, MoneyWiseAssetBaseList.class));
268 if (myLinkId == null) {
269 setValueValue(getSecurity().getIndexedId());
270 }
271 break;
272 default:
273 break;
274 }
275 }
276 }
277
278
279
280
281
282
283
284 @Override
285 public boolean applyChanges(final PrometheusDataItem pInfo) {
286
287 if (!(pInfo instanceof MoneyWiseSecurityInfo mySecInfo)) {
288 return false;
289 }
290
291
292 pushHistory();
293
294
295 if (!MetisDataDifference.isEqual(getField(), mySecInfo.getField())) {
296 setValueValue(mySecInfo.getField());
297 }
298
299
300 return checkForHistory();
301 }
302
303 @Override
304 public void touchUnderlyingItems() {
305
306 super.touchUnderlyingItems();
307
308
309 switch (getInfoClass()) {
310 case UNDERLYINGSTOCK:
311 getSecurity().touchItem(getOwner());
312 break;
313 case REGION:
314 getRegion().touchItem(getOwner());
315 break;
316 default:
317 break;
318 }
319 }
320
321
322
323
324 public static class MoneyWiseSecurityInfoList
325 extends PrometheusDataInfoList<MoneyWiseSecurityInfo> {
326
327
328
329 private static final MetisFieldSet<MoneyWiseSecurityInfoList> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWiseSecurityInfoList.class);
330
331
332
333
334
335
336 protected MoneyWiseSecurityInfoList(final PrometheusDataSet pData) {
337 super(MoneyWiseSecurityInfo.class, pData, MoneyWiseBasicDataType.SECURITYINFO, PrometheusListStyle.CORE);
338 }
339
340
341
342
343
344
345 private MoneyWiseSecurityInfoList(final MoneyWiseSecurityInfoList pSource) {
346 super(pSource);
347 }
348
349 @Override
350 public MetisFieldSet<MoneyWiseSecurityInfoList> getDataFieldSet() {
351 return FIELD_DEFS;
352 }
353
354 @Override
355 public String listName() {
356 return LIST_NAME;
357 }
358
359 @Override
360 public MetisFieldSetDef getItemFields() {
361 return MoneyWiseSecurityInfo.FIELD_DEFS;
362 }
363
364
365
366
367
368
369 protected void setBase(final MoneyWiseSecurityInfoList pBase) {
370
371 setStyle(PrometheusListStyle.EDIT);
372 super.setBase(pBase);
373 }
374
375 @Override
376 protected MoneyWiseSecurityInfoList getEmptyList(final PrometheusListStyle pStyle) {
377 final MoneyWiseSecurityInfoList myList = new MoneyWiseSecurityInfoList(this);
378 myList.setStyle(pStyle);
379 return myList;
380 }
381
382 @Override
383 public MoneyWiseSecurityInfo addCopyItem(final PrometheusDataItem pItem) {
384
385 if (!(pItem instanceof MoneyWiseSecurityInfo)) {
386 throw new UnsupportedOperationException();
387 }
388
389 final MoneyWiseSecurityInfo myInfo = new MoneyWiseSecurityInfo(this, (MoneyWiseSecurityInfo) pItem);
390 add(myInfo);
391 return myInfo;
392 }
393
394 @Override
395 public MoneyWiseSecurityInfo addNewItem() {
396 throw new UnsupportedOperationException();
397 }
398
399 @Override
400 protected MoneyWiseSecurityInfo addNewItem(final PrometheusDataItem pOwner,
401 final PrometheusStaticDataItem pInfoType) {
402
403 final MoneyWiseSecurityInfo myInfo = new MoneyWiseSecurityInfo(this, pOwner, (MoneyWiseAccountInfoType) pInfoType);
404 add(myInfo);
405
406
407 return myInfo;
408 }
409
410 @Override
411 public void addInfoItem(final Integer pId,
412 final PrometheusDataItem pSecurity,
413 final PrometheusDataInfoClass pInfoClass,
414 final Object pValue) throws OceanusException {
415
416 if (pValue == null) {
417 return;
418 }
419
420
421 final MoneyWiseAccountInfoTypeList myActInfos
422 = getDataSet().getDataList(MoneyWiseStaticDataType.ACCOUNTINFOTYPE, MoneyWiseAccountInfoTypeList.class);
423
424
425 final MoneyWiseAccountInfoType myInfoType = myActInfos.findItemByClass(pInfoClass);
426 if (myInfoType == null) {
427 throw new MoneyWiseDataException(pSecurity, ERROR_BADINFOCLASS + " [" + pInfoClass + "]");
428 }
429
430
431 final PrometheusDataValues myValues = new PrometheusDataValues(OBJECT_NAME);
432 myValues.addValue(MetisDataResource.DATA_ID, pId);
433 myValues.addValue(PrometheusDataResource.DATAINFO_TYPE, myInfoType);
434 myValues.addValue(PrometheusDataResource.DATAINFO_OWNER, pSecurity);
435 myValues.addValue(PrometheusDataResource.DATAINFO_VALUE, pValue);
436
437
438 final MoneyWiseSecurityInfo myInfo = new MoneyWiseSecurityInfo(this, myValues);
439
440
441 if (!isIdUnique(pId)) {
442 myInfo.addError(ERROR_DUPLICATE, MetisDataResource.DATA_ID);
443 throw new MoneyWiseDataException(myInfo, ERROR_VALIDATION);
444 }
445
446
447 add(myInfo);
448 }
449
450 @Override
451 public MoneyWiseSecurityInfo addValuesItem(final PrometheusDataValues pValues) throws OceanusException {
452
453 final MoneyWiseSecurityInfo myInfo = new MoneyWiseSecurityInfo(this, pValues);
454
455
456 if (!isIdUnique(myInfo.getIndexedId())) {
457 myInfo.addError(ERROR_DUPLICATE, MetisDataResource.DATA_ID);
458 throw new MoneyWiseDataException(myInfo, ERROR_VALIDATION);
459 }
460
461
462 add(myInfo);
463
464
465 return myInfo;
466 }
467
468 @Override
469 public void postProcessOnLoad() throws OceanusException {
470
471 validateOnLoad();
472
473
474 final PrometheusDataList<?> mySecurities
475 = getDataSet().getDataList(MoneyWiseBasicDataType.SECURITY, PrometheusDataList.class);
476 mySecurities.mapData();
477 mySecurities.validateOnLoad();
478 }
479 }
480 }