incubator-adffaces-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Max Starets (JIRA)" <adffaces-iss...@incubator.apache.org>
Subject [jira] Created: (ADFFACES-176) UIXCollection token cache - Intenal Oracle Bugfix Needs to be backported to Trinidad
Date Wed, 13 Sep 2006 21:29:22 GMT
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

        

Mime
View raw message