Opérations de liste utiles

L'expression property (voir Property et property) permet d'appeler des méthodes Java "sécurisées".

Les jeux de règles contiennent souvent plusieurs instances de java.util.List.

La liste sécurisée des méthodes pour java.util.List est incluse au CER :

Figure 1. Liste sécurisée pour les méthodes java.util.List
# Safe list for java.util.List

            contains.safe=true
            containsAll.safe=true


            get.safe=true

            indexOf.safe=true
            isEmpty.safe=true
            lastIndexOf.safe=true
            size.safe=true
            subList.safe=true


            # not exposed
            hashCode.safe=false
            listIterator.safe=false
            iterator.safe=false
            toArray.safe=false

            # mutators - unsafe
            add.safe=false
            addAll.safe=false
            clear.safe=false
            remove.safe=false
            removeAll.safe=false
            retainAll.safe=false

Tandis que les descriptions de ces méthodes sont disponibles via le JavaDoc pour java.util.List, les propriétés les plus utiles sont incluses ici à titre de référence :

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

            <Class name="Person">

            <!-- Une seule personne (dans chaque foyer) sera
            désignée comme le chef de famille -->
            <Attribute name="isHeadOfHousehold">
            <type>
            <javaclass name="Boolean"/>
            </type>
            <derivation>
            <specified/>
            </derivation>
            </Attribute>

            <!-- Les enfants de cette personne. -->
            <Attribute name="children">
            <type>
            <javaclass name="List">
            <ruleclass name="Person"/>
            </javaclass>
            </type>
            <derivation>
            <specified/>
            </derivation>
            </Attribute>

            <!-- Si cette personne a des enfants.

            Tests the isEmpty property of List. -->
            <Attribute name="hasChildren">
            <type>
            <javaclass name="Boolean"/>
            </type>
            <derivation>
            <not>
            <property name="isEmpty">
            <object>
            <reference attribute="children"/>
            </object>
            </property>
            </not>
            </derivation>
            </Attribute>

            <Attribute name="numberOfChildren">
            <type>
            <javaclass name="Number"/>
            </type>
            <derivation>
            <property name="size">
            <object>
            <reference attribute="children"/>
            </object>
            </property>
            </derivation>
            </Attribute>

            <!-- Le deuxième enfant de cette personne, le cas échéant, sinon null -->
            <Attribute name="secondChild">
            <type>
            <ruleclass name="Person"/>
            </type>
            <derivation>
            <!-- Nous devons vérifier si la personne a deux
            enfants ou plus -->
            <choose>
            <type>
            <ruleclass name="Person"/>
            </type>
            <when>
            <condition>
            <compare comparison=">=">
            <reference attribute="numberOfChildren"/>
            <Number value="2"/>
            </compare>
            </condition>
            <value>
            <!-- Utilisez la propriété "get" pour obtenir le deuxième élément
            de la liste - indiqué par index 1 (les listes dans
            Java démarrent à zéro) -->
            <property name="get">
            <object>
            <reference attribute="children"/>
            </object>
            <arguments>
            <!-- Le nombre doit être converti en un nombre entier
            (comme demandé par List.subList). -->
            <property name="intValue">
            <object>
            <Number value="1"/>
            </object>
            </property>

            </arguments>
            </property>
            </value>
            </when>
            <otherwise>
            <!-- Cette personne n'a pas de deuxième enfant -->
            <value>
            <null/>
            </value>
            </otherwise>
            </choose>
            </derivation>
            </Attribute>

            <Attribute name="isChildOfHeadOfHousehold">
            <type>
            <javaclass name="Boolean"/>
            </type>
            <derivation>
            <property name="contains">
            <object>
            <!-- Les enfants du chef de famille -->
            <reference attribute="children">
            <!-- extrait l'objet de règle unique de la personne dont
            l'élément isHeadOfHousehold est égal à true-->
            <singleitem onEmpty="error" onMultiple="error">
            <readall ruleclass="Person">
            <match retrievedattribute="isHeadOfHousehold">
            <true/>
            </match>
            </readall>
            </singleitem>
            </reference>
            </object>
            <!-- vérifie si la liste des enfants du chef de famille
            contient la personne THIS -->
            <arguments>
            <this/>
            </arguments>
            </property>
            </derivation>
            </Attribute>

            </Class>

            </RuleSet>