1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.jcrbrowser.app.observation;
35
36 import info.magnolia.ui.api.ioc.SubAppScoped;
37 import info.magnolia.ui.contentapp.observation.JcrDataSourceObservation;
38 import info.magnolia.ui.contentapp.observation.JcrObservation;
39 import info.magnolia.ui.datasource.jcr.JcrDatasourceDefinition;
40 import info.magnolia.ui.observation.DatasourceObservation;
41
42 import java.util.ArrayList;
43 import java.util.Collection;
44
45 import javax.inject.Inject;
46
47 import com.vaadin.shared.Registration;
48 import com.vaadin.ui.UI;
49
50
51
52
53 @SubAppScoped
54 public class JcrManualDataSourceObservation extends JcrDataSourceObservation implements DatasourceObservation.Manual {
55
56 private final UI ui;
57 private final Collection<Runnable> actions = new ArrayList<>();
58
59 @Inject
60 JcrManualDataSourceObservation(JcrDatasourceDefinition datasourceDefinition, JcrObservation jcrObservation, UI ui) {
61 super(datasourceDefinition, jcrObservation, ui);
62 this.ui = ui;
63 }
64
65 @Override
66 public Registration register(Runnable action) {
67 actions.add(action);
68 return super.register(action);
69 }
70
71 @Override
72 public void trigger() {
73 destroy();
74 actions.forEach(super::register);
75
76 if (!ui.isAttached()) {
77 return;
78 }
79 actions.forEach(observationAction -> ui.access(() -> {
80 observationAction.run();
81 ui.push();
82 }));
83 }
84 }