Package org.apache.portals.bridges.struts.taglib

Source Code of org.apache.portals.bridges.struts.taglib.TagsSupport

/*
* Copyright 2000-2004 The Apache Software Foundation.
*
* 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.
*/
package org.apache.portals.bridges.struts.taglib;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.PageContext;

import org.apache.portals.bridges.struts.PortletServlet;
import org.apache.portals.bridges.struts.StrutsPortlet;
import org.apache.portals.bridges.struts.StrutsPortletURL;
import org.apache.portals.bridges.struts.config.StrutsPortletConfig;
import org.apache.portals.bridges.struts.config.PortletURLTypes; // javadoc

/**
* Utility class providing common Struts Bridge Tags functionality.
*
* @author <a href="mailto:ate@douma.nu">Ate Douma</a>
* @version $Id: TagsSupport.java 306958 2005-10-07 01:23:37 +0200 (Fri, 07 Oct 2005) ate $
*/
class TagsSupport
{
    /**
     * Private constructor as this class isn't supposed to be instantiated.
     *
     */
    private TagsSupport(){}
   
    /**
     * Resolves a, possibly relative, url to a context relative one for use within a Portlet context.
     * <p>
     * The url parameter may contain relative (../) elements.
     * </p>
     * @param pageContext the JSP pageContext
     * @param url the url to resolve
     * @return the resolved url
     */
    public static String getContextRelativeURL(PageContext pageContext, String url, boolean addContextPath)
    {
        if ( !url.startsWith("/"))
        {
            String newUrl = url;
            String currentPath = (String)pageContext.getRequest().getAttribute(StrutsPortlet.PAGE_URL);
            if ( addContextPath )
            {
                currentPath = ((HttpServletRequest)pageContext.getRequest()).getContextPath() + currentPath;
            }
            if ( addContextPath || currentPath.length() > 1 /* keep "/" */)
            {
                currentPath = currentPath.substring(0,currentPath.lastIndexOf('/'));
            }
            if ( currentPath.length() == 0 )
            {
                currentPath = "/";
            }
            while ( currentPath.length() > 0 )
            {
                if ( newUrl.startsWith("../"))
                {
                    currentPath = currentPath.substring(0, currentPath.lastIndexOf('/'));
                    newUrl = newUrl.substring(3);
                }
                else
                {
                    break;
                }
            }
            if ( currentPath.length() > 1 )
            {
                url = currentPath + "/" + newUrl;
            }
            else
            {
                url = "/" + newUrl;
            }
        }
        return url;
    }
   
    /**
     * Creates an action or render PortletURL, or a ResourceURL.
     * <p>
     * The url parameter is first {@link #getContextRelativeURL(PageContext, String) resolved}
     * to an context relative url.<br/>
     * Then, a prefixed contextPath is removed from the resulting url.<br/>
     * If the type parameter is specified (not null), the type of url created is based on its value.<br/>
     * Otherwise, {@link PortletURLTypes#getType(String)} is used to determine which
     * type of url must be created.
     * </p>
     * @param pageContext the JSP pageContext
     * @param url the url to resolve
     * @param type indicated which type of url must be created
     * @return an action or render PortletURL, or a ResourceURL
     */
    public static String getURL(PageContext pageContext, String url, PortletURLTypes.URLType type)
    {
        url = getContextRelativeURL(pageContext,url,false);
        String contextPath = ((HttpServletRequest)pageContext.getRequest()).getContextPath();
        if (url.startsWith(contextPath + "/"))
        {
            url = url.substring(contextPath.length());
        }
       
        if ( type == null )
        {
            StrutsPortletConfig strutsPortletConfig = (StrutsPortletConfig)pageContext.getAttribute(StrutsPortlet.STRUTS_PORTLET_CONFIG,PageContext.APPLICATION_SCOPE);
            type = strutsPortletConfig.getPortletURLTypes().getType(url);
        }
       
        if ( type.equals(PortletURLTypes.URLType.ACTION) )
        {
            return StrutsPortletURL.createActionURL(pageContext.getRequest(),url).toString();
        }
        else if ( type.equals(PortletURLTypes.URLType.RENDER) )
        {
            return StrutsPortletURL.createRenderURL(pageContext.getRequest(),url).toString();
        }       
        else // type.equals(PortletURLTypes.URLType.RESOURCE)
        {
            if ( url.startsWith("/"))
            {
                return contextPath + url;
            }
            return contextPath + "/" + url;
        }       
    }

    /**
     * Replaces the action url as generated by the struts:form tag with an action PortletURL.
     * @param pageContext the JSP pageContext
     * @param formStartElement the formStartElement as generated by the struts:form tag
     * @return the formStartElement containing an action PortletURL
     */
    public static String getFormTagRenderFormStartElement(PageContext pageContext, String formStartElement)
    {
        if ( PortletServlet.isPortletRequest(pageContext.getRequest()))
        {
            int actionURLStart = formStartElement.indexOf("action=") + 8;
            int actionURLEnd = formStartElement.indexOf('"', actionURLStart);
            String actionURL = formStartElement.substring(actionURLStart,
                    actionURLEnd);
            formStartElement = formStartElement.substring(0, actionURLStart)
                    + StrutsPortletURL.createActionURL(pageContext.getRequest(),
                            actionURL).toString()
                    + formStartElement.substring(actionURLEnd);
        }
        return formStartElement;       
    }   
}
TOP

Related Classes of org.apache.portals.bridges.struts.taglib.TagsSupport

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.