dynamiclist

Crea una nueva lista evaluando una expresión en cada elemento de una lista existente.

La nueva lista tendrá una entrada correspondiente a cada entrada de la lista existente, con el orden conservado.

Una expresión dynamiclist especifica:

Se puede utilizar un dynamiclist cuando el número de elementos de la lista deseada no se conoce como tiempo de diseño (es decir, puede diferir de una ejecución a otra, en función del valor de otros atributos). Si el número de elementos es fijo (es decir, se conoce el tiempo de diseño), tenga en cuenta la posibilidad de utilizar fixedlist en su lugar.

<?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>
          <!-- obtiene una lista de booleanos, correspondiente
               al atributo isDisabled en cada
               miembro de persona de esta unidad familiar   -->
          <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>
              <!-- filtrar los miembros hacia abajo hasta
                   sólo los adultos -->
              <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>

    <!-- obtener todas las mascotas de la unidad familiar,
         uniendo la lista de
         mascotas de cada persona -->
    <Attribute name="allPets">
      <type>
        <javaclass name="List">
          <ruleclass name="Pet"/>
        </javaclass>
      </type>
      <derivation>
        <joinlists>
          <!-- una lista de mascotas, una
               lista para cada miembro de
               unidad familiar -->
          <dynamiclist>
            <list>
              <reference attribute="members"/>
            </list>
            <listitemexpression>
              <reference attribute="pets">
                <current/>
              </reference>
            </listitemexpression>
          </dynamiclist>

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

  </Class>

</RuleSet>