Package org.apache.tapestry5.internal.structure

## 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

    Constructors
    Constructor | Description
    --- | ---
    `InternalComponentResourcesImpl​(Page page, ComponentPageElement element, ComponentResources containerResources, ComponentPageElementResources elementResources, String completeId, String nestedId, Instantiator componentInstantiator, boolean mixin)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addPageLifecycleListener​(PageLifecycleListener listener)` | Adds a listener object that will be notified about page lifecycle events.
    `void` | `addPageResetListener​(PageResetListener listener)` | Delegates to `Page.addResetListener(org.apache.tapestry5.internal.structure.PageResetListener)`.
    `void` | `bindParameter​(String parameterName, Binding binding)` | Used during construction of the page to identify the binding for a particular parameter.
    `Link` | `createEventLink​(String eventType, Object... context)` | Creates a component event request link as a callback for this component.
    `Link` | `createFormEventLink​(String eventType, Object... context)` | Creates a component event request link as a callback for this component.
    `void` | `discardPersistentFieldChanges()` | Discards all persistent field changes for the page containing the component.
    `Block` | `findBlock​(String blockId)` | As with `ComponentResourcesCommon.getBlock(String)`, but returns null if the block is not found.
    `AnnotationProvider` | `getAnnotationProvider​(String parameterName)` | Returns an annotation provider, used to obtain annotations related to the parameter.
    `Resource` | `getBaseResource()` | Returns the base resource for the component, which will represent the class's location within the classpath (this is used to resolve relative assets).
    `Binding` | `getBinding​(String parameterName)` | Returns the binding for the given parameter name, or null.
    `Block` | `getBlock​(String blockId)` | Returns a block from the component's template, referenced by its id.
    `Block` | `getBlockParameter​(String parameterName)` | Used to access an informal parameter that's a Block.
    `Block` | `getBody()` | Returns the body of this component as a (possibly empty) block.
    `Type` | `getBoundGenericType​(String parameterName)` | Returns the generic type of the bound parameter, or null if the parameter is not bound.
    `Class` | `getBoundType​(String parameterName)` | Returns the actual type of the bound parameter, or null if the parameter is not bound.
    `String` | `getCompleteId()` | Returns a string consisting of the logical name of the containing page, and the `nested id` of this component, separated by a colon.
    `Component` | `getComponent()` | Returns the component this object provides resources for.
    `ComponentModel` | `getComponentModel()` | Returns the component model object that defines the behavior of the component.
    `Component` | `getContainer()` | Returns the component which contains this component, or null for the root component.
    `Messages` | `getContainerMessages()` | Returns the `Messages` from the container, or null if this is the root component (with no container).
    `ComponentResources` | `getContainerResources()` | Returns the `ComponentResources` for the container, or null if the this is the root component (that has no container).
    `String` | `getElementName()` | Returns the name of element that represents the component in its template, or null if not known.
    `String` | `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).
    `Component` | `getEmbeddedComponent​(String embeddedId)` | Returns an embedded component, given the component's id.
    `Object` | `getFieldChange​(String fieldName)` | Get the current persisted value of the field.
    `String` | `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.
    `Map<String,​Binding>` | `getInformalParameterBindings()` | Constructs a map linking informal parameters to the corresponding bindings.
    `List<String>` | `getInformalParameterNames()` | Returns a list of the names of any informal parameters bound to this component.
    `Locale` | `getLocale()` | Returns the locale for the page containing this component.
    `Location` | `getLocation()` | Returns the location associated with this object for error reporting purposes.
    `org.slf4j.Logger` | `getLogger()` | Returns the log instance associated with the component (which is based on the component or mixin's class name).
    `Messages` | `getMessages()` | Returns the message catalog for this component.
    `Component` | `getMixinByClassName​(String mixinClassName)` | Returns the mixin instance for the fully qualfied mixin class name.
    `String` | `getNestedId()` | Return a string consisting the concatenated ids of all containing components, separated by periods.
    `Component` | `getPage()` | Returns the page that contains this component.
    `PageLifecycleCallbackHub` | `getPageLifecycleCallbackHub()` | Provides access to an object that can be used to register callbacks for page lifecycle events.
    `String` | `getPageName()` | Returns the logical name of the page containing this component.
    `<T extends Annotation> T` | `getParameterAnnotation​(String parameterName, Class<T> annotationType)` | Obtains an annotation provided by a parameter.
    `ParameterConduit` | `getParameterConduit​(String parameterName)` | Gets a previously stored ParameterConduit, allowing PCs to be shared between a component and a mixin of that component.
    `String` | `getPropertyName​(String parameterName)` | Returns the name of the bound property if `PropBinding` is used and the expression points to a property on a bean (e.g.
    `Object` | `getRenderVariable​(String name)` | Returns a previously stored render variable.
    `ComponentResourceSelector` | `getResourceSelector()` | 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` | `isBound​(String parameterName)` | 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` | `isRendering()` | Returns true if the component is currently rendering, false otherwise.
    `void` | `persistFieldChange​(String fieldName, Object newValue)` | Posts a change to a persistent field.
    `void` | `postRenderCleanup()` | Allows the resources to cleanup any render-time only data.
    `void` | `removePageLifecycleListener​(PageLifecycleListener listener)` | 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.
    `String` | `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 invoking `ComponentResourcesCommon.triggerContextEvent(String, EventContext , ComponentEventCallback)`.

    - ### Methods inherited from class org.apache.tapestry5.commons.internal.util.LockSupport

      `acquireReadLock, downgradeWriteLockToReadLock, releaseReadLock, releaseWriteLock, takeWriteLock, upgradeReadLockToWriteLock`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### InternalComponentResourcesImpl

          public InternalComponentResourcesImpl​(Page page,
                                                ComponentPageElement element,
                                                ComponentResources containerResources,
                                                ComponentPageElementResources elementResources,
                                                String completeId,
                                                String nestedId,
                                                Instantiator componentInstantiator,
                                                boolean mixin)

  - ### Method Detail

    - #### isMixin

          public boolean 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 interface `ComponentResources`

    - #### getLocation

          public Location getLocation()

      Description copied from interface: `Locatable`
      Returns the location associated with this object for error reporting purposes.
      Specified by:
        `getLocation` in interface `Locatable`

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Object`

    - #### getComponentModel

          public ComponentModel getComponentModel()

      Description copied from interface: `ComponentResources`
      Returns the component model object that defines the behavior of the component.
      Specified by:
        `getComponentModel` in interface `ComponentResources`

    - #### getEmbeddedComponent

          public Component getEmbeddedComponent​(String embeddedId)

      Description copied from interface: `ComponentResources`
      Returns an embedded component, given the component's id.
      Specified by:
        `getEmbeddedComponent` in interface `ComponentResources`
      Parameters:
        `embeddedId` - selects the embedded component (case is ignored)

    - #### getFieldChange

          public Object getFieldChange​(String fieldName)

      Description copied from interface: `InternalComponentResources`
      Get the current persisted value of the field.
      Specified by:
        `getFieldChange` in interface `InternalComponentResources`
      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

          public String 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 interface `ComponentResourcesCommon`

    - #### hasFieldChange

          public boolean hasFieldChange​(String fieldName)

      Description copied from interface: `InternalComponentResources`
      Checks to see if there is a value stored for the indicated field.
      Specified by:
        `hasFieldChange` in interface `InternalComponentResources`

    - #### createEventLink

          public Link createEventLink​(String eventType,
                                      Object... context)

      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 interface `ComponentResourcesCommon`
      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

          public Link createFormEventLink​(String eventType,
                                          Object... context)

      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 interface `ComponentResourcesCommon`
      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

          public void 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 the `Session`) which will take effect in the next request (the attached page instance is not affected).
      Specified by:
        `discardPersistentFieldChanges` in interface `ComponentResources`

    - #### getElementName

          public String 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 interface `ComponentResources`
      Returns:
        the element name or null

    - #### getInformalParameterNames

          public List<String> getInformalParameterNames()

      Description copied from interface: `ComponentResources`
      Returns a list of the names of any informal parameters bound to this component.
      Specified by:
        `getInformalParameterNames` in interface `ComponentResources`
      Returns:
        the name sorted alphabetically
      See Also:
        `SupportsInformalParameters`

    - #### getInformalParameter

          public <T> T getInformalParameter​(String name,
                                            Class<T> type)

      Description copied from interface: `ComponentResources`
      Reads an informal parameter and coerces the bound value to the indicated type.
      Specified by:
        `getInformalParameter` in interface `ComponentResources`
      Parameters:
        `name` - name of informal parameter
        `type` - output value type
      Returns:
        instance of type

    - #### getBody

          public Block 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 interface `ComponentResourcesCommon`

    - #### hasBody

          public boolean 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 interface `ComponentResourcesCommon`

    - #### getCompleteId

          public String getCompleteId()

      Description copied from interface: `ComponentResourcesCommon`
      Returns a string consisting of the logical name of the containing page, and the `nested 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 interface `ComponentResourcesCommon`
      See Also:
        `ComponentSource.getComponent(String)`

    - #### getComponent

          public Component getComponent()

      Description copied from interface: `ComponentResources`
      Returns the component this object provides resources for.
      Specified by:
        `getComponent` in interface `ComponentResources`

    - #### isBound

          public boolean isBound​(String parameterName)

      Description copied from interface: `ComponentResources`
      Returns true if the named parameter is bound, false if not.
      Specified by:
        `isBound` in interface `ComponentResources`

    - #### 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 interface `ComponentResources`
      Parameters:
        `parameterName` - name of parameter to search for the annotation
        `annotationType` - the type of annotation
      Returns:
        the annotation if found or null otherwise

    - #### isRendering

          public boolean 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 interface `ComponentResourcesCommon`

    - #### triggerEvent

          public boolean triggerEvent​(String eventType,
                                      Object[] context,
                                      ComponentEventCallback handler)

      Description copied from interface: `ComponentResourcesCommon`
      A convenience method for invoking `ComponentResourcesCommon.triggerContextEvent(String, EventContext , ComponentEventCallback)`. Wraps the context values into an `EventContext`.
      Specified by:
        `triggerEvent` in interface `ComponentResourcesCommon`
      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 available
        `handler` - 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:
        `OnEventWorker`, `OnEvent`

    - #### 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 interface `ComponentResourcesCommon`
      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:
        `OnEventWorker`, `OnEvent`

    - #### getNestedId

          public String 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 interface `ComponentResourcesCommon`

    - #### getPage

          public Component 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 interface `ComponentResources`

    - #### isLoaded

          public boolean isLoaded()

      Description copied from interface: `InternalComponentResourcesCommon`
      Returns true if the component has finished loading. Initially, this value will be false.
      Specified by:
        `isLoaded` in interface `InternalComponentResourcesCommon`
      See Also:
        `PageLifecycleListener.containingPageDidLoad()`

    - #### persistFieldChange

          public void persistFieldChange​(String fieldName,
                                         Object newValue)

      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 the `page` to the `PersistentFieldManager`.
      Specified by:
        `persistFieldChange` in interface `InternalComponentResources`

    - #### bindParameter

          public void bindParameter​(String parameterName,
                                    Binding binding)

      Description copied from interface: `InternalComponentResourcesCommon`
      Used during construction of the page to identify the binding for a particular parameter.
      Specified by:
        `bindParameter` in interface `InternalComponentResourcesCommon`

    - #### getBoundType

          public Class getBoundType​(String parameterName)

      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 interface `ComponentResources`
      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:
        `Binding.getBindingType()`

    - #### getBoundGenericType

          public Type getBoundGenericType​(String parameterName)

      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 interface `ComponentResources`
      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:
        `Binding.getBindingType()`

    - #### getBinding

          public Binding getBinding​(String parameterName)

      Description copied from interface: `InternalComponentResourcesCommon`
      Returns the binding for the given parameter name, or null.
      Specified by:
        `getBinding` in interface `InternalComponentResourcesCommon`
      Parameters:
        `parameterName` - name of component parameter
      Returns:
        binding if bound, or null

    - #### getAnnotationProvider

          public AnnotationProvider getAnnotationProvider​(String parameterName)

      Description copied from interface: `ComponentResources`
      Returns an annotation provider, used to obtain annotations related to the parameter.
      Specified by:
        `getAnnotationProvider` in interface `ComponentResources`
      Parameters:
        `parameterName` - used to select the parameter (case is ignored)
      Returns:
        the annotation provider, or null if the parameter is not bound

    - #### getLogger

          public org.slf4j.Logger 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 interface `ComponentResourcesCommon`
      See Also:
        `ComponentModel.getLogger()`

    - #### getMixinByClassName

          public Component getMixinByClassName​(String mixinClassName)

      Description copied from interface: `InternalComponentResourcesCommon`
      Returns the mixin instance for the fully qualfied mixin class name.
      Specified by:
        `getMixinByClassName` in interface `InternalComponentResourcesCommon`
      Parameters:
        `mixinClassName` - fully qualified class name
      Returns:
        IllegalArgumentException if no such mixin is associated with the core component

    - #### renderInformalParameters

          public void renderInformalParameters​(MarkupWriter writer)

      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 interface `ComponentResources`
      Parameters:
        `writer` - to which `attributes` will be written

    - #### getContainer

          public Component 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 interface `ComponentResources`

    - #### getContainerResources

          public ComponentResources getContainerResources()

      Description copied from interface: `ComponentResources`
      Returns the `ComponentResources` 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 interface `ComponentResources`

    - #### getContainerMessages

          public Messages getContainerMessages()

      Description copied from interface: `ComponentResources`
      Returns the `Messages` 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 interface `ComponentResources`

    - #### getLocale

          public Locale getLocale()

      Description copied from interface: `ComponentResourcesCommon`
      Returns the locale for the page containing this component.
      Specified by:
        `getLocale` in interface `ComponentResourcesCommon`
      See Also:
        `ComponentResourcesCommon.getResourceSelector()`

    - #### getResourceSelector

          public ComponentResourceSelector getResourceSelector()

      Description copied from interface: `ComponentResourcesCommon`
      Returns the selector used when constructing the component and its containing page.
      Specified by:
        `getResourceSelector` in interface `ComponentResourcesCommon`

    - #### getMessages

          public Messages getMessages()

      Description copied from interface: `ComponentResources`
      Returns the message catalog for this component.
      Specified by:
        `getMessages` in interface `ComponentResources`

    - #### getElementName

          public String getElementName​(String defaultElementName)

      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 interface `ComponentResourcesCommon`
      Parameters:
        `defaultElementName` - element name to return if the element name is not known (may be null)
      Returns:
        the element name

    - #### getBlock

          public Block getBlock​(String blockId)

      Description copied from interface: `ComponentResourcesCommon`
      Returns a block from the component's template, referenced by its id.
      Specified by:
        `getBlock` in interface `ComponentResourcesCommon`
      Parameters:
        `blockId` - the id of the block (case insensitive)
      Returns:
        the identified Block
      See Also:
        `ComponentResourcesCommon.findBlock(String)`

    - #### getBlockParameter

          public Block getBlockParameter​(String parameterName)

      Description copied from interface: `ComponentResources`
      Used to access an informal parameter that's a Block.
      Specified by:
        `getBlockParameter` in interface `ComponentResources`
      Parameters:
        `parameterName` - the name of the informal parameter (case is ignored)
      Returns:
        the informal Block parameter, or null if not bound

    - #### findBlock

          public Block findBlock​(String blockId)

      Description copied from interface: `ComponentResourcesCommon`
      As with `ComponentResourcesCommon.getBlock(String)`, but returns null if the block is not found.
      Specified by:
        `findBlock` in interface `ComponentResourcesCommon`
      Parameters:
        `blockId` - the id of the block (case insensitive)
      Returns:
        the block, or null

    - #### getBaseResource

          public Resource 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 interface `ComponentResources`

    - #### getPageName

          public String 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 interface `ComponentResourcesCommon`
      Returns:
        the logical name of the page which contains this component

    - #### getInformalParameterBindings

          public Map<String,​Binding> getInformalParameterBindings()

      Description copied from interface: `InternalComponentResourcesCommon`
      Constructs a map linking informal parameters to the corresponding bindings.
      Specified by:
        `getInformalParameterBindings` in interface `InternalComponentResourcesCommon`
      Returns:
        map, possible empty

    - #### getRenderVariable

          public Object getRenderVariable​(String name)

      Description copied from interface: `ComponentResources`
      Returns a previously stored render variable.
      Specified by:
        `getRenderVariable` in interface `ComponentResources`
      Parameters:
        `name` - of the variable (case will be ignored)
      Returns:
        the variable's value

    - #### storeRenderVariable

          public void storeRenderVariable​(String name,
                                          Object value)

      Description copied from interface: `ComponentResources`
      Stores a render variable, accessible with the provided name.
      Specified by:
        `storeRenderVariable` in interface `ComponentResources`
      Parameters:
        `name` - of value to store
        `value` - value to store (may not be null)

    - #### postRenderCleanup

          public void postRenderCleanup()

      Description copied from interface: `InternalComponentResources`
      Allows the resources to cleanup any render-time only data.
      Specified by:
        `postRenderCleanup` in interface `InternalComponentResources`

    - #### addPageLifecycleListener

          public void addPageLifecycleListener​(PageLifecycleListener listener)

      Description copied from interface: `ComponentResources`
      Adds a listener object that will be notified about page lifecycle events.
      Specified by:
        `addPageLifecycleListener` in interface `ComponentResources`

    - #### removePageLifecycleListener

          public void removePageLifecycleListener​(PageLifecycleListener listener)

      Description copied from interface: `ComponentResources`
      Removes a previously added listener.
      Specified by:
        `removePageLifecycleListener` in interface `ComponentResources`

    - #### addPageResetListener

          public void addPageResetListener​(PageResetListener listener)

      Description copied from interface: `InternalComponentResources`
      Delegates to `Page.addResetListener(org.apache.tapestry5.internal.structure.PageResetListener)`.
      Specified by:
        `addPageResetListener` in interface `InternalComponentResources`
      Parameters:
        `listener` - to register

    - #### getParameterConduit

          public ParameterConduit getParameterConduit​(String parameterName)

      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 interface `InternalComponentResources`

    - #### setParameterConduit

          public void setParameterConduit​(String parameterName,
                                          ParameterConduit conduit)

      Description copied from interface: `InternalComponentResources`
      Stores a ParameterConduit for later access. Tthis occurs inside a component's `PageLifecycleListener.containingPageDidLoad()` lifecycle method.
      Specified by:
        `setParameterConduit` in interface `InternalComponentResources`

    - #### getPropertyName

          public String getPropertyName​(String parameterName)

      Description copied from interface: `InternalComponentResources`
      Returns the name of the bound property if `PropBinding` 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 interface `InternalComponentResources`
      Parameters:
        `parameterName` - name of the parameter

    - #### render

          public void render​(MarkupWriter writer,
                             RenderQueue queue)

      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 interface `RenderCommand`
      Since:
        5.3

    - #### getPageLifecycleCallbackHub

          public PageLifecycleCallbackHub 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 interface `ComponentResources`
      Returns:
        the hub