1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.mycore.common.events;
20
21 import java.io.IOException;
22 import java.nio.file.Files;
23 import java.nio.file.Path;
24 import java.nio.file.attribute.BasicFileAttributeView;
25 import java.nio.file.attribute.BasicFileAttributes;
26
27 import org.apache.logging.log4j.LogManager;
28 import org.apache.logging.log4j.Logger;
29 import org.mycore.datamodel.classifications2.MCRCategory;
30 import org.mycore.datamodel.metadata.MCRDerivate;
31 import org.mycore.datamodel.metadata.MCRObject;
32
33
34
35
36
37
38
39
40 public abstract class MCREventHandlerBase implements MCREventHandler {
41 private static Logger logger = LogManager.getLogger(MCREventHandlerBase.class);
42
43
44
45
46
47
48
49
50 public void doHandleEvent(MCREvent evt) {
51
52 if (evt.getObjectType() == MCREvent.ObjectType.OBJECT) {
53 MCRObject obj = (MCRObject) evt.get("object");
54 if (obj != null) {
55 logger.debug("{} handling {} {}", getClass().getName(), obj.getId(), evt.getEventType());
56 switch (evt.getEventType()) {
57 case CREATE:
58 handleObjectCreated(evt, obj);
59 break;
60 case UPDATE:
61 handleObjectUpdated(evt, obj);
62 break;
63 case DELETE:
64 handleObjectDeleted(evt, obj);
65 break;
66 case REPAIR:
67 handleObjectRepaired(evt, obj);
68 break;
69 case INDEX:
70 handleObjectIndex(evt, obj);
71 break;
72 default:
73 logger
74 .warn("Can't find method for an object data handler for event type {}", evt.getEventType());
75 break;
76 }
77 return;
78 }
79 logger.warn("Can't find method for " + evt.getObjectType() + " for event type {}", evt.getEventType());
80 return;
81 }
82
83 if (evt.getObjectType() == MCREvent.ObjectType.DERIVATE) {
84 MCRDerivate der = (MCRDerivate) evt.get("derivate");
85 if (der != null) {
86 logger.debug("{} handling {} {}", getClass().getName(), der.getId(), evt.getEventType());
87 switch (evt.getEventType()) {
88 case CREATE:
89 handleDerivateCreated(evt, der);
90 break;
91 case UPDATE:
92 handleDerivateUpdated(evt, der);
93 break;
94 case DELETE:
95 handleDerivateDeleted(evt, der);
96 break;
97 case REPAIR:
98 handleDerivateRepaired(evt, der);
99 break;
100 case INDEX:
101 updateDerivateFileIndex(evt, der);
102 break;
103 default:
104 logger
105 .warn("Can't find method for a derivate data handler for event type {}",
106 evt.getEventType());
107 break;
108 }
109 return;
110 }
111 logger.warn("Can't find method for " + evt.getObjectType() + " for event type {}", evt.getEventType());
112 return;
113 }
114
115 if (evt.getObjectType() == MCREvent.ObjectType.PATH) {
116 Path path = (Path) evt.get(MCREvent.PATH_KEY);
117 if (path != null) {
118 if (!path.isAbsolute()) {
119 logger.warn("Cannot handle path events on non absolute paths: {}", path);
120 }
121 logger.debug("{} handling {} {}", getClass().getName(), path, evt.getEventType());
122 BasicFileAttributes attrs = (BasicFileAttributes) evt.get(MCREvent.FILEATTR_KEY);
123 if (attrs == null && evt.getEventType() != MCREvent.EventType.DELETE) {
124 logger.warn("BasicFileAttributes for {} was not given. Resolving now.", path);
125 try {
126 attrs = Files.getFileAttributeView(path, BasicFileAttributeView.class).readAttributes();
127 } catch (IOException e) {
128 logger.error("Could not get BasicFileAttributes from path: {}", path, e);
129 }
130 }
131 switch (evt.getEventType()) {
132 case CREATE:
133 handlePathCreated(evt, path, attrs);
134 break;
135 case UPDATE:
136 handlePathUpdated(evt, path, attrs);
137 break;
138 case DELETE:
139 handlePathDeleted(evt, path, attrs);
140 break;
141 case REPAIR:
142 handlePathRepaired(evt, path, attrs);
143 break;
144 case INDEX:
145 updatePathIndex(evt, path, attrs);
146 break;
147 default:
148 logger.warn("Can't find method for Path data handler for event type {}", evt.getEventType());
149 break;
150 }
151 return;
152 }
153 logger.warn("Can't find method for " + evt.getObjectType() + " for event type {}", evt.getEventType());
154 return;
155 }
156
157 if (evt.getObjectType() == MCREvent.ObjectType.CLASS) {
158 MCRCategory cl = (MCRCategory) evt.get("class");
159 if (cl != null) {
160 logger.debug("{} handling {} {}", getClass().getName(), cl.getId(), evt.getEventType());
161 switch (evt.getEventType()) {
162 case CREATE:
163 handleClassificationCreated(evt, cl);
164 break;
165 case UPDATE:
166 handleClassificationUpdated(evt, cl);
167 break;
168 case DELETE:
169 handleClassificationDeleted(evt, cl);
170 break;
171 case REPAIR:
172 handleClassificationRepaired(evt, cl);
173 break;
174 default:
175 logger.warn("Can't find method for a classification data handler for event type {}",
176 evt.getEventType());
177 break;
178 }
179 return;
180 }
181 logger.warn("Can't find method for " + evt.getObjectType() + " for event type {}", evt.getEventType());
182 }
183
184 }
185
186
187
188
189
190
191
192
193 public void undoHandleEvent(MCREvent evt) {
194
195 if (evt.getObjectType() == MCREvent.ObjectType.OBJECT) {
196 MCRObject obj = (MCRObject) evt.get("object");
197 if (obj != null) {
198 logger.debug("{} handling {} {}", getClass().getName(), obj.getId(), evt.getEventType());
199 switch (evt.getEventType()) {
200 case CREATE:
201 undoObjectCreated(evt, obj);
202 break;
203 case UPDATE:
204 undoObjectUpdated(evt, obj);
205 break;
206 case DELETE:
207 undoObjectDeleted(evt, obj);
208 break;
209 case REPAIR:
210 undoObjectRepaired(evt, obj);
211 break;
212 default:
213 logger
214 .warn("Can't find method for an object data handler for event type {}", evt.getEventType());
215 break;
216 }
217 return;
218 }
219 logger.warn("Can't find method for " + evt.getObjectType() + " for event type {}", evt.getEventType());
220 return;
221 }
222
223 if (evt.getObjectType() == MCREvent.ObjectType.DERIVATE) {
224 MCRDerivate der = (MCRDerivate) evt.get("derivate");
225 if (der != null) {
226 logger.debug("{} handling {}{}", getClass().getName(), der.getId(), evt.getEventType());
227 switch (evt.getEventType()) {
228 case CREATE:
229 undoDerivateCreated(evt, der);
230 break;
231 case UPDATE:
232 undoDerivateUpdated(evt, der);
233 break;
234 case DELETE:
235 undoDerivateDeleted(evt, der);
236 break;
237 case REPAIR:
238 undoDerivateRepaired(evt, der);
239 break;
240 default:
241 logger
242 .warn("Can't find method for a derivate data handler for event type {}",
243 evt.getEventType());
244 break;
245 }
246 return;
247 }
248 logger.warn("Can't find method for " + evt.getObjectType() + " for event type {}", evt.getEventType());
249 return;
250 }
251
252 if (evt.getObjectType() == MCREvent.ObjectType.PATH) {
253 Path path = (Path) evt.get(MCREvent.PATH_KEY);
254 if (path != null) {
255 if (!path.isAbsolute()) {
256 logger.warn("Cannot handle path events on non absolute paths: {}", path);
257 }
258 logger.debug("{} handling {} {}", getClass().getName(), path, evt.getEventType());
259 BasicFileAttributes attrs = (BasicFileAttributes) evt.get(MCREvent.FILEATTR_KEY);
260 if (attrs == null && evt.getEventType() != MCREvent.EventType.DELETE) {
261 logger.warn("BasicFileAttributes for {} was not given. Resolving now.", path);
262 try {
263 attrs = Files.getFileAttributeView(path, BasicFileAttributeView.class).readAttributes();
264 } catch (IOException e) {
265 logger.error("Could not get BasicFileAttributes from path: {}", path, e);
266 }
267 }
268 switch (evt.getEventType()) {
269 case CREATE:
270 undoPathCreated(evt, path, attrs);
271 break;
272 case UPDATE:
273 undoPathUpdated(evt, path, attrs);
274 break;
275 case DELETE:
276 undoPathDeleted(evt, path, attrs);
277 break;
278 case REPAIR:
279 undoPathRepaired(evt, path, attrs);
280 break;
281 default:
282 logger.warn("Can't find method for Path data handler for event type {}", evt.getEventType());
283 break;
284 }
285 return;
286 }
287 logger.warn("Can't find method for " + evt.getObjectType() + " for event type {}", evt.getEventType());
288 return;
289 }
290
291 if (evt.getObjectType() == MCREvent.ObjectType.CLASS) {
292 MCRCategory obj = (MCRCategory) evt.get(MCREvent.CLASS_KEY);
293 if (obj != null) {
294 logger.debug("{} handling {} {}", getClass().getName(), obj.getId(), evt.getEventType());
295 switch (evt.getEventType()) {
296 case CREATE:
297 undoClassificationCreated(evt, obj);
298 break;
299 case UPDATE:
300 undoClassificationUpdated(evt, obj);
301 break;
302 case DELETE:
303 undoClassificationDeleted(evt, obj);
304 break;
305 case REPAIR:
306 undoClassificationRepaired(evt, obj);
307 break;
308 default:
309 logger.warn("Can't find method for an classification data handler for event type {}",
310 evt.getEventType());
311 break;
312 }
313 return;
314 }
315 logger.warn("Can't find method for " + evt.getObjectType() + " for event type {}", evt.getEventType());
316 }
317
318 }
319
320
321 public void doNothing(MCREvent evt, Object obj) {
322 logger.debug("{} does nothing on {} {} {}", getClass().getName(), evt.getEventType(), evt.getObjectType(),
323 obj.getClass().getName());
324 }
325
326
327
328
329
330
331
332
333
334
335 protected void handleClassificationCreated(MCREvent evt, MCRCategory obj) {
336 doNothing(evt, obj);
337 }
338
339
340
341
342
343
344
345
346
347
348 protected void handleClassificationUpdated(MCREvent evt, MCRCategory obj) {
349 doNothing(evt, obj);
350 }
351
352
353
354
355
356
357
358
359
360
361 protected void handleClassificationDeleted(MCREvent evt, MCRCategory obj) {
362 doNothing(evt, obj);
363 }
364
365
366
367
368
369
370
371
372
373
374 protected void handleClassificationRepaired(MCREvent evt, MCRCategory obj) {
375 doNothing(evt, obj);
376 }
377
378
379
380
381
382
383
384
385
386
387 protected void handleObjectCreated(MCREvent evt, MCRObject obj) {
388 doNothing(evt, obj);
389 }
390
391
392
393
394
395
396
397
398
399
400 protected void handleObjectUpdated(MCREvent evt, MCRObject obj) {
401 doNothing(evt, obj);
402 }
403
404
405
406
407
408
409
410
411
412
413 protected void handleObjectDeleted(MCREvent evt, MCRObject obj) {
414 doNothing(evt, obj);
415 }
416
417
418
419
420
421
422
423
424
425
426 protected void handleObjectRepaired(MCREvent evt, MCRObject obj) {
427 doNothing(evt, obj);
428 }
429
430 protected void handleObjectIndex(MCREvent evt, MCRObject obj) {
431 doNothing(evt, obj);
432 }
433
434
435
436
437
438
439
440
441
442
443 protected void handleDerivateCreated(MCREvent evt, MCRDerivate der) {
444 doNothing(evt, der);
445 }
446
447
448
449
450
451
452
453
454
455
456 protected void handleDerivateUpdated(MCREvent evt, MCRDerivate der) {
457 doNothing(evt, der);
458 }
459
460
461
462
463
464
465
466
467
468
469 protected void handleDerivateDeleted(MCREvent evt, MCRDerivate der) {
470 doNothing(evt, der);
471 }
472
473
474
475
476
477
478
479
480
481
482 protected void handleDerivateRepaired(MCREvent evt, MCRDerivate der) {
483 doNothing(evt, der);
484 }
485
486 protected void handlePathUpdated(MCREvent evt, Path path, BasicFileAttributes attrs) {
487 doNothing(evt, path);
488 }
489
490 protected void handlePathDeleted(MCREvent evt, Path path, BasicFileAttributes attrs) {
491 doNothing(evt, path);
492 }
493
494 protected void handlePathRepaired(MCREvent evt, Path path, BasicFileAttributes attrs) {
495 doNothing(evt, path);
496 }
497
498 protected void updatePathIndex(MCREvent evt, Path path, BasicFileAttributes attrs) {
499 doNothing(evt, path);
500 }
501
502 protected void handlePathCreated(MCREvent evt, Path path, BasicFileAttributes attrs) {
503 doNothing(evt, path);
504 }
505
506
507
508
509
510
511
512
513
514
515 protected void undoClassificationCreated(MCREvent evt, MCRCategory obj) {
516 doNothing(evt, obj);
517 }
518
519
520
521
522
523
524
525
526
527
528 protected void undoClassificationUpdated(MCREvent evt, MCRCategory obj) {
529 doNothing(evt, obj);
530 }
531
532
533
534
535
536
537
538
539
540
541 protected void undoClassificationDeleted(MCREvent evt, MCRCategory obj) {
542 doNothing(evt, obj);
543 }
544
545
546
547
548
549
550
551
552
553
554 protected void undoClassificationRepaired(MCREvent evt, MCRCategory obj) {
555 doNothing(evt, obj);
556 }
557
558
559
560
561
562
563
564
565
566
567 protected void undoObjectCreated(MCREvent evt, MCRObject obj) {
568 doNothing(evt, obj);
569 }
570
571
572
573
574
575
576
577
578
579
580 protected void undoObjectUpdated(MCREvent evt, MCRObject obj) {
581 doNothing(evt, obj);
582 }
583
584
585
586
587
588
589
590
591
592
593 protected void undoObjectDeleted(MCREvent evt, MCRObject obj) {
594 doNothing(evt, obj);
595 }
596
597
598
599
600
601
602
603
604
605
606 protected void undoObjectRepaired(MCREvent evt, MCRObject obj) {
607 doNothing(evt, obj);
608 }
609
610
611
612
613
614
615
616
617
618
619 protected void undoDerivateCreated(MCREvent evt, MCRDerivate der) {
620 doNothing(evt, der);
621 }
622
623
624
625
626
627
628
629
630
631
632 protected void undoDerivateUpdated(MCREvent evt, MCRDerivate der) {
633 doNothing(evt, der);
634 }
635
636
637
638
639
640
641
642
643
644
645 protected void undoDerivateDeleted(MCREvent evt, MCRDerivate der) {
646 doNothing(evt, der);
647 }
648
649
650
651
652
653
654
655
656
657
658 protected void undoDerivateRepaired(MCREvent evt, MCRDerivate der) {
659 doNothing(evt, der);
660 }
661
662 protected void undoPathCreated(MCREvent evt, Path path, BasicFileAttributes attrs) {
663 doNothing(evt, path);
664 }
665
666 protected void undoPathUpdated(MCREvent evt, Path path, BasicFileAttributes attrs) {
667 doNothing(evt, path);
668 }
669
670 protected void undoPathDeleted(MCREvent evt, Path path, BasicFileAttributes attrs) {
671 doNothing(evt, path);
672 }
673
674 protected void undoPathRepaired(MCREvent evt, Path path, BasicFileAttributes attrs) {
675 doNothing(evt, path);
676 }
677
678
679
680
681 protected void updateDerivateFileIndex(MCREvent evt, MCRDerivate file) {
682 doNothing(evt, file);
683 }
684 }