[jira] Created: (OFBIZ-1723) Provides the core code to iterate next and previous through a table or view

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[jira] Created: (OFBIZ-1723) Provides the core code to iterate next and previous through a table or view

Nicolas Malin (Jira)
Provides the core code to iterate next and previous through a table or view
---------------------------------------------------------------------------

                 Key: OFBIZ-1723
                 URL: https://issues.apache.org/jira/browse/OFBIZ-1723
             Project: OFBiz
          Issue Type: New Feature
          Components: ALL COMPONENTS
            Reporter: Skip Dever
            Priority: Minor


This enhancement provides the java code to allow an application to be written that allows the user to click "Next" and "Previous" buttons to cycle through a table or view.  Included in the download is EntityListIteratorContainer.java, and a sample bsh script and .ftl file that demonstrate how to use it.

EntityListIteratorContainer.java creates an instance of EntityListIterator that is used to provide the background services in an atomic way, i.e. each operation (re)creates an EntityListIterator bounded by begin/commit operations and the iterator is closed at the end of each operation.

To use the class, use one of the EntityListIterator based instantiators and then call find().  If find() is not called first, the list is assumed to be positioned before the beginning of the table and next() returns the first record.

Calling previous() when at the beginnng of the file returns the last record.

This code is self contained and the list goes away and is garbage collected after 5 minutes of non-use on a timer.

The bash script accounts for this by recreating the list and doing a find().

The key to using this is found in the sample ftl file. Which has the tag:

    <input type="hidden" name="listIterator" value="${listIterator}"/>

The bash script puts the listIterator in the context and a text reference of the form <url>?listIterator=org.ofbiz.base.util.EntityListIteratorContainer@xxxx is passed when the form is submitted.

This is dereferenced in the subsequent  bash script with the lines:

        String containerString = (String)parameters.get("listIterator");
        if(containerString != null)
                container = EntityListIteratorContainer.findInstance(containerString);

This retrieves the previously constructed listIterator and next() and previous() operations can be used on it as shown in the sample bash script.

It all works a charm.  I have tested this on a medium sized table with 10000 entries and the first find() consumes about 80msecs.  Subsequent next() and previous() calls consume < 20msecs.

What would make this even better is a way to add a listener on the servlet controller so that when the user moved to a different url base, the instance could be trashed.  But, alas, I can find no such interface.




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

Reply | Threaded
Open this post in threaded view
|

[jira] Updated: (OFBIZ-1723) Provides the core code to iterate next and previous through a table or view

Nicolas Malin (Jira)

     [ https://issues.apache.org/jira/browse/OFBIZ-1723?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Skip Dever updated OFBIZ-1723:
------------------------------

    Attachment: EntityListContainer.ZIP

Contains the base java file and a sample bash/ftl

I do not expect this to be adopted and so did not "ofbizize" the code.

> Provides the core code to iterate next and previous through a table or view
> ---------------------------------------------------------------------------
>
>                 Key: OFBIZ-1723
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-1723
>             Project: OFBiz
>          Issue Type: New Feature
>          Components: ALL COMPONENTS
>            Reporter: Skip Dever
>            Priority: Minor
>         Attachments: EntityListContainer.ZIP
>
>
> This enhancement provides the java code to allow an application to be written that allows the user to click "Next" and "Previous" buttons to cycle through a table or view.  Included in the download is EntityListIteratorContainer.java, and a sample bsh script and .ftl file that demonstrate how to use it.
> EntityListIteratorContainer.java creates an instance of EntityListIterator that is used to provide the background services in an atomic way, i.e. each operation (re)creates an EntityListIterator bounded by begin/commit operations and the iterator is closed at the end of each operation.
> To use the class, use one of the EntityListIterator based instantiators and then call find().  If find() is not called first, the list is assumed to be positioned before the beginning of the table and next() returns the first record.
> Calling previous() when at the beginnng of the file returns the last record.
> This code is self contained and the list goes away and is garbage collected after 5 minutes of non-use on a timer.
> The bash script accounts for this by recreating the list and doing a find().
> The key to using this is found in the sample ftl file. Which has the tag:
>     <input type="hidden" name="listIterator" value="${listIterator}"/>
> The bash script puts the listIterator in the context and a text reference of the form <url>?listIterator=org.ofbiz.base.util.EntityListIteratorContainer@xxxx is passed when the form is submitted.
> This is dereferenced in the subsequent  bash script with the lines:
> String containerString = (String)parameters.get("listIterator");
> if(containerString != null)
> container = EntityListIteratorContainer.findInstance(containerString);
> This retrieves the previously constructed listIterator and next() and previous() operations can be used on it as shown in the sample bash script.
> It all works a charm.  I have tested this on a medium sized table with 10000 entries and the first find() consumes about 80msecs.  Subsequent next() and previous() calls consume < 20msecs.
> What would make this even better is a way to add a listener on the servlet controller so that when the user moved to a different url base, the instance could be trashed.  But, alas, I can find no such interface.

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