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.cache.browser.app;
35
36 import info.magnolia.cache.browser.app.event.InitializeContainerAfterSuccessfulLoginEvent;
37 import info.magnolia.context.Context;
38 import info.magnolia.context.MgnlContext;
39 import info.magnolia.event.EventBus;
40 import info.magnolia.module.cache.app.CacheApp;
41 import info.magnolia.objectfactory.ComponentProvider;
42 import info.magnolia.ui.api.app.AppContext;
43 import info.magnolia.ui.api.app.AppEventBus;
44 import info.magnolia.ui.api.app.AppView;
45 import info.magnolia.ui.api.app.SubAppDescriptor;
46 import info.magnolia.ui.api.location.DefaultLocation;
47 import info.magnolia.ui.api.location.Location;
48 import info.magnolia.ui.contentapp.browser.BrowserLocation;
49 import info.magnolia.ui.dialog.formdialog.FormDialogPresenter;
50 import info.magnolia.ui.dialog.formdialog.FormDialogPresenterFactory;
51 import info.magnolia.ui.form.EditorCallback;
52
53 import javax.inject.Inject;
54 import javax.inject.Named;
55
56 import com.vaadin.data.util.PropertysetItem;
57
58
59
60
61 public class BrowserCacheApp extends CacheApp {
62
63 private static final String DIALOG_ID = "cache-browser-app:restLogin";
64
65 private final EventBus eventBus;
66 private final FormDialogPresenterFactory formDialogPresenterFactory;
67
68 @Inject
69 public BrowserCacheApp(AppContext appContext, AppView view, ComponentProvider componentProvider, @Named(AppEventBus.NAME) EventBus eventBus, FormDialogPresenterFactory formDialogPresenterFactory) {
70 super(appContext, view, componentProvider);
71 this.eventBus = eventBus;
72 this.formDialogPresenterFactory = formDialogPresenterFactory;
73 }
74
75 @Override
76 public void locationChanged(final Location location) {
77 if (location instanceof BrowserLocation) {
78 if (MgnlContext.hasAttribute("cache.browser.app.username", Context.SESSION_SCOPE) && MgnlContext.hasAttribute("cache.browser.app.password", Context.SESSION_SCOPE)) {
79 super.locationChanged(location);
80 } else {
81 final FormDialogPresenter formDialogPresenter = formDialogPresenterFactory.createFormDialogPresenter(DIALOG_ID);
82 final PropertysetItem item = new PropertysetItem();
83 formDialogPresenter.start(item, DIALOG_ID, getAppContext(), new EditorCallback() {
84 @Override
85 public void onSuccess(String s) {
86 BrowserCacheApp.super.locationChanged(location);
87 String username = (String) item.getItemProperty("username").getValue();
88 String password = (String) item.getItemProperty("password").getValue();
89 MgnlContext.setAttribute("cache.browser.app.username", username, Context.SESSION_SCOPE);
90 MgnlContext.setAttribute("cache.browser.app.password", password, Context.SESSION_SCOPE);
91 eventBus.fireEvent(new InitializeContainerAfterSuccessfulLoginEvent(username, password));
92 formDialogPresenter.closeDialog();
93 }
94
95 @Override
96 public void onCancel() {
97 SubAppDescriptor subAppDescriptor = getAppContext().getAppDescriptor().getSubApps().values().iterator().next();
98 BrowserCacheApp.super.locationChanged(new DefaultLocation(Location.LOCATION_TYPE_APP, getAppContext().getAppDescriptor().getName(), subAppDescriptor.getName()));
99 formDialogPresenter.closeDialog();
100 }
101 });
102 }
103 } else {
104 super.locationChanged(location);
105 }
106 }
107
108 @Override
109 public void stop() {
110 super.stop();
111 MgnlContext.removeAttribute("cache.browser.app.username", Context.SESSION_SCOPE);
112 MgnlContext.removeAttribute("cache.browser.app.password", Context.SESSION_SCOPE);
113 }
114 }