Skip to content
This repository has been archived by the owner on Dec 7, 2019. It is now read-only.

Commit

Permalink
Switch to SpringNavigator and SpringDisplayView
Browse files Browse the repository at this point in the history
  • Loading branch information
igor-baiborodine committed Feb 5, 2018
1 parent 6d05c35 commit 557d70d
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 43 deletions.
23 changes: 6 additions & 17 deletions src/main/java/com/kiroule/jpetstore/vaadinspring/ui/AppUI.java
@@ -1,12 +1,10 @@
package com.kiroule.jpetstore.vaadinspring.ui;

import com.kiroule.jpetstore.vaadinspring.ui.navigation.NavigationManager;
import com.kiroule.jpetstore.vaadinspring.ui.util.HasLogger;
import com.kiroule.jpetstore.vaadinspring.ui.util.NavBarButtonUpdater;
import com.kiroule.jpetstore.vaadinspring.ui.util.PageTitleUpdater;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.Title;
import com.vaadin.annotations.Widgetset;
import com.vaadin.navigator.Navigator;
import com.vaadin.server.VaadinRequest;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.spring.navigator.SpringViewProvider;
Expand All @@ -15,8 +13,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.vaadin.spring.events.EventBus;

import javax.annotation.PreDestroy;

/**
* @author Igor Baiborodine
*/
Expand All @@ -28,20 +24,18 @@ public class AppUI extends UI implements HasLogger {

private static final long serialVersionUID = 4670701701584923650L;

private final NavigationManager navigationManager;
private final SpringViewProvider viewProvider;
private final MainView mainView;
private final EventBus.UIEventBus uiEventBus;
private final PageTitleUpdater pageTitleUpdater;
private final NavBarButtonUpdater navBarButtonUpdater;

@Autowired
public AppUI(SpringViewProvider viewProvider, MainView mainView, EventBus.UIEventBus uiEventBus,
PageTitleUpdater pageTitleUpdater, NavBarButtonUpdater navBarButtonUpdater) {
public AppUI(NavigationManager navigationManager, SpringViewProvider viewProvider, MainView mainView,
EventBus.UIEventBus uiEventBus) {
this.navigationManager = navigationManager;
this.viewProvider = viewProvider;
this.mainView = mainView;
this.uiEventBus = uiEventBus;
this.pageTitleUpdater = pageTitleUpdater;
this.navBarButtonUpdater = navBarButtonUpdater;
}

public static AppUI getCurrent() {
Expand All @@ -55,13 +49,8 @@ public static EventBus.UIEventBus getUiEventBus() {
@Override
protected void init(VaadinRequest request) {
setContent(mainView);

Navigator navigator = new Navigator(this, mainView.getViewContainer());
navigator.addProvider(viewProvider);
navigator.addViewChangeListener(navBarButtonUpdater);
navigator.addViewChangeListener(pageTitleUpdater);

uiEventBus.subscribe(mainView);
navigationManager.navigateToDefaultView();
getLogger().info("App UI initialized");
}
}
29 changes: 18 additions & 11 deletions src/main/java/com/kiroule/jpetstore/vaadinspring/ui/MainView.java
Expand Up @@ -3,15 +3,16 @@
import com.kiroule.jpetstore.vaadinspring.domain.Account;
import com.kiroule.jpetstore.vaadinspring.domain.Cart;
import com.kiroule.jpetstore.vaadinspring.service.CatalogService;
import com.kiroule.jpetstore.vaadinspring.ui.component.LeftNavBar;
import com.kiroule.jpetstore.vaadinspring.ui.component.TopNavBar;
import com.kiroule.jpetstore.vaadinspring.ui.event.UIAddItemToCartEvent;
import com.kiroule.jpetstore.vaadinspring.ui.event.UIChangeCartItemQuantityEvent;
import com.kiroule.jpetstore.vaadinspring.ui.event.UILoginEvent;
import com.kiroule.jpetstore.vaadinspring.ui.event.UILogoutEvent;
import com.kiroule.jpetstore.vaadinspring.ui.event.UINavigationEvent;
import com.kiroule.jpetstore.vaadinspring.ui.event.UIRemoveItemFromCartEvent;
import com.kiroule.jpetstore.vaadinspring.ui.event.UIUpdateAccountEvent;
import com.kiroule.jpetstore.vaadinspring.ui.menu.LeftNavBar;
import com.kiroule.jpetstore.vaadinspring.ui.menu.TopNavBar;
import com.kiroule.jpetstore.vaadinspring.ui.navigation.NavigationManager;
import com.kiroule.jpetstore.vaadinspring.ui.util.CurrentAccount;
import com.kiroule.jpetstore.vaadinspring.ui.util.CurrentCart;
import com.kiroule.jpetstore.vaadinspring.ui.util.HasLogger;
Expand All @@ -22,28 +23,31 @@
import com.kiroule.jpetstore.vaadinspring.ui.view.CartView;
import com.kiroule.jpetstore.vaadinspring.ui.view.HomeView;
import com.kiroule.jpetstore.vaadinspring.ui.view.ItemListView;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewDisplay;
import com.vaadin.server.VaadinSession;
import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.SpringViewDisplay;
import com.vaadin.spring.annotation.UIScope;
import com.vaadin.v7.ui.HorizontalLayout;
import com.vaadin.v7.ui.VerticalLayout;

import org.springframework.beans.factory.annotation.Autowired;
import org.vaadin.spring.events.annotation.EventBusListenerMethod;

import static com.kiroule.jpetstore.vaadinspring.ui.menu.TopNavBar.SIGNIN_BUTTON_URI;
import static com.kiroule.jpetstore.vaadinspring.ui.menu.TopNavBar.SIGNOUT_BUTTON_URI;
import static com.kiroule.jpetstore.vaadinspring.ui.component.TopNavBar.SIGNIN_BUTTON_URI;
import static com.kiroule.jpetstore.vaadinspring.ui.component.TopNavBar.SIGNOUT_BUTTON_URI;
import static com.kiroule.jpetstore.vaadinspring.ui.util.CurrentCart.Key.SHOPPING_CART;

/**
* @author Igor Baiborodine
*/
@SpringComponent
@SpringViewDisplay
@UIScope
class MainView extends HorizontalLayout implements HasLogger, HasUIEventBus {
class MainView extends HorizontalLayout implements HasLogger, HasUIEventBus, ViewDisplay {

private static final long serialVersionUID = 7419653252582861360L;

private final NavigationManager navigationManager;
private final LeftNavBar leftNavBar;
private final TopNavBar topNavBar;
private final CatalogService catalogService;
Expand All @@ -52,9 +56,10 @@ class MainView extends HorizontalLayout implements HasLogger, HasUIEventBus {
private final VerticalLayout viewContainer = new VerticalLayout();

@Autowired
public MainView(LeftNavBar leftNavBar, TopNavBar topNavBar,
public MainView(NavigationManager navigationManager, LeftNavBar leftNavBar, TopNavBar topNavBar,
CatalogService catalogService, NavBarButtonUpdater navBarButtonUpdater) {
super();
this.navigationManager = navigationManager;
this.leftNavBar = leftNavBar;
this.topNavBar = topNavBar;
this.catalogService = catalogService;
Expand All @@ -74,8 +79,10 @@ public MainView(LeftNavBar leftNavBar, TopNavBar topNavBar,
getLogger().info("Main view initialized");
}

public VerticalLayout getViewContainer() {
return viewContainer;
@Override
public void showView(View view) {
viewContainer.removeAllComponents();
viewContainer.addComponent(view.getViewComponent());
}

@EventBusListenerMethod
Expand Down Expand Up @@ -151,6 +158,6 @@ public void changeCartItemQuantity(UIChangeCartItemQuantityEvent event) {
}

private void navigateTo(String viewName) {
AppUI.getCurrent().getNavigator().navigateTo(viewName);
navigationManager.navigateTo(viewName);
}
}
@@ -1,4 +1,4 @@
package com.kiroule.jpetstore.vaadinspring.ui.menu;
package com.kiroule.jpetstore.vaadinspring.ui.component;

import com.kiroule.jpetstore.vaadinspring.ui.event.UINavigationEvent;
import com.kiroule.jpetstore.vaadinspring.ui.theme.JPetStoreTheme;
Expand All @@ -12,8 +12,6 @@
import com.vaadin.v7.shared.ui.label.ContentMode;
import com.vaadin.v7.ui.Label;

import org.springframework.beans.factory.annotation.Autowired;

import javax.annotation.PostConstruct;

/**
Expand All @@ -25,8 +23,11 @@ public class LeftNavBar extends CssLayout implements HasUIEventBus {

private static final long serialVersionUID = 3267397700833804590L;

@Autowired
private NavBarButtonUpdater navBarButtonUpdater;
private final NavBarButtonUpdater navBarButtonUpdater;

public LeftNavBar(NavBarButtonUpdater navBarButtonUpdater) {
this.navBarButtonUpdater = navBarButtonUpdater;
}

@PostConstruct
public void init() {
Expand All @@ -48,7 +49,8 @@ public void init() {
private void addButton(String categoryId, String displayName) {

String uri = ProductListView.VIEW_NAME + "/" + categoryId;
Button viewButton = new Button(displayName, click -> getUIEventBus().publish(LeftNavBar.this, new UINavigationEvent(uri)));
Button viewButton = new Button(displayName,
click -> getUIEventBus().publish(LeftNavBar.this, new UINavigationEvent(uri)));
navBarButtonUpdater.mapButtonToUri(uri, viewButton);

viewButton.addStyleName(JPetStoreTheme.MENU_ITEM);
Expand Down
@@ -1,4 +1,4 @@
package com.kiroule.jpetstore.vaadinspring.ui.menu;
package com.kiroule.jpetstore.vaadinspring.ui.component;

import com.kiroule.jpetstore.vaadinspring.domain.Account;
import com.kiroule.jpetstore.vaadinspring.service.LoginService;
Expand Down Expand Up @@ -27,8 +27,6 @@
import com.vaadin.v7.ui.Label;
import com.vaadin.v7.ui.TextField;

import org.springframework.beans.factory.annotation.Autowired;

import javax.annotation.PostConstruct;
import javax.security.auth.login.LoginException;

Expand All @@ -47,17 +45,20 @@ public class TopNavBar extends CssLayout implements HasUIEventBus {
public static final String SIGNIN_BUTTON_URI = "sign-in";
public static final String SIGNOUT_BUTTON_URI = "sign-out";

@Autowired
private NavBarButtonUpdater navBarButtonUpdater;
@Autowired
private SigninForm signinForm;
@Autowired
private LoginService loginService;
private final NavBarButtonUpdater navBarButtonUpdater;
private final SigninForm signinForm;
private final LoginService loginService;

private Button signinButton;
private Button signoutButton;
private Label userLabel;

public TopNavBar(NavBarButtonUpdater navBarButtonUpdater, SigninForm signinForm, LoginService loginService) {
this.navBarButtonUpdater = navBarButtonUpdater;
this.signinForm = signinForm;
this.loginService = loginService;
}

@PostConstruct
void init() {

Expand Down
@@ -0,0 +1,32 @@
package com.kiroule.jpetstore.vaadinspring.ui.navigation;

import com.kiroule.jpetstore.vaadinspring.ui.view.HomeView;
import com.vaadin.navigator.View;
import com.vaadin.spring.annotation.SpringView;
import com.vaadin.spring.annotation.UIScope;
import com.vaadin.spring.internal.Conventions;
import com.vaadin.spring.navigator.SpringNavigator;

import org.springframework.stereotype.Component;

@Component
@UIScope
public class NavigationManager extends SpringNavigator {

public String getViewId(Class<? extends View> viewClass) {
SpringView springView = viewClass.getAnnotation(SpringView.class);
if (springView == null) {
throw new IllegalArgumentException("The target class must be a @SpringView");
}
return Conventions.deriveMappingForView(viewClass, springView);
}

public void navigateTo(Class<? extends View> targetView) {
String viewId = getViewId(targetView);
navigateTo(viewId);
}

public void navigateToDefaultView() {
navigateTo(HomeView.class);
}
}

0 comments on commit 557d70d

Please sign in to comment.