blob: 5bdbd6afb26191420d88fd42ca065be0c46d18ea [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
package org.apache.empire.jsf2.components;
import java.io.IOException;
import javax.faces.component.NamingContainer;
import javax.faces.component.UIComponent;
import javax.faces.component.UINamingContainer;
import javax.faces.component.UIOutput;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import org.apache.empire.commons.StringUtils;
import org.apache.empire.jsf2.utils.TagEncodingHelper;
import org.apache.empire.jsf2.utils.TagEncodingHelperFactory;
public class MenuListTag extends UIOutput implements NamingContainer
{
// Logger
// private static final Logger log = LoggerFactory.getLogger(MenuListTag.class);
protected final TagEncodingHelper helper = TagEncodingHelperFactory.create(this, "eMenuList");
private enum Properties
{
currentId,
currentClass,
parentClass,
disabledClass,
expandedClass,
itemWrapTag,
defaultItemClass;
}
protected String currentId = null;
protected String currentClass = null;
protected String parentClass = null;
protected String disabledClass = null;
protected String expandedClass = null;
protected String itemWrapTag = null;
protected String defaultItemClass = null; // e.g. "level{}"
protected int level = 0;
@Override
public String getFamily()
{
return UINamingContainer.COMPONENT_FAMILY;
}
@Override
public void encodeBegin(FacesContext context)
throws IOException
{
// call base
super.encodeBegin(context);
initMenuAttributes(context);
// render components
ResponseWriter writer = context.getResponseWriter();
writer.startElement("ul", this);
// writeAttribute(writer, map, "id");
helper.writeAttribute(writer, "class", helper.getTagAttributeString("styleClass"));
helper.writeAttribute(writer, "style", helper.getTagAttributeString("style"));
// previousId
/*
if (prevMenuId!=null)
helper.writeAttribute(writer, "previousId", prevMenuId);
*/
}
@Override
public boolean getRendersChildren()
{
boolean test = super.getRendersChildren();
return test;
}
@Override
public void encodeChildren(FacesContext context)
throws IOException
{
super.encodeChildren(context);
}
@Override
public void encodeEnd(FacesContext context)
throws IOException
{
// call base
super.encodeEnd(context);
// close
ResponseWriter writer = context.getResponseWriter();
writer.endElement("ul");
}
protected void initMenuAttributes(FacesContext context)
{
currentId = helper.getTagAttributeString(Properties.currentId.name());
currentClass = helper.getTagAttributeString(Properties.currentClass.name());
disabledClass = helper.getTagAttributeString(Properties.disabledClass.name());
parentClass = helper.getTagAttributeString(Properties.parentClass.name());
expandedClass = helper.getTagAttributeString(Properties.expandedClass.name());
itemWrapTag = helper.getTagAttributeString(Properties.itemWrapTag.name());
defaultItemClass = helper.getTagAttributeString(Properties.defaultItemClass.name());
// find parent
MenuListTag parent = getParentMenu();
if (parent==null)
return;
if (currentId==null)
currentId = parent.getCurrentId();
if (currentClass==null)
currentClass = parent.getCurrentClass();
if (disabledClass==null)
disabledClass = parent.getDisabledClass();
if (parentClass==null)
parentClass = parent.getParentClass();
if (expandedClass==null)
expandedClass = parent.getExpandedClass();
if (itemWrapTag==null)
itemWrapTag = parent.getItemWrapTag();
if (defaultItemClass==null)
defaultItemClass = parent.defaultItemClass;
// Copy parent Info
level = parent.level + 1;
}
protected MenuListTag getParentMenu()
{
// walk upwards the parent component tree and return the first record component found (if
// any)
UIComponent parent = this;
while ((parent = parent.getParent()) != null)
{
if (parent instanceof MenuListTag)
{
return (MenuListTag) parent;
}
}
return null;
}
public String getCurrentId()
{
if (currentId==null)
currentId= StringUtils.toString(getStateHelper().get(Properties.currentId));
return currentId;
}
public String getCurrentClass()
{
if (currentClass==null)
currentClass= StringUtils.toString(getStateHelper().get(Properties.currentClass));
return currentClass;
}
public String getDisabledClass()
{
if (disabledClass==null)
disabledClass= StringUtils.toString(getStateHelper().get(Properties.disabledClass));
return disabledClass;
}
public String getParentClass()
{
if (parentClass==null)
parentClass= StringUtils.toString(getStateHelper().get(Properties.parentClass));
return parentClass;
}
public String getExpandedClass()
{
if (expandedClass==null)
expandedClass= StringUtils.toString(getStateHelper().get(Properties.expandedClass));
return expandedClass;
}
public String getItemWrapTag()
{
if (itemWrapTag==null)
itemWrapTag= StringUtils.toString(getStateHelper().get(Properties.itemWrapTag));
return itemWrapTag;
}
public int getLevel()
{
return level;
}
public String getItemStyleClass()
{
if (defaultItemClass!=null && defaultItemClass.indexOf("{}")>=0)
return StringUtils.replace(defaultItemClass, "{}", String.valueOf(level));
// return default
return defaultItemClass;
}
/* setters */
public void setCurrentId(String currentId)
{
this.currentId = currentId;
// save
getStateHelper().put(Properties.currentId, currentId);
}
public void setCurrentClass(String currentClass)
{
this.currentClass = currentClass;
// save
getStateHelper().put(Properties.currentClass, currentClass);
}
public void setDisabledClass(String disabledClass)
{
this.disabledClass = disabledClass;
// save
getStateHelper().put(Properties.disabledClass, disabledClass);
}
public void setParentClass(String parentClass)
{
this.parentClass = parentClass;
// save
getStateHelper().put(Properties.parentClass, parentClass);
}
public void setExpandedClass(String expandedClass)
{
this.expandedClass = expandedClass;
// save
getStateHelper().put(Properties.expandedClass, expandedClass);
}
public void setItemWrapTag(String itemWrapTag)
{
this.itemWrapTag = itemWrapTag;
// save
getStateHelper().put(Properties.itemWrapTag, itemWrapTag);
}
}