/* * RHQ Management Platform * Copyright (C) 2005-2008 Red Hat, Inc. * All rights reserved. * * This program 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 2 of the License. * * This program 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, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.enterprise.gui.common.tabbar; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.faces.component.UIComponent; import javax.faces.component.UIComponentBase; import javax.faces.context.FacesContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.rhq.core.gui.util.FacesComponentUtility; /** * A component that represents a tab bar containing tabs, and optionally subtabs. * * @author Ian Springer */ public class TabBarComponent extends UIComponentBase { public static final String COMPONENT_TYPE = "org.jboss.on.TabBar"; public static final String COMPONENT_FAMILY = "org.jboss.on.TabBar"; private String selectedTabName; private Map<String, String> parameters = new HashMap<String, String>(); public String getFamily() { return COMPONENT_FAMILY; } public String getSelectedTabName() { if (this.selectedTabName == null) { this.selectedTabName = FacesComponentUtility.getExpressionAttribute(this, "selectedTabName"); } return selectedTabName; } public void setSelectedTabName(String selectedTabName) { this.selectedTabName = selectedTabName; } @NotNull public Map<String, String> getParameters() { return parameters; } public void setParameters(@NotNull Map<String, String> parameters) { this.parameters = parameters; } public void selectTab(@NotNull String fullTabName) { String tabName; String subtabName = null; // The full tab name is formatted as "tabName[.subtabName]" (e.g. "Inventory" or "Monitor.Visibility"). // Break it down... if (fullTabName.contains(".")) { int dotIndex = fullTabName.indexOf('.'); tabName = fullTabName.substring(0, dotIndex); subtabName = fullTabName.substring(dotIndex + 1); } else { tabName = fullTabName; } TabComponent selectedTab = getTabByName(tabName); if (selectedTab == null) { throw new IllegalStateException("'" + tabName + "' is not a valid tab name for this tab bar."); } selectedTab.setSelected(true); if (subtabName != null) { SubtabComponent selectedSubtab = selectedTab.getSubtabByName(subtabName); if (selectedSubtab == null) { throw new IllegalStateException("'" + subtabName + "' is not a valid subtab name for the '" + selectedTab.getName() + "' tab."); } selectedSubtab.setSelected(true); } } @NotNull public List<TabComponent> getTabs() { List<TabComponent> tabs = new ArrayList<TabComponent>(); if (getChildCount() == 0) { return tabs; } List<UIComponent> children = getChildren(); for (UIComponent child : children) { if (child instanceof TabComponent) { tabs.add((TabComponent) child); } } return tabs; } @Nullable public TabComponent getTabByName(String tabName) { TabComponent selectedTab = null; for (TabComponent tab : getTabs()) { if (tab.getName().equals(tabName)) { selectedTab = tab; break; } } return selectedTab; } @NotNull public TabComponent getSelectedTab() { List<TabComponent> tabs = getTabs(); for (TabComponent tab : tabs) { if (tab.isSelected()) { return tab; } } throw new IllegalStateException("No tab is selected."); } private Object[] stateValues; public Object saveState(FacesContext facesContext) { if (this.stateValues == null) { this.stateValues = new Object[2]; } this.stateValues[0] = super.saveState(facesContext); this.stateValues[1] = this.selectedTabName; return this.stateValues; } public void restoreState(FacesContext context, Object stateValues) { this.stateValues = (Object[]) stateValues; super.restoreState(context, this.stateValues[0]); this.selectedTabName = (String) this.stateValues[1]; } }