/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.isis.viewer.wicket.ui.components.header; import java.util.Locale; import com.google.inject.name.Named; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.Page; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.model.Model; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.isis.applib.annotation.DomainServiceLayout; import org.apache.isis.applib.services.userprof.UserProfileService; import org.apache.isis.viewer.wicket.model.common.PageParametersUtils; import org.apache.isis.viewer.wicket.model.models.ServiceActionsModel; import org.apache.isis.viewer.wicket.ui.ComponentType; import org.apache.isis.viewer.wicket.ui.components.widgets.navbar.BrandLogo; import org.apache.isis.viewer.wicket.ui.components.widgets.navbar.BrandName; import org.apache.isis.viewer.wicket.ui.components.widgets.navbar.Placement; import org.apache.isis.viewer.wicket.ui.pages.error.ErrorPage; import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract; import org.apache.isis.viewer.wicket.ui.util.Components; /** * A panel for the default page header */ public class HeaderPanel extends PanelAbstract<Model<String>> { private static final String ID_USER_NAME = "userName"; private static final String ID_PRIMARY_MENU_BAR = "primaryMenuBar"; private static final String ID_SECONDARY_MENU_BAR = "secondaryMenuBar"; private static final String ID_TERTIARY_MENU_BAR = "tertiaryMenuBar"; /** * Constructor. * * @param id The component id */ public HeaderPanel(String id) { super(id); } @Override protected void onInitialize() { super.onInitialize(); addApplicationName(); addUserName(); addServiceActionMenuBars(); } @Override protected void onConfigure() { super.onConfigure(); PageParameters parameters = getPage().getPageParameters(); setVisible(parameters.get(PageParametersUtils.ISIS_NO_HEADER_PARAMETER_NAME).isNull()); } protected void addApplicationName() { Class<? extends Page> homePage = getApplication().getHomePage(); final BookmarkablePageLink<Void> applicationNameLink = new BookmarkablePageLink<>("applicationName", homePage); final Placement placement = Placement.HEADER; final BrandLogo brandImage = new BrandLogo("brandLogo", placement); final BrandName brandName = new BrandName("brandText", Placement.HEADER); applicationNameLink.add(brandName, brandImage); add(applicationNameLink); } protected void addUserName() { final UserProfileService userProfileService = getUserProfileService(); final Label userName = new Label(ID_USER_NAME, userProfileService.userProfileName()); add(userName); } private UserProfileService getUserProfileService() { return new UserProfileService() { @Override public String userProfileName() { if(getPage() instanceof ErrorPage) { return getAuthenticationSession().getUserName(); } try { final UserProfileService userProfileService = lookupService(UserProfileService.class); final String userProfileName = userProfileService != null ? userProfileService.userProfileName() : null; return userProfileName != null? userProfileName: getAuthenticationSession().getUserName(); } catch (final Exception e) { return getAuthenticationSession().getUserName(); } } }; } protected void addServiceActionMenuBars() { if (getPage() instanceof ErrorPage) { Components.permanentlyHide(this, ID_PRIMARY_MENU_BAR); Components.permanentlyHide(this, ID_SECONDARY_MENU_BAR); addMenuBar(this, ID_TERTIARY_MENU_BAR, DomainServiceLayout.MenuBar.TERTIARY); } else { addMenuBar(this, ID_PRIMARY_MENU_BAR, DomainServiceLayout.MenuBar.PRIMARY); addMenuBar(this, ID_SECONDARY_MENU_BAR, DomainServiceLayout.MenuBar.SECONDARY); addMenuBar(this, ID_TERTIARY_MENU_BAR, DomainServiceLayout.MenuBar.TERTIARY); } } private void addMenuBar(final MarkupContainer container, final String id, final DomainServiceLayout.MenuBar menuBar) { final ServiceActionsModel model = new ServiceActionsModel(menuBar); Component menuBarComponent = getComponentFactoryRegistry().createComponent(ComponentType.SERVICE_ACTIONS, id, model); menuBarComponent.add(AttributeAppender.append("class", menuBar.name().toLowerCase(Locale.ENGLISH))); container.add(menuBarComponent); } }