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 :
# 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 :
Renvoie true si cette liste ne contient aucun élément.
Renvoie le nombre d'éléments de cette liste.
Renvoie l'élément à l'emplacement spécifié de cette liste. Notez que, dans la mesure où CER transmet des valeurs numériques arrondies comme des instances de Number, vous devrez utiliser intValue pour convertir un élément Number en entier.
Renvoie true si cette liste contient l'élément spécifié.
<?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>