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.statics.MoneyWiseAccountInfoClass;
23 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseAccountInfoType;
24 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseAccountInfoType.MoneyWiseAccountInfoTypeList;
25 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseStaticDataType;
26 import io.github.tonywasher.joceanus.moneywise.exc.MoneyWiseDataException;
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.PrometheusDataInfoItem;
30 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataInfoSet;
31 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
32 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataList;
33 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataResource;
34 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataSet;
35 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataValues;
36 import io.github.tonywasher.joceanus.prometheus.data.PrometheusEncrypted.PrometheusDataInfoSetItemCtl;
37 import io.github.tonywasher.joceanus.prometheus.data.PrometheusListStyle;
38 import io.github.tonywasher.joceanus.prometheus.data.PrometheusStaticDataItem;
39 import io.github.tonywasher.joceanus.prometheus.views.PrometheusEditSet;
40
41
42
43
44
45
46 public class MoneyWisePortfolioInfo
47 extends PrometheusDataInfoItem {
48
49
50
51 public static final String OBJECT_NAME = MoneyWiseBasicDataType.PORTFOLIOINFO.getItemName();
52
53
54
55
56 public static final String LIST_NAME = MoneyWiseBasicDataType.PORTFOLIOINFO.getListName();
57
58
59
60
61 private static final MetisFieldSet<MoneyWisePortfolioInfo> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWisePortfolioInfo.class);
62
63
64
65
66
67
68
69 protected MoneyWisePortfolioInfo(final MoneyWisePortfolioInfoList pList,
70 final MoneyWisePortfolioInfo pInfo) {
71
72 super(pList, pInfo);
73 }
74
75
76
77
78
79
80
81
82 private MoneyWisePortfolioInfo(final MoneyWisePortfolioInfoList pList,
83 final PrometheusDataItem pPortfolio,
84 final MoneyWiseAccountInfoType pType) {
85
86 super(pList);
87 setNextDataKeySet();
88
89
90 setValueInfoType(pType);
91 setValueOwner(pPortfolio);
92 }
93
94
95
96
97
98
99
100
101 private MoneyWisePortfolioInfo(final MoneyWisePortfolioInfoList pList,
102 final PrometheusDataValues pValues) throws OceanusException {
103
104 super(pList, pValues);
105
106
107 try {
108
109 resolveDataLink(PrometheusDataResource.DATAINFO_TYPE, MoneyWiseStaticDataType.ACCOUNTINFOTYPE);
110 resolveDataLink(PrometheusDataResource.DATAINFO_OWNER, MoneyWiseBasicDataType.PORTFOLIO);
111
112
113 setValue(pValues.getValue(PrometheusDataResource.DATAINFO_VALUE));
114
115
116 getInfoSet().registerInfo(this);
117
118 } catch (OceanusException e) {
119
120 throw new MoneyWiseDataException(this, ERROR_CREATEITEM, e);
121 }
122 }
123
124 @Override
125 public MetisFieldSetDef getDataFieldSet() {
126 return FIELD_DEFS;
127 }
128
129 @Override
130 public MoneyWiseAccountInfoType getInfoType() {
131 return getValues().getValue(PrometheusDataResource.DATAINFO_TYPE, MoneyWiseAccountInfoType.class);
132 }
133
134 @Override
135 public MoneyWiseAccountInfoClass getInfoClass() {
136 return getInfoType().getInfoClass();
137 }
138
139 @Override
140 public PrometheusDataItem getOwner() {
141 return getValues().getValue(PrometheusDataResource.DATAINFO_OWNER, PrometheusDataItem.class);
142 }
143
144 @Override
145 public MoneyWisePortfolioInfo getBase() {
146 return (MoneyWisePortfolioInfo) super.getBase();
147 }
148
149 @Override
150 public MoneyWisePortfolioInfoList getList() {
151 return (MoneyWisePortfolioInfoList) super.getList();
152 }
153
154
155
156
157
158
159 @SuppressWarnings("unchecked")
160 private PrometheusDataInfoSet<MoneyWisePortfolioInfo> getInfoSet() {
161 return (PrometheusDataInfoSet<MoneyWisePortfolioInfo>) ((PrometheusDataInfoSetItemCtl<?>) getOwner()).getInfoSet();
162 }
163
164 @Override
165 public void deRegister() {
166
167 getInfoSet().deRegisterInfo(this);
168 }
169
170 @Override
171 public void resolveDataSetLinks() throws OceanusException {
172
173 super.resolveDataSetLinks();
174
175
176 resolveDataLink(PrometheusDataResource.DATAINFO_TYPE, MoneyWiseStaticDataType.ACCOUNTINFOTYPE);
177 resolveDataLink(PrometheusDataResource.DATAINFO_OWNER, MoneyWiseBasicDataType.PORTFOLIO);
178
179
180 getInfoSet().registerInfo(this);
181 }
182
183
184
185
186
187
188
189 public void resolveEditSetLinks(final PrometheusEditSet pEditSet) throws OceanusException {
190
191 resolveDataLink(PrometheusDataResource.DATAINFO_TYPE, pEditSet.getDataList(MoneyWiseStaticDataType.ACCOUNTINFOTYPE, MoneyWiseAccountInfoTypeList.class));
192 resolveDataLink(PrometheusDataResource.DATAINFO_OWNER, pEditSet.getDataList(MoneyWiseBasicDataType.PORTFOLIO, PrometheusDataList.class));
193 }
194
195
196
197
198
199
200
201 @Override
202 public boolean applyChanges(final PrometheusDataItem pInfo) {
203
204 if (!(pInfo instanceof MoneyWisePortfolioInfo myPortInfo)) {
205 return false;
206 }
207
208
209 pushHistory();
210
211
212 if (!MetisDataDifference.isEqual(getField(), myPortInfo.getField())) {
213 setValueValue(myPortInfo.getField());
214 }
215
216
217 return checkForHistory();
218 }
219
220
221
222
223 public static class MoneyWisePortfolioInfoList
224 extends PrometheusDataInfoList<MoneyWisePortfolioInfo> {
225
226
227
228 private static final MetisFieldSet<MoneyWisePortfolioInfoList> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWisePortfolioInfoList.class);
229
230
231
232
233
234
235 protected MoneyWisePortfolioInfoList(final PrometheusDataSet pData) {
236 super(MoneyWisePortfolioInfo.class, pData, MoneyWiseBasicDataType.PORTFOLIOINFO, PrometheusListStyle.CORE);
237 }
238
239
240
241
242
243
244 private MoneyWisePortfolioInfoList(final MoneyWisePortfolioInfoList pSource) {
245 super(pSource);
246 }
247
248 @Override
249 public MetisFieldSet<MoneyWisePortfolioInfoList> getDataFieldSet() {
250 return FIELD_DEFS;
251 }
252
253 @Override
254 public String listName() {
255 return LIST_NAME;
256 }
257
258 @Override
259 public MetisFieldSetDef getItemFields() {
260 return MoneyWisePortfolioInfo.FIELD_DEFS;
261 }
262
263
264
265
266
267
268 protected void setBase(final MoneyWisePortfolioInfoList pBase) {
269
270 setStyle(PrometheusListStyle.EDIT);
271 super.setBase(pBase);
272 }
273
274 @Override
275 protected MoneyWisePortfolioInfoList getEmptyList(final PrometheusListStyle pStyle) {
276 final MoneyWisePortfolioInfoList myList = new MoneyWisePortfolioInfoList(this);
277 myList.setStyle(pStyle);
278 return myList;
279 }
280
281 @Override
282 public MoneyWisePortfolioInfo addCopyItem(final PrometheusDataItem pItem) {
283
284 if (!(pItem instanceof MoneyWisePortfolioInfo)) {
285 throw new UnsupportedOperationException();
286 }
287
288 final MoneyWisePortfolioInfo myInfo = new MoneyWisePortfolioInfo(this, (MoneyWisePortfolioInfo) pItem);
289 add(myInfo);
290 return myInfo;
291 }
292
293 @Override
294 public MoneyWisePortfolioInfo addNewItem() {
295 throw new UnsupportedOperationException();
296 }
297
298 @Override
299 protected MoneyWisePortfolioInfo addNewItem(final PrometheusDataItem pOwner,
300 final PrometheusStaticDataItem pInfoType) {
301
302 final MoneyWisePortfolioInfo myInfo = new MoneyWisePortfolioInfo(this, pOwner, (MoneyWiseAccountInfoType) pInfoType);
303 add(myInfo);
304
305
306 return myInfo;
307 }
308
309 @Override
310 public void addInfoItem(final Integer pId,
311 final PrometheusDataItem pPortfolio,
312 final PrometheusDataInfoClass pInfoClass,
313 final Object pValue) throws OceanusException {
314
315 if (pValue == null) {
316 return;
317 }
318
319
320 final MoneyWiseAccountInfoTypeList myActInfos
321 = getDataSet().getDataList(MoneyWiseStaticDataType.ACCOUNTINFOTYPE, MoneyWiseAccountInfoTypeList.class);
322
323
324 final MoneyWiseAccountInfoType myInfoType = myActInfos.findItemByClass(pInfoClass);
325 if (myInfoType == null) {
326 throw new MoneyWiseDataException(pPortfolio, ERROR_BADINFOCLASS + " [" + pInfoClass + "]");
327 }
328
329
330 final PrometheusDataValues myValues = new PrometheusDataValues(OBJECT_NAME);
331 myValues.addValue(MetisDataResource.DATA_ID, pId);
332 myValues.addValue(PrometheusDataResource.DATAINFO_TYPE, myInfoType);
333 myValues.addValue(PrometheusDataResource.DATAINFO_OWNER, pPortfolio);
334 myValues.addValue(PrometheusDataResource.DATAINFO_VALUE, pValue);
335
336
337 final MoneyWisePortfolioInfo myInfo = new MoneyWisePortfolioInfo(this, myValues);
338
339
340 if (!isIdUnique(pId)) {
341 myInfo.addError(ERROR_DUPLICATE, MetisDataResource.DATA_ID);
342 throw new MoneyWiseDataException(myInfo, ERROR_VALIDATION);
343 }
344
345
346 add(myInfo);
347 }
348
349 @Override
350 public MoneyWisePortfolioInfo addValuesItem(final PrometheusDataValues pValues) throws OceanusException {
351
352 final MoneyWisePortfolioInfo myInfo = new MoneyWisePortfolioInfo(this, pValues);
353
354
355 if (!isIdUnique(myInfo.getIndexedId())) {
356 myInfo.addError(ERROR_DUPLICATE, MetisDataResource.DATA_ID);
357 throw new MoneyWiseDataException(myInfo, ERROR_VALIDATION);
358 }
359
360
361 add(myInfo);
362
363
364 return myInfo;
365 }
366
367 @Override
368 public void postProcessOnLoad() throws OceanusException {
369
370 validateOnLoad();
371
372
373 final PrometheusDataList<?> myPortfolios
374 = getDataSet().getDataList(MoneyWiseBasicDataType.PORTFOLIO, PrometheusDataList.class);
375 myPortfolios.mapData();
376 myPortfolios.validateOnLoad();
377 }
378 }
379 }