Package org.apache.beehive.netui.pageflow.internal

Source Code of org.apache.beehive.netui.pageflow.internal.PageFlowRequestWrapper$State

/*
* Copyright 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.
*
* $Header:$
*/
package org.apache.beehive.netui.pageflow.internal;

import org.apache.beehive.netui.pageflow.FlowController;
import org.apache.beehive.netui.pageflow.PreviousPageInfo;
import org.apache.struts.upload.MultipartRequestWrapper;

import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestWrapper;

public final class PageFlowRequestWrapper
        extends HttpServletRequestWrapper
{
    private static final class State
    {
        public Integer forwardedRequestCount;
        public String originalServletPath;
        public FlowController currentFlowController;
        public ViewRenderer viewRenderer;
        public PreviousPageInfo previousPageInfo;
        public boolean returningFromActionIntercept = false;
        public String pageFlowScopedFormName;
        public boolean processPopulateAlreadyCalled = false;
        public boolean forwardedByButton = false;
        public MultipartRequestWrapper multipartRequestWrapper;
        public Throwable exceptionBeingHandled = null;
        public boolean stayInCurrentModule = false;
    }
   
    private State _state = new State();
   
    public static PageFlowRequestWrapper get( ServletRequest servletRequest )
    {
        servletRequest = InternalUtils.unwrapMultipart( servletRequest );
        assert servletRequest instanceof PageFlowRequestWrapper : servletRequest.getClass().getName();
        return ( PageFlowRequestWrapper ) servletRequest;
    }
   
    /**
     * Unwrap to find the PageFlowRequestWrapper.  This method may return <code>null</code>.
     */
    public static PageFlowRequestWrapper unwrap( ServletRequest servletRequest )
    {
        servletRequest = InternalUtils.unwrapMultipart( servletRequest );
       
        while ( ! ( servletRequest instanceof PageFlowRequestWrapper ) )
        {
            if ( ! ( servletRequest instanceof ServletRequestWrapper ) ) return null;
            servletRequest = ( ( ServletRequestWrapper ) servletRequest ).getRequest();
        }
       
        return ( PageFlowRequestWrapper ) servletRequest;
    }
   
    public void initFrom( PageFlowRequestWrapper wrapper )
    {
        _state = wrapper._state;
    }
   
    public PageFlowRequestWrapper( HttpServletRequest delegate )
    {
        super( delegate );
    }
   
    public boolean isForwardedRequest()
    {
        return _state.forwardedRequestCount != null;
    }
   
    public int getForwardedRequestCount()
    {
        return _state.forwardedRequestCount != null ? _state.forwardedRequestCount.intValue() : 0;
    }
   
    public void setForwardedRequestCount( int count )
    {
        _state.forwardedRequestCount = new Integer( count );
    }

    public String getOriginalServletPath()
    {
        return _state.originalServletPath;
    }

    public void setOriginalServletPath( String originalServletPath )
    {
        _state.originalServletPath = originalServletPath;
    }

    public FlowController getCurrentFlowController()
    {
        return _state.currentFlowController;
    }

    public void setCurrentFlowController( FlowController currentFlowController )
    {
        _state.currentFlowController = currentFlowController;
    }

    public ViewRenderer getViewRenderer()
    {
        return _state.viewRenderer;
    }

    public void setViewRenderer( ViewRenderer viewRenderer )
    {
        _state.viewRenderer = viewRenderer;
    }

    public PreviousPageInfo getPreviousPageInfo( boolean remove )
    {
        PreviousPageInfo retVal = _state.previousPageInfo;
        if ( remove ) _state.previousPageInfo = null;
        return retVal;
    }

    public void setPreviousPageInfo( PreviousPageInfo previousPageInfo )
    {
        _state.previousPageInfo = previousPageInfo;
    }

    public boolean isReturningFromActionIntercept()
    {
        return _state.returningFromActionIntercept;
    }

    public void setReturningFromActionIntercept( boolean returningFromActionIntercept )
    {
        _state.returningFromActionIntercept = returningFromActionIntercept;
    }

    public HttpServletRequest getHttpRequest()
    {
        return ( HttpServletRequest ) super.getRequest();
    }
   
    public String getPageFlowScopedFormName()
    {
        return _state.pageFlowScopedFormName;
    }
   
    public void setPageFlowScopedFormName( String pageFlowScopedFormName )
    {
        _state.pageFlowScopedFormName = pageFlowScopedFormName;
    }
   
    public boolean isProcessPopulateAlreadyCalled()
    {
        return _state.processPopulateAlreadyCalled;
    }
   
    public void setProcessPopulateAlreadyCalled( boolean processPopulateAlreadyCalled )
    {
        _state.processPopulateAlreadyCalled = processPopulateAlreadyCalled;
    }
   
    public boolean isForwardedByButton()
    {
        return _state.forwardedByButton;
    }
   
    public void setForwardedByButton( boolean forwardedByButton )
    {
        _state.forwardedByButton = forwardedByButton;
    }
   
    public MultipartRequestWrapper getMultipartRequestWrapper()
    {
        return _state.multipartRequestWrapper;
    }
   
    public void setMultipartRequestWrapper( MultipartRequestWrapper multipartRequestWrapper )
    {
        _state.multipartRequestWrapper = multipartRequestWrapper;
    }
   
    public boolean isStayInCurrentModule()
    {
        return _state.stayInCurrentModule;
    }
   
    public void setStayInCurrentModule( boolean stayInCurrentModule )
    {
        _state.stayInCurrentModule = stayInCurrentModule;
    }
   
    public Throwable getExceptionBeingHandled()
    {
        return _state.exceptionBeingHandled;
    }
   
    public void setExceptionBeingHandled( Throwable th )
    {
        _state.exceptionBeingHandled = th;
    }
   
    public static PageFlowRequestWrapper wrapRequest( HttpServletRequest req )
    {
        PageFlowRequestWrapper retVal;
        if ( req instanceof PageFlowRequestWrapper )
        {
            retVal = ( PageFlowRequestWrapper ) req;
        }
        else
        {
            retVal = new PageFlowRequestWrapper( req );
        }
       
        //
        // If there's *any* PageFlowRequestWrapper up the chain of wrapped requests, we must copy values from that.
        //
        ServletRequest j = retVal.getRequest();
        while ( j instanceof HttpServletRequestWrapper )
        {
            if ( j instanceof PageFlowRequestWrapper )
            {
                retVal.initFrom( ( PageFlowRequestWrapper ) j );
                break;
            }
           
            j = ( ( HttpServletRequestWrapper ) j ).getRequest();
        }
       
        return retVal;
    }
   
    /**
     * This override returns "utf-8" if the character encoding in the request is null.  It works around a Struts
     * issue (http://issues.apache.org/bugzilla/show_bug.cgi?id=29668), where CommonsMultipartRequestHandler uses
     * the character encoding from the request, which causes problems if the encoding wasn't specified in the request
     * (as it usually never is).  This is tracked in Beehive's JIRA as
     * http://issues.apache.org/jira/browse/BEEHIVE-803 .
     */
    public String getCharacterEncoding()
    {
        String encoding = super.getCharacterEncoding();
        return encoding != null ? encoding : "utf-8";
    }
}
TOP

Related Classes of org.apache.beehive.netui.pageflow.internal.PageFlowRequestWrapper$State

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.