Blake,

Thanks.  Submitted a new patch with updated the documentation

On Sun, Aug 22, 2010 at 11:56 PM, Blake Sullivan
<blake.sulli...@oracle.com>wrote:

>  Kamran,
>
> I am +1 on the approach.  My only comments are about the documentation.
>
> I think that the following, terser version is more accurate
>
>  /**
>   * Hook called with the result of<code>createCollectionModel</code>.
>   * Subclasses can use this method to perform initialization after the
> CollectionModel
>   * is fully initialized.
>   * Subclassers should call super before accessing any component state to
> ensure
>   * that superclass initialization has been performed.
>   * @see #createCollectionModel
>   * @param model The model instance returned
> by<code><createCollectionModel</code>
>
>   */
>  protected void postCreateCollectionModel(CollectionModel model)
>  {
>    // do nothing
>  }
>
>
> The other part is that non-final subclasses need to document whether they
> require their subclassers to call super or not and this documentation should
> either remind subclassers that they must call super or document that they
> must look at their superclass documentation.  Requiring calls to super would
> be more future-proof and I have adjusted the documentation appropriately.
>
> The documentation form createCollectionModel should be changed as well.
>
> Also, though unlikely, this change would require changes if a subclass
> happened to be calling createCollectionModel() on its own and its superclass
> moved its initialization to postCreateCollectionModel()
>
> -- Blake Sullivan
>
>
> On 8/22/10 5:30 PM, Kamran Kashanian (JIRA) wrote:
>
>> Issue with Trinidad UIXCollection class 'createCollectionModel' method
>> ----------------------------------------------------------------------
>>
>>                  Key: TRINIDAD-1889
>>                  URL: https://issues.apache.org/jira/browse/TRINIDAD-1889
>>              Project: MyFaces Trinidad
>>           Issue Type: Bug
>>           Components: Components
>>     Affects Versions: 2.0.0.3-core
>>          Environment: All
>>             Reporter: Kamran Kashanian
>>          Attachments: uixcollection.patch
>>
>> The Trinidad UIXCollection class contains an abstract method called
>> 'createCollectionModel'.   Subclasses are supposed to override this method
>> and use it to create a CollectionModel instance for use by the component.
>>
>> Currently subclasses like UIXTable and UIXTree use 'createCollectionModel'
>> to get the component's 'value' attribute and wrap the object in the 'value'
>> attribute in a CollectionModel/TreeModel instance (if necessary) .
>>
>> UIXTable and UIXTree also perform other initializations in
>> 'createCollectionModel.  For example,  SelectedRowKeys and DisclosedRowKeys
>> sets are initialized in 'createCollectionModel'.
>>
>> The issue with the current design is that the component's reference to the
>> CollectionModel is not fully initialized until 'createCollectionModel'
>> returns a CollectionModel instance and the resulting model is stored in the
>> component's state by UIXCollection.
>>
>> So for example,  UIXTable and UIXTree should not be performing
>> initialization of component's attribute that depend on a fully initialized
>> CollectionModel reference inside the 'createCollectionModel'.
>>
>> The SelectedRowKeys and DisclosedRowKeys sets require a fully initialized
>> CollectionModel before they should be referenced.  Otherwise if these
>> attributes are EL-bound and a backing bean logic references the
>> CollectionModel in the getter method for SelectedRowKeys and
>> DisclosedRowKeys,  the backing bean may get an uninitialized CollectionModel
>> reference.
>>
>>
>> The proposal is to add the following method to UIXCollection:
>>
>>   /**
>>    * Called after<code>createCollectionModel</code>  when the model is
>> fully initialized
>>    * Subclasses can use this method to perform initialization of component
>> attributes
>>    * that should occur only after the CollectionModel is fully initialized
>> in
>>    *<code>createCollectionModel</code>
>>    * This is a do nothing implementation to avoid breaking existing code
>>    * * @see #createCollectionModel
>>    * @param model
>>    */
>>   protected void postCreateCollectionModel(CollectionModel model)
>>   {
>>     // do nothing
>>   }
>>
>>
>> This method will be called by UIXCollection after 'createCollectionModel'
>> returns and the component's reference to the CollectionModel is fully
>> initialized.  Any initialization of model-dependent attributes can then
>> occur in 'postCreateCollectionModel'
>>
>>
>>
>>
>>
>

Reply via email to