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