Project

General

Profile

Download (6.24 KB) Statistics
| Branch: | Tag: | Revision:
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.server.VaadinSession;
28
import com.vaadin.spring.annotation.SpringUI;
29
import com.vaadin.spring.navigator.SpringViewProvider;
30
import com.vaadin.ui.Component;
31
import com.vaadin.ui.Label;
32
import com.vaadin.ui.UI;
33
import com.vaadin.ui.themes.ValoTheme;
34

    
35
import eu.etaxonomy.cdm.vaadin.debug.EntityCacheDebugger;
36
import eu.etaxonomy.cdm.vaadin.event.error.DelegatingErrorHandler;
37
import eu.etaxonomy.cdm.vaadin.event.error.ErrorTypeErrorHandlerWrapper;
38
import eu.etaxonomy.cdm.vaadin.toolbar.Toolbar;
39
import eu.etaxonomy.cdm.vaadin.view.RedirectToLoginView;
40
import eu.etaxonomy.cdm.vaadin.view.registration.DashBoardView;
41
import eu.etaxonomy.cdm.vaadin.view.registration.ListView;
42
import eu.etaxonomy.cdm.vaadin.view.registration.ListViewBean;
43
import eu.etaxonomy.cdm.vaadin.view.registration.StartRegistrationViewBean;
44
import eu.etaxonomy.vaadin.ui.MainMenu;
45
import eu.etaxonomy.vaadin.ui.UIInitializedEvent;
46
import eu.etaxonomy.vaadin.ui.navigation.NavigationManagerBean;
47
import eu.etaxonomy.vaadin.ui.view.ToolbarDisplay;
48

    
49
/**
50
 * @author a.kohlbecker
51
 * @since Feb 24, 2017
52
 *
53
 */
54
@Theme("edit-valo")
55
@Title("Registration")
56
@SpringUI(path="registration")
57
@Viewport("width=device-width, initial-scale=1")
58
@Widgetset("eu.etaxonomy.cdm.vaadin.AppWidgetSet")
59
// @PreserveOnRefresh
60
// @Push
61
public class RegistrationUI extends UI {
62

    
63
    private static final long serialVersionUID = -8626236111335323691L;
64

    
65
    @Autowired
66
    @Qualifier("viewAreaBean")
67
    private ViewDisplay viewDisplay;
68

    
69
    //---- pull into abstract super class ? ---------
70
    @Autowired
71
    SpringViewProvider viewProvider;
72

    
73
    @Autowired
74
    NavigationManagerBean navigator;
75

    
76
    @Autowired(required = false)
77
    EntityCacheDebugger entityCacheDebugger = null;
78

    
79
    @Autowired
80
    UIEventBus uiEventBus;
81

    
82

    
83
    @Autowired
84
    private MainMenu mainMenu;
85

    
86
    @Autowired
87
    @Qualifier("registrationToolbar")
88
    private Toolbar toolbar;
89

    
90
    //---------------------------------------------
91

    
92
    public static final String INITIAL_VIEW =  DashBoardView.NAME;
93

    
94
    protected void configureAccessDeniedView() {
95
        viewProvider.setAccessDeniedViewClass(RedirectToLoginView.class);
96
    }
97

    
98
    /**
99
     * @return
100
     */
101
    private String pageFragmentAsState() {
102
        Page page = Page.getCurrent();
103
        String fragment = page.getUriFragment();
104
        String state = null;
105
        if(fragment != null && fragment.startsWith("!")){
106
            state = fragment.substring(1, fragment.length());
107
        }
108
        return state;
109
    }
110

    
111
    //---------------------------------------------
112

    
113
    public RegistrationUI() {
114

    
115
    }
116

    
117
    @Override
118
    protected void init(VaadinRequest request) {
119

    
120
        DelegatingErrorHandler delegatingErrorHander = new DelegatingErrorHandler();
121
        WindowErrorHandler errorHandler = new WindowErrorHandler(this, RegistrationUIDefaults.ERROR_CONTACT_MESSAGE_LINE + "</br></br>"
122
                + "<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. "
123
                + "You also might want to add a sreenshot of the browser page in error.</i>");
124
        delegatingErrorHander.registerHandler(new ErrorTypeErrorHandlerWrapper<Exception>(Exception.class, errorHandler));
125
        setErrorHandler(delegatingErrorHander);
126
        VaadinSession.getCurrent().setErrorHandler(delegatingErrorHander);
127

    
128
        navigator.setViewDisplay(viewDisplay);
129
        configureAccessDeniedView();
130

    
131
        addStyleName(ValoTheme.UI_WITH_MENU);
132
        Responsive.makeResponsive(this);
133

    
134
        setContent((Component) viewDisplay);
135
        Label phycoBankLogo = new Label("PhycoBank");
136
        phycoBankLogo.addStyleName("phycobank-green");
137
        phycoBankLogo.addStyleName(ValoTheme.LABEL_HUGE);
138
        mainMenu.addMenuComponent(phycoBankLogo);
139

    
140
        mainMenu.addMenuItem("New", FontAwesome.EDIT, StartRegistrationViewBean.NAME );
141
        mainMenu.addMenuItem("Continue", FontAwesome.ARROW_RIGHT, ListViewBean.NAME + "/" + ListView.Mode.inProgress.name());
142
        mainMenu.addMenuItem("List", FontAwesome.TASKS, ListViewBean.NAME + "/" + ListView.Mode.all.name());
143

    
144
        if(ToolbarDisplay.class.isAssignableFrom(viewDisplay.getClass())){
145
            ((ToolbarDisplay)viewDisplay).setToolbar(toolbar);
146
        }
147

    
148

    
149
        uiEventBus.publish(this, new UIInitializedEvent());
150

    
151
        String brand = "phycobank";
152
        //TODO create annotation:
153
        // @Styles(files={""}, branding="brand")
154
        //
155
        // the branding can either be specified or can be read from the properties file in .cdmLibrary/remote-webapp/{instance-name}-app.properties
156
        // See CdmUtils for appropriate methods to access this folder
157
        // the 'vaadin://' protocol refers to the VAADIN folder
158
        Resource registryCssFile = new ExternalResource("vaadin://branding/" + brand + "/css/branding.css");
159
        Page.getCurrent().getStyles().add(registryCssFile);
160

    
161
        navigator.setDefaultViewName(INITIAL_VIEW);
162

    
163
        if(entityCacheDebugger != null){
164
            addShortcutListener(entityCacheDebugger.getShortcutListener());
165
        }
166
        //navigate to initial view
167
//        String state = pageFragmentAsState();
168

    
169

    
170
//        if(state == null){
171
//            // the case when state != null is handled in the UI base class
172
//            eventBus.publishEvent(new NavigationEvent(INITIAL_VIEW));
173
//        }
174
    }
175

    
176
}
(6-6/8)