Merge branch 'phycobank' into develop
[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.context.ApplicationEventPublisher;
13 import org.springframework.context.annotation.Lazy;
14
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;
32
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;
41
42 /**
43 * @author a.kohlbecker
44 * @since Feb 24, 2017
45 *
46 */
47 @Theme("edit-valo")
48 @Title("Registration")
49 @SpringUI(path="registration")
50 @Viewport("width=device-width, initial-scale=1")
51 @Widgetset("eu.etaxonomy.cdm.vaadin.AppWidgetSet")
52 // @PreserveOnRefresh
53 // @Push
54 public class RegistrationUI extends UI {
55
56 private static final long serialVersionUID = -8626236111335323691L;
57
58 @Autowired
59 private ViewDisplay viewDisplay;
60
61 /**
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.
65 */
66 @SuppressWarnings("unused")
67 @Autowired
68 @Lazy
69 private RegistrationRequiredDataInserter dataInserter;
70
71 //---- pull into abstract super class ? ---------
72 @Autowired
73 SpringViewProvider viewProvider;
74
75 protected void configureAccessDeniedView() {
76 viewProvider.setAccessDeniedViewClass(LoginViewBean.class);
77 }
78 //---------------------------------------------
79
80 // public static final String INITIAL_VIEW = "workflow/edit/10";
81 public static final String INITIAL_VIEW = DashBoardView.NAME;
82 static boolean debugMode = false;
83
84 /*
85 * this HACKY solution forces the bean to be instantiated, TODO do it properly
86 */
87 // @Autowired
88 // MenuBeanDiscoveryBean bean;
89
90 @Autowired
91 private MainMenu mainMenu;
92
93 @Autowired
94 ApplicationEventPublisher eventBus;
95
96 public RegistrationUI() {
97
98 }
99
100 @Override
101 protected void init(VaadinRequest request) {
102
103 configureAccessDeniedView();
104
105 addStyleName(ValoTheme.UI_WITH_MENU);
106 Responsive.makeResponsive(this);
107
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);
113
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);
117
118 eventBus.publishEvent(new UIInitializedEvent());
119
120 String brand = "phycobank";
121 //TODO create annotation:
122 // @Styles(files={""}, branding="brand")
123 //
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);
129
130 //navigate to initial view
131 String state = pageFragmentAsState();
132
133 if(debugMode && state != null){
134 eventBus.publishEvent(new NavigationEvent(state));
135 } else {
136 eventBus.publishEvent(new NavigationEvent(INITIAL_VIEW));
137 }
138 }
139
140 /**
141 * @return
142 */
143 private String pageFragmentAsState() {
144 Page page = Page.getCurrent();
145 String fragment = page.getUriFragment();
146 String state = null;
147 if(fragment != null && fragment.startsWith("!")){
148 state = fragment.substring(1, fragment.length());
149 }
150 return state;
151 }
152 }