apache > cocoon

- Home

# Filter Transformer

The filter transformer can be used to let only an amount of elements through in a given block.

- Name : filter
- Class: org.apache.cocoon.transformation.FilterTransformer
- Cacheable: no.

When you for example query a database and it returns too many rows too process at once, you might want to take a block of elements, process this block and ignore the rest for now. You can best compare it to a search on Google: they only return 10 results in one time, for more results you have to click on another block (page). It wouldn't be wise to process more than 10 elements in the pipeline if you only need to display 10 elements.

Assume that a query returns 56 row elements (by using the SQLTransformer) and that you only want to display the first 10 elements:

Output XML from the SQLTransformer:

          <rowset nrofrows="56" name="test"
    xmlns="http://apache.org/cocoon/SQL/2.0">
            <row>
              <!-- db record -->
            </row>
            <row>
              <!-- db record -->
            </row>
            <row>
              <!-- db record -->
            </row>

            ...

            <row>
              <!-- db record -->
            </row>
          </rowset>

By adding following lines to the sitemap, just under the SQLTransformer, you restrict the results to 10 elements in the first block:

          <map:transform type="filter">
            <map:parameter name="element-name" value="row"/>
            <map:parameter name="count" value="10"/>
            <map:parameter name="blocknr" value="1"/>
          </map:transform>

output XML:

          <rowset nrofrows="56" name="test"
    xmlns="http://apache.org/cocoon/SQL/2.0">
            <block id="1">
              <row>
                <!-- db record -->
              </row>

              <!-- total of 10 rows -->

              <row>
                <!-- db record -->
              </row>
            </block>
            <block id="2"/>
            <block id="3"/>
            <block id="4"/>
            <block id="5"/>
            <block id="6"/>
          </rowset>

To make it more dynamically, put something like {reqCount} and {reqBlock} in the values for count and blocknr respectively. These can be parameters from the request and they can be passed to the sitemap with an action.

The FilterTransformer is a standalone component, you don't need to use it in combination with the SQLTransformer.

Errors and Improvements? If you see any errors or potential improvements in this document please help us: View, Edit or comment on the latest development version (registration required).