Project

General

Profile

Download (5.08 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.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.RedirectToLoginView;
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.StartRegistrationViewBean;
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(RedirectToLoginView.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 = true;
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, StartRegistrationViewBean.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
}
(8-8/9)