dynamiclist

Crée une liste en évaluant une expression sur chaque élément d'une liste existante.

La nouvelle liste aura une entrée correspondante pour chaque entrée de la liste existante, avec l'organisation conservée.

Une expression dynamiclist indique ce qui suit :

Un élément dynamiclist peut être utilisé lorsque le nombre d'éléments de la liste souhaitée n'est pas connu au mo ment de la conception (par ex., il peut différer entre deux exécutions, selon la valeur des autres attributs). Si le nombre d'éléments est fixe (par exemple, non connu au moment de la conception), pensez à utiliser plutôt fixedlist.

<?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>
          <!-- Permet d'obtenir une liste de booléens, correspondant
               à l'attribut isDisabled sur chaque
               membre de ce ménage   -->
          <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>
              <!-- Filtrage des membres
                   sur les adultes uniquement -->
              <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>

    <!-- Obtention de tous les animaux du ménage,
         en regroupant la liste d'animaux
         de chaque personne -->
    <Attribute name="allPets">
      <type>
        <javaclass name="List">
          <ruleclass name="Pet"/>
        </javaclass>
      </type>
      <derivation>
        <joinlists>
          <!-- liste de listes d'animaux, une
               liste par membre du
               ménage -->
          <dynamiclist>
            <list>
              <reference attribute="members"/>
            </list>
            <listitemexpression>
              <reference attribute="pets">
                <current/>
              </reference>
            </listitemexpression>
          </dynamiclist>

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

  </Class>

</RuleSet>