package eu.etaxonomy.cdm.vaadin.ui;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.beans.factory.annotation.Qualifier;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.Title;
import com.vaadin.annotations.Viewport;
import com.vaadin.annotations.Widgetset;
import com.vaadin.navigator.ViewDisplay;
-import com.vaadin.server.ExternalResource;
import com.vaadin.server.FontAwesome;
-import com.vaadin.server.Page;
-import com.vaadin.server.Resource;
-import com.vaadin.server.Responsive;
import com.vaadin.server.VaadinRequest;
import com.vaadin.spring.annotation.SpringUI;
-import com.vaadin.spring.navigator.SpringViewProvider;
import com.vaadin.ui.Component;
import com.vaadin.ui.Label;
-import com.vaadin.ui.UI;
import com.vaadin.ui.themes.ValoTheme;
-import eu.etaxonomy.cdm.vaadin.view.RedirectToLoginView;
+import eu.etaxonomy.cdm.vaadin.debug.EntityCacheDebugger;
+import eu.etaxonomy.cdm.vaadin.toolbar.Toolbar;
+import eu.etaxonomy.cdm.vaadin.view.name.TaxonNamePopupEditor;
import eu.etaxonomy.cdm.vaadin.view.registration.DashBoardView;
+import eu.etaxonomy.cdm.vaadin.view.registration.ListView;
import eu.etaxonomy.cdm.vaadin.view.registration.ListViewBean;
import eu.etaxonomy.cdm.vaadin.view.registration.StartRegistrationViewBean;
+import eu.etaxonomy.vaadin.mvp.AbstractPopupEditor;
import eu.etaxonomy.vaadin.ui.MainMenu;
-import eu.etaxonomy.vaadin.ui.UIInitializedEvent;
-import eu.etaxonomy.vaadin.ui.navigation.NavigationEvent;
+import eu.etaxonomy.vaadin.ui.view.ToolbarDisplay;
/**
* @author a.kohlbecker
* @since Feb 24, 2017
- *
*/
@Theme("edit-valo")
@Title("Registration")
-@SpringUI(path="registration")
+@SpringUI(path=RegistrationUI.NAME)
@Viewport("width=device-width, initial-scale=1")
@Widgetset("eu.etaxonomy.cdm.vaadin.AppWidgetSet")
// @PreserveOnRefresh
// @Push
-public class RegistrationUI extends UI {
+public class RegistrationUI extends AbstractUI implements PopupEditorDefaultStatusMessageSource {
private static final long serialVersionUID = -8626236111335323691L;
+ public static final String NAME = "registration";
+
@Autowired
+ @Qualifier("viewAreaBean")
private ViewDisplay viewDisplay;
- //---- pull into abstract super class ? ---------
- @Autowired
- SpringViewProvider viewProvider;
+ //---- pull into abstract super class AbstractApplicationUI ? ---------
- protected void configureAccessDeniedView() {
- viewProvider.setAccessDeniedViewClass(RedirectToLoginView.class);
- }
- //---------------------------------------------
+ @Autowired
+ private MainMenu mainMenu;
- public static final String INITIAL_VIEW = DashBoardView.NAME;
+ @Autowired
+ @Qualifier("registrationToolbar")
+ private Toolbar toolbar;
+ @Autowired(required = false)
+ EntityCacheDebugger entityCacheDebugger = null;
- /*
- * this HACKY solution forces the bean to be instantiated, TODO do it properly
- */
-// @Autowired
-// MenuBeanDiscoveryBean bean;
+ //---------------------------------------------
- @Autowired
- private MainMenu mainMenu;
+ public static final String BRAND_NAME = "phycobank";
- @Autowired
- ApplicationEventPublisher eventBus;
+ public static final String INITIAL_VIEW = DashBoardView.NAME;
public RegistrationUI() {
-
+ super();
}
@Override
protected void init(VaadinRequest request) {
+ super.init(request);
+ if(entityCacheDebugger != null){
+ addShortcutListener(entityCacheDebugger.getShortcutListener());
+ }
+ }
- configureAccessDeniedView();
-
- addStyleName(ValoTheme.UI_WITH_MENU);
- Responsive.makeResponsive(this);
+ @Override
+ protected ViewDisplay getViewDisplay() {
+ return viewDisplay;
+ }
- setContent((Component) viewDisplay);
+ @Override
+ protected void initAdditionalContent() {
+ setContent((Component) getViewDisplay());
Label phycoBankLogo = new Label("PhycoBank");
phycoBankLogo.addStyleName("phycobank-green");
phycoBankLogo.addStyleName(ValoTheme.LABEL_HUGE);
+
mainMenu.addMenuComponent(phycoBankLogo);
mainMenu.addMenuItem("New", FontAwesome.EDIT, StartRegistrationViewBean.NAME );
- mainMenu.addMenuItem("Continue", FontAwesome.ARROW_RIGHT, ListViewBean.NAME + "/" + ListViewBean.OPTION_IN_PROGRESS);
- mainMenu.addMenuItem("List", FontAwesome.TASKS, ListViewBean.NAME + "/" + ListViewBean.OPTION_ALL);
-
- eventBus.publishEvent(new UIInitializedEvent());
-
- String brand = "phycobank";
- //TODO create annotation:
- // @Styles(files={""}, branding="brand")
- //
- // the branding can either be specified or can be read from the properties file in .cdmLibrary/remote-webapp/{instance-name}-app.properties
- // See CdmUtils for appropriate methods to access this folder
- // the 'vaadin://' protocol refers to the VAADIN folder
- Resource registryCssFile = new ExternalResource("vaadin://branding/" + brand + "/css/branding.css");
- Page.getCurrent().getStyles().add(registryCssFile);
-
- //navigate to initial view
- String state = pageFragmentAsState();
-
- if(state == null){
- // the case when state != null is handled in the UI base class
- eventBus.publishEvent(new NavigationEvent(INITIAL_VIEW));
+ mainMenu.addMenuItem("Continue", FontAwesome.ARROW_RIGHT, ListViewBean.NAME + "/" + ListView.Mode.inProgress.name());
+ mainMenu.addMenuItem("List", FontAwesome.TASKS, ListViewBean.NAME + "/" + ListView.Mode.all.name());
+
+ if(ToolbarDisplay.class.isAssignableFrom(getViewDisplay().getClass())){
+ ((ToolbarDisplay)getViewDisplay()).setToolbar(toolbar);
}
}
- /**
- * @return
- */
- private String pageFragmentAsState() {
- Page page = Page.getCurrent();
- String fragment = page.getUriFragment();
- String state = null;
- if(fragment != null && fragment.startsWith("!")){
- state = fragment.substring(1, fragment.length());
+ @Override
+ public <T extends AbstractPopupEditor> String defaultStatusMarkup(Class<T> popupEditorClass){
+ if(popupEditorClass.equals(TaxonNamePopupEditor.class)){
+ return "<strong>Check if this name already occurs in the <a href=\"https://www.phycobank.org/index-search\" target=\"index-search\">PhycoBank Index</a> (The link will open in a new window.)</strong>";
}
- return state;
+ return null;
+ }
+
+ @Override
+ protected String getInitialViewName() {
+ return INITIAL_VIEW;
}
+
}