/*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) Alkacon Software GmbH (http://www.alkacon.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* 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.
*
* For further information about Alkacon Software GmbH, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.opencms.jsp;
import org.opencms.file.CmsObject;
import org.opencms.flex.CmsFlexController;
import org.opencms.jsp.util.CmsJspNavigationBean;
import org.opencms.main.CmsIllegalArgumentException;
import org.opencms.util.CmsStringUtil;
import javax.servlet.jsp.PageContext;
/**
* Implementation of the <code><cms:navigation var="..." /></code> tag,
* used to access OpenCms VFS navigation information on a JSP with the EL.<p>
*
* @since 8.0
*/
public class CmsJspTagNavigation extends CmsJspScopedVarBodyTagSuport {
/** Constants for <code>type</code> attribute interpretation. */
public enum Type {
/** Bread crumb navigation. */
breadCrumb,
/** Navigation for folder. */
forFolder,
/** Navigation for resource. */
forResource,
/** Navigation for a site. */
forSite,
/** Navigation tree for folder. */
treeForFolder;
/**
* Parses a string into an enumeration element.<p>
*
* @param name the name of the enumeration element
*
* @return the enumeration element with the given name
*
* @throws IllegalArgumentException in case of an invalid enumeration name
*/
public static Type parse(String name) throws IllegalArgumentException {
return Enum.valueOf(Type.class, name);
}
}
/** Serial version UID required for safe serialization. */
private static final long serialVersionUID = 8589202895748764705L;
/** The CmsObject for the current user. */
protected transient CmsObject m_cms;
/** The optional end level for the navigation. */
protected String m_endLevel;
/** The optional parameter for the navigation. */
protected String m_param;
/** The optional resource for the navigation. */
protected String m_resource;
/** The optional start level for the navigation. */
protected String m_startLevel;
/** The navigation type. */
protected Type m_type;
/**
* Empty constructor, required for JSP tags.<p>
*/
public CmsJspTagNavigation() {
super();
}
/**
* Constructor used for scriptlet code.<p>
*
* @param context the JSP page context
*/
public CmsJspTagNavigation(PageContext context) {
setPageContext(context);
init();
}
/**
* @see javax.servlet.jsp.tagext.Tag#doStartTag()
*/
@Override
public int doStartTag() throws CmsIllegalArgumentException {
// initialize the content load tag
init();
return SKIP_BODY;
}
/**
* Returns the (optional) end level for the navigation.<p>
*
* @return the (optional) end level for the navigation
*/
public String getEndLevel() {
return m_endLevel;
}
/**
* Returns the optional parameter for the navigation.<p>
*
* @return the optional parameter for the navigation
*/
public String getParam() {
return m_param;
}
/**
* Returns the (optional) resource for the navigation.<p>
*
* @return the (optional) resource for the navigation
*/
public String getResource() {
return m_resource;
}
/**
* Returns the (optional) start level for the navigation.<p>
*
* @return the (optional) start level for the navigation
*/
public String getStartLevel() {
return m_startLevel;
}
/**
* Returns the selected navigation type.<p>
*
* This must match one of the elements in {@link Type}.<p>
*
* @return the selected navigation type
*/
public String getType() {
return m_type == null ? null : m_type.toString();
}
/**
* @see javax.servlet.jsp.tagext.Tag#release()
*/
@Override
public void release() {
m_cms = null;
m_startLevel = null;
m_endLevel = null;
m_resource = null;
m_type = null;
super.release();
}
/**
* Sets the (optional) end level for the navigation.<p>
*
* @param endLevel the (optional) end level for the navigation
*/
public void setEndLevel(String endLevel) {
if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(endLevel)) {
m_endLevel = endLevel.trim();
}
}
/**
* Sets the optional parameter for the navigation.<p>
*
* @param param the optional parameter for the navigation to set
*/
public void setParam(String param) {
if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(param)) {
m_param = param.trim();
}
}
/**
* Sets the (optional) resource for the navigation.<p>
*
* @param resource the (optional) resource for the navigation
*/
public void setResource(String resource) {
if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(resource)) {
m_resource = resource.trim();
}
}
/**
* Sets the (optional) start level for the navigation.<p>
*
* @param startLevel the (optional) start level for the navigation
*/
public void setStartLevel(String startLevel) {
if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(startLevel)) {
m_startLevel = startLevel.trim();
}
}
/**
* Sets the selected navigation type.<p>
*
* This must match one of the elements in {@link Type}.<p>
*
* @param type the navigation type to set
*/
public void setType(String type) {
if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(type)) {
m_type = Type.parse(type.trim());
}
}
/**
* Initializes this formatter tag.<p>
*/
protected void init() {
// initialize OpenCms access objects
CmsFlexController controller = CmsFlexController.getController(pageContext.getRequest());
m_cms = controller.getCmsObject();
int startLevel = m_startLevel == null ? Integer.MIN_VALUE : Integer.parseInt(m_startLevel);
int endLevel = m_endLevel == null ? Integer.MIN_VALUE : Integer.parseInt(m_endLevel);
// load navigation bean in the JSP context
CmsJspNavigationBean bean = new CmsJspNavigationBean(m_cms, m_type, startLevel, endLevel, m_resource, m_param);
storeAttribute(getVar(), bean);
}
}