You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-issues@incubator.apache.org by "Max Starets (JIRA)" <ad...@incubator.apache.org> on 2006/09/14 17:11:22 UTC

[jira] Updated: (ADFFACES-176) UIXCollection token cache - Intenal Oracle Bugfix Needs to be backported to Trinidad

     [ http://issues.apache.org/jira/browse/ADFFACES-176?page=all ]

Max Starets updated ADFFACES-176:
---------------------------------

    Status: Patch Available  (was: Open)

> UIXCollection token cache - Intenal Oracle Bugfix Needs to be backported to Trinidad
> ------------------------------------------------------------------------------------
>
>                 Key: ADFFACES-176
>                 URL: http://issues.apache.org/jira/browse/ADFFACES-176
>             Project: MyFaces ADF-Faces
>          Issue Type: Bug
>            Reporter: Max Starets
>            Priority: Critical
>
> In UIXCollection.java:
> Replace the following code:
>   /**
>    * Clears all the currency strings.
>    */
>   @Override
>   public final void encodeBegin(FacesContext context) throws IOException
>   {
>     _init();
>     _getCurrencyCache().clear();
>     _flushCachedModel();
>     Object assertKey = null;
>     assert ((assertKey = getRowKey()) != null) || true;
>     __encodeBegin(context);
>     // make sure that the rendering code preserves the currency:
>     assert _assertKeyPreserved(assertKey) : "CurrencyKey not preserved";
>   }
> with:
> /**
>    * Clear the rowKey-to-currencyString cache.
>    * The cache is not cleared immediately; instead it will be cleared 
>    * when {@link #encodeBegin} is called.
>    */
>   protected void clearCurrencyStringCache()
>   {
>     _getInternalState(true)._clearTokenCache = true;
>   }
>     /**
>    * Clears all the currency strings.
>    */
>   @Override
>   public final void encodeBegin(FacesContext context) throws IOException
>   {
>     _init();
>     InternalState istate = _getInternalState(true);
>     // we must not clear the currency cache everytime. only clear
>     // it in response to specific events: bug 4773659
>     if (istate._clearTokenCache)
>     {
>       istate._clearTokenCache = false;
>       _getCurrencyCache().clear();
>     }
>     _flushCachedModel();
>     Object assertKey = null;
>     assert ((assertKey = getRowKey()) != null) || true;
>     __encodeBegin(context);
>     // make sure that the rendering code preserves the currency:
>     assert _assertKeyPreserved(assertKey) : "CurrencyKey not preserved";
>   }
> In the inner InternalState class add the following member variable:
> private transient boolean _clearTokenCache = false;
> In UIXTableTemplate.java replace the following method:
> /**
>    * Delivers an event to the appropriate listeners.
>    * @param event
>    * @throws javax.faces.event.AbortProcessingException
>    */
> 	@Override
>   public void broadcast(FacesEvent event)
>     throws AbortProcessingException
>   {
>     // the order of processing is
>     // 1. do any default action handling
>     // 2. invoke any actionListener method binding
>     // 3. call all the registered ActionListener instances.
>     // Deliver to the default RangeChangeListener
>     if (event instanceof RangeChangeEvent)
>     {
>       RangeChangeEvent rEvent = (RangeChangeEvent) event;
>       int first = rEvent.getNewStart();
>       setFirst(first);
>       //pu: Implicitly record a Change for 'first' attribute
>       addAttributeChange("first", new Integer(first));
>       
>       if ((first == 0) && (rEvent.getNewEnd() == getRowCount()))
>       {
>         setShowAll(true);
>         //pu: Implicitly record a Change for 'showAll' attribute
>         addAttributeChange("showAll", Boolean.TRUE);
>       }
>       else if (isShowAll())
>       {
>         setShowAll(false);
>         //pu: Implicitly record a Change for 'showAll' attribute
>         addAttributeChange("showAll", Boolean.FALSE);
>       }
>       __broadcast(event, getRangeChangeListener());
>     }
>     else if (event instanceof RowDisclosureEvent)
>     {
>       RowDisclosureEvent eEvent = (RowDisclosureEvent) event;
>       RowKeySet set = getDisclosedRowKeys();
>       set.addAll(eEvent.getAddedSet());
>       set.removeAll(eEvent.getRemovedSet());
>       __broadcast(event, getRowDisclosureListener());
>     }
>     else if (event instanceof SortEvent)
>     {
>       SortEvent sEvent = (SortEvent) event;
>       setSortCriteria(sEvent.getSortCriteria());
>       __broadcast(event, getSortListener());
>     }
>     else if (event instanceof SelectionEvent)
>     {
>       //pu: Implicitly record a Change for 'selectionState' attribute
>       addAttributeChange("selectedRowKeys",
>                          getSelectedRowKeys());
>       __broadcast(event, getSelectionListener());
>     }
>     super.broadcast(event);
>   }
> with:
> /**
>    * Delivers an event to the appropriate listeners.
>    * @param event
>    * @throws javax.faces.event.AbortProcessingException
>    */
> 	@Override
>   public void broadcast(FacesEvent event)
>     throws AbortProcessingException
>   {
>     // the order of processing is
>     // 1. do any default action handling
>     // 2. invoke any actionListener method binding
>     // 3. call all the registered ActionListener instances.
>     // Deliver to the default RangeChangeListener
>     if (event instanceof RangeChangeEvent)
>     {
>       RangeChangeEvent rEvent = (RangeChangeEvent) event;
>       int first = rEvent.getNewStart();
>       setFirst(first);
>       //pu: Implicitly record a Change for 'first' attribute
>       addAttributeChange("first", new Integer(first));
>       
>       if ((first == 0) && (rEvent.getNewEnd() == getRowCount()))
>       {
>         setShowAll(true);
>         //pu: Implicitly record a Change for 'showAll' attribute
>         addAttributeChange("showAll", Boolean.TRUE);
>       }
>       else if (isShowAll())
>       {
>         setShowAll(false);
>         //pu: Implicitly record a Change for 'showAll' attribute
>         addAttributeChange("showAll", Boolean.FALSE);
>       }
>       // since the range is now different we can clear the currency cache:
>       clearCurrencyStringCache();
>       __broadcast(event, getRangeChangeListener());
>     }
>     else if (event instanceof RowDisclosureEvent)
>     {
>       RowDisclosureEvent eEvent = (RowDisclosureEvent) event;
>       RowKeySet set = getDisclosedRowKeys();
>       set.addAll(eEvent.getAddedSet());
>       set.removeAll(eEvent.getRemovedSet());
>       __broadcast(event, getRowDisclosureListener());
>     }
>     else if (event instanceof SortEvent)
>     {
>       SortEvent sEvent = (SortEvent) event;
>       setSortCriteria(sEvent.getSortCriteria());
>       __broadcast(event, getSortListener());
>     }
>     else if (event instanceof SelectionEvent)
>     {
>       //pu: Implicitly record a Change for 'selectionState' attribute
>       addAttributeChange("selectedRowKeys",
>                          getSelectedRowKeys());
>       __broadcast(event, getSelectionListener());
>     }
>     super.broadcast(event);
>   }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira