001 // Copyright 2008, 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.internal.structure;
016
017 import org.apache.tapestry5.ComponentResources;
018 import org.apache.tapestry5.Link;
019 import org.apache.tapestry5.ioc.Messages;
020 import org.apache.tapestry5.ioc.OperationTracker;
021 import org.apache.tapestry5.ioc.services.PerThreadValue;
022 import org.apache.tapestry5.ioc.services.PerthreadManager;
023 import org.apache.tapestry5.model.ComponentModel;
024 import org.apache.tapestry5.services.ContextValueEncoder;
025 import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
026 import org.slf4j.Logger;
027
028 /**
029 * Provides access to common methods of various services, needed by implementations of {@link ComponentPageElement} and
030 * {@link org.apache.tapestry5.internal.InternalComponentResources}.
031 */
032 public interface ComponentPageElementResources extends ContextValueEncoder, OperationTracker
033 {
034 /**
035 * Returns the selector associated with this resources.
036 *
037 * @since 5.3
038 */
039 ComponentResourceSelector getSelector();
040
041 /**
042 * Used to obtain a {@link org.apache.tapestry5.ioc.Messages} instance for a particular component. If the component
043 * extends from another component, then its localized properties will merge with its parent's properties (with the
044 * subclass overriding the super class on any conflicts).
045 *
046 * @param componentModel
047 * @return the message catalog for the component, in the indicated locale
048 * @see org.apache.tapestry5.services.messages.ComponentMessagesSource
049 */
050 Messages getMessages(ComponentModel componentModel);
051
052 /**
053 * Performs a coercion from an input type to a desired output type. When the target type is a primitive, the actual
054 * conversion will be to the equivalent wrapper type. In some cases, the TypeCoercer will need to search for an
055 * appropriate coercion, and may even combine existing coercions to form new ones; in those cases, the results of
056 * the search are cached.
057 *
058 * @param <S>
059 * source type (input)
060 * @param <T>
061 * target type (output)
062 * @param input
063 * @param targetType
064 * defines the target type
065 * @return the coerced value
066 * @see org.apache.tapestry5.ioc.services.TypeCoercer
067 */
068 <S, T> T coerce(S input, Class<T> targetType);
069
070 /**
071 * Gets the Class instance for then give name.
072 *
073 * @param className
074 * fully qualified class name
075 * @return the class instance
076 * @see org.apache.tapestry5.internal.services.ComponentClassCache
077 */
078 Class toClass(String className);
079
080 /**
081 * Creates a link on behalf of a component.
082 *
083 * @param resources
084 * resources for the component
085 * @param eventType
086 * type of event to create
087 * @param forForm
088 * true if generating for a form submission
089 * @param context
090 * additional event context associated with the link
091 * @return the link
092 * @since 5.1.0.0
093 */
094 Link createComponentEventLink(ComponentResources resources, String eventType, boolean forForm, Object... context);
095
096 /**
097 * Creates a page render request link to render a specific page.
098 *
099 * @param pageName
100 * the logical name of the page to link to
101 * @param override
102 * if true, the context is used even if empty (normally, the target page is allowed to passivate,
103 * providing a context, when the provided context is empty)
104 * @param context
105 * the activation context for the page. If omitted, the activation context is obtained from the
106 * target page
107 * @return link for a render request to the targetted page
108 * @since 5.1.0.0
109 */
110 Link createPageRenderLink(String pageName, boolean override, Object... context);
111
112 /**
113 * Creates a page render request link to render a specific page. Using a page class, rather than a page name, is
114 * more refactoring safe (in the even the page is renamed or moved).
115 *
116 * @param pageClass
117 * identifies the page to link to
118 * @param override
119 * if true, the context is used even if empty (normally, the target page is allowed to passivate,
120 * providing a context, when the provided context is empty)
121 * @param context
122 * the activation context for the page. If omitted, the activation context is obtained from the
123 * target page
124 * @return link for a render request to the targetted page
125 * @since 5.1
126 */
127 Link createPageRenderLink(Class pageClass, boolean override, Object... context);
128
129 /**
130 * Returns the event logger for the provided component logger. The event logger is based on the component logger's
131 * name (which matches the component class name) with a "tapestry..events." prefix.
132 *
133 * @param componentLogger
134 * provides base name for logger
135 * @return the logger
136 */
137 Logger getEventLogger(Logger componentLogger);
138
139 /**
140 * Wrapper around {@link PerthreadManager#createValue()}.
141 *
142 * @since 5.2.0
143 */
144 <T> PerThreadValue<T> createPerThreadValue();
145 }