BeanEditor should provide a "BeanEditContext" into the environment. (or 
PropertyEditContext should include the bean class).
---------------------------------------------------------------------------------------------------------------------------

                 Key: TAPESTRY-2592
                 URL: https://issues.apache.org/jira/browse/TAPESTRY-2592
             Project: Tapestry
          Issue Type: Improvement
          Components: quickstart
    Affects Versions: 5.0.14
         Environment: any
            Reporter: Robert Zeigler


PropertyEditor has the useful feature of providing the PropertyEditContext to 
the environment.  In this manner, custom blocks can be used to edit the current 
property and have the ability to "get" and "set" the property of the bean, 
display labels based on the property id, and so forth.

It can be useful, however, to have at runtime the knowledge of which bean type 
is being edited, or even have access to the bean under edit.
I propose a new "BeanEditContext" environment variable. The BeanEditor would 
push this object onto the environment.  The BeanEditContext would contain, at a 
minimum, a "getBeanClass" method which would return the class of the current 
bean being edited.

An alternative solution would be to add a "getBeanClass" method to the 
PropertyEditContext.

Use case and discussion:
I'm currently working on a tapestry-cayenne integration module.  One thing that 
would be nice is for the module to add all of the validation constraints for a 
particular property that are known to cayenne.  The ideal way to handle this 
would be to contribute a ValidationConstraintGenerator.  However, the 
generator's method is passed only the type of property being edited, and the 
annotations that were on that property.  Cayenne does not require that 
validation constraints be specified via annotations.  Hence, the integration 
module cannot rely on the presence of annotations to determine the validation 
constraints for a property type.  Nor is the type of property sufficient, as it 
is impossible to distinguish between the validations for two different "String" 
by the class "String" alone.  At the time of constraint generation, the 
PropertyEditContext is available from the environment, which helps the 
situation by providing the Property's name.  However, the PropertyEditContext 
does not provide information about the bean class being edited.  In order to 
lookup the wealth of information available from Cayenne for, eg, generating 
validators, I need to have this information available.  As stated, this could 
be achieved by a BeanEditContext, or by adding "getBeanClass" to PropertyEditor.

The main issue with using a BeanEditContext is that code which relies on that 
environment object being available could be called without the BeanEditor 
having a chance to setup the context, since PropertyEditor can be used outside 
of BeanEditor.  In practice, the PropertyEditor is rarely used outside the 
context of BeanEditor.
The advantage is that it is a separation of concerns: PropertyEditor doesn't 
care about the bean being edited.  It would require no changes to the existing 
PropertyEditor/validator/etc. API.

Unless I receive direction otherwise, I'll be contributing a patch for this 
feature which implements it as a BeanEditContext environment variable.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to