///////////////////////////////////////////////////////////////////////////// // // Project ProjectForge Community Edition // www.projectforge.org // // Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de) // // ProjectForge is dual-licensed. // // This community edition is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation; version 3 of the License. // // This community edition is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General // Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see http://www.gnu.org/licenses/. // ///////////////////////////////////////////////////////////////////////////// package org.projectforge.web.core; import org.apache.commons.lang.StringUtils; import org.apache.wicket.AttributeModifier; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.AbstractLink; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.ExternalLink; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.spring.injection.annot.SpringBean; import org.projectforge.user.PFUserContext; import org.projectforge.web.FavoritesMenu; import org.projectforge.web.Menu; import org.projectforge.web.MenuBuilder; import org.projectforge.web.MenuEntry; import org.projectforge.web.wicket.AbstractSecuredPage; import org.projectforge.web.wicket.WicketUtils; /** * @author Kai Reinhard (k.reinhard@micromata.de) */ public abstract class NavAbstractPanel extends Panel { private static final long serialVersionUID = -1019454504282157440L; public static final String USER_PREF_MENU_KEY = "usersMenu"; private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(NavAbstractPanel.class); @SpringBean(name = "menuBuilder") private MenuBuilder menuBuilder; protected Menu menu; protected FavoritesMenu favoritesMenu; public NavAbstractPanel(final String id) { super(id); } static public AbstractLink getMenuEntryLink(final MenuEntry menuEntry, final boolean showModifiedNames) { final AbstractLink link; if (menuEntry.isWicketPage() == true) { if (menuEntry.getParams() == null) { link = new BookmarkablePageLink<String>("link", menuEntry.getPageClass()); } else { final PageParameters params = WicketUtils.getPageParameters(menuEntry.getParams()); link = new BookmarkablePageLink<String>("link", menuEntry.getPageClass(), params); } } else { final String url = menuEntry.getUrl(); if (url != null) { link = new ExternalLink("link", WicketUtils.getUrl(RequestCycle.get(), url, true)); } else { link = new ExternalLink("link", "#"); if (menuEntry.hasSubMenuEntries() == false) { // TODO Add empty } } } if (menuEntry.isNewWindow() == true) { link.add(AttributeModifier.replace("target", "_blank")); } final String i18nKey = menuEntry.getI18nKey(); if (showModifiedNames == true && StringUtils.isNotBlank(menuEntry.getName()) == true || i18nKey == null) { if (StringUtils.isNotBlank(menuEntry.getName()) == true) { link.add(new Label("label", menuEntry.getName()).setRenderBodyOnly(true)); } else { // Neither i18nKey nor name is given: link.add(new Label("label", "???").setRenderBodyOnly(true)); } } else { link.add(new Label("label", new ResourceModel(i18nKey)).setRenderBodyOnly(true)); } link.add(AttributeModifier.append("ref", menuEntry.getId())); final Label menuSuffixLabel = getSuffixLabel(menuEntry); link.add(menuSuffixLabel); return link; } static protected Label getSuffixLabel(final MenuEntry menuEntry) { final Label suffixLabel; final IModel<Integer> newCounterModel = menuEntry != null ? menuEntry.getNewCounterModel() : null; if (newCounterModel != null && newCounterModel.getObject() != null) { suffixLabel = new MenuSuffixLabel(newCounterModel); if (menuEntry != null && menuEntry.getNewCounterTooltip() != null) { WicketUtils.addTooltip(suffixLabel, new ResourceModel(menuEntry.getNewCounterTooltip())); } } else { suffixLabel = new Label("suffix"); suffixLabel.setVisible(false); } return suffixLabel; } public Menu getMenu() { if (menu != null) { return menu; } AbstractSecuredPage securedPage = null; if (getPage() instanceof AbstractSecuredPage) { securedPage = ((AbstractSecuredPage) getPage()); menu = (Menu) securedPage.getUserPrefEntry(USER_PREF_MENU_KEY); if (menu != null) { return menu; } } if (log.isDebugEnabled() == true) { log.debug("Build new menu."); } menu = menuBuilder.getMenu(PFUserContext.getUser()); if (securedPage != null) { securedPage.putUserPrefEntry(USER_PREF_MENU_KEY, menu, false); } return menu; } }