Class InternalComponentResourcesImpl
java.lang.Object
org.apache.tapestry5.commons.internal.util.LockSupport
org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl
- All Implemented Interfaces:
Locatable
,ComponentResources
,ComponentResourcesCommon
,InternalComponentResources
,InternalComponentResourcesCommon
,RenderCommand
public class InternalComponentResourcesImpl
extends LockSupport
implements InternalComponentResources
The bridge between a component and its
ComponentPageElement
, that supplies all kinds of
resources to the
component, including access to its parameters, parameter bindings, and persistent field data.-
Constructor Summary
ConstructorsConstructorDescriptionInternalComponentResourcesImpl
(Page page, ComponentPageElement element, ComponentResources containerResources, ComponentPageElementResources elementResources, String completeId, String nestedId, Instantiator componentInstantiator, boolean mixin) -
Method Summary
Modifier and TypeMethodDescriptionvoid
Adds a listener object that will be notified about page lifecycle events.void
addPageResetListener
(PageResetListener listener) void
bindParameter
(String parameterName, Binding binding) Used during construction of the page to identify the binding for a particular parameter.createEventLink
(String eventType, Object... context) Creates a component event request link as a callback for this component.createFormEventLink
(String eventType, Object... context) Creates a component event request link as a callback for this component.void
Discards all persistent field changes for the page containing the component.As withComponentResourcesCommon.getBlock(String)
, but returns null if the block is not found.getAnnotationProvider
(String parameterName) Returns an annotation provider, used to obtain annotations related to the parameter.Returns the base resource for the component, which will represent the class's location within the classpath (this is used to resolve relative assets).getBinding
(String parameterName) Returns the binding for the given parameter name, or null.Returns a block from the component's template, referenced by its id.getBlockParameter
(String parameterName) Used to access an informal parameter that's a Block.getBody()
Returns the body of this component as a (possibly empty) block.getBoundGenericType
(String parameterName) Returns the generic type of the bound parameter, or null if the parameter is not bound.getBoundType
(String parameterName) Returns the actual type of the bound parameter, or null if the parameter is not bound.Returns a string consisting of the logical name of the containing page, and thenested id
of this component, separated by a colon.Returns the component this object provides resources for.Returns the component model object that defines the behavior of the component.Returns the component which contains this component, or null for the root component.Returns theMessages
from the container, or null if this is the root component (with no container).Returns theComponentResources
for the container, or null if the this is the root component (that has no container).Returns the name of element that represents the component in its template, or null if not known.getElementName
(String defaultElementName) Returns the name of element that represents the component in its template, or the provided default element name if the element was a component type (in the Tapestry namespace).getEmbeddedComponent
(String embeddedId) Returns an embedded component, given the component's id.getFieldChange
(String fieldName) Get the current persisted value of the field.getId()
Returns the simple (or local) id of the component.<T> T
getInformalParameter
(String name, Class<T> type) Reads an informal parameter and coerces the bound value to the indicated type.Constructs a map linking informal parameters to the corresponding bindings.Returns a list of the names of any informal parameters bound to this component.Returns the locale for the page containing this component.Returns the location associated with this object for error reporting purposes.org.slf4j.Logger
Returns the log instance associated with the component (which is based on the component or mixin's class name).Returns the message catalog for this component.getMixinByClassName
(String mixinClassName) Returns the mixin instance for the fully qualfied mixin class name.Return a string consisting the concatenated ids of all containing components, separated by periods.getPage()
Returns the page that contains this component.Provides access to an object that can be used to register callbacks for page lifecycle events.Returns the logical name of the page containing this component.<T extends Annotation>
TgetParameterAnnotation
(String parameterName, Class<T> annotationType) Obtains an annotation provided by a parameter.getParameterConduit
(String parameterName) Gets a previously stored ParameterConduit, allowing PCs to be shared between a component and a mixin of that component.getPropertyName
(String parameterName) Returns the name of the bound property ifPropBinding
is used and the expression points to a property on a bean (e.g.getRenderVariable
(String name) Returns a previously stored render variable.Returns the selector used when constructing the component and its containing page.boolean
hasBody()
Returns true if the element has a body and false otherwise.boolean
hasFieldChange
(String fieldName) Checks to see if there is a value stored for the indicated field.boolean
Returns true if the named parameter is bound, false if not.boolean
isLoaded()
Returns true if the component has finished loading.boolean
isMixin()
Returns true if these resources represent a mixin to another component.boolean
Returns true if the component is currently rendering, false otherwise.void
persistFieldChange
(String fieldName, Object newValue) Posts a change to a persistent field.void
Allows the resources to cleanup any render-time only data.void
Removes a previously added listener.void
render
(MarkupWriter writer, RenderQueue queue) Invoked on an object to request that it render itself.void
renderInformalParameters
(MarkupWriter writer) Indentifies all parameters that are not formal parameters and writes each as a attribute/value pair into the current element of the markup writer.void
setParameterConduit
(String parameterName, ParameterConduit conduit) Stores a ParameterConduit for later access.void
storeRenderVariable
(String name, Object value) Stores a render variable, accessible with the provided name.toString()
boolean
triggerContextEvent
(String eventType, EventContext context, ComponentEventCallback callback) Triggers a component event.boolean
triggerEvent
(String eventType, Object[] context, ComponentEventCallback handler) A convenience method for invokingComponentResourcesCommon.triggerContextEvent(String, EventContext, ComponentEventCallback)
.Methods inherited from class org.apache.tapestry5.commons.internal.util.LockSupport
acquireReadLock, downgradeWriteLockToReadLock, releaseReadLock, releaseWriteLock, takeWriteLock, upgradeReadLockToWriteLock
-
Constructor Details
-
InternalComponentResourcesImpl
public InternalComponentResourcesImpl(Page page, ComponentPageElement element, ComponentResources containerResources, ComponentPageElementResources elementResources, String completeId, String nestedId, Instantiator componentInstantiator, boolean mixin)
-
-
Method Details
-
isMixin
Description copied from interface:ComponentResources
Returns true if these resources represent a mixin to another component. The component is the container of this resources.- Specified by:
isMixin
in interfaceComponentResources
-
getLocation
Description copied from interface:Locatable
Returns the location associated with this object for error reporting purposes.- Specified by:
getLocation
in interfaceLocatable
-
toString
-
getComponentModel
Description copied from interface:ComponentResources
Returns the component model object that defines the behavior of the component.- Specified by:
getComponentModel
in interfaceComponentResources
-
getEmbeddedComponent
Description copied from interface:ComponentResources
Returns an embedded component, given the component's id.- Specified by:
getEmbeddedComponent
in interfaceComponentResources
- Parameters:
embeddedId
- selects the embedded component (case is ignored)
-
getFieldChange
Description copied from interface:InternalComponentResources
Get the current persisted value of the field.- Specified by:
getFieldChange
in interfaceInternalComponentResources
- Parameters:
fieldName
- the name of the field to access- Returns:
- the value stored for the field, or null if no value is currently stored
-
getId
Description copied from interface:ComponentResourcesCommon
Returns the simple (or local) id of the component. The id will be unique within the component's immediate container. For a page's root component, the value null is returned.- Specified by:
getId
in interfaceComponentResourcesCommon
-
hasFieldChange
Description copied from interface:InternalComponentResources
Checks to see if there is a value stored for the indicated field.- Specified by:
hasFieldChange
in interfaceInternalComponentResources
-
createEventLink
Description copied from interface:ComponentResourcesCommon
Creates a component event request link as a callback for this component. The event type and context (as well as the page name and nested component id) will be encoded into a URL. A request for the URL will ComponentResourcesCommon.triggerEvent(String, Object[], org.apache.tapestry5.ComponentEventCallback) trigger} the named event on the component.- Specified by:
createEventLink
in interfaceComponentResourcesCommon
- Parameters:
eventType
- the type of event to be triggered. Event types should be Java identifiers (contain only letters, numbers and the underscore).context
- additional objects to be encoded into the path portion of the link; each is converted to a string and URI encoded- Returns:
- link object for the callback
-
createFormEventLink
Description copied from interface:ComponentResourcesCommon
Creates a component event request link as a callback for this component. The event type and context (as well as the page name and nested component id) will be encoded into a URL. A request for the URL will ComponentResourcesCommon.triggerEvent(String, Object[], org.apache.tapestry5.ComponentEventCallback) trigger} the named event on the component. This is only used for form submission events, as extra data may be encoded in the form as hidden fields.- Specified by:
createFormEventLink
in interfaceComponentResourcesCommon
- Parameters:
eventType
- the type of event to be triggered. Event types should be Java identifiers (contain only letters, numbers and the underscore).context
- additional objects to be encoded into the path portion of the link; each is converted to a string and URI encoded- Returns:
- link object for the callback
-
discardPersistentFieldChanges
Description copied from interface:ComponentResources
Discards all persistent field changes for the page containing the component. Changes are eliminated from persistent storage (such as theSession
) which will take effect in the next request (the attached page instance is not affected).- Specified by:
discardPersistentFieldChanges
in interfaceComponentResources
-
getElementName
Description copied from interface:ComponentResources
Returns the name of element that represents the component in its template, or null if not known.- Specified by:
getElementName
in interfaceComponentResources
- Returns:
- the element name or null
-
getInformalParameterNames
Description copied from interface:ComponentResources
Returns a list of the names of any informal parameters bound to this component.- Specified by:
getInformalParameterNames
in interfaceComponentResources
- Returns:
- the name sorted alphabetically
- See Also:
-
getInformalParameter
Description copied from interface:ComponentResources
Reads an informal parameter and coerces the bound value to the indicated type.- Specified by:
getInformalParameter
in interfaceComponentResources
- Parameters:
name
- name of informal parametertype
- output value type- Returns:
- instance of type
-
getBody
Description copied from interface:ComponentResourcesCommon
Returns the body of this component as a (possibly empty) block. When invoked on a mixin, returns the containing component's body.- Specified by:
getBody
in interfaceComponentResourcesCommon
-
hasBody
Description copied from interface:ComponentResourcesCommon
Returns true if the element has a body and false otherwise. Only components may have a body; pages and mixins will return false.- Specified by:
hasBody
in interfaceComponentResourcesCommon
-
getCompleteId
Description copied from interface:ComponentResourcesCommon
Returns a string consisting of the logical name of the containing page, and thenested id
of this component, separated by a colon. I.e., "MyPage:foo.bar.baz". For a page, returns just the page's name. This value is often used to obtain an equivalent component instance in a later request.- Specified by:
getCompleteId
in interfaceComponentResourcesCommon
- See Also:
-
getComponent
Description copied from interface:ComponentResources
Returns the component this object provides resources for.- Specified by:
getComponent
in interfaceComponentResources
-
isBound
Description copied from interface:ComponentResources
Returns true if the named parameter is bound, false if not.- Specified by:
isBound
in interfaceComponentResources
-
getParameterAnnotation
public <T extends Annotation> T getParameterAnnotation(String parameterName, Class<T> annotationType) Description copied from interface:ComponentResources
Obtains an annotation provided by a parameter.- Specified by:
getParameterAnnotation
in interfaceComponentResources
- Parameters:
parameterName
- name of parameter to search for the annotationannotationType
- the type of annotation- Returns:
- the annotation if found or null otherwise
-
isRendering
Description copied from interface:ComponentResourcesCommon
Returns true if the component is currently rendering, false otherwise. This is most often used to determine if parameter values should be cached.- Specified by:
isRendering
in interfaceComponentResourcesCommon
-
triggerEvent
Description copied from interface:ComponentResourcesCommon
A convenience method for invokingComponentResourcesCommon.triggerContextEvent(String, EventContext, ComponentEventCallback)
. Wraps the context values into anEventContext
.- Specified by:
triggerEvent
in interfaceComponentResourcesCommon
- Parameters:
eventType
- event type (as determined from the request, or otherwise by design)context
- Values that may be provided to the event handler method as method parameters, or null if no context values are availablehandler
- the handler to be informed of the result, or null if the event is a notification that does not support return values from event handler methods (the value true is allowed even if the handler is null).- Returns:
- true if any event handler was invoked (even if no event handler method returns a non-null value)
- See Also:
-
triggerContextEvent
public boolean triggerContextEvent(String eventType, EventContext context, ComponentEventCallback callback) Description copied from interface:ComponentResourcesCommon
Triggers a component event. A search for an event handling method will occur, first in the component, then its container, and so on. When a matching event handler method is located, it is invoked. If the method returns a value, the value is passed to the callback (if callback is null, then it is an error for a method to return a non-null value). Resolution of event type to event handler methods is case insensitive.- Specified by:
triggerContextEvent
in interfaceComponentResourcesCommon
- Parameters:
eventType
- event type (as determined from the request, or otherwise by design)context
- the context (as extracted from the request, or provided by the triggering component); these values may be provided to event handler methods via their parameters (may not be null)callback
- the handler to be informed of the result, or null if the event is a notification that does not support return values from event handler methods (the value true is allowed even if the handler is null).- Returns:
- true if any event handler was invoked (even if no event handler method returns a non-null value)
- See Also:
-
getNestedId
Description copied from interface:ComponentResourcesCommon
Return a string consisting the concatenated ids of all containing components, separated by periods. In addition, nested ids are always all lower case. I.e., "foo.bar.baz". Returns null for the root component of a page.- Specified by:
getNestedId
in interfaceComponentResourcesCommon
-
getPage
Description copied from interface:ComponentResources
Returns the page that contains this component. Technically, the page itself is an internal object in Tapestry and this returns the root component of the actual page, but from an application developer point of view, this is the page.- Specified by:
getPage
in interfaceComponentResources
-
isLoaded
Description copied from interface:InternalComponentResourcesCommon
Returns true if the component has finished loading. Initially, this value will be false.- Specified by:
isLoaded
in interfaceInternalComponentResourcesCommon
- See Also:
-
persistFieldChange
Description copied from interface:InternalComponentResources
Posts a change to a persistent field. If the component is still loading, then this change is ignored. Otherwise, it is propagated, via thepage
to thePersistentFieldManager
.- Specified by:
persistFieldChange
in interfaceInternalComponentResources
-
bindParameter
Description copied from interface:InternalComponentResourcesCommon
Used during construction of the page to identify the binding for a particular parameter.- Specified by:
bindParameter
in interfaceInternalComponentResourcesCommon
-
getBoundType
Description copied from interface:ComponentResources
Returns the actual type of the bound parameter, or null if the parameter is not bound. This is primarily used with property bindings, and is used to determine the actual type of the property, rather than the type of parameter (remember that type coercion automatically occurs, which can mask significant differences between the parameter type and the bound property type).- Specified by:
getBoundType
in interfaceComponentResources
- Parameters:
parameterName
- used to select the parameter (case is ignored)- Returns:
- the type of the bound parameter, or null if the parameter is not bound
- See Also:
-
getBoundGenericType
Description copied from interface:ComponentResources
Returns the generic type of the bound parameter, or null if the parameter is not bound. This is useful for when the parameter is bound to a generic property (eg java.util.List) to determine the element type.- Specified by:
getBoundGenericType
in interfaceComponentResources
- Parameters:
parameterName
- used to select the parameter (case is ignored)- Returns:
- the generic type of the bound parameter, or null if the parameter is not bound
- See Also:
-
getBinding
Description copied from interface:InternalComponentResourcesCommon
Returns the binding for the given parameter name, or null.- Specified by:
getBinding
in interfaceInternalComponentResourcesCommon
- Parameters:
parameterName
- name of component parameter- Returns:
- binding if bound, or null
-
getAnnotationProvider
Description copied from interface:ComponentResources
Returns an annotation provider, used to obtain annotations related to the parameter.- Specified by:
getAnnotationProvider
in interfaceComponentResources
- Parameters:
parameterName
- used to select the parameter (case is ignored)- Returns:
- the annotation provider, or null if the parameter is not bound
-
getLogger
Description copied from interface:ComponentResourcesCommon
Returns the log instance associated with the component (which is based on the component or mixin's class name).- Specified by:
getLogger
in interfaceComponentResourcesCommon
- See Also:
-
getMixinByClassName
Description copied from interface:InternalComponentResourcesCommon
Returns the mixin instance for the fully qualfied mixin class name.- Specified by:
getMixinByClassName
in interfaceInternalComponentResourcesCommon
- Parameters:
mixinClassName
- fully qualified class name- Returns:
- IllegalArgumentException if no such mixin is associated with the core component
-
renderInformalParameters
Description copied from interface:ComponentResources
Indentifies all parameters that are not formal parameters and writes each as a attribute/value pair into the current element of the markup writer.- Specified by:
renderInformalParameters
in interfaceComponentResources
- Parameters:
writer
- to whichattributes
will be written
-
getContainer
Description copied from interface:ComponentResources
Returns the component which contains this component, or null for the root component. For mixins, this returns the component to which the mixin is attached.- Specified by:
getContainer
in interfaceComponentResources
-
getContainerResources
Description copied from interface:ComponentResources
Returns theComponentResources
for the container, or null if the this is the root component (that has no container). As a special case, for a mixin, this returns the core component's resources.- Specified by:
getContainerResources
in interfaceComponentResources
-
getContainerMessages
Description copied from interface:ComponentResources
Returns theMessages
from the container, or null if this is the root component (with no container). As a special case, for a mixin, this return the core component's messages.- Specified by:
getContainerMessages
in interfaceComponentResources
-
getLocale
Description copied from interface:ComponentResourcesCommon
Returns the locale for the page containing this component.- Specified by:
getLocale
in interfaceComponentResourcesCommon
- See Also:
-
getResourceSelector
Description copied from interface:ComponentResourcesCommon
Returns the selector used when constructing the component and its containing page.- Specified by:
getResourceSelector
in interfaceComponentResourcesCommon
-
getMessages
Description copied from interface:ComponentResources
Returns the message catalog for this component.- Specified by:
getMessages
in interfaceComponentResources
-
getElementName
Description copied from interface:ComponentResourcesCommon
Returns the name of element that represents the component in its template, or the provided default element name if the element was a component type (in the Tapestry namespace).- Specified by:
getElementName
in interfaceComponentResourcesCommon
- Parameters:
defaultElementName
- element name to return if the element name is not known (may be null)- Returns:
- the element name
-
getBlock
Description copied from interface:ComponentResourcesCommon
Returns a block from the component's template, referenced by its id.- Specified by:
getBlock
in interfaceComponentResourcesCommon
- Parameters:
blockId
- the id of the block (case insensitive)- Returns:
- the identified Block
- See Also:
-
getBlockParameter
Description copied from interface:ComponentResources
Used to access an informal parameter that's a Block.- Specified by:
getBlockParameter
in interfaceComponentResources
- Parameters:
parameterName
- the name of the informal parameter (case is ignored)- Returns:
- the informal Block parameter, or null if not bound
-
findBlock
Description copied from interface:ComponentResourcesCommon
As withComponentResourcesCommon.getBlock(String)
, but returns null if the block is not found.- Specified by:
findBlock
in interfaceComponentResourcesCommon
- Parameters:
blockId
- the id of the block (case insensitive)- Returns:
- the block, or null
-
getBaseResource
Description copied from interface:ComponentResources
Returns the base resource for the component, which will represent the class's location within the classpath (this is used to resolve relative assets).- Specified by:
getBaseResource
in interfaceComponentResources
-
getPageName
Description copied from interface:ComponentResourcesCommon
Returns the logical name of the page containing this component. This is the short name (it often appears in URLs)- Specified by:
getPageName
in interfaceComponentResourcesCommon
- Returns:
- the logical name of the page which contains this component
-
getInformalParameterBindings
Description copied from interface:InternalComponentResourcesCommon
Constructs a map linking informal parameters to the corresponding bindings.- Specified by:
getInformalParameterBindings
in interfaceInternalComponentResourcesCommon
- Returns:
- map, possible empty
-
getRenderVariable
Description copied from interface:ComponentResources
Returns a previously stored render variable.- Specified by:
getRenderVariable
in interfaceComponentResources
- Parameters:
name
- of the variable (case will be ignored)- Returns:
- the variable's value
-
storeRenderVariable
Description copied from interface:ComponentResources
Stores a render variable, accessible with the provided name.- Specified by:
storeRenderVariable
in interfaceComponentResources
- Parameters:
name
- of value to storevalue
- value to store (may not be null)
-
postRenderCleanup
Description copied from interface:InternalComponentResources
Allows the resources to cleanup any render-time only data.- Specified by:
postRenderCleanup
in interfaceInternalComponentResources
-
addPageLifecycleListener
Description copied from interface:ComponentResources
Adds a listener object that will be notified about page lifecycle events.- Specified by:
addPageLifecycleListener
in interfaceComponentResources
-
removePageLifecycleListener
Description copied from interface:ComponentResources
Removes a previously added listener.- Specified by:
removePageLifecycleListener
in interfaceComponentResources
-
addPageResetListener
Description copied from interface:InternalComponentResources
- Specified by:
addPageResetListener
in interfaceInternalComponentResources
- Parameters:
listener
- to register
-
getParameterConduit
Description copied from interface:InternalComponentResources
Gets a previously stored ParameterConduit, allowing PCs to be shared between a component and a mixin of that component.- Specified by:
getParameterConduit
in interfaceInternalComponentResources
-
setParameterConduit
Description copied from interface:InternalComponentResources
Stores a ParameterConduit for later access. Tthis occurs inside a component'sPageLifecycleListener.containingPageDidLoad()
lifecycle method.- Specified by:
setParameterConduit
in interfaceInternalComponentResources
-
getPropertyName
Description copied from interface:InternalComponentResources
Returns the name of the bound property ifPropBinding
is used and the expression points to a property on a bean (e.g. user.name). Otherwise this method returns null.- Specified by:
getPropertyName
in interfaceInternalComponentResources
- Parameters:
parameterName
- name of the parameter
-
render
Description copied from interface:RenderCommand
Invoked on an object to request that it render itself. This involves a mix of invoking methods on the writer, and queueing up additional commands (often, representing children of the object that was invoked) to perform additional rendering. In this way, rendering is a tail recursive algorithm, but is not implemented using tail recursion.- Specified by:
render
in interfaceRenderCommand
- Since:
- 5.3
-
getPageLifecycleCallbackHub
Description copied from interface:ComponentResources
Provides access to an object that can be used to register callbacks for page lifecycle events.- Specified by:
getPageLifecycleCallbackHub
in interfaceComponentResources
- Returns:
- the hub
-