001// Licensed under the Apache License, Version 2.0 (the "License");
002// you may not use this file except in compliance with the License.
003// You may obtain a copy of the License at
004//
005// http://www.apache.org/licenses/LICENSE-2.0
006//
007// Unless required by applicable law or agreed to in writing, software
008// distributed under the License is distributed on an "AS IS" BASIS,
009// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
010// See the License for the specific language governing permissions and
011// limitations under the License.
012
013package org.apache.tapestry5.services;
014
015import org.apache.tapestry5.MarkupWriter;
016import org.apache.tapestry5.internal.structure.PageResetListener;
017import org.apache.tapestry5.plastic.MethodDescription;
018import org.apache.tapestry5.plastic.PlasticUtils;
019import org.apache.tapestry5.runtime.Component;
020import org.apache.tapestry5.runtime.ComponentEvent;
021import org.apache.tapestry5.runtime.Event;
022import org.apache.tapestry5.runtime.PageLifecycleListener;
023import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
024
025import java.lang.reflect.Modifier;
026
027/**
028 * Constants used by implementations {@link ComponentClassTransformWorker2}.
029 *
030 * Note: render phase methods on transformed components will not be invoked <em>unless</em>
031 * {@linkplain org.apache.tapestry5.model.MutableComponentModel#addRenderPhase(Class) the component model is updated to
032 * identify the use of the corresponding render phase}. This represents an optimization introduced in Tapestry 5.1.
033 */
034public final class TransformConstants
035{
036    // Shared parameters of a whole bunch of lifecycle methods, representing the different
037    // component render states.
038    private static final String[] RENDER_PHASE_METHOD_PARAMETERS =
039            {MarkupWriter.class.getName(), Event.class.getName()};
040
041
042    /**
043     * Description for
044     * {@link org.apache.tapestry5.runtime.Component#dispatchComponentEvent(org.apache.tapestry5.runtime.ComponentEvent)}
045     * .
046     *
047     * @see org.apache.tapestry5.annotations.OnEvent
048     * @since 5.3
049     */
050    public static final MethodDescription DISPATCH_COMPONENT_EVENT_DESCRIPTION = PlasticUtils.getMethodDescription(
051            Component.class, "dispatchComponentEvent", ComponentEvent.class);
052
053
054    /**
055     * Description for {@link org.apache.tapestry5.runtime.PageLifecycleListener#containingPageDidLoad()}.
056     *
057     * @since 5.3
058     */
059    public static final MethodDescription CONTAINING_PAGE_DID_LOAD_DESCRIPTION = PlasticUtils.getMethodDescription(
060            PageLifecycleListener.class, "containingPageDidLoad");
061
062    /**
063     * Description for {@link org.apache.tapestry5.internal.structure.PageResetListener#containingPageDidReset()}. Note that the {@link PageResetListener}
064     * interface is not automatically implemented by components. ]
065     *
066     * @see org.apache.tapestry5.annotations.PageReset
067     * @see org.apache.tapestry5.internal.transform.PageResetAnnotationWorker
068     * @since 5.3
069     */
070    public static final MethodDescription CONTAINING_PAGE_DID_RESET_DESCRIPTION = PlasticUtils.getMethodDescription(PageResetListener.class, "containingPageDidReset");
071
072
073    /**
074     * Description for {@link org.apache.tapestry5.runtime.Component#postRenderCleanup()}.
075     *
076     * @since 5.3
077     */
078    public static final MethodDescription POST_RENDER_CLEANUP_DESCRIPTION = PlasticUtils.getMethodDescription(Component.class, "postRenderCleanup");
079
080
081    /**
082     * Description for {@link org.apache.tapestry5.runtime.PageLifecycleListener#containingPageDidDetach()}.
083     *
084     * @since 5.3
085     */
086    public static final MethodDescription CONTAINING_PAGE_DID_DETACH_DESCRIPTION = PlasticUtils.getMethodDescription(PageLifecycleListener.class, "containingPageDidDetach");
087
088
089    /**
090     * Description for {@link org.apache.tapestry5.runtime.PageLifecycleListener#containingPageDidAttach()}.
091     *
092     * @since 5.3
093     */
094    public static final MethodDescription CONTAINING_PAGE_DID_ATTACH_DESCRIPTION = PlasticUtils.getMethodDescription(PageLifecycleListener.class, "containingPageDidAttach");
095
096
097    /**
098     * Description for {@link org.apache.tapestry5.runtime.Component#setupRender(MarkupWriter, Event)}.
099     *
100     * @see org.apache.tapestry5.annotations.SetupRender
101     * @since 5.3
102     */
103    public static final MethodDescription SETUP_RENDER_DESCRIPTION = renderPhaseDescription("setupRender");
104
105
106    /**
107     * Description for {@link org.apache.tapestry5.runtime.Component#beginRender(MarkupWriter, Event)}.
108     *
109     * @see org.apache.tapestry5.annotations.BeginRender
110     * @since 5.3
111     */
112    public static final MethodDescription BEGIN_RENDER_DESCRIPTION = renderPhaseDescription("beginRender");
113
114
115    /**
116     * Description for {@link org.apache.tapestry5.runtime.Component#beforeRenderTemplate(MarkupWriter, Event)}.
117     *
118     * @see org.apache.tapestry5.annotations.BeforeRenderTemplate
119     * @since 5.3
120     */
121    public static final MethodDescription BEFORE_RENDER_TEMPLATE_DESCRIPTION = renderPhaseDescription("beforeRenderTemplate");
122
123
124    /**
125     * Description for {@link org.apache.tapestry5.runtime.Component#afterRenderTemplate(MarkupWriter, Event)}.
126     *
127     * @see org.apache.tapestry5.annotations.BeforeRenderTemplate
128     * @since 5.3
129     */
130    public static final MethodDescription AFTER_RENDER_TEMPLATE_DESCRIPTION = renderPhaseDescription("afterRenderTemplate");
131
132
133    /**
134     * Description for {@link org.apache.tapestry5.runtime.Component#beforeRenderBody(MarkupWriter, Event)}.
135     *
136     * @see org.apache.tapestry5.annotations.BeforeRenderBody
137     * @since 5.3
138     */
139    public static final MethodDescription BEFORE_RENDER_BODY_DESCRIPTION = renderPhaseDescription("beforeRenderBody");
140
141
142    /**
143     * Description for {@link org.apache.tapestry5.runtime.Component#afterRenderBody(MarkupWriter, Event)}.
144     *
145     * @see org.apache.tapestry5.annotations.AfterRenderBody
146     * @since 5.3
147     */
148    public static final MethodDescription AFTER_RENDER_BODY_DESCRIPTION = renderPhaseDescription("afterRenderBody");
149
150
151    /**
152     * Description for {@link org.apache.tapestry5.runtime.Component#afterRender(MarkupWriter, Event)}
153     *
154     * @see org.apache.tapestry5.annotations.AfterRender
155     * @since 5.3
156     */
157    public static final MethodDescription AFTER_RENDER_DESCRIPTION = renderPhaseDescription("afterRender");
158
159
160    /**
161     * Description for {@link org.apache.tapestry5.runtime.Component#cleanupRender(MarkupWriter, Event)}.
162     *
163     * @see org.apache.tapestry5.annotations.CleanupRender
164     * @since 5.3
165     */
166    public static final MethodDescription CLEANUP_RENDER_DESCRIPTION = renderPhaseDescription("cleanupRender");
167
168
169    private static MethodDescription renderPhaseDescription(String name)
170    {
171        return new MethodDescription(Modifier.PUBLIC, "void", name, RENDER_PHASE_METHOD_PARAMETERS, null, null);
172    }
173
174}