filter

Crea una nueva lista que contiene todos los elementos de una lista existente que cumplen la condición de filtro.

La expresión filter contiene:

Normalmente, listitemexpression contiene uno o varios cálculos aplicados al elemento current en la lista.

El orden relativo de los elementos de lista en el resultado filtrado conservará el orden relativo de los elementos de lista en la lista original. Si ninguno de los elementos de la lista cumplen la condición de filtro, se devuelve una lista vacía.

<?xml version="1.0" encoding="UTF-8"?>
<RuleSet name="Example_filter"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation=
"http://www.curamsoftware.com/CreoleRulesSchema.xsd">
  <Class name="Person">

    <Attribute name="age">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <!-- El cónyuge de esta persona o
      nulo si no está casada -->
    <Attribute name="spouse">
      <type>
        <ruleclass name="Person"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <!-- Los hijos de esta persona -->
    <Attribute name="children">
      <type>
        <javaclass name="List">
          <ruleclass name="Person"/>
        </javaclass>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>



  </Class>



  <Class name="Household">

    <!-- Todas las personas de la unidad familiar -->
    <Attribute name="members">
      <type>
        <javaclass name="List">
          <ruleclass name="Person"/>
        </javaclass>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <!-- Todos los adultos de la unidad familiar -->
    <Attribute name="adultMembers">
      <type>
        <javaclass name="List">
          <ruleclass name="Person"/>
        </javaclass>
      </type>
      <derivation>
        <filter>
          <list>
            <reference attribute="members"/>
          </list>
          <listitemexpression>
            <compare comparison=">=">
              <reference attribute="age">
                <current/>
              </reference>
              <Number value="18"/>
            </compare>
          </listitemexpression>
        </filter>
      </derivation>
    </Attribute>

    <!-- Todos los progenitores solos de la unidad familiar -->
    <Attribute name="loneParents">
      <type>
        <javaclass name="List">
          <ruleclass name="Person"/>
        </javaclass>
      </type>
      <derivation>
        <filter>
          <list>
            <reference attribute="members"/>
          </list>
          <listitemexpression>
            <all>
              <fixedlist>
                <listof>
                  <javaclass name="Boolean"/>
                </listof>
                <members>

                  <!-- Sin cónyuge -->
                  <equals>
                    <reference attribute="spouse">
                      <current/>
                    </reference>
                    <null/>
                  </equals>
                  <!-- Como mínimo un hijo -->
                  <not>
                    <property name="isEmpty">
                      <object>
                        <reference attribute="children">
                          <current/>
                        </reference>
                      </object>
                    </property>
                  </not>
                </members>
              </fixedlist>
            </all>
          </listitemexpression>
        </filter>
      </derivation>
    </Attribute>

  </Class>

</RuleSet>