2 * Copyright (C) 2017 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.cdm
.vaadin
.ui
;
11 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
12 import org
.springframework
.context
.ApplicationEventPublisher
;
13 import org
.springframework
.context
.annotation
.Lazy
;
15 import com
.vaadin
.annotations
.Theme
;
16 import com
.vaadin
.annotations
.Title
;
17 import com
.vaadin
.annotations
.Viewport
;
18 import com
.vaadin
.annotations
.Widgetset
;
19 import com
.vaadin
.navigator
.ViewDisplay
;
20 import com
.vaadin
.server
.ExternalResource
;
21 import com
.vaadin
.server
.FontAwesome
;
22 import com
.vaadin
.server
.Page
;
23 import com
.vaadin
.server
.Resource
;
24 import com
.vaadin
.server
.Responsive
;
25 import com
.vaadin
.server
.VaadinRequest
;
26 import com
.vaadin
.spring
.annotation
.SpringUI
;
27 import com
.vaadin
.spring
.navigator
.SpringViewProvider
;
28 import com
.vaadin
.ui
.Component
;
29 import com
.vaadin
.ui
.Label
;
30 import com
.vaadin
.ui
.UI
;
31 import com
.vaadin
.ui
.themes
.ValoTheme
;
33 import eu
.etaxonomy
.cdm
.dataInserter
.RegistrationRequiredDataInserter
;
34 import eu
.etaxonomy
.cdm
.vaadin
.view
.LoginViewBean
;
35 import eu
.etaxonomy
.cdm
.vaadin
.view
.registration
.DashBoardView
;
36 import eu
.etaxonomy
.cdm
.vaadin
.view
.registration
.ListViewBean
;
37 import eu
.etaxonomy
.cdm
.vaadin
.view
.registration
.StartRegistrationView
;
38 import eu
.etaxonomy
.vaadin
.ui
.MainMenu
;
39 import eu
.etaxonomy
.vaadin
.ui
.UIInitializedEvent
;
40 import eu
.etaxonomy
.vaadin
.ui
.navigation
.NavigationEvent
;
43 * @author a.kohlbecker
48 @Title("Registration")
49 @SpringUI(path
="registration")
50 @Viewport("width=device-width, initial-scale=1")
51 @Widgetset("eu.etaxonomy.cdm.vaadin.AppWidgetSet")
54 public class RegistrationUI
extends UI
{
56 private static final long serialVersionUID
= -8626236111335323691L;
59 private ViewDisplay viewDisplay
;
62 * The RegistrationDefaultDataInserter is not used in the ui directly
63 * but will as a ApplicationListener for ContextRefreshedEvents insert
64 * data required for the registration application into the database.
66 @SuppressWarnings("unused")
69 private RegistrationRequiredDataInserter dataInserter
;
71 //---- pull into abstract super class ? ---------
73 SpringViewProvider viewProvider
;
75 protected void configureAccessDeniedView() {
76 viewProvider
.setAccessDeniedViewClass(LoginViewBean
.class);
78 //---------------------------------------------
80 // public static final String INITIAL_VIEW = "workflow/edit/10";
81 public static final String INITIAL_VIEW
= DashBoardView
.NAME
;
82 static boolean debugMode
= false;
85 * this HACKY solution forces the bean to be instantiated, TODO do it properly
88 // MenuBeanDiscoveryBean bean;
91 private MainMenu mainMenu
;
94 ApplicationEventPublisher eventBus
;
96 public RegistrationUI() {
101 protected void init(VaadinRequest request
) {
103 configureAccessDeniedView();
105 addStyleName(ValoTheme
.UI_WITH_MENU
);
106 Responsive
.makeResponsive(this);
108 setContent((Component
) viewDisplay
);
109 Label phycoBankLogo
= new Label("PhycoBank");
110 phycoBankLogo
.addStyleName("phycobank-green");
111 phycoBankLogo
.addStyleName(ValoTheme
.LABEL_HUGE
);
112 mainMenu
.addMenuComponent(phycoBankLogo
);
114 mainMenu
.addMenuItem("New", FontAwesome
.EDIT
, StartRegistrationView
.NAME
);
115 mainMenu
.addMenuItem("Continue", FontAwesome
.ARROW_RIGHT
, ListViewBean
.NAME
+ "/" + ListViewBean
.OPTION_IN_PROGRESS
);
116 mainMenu
.addMenuItem("List", FontAwesome
.TASKS
, ListViewBean
.NAME
+ "/" + ListViewBean
.OPTION_ALL
);
118 eventBus
.publishEvent(new UIInitializedEvent());
120 String brand
= "phycobank";
121 //TODO create annotation:
122 // @Styles(files={""}, branding="brand")
124 // the branding can either be specified or can be read from the properties file in .cdmLibrary/remote-webapp/{instance-name}-app.properties
125 // See CdmUtils for appropriate methods to access this folder
126 // the 'vaadin://' protocol refers to the VAADIN folder
127 Resource registryCssFile
= new ExternalResource("vaadin://branding/" + brand
+ "/css/branding.css");
128 Page
.getCurrent().getStyles().add(registryCssFile
);
130 //navigate to initial view
131 String state
= pageFragmentAsState();
133 if(debugMode
&& state
!= null){
134 eventBus
.publishEvent(new NavigationEvent(state
));
136 eventBus
.publishEvent(new NavigationEvent(INITIAL_VIEW
));
143 private String
pageFragmentAsState() {
144 Page page
= Page
.getCurrent();
145 String fragment
= page
.getUriFragment();
147 if(fragment
!= null && fragment
.startsWith("!")){
148 state
= fragment
.substring(1, fragment
.length());