/* * � Copyright IBM Corp. 2014, 2015 * * Licensed 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. */ /* * Author: Brian Gleeson (brian.gleeson@ie.ibm.com) * Date: 21 Dec 2014 * UIDashboard.java */ package com.ibm.xsp.theme.bootstrap.components.layout; import java.util.ArrayList; import java.util.List; import javax.faces.context.FacesContext; import javax.faces.el.ValueBinding; import com.ibm.xsp.context.FacesContextExImpl; import com.ibm.xsp.extlib.component.layout.AbstractApplicationConfiguration; import com.ibm.xsp.extlib.component.layout.impl.SearchBar; import com.ibm.xsp.extlib.tree.ITreeNode; import com.ibm.xsp.stylekit.StyleKitImpl; import com.ibm.xsp.util.StateHolderUtil; /** * * @author Brian Gleeson (brian.gleeson@ie.ibm.com) */ public class SimpleResponsiveApplicationConfiguration extends AbstractApplicationConfiguration{ public static final String WIDTH_FULL = "full"; //$NON-NLS-1$ public static final String WIDTH_FLUID = "fluid"; //$NON-NLS-1$ public static final String WIDTH_FIXED = "fixed"; //$NON-NLS-1$ public static final String WIDTH_NONE = "none"; //$NON-NLS-1$ public static final String NAVBAR_FIXED_TOP = "fixed-top"; //$NON-NLS-1$ public static final String NAVBAR_FIXED_BOTTOM = "fixed-bottom"; //$NON-NLS-1$ public static final String NAVBAR_UNFIXED_TOP = "unfixed-top"; //$NON-NLS-1$ private Boolean invertedNavbar; private String fixedNavbar; private Boolean collapseLeftColumn; private String collapseLeftTarget; private String collapsedLeftMenuLabel; private String pageWidth; private String navbarText; private String navbarTextStyleClass; private String navbarTextStyle; protected String layoutRendererType; public SimpleResponsiveApplicationConfiguration() { // In the Bootstrap4 ExtlibX theme, we want to overrride the renderer used for the Simple // Responsive Application Layout. But the chosen renderer is set here in this component. // We don't want to have to create a separate component for the Bootstrap4 implementation. // Use facesContext to get the current StyleKit (aka theme) FacesContextExImpl facesContext = (FacesContextExImpl)FacesContext.getCurrentInstance(); String rendererSuffix = ""; // $NON-NLS-1$ if(facesContext != null) { StyleKitImpl styleKit = (StyleKitImpl)facesContext.getStyleKit(); // The theme may be an extension of another theme(s). Below we pull out the root theme // by looping through parents of the StyleKits StyleKitImpl rootTheme = styleKit; while(rootTheme != null && rootTheme.getParent() != null) { rootTheme = rootTheme.getParent(); } if(rootTheme == null || rootTheme.getName().startsWith("Bootstrap3")) { // $NON-NLS-1$ rendererSuffix = ""; // $NON-NLS-1$ }else if(rootTheme != null && rootTheme.getName().startsWith("Bootstrap")) { // $NON-NLS-1$ // If the root theme is Bootstrap but not Bootstrap3 theme, use the extlibx renderer rendererSuffix = "_" + rootTheme.getName(); // $NON-NLS-1$ }else{ rendererSuffix = ""; // $NON-NLS-1$ } } setLayoutRendererType("com.ibm.xsp.theme.bootstrap.responsive.SimpleResponsiveAppLayout" + rendererSuffix); // $NON-NLS-1$ } public void setLayoutRendererType(String layoutRendererType) { this.layoutRendererType = layoutRendererType; } @Override public String getLayoutRendererType() { return this.layoutRendererType; } // ==================================================================== // Handling navigation // ==================================================================== @Override public String getNavigationPath() { if(navigationPath!=null) { return navigationPath; } ValueBinding vb = getValueBinding("navigationPath"); // $NON-NLS-1$ if(vb!=null) { return (String)vb.getValue(getFacesContext()); } return null; } public void setNavigationPath(String navigationPath) { this.navigationPath = navigationPath; } @Override public String getDefaultNavigationPath() { if(defaultNavigationPath!=null) { return defaultNavigationPath; } ValueBinding vb = getValueBinding("defaultNavigationPath"); // $NON-NLS-1$ if(vb!=null) { return (String)vb.getValue(getFacesContext()); } return null; } public void setDefaultNavigationPath(String defaultNavigationPath) { this.defaultNavigationPath = defaultNavigationPath; } public boolean isInvertedNavbar() { if(invertedNavbar != null) { return invertedNavbar; } ValueBinding vb = getValueBinding("invertedNavbar"); // $NON-NLS-1$ if(vb!=null) { Boolean b = (Boolean)vb.getValue(getFacesContext()); if(b!=null) { return b; } } return false; } public void setInvertedNavbar(boolean invertedNavbar) { this.invertedNavbar = invertedNavbar; } public String getFixedNavbar() { if(fixedNavbar != null) { return fixedNavbar; } ValueBinding vb = getValueBinding("fixedNavbar"); // $NON-NLS-1$ if(vb!=null) { String s = (String)vb.getValue(getFacesContext()); if(s!=null) { return s; } } return null; } public void setFixedNavbar(String fixedNavbar) { this.fixedNavbar = fixedNavbar; } public boolean isCollapseLeftColumn() { if(collapseLeftColumn!=null) { return collapseLeftColumn; } ValueBinding vb = getValueBinding("collapseLeftColumn"); // $NON-NLS-1$ if(vb!=null) { Boolean b = (Boolean)vb.getValue(getFacesContext()); if(b!=null) { return b; } } return false; } public void setCollapseLeftColumn(boolean collapseLeftColumn) { this.collapseLeftColumn = collapseLeftColumn; } public String getCollapseLeftTarget() { if(collapseLeftTarget != null) { return collapseLeftTarget; } ValueBinding vb = getValueBinding("collapseLeftTarget"); // $NON-NLS-1$ if(vb!=null) { String s = (String)vb.getValue(getFacesContext()); if(s!=null) { return s; } } return null;//COLLAPSE_LEFT_COLUMN_TARGET; } public void setCollapseLeftTarget(String collapseLeftTarget) { this.collapseLeftTarget = collapseLeftTarget; } public String getCollapsedLeftMenuLabel() { if(collapsedLeftMenuLabel != null) { return collapsedLeftMenuLabel; } ValueBinding vb = getValueBinding("collapsedLeftMenuLabel"); // $NON-NLS-1$ if(vb!=null) { String s = (String)vb.getValue(getFacesContext()); if(s!=null) { return s; } } return null; } public void setCollapsedLeftMenuLabel( String collapsedLeftMenuLabel) { this.collapsedLeftMenuLabel = collapsedLeftMenuLabel; } public String getPageWidth() { if(pageWidth != null) { return pageWidth; } ValueBinding vb = getValueBinding("pageWidth"); // $NON-NLS-1$ if(vb!=null) { String s = (String)vb.getValue(getFacesContext()); if(s!=null) { return s; } } return null; } public void setPageWidth(String pageWidth) { this.pageWidth = pageWidth; } public String getNavbarText() { if(navbarText!=null) { return navbarText; } ValueBinding vb = getValueBinding("navbarText"); // $NON-NLS-1$ if(vb!=null) { return (String)vb.getValue(getFacesContext()); } return null; } public void setNavbarText(String navbarText) { this.navbarText = navbarText; } public String getNavbarTextStyleClass() { if(navbarTextStyleClass!=null) { return navbarTextStyleClass; } ValueBinding vb = getValueBinding("navbarTextStyleClass"); // $NON-NLS-1$ if(vb!=null) { return (String)vb.getValue(getFacesContext()); } return null; } public void setNavbarTextStyleClass(String navbarTextStyleClass) { this.navbarTextStyleClass = navbarTextStyleClass; } public String getNavbarTextStyle() { if(navbarTextStyle!=null) { return navbarTextStyle; } ValueBinding vb = getValueBinding("navbarTextStyle"); // $NON-NLS-1$ if(vb!=null) { return (String)vb.getValue(getFacesContext()); } return null; } public void setNavbarTextStyle(String navbarTextStyle) { this.navbarTextStyle = navbarTextStyle; } @Override public void restoreState(FacesContext context, Object state) { Object values[] = (Object[]) state; super.restoreState(context, values[0]); this.navigationPath = (String)values[1]; this.defaultNavigationPath = (String)values[2]; this.navbar = (Boolean)values[3]; this.navbarLogo = (String)values[4]; this.navbarLogoStyleClass = (String)values[5]; this.navbarLogoStyle = (String)values[6]; this.navbarLogoAlt = (String)values[7]; this.navbarUtilityLinks = StateHolderUtil.restoreList(context, getComponent(), values[8]); this.navbarAppLinks = StateHolderUtil.restoreList(context, getComponent(), values[9]); this.searchBar = (SearchBar)StateHolderUtil.restoreObjectState(context, getComponent(), values[10]); this.leftColumnLabel = (String)values[11]; this.rightColumnLabel = (String)values[12]; this.invertedNavbar = (Boolean)values[13]; this.collapseLeftColumn = (Boolean)values[14]; this.pageWidth = (String)values[15]; this.fixedNavbar = (String)values[16]; this.collapseLeftTarget = (String)values[17]; this.collapsedLeftMenuLabel = (String)values[18]; this.navbarText = (String)values[19]; this.navbarTextStyleClass = (String)values[20]; this.navbarTextStyle = (String)values[21]; } @Override public Object saveState(FacesContext context) { Object values[] = new Object[22]; values[0] = super.saveState(context); values[1] = navigationPath; values[2] = defaultNavigationPath; values[3] = navbar; values[4] = navbarLogo; values[5] = navbarLogoStyleClass; values[6] = navbarLogoStyle; values[7] = navbarLogoAlt; values[8] = StateHolderUtil.saveList(context, navbarUtilityLinks); values[9] = StateHolderUtil.saveList(context, navbarAppLinks); values[10] = StateHolderUtil.saveObjectState(context, searchBar); values[11] = leftColumnLabel; values[12] = rightColumnLabel; values[13] = invertedNavbar; values[14] = collapseLeftColumn; values[15] = pageWidth; values[16] = fixedNavbar; values[17] = collapseLeftTarget; values[18] = collapsedLeftMenuLabel; values[19] = navbarText; values[20] = navbarTextStyleClass; values[21] = navbarTextStyle; return values; } /**************************************************** **************************************************** ****************** code divider ******************** **************************************************** ****************************************************/ // Navigation handler private String navigationPath; private String defaultNavigationPath; // Navbar private Boolean navbar; private String navbarLogo; private String navbarLogoStyleClass; private String navbarLogoStyle; private String navbarLogoAlt; private List<ITreeNode> navbarAppLinks; private List<ITreeNode> navbarUtilityLinks; // SearchBar private SearchBar searchBar; // Left / Right Columns private String leftColumnLabel; private String rightColumnLabel; // ==================================================================== // Navbar // ==================================================================== public boolean isNavbar() { if(navbar!=null) { return navbar; } ValueBinding vb = getValueBinding("navbar"); // $NON-NLS-1$ if(vb!=null) { Boolean b = (Boolean)vb.getValue(getFacesContext()); if(b!=null) { return b; } } return true; } public void setNavbar(boolean navbar) { this.navbar = navbar; } public String getNavbarLogo() { if(navbarLogo!=null) { return navbarLogo; } ValueBinding vb = getValueBinding("navbarLogo"); // $NON-NLS-1$ if(vb!=null) { return (String)vb.getValue(getFacesContext()); } return null; } public void setNavbarLogo(String navbarLogo) { this.navbarLogo = navbarLogo; } public String getNavbarLogoStyleClass() { if(navbarLogoStyleClass!=null) { return navbarLogoStyleClass; } ValueBinding vb = getValueBinding("navbarLogoStyleClass"); // $NON-NLS-1$ if(vb!=null) { return (String)vb.getValue(getFacesContext()); } return null; } public void setNavbarLogoStyleClass(String navbarLogoStyleClass) { this.navbarLogoStyleClass = navbarLogoStyleClass; } public String getNavbarLogoStyle() { if(navbarLogoStyle!=null) { return navbarLogoStyle; } ValueBinding vb = getValueBinding("navbarLogoStyle"); // $NON-NLS-1$ if(vb!=null) { return (String)vb.getValue(getFacesContext()); } return null; } public void setNavbarLogoStyle(String navbarLogoStyle) { this.navbarLogoStyle = navbarLogoStyle; } public String getNavbarLogoAlt() { if(navbarLogoAlt!=null) { return navbarLogoAlt; } ValueBinding vb = getValueBinding("navbarLogoAlt"); // $NON-NLS-1$ if(vb!=null) { return (String)vb.getValue(getFacesContext()); } return null; } public void setNavbarLogoAlt(String navbarLogoAlt) { this.navbarLogoAlt = navbarLogoAlt; } public List<ITreeNode> getNavbarAppLinks() { return navbarAppLinks; } public void addNavbarAppLink(ITreeNode node) { if(navbarAppLinks==null) { this.navbarAppLinks = new ArrayList<ITreeNode>(); } navbarAppLinks.add(node); } public List<ITreeNode> getNavbarUtilityLinks() { return navbarUtilityLinks; } public void addNavbarUtilityLink(ITreeNode node) { if(navbarUtilityLinks==null) { this.navbarUtilityLinks = new ArrayList<ITreeNode>(); } navbarUtilityLinks.add(node); } // ==================================================================== // Search options // ==================================================================== public SearchBar getSearchBar() { return searchBar; } public void setSearchBar(SearchBar searchBar) { this.searchBar = searchBar; } public String getLeftColumnLabel() { if(leftColumnLabel!=null) { return leftColumnLabel; } ValueBinding vb = getValueBinding("leftColumnLabel"); // $NON-NLS-1$ if(vb!=null) { return (String)vb.getValue(getFacesContext()); } return null; } public void setLeftColumnLabel(String leftColumnLabel) { this.leftColumnLabel = leftColumnLabel; } public String getRightColumnLabel() { if(rightColumnLabel!=null) { return rightColumnLabel; } ValueBinding vb = getValueBinding("rightColumnLabel"); // $NON-NLS-1$ if(vb!=null) { return (String)vb.getValue(getFacesContext()); } return null; } public void setRightColumnLabel(String rightColumnLabel) { this.rightColumnLabel = rightColumnLabel; } }