/**
* License Agreement.
*
* JBoss RichFaces - Ajax4jsf Component Library
*
* Copyright (C) 2007 Exadel, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 as published by the Free Software Foundation.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package org.richfaces.renderkit;
import org.richfaces.component.UITab;
import org.richfaces.component.UITabPanel;
import javax.faces.component.UIComponent;
/**
* Let's build tab style class of:
* 'renderer-specific' classes
*
* @author Maksim Kaszynski
*/
public class TabClassBuilder {
public static final TabClassBuilder activeTabClassBuilder = new TabClassBuilder() {
protected String getSpecificClassForAllTabs() {
//dr-tb-act
return "dr-tbpnl-tb-act rich-tab-active";
}
protected String getSpecificTabClassFromPane(UITab tab,
UITabPanel pane) {
return TabClassBuilder.getStringAttributeOrEmptyString(pane,
"activeTabClass");
}
};
public static final TabClassBuilder disabledTabClassBuilder = new TabClassBuilder() {
protected String getSpecificClassForAllTabs() {
//dr-tb-dsbld
return "dr-tbpnl-tb-dsbl rich-tab-disabled";
}
protected String getSpecificTabClassFromPane(UITab tab,
UITabPanel pane) {
return TabClassBuilder.getStringAttributeOrEmptyString(pane,
"disabledTabClass");
}
};
public static final TabClassBuilder inactiveTabClassBuilder = new TabClassBuilder() {
protected String getSpecificClassForAllTabs() {
//dr-tb-inact
return "dr-tbpnl-tb-inact rich-tab-inactive";
}
protected String getSpecificTabClassFromPane(UITab tab,
UITabPanel pane) {
return TabClassBuilder.getStringAttributeOrEmptyString(pane,
"inactiveTabClass");
}
};
public static String getStringAttributeOrEmptyString(UIComponent component, String attributeName) {
String attributeValue = (String) component.getAttributes().get(attributeName);
if (null == attributeValue) {
attributeValue = "";
}
return attributeValue;
}
/**
* gather cumulative class
*
* @param tab
* @return
*/
public String buildTabClass(UITab tab) {
UITabPanel pane = tab.getPane();
StringBuffer labelClass = new StringBuffer();
labelClass
.append(getCommonClassForAllTabs())
.append(" ")
.append(getSpecificClassForAllTabs())
.append(" ")
.append(getCommonTabClassFromPane(pane))
.append(" ")
.append(getSpecificTabClassFromPane(tab, pane))
.append(" ")
.append(getSpecificClassFromTab(tab))
.append(" ")
.append(getClassFromTab(tab));
return labelClass.toString();
}
/**
* common prefix for all tabs (renderer-specific)
*
* @return
*/
protected String getCommonClassForAllTabs() {
//dr-tb-cntrl
return "dr-tbpnl-tb rich-tab-header";
}
/**
* class common class for different kinds of tabs (e.g. active, disabled, etc)
* renderer-specific
*
* @return
*/
protected String getSpecificClassForAllTabs() {
return "";
}
/**
* usually styleClass attribute specified directly on tab
*
* @param tab
* @return
*/
protected String getClassFromTab(UITab tab) {
return getStringAttributeOrEmptyString(tab, "styleClass");
}
/**
* no known implements
*
* @param tab
* @return
*/
protected String getSpecificClassFromTab(UITab tab) {
return "";
}
/**
* general class of all tabs specified on pane
*
* @param pane
* @return
*/
protected String getCommonTabClassFromPane(UITabPanel pane) {
return getStringAttributeOrEmptyString(pane, "tabClass");
}
/**
* get class from pane depending on tab kind
* @param tab
* @param pane
* @return
*/
protected String getSpecificTabClassFromPane(UITab tab, UITabPanel pane) {
return "";
}
}