fix #7231 replacing SpringApplicationEventBus by scoped Vaadin4Spring Event Bus
[cdm-vaadin.git] / src / main / java / eu / etaxonomy / cdm / vaadin / ui / RegistrationUI.java
1 /**
2 * Copyright (C) 2017 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.cdm.vaadin.ui;
10
11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.beans.factory.annotation.Qualifier;
13 import org.vaadin.spring.events.EventBus.UIEventBus;
14
15 import com.flowingcode.vaadin.addons.errorwindow.WindowErrorHandler;
16 import com.vaadin.annotations.Theme;
17 import com.vaadin.annotations.Title;
18 import com.vaadin.annotations.Viewport;
19 import com.vaadin.annotations.Widgetset;
20 import com.vaadin.navigator.ViewDisplay;
21 import com.vaadin.server.ExternalResource;
22 import com.vaadin.server.FontAwesome;
23 import com.vaadin.server.Page;
24 import com.vaadin.server.Resource;
25 import com.vaadin.server.Responsive;
26 import com.vaadin.server.VaadinRequest;
27 import com.vaadin.spring.annotation.SpringUI;
28 import com.vaadin.spring.navigator.SpringViewProvider;
29 import com.vaadin.ui.Component;
30 import com.vaadin.ui.Label;
31 import com.vaadin.ui.UI;
32 import com.vaadin.ui.themes.ValoTheme;
33
34 import eu.etaxonomy.cdm.vaadin.debug.EntityCacheDebugger;
35 import eu.etaxonomy.cdm.vaadin.toolbar.Toolbar;
36 import eu.etaxonomy.cdm.vaadin.view.RedirectToLoginView;
37 import eu.etaxonomy.cdm.vaadin.view.registration.DashBoardView;
38 import eu.etaxonomy.cdm.vaadin.view.registration.ListView;
39 import eu.etaxonomy.cdm.vaadin.view.registration.ListViewBean;
40 import eu.etaxonomy.cdm.vaadin.view.registration.StartRegistrationViewBean;
41 import eu.etaxonomy.vaadin.ui.MainMenu;
42 import eu.etaxonomy.vaadin.ui.UIInitializedEvent;
43 import eu.etaxonomy.vaadin.ui.navigation.NavigationManagerBean;
44 import eu.etaxonomy.vaadin.ui.view.ToolbarDisplay;
45
46 /**
47 * @author a.kohlbecker
48 * @since Feb 24, 2017
49 *
50 */
51 @Theme("edit-valo")
52 @Title("Registration")
53 @SpringUI(path="registration")
54 @Viewport("width=device-width, initial-scale=1")
55 @Widgetset("eu.etaxonomy.cdm.vaadin.AppWidgetSet")
56 // @PreserveOnRefresh
57 // @Push
58 public class RegistrationUI extends UI {
59
60 private static final long serialVersionUID = -8626236111335323691L;
61
62 @Autowired
63 @Qualifier("viewAreaBean")
64 private ViewDisplay viewDisplay;
65
66 //---- pull into abstract super class ? ---------
67 @Autowired
68 SpringViewProvider viewProvider;
69
70 @Autowired
71 NavigationManagerBean navigator;
72
73 @Autowired(required = false)
74 EntityCacheDebugger entityCacheDebugger = null;
75
76 @Autowired
77 UIEventBus uiEventBus;
78
79 /*
80 * this HACKY solution forces the bean to be instantiated, TODO do it properly
81 */
82 // @Autowired
83 // MenuBeanDiscoveryBean bean;
84
85 @Autowired
86 private MainMenu mainMenu;
87
88 /*
89 * this HACKY solution forces the bean to be instantiated, TODO do it properly
90 */
91 // @Autowired
92 // MenuBeanDiscoveryBean bean;
93
94 @Autowired
95 @Qualifier("registrationToolbar")
96 private Toolbar toolbar;
97
98 //---------------------------------------------
99
100 public static final String INITIAL_VIEW = DashBoardView.NAME;
101
102 protected void configureAccessDeniedView() {
103 viewProvider.setAccessDeniedViewClass(RedirectToLoginView.class);
104 }
105
106 /**
107 * @return
108 */
109 private String pageFragmentAsState() {
110 Page page = Page.getCurrent();
111 String fragment = page.getUriFragment();
112 String state = null;
113 if(fragment != null && fragment.startsWith("!")){
114 state = fragment.substring(1, fragment.length());
115 }
116 return state;
117 }
118
119 //---------------------------------------------
120
121
122
123
124 /*
125 * this HACKY solution forces the bean to be instantiated, TODO do it properly
126 */
127 // @Autowired
128 // MenuBeanDiscoveryBean bean;
129
130 public RegistrationUI() {
131
132 }
133
134 @Override
135 protected void init(VaadinRequest request) {
136
137 setErrorHandler(new WindowErrorHandler(this, "Please contact the editsupport@bgbm.org for more information.</br></br>"
138 + "<i>To help analyzing the problem please describe your actions that lead to this error and provide the error details from below in your email. "
139 + "You also might want to add a sreenshot of the browser page in error.</i>"));
140
141 navigator.setViewDisplay(viewDisplay);
142 configureAccessDeniedView();
143
144 addStyleName(ValoTheme.UI_WITH_MENU);
145 Responsive.makeResponsive(this);
146
147 setContent((Component) viewDisplay);
148 Label phycoBankLogo = new Label("PhycoBank");
149 phycoBankLogo.addStyleName("phycobank-green");
150 phycoBankLogo.addStyleName(ValoTheme.LABEL_HUGE);
151 mainMenu.addMenuComponent(phycoBankLogo);
152
153 mainMenu.addMenuItem("New", FontAwesome.EDIT, StartRegistrationViewBean.NAME );
154 mainMenu.addMenuItem("Continue", FontAwesome.ARROW_RIGHT, ListViewBean.NAME + "/" + ListView.Mode.inProgress.name());
155 mainMenu.addMenuItem("List", FontAwesome.TASKS, ListViewBean.NAME + "/" + ListView.Mode.all.name());
156
157 if(ToolbarDisplay.class.isAssignableFrom(viewDisplay.getClass())){
158 ((ToolbarDisplay)viewDisplay).setToolbar(toolbar);
159 }
160
161
162 uiEventBus.publish(this, new UIInitializedEvent());
163
164 String brand = "phycobank";
165 //TODO create annotation:
166 // @Styles(files={""}, branding="brand")
167 //
168 // the branding can either be specified or can be read from the properties file in .cdmLibrary/remote-webapp/{instance-name}-app.properties
169 // See CdmUtils for appropriate methods to access this folder
170 // the 'vaadin://' protocol refers to the VAADIN folder
171 Resource registryCssFile = new ExternalResource("vaadin://branding/" + brand + "/css/branding.css");
172 Page.getCurrent().getStyles().add(registryCssFile);
173
174 navigator.setDefaultViewName(INITIAL_VIEW);
175
176 if(entityCacheDebugger != null){
177 addShortcutListener(entityCacheDebugger.getShortcutListener());
178 }
179 //navigate to initial view
180 // String state = pageFragmentAsState();
181
182
183 // if(state == null){
184 // // the case when state != null is handled in the UI base class
185 // eventBus.publishEvent(new NavigationEvent(INITIAL_VIEW));
186 // }
187 }
188 }