    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    }