dynamiclist

Creates a new list by evaluating an expression on each item in an existing list.

The new list will have one entry corresponding to each entry in the existing list, with ordering preserved.

A dynamiclist expression specifies:

A dynamiclist can be used when the number of items in the desired list is not known as design time (i.e. it can differ from execution to execution, depending on the value of other attributes). If the number of items is fixed (i.e. is known at design time), consider using fixedlist instead.

<?xml version="1.0" encoding="UTF-8"?>
<RuleSet name="Example_dynamiclist"
  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>

    <Attribute name="isDisabled">
      <type>
        <javaclass name="Boolean"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

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

    <Attribute name="pets">
      <type>
        <javaclass name="List">
          <ruleclass name="Pet"/>
        </javaclass>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

  </Class>

  <Class name="Pet">
    <Initialization>
      <Attribute name="name">
        <type>
          <javaclass name="String"/>
        </type>
      </Attribute>
    </Initialization>

  </Class>

  <Class name="Household">

    <Attribute name="members">
      <type>
        <javaclass name="List">
          <ruleclass name="Person"/>
        </javaclass>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <Attribute name="containsDisabledPerson">
      <type>
        <javaclass name="Boolean"/>
      </type>
      <derivation>
        <any>
          <!-- gets a list of Booleans, corresponding
               to the isDisabled attribute on each
               Person members of this Household   -->
          <dynamiclist>
            <list>
              <reference attribute="members"/>
            </list>
            <listitemexpression>
              <reference attribute="isDisabled">
                <current/>
              </reference>
            </listitemexpression>
          </dynamiclist>
        </any>
      </derivation>
    </Attribute>

    <Attribute name="totalIncomeOfAdultMembers">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <sum>
          <dynamiclist>
            <list>
              <!-- filter the members down to
                   just the adults -->
              <filter>
                <list>
                  <reference attribute="members"/>
                </list>
                <listitemexpression>
                  <compare comparison=">=">
                    <reference attribute="age">
                      <current/>
                    </reference>
                    <Number value="18"/>
                  </compare>
                </listitemexpression>
              </filter>
            </list>
            <listitemexpression>
              <reference attribute="totalIncome">
                <current/>
              </reference>
            </listitemexpression>
          </dynamiclist>
        </sum>
      </derivation>
    </Attribute>

    <Attribute name="memberAges">
      <type>
        <javaclass name="List">
          <javaclass name="Number"/>
        </javaclass>
      </type>
      <derivation>
        <dynamiclist>
          <list>
            <reference attribute="members"/>
          </list>
          <listitemexpression>
            <reference attribute="age">
              <current/>
            </reference>
          </listitemexpression>
        </dynamiclist>
      </derivation>
    </Attribute>

    <Attribute name="youngestAge">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <min>
          <reference attribute="memberAges"/>
        </min>
      </derivation>
    </Attribute>

    <!-- get all the pets in the household,
         by joining together each person's
         list of pets -->
    <Attribute name="allPets">
      <type>
        <javaclass name="List">
          <ruleclass name="Pet"/>
        </javaclass>
      </type>
      <derivation>
        <joinlists>
          <!-- a list of list of pets, one
               list for each household
               member -->
          <dynamiclist>
            <list>
              <reference attribute="members"/>
            </list>
            <listitemexpression>
              <reference attribute="pets">
                <current/>
              </reference>
            </listitemexpression>
          </dynamiclist>

        </joinlists>
      </derivation>
    </Attribute>

  </Class>

</RuleSet>