Hey Mike,

please make sure you are running the build;
I am seeing checkstyle problems for this new file; No license added to
the beginning
of the file...

#fixed in revision 775217

-Matthias

On Wed, May 13, 2009 at 5:10 PM,  <mconc...@apache.org> wrote:
> Author: mconcini
> Date: Wed May 13 15:10:38 2009
> New Revision: 774395
>
> URL: http://svn.apache.org/viewvc?rev=774395&view=rev
> Log:
> MYFACES-2219 - new ViewHandlerImpl class
>
> Added:
>    
> myfaces/core/branches/2_0_0/impl/src/main/java/org/apache/myfaces/application/ViewHandlerImpl.java
>
> Added: 
> myfaces/core/branches/2_0_0/impl/src/main/java/org/apache/myfaces/application/ViewHandlerImpl.java
> URL: 
> http://svn.apache.org/viewvc/myfaces/core/branches/2_0_0/impl/src/main/java/org/apache/myfaces/application/ViewHandlerImpl.java?rev=774395&view=auto
> ==============================================================================
> --- 
> myfaces/core/branches/2_0_0/impl/src/main/java/org/apache/myfaces/application/ViewHandlerImpl.java
>  (added)
> +++ 
> myfaces/core/branches/2_0_0/impl/src/main/java/org/apache/myfaces/application/ViewHandlerImpl.java
>  Wed May 13 15:10:38 2009
> @@ -0,0 +1,358 @@
> +package org.apache.myfaces.application;
> +
> +import java.beans.BeanDescriptor;
> +import java.beans.BeanInfo;
> +import java.beans.PropertyDescriptor;
> +import java.io.IOException;
> +import java.util.ArrayList;
> +import java.util.Collection;
> +import java.util.HashMap;
> +import java.util.Iterator;
> +import java.util.List;
> +import java.util.Locale;
> +import java.util.Map;
> +
> +import javax.el.ExpressionFactory;
> +import javax.el.MethodExpression;
> +import javax.el.ValueExpression;
> +import javax.faces.FacesException;
> +import javax.faces.FactoryFinder;
> +import javax.faces.application.Application;
> +import javax.faces.application.StateManager;
> +import javax.faces.application.ViewHandler;
> +import javax.faces.component.ActionSource2;
> +import javax.faces.component.EditableValueHolder;
> +import javax.faces.component.UIComponent;
> +import javax.faces.component.UIViewParameter;
> +import javax.faces.component.UIViewRoot;
> +import javax.faces.context.ExternalContext;
> +import javax.faces.context.FacesContext;
> +import javax.faces.event.ActionEvent;
> +import javax.faces.event.MethodExpressionActionListener;
> +import javax.faces.event.MethodExpressionValueChangeListener;
> +import javax.faces.event.ValueChangeEvent;
> +import javax.faces.render.RenderKitFactory;
> +import javax.faces.render.ResponseStateManager;
> +import javax.faces.validator.MethodExpressionValidator;
> +import javax.faces.view.ActionSource2AttachedObjectHandler;
> +import javax.faces.view.ActionSource2AttachedObjectTarget;
> +import javax.faces.view.AttachedObjectHandler;
> +import javax.faces.view.AttachedObjectTarget;
> +import javax.faces.view.EditableValueHolderAttachedObjectHandler;
> +import javax.faces.view.EditableValueHolderAttachedObjectTarget;
> +import javax.faces.view.ValueHolderAttachedObjectHandler;
> +import javax.faces.view.ValueHolderAttachedObjectTarget;
> +import javax.faces.view.ViewDeclarationLanguage;
> +import javax.faces.view.ViewDeclarationLanguageFactory;
> +import javax.faces.view.ViewMetadata;
> +import javax.servlet.http.HttpServletResponse;
> +
> +import org.apache.commons.logging.Log;
> +import org.apache.commons.logging.LogFactory;
> +import org.apache.myfaces.shared_impl.config.MyfacesConfig;
> +import org.apache.myfaces.shared_impl.renderkit.html.util.JavascriptUtils;
> +
> +public class ViewHandlerImpl extends ViewHandler
> +{
> +    private static final Log log = LogFactory.getLog(ViewHandlerImpl.class);
> +    public static final String FORM_STATE_MARKER = 
> "<!--@@JSF_FORM_STATE_MARKER@@-->";
> +    private ViewHandlerSupport _viewHandlerSupport;
> +    private ViewDeclarationLanguageFactory _vdlFactory;
> +
> +    public ViewHandlerImpl()
> +    {
> +        _vdlFactory = 
> (ViewDeclarationLanguageFactory)FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY);
> +        if (log.isTraceEnabled())
> +            log.trace("New ViewHandler instance created");
> +    }
> +
> +   �...@override
> +    public String deriveViewId(FacesContext context, String input)
> +    {
> +        String calculatedViewId = input;
> +        try
> +        {
> +            //TODO: JSF 2.0 - need to make sure calculateViewId follows the 
> new algorithm from 7.5.2
> +            calculatedViewId = 
> getViewHandlerSupport().calculateViewId(context, input);
> +        }
> +        catch (InvalidViewIdException e)
> +        {
> +            sendSourceNotFound(context, e.getMessage());
> +        }
> +        return calculatedViewId;
> +    }
> +
> +   �...@override
> +    public String getBookmarkableURL(FacesContext context, String viewId,
> +            Map<String, List<String>> parameters, boolean includeViewParams)
> +    {
> +        Map<String, List<String>> viewParameters;
> +        ExternalContext externalContext = context.getExternalContext();
> +        if (includeViewParams)
> +        {
> +            viewParameters = getViewParameterList(context, viewId, 
> parameters);
> +        }
> +        else
> +        {
> +            viewParameters = parameters;
> +        }
> +
> +        String actionEncodedViewId = getActionURL(context, viewId);
> +        String bookmarkEncodedURL = 
> externalContext.encodeBookmarkableURL(actionEncodedViewId, viewParameters);
> +        return externalContext.encodeActionURL(bookmarkEncodedURL);
> +    }
> +
> +   �...@override
> +    public String getRedirectURL(FacesContext context, String viewId,
> +            Map<String, List<String>> parameters, boolean includeViewParams)
> +    {
> +        Map<String, List<String>> viewParameters;
> +        ExternalContext externalContext = context.getExternalContext();
> +        if (includeViewParams)
> +        {
> +            viewParameters = getViewParameterList(context, viewId, 
> parameters);
> +        }
> +        else
> +        {
> +            viewParameters = parameters;
> +        }
> +
> +        String actionEncodedViewId = getActionURL(context, viewId);
> +        String redirectEncodedURL = 
> externalContext.encodeRedirectURL(actionEncodedViewId, viewParameters);
> +        return externalContext.encodeActionURL(redirectEncodedURL);
> +    }
> +
> +   �...@override
> +    public ViewDeclarationLanguage getViewDeclarationLanguage(
> +            FacesContext context, String viewId)
> +    {
> +        return _vdlFactory.getViewDeclarationLanguage(viewId);
> +    }
> +
> +   �...@override
> +    public void initView(FacesContext context) throws FacesException
> +    {
> +        if(context.getExternalContext().getRequestCharacterEncoding() == 
> null)
> +        {
> +            super.initView(context);
> +        }
> +    }
> +
> +    /**
> +     * Get the locales specified as acceptable by the original request, 
> compare them to the
> +     * locales supported by this Application and return the best match.
> +     */
> +   �...@override
> +    public Locale calculateLocale(FacesContext facesContext)
> +    {
> +        Application application = facesContext.getApplication();
> +        for (Iterator<Locale> requestLocales = 
> facesContext.getExternalContext().getRequestLocales(); requestLocales
> +                .hasNext();)
> +        {
> +            Locale requestLocale = requestLocales.next();
> +            for (Iterator<Locale> supportedLocales = 
> application.getSupportedLocales(); supportedLocales.hasNext();)
> +            {
> +                Locale supportedLocale = supportedLocales.next();
> +                // higher priority to a language match over an exact match
> +                // that occurs further down (see JSTL Reference 1.0 8.3.1)
> +                if 
> (requestLocale.getLanguage().equals(supportedLocale.getLanguage())
> +                        && (supportedLocale.getCountry() == null || 
> supportedLocale.getCountry().length() == 0))
> +                {
> +                    return supportedLocale;
> +                }
> +                else if (supportedLocale.equals(requestLocale))
> +                {
> +                    return supportedLocale;
> +                }
> +            }
> +        }
> +
> +        Locale defaultLocale = application.getDefaultLocale();
> +        return defaultLocale != null ? defaultLocale : Locale.getDefault();
> +    }
> +
> +   �...@override
> +    public String calculateRenderKitId(FacesContext facesContext)
> +    {
> +        Object renderKitId = 
> facesContext.getExternalContext().getRequestMap().get(
> +                ResponseStateManager.RENDER_KIT_ID_PARAM);
> +        if (renderKitId == null)
> +        {
> +            renderKitId = 
> facesContext.getApplication().getDefaultRenderKitId();
> +        }
> +        if (renderKitId == null)
> +        {
> +            renderKitId = RenderKitFactory.HTML_BASIC_RENDER_KIT;
> +        }
> +        return renderKitId.toString();
> +    }
> +
> +   �...@override
> +    public UIViewRoot createView(FacesContext context, String viewId)
> +    {
> +       checkNull(context, "facesContext");
> +       String calculatedViewId = 
> getViewHandlerSupport().calculateViewId(context, viewId);
> +       return 
> getViewDeclarationLanguage(context,calculatedViewId).createView(context,calculatedViewId);
> +    }
> +
> +   �...@override
> +    public String getActionURL(FacesContext context, String viewId)
> +    {
> +        return getViewHandlerSupport().calculateActionURL(context, viewId);
> +    }
> +
> +   �...@override
> +    public String getResourceURL(FacesContext facesContext, String path)
> +    {
> +        if (path.length() > 0 && path.charAt(0) == '/')
> +        {
> +            return facesContext.getExternalContext().getRequestContextPath() 
> + path;
> +        }
> +
> +        return path;
> +
> +    }
> +
> +   �...@override
> +    public void renderView(FacesContext context, UIViewRoot viewToRender)
> +            throws IOException, FacesException
> +    {
> +
> +        checkNull(context, "context");
> +        checkNull(viewToRender, "viewToRender");
> +
> +        
> getViewDeclarationLanguage(context,viewToRender.getViewId()).renderView(context,
>  viewToRender);
> +    }
> +
> +   �...@override
> +    public UIViewRoot restoreView(FacesContext context, String viewId)
> +    {
> +        checkNull(context, "context");
> +
> +        String calculatedViewId = 
> getViewHandlerSupport().calculateViewId(context, viewId);
> +        return 
> getViewDeclarationLanguage(context,calculatedViewId).restoreView(context, 
> viewId);
> +    }
> +
> +   �...@override
> +    public void writeState(FacesContext context) throws IOException
> +    {
> +        checkNull(context, "context");
> +
> +        if(context.getPartialViewContext().isAjaxRequest())
> +            return;
> +
> +        StateManager stateManager = 
> context.getApplication().getStateManager();
> +        if (stateManager.isSavingStateInClient(context))
> +        {
> +            // Only write state marker if javascript view state is disabled
> +            ExternalContext extContext = context.getExternalContext();
> +            if (!(JavascriptUtils.isJavascriptAllowed(extContext) && 
> MyfacesConfig.getCurrentInstance(extContext).isViewStateJavascript())) {
> +                context.getResponseWriter().write(FORM_STATE_MARKER);
> +            }
> +        }
> +        else
> +        {
> +            stateManager.writeState(context, new Object[2]);
> +        }
> +    }
> +
> +    private Map<String, List<String>> getViewParameterList(FacesContext 
> context,
> +            String viewId, Map<String, List<String>> parametersFromArg)
> +    {
> +
> +        Map<String, List<String>> viewParameters;
> +        UIViewRoot viewRoot = context.getViewRoot();
> +        String currentViewId = viewRoot.getViewId();
> +        Collection<UIViewParameter> toViewParams;
> +        Collection<UIViewParameter> currentViewParams = 
> ViewMetadata.getViewParameters(viewRoot);
> +
> +        if (currentViewId.equals(viewId))
> +        {
> +            toViewParams = currentViewParams;
> +        }
> +        else
> +        {
> +            String calculatedViewId = 
> getViewHandlerSupport().calculateViewId(context, viewId);
> +            ViewDeclarationLanguage vdl = 
> getViewDeclarationLanguage(context,calculatedViewId);
> +            ViewMetadata viewMetadata = vdl.getViewMetadata(context, viewId);
> +            UIViewRoot viewFromMetaData = 
> viewMetadata.createMetadataView(context);
> +            toViewParams = ViewMetadata.getViewParameters(viewFromMetaData);
> +        }
> +
> +        if (toViewParams.isEmpty())
> +        {
> +            return parametersFromArg;
> +        }
> +
> +        for (UIViewParameter viewParameter : toViewParams)
> +        {
> +            if (!parametersFromArg.containsKey(viewParameter.getName()))
> +            {
> +                String parameterValue = 
> viewParameter.getStringValueFromModel(context);
> +                if (parameterValue == null)
> +                {
> +                    if(currentViewId.equals(viewId))
> +                    {
> +                        parameterValue = 
> viewParameter.getStringValue(context);
> +                    }
> +                    else
> +                    {
> +                        boolean found = false;
> +                        for (UIViewParameter curParam : currentViewParams) {
> +                            if (curParam.getName() != null && 
> viewParameter.getName() != null &&
> +                                    
> curParam.getName().equals(viewParameter.getName()))
> +                            {
> +                                parameterValue = 
> curParam.getStringValue(context);
> +                                found = true;
> +                            }
> +                            if (found)
> +                                break;
> +                        }
> +                    }
> +                }
> +                if (parameterValue != null)
> +                {
> +                    List<String> parameterValueList = 
> parametersFromArg.get(viewParameter.getName());
> +                    if (parameterValueList == null)
> +                    {
> +                        parameterValueList = new ArrayList<String>();
> +                    }
> +                    parameterValueList.add(parameterValue);
> +                    
> parametersFromArg.put(viewParameter.getName(),parameterValueList);
> +                }
> +            }
> +        }
> +        return parametersFromArg;
> +    }
> +
> +    private void checkNull(final Object o, final String param)
> +    {
> +        if (o == null)
> +        {
> +            throw new NullPointerException(param + " can not be null.");
> +        }
> +    }
> +
> +    private void sendSourceNotFound(FacesContext context, String message)
> +    {
> +        HttpServletResponse response = (HttpServletResponse) 
> context.getExternalContext().getResponse();
> +        try
> +        {
> +            context.responseComplete();
> +            response.sendError(HttpServletResponse.SC_NOT_FOUND, message);
> +        }
> +        catch (IOException ioe)
> +        {
> +            throw new FacesException(ioe);
> +        }
> +    }
> +
> +    protected ViewHandlerSupport getViewHandlerSupport()
> +    {
> +        if (_viewHandlerSupport == null)
> +        {
> +            _viewHandlerSupport = new DefaultViewHandlerSupport();
> +        }
> +        return _viewHandlerSupport;
> +    }
> +}
>
>
>



-- 
Matthias Wessendorf

blog: http://matthiaswessendorf.wordpress.com/
sessions: http://www.slideshare.net/mwessendorf
twitter: http://twitter.com/mwessendorf

Reply via email to