1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.prometheus.views;
18
19 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
20 import io.github.tonywasher.joceanus.oceanus.event.OceanusEventManager;
21 import io.github.tonywasher.joceanus.oceanus.event.OceanusEventRegistrar;
22 import io.github.tonywasher.joceanus.oceanus.event.OceanusEventRegistrar.OceanusEventProvider;
23 import io.github.tonywasher.joceanus.oceanus.format.OceanusDataFormatter;
24 import io.github.tonywasher.joceanus.oceanus.profile.OceanusProfile;
25 import io.github.tonywasher.joceanus.metis.toolkit.MetisToolkit;
26 import io.github.tonywasher.joceanus.metis.viewer.MetisViewerEntry;
27 import io.github.tonywasher.joceanus.metis.viewer.MetisViewerErrorList;
28 import io.github.tonywasher.joceanus.metis.viewer.MetisViewerExceptionWrapper;
29 import io.github.tonywasher.joceanus.metis.viewer.MetisViewerManager;
30 import io.github.tonywasher.joceanus.metis.viewer.MetisViewerStandardEntry;
31 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataSet;
32 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataValidator.PrometheusDataValidatorFactory;
33 import io.github.tonywasher.joceanus.prometheus.database.PrometheusDataStore;
34 import io.github.tonywasher.joceanus.prometheus.preference.PrometheusPreferenceManager;
35 import io.github.tonywasher.joceanus.prometheus.security.PrometheusSecurityPasswordManager;
36 import io.github.tonywasher.joceanus.prometheus.sheets.PrometheusSpreadSheet;
37 import io.github.tonywasher.joceanus.prometheus.toolkit.PrometheusToolkit;
38 import io.github.tonywasher.joceanus.tethys.api.factory.TethysUIFactory;
39
40 import java.util.EnumMap;
41 import java.util.Map;
42
43
44
45
46 public abstract class PrometheusDataControl
47 implements OceanusEventProvider<PrometheusDataEvent> {
48
49
50
51 private final OceanusEventManager<PrometheusDataEvent> theEventManager;
52
53
54
55
56 private PrometheusDataSet theData;
57
58
59
60
61 private PrometheusDataSet theUpdates;
62
63
64
65
66 private final MetisViewerErrorList theErrors;
67
68
69
70
71 private final PrometheusToolkit theToolkit;
72
73
74
75
76 private final MetisToolkit theMetisToolkit;
77
78
79
80
81 private final Map<PrometheusViewerEntryId, MetisViewerEntry> theViewerMap;
82
83
84
85
86 private PrometheusDataValidatorFactory theValidatorFactory;
87
88
89
90
91
92
93 protected PrometheusDataControl(final PrometheusToolkit pToolkit) {
94
95 theToolkit = pToolkit;
96 theMetisToolkit = pToolkit.getToolkit();
97
98
99 theViewerMap = new EnumMap<>(PrometheusViewerEntryId.class);
100 initViewerMap();
101
102
103 theEventManager = new OceanusEventManager<>();
104
105
106 theErrors = new MetisViewerErrorList();
107 }
108
109 @Override
110 public OceanusEventRegistrar<PrometheusDataEvent> getEventRegistrar() {
111 return theEventManager.getEventRegistrar();
112 }
113
114
115
116
117
118
119 public void setValidatorFactory(final PrometheusDataValidatorFactory pFactory) {
120 theValidatorFactory = pFactory;
121 }
122
123
124
125
126
127
128 public PrometheusDataValidatorFactory getValidatorFactory() {
129 return theValidatorFactory;
130 }
131
132
133
134
135
136
137 public void setData(final PrometheusDataSet pData) {
138
139 theData = pData;
140
141
142 final MetisViewerEntry myData = getViewerEntry(PrometheusViewerEntryId.DATASET);
143 myData.setTreeObject(pData);
144
145
146 analyseData(false);
147
148
149 refreshViews();
150 }
151
152
153
154
155 public void incrementVersion() {
156
157 final int myVersion = theData.getVersion();
158 theData.setVersion(myVersion + 1);
159 }
160
161
162
163
164
165
166 public PrometheusDataSet getData() {
167 return theData;
168 }
169
170
171
172
173
174
175 public void deriveUpdates() throws OceanusException {
176
177 theUpdates = theData.deriveUpdateSet();
178
179
180 final MetisViewerEntry myData = getViewerEntry(PrometheusViewerEntryId.UPDATES);
181 myData.setTreeObject(theUpdates);
182 }
183
184
185
186
187
188
189 public PrometheusDataSet getUpdates() {
190 return theUpdates;
191 }
192
193
194
195
196
197
198 public void addError(final OceanusException pError) {
199 theErrors.add(new MetisViewerExceptionWrapper(pError));
200 }
201
202
203
204
205 protected void clearErrors() {
206 theErrors.clear();
207 }
208
209
210
211
212
213
214 public MetisViewerErrorList getErrors() {
215 return theErrors;
216 }
217
218
219
220
221
222
223 public PrometheusToolkit getToolkit() {
224 return theToolkit;
225 }
226
227
228
229
230
231
232 public OceanusDataFormatter getDataFormatter() {
233 return theMetisToolkit.getFormatter();
234 }
235
236
237
238
239
240
241 public PrometheusSecurityPasswordManager getPasswordManager() {
242 return theToolkit.getPasswordManager();
243 }
244
245
246
247
248
249
250 public PrometheusPreferenceManager getPreferenceManager() {
251 return theToolkit.getPreferenceManager();
252 }
253
254
255
256
257
258
259 public MetisViewerManager getViewerManager() {
260 return theMetisToolkit.getViewerManager();
261 }
262
263
264
265
266
267
268 public TethysUIFactory<?> getGuiFactory() {
269 return theMetisToolkit.getGuiFactory();
270 }
271
272
273
274
275 private void initViewerMap() {
276
277 final MetisViewerManager myViewer = getViewerManager();
278
279
280 theViewerMap.put(PrometheusViewerEntryId.ERROR, myViewer.getStandardEntry(MetisViewerStandardEntry.ERROR));
281 theViewerMap.put(PrometheusViewerEntryId.PROFILE, myViewer.getStandardEntry(MetisViewerStandardEntry.PROFILE));
282 theViewerMap.put(PrometheusViewerEntryId.DATA, myViewer.getStandardEntry(MetisViewerStandardEntry.DATA));
283 theViewerMap.put(PrometheusViewerEntryId.UPDATES, myViewer.getStandardEntry(MetisViewerStandardEntry.UPDATES));
284 theViewerMap.put(PrometheusViewerEntryId.VIEW, myViewer.getStandardEntry(MetisViewerStandardEntry.VIEW));
285
286
287 final MetisViewerEntry myData = getViewerEntry(PrometheusViewerEntryId.DATA);
288 theViewerMap.put(PrometheusViewerEntryId.DATASET, myViewer.newEntry(myData, PrometheusViewerEntryId.DATASET.toString()));
289 theViewerMap.put(PrometheusViewerEntryId.ANALYSIS, myViewer.newEntry(myData, PrometheusViewerEntryId.ANALYSIS.toString()));
290
291
292 final MetisViewerEntry myView = getViewerEntry(PrometheusViewerEntryId.VIEW);
293 final MetisViewerEntry myMaint = myViewer.newEntry(myView, PrometheusViewerEntryId.MAINTENANCE.toString());
294 theViewerMap.put(PrometheusViewerEntryId.MAINTENANCE, myMaint);
295 theViewerMap.put(PrometheusViewerEntryId.STATIC, myViewer.newEntry(myMaint, PrometheusViewerEntryId.STATIC.toString()));
296
297
298 final MetisViewerEntry myError = theViewerMap.get(PrometheusViewerEntryId.ERROR);
299 myError.setVisible(myError.getObject() != null);
300 }
301
302
303
304
305
306
307
308 public final MetisViewerEntry getViewerEntry(final PrometheusViewerEntryId pId) {
309 return theViewerMap.get(pId);
310 }
311
312
313
314
315
316
317 public abstract PrometheusSpreadSheet getSpreadSheet();
318
319
320
321
322
323
324 public abstract String getDatabaseName();
325
326
327
328
329
330
331
332 public abstract PrometheusDataStore getDatabase() throws OceanusException;
333
334
335
336
337
338
339
340 public abstract PrometheusDataStore getNullDatabase() throws OceanusException;
341
342
343
344
345
346
347 public abstract PrometheusDataSet getNewData();
348
349
350
351
352
353
354
355 protected abstract boolean analyseData(boolean bPreserve);
356
357
358
359
360 final void refreshViews() {
361
362 OceanusProfile myTask = getActiveTask();
363 myTask = myTask.startTask("refreshViews");
364
365
366 theEventManager.fireEvent(PrometheusDataEvent.REFRESHVIEWS);
367
368
369 myTask.end();
370 }
371
372
373
374
375 public void undoLastChange() {
376
377 OceanusProfile myTask = getActiveTask();
378 myTask = myTask.startTask("unDoLastChange");
379
380
381 theData.undoLastChange();
382 myTask.end();
383
384
385 analyseData(false);
386
387
388 refreshViews();
389
390
391 myTask.end();
392 }
393
394
395
396
397 public void resetChanges() {
398
399 OceanusProfile myTask = getActiveTask();
400 myTask = myTask.startTask("resetChanges");
401
402
403 theData.resetChanges();
404 myTask.end();
405
406
407 analyseData(false);
408
409
410 refreshViews();
411
412
413 myTask.end();
414 }
415
416
417
418
419
420
421
422 public OceanusProfile getNewProfile(final String pTask) {
423 return theMetisToolkit.getNewProfile(pTask);
424 }
425
426
427
428
429
430
431 public OceanusProfile getActiveProfile() {
432 return theMetisToolkit.getActiveProfile();
433 }
434
435
436
437
438
439
440 public OceanusProfile getActiveTask() {
441 return theMetisToolkit.getActiveTask();
442 }
443 }