001    // Copyright 2008, 2009, 2010, 2011 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    // http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry5.services;
016    
017    import org.apache.tapestry5.EventContext;
018    import org.apache.tapestry5.TapestryConstants;
019    import org.apache.tapestry5.internal.TapestryInternalUtils;
020    import org.apache.tapestry5.internal.structure.PageResetListener;
021    
022    /**
023     * Used with {@link org.apache.tapestry5.services.PageRenderRequestHandler} and
024     * {@link org.apache.tapestry5.services.PageRenderRequestFilter} to define the logical page name and
025     * activation context for the request.
026     */
027    public class PageRenderRequestParameters
028    {
029        private final String logicalPageName;
030    
031        private final EventContext activationContext;
032    
033        /**
034         * @since 5.2.0
035         */
036        private final boolean loopback;
037    
038        /**
039         * @deprecated Use {@link #PageRenderRequestParameters(String, EventContext, boolean)}.
040         */
041        public PageRenderRequestParameters(String logicalPageName, EventContext activationContext)
042        {
043            this(logicalPageName, activationContext, false);
044        }
045    
046        /**
047         * @since 5.2.0
048         */
049        public PageRenderRequestParameters(String logicalPageName, EventContext activationContext, boolean loopback)
050        {
051            assert logicalPageName != null;
052            assert activationContext != null;
053            this.logicalPageName = logicalPageName;
054            this.activationContext = activationContext;
055            this.loopback = loopback;
056        }
057    
058        /**
059         * Returns a {@linkplain ComponentClassResolver#canonicalizePageName(String) canonicalized} version of the page
060         * name.
061         */
062        public String getLogicalPageName()
063        {
064            return logicalPageName;
065        }
066    
067        public EventContext getActivationContext()
068        {
069            return activationContext;
070        }
071    
072        @Override
073        public boolean equals(Object obj)
074        {
075            if (this == obj)
076                return true;
077    
078            if (obj == null || getClass() != obj.getClass())
079                return false;
080    
081            PageRenderRequestParameters other = (PageRenderRequestParameters) obj;
082    
083            return loopback == other.loopback && logicalPageName.equals(other.logicalPageName)
084                    && TapestryInternalUtils.isEqual(activationContext, other.activationContext);
085        }
086    
087        /**
088         * Is this request a loopback (a request for the same page that rendered it in the first place)?
089         *
090         * @see TapestryConstants#PAGE_LOOPBACK_PARAMETER_NAME
091         * @see PageResetListener
092         * @since 5.2.0
093         */
094        public boolean isLoopback()
095        {
096            return loopback;
097        }
098    
099        @Override
100        public String toString()
101        {
102            return String.format("PageRenderRequestParameters[%s]", logicalPageName);
103        }
104    }