package com.constellio.app.ui.pages.management; import static com.constellio.app.ui.i18n.i18n.$; import java.util.List; import com.constellio.app.entities.navigation.NavigationItem; import com.constellio.app.ui.framework.components.ComponentState; import com.constellio.app.ui.pages.base.BaseViewImpl; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.server.ThemeResource; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Component; import com.vaadin.ui.CssLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Layout; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; public class AdminViewImpl extends BaseViewImpl implements AdminView { private final AdminPresenter presenter; public AdminViewImpl() { presenter = new AdminPresenter(this); } @Override protected String getTitle() { return $("AdminView.viewTitle"); } @Override protected Component buildMainComponent(ViewChangeEvent event) { VerticalLayout layout = new VerticalLayout(); layout.addStyleName("view-group"); layout.addComponent(buildButtonPanel(presenter.getCollectionItems())); if (presenter.isSystemSectionVisible()) { Label systemSectionTitle = new Label($("AdminView.systemSectionTitle")); systemSectionTitle.addStyleName(ValoTheme.LABEL_H1); layout.addComponents(systemSectionTitle, buildButtonPanel(presenter.getSystemItems())); } return layout; } private Component buildButtonPanel(List<NavigationItem> items) { CssLayout layout = new CssLayout(); for (NavigationItem item : items) { buildButton(layout, item); } return layout; } private void buildButton(Layout layout, final NavigationItem item) { Button button = new Button($("AdminView." + item.getCode()), new ThemeResource(item.getIcon())); button.addStyleName(ValoTheme.BUTTON_ICON_ALIGN_TOP); button.addStyleName(ValoTheme.BUTTON_BORDERLESS); button.addStyleName(item.getCode()); ComponentState state = presenter.getStateFor(item); button.setEnabled(state.isEnabled()); button.setVisible(state.isVisible()); button.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { item.activate(navigate()); } }); layout.addComponent(button); } }