/** * (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jabylon.rest.ui.wicket.components; import java.util.List; import org.apache.wicket.Session; import org.apache.wicket.extensions.ajax.markup.html.tabs.AjaxTabbedPanel; import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.extensions.markup.html.tabs.TabbedPanel; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.model.IModel; import org.eclipse.emf.ecore.EObject; import org.jabylon.common.util.PreferencesUtil; import org.jabylon.rest.ui.security.CDOAuthenticatedSession; import org.jabylon.users.User; import org.osgi.service.prefs.BackingStoreException; import org.osgi.service.prefs.Preferences; /** * A bootstrap styled tabbed panel that uses ajax to render the tabs lazily. * <p> * You can optionally provide a persistenceKey that is used to store and restore the last selected tab for the current user * @author jutzig.dev@googlemail.com * * @param <T> */ public class BootstrapAjaxTabbedPanel<T extends ITab> extends AjaxTabbedPanel<T> { private static final long serialVersionUID = 2818066082911318768L; private String persistenceKey; /** * {@inheritDoc} */ public BootstrapAjaxTabbedPanel(String id, List<T> tabs, String persistenceKey) { super(id, tabs); this.persistenceKey = persistenceKey; if(persistenceKey!=null) { Preferences prefs = PreferencesUtil.scopeFor(getUser()); int activeTab = prefs.getInt(persistenceKey, 0); setSelectedTab(activeTab); } } /** * {@inheritDoc} */ public BootstrapAjaxTabbedPanel(String id, List<T> tabs, IModel<Integer> model, String persistenceKey) { super(id, tabs); setSelectedTab(model.getObject()); } @Override protected void onComponentTag(ComponentTag tag) { super.onComponentTag(tag); checkComponentTag(tag, "div"); tag.append("class", "tabbable", " "); } @Override protected String getSelectedTabCssClass() { return "active"; } @Override protected String getLastTabCssClass() { return ""; } @Override public TabbedPanel<T> setSelectedTab(int index) { if(persistenceKey!=null) { Preferences prefs = PreferencesUtil.scopeFor(getUser()); if(index != prefs.getInt(persistenceKey, -1)) { prefs.putInt(persistenceKey, index); try { // prefs.sync(); prefs.flush(); } catch (BackingStoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return super.setSelectedTab(index); } protected EObject getUser() { Session session = getSession(); if (session instanceof CDOAuthenticatedSession) { CDOAuthenticatedSession authSession = (CDOAuthenticatedSession) session; User user = authSession.getUser(); if(user!=null) return user; return authSession.getAnonymousUser(); } return null; } }