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.ui.mediaeditor;
35
36 import info.magnolia.event.EventBus;
37 import info.magnolia.event.ResettableEventBus;
38 import info.magnolia.event.SimpleEventBus;
39 import info.magnolia.i18nsystem.I18nizer;
40 import info.magnolia.i18nsystem.SimpleTranslator;
41 import info.magnolia.module.ModuleRegistry;
42 import info.magnolia.objectfactory.ComponentProvider;
43 import info.magnolia.registry.RegistrationException;
44 import info.magnolia.ui.actionbar.ActionbarPresenter;
45 import info.magnolia.ui.api.action.ActionExecutor;
46 import info.magnolia.ui.api.app.AppContext;
47 import info.magnolia.ui.api.ioc.UiContextScoped;
48 import info.magnolia.ui.framework.ioc.SessionStore;
49 import info.magnolia.ui.framework.ioc.UiContextBoundComponentProvider;
50 import info.magnolia.ui.framework.ioc.UiContextReference;
51 import info.magnolia.ui.mediaeditor.action.MediaEditorActionExecutor;
52 import info.magnolia.ui.mediaeditor.action.availability.MediaEditorAvailabilityChecker;
53 import info.magnolia.ui.mediaeditor.definition.MediaEditorDefinition;
54 import info.magnolia.ui.mediaeditor.event.MediaEditorCompletedEvent;
55 import info.magnolia.ui.mediaeditor.registry.MediaEditorRegistry;
56
57 import javax.inject.Inject;
58
59 import com.google.inject.Key;
60 import com.google.inject.name.Names;
61
62
63
64
65 @UiContextScoped
66 public class MediaEditorPresenterFactoryImpl implements MediaEditorPresenterFactory {
67
68 private ComponentProvider subAppComponentProvider;
69
70 private MediaEditorRegistry registry;
71
72 private I18nizer i18nizer;
73
74 private final SimpleTranslator i18n;
75
76 @Inject
77 public MediaEditorPresenterFactoryImpl(ComponentProvider subAppComponentProvider, MediaEditorRegistry registry, I18nizer i18nizer, SimpleTranslator i18n) {
78 this.subAppComponentProvider = subAppComponentProvider;
79 this.registry = registry;
80 this.i18nizer = i18nizer;
81 this.i18n = i18n;
82 }
83
84
85
86
87 @Deprecated
88 public MediaEditorPresenterFactoryImpl(ComponentProvider subAppComponentProvider, ModuleRegistry moduleRegistry, MediaEditorRegistry registry, I18nizer i18nizer, SimpleTranslator i18n) {
89 this(subAppComponentProvider, registry, i18nizer, i18n);
90 }
91
92 @Override
93 public MediaEditorPresenter getPresenterById(String id) {
94 return getPresenterByDefinition(createDefinition(id));
95 }
96
97 private MediaEditorDefinition createDefinition(String id) {
98 MediaEditorDefinition mediaEditorDefinition;
99 try {
100 mediaEditorDefinition = registry.get(id);
101 } catch (RegistrationException e1) {
102 throw new RuntimeException(e1);
103 }
104
105 if (mediaEditorDefinition == null) {
106 throw new IllegalArgumentException("No media editor definition registered for name [" + id + "]");
107 }
108 return i18nizer.decorate(mediaEditorDefinition);
109 }
110
111 private ComponentProvider createMediaEditorComponentProvider() {
112 return new UiContextBoundComponentProvider(getMediaEditorScopeKey());
113 }
114
115 private UiContextReference getMediaEditorScopeKey() {
116 return UiContextReference.ofView("mediaeditor", ((UiContextBoundComponentProvider) subAppComponentProvider).getUiContextReference());
117 }
118
119 @Override
120 public MediaEditorPresenter getPresenterByDefinition(MediaEditorDefinition definition) {
121 final EventBus eventBus = new ResettableEventBus(new SimpleEventBus());
122 final UiContextReference mediaEditorContextKey = getMediaEditorScopeKey();
123 SessionStore.access().createBeanStore(mediaEditorContextKey).put(Key.get(EventBus.class, Names.named(MediaEditorEventBus.NAME)), eventBus);
124
125 ComponentProvider mediaEditorComponentProvider = createMediaEditorComponentProvider();
126 AppContext appContext = mediaEditorComponentProvider.getComponent(AppContext.class);
127 MediaEditorView view = mediaEditorComponentProvider.getComponent(MediaEditorView.class);
128 ActionExecutor mediaActionExecutor = mediaEditorComponentProvider.getComponent(ActionExecutor.class);
129 ((MediaEditorActionExecutor) mediaActionExecutor).setDef(definition);
130
131 ActionbarPresenter actionBarPresenter = mediaEditorComponentProvider.getComponent(ActionbarPresenter.class);
132 MediaEditorAvailabilityChecker mediaEditorAvailabilityChecker = mediaEditorComponentProvider.getComponent(MediaEditorAvailabilityChecker.class);
133
134 final MediaEditorPresenter mediaEditorPresenter = new MediaEditorPresenterImpl(definition, eventBus, view, actionBarPresenter, appContext, i18n, mediaEditorAvailabilityChecker);
135
136 mediaEditorPresenter.addCompletionHandler(new MediaEditorCompletedEvent.Handler() {
137 @Override
138 public void onSubmit(MediaEditorCompletedEvent event) {
139 SessionStore.access().releaseBeanStore(mediaEditorContextKey);
140 }
141
142 @Override
143 public void onCancel(MediaEditorCompletedEvent event) {
144 SessionStore.access().releaseBeanStore(mediaEditorContextKey);
145 }
146 });
147
148 mediaEditorPresenter.setActionExecutor(mediaActionExecutor);
149 return mediaEditorPresenter;
150 }
151
152 }