Operaciones de lista útiles

La expresión property (consulte Propiedad y property) permite la invocación de los métodos "safe" de Java.

Los conjuntos de reglas contienen normalmente muchas instancias de java.util.List.

La lista segura de métodos para java.util.List se incluye con CER:

Figura 1. Lista segura para métodos java.util.List
# Lista segura para 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


            # no expuesto
            hashCode.safe=false
            listIterator.safe=false
            iterator.safe=false
            toArray.safe=false

            # mutadores - no seguro
            add.safe=false
            addAll.safe=false
            clear.safe=false
            remove.safe=false
            removeAll.safe=false
            retainAll.safe=false

Mientras que la descripción de estos métodos está disponible a través del JavaDoc para java.util.List, aquí se incluyen las propiedades más útiles habitualmente para referencia del usuario:

<?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">

            <!-- Se designará exactamente a una persona (en cada unidad familiar)
            como cabeza de familia -->
            <Attribute name="isHeadOfHousehold">
            <type>
            <javaclass name="Boolean"/>
            </type>
            <derivation>
            <specified/>
            </derivation>
            </Attribute>

            <!-- Los hijos de esta persona. -->
            <Attribute name="children">
            <type>
            <javaclass name="List">
            <ruleclass name="Person"/>
            </javaclass>
            </type>
            <derivation>
            <specified/>
            </derivation>
            </Attribute>

            <!-- Indica si esta persona tiene hijos.

            Prueba la propiedad isEmpty de lista. -->
            <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>

            <!-- El segundo hijo de esta persona, si hay alguno, de lo contrario, nulo -->
            <Attribute name="secondChild">
            <type>
            <ruleclass name="Person"/>
            </type>
            <derivation>
            <!-- Tenemos que comprobar si la persona tiene dos
            o más hijos -->
            <choose>
            <type>
            <ruleclass name="Person"/>
            </type>
            <when>
            <condition>
            <compare comparison=">=">
            <reference attribute="numberOfChildren"/>
            <Number value="2"/>
            </compare>
            </condition>
            <value>
            <!-- Utilice la propiedad "get" para obtener el segundo elemento
            de la lista - indicado por el índice 1 (las listas en
            Java se basan en cero) -->
            <property name="get">
            <object>
            <reference attribute="children"/>
            </object>
            <arguments>
            <!-- El número se debe convertir a un entero
            (como lo requiere List.subList). -->
            <property name="intValue">
            <object>
            <Number value="1"/>
            </object>
            </property>

            </arguments>
            </property>
            </value>
            </when>
            <otherwise>
            <!-- Esta persona no tiene un segundo hijo -->
            <value>
            <null/>
            </value>
            </otherwise>
            </choose>
            </derivation>
            </Attribute>

            <Attribute name="isChildOfHeadOfHousehold">
            <type>
            <javaclass name="Boolean"/>
            </type>
            <derivation>
            <property name="contains">
            <object>
            <!-- Los hijos del cabeza de familia -->
            <reference attribute="children">
            <!-- recupera el único objeto de regla de persona que
            tiene isHeadOfHousehold igual a true-->
            <singleitem onEmpty="error" onMultiple="error">
            <readall ruleclass="Person">
            <match retrievedattribute="isHeadOfHousehold">
            <true/>
            </match>
            </readall>
            </singleitem>
            </reference>
            </object>
            <!-- comprobar si la lista de hijos del cabeza de familia
            contiene ESTA (THIS) persona -->
            <arguments>
            <this/>
            </arguments>
            </property>
            </derivation>
            </Attribute>

            </Class>

            </RuleSet>